如何修复在Ansible 2.7中使用yum + with_items时出现的警告

请注意以下警告内容

在使用Ansible 2.7的yum模块时,出现了以下警告。

[DEPRECATION WARNING]: Invoking "yum" only once while using a loop via
squash_actions is deprecated. Instead of using a loop to supply multiple items
and specifying `name: {{ item }}`, please use `name: ['git', 'gcc']` and remove
 the loop. This feature will be removed in version 2.11. Deprecation warnings
can be disabled by setting deprecation_warnings=False in ansible.cfg.

“实际上,这是在告诉你不要使用循环,但因为我不知道squash_actions是什么,所以我查了一下。”

“Squash_actions是什么”

ANSIBLE_SQUASH_ACTIONS被描述为以下方式。

大致上來說,這是一個在使用「with_」循環時進行優化的功能,可以通過列表形式進行傳遞。

当使用with_循环时,Ansible可以优化调用支持列表参数的模块的操作。模块将一次性对整个列表进行调用,而不是对每个项进行单独调用。此设置的默认值仅适用于某些软件包管理器,但可用于任何模块。目前,这仅支持具有名称或pkg参数的模块,并且仅当项是传递给参数的唯一内容时。

当具体如下所述时,不需要执行两次yum模块,而是可以自动将其转换为一个列表[‘git’,’gcc’],然后一次性执行。这很方便。

- yum: name={{ item }}
  with_items:
    - git
    - gcc

根据DEFAULT_SQUASH_ACTIONS,除了yum外,默认定义了apt、homebrew等软件包管理器。

校正方法

照着《Ansible 2.7迁移指南》和yum的指导执行以下操作。

- yum:
    name: "{{ packages }}"
    state: present
  vars:
    packages:
      - git
      - gcc

此外,对于yum模块,也可以如下方式来表述。这种方式更为简洁。

- yum:
    name:
      - git
      - gcc
bannerAds