--- # Copyright 2025, Cleura AB. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - name: Fetch current GRUB parameters ansible.builtin.shell: . /etc/default/grub && echo ${GRUB_CMDLINE_LINUX_DEFAULT} register: _openstack_grub_default changed_when: false - name: Update GRUB options ansible.builtin.lineinfile: path: /etc/default/grub regex: '^GRUB_CMDLINE_LINUX_DEFAULT=' line: 'GRUB_CMDLINE_LINUX_DEFAULT="{{ _openstack_resulting_grub_record }}"' backup: true mode: '0644' owner: root group: root notify: - Update GRUB vars: # Create list of dicts from the parsed grub parameters, ie: # [{'key': 'console', 'value': 'tty0'}] _openstack_current_grub: >- {{ _openstack_grub_default.stdout | split(' ') | map('split', '=') | map('zip', ['key', 'value']) | map('map', 'reverse') | map('community.general.dict') }} # Fetch list of user-provided records which have `state: absent` _openstack_absent_grub_records: >- {{ openstack_host_custom_grub_options | selectattr('state', 'defined') | selectattr('state', 'eq', 'absent') | ansible.utils.remove_keys(target='state') }} # Remove records which should be removed from the list _openstack_filtered_custom_grub: >- {{ openstack_host_custom_grub_options | selectattr('state', 'defined') | rejectattr('state', 'eq', 'absent') + openstack_host_custom_grub_options | selectattr('state', 'undefined') }} # Combine the result back from dict to GRUB parameters _openstack_resulting_grub_record: |- {% set grub = [] %} {% for record in (_openstack_current_grub + _openstack_filtered_custom_grub) | unique | reject('in', _openstack_absent_grub_records) %} {% if 'value' in record %} {% set _ = grub.append(record['key'] ~ '=' ~ record['value']) %} {% else %} {% set _ = grub.append(record['key']) %} {% endif %} {% endfor %} {{ grub | join(' ') }}