--- # Helper tasks file for playbooks/app/provision_vms.yml # Provisions all envs for a single project and adds dynamic inventory hosts. - name: Set project definition ansible.builtin.set_fact: project_def: "{{ app_projects[project_key] }}" - name: "Preflight: validate env IPs are unique within project" ansible.builtin.assert: that: - (project_env_ips | length) == ((project_env_ips | unique) | length) fail_msg: "Duplicate IPs detected in app_projects.{{ project_key }}.envs (IPs must be unique): {{ project_env_ips }}" vars: project_env_ips: "{{ project_def.envs | dict2items | map(attribute='value.ip') | select('defined') | map('string') | map('regex_replace', '/.*$', '') | reject('equalto', '') | list }}" when: - project_def.envs is defined - (project_def.envs | length) > 0 - name: Provision each environment for project ansible.builtin.include_tasks: provision_one_env.yml loop: "{{ project_def.envs | dict2items }}" loop_control: loop_var: env_item