--- # Two code paths: # 1. Fresh run (system_cfg undefined): normalize from raw `system` input. # 2. Pre-computed (system_cfg already set, e.g. from main project's deploy_iac): # merge with bootstrap system_defaults to fill missing fields (luks, features, # etc.) that bootstrap expects but the main project doesn't set, then derive # convenience facts (hostname, os, os_version). - name: Normalize system and disk configuration when: system_cfg is not defined block: - name: Validate raw system input types ansible.builtin.include_tasks: _validate_input.yml - name: Normalize system configuration ansible.builtin.include_tasks: _normalize_system.yml - name: Normalize disk configuration ansible.builtin.include_tasks: _normalize_disks.yml - name: Check if pre-computed system_cfg needs enrichment when: system_cfg is defined ansible.builtin.set_fact: _bootstrap_needs_enrichment: "{{ hostname is not defined }}" - name: Merge pre-computed system_cfg with bootstrap system_defaults when: - system_cfg is defined - _bootstrap_needs_enrichment | default(false) | bool ansible.builtin.set_fact: system_cfg: "{{ system_defaults | combine(system | default({}), recursive=True) | combine(system_cfg, recursive=True) }}" - name: Apply mirror default for pre-computed system_cfg when: - system_cfg is defined - _bootstrap_needs_enrichment | default(false) | bool - system_cfg.mirror | default('') | string | trim | length == 0 vars: # Same as _normalize_system.yml — kept in sync manually. _mirror_defaults: debian: "https://deb.debian.org/debian/" ubuntu: "http://archive.ubuntu.com/ubuntu/" ubuntu-lts: "http://archive.ubuntu.com/ubuntu/" ansible.builtin.set_fact: system_cfg: >- {{ system_cfg | combine({ 'mirror': _mirror_defaults[system_cfg.os | default('') | string | lower] | default('') }, recursive=True) }} - name: Populate primary network fields from first interface (pre-computed) when: - system_cfg is defined - _bootstrap_needs_enrichment | default(false) | bool - system_cfg.network.interfaces | default([]) | length > 0 - system_cfg.network.bridge | default('') | string | length == 0 vars: _primary: "{{ system_cfg.network.interfaces[0] }}" ansible.builtin.set_fact: system_cfg: >- {{ system_cfg | combine({ 'network': system_cfg.network | combine({ 'bridge': _primary.bridge | default(''), 'vlan': _primary.vlan | default(''), 'ip': _primary.ip | default(''), 'prefix': _primary.prefix | default(''), 'gateway': _primary.gateway | default('') }) }, recursive=True) }} - name: Derive convenience facts from pre-computed system_cfg when: - system_cfg is defined - _bootstrap_needs_enrichment | default(false) | bool ansible.builtin.set_fact: hostname: "{{ system_cfg.name | default(inventory_hostname) }}" os: "{{ system_cfg.os | default('') }}" os_version: "{{ system_cfg.version | default('') | string }}" - name: Normalize disk configuration (pre-computed system_cfg) when: - system_cfg is defined - install_drive is not defined ansible.builtin.include_tasks: _normalize_disks.yml