Change variable in Ansible template based on group

前端 未结 4 1300
自闭症患者
自闭症患者 2021-02-05 19:25

I\'ve got an Ansible inventory file a bit like this:

[es-masters]
host1.my-network.com

[es-slaves]
host2.my-network.com
host3.my-network.com

[es:children]
es-m         


        
相关标签:
4条回答
  • 2021-02-05 19:58

    To avoid error with non existing group you should check first if the group exists:

    {% if 'es-masters' in group_names and ansible_fqdn in groups['es-masters'] %}
    node_master=true
    {% else %}
    node_master=false
    {% endif %}
    
    0 讨论(0)
  • 2021-02-05 20:01

    You do it the other way around. You check if the identifier (hostname or IP or whatever is in your inventory) is in the defined group. Not if the group is in the hostvars.

    {% if ansible_fqdn in groups['es-masters'] %}
    node_master=true
    {% else %}
    node_master=false
    {% endif %}
    

    But, what you better should do is this:

    Provide default in template

    # role_name/templates/template.j2
    node_master={{ role_name_node_master | default(true) }}
    

    Than override in group_vars

    # group_vars/es-masters.yml
    role_name_node_master: false
    
    0 讨论(0)
  • 2021-02-05 20:05

    If your inventory does not identify hosts with ansible_fqdn, ansible_hostname, etc., you can also use group_names to check if the current host has "es-masters" as one of its groups.

    {% if 'es-masters' in group_names %}
    node_master=true
    {% else %}
    node_master=false
    {% endif %}
    

    See https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#accessing-information-about-other-hosts-with-magic-variables

    0 讨论(0)
  • 2021-02-05 20:10
    {% if ansible_fqdn in groups['es-masters'] %}
        {% set node_master=true %}
    {% else %}
        {% set node_master=false %}
    {% endif %}
    

    maybe like this? change the var which named node_master, rather than use a txt

    0 讨论(0)
提交回复
热议问题