How to create a variables with_nested loop

How to create and use variables with_nested loop in ansible playbook?

Create a ansible config file as ansible.cfg file in your project directory:

[defaults]
inventory = hosts

Create a hosts file as hosts in the project directory

[webservers]
ansnode1 ansible_ssh_host=192.168.56.202 ansible_python_interpreter=/usr/bin/python
ansnode2 ansible_ssh_host=192.168.56.203 ansible_python_interpreter=/usr/bin/python

[webservers:vars]
ansible_port=22
http_port=8080

[dbservers]
ansnode3 ansible_ssh_host=192.168.56.204 ansible_python_interpreter=/usr/bin/python
ansnode4 ansible_ssh_host=192.168.56.205 ansible_python_interpreter=/usr/bin/python

[dev:children]
webservers
dbservers

Create a file named called as vars_with_nested_loop.yml in your project directory

---
 # YAML documents begin with the document separator ---

# the minus in YAML this indicates a list item. The playbook contains a list
# of plays, with each play being a dictionary
- hosts: all
  vars:
    users_with_items:
      - name: "alice"
        personal_directories:
          - "bob"
          - "carol"
          - "dan"
      - name: "bob"
        personal_directories:
          - "alice"
          - "carol"
          - "dan"
        common_directories:
          - ".ssh"
          - "loops"

  tasks:
    - name: create common users directories using with_nested loop
      file:
        dest: "/home/{{item.0.name}}/{{ item.1 }}"
        state: directory

      with_nested:
        - "{{ users_with_items }}"
        - "{{ common_directories }}"
# three dots indicate the end of a YAML document
...

Leave a Reply

Your email address will not be published. Required fields are marked *