- Generate resolv.conf from inventory DNS settings instead of copying host file (Arch ISO has systemd-resolved stub 127.0.0.53) - Add XFS compat options for GRUB 2.06 and kernel 5.14 across LVM volumes, /boot partition, and data disks - Mount API filesystems (proc, sys, dev) into chroot for RPM scriptlets - Bypass GPG Sequoia validation with _pkgverify_level none - Tolerate grub2-common scriptlet warnings - Handle libvirt VM destroy gracefully during cleanup
67 lines
2.3 KiB
YAML
67 lines
2.3 KiB
YAML
---
|
|
- name: Bootstrap RHEL System
|
|
block:
|
|
- name: Install base packages in chroot environment
|
|
ansible.builtin.command: >-
|
|
dnf --releasever={{ os_version_major }} --repo=rhel{{ os_version_major }}-baseos
|
|
--installroot=/mnt
|
|
--setopt=install_weak_deps=False --setopt=optional_metadata_types=filelists
|
|
groupinstall -y core base standard
|
|
register: bootstrap_result
|
|
changed_when: bootstrap_result.rc == 0
|
|
failed_when:
|
|
- bootstrap_result.rc != 0
|
|
- "'grub2-common' not in (bootstrap_result.stderr | default(''))"
|
|
|
|
- name: Write resolv.conf into chroot
|
|
ansible.builtin.copy:
|
|
dest: /mnt/etc/resolv.conf
|
|
mode: "0644"
|
|
content: |
|
|
{% for dns in system_cfg.network.dns.servers %}
|
|
nameserver {{ dns }}
|
|
{% endfor %}
|
|
{% if system_cfg.network.dns.search | default([]) | length > 0 %}
|
|
search {{ system_cfg.network.dns.search | join(' ') }}
|
|
{% endif %}
|
|
|
|
- name: Ensure chroot RHEL DVD directory exists
|
|
ansible.builtin.file:
|
|
path: /mnt/usr/local/install/redhat/dvd
|
|
state: directory
|
|
mode: "0755"
|
|
|
|
- name: Bind mount RHEL DVD into chroot
|
|
ansible.posix.mount:
|
|
src: /usr/local/install/redhat/dvd
|
|
path: /mnt/usr/local/install/redhat/dvd
|
|
fstype: none
|
|
opts: bind
|
|
state: mounted
|
|
|
|
- name: Rebuild RPM database inside chroot
|
|
ansible.builtin.command: "{{ chroot_command }} rpm --rebuilddb"
|
|
register: bootstrap_rpm_rebuild_result
|
|
changed_when: bootstrap_rpm_rebuild_result.rc == 0
|
|
|
|
- name: Copy RHEL repo file into chroot environment
|
|
ansible.builtin.copy:
|
|
src: /etc/yum.repos.d/rhel.repo
|
|
dest: /mnt/etc/yum.repos.d/redhat.repo
|
|
mode: "0644"
|
|
remote_src: true
|
|
|
|
- name: Install additional packages in chroot
|
|
vars:
|
|
bootstrap_rhel_extra: >-
|
|
{{
|
|
lookup('vars', bootstrap_var_key)
|
|
| reject('equalto', '')
|
|
| join(' ')
|
|
}}
|
|
ansible.builtin.command: >-
|
|
{{ chroot_command }} dnf --releasever={{ os_version_major }}
|
|
--setopt=install_weak_deps=False install -y {{ bootstrap_rhel_extra }}
|
|
register: bootstrap_result
|
|
changed_when: bootstrap_result.rc == 0
|