如何修复在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