feat: golden-image build support (cloud-init on EL, selinux relabel, SSH wait)
This commit is contained in:
16
main.yml
16
main.yml
@@ -141,6 +141,15 @@
|
|||||||
ansible_ssh_extra_args: "-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
|
ansible_ssh_extra_args: "-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
|
||||||
ansible_python_interpreter: /usr/bin/python3
|
ansible_python_interpreter: /usr/bin/python3
|
||||||
|
|
||||||
|
- name: Wait for the rebooted host to accept SSH
|
||||||
|
when:
|
||||||
|
- post_reboot_can_connect | bool
|
||||||
|
ansible.builtin.wait_for_connection:
|
||||||
|
delay: 5
|
||||||
|
sleep: 5
|
||||||
|
# 600s: a selinux-enabled first boot relabels the filesystem and reboots once more.
|
||||||
|
timeout: 600
|
||||||
|
|
||||||
- name: Re-gather facts for target OS after reboot
|
- name: Re-gather facts for target OS after reboot
|
||||||
when:
|
when:
|
||||||
- post_reboot_can_connect | bool
|
- post_reboot_can_connect | bool
|
||||||
@@ -150,6 +159,13 @@
|
|||||||
- min
|
- min
|
||||||
- pkg_mgr
|
- pkg_mgr
|
||||||
|
|
||||||
|
- name: Register with the Satellite content source
|
||||||
|
when:
|
||||||
|
- post_reboot_can_connect | bool
|
||||||
|
- system_cfg.content.source == 'satellite'
|
||||||
|
- system_cfg.os | lower in os_family_rhel
|
||||||
|
ansible.builtin.include_tasks: "{{ playbook_dir }}/roles/configuration/tasks/satellite_register.yml"
|
||||||
|
|
||||||
- name: Install post-reboot packages
|
- name: Install post-reboot packages
|
||||||
when:
|
when:
|
||||||
- post_reboot_can_connect | bool
|
- post_reboot_can_connect | bool
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ bootstrap_common_conditional: >-
|
|||||||
+ (['cryptsetup', 'tpm2-tools'] if system_cfg.luks.enabled | bool else [])
|
+ (['cryptsetup', 'tpm2-tools'] if system_cfg.luks.enabled | bool else [])
|
||||||
+ (['qemu-guest-agent'] if hypervisor_type in ['libvirt', 'proxmox'] else [])
|
+ (['qemu-guest-agent'] if hypervisor_type in ['libvirt', 'proxmox'] else [])
|
||||||
+ (['open-vm-tools'] if hypervisor_type == 'vmware' else [])
|
+ (['open-vm-tools'] if hypervisor_type == 'vmware' else [])
|
||||||
|
+ (['cloud-init'] if system_cfg.features.cloud_init | bool else [])
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,16 @@
|
|||||||
register: configuration_setfiles_result
|
register: configuration_setfiles_result
|
||||||
changed_when: configuration_setfiles_result.rc == 0
|
changed_when: configuration_setfiles_result.rc == 0
|
||||||
|
|
||||||
|
# setfiles in the chroot misses paths created at first boot (e.g. /var/lib/sss),
|
||||||
|
# leaving unlabeled_t files that block services under enforcing SELinux. Force a
|
||||||
|
# complete relabel on first boot; fixfiles consumes and removes the flag.
|
||||||
|
- name: Force a complete SELinux relabel on first boot
|
||||||
|
when: os in ['almalinux', 'rocky', 'rhel'] and system_cfg.features.selinux.enabled | bool
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: /mnt/.autorelabel
|
||||||
|
state: touch
|
||||||
|
mode: "0644"
|
||||||
|
|
||||||
# Fedora: setfiles segfaults during bootstrap chroot relabeling, so SELinux
|
# Fedora: setfiles segfaults during bootstrap chroot relabeling, so SELinux
|
||||||
# is left permissive and expected to relabel on first boot.
|
# is left permissive and expected to relabel on first boot.
|
||||||
- name: Disable SELinux
|
- name: Disable SELinux
|
||||||
|
|||||||
@@ -58,6 +58,8 @@ system_defaults:
|
|||||||
version: ""
|
version: ""
|
||||||
filesystem: "ext4"
|
filesystem: "ext4"
|
||||||
name: ""
|
name: ""
|
||||||
|
# consumed by the golden produce/deploy wrappers, not the bootstrap itself
|
||||||
|
source: ""
|
||||||
id: ""
|
id: ""
|
||||||
cpus: 0
|
cpus: 0
|
||||||
memory: 0 # MiB
|
memory: 0 # MiB
|
||||||
@@ -101,6 +103,10 @@ system_defaults:
|
|||||||
bits: 512
|
bits: 512
|
||||||
pbkdf: "argon2id"
|
pbkdf: "argon2id"
|
||||||
features:
|
features:
|
||||||
|
# Bake cloud-init for the deterministic clone-deploy golden path; off by
|
||||||
|
# default (ansible-direct everywhere, smaller image). Package name is
|
||||||
|
# uniform across families.
|
||||||
|
cloud_init: false
|
||||||
cis:
|
cis:
|
||||||
enabled: false
|
enabled: false
|
||||||
profile: default # default|l1|l2 (default = current house behaviour)
|
profile: default # default|l1|l2 (default = current house behaviour)
|
||||||
|
|||||||
@@ -140,6 +140,7 @@
|
|||||||
pbkdf: "{{ system_raw.luks.pbkdf | string }}"
|
pbkdf: "{{ system_raw.luks.pbkdf | string }}"
|
||||||
# --- Feature flags ---
|
# --- Feature flags ---
|
||||||
features:
|
features:
|
||||||
|
cloud_init: "{{ system_raw.features.cloud_init | default(false) | bool }}"
|
||||||
cis:
|
cis:
|
||||||
enabled: "{{ system_raw.features.cis.enabled | bool }}"
|
enabled: "{{ system_raw.features.cis.enabled | bool }}"
|
||||||
profile: "{{ system_raw.features.cis.profile | default('default') | string }}"
|
profile: "{{ system_raw.features.cis.profile | default('default') | string }}"
|
||||||
|
|||||||
Reference in New Issue
Block a user