89 lines
2.6 KiB
YAML
89 lines
2.6 KiB
YAML
---
|
|
# 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"
|