Skip to content

Commit ea525b2

Browse files
committed
[edpm_kernel]Factor out hugepages to a task file
To be able to reuse the code in the edpm_pre_adoption_validation role it is moved to a separate task file. Related: OSPRH-5714
1 parent 602e342 commit ea525b2

File tree

2 files changed

+89
-71
lines changed

2 files changed

+89
-71
lines changed
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
---
2+
# Copyright 2019 Red Hat, Inc.
3+
# All Rights Reserved.
4+
#
5+
# Licensed under the Apache License, Version 2.0 (the "License"); you may
6+
# not use this file except in compliance with the License. You may obtain
7+
# a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing, software
12+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14+
# License for the specific language governing permissions and limitations
15+
# under the License.
16+
17+
- name: EDPM Hugepages configuration
18+
vars:
19+
_converted_hugepages: {}
20+
_nonconfig_hugepages: {}
21+
_hugepages_modification: false
22+
when: edpm_kernel_hugepages | length
23+
block:
24+
- name: Rewrite edpm_kernel_hugepages to use integers as keys
25+
ansible.builtin.set_fact:
26+
_edpm_kernel_hugepages: "{{ _edpm_kernel_hugepages | default({}) | combine({hp.key | int: hp.value}) }}"
27+
loop: "{{ edpm_kernel_hugepages | dict2items }}"
28+
loop_control:
29+
loop_var: hp
30+
31+
- name: Parsing running hugepage configuration from /proc/cmdline
32+
when: >
33+
"default_hugepagesz" in cmdline
34+
ansible.builtin.import_tasks: hugepages_parsing.yaml
35+
vars:
36+
cmdline_text: "{{ cmdline }}"
37+
38+
- name: Validating hugepage config from /proc/cmdline against EDPM parameter
39+
ansible.builtin.import_tasks: hugepages_validations.yaml
40+
41+
- name: Rewrite kernel args
42+
when: _hugepages_modification
43+
block:
44+
- name: Warn about possible modifications
45+
ansible.builtin.debug:
46+
msg: |
47+
EDPM hugepage modification differs from how the host is actually having.
48+
Current default pagesize: {{ _configured_default_size | default("None configured") }}
49+
EDPM default pagesize: {{ _edpm_default_hugepages }}
50+
Desired default pagesize: {{ _desired_default_hugepages }}
51+
52+
From EDPM Hugepages configuration:
53+
{% for pagesize, config in _edpm_kernel_hugepages.items() %}
54+
- {{ pagesize }}
55+
expected: {{ config.count }} pages
56+
default: {{ config.default | default(false) }}
57+
current: {{ _converted_hugepages.get(pagesize | int, 0) }}
58+
{% endfor %}
59+
{% if _nonconfig_hugepages | length %}
60+
There's also some hugepages on the host that are not part of the EDPM configuration
61+
{% for pagesize, config in _nonconfig_hugepages.items() %}
62+
- {{ pagesize }}: {{ config }} pages
63+
{% endfor %}
64+
{% endif %}
65+
66+
- name: Remove hugepage settings from kernelargs
67+
ansible.builtin.set_fact:
68+
_kernel_args: >-
69+
{{ edpm_kernel_args | regex_replace('[\s]*(default_)*hugepages[z]*=[\S]+[\s]*', ' ') }}
70+
default_hugepagesz={{ _desired_default_hugepages }}
71+
{% for hp, values in _edpm_kernel_hugepages.items() -%}
72+
hugepagesz={{ hp }} hugepages={{ values.count }}
73+
{% endfor -%}
74+
{% if not edpm_kernel_hugepages_remove | bool -%}
75+
{% for hp, values in _nonconfig_hugepages.items() -%}
76+
hugepagesz={{ hp }} hugepages={{ values }}
77+
{% endfor -%}
78+
{% endif -%}
79+
80+
- name: Cleaning up whitespaces
81+
ansible.builtin.set_fact:
82+
edpm_kernel_args: >-
83+
{{ _kernel_args |
84+
regex_replace('[\s]+default_hugepagesz=', ' default_hugepagesz=') |
85+
regex_replace('[\s]+', ' ') |
86+
regex_replace('[\s]+$', '')
87+
}}

