
In some cases it might be required to supply extra kernel options through GRUB modification. Good example of that is enablement of hugepages [1]. Adding variable `openstack_host_grub_options` should allow to manage GRUB-related options reliably and out-of-the-box. [1] https://docs.openstack.org/nova/latest/admin/huge-pages.html#enabling-huge-pages-on-the-host Change-Id: I148ed1760d841dd99bc1e075b6200d6d7e835530 Signed-off-by: Dmitriy Rabotyagov <dmitriy.rabotyagov@cleura.com>
61 lines
2.4 KiB
YAML
61 lines
2.4 KiB
YAML
---
|
|
# 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(' ') }}
|