mirror of
https://github.com/mulgadc/spinifex.git
synced 2026-10-22 20:26:44 +00:00
b7dea45ee0
Playbooks for preflight / teardown / install / reset covering the same ground as dev-install.sh, dev-setup.sh, reset-dev-env.sh. Existing bash scripts untouched — decide which to keep after parity testing. - roles/teardown + teardown catalog README track every known state source; add a task + row when a leak is reported. - roles/init gates smoketest on awsgw readiness (describe-regions poll). - roles/smoketest is dup-tolerant, retry-wrapped, auto-terminates the launched instance. - dev-install.yml skips build/install/init when a healthy environment is already present (4-signal health check), always runs smoketest. - dev-reset.yml captures region/az/external-mode scalars from the existing spinifex.toml and replays them into init. Plan: docs/development/improvements/ansible-dev-lifecycle.md (mulga). Bead: mulga-siv-9.
99 lines
3.1 KiB
YAML
99 lines
3.1 KiB
YAML
---
|
|
- name: Check required commands
|
|
ansible.builtin.command: "which {{ item }}"
|
|
register: preflight_required
|
|
loop: "{{ spinifex_required_commands }}"
|
|
changed_when: false
|
|
failed_when: preflight_required.rc != 0
|
|
loop_control:
|
|
label: "{{ item }}"
|
|
|
|
- name: Check optional commands
|
|
ansible.builtin.command: "which {{ item }}"
|
|
register: preflight_optional
|
|
loop: "{{ spinifex_optional_commands }}"
|
|
changed_when: false
|
|
failed_when: false
|
|
loop_control:
|
|
label: "{{ item }}"
|
|
|
|
- name: Warn on missing optional commands
|
|
ansible.builtin.debug:
|
|
msg: "WARN: optional command '{{ item.item }}' not found"
|
|
loop: "{{ preflight_optional.results }}"
|
|
when: item.rc != 0
|
|
loop_control:
|
|
label: "{{ item.item }}"
|
|
|
|
- name: Check OVN/OVS commands
|
|
ansible.builtin.command: "which {{ item }}"
|
|
register: preflight_ovn
|
|
loop: "{{ spinifex_ovn_commands }}"
|
|
changed_when: false
|
|
failed_when: false
|
|
loop_control:
|
|
label: "{{ item }}"
|
|
|
|
- name: Warn on missing OVN/OVS tools
|
|
ansible.builtin.debug:
|
|
msg: "WARN: OVN/OVS tool '{{ item.item }}' not found (required for VPC networking). Install: sudo apt-get install ovn-central ovn-host openvswitch-switch"
|
|
loop: "{{ preflight_ovn.results }}"
|
|
when: item.rc != 0
|
|
loop_control:
|
|
label: "{{ item.item }}"
|
|
|
|
- name: Record OVN tool availability
|
|
ansible.builtin.set_fact:
|
|
preflight_ovs_present: "{{ (preflight_ovn.results | selectattr('item','eq','ovs-vsctl') | selectattr('rc','eq',0) | list | length) > 0 }}"
|
|
|
|
- name: Check br-int bridge
|
|
ansible.builtin.command: ovs-vsctl br-exists br-int
|
|
register: preflight_brint
|
|
changed_when: false
|
|
failed_when: false
|
|
when: preflight_ovs_present
|
|
|
|
- name: Warn if br-int missing
|
|
ansible.builtin.debug:
|
|
msg: "WARN: br-int missing. Run scripts/setup-ovn.sh --management to initialise OVN networking."
|
|
when:
|
|
- preflight_ovs_present
|
|
- preflight_brint.rc | default(0) != 0
|
|
|
|
- name: Check sibling component directories
|
|
ansible.builtin.stat:
|
|
path: "{{ playbook_dir }}/../../../../{{ item }}/go.mod"
|
|
register: preflight_components
|
|
loop: "{{ spinifex_components }}"
|
|
loop_control:
|
|
label: "{{ item }}"
|
|
|
|
- name: Warn on missing component checkouts
|
|
ansible.builtin.debug:
|
|
msg: "WARN: component '{{ item.item }}' not found at expected sibling path (no go.mod). Run scripts/clone-deps.sh."
|
|
loop: "{{ preflight_components.results }}"
|
|
when: not item.stat.exists
|
|
loop_control:
|
|
label: "{{ item.item }}"
|
|
|
|
- name: Check port availability
|
|
ansible.builtin.shell: "ss -tlnH 'sport = :{{ item.port }}' | head -1"
|
|
register: preflight_ports
|
|
loop: "{{ spinifex_ports }}"
|
|
changed_when: false
|
|
failed_when: false
|
|
loop_control:
|
|
label: "{{ item.service }} ({{ item.port }})"
|
|
|
|
- name: Warn on occupied ports
|
|
ansible.builtin.debug:
|
|
msg: "WARN: port {{ item.item.port }} occupied (needed for {{ item.item.service }})"
|
|
loop: "{{ preflight_ports.results }}"
|
|
when: item.stdout | length > 0
|
|
loop_control:
|
|
label: "{{ item.item.service }}"
|
|
|
|
- name: Preflight summary
|
|
ansible.builtin.debug:
|
|
msg: "Preflight passed. Required: {{ spinifex_required_commands | join(', ') }}. Warnings above (if any) are non-fatal."
|