--- - name: "Seed detection + declarative group (merge {{ mf.name }})" ansible.builtin.set_fact: hardware_profile_active: "{{ mf.detected }}" os_family: "{{ mf.os_family }}" _nvidia_driver_resolved: "{{ mf.nvidia_driver_resolved | default('nouveau') }}" system_cfg: features: firmware: { enabled: true, microcode: true } gpu: { enabled: true } peripherals: enabled: true camera: "auto" fingerprint: "auto" audio: "auto" bluetooth: "auto" displaylink: false hardware: "{{ mf.hardware }}" - name: "Merge group over detection (merge {{ mf.name }})" ansible.builtin.include_tasks: ../../roles/environment/tasks/_merge_hardware_profile.yml - name: "Assert merged profile (merge {{ mf.name }})" ansible.builtin.assert: that: - (hardware_profile_active.fingerprint | bool) == (mf.expect_profile.fingerprint | bool) - (hardware_profile_active.bluetooth | bool) == (mf.expect_profile.bluetooth | bool) - _hardware_profile_kernel_params == (mf.hardware.kernel_params | default([])) fail_msg: "[merge {{ mf.name }}] profile FAIL {{ hardware_profile_active }}" - name: "Load package map (merge {{ mf.name }})" ansible.builtin.include_vars: file: ../../roles/bootstrap/vars/hardware.yml - name: "Resolve packages (merge {{ mf.name }})" ansible.builtin.include_tasks: ../../roles/bootstrap/tasks/_resolve_hardware_packages.yml - name: "Assert resolved package list (merge {{ mf.name }})" ansible.builtin.assert: that: - (mf.expect_contains | default([])) | difference(_hardware_packages) | length == 0 - (mf.expect_excludes | default([])) | intersect(_hardware_packages) | length == 0 fail_msg: "[merge {{ mf.name }}] FAIL got {{ _hardware_packages }}" success_msg: "[merge {{ mf.name }}] OK {{ _hardware_packages }}"