roles/edpm_kernel/tasks/kernelargs.yml

Lines changed: 2 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -47,77 +47,8 @@
4747
ansible.builtin.set_fact:
4848
_workload_protection: true
4949

50-
- name: EDPM Hugepages configuration
51-
vars:
52-
_converted_hugepages: {}
53-
_nonconfig_hugepages: {}
54-
_hugepages_modification: false
55-
when: edpm_kernel_hugepages | length
56-
block:
57-
- name: Rewrite edpm_kernel_hugepages to use integers as keys
58-
ansible.builtin.set_fact:
59-
_edpm_kernel_hugepages: "{{ _edpm_kernel_hugepages | default({}) | combine({hp.key | int: hp.value}) }}"
60-
loop: "{{ edpm_kernel_hugepages | dict2items }}"
61-
loop_control:
62-
loop_var: hp
63-
64-
- name: Parsing running hugepage configuration from /proc/cmdline
65-
when: >
66-
"default_hugepagesz" in cmdline
67-
ansible.builtin.import_tasks: hugepages_parsing.yaml
68-
vars:
69-
cmdline_text: "{{ cmdline }}"
70-
71-
- name: Validating hugepage config from /proc/cmdline against EDPM parameter
72-
ansible.builtin.import_tasks: hugepages_validations.yaml
73-
74-
- name: Rewrite kernel args
75-
when: _hugepages_modification
76-
block:
77-
- name: Warn about possible modifications
78-
ansible.builtin.debug:
79-
msg: |
80-
EDPM hugepage modification differs from how the host is actually having.
81-
Current default pagesize: {{ _configured_default_size | default("None configured") }}
82-
EDPM default pagesize: {{ _edpm_default_hugepages }}
83-
Desired default pagesize: {{ _desired_default_hugepages }}
84-
85-
From EDPM Hugepages configuration:
86-
{% for pagesize, config in _edpm_kernel_hugepages.items() %}
87-
- {{ pagesize }}
88-
expected: {{ config.count }} pages
89-
default: {{ config.default | default(false) }}
90-
current: {{ _converted_hugepages.get(pagesize | int, 0) }}
91-
{% endfor %}
92-
{% if _nonconfig_hugepages | length %}
93-
There's also some hugepages on the host that are not part of the EDPM configuration
94-
{% for pagesize, config in _nonconfig_hugepages.items() %}
95-
- {{ pagesize }}: {{ config }} pages
96-
{% endfor %}
97-
{% endif %}
98-
99-
- name: Remove hugepage settings from kernelargs
100-
ansible.builtin.set_fact:
101-
_kernel_args: >-
102-
{{ edpm_kernel_args | regex_replace('[\s]*(default_)*hugepages[z]*=[\S]+[\s]*', ' ') }}
103-
default_hugepagesz={{ _desired_default_hugepages }}
104-
{% for hp, values in _edpm_kernel_hugepages.items() -%}
105-
hugepagesz={{ hp }} hugepages={{ values.count }}
106-
{% endfor -%}
107-
{% if not edpm_kernel_hugepages_remove | bool -%}
108-
{% for hp, values in _nonconfig_hugepages.items() -%}
109-
hugepagesz={{ hp }} hugepages={{ values }}
110-
{% endfor -%}
111-
{% endif -%}
112-
113-
- name: Cleaning up whitespaces
114-
ansible.builtin.set_fact:
115-
edpm_kernel_args: >-
116-
{{ _kernel_args |
117-
regex_replace('[\s]+default_hugepagesz=', ' default_hugepagesz=') |
118-
regex_replace('[\s]+', ' ') |
119-
regex_replace('[\s]+$', '')
120-
}}
50+
- name: Handle hugepages
51+
ansible.builtin.include_tasks: hugepages.yml
12152

12253
- name: Check if the kernelargs entry is already present in the file
12354
ansible.builtin.replace:

0 commit comments

Comments
 (0)