-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathopenstack_grub.yml
More file actions
60 lines (58 loc) · 2.44 KB
/
openstack_grub.yml
File metadata and controls
60 lines (58 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
---
# 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(' ') }}