incus-contrib/ansible/playbooks/post-deploy.yml

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"