【问题标题】:Define Ansible variable in a role with OS specific default which can be easily overridden在具有操作系统特定默认值的角色中定义 Ansible 变量,该默认值可以轻松覆盖
【发布时间】:2017-05-02 13:00:21
【问题描述】:

我正在编写一个可用于不同 Linux 操作系统系列的 Ansible 角色,并且每个操作系统系列的变量具有不同的默认值。

起初,我认为在角色中使用 include vars 任务会很容易设置,例如:

- name: Gather OS family variables
  include_vars: "{{ ansible_os_family|lower }}.yml"

my_role_variable: "Here is the default for Enterprise Linux"

myrole/vars/redhat.yml

my_role_variable: "Here is the default for Debian Linux"

myrole/vars/debian.yml

但是,就我而言,使用角色的剧本能够轻松覆盖默认值非常重要。

因此,我试图找出一种方法来为每个操作系统系列的变量设置不同的默认值,如上所述,但我希望变量是角色默认变量而不是角色包含变量。有没有办法做到这一点?

【问题讨论】:

    标签: ansible ansible-role


    【解决方案1】:

    使用ternary operator

    - name: Gather OS family variables
      include_vars: "{{ (override_os_family is defined) | ternary(override_os_family,ansible_os_family) | lower }}.yml"
    

    这样,如果定义了变量override_os_family,你的表达式就会有它的值,如果没有,它将使用ansible_os_family的值。


    例子:

    ---
    - hosts: localhost
      connection: local
      tasks:   
        - debug: msg="{{ (override_os_family is defined) | ternary(override_os_family,ansible_os_family) | lower }}.yml"
    
    - hosts: localhost
      connection: local
      vars:
        override_os_family: Lamarck
      tasks:   
        - debug: msg="{{ (override_os_family is defined) | ternary(override_os_family,ansible_os_family) | lower }}.yml"
    

    结果(摘录):

    ...
    
    TASK [debug] *******************************************************************
    ok: [localhost] => {
        "msg": "darwin.yml"
    }
    
    ...
    
    TASK [debug] *******************************************************************
    ok: [localhost] => {
        "msg": "lamarck.yml"
    

    【讨论】:

      【解决方案2】:

      如果在您的 defaults/main.yml 文件中包含类似以下内容会怎样?

      my_role_variable_default: "global default"
      my_role_variable_redhat: "redhat specific default"
      my_role_variable: "{{ lookup('vars', 'my_role_variable_'+ansible_os_family|lower, default=my_role_variable_default) }}"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-21
        • 2015-05-22
        • 2011-12-20
        • 1970-01-01
        • 2020-08-10
        • 2020-06-07
        • 2016-05-08
        相关资源
        最近更新 更多