# inventories/group_vars/all/vars.yml [...] web_root: /var/www/html do_droplets: - short_name: long_name: domain: d_index: DirectoryIndex default.htm index.php index.html doc_root: "{{ web_root }}/public" framework: laravel - short_name: [...] [...] # playbooks/provision.yml --- - name: Provision the droplets hosts: localhost tags: - droplet - laravel connection: local gather_facts: false tasks: - name: Ensure droplets exist digital_ocean_droplet: oauth_token: "{{ lookup('env', 'DO_API_TOKEN') }}" state: present name: "{{ item.short_name | mandatory }}-01" backups: yes private_networking: yes size: s-1vcpu-1gb image: lamp-20-04 region: nyc3 ipv6: yes ssh_keys: unique_name: yes wait: yes wait_timeout: 300 tags: - "{{ item.short_name | mandatory }}" loop: "{{ do_droplets }}" register: droplet - name: Add new hosts to inventory add_host: name: "{{ item.data.droplet.name | mandatory }}" ansible_host: "{{ item.data.ip_address | mandatory }}" groups: - do - do_{{ item.item.short_name | mandatory }} - "{{ item.item.framework | default('static_html') }}" short_name: "{{ item.item.short_name | mandatory }}" long_name: "{{ item.item.long_name | default('') }}" domain: "{{ item.item.domain | mandatory }}" d_index: "{{ item.item.d_index | default('') }}" doc_root: "{{ item.item.doc_root | default('/var/www/html') }}" when: item.data is defined changed_when: false loop: "{{ droplet.results }}" loop_control: label: "{{ item.data.droplet.name }}"