首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >module_defaults和封装模块

module_defaults和封装模块
EN

Stack Overflow用户
提问于 2020-10-24 19:08:57
回答 1查看 652关注 0票数 0

因此,我试图为我们的环境编写角色和角色,这些角色和角色尽可能地与操作系统无关。

我们使用RHEL、Debian、Gentoo和FreeBSD。

Gentoo需要getbinpkg,我可以为使用module_defaultscommunity.general.portage的所有调用设置默认设置。

但是,我可以也确实可以通过设置变量和调用package在其他3个系统上安装一些软件包。

以下两种方法都适用于Gentoo,但由于第一个示例中未知的getbinpkg选项,以及在第二个示例中没有移植的系统上特别使用portage,所以在Debian等上都失败了。

代码语言:javascript
复制
- 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来限制设置默认值,有趣的是它被完全忽略了。

代码语言:javascript
复制
- hosts: localhost
  module_defaults:
    package:
      getbinpkg: yes
    when: ansible_facts['distribution'] == 'Gentoo'
  tasks:
    - package:
        name: {{ packages }}

我真的不想和EMERGE_DEFAULT_OPTS捣乱。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-25 09:01:33

Q:"How来加载特定于发行版的 https://docs.ansible.com/ansible/latest/user_guide/playbooks_module_defaults.html#module-defaults"

答:当剧本开始时,变量ansible_distribution和其他设置事实是不可用的。当未禁用时,您可以在游戏手册“收集事实”中看到第一项任务。解决方案是收集事实,并在第一次播放中声明一个带有模块默认值的字典,并在剧本的其余部分使用它们。例如

代码语言:javascript
复制
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:

给出

代码语言:javascript
复制
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=0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64517066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档