--- - name: Load desktop package definitions ansible.builtin.include_vars: file: desktop.yml - name: Resolve desktop packages vars: _de: "{{ system_cfg.features.desktop.environment }}" _family_pkgs: "{{ bootstrap_desktop_packages[os_family] | default({}) }}" _de_config: "{{ _family_pkgs[_de] | default({}) }}" _base: "{{ bootstrap_desktop_base_packages[os_family] | default([]) }}" _requested_groups: "{{ system_cfg.features.desktop.groups | default([]) }}" _group_pkgs: >- {{ _requested_groups | select('in', desktop_package_groups) | map('extract', desktop_package_groups) | map(attribute=os_family, default=[]) | list | sum(start=[]) }} ansible.builtin.set_fact: # GNOME ships under different dnf environment groups: Fedora uses # workstation-product-environment, enterprise RHEL/Rocky/Alma use # graphical-server-environment ("Server with GUI"). _desktop_groups: >- {{ ['graphical-server-environment'] if (_de == 'gnome' and os_family == 'RedHat' and os != 'fedora') else (_de_config.groups | default([])) }} _desktop_packages: >- {{ ((_de_config.packages | default([])) + _base + _group_pkgs) | reject('equalto', '') | unique | list }} - name: Validate desktop environment is supported ansible.builtin.assert: that: - system_cfg.features.desktop.environment in (bootstrap_desktop_packages[os_family] | default({})) fail_msg: >- Desktop environment '{{ system_cfg.features.desktop.environment }}' is not defined for os_family '{{ os_family }}'. Supported: {{ (bootstrap_desktop_packages[os_family] | default({})).keys() | join(', ') }} quiet: true - name: Install desktop package groups when: _desktop_groups | length > 0 ansible.builtin.command: >- {{ chroot_command }} dnf --releasever={{ os_version_major }} --setopt=install_weak_deps=False group install -y {{ _desktop_groups | join(' ') }} register: _desktop_group_result changed_when: _desktop_group_result.rc == 0 - name: Install desktop packages when: _desktop_packages | length > 0 vars: _install_commands: RedHat: >- {{ chroot_command }} dnf --releasever={{ os_version_major }} --setopt=install_weak_deps=False install -y {{ _desktop_packages | join(' ') }} Debian: >- {{ chroot_command }} apt install -y --install-recommends {{ _desktop_packages | join(' ') }} Archlinux: >- pacstrap /mnt {{ _desktop_packages | join(' ') }} ansible.builtin.command: "{{ _install_commands[os_family] }}" register: _desktop_pkg_result changed_when: _desktop_pkg_result.rc == 0