How to assign an array to a variable in an Ansible-Playbook

前端 未结 5 785
南方客
南方客 2020-12-23 14:49

In a playbook I got the following code:

---
- hosts: db
  vars:
    postgresql_ext_install_contrib: yes
    postgresql_pg_hba_passwd_hosts: [\'10.129.181.241         


        
5条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-23 15:21

    You can assign a list to variable by set_fact and ansible filter plugin.

    Put custom filter plugin to filter_plugins directory like this:

    (ansible top directory)
    site.yml
    hosts
    filter_plugins/
        to_group_vars.py
    

    to_group_vars.py convert hostvars into list that selected by group.

    from ansible import errors, runner
    import json
    
    def to_group_vars(host_vars, groups, target = 'all'):
        if type(host_vars) != runner.HostVars:
            raise errors.AnsibleFilterError("|failed expects a HostVars")
    
        if type(groups) != dict:
            raise errors.AnsibleFilterError("|failed expects a Dictionary")
    
        data = []
        for host in groups[target]:
            data.append(host_vars[host])
        return data
    
    class FilterModule (object):
        def filters(self):
            return {"to_group_vars": to_group_vars}
    

    Use like this:

    ---
    - hosts: all
      tasks:
      - set_fact:
          web_ips: "{{hostvars|to_group_vars(groups, 'web')|map(attribute='ansible_eth0.ipv4.address')|list }}"
      - debug:
          msg: "web ip is {{item}}/32"
        with_items: web_ips
    

提交回复
热议问题