--- # post-deploy.yml — Runs after Aether creates an instance # # Aether passes extra vars: # vm_name — instance hostname # vm_ip — IP address assigned by Aether # environment — deployment environment (dev, staging, prod) # owner — VM owner or team # cost_center — billing/cost allocation # (plus any custom tags from the blueprint) # # AWX job template must have "ask_variables_on_launch: true" so Aether # can inject these variables at runtime. - name: Post-deploy — configure newly provisioned instance hosts: localhost gather_facts: false connection: local vars: # Defaults (overridden by Aether extra vars) vm_name: "{{ vm_name | default('unknown') }}" vm_ip: "{{ vm_ip | default('') }}" environment_name: "{{ environment | default('lab') }}" owner: "{{ owner | default('unassigned') }}" cost_center: "{{ cost_center | default('') }}" ssh_user: root base_packages: - curl - vim - htop - jq - tmux - rsync - unattended-upgrades pre_tasks: - name: Validate required variables ansible.builtin.assert: that: - vm_ip | length > 0 - vm_name | length > 0 fail_msg: "vm_ip and vm_name must be provided by Aether" - name: Add target host to in-memory inventory ansible.builtin.add_host: name: "{{ vm_ip }}" groups: target ansible_user: "{{ ssh_user }}" ansible_host: "{{ vm_ip }}" - name: Wait for instance and apply base configuration hosts: target gather_facts: false pre_tasks: - name: Wait for SSH connectivity (up to 5 minutes) ansible.builtin.wait_for_connection: delay: 5 timeout: 300 - name: Gather facts after connection ansible.builtin.setup: roles: - role: base-config vars: hostname: "{{ hostvars['localhost']['vm_name'] }}" deploy_environment: "{{ hostvars['localhost']['environment_name'] }}" deploy_owner: "{{ hostvars['localhost']['owner'] }}" packages: "{{ hostvars['localhost']['base_packages'] }}" - name: Log deployment hosts: localhost gather_facts: false connection: local tasks: - name: Record deployment in ledger ansible.builtin.lineinfile: path: /var/log/awx-deploy-ledger.log line: >- {{ ansible_date_time.iso8601 | default(lookup('pipe', 'date -Iseconds')) }} DEPLOY vm_name={{ vm_name }} vm_ip={{ vm_ip }} environment={{ environment_name }} owner={{ owner }} cost_center={{ cost_center }} status=success create: true mode: "0644"