因此,我试图为我们的环境编写角色和角色,这些角色和角色尽可能地与操作系统无关。
我们使用RHEL、Debian、Gentoo和FreeBSD。
Gentoo需要getbinpkg,我可以为使用module_defaults对community.general.portage的所有调用设置默认设置。
但是,我可以也确实可以通过设置变量和调用package在其他3个系统上安装一些软件包。
以下两种方法都适用于Gentoo,但由于第一个示例中未知的getbinpkg选项,以及在第二个示例中没有移植的系统上特别使用portage,所以在Debian等上都失败了。
- hosts: localhost
module_defaults:
package:
getbinpkg: yes
tasks:
- package:
name: {{ packages }}
- hosts: localhost
module_defaults:
community.general.portage:
getbinpkg: yes
tasks:
- community.general.portage:
name: {{ packages }}有没有办法将module_defaults“通过”package模块传递给portage模块?
我确实尝试过when on module_defaults来限制设置默认值,有趣的是它被完全忽略了。
- hosts: localhost
module_defaults:
package:
getbinpkg: yes
when: ansible_facts['distribution'] == 'Gentoo'
tasks:
- package:
name: {{ packages }}我真的不想和EMERGE_DEFAULT_OPTS捣乱。
发布于 2020-10-25 09:01:33
Q:"How来加载特定于发行版的 https://docs.ansible.com/ansible/latest/user_guide/playbooks_module_defaults.html#module-defaults"
答:当剧本开始时,变量ansible_distribution和其他设置事实是不可用的。当未禁用时,您可以在游戏手册“收集事实”中看到第一项任务。解决方案是收集事实,并在第一次播放中声明一个带有模块默认值的字典,并在剧本的其余部分使用它们。例如
shell> cat pb.yml
- hosts: test_01
gather_subset: min
tasks:
- debug:
var: ansible_distribution
- set_fact:
my_module_defaults:
Ubuntu:
debug:
msg: "Ubuntu"
FreeBSD:
debug:
msg: "FreeBSD"
- hosts: test_01
gather_facts: false
module_defaults: "{{ my_module_defaults[ansible_distribution] }}"
tasks:
- debug:给出
shell> ansible-playbook pb.yml
PLAY [test_01] ****
TASK [Gathering Facts] ****
ok: [test_01]
TASK [debug] ****
ok: [test_01] =>
ansible_distribution: FreeBSD
TASK [set_fact] ****
ok: [test_01]
PLAY [test_01] ****
TASK [debug] ****
ok: [test_01] =>
msg: FreeBSD
PLAY RECAP ****
test_01: ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0https://stackoverflow.com/questions/64517066
复制相似问题