带循环的ansible apt-key模块

ansible apt-key module with loop

我正在配置一个需要添加多个 GPG 密钥的系统。我正在尝试简化流程并遵循 DRY 原则。

我有像这样从 vars 列表安装的 apt 包:

- name: Install packages
  apt: name={{ apt_packages }}

我的 vars.yml 看起来像这样:

apt_packages:
  - tilix
  - terraform
  - ansible
  - opera

这是有效的,因为 apt 模块接受逗号分隔的输入并进行相应的解析。

所以我试图在使用 apt_key 模块时实现类似的过程,但我似乎无法让它工作。以下是我所做的一些尝试:

- name Add keys
  apt_key:
    url: url="{{ items }}"
    loop: "{{ gpg_keys }}"
    state: present

- name: Add GPG Keys
  apt_key:
    url: url="{{ gpg_keys }}"
    state: present

两者都抛出不同的错误。

是否可以使用 apt-key 模块做这样的事情?显然,我试图避免为每个要添加的键设置一个单独的调用方,因为会有很多键,我希望以后能够通过简单地在 vars.yml 中附加列表来添加其他键。

你的任务有几个小错误。
正确的做法是这样的:

- name: Add keys
  apt_key:
    url: "{{ item }}"
    state: present
  loop: "{{ gpg_keys }}"
  • 您已经有了密钥 url,因此在前面加上 url= 是不正确的
  • loop 是任务的参数而不是 apt_key 模块的参数,因此它需要缩进到 apt_key 的级别(不像 url是模型的参数)

旁注:

  • 您还需要确保 gpg_keys 包含一个列表,类似于 apt_packages
  • aptname 参数接受一个列表,正如您在 vars.yml 中正确定义的那样,没有逗号分隔的字符串。 (你已经做对了)

文档: