|
120 | 120 | path: "{{ __kernel_settings_profile_filename }}" |
121 | 121 | register: __kernel_settings_profile_contents |
122 | 122 |
|
123 | | -- name: Apply kernel settings |
124 | | - template: |
125 | | - src: "{{ __kernel_settings_profile_src }}.j2" |
126 | | - dest: "{{ __kernel_settings_profile_filename }}" |
127 | | - mode: "0644" |
128 | | - vars: |
129 | | - __sysctl_old: "{{ __kernel_settings_profile_contents.data.get('sysctl', {}) |
| 123 | +- name: Initialize new sysctl |
| 124 | + set_fact: |
| 125 | + __kernel_settings_new_sysctl: "{{ |
| 126 | + __kernel_settings_profile_contents.data.get('sysctl', {}) |
130 | 127 | if not kernel_settings_purge |
131 | 128 | and kernel_settings_sysctl != __kernel_settings_state_empty |
132 | 129 | and not __kernel_settings_previous_replaced in kernel_settings_sysctl |
133 | 130 | else {} }}" |
134 | | - __sysfs_old: "{{ __kernel_settings_profile_contents.data.get('sysfs', {}) |
| 131 | + |
| 132 | +- name: Set new sysctl |
| 133 | + set_fact: |
| 134 | + __kernel_settings_new_sysctl: "{{ __kernel_settings_new_sysctl | combine(__new_item) }}" |
| 135 | + loop: "{{ [] if kernel_settings_sysctl == __kernel_settings_state_empty |
| 136 | + else kernel_settings_sysctl | rejectattr('previous', 'defined') | list }}" |
| 137 | + vars: |
| 138 | + __new_item: "{{ {item.name: __new_value} }}" |
| 139 | + __new_value: "{{ __kernel_settings_state_absent |
| 140 | + if item.state | d('present') == 'absent' |
| 141 | + else item.value | d(__kernel_settings_state_absent) }}" |
| 142 | + |
| 143 | +- name: Initialize new sysfs |
| 144 | + set_fact: |
| 145 | + __kernel_settings_new_sysfs: "{{ |
| 146 | + __kernel_settings_profile_contents.data.get('sysfs', {}) |
135 | 147 | if not kernel_settings_purge |
136 | 148 | and kernel_settings_sysfs != __kernel_settings_state_empty |
137 | 149 | and not __kernel_settings_previous_replaced in kernel_settings_sysfs |
138 | 150 | else {} }}" |
| 151 | + |
| 152 | +- name: Set new sysfs |
| 153 | + set_fact: |
| 154 | + __kernel_settings_new_sysfs: "{{ __kernel_settings_new_sysfs | combine(__new_item) }}" |
| 155 | + loop: "{{ [] if kernel_settings_sysfs == __kernel_settings_state_empty |
| 156 | + else kernel_settings_sysfs | rejectattr('previous', 'defined') | list }}" |
| 157 | + vars: |
| 158 | + __new_item: "{{ {item.name: __new_value} }}" |
| 159 | + __new_value: "{{ __kernel_settings_state_absent |
| 160 | + if item.state | d('present') == 'absent' |
| 161 | + else item.value | d(__kernel_settings_state_absent) }}" |
| 162 | + |
| 163 | +- name: Apply kernel settings |
| 164 | + template: |
| 165 | + src: "{{ __kernel_settings_profile_src }}.j2" |
| 166 | + dest: "{{ __kernel_settings_profile_filename }}" |
| 167 | + mode: "0644" |
| 168 | + vars: |
| 169 | + # we don't have a way to compare an item to a dict - eq not available in el7 |
| 170 | + # so assume if the value is a dict, it is the {"state": "absent"} dict |
| 171 | + # because "real" values should be scalars like strings, int, bool |
| 172 | + __sysctl_has_values: "{{ __kernel_settings_new_sysctl | dict2items | rejectattr('value', 'mapping') | list | length > 0 }}" |
| 173 | + __sysfs_has_values: "{{ __kernel_settings_new_sysfs | dict2items | rejectattr('value', 'mapping') | list | length > 0 }}" |
139 | 174 | __systemd_old: "{{ |
140 | | - __kernel_settings_profile_contents.data.get('systemd', {}).get('cpu_affinity') |
| 175 | + __kernel_settings_profile_contents.data.get('systemd', {}).get('cpu_affinity', '') |
141 | 176 | if not kernel_settings_purge |
142 | 177 | and kernel_settings_systemd_cpu_affinity != __kernel_settings_state_absent |
143 | | - else none }}" |
| 178 | + else '' }}" |
| 179 | + __systemd_new: "{{ kernel_settings_systemd_cpu_affinity |
| 180 | + if kernel_settings_systemd_cpu_affinity is not none and |
| 181 | + kernel_settings_systemd_cpu_affinity != __kernel_settings_state_absent and |
| 182 | + kernel_settings_systemd_cpu_affinity | length > 0 |
| 183 | + else __systemd_old }}" |
144 | 184 | __trans_huge_old: "{{ |
145 | | - __kernel_settings_profile_contents.data.get('vm', {}).get('transparent_hugepages') |
| 185 | + __kernel_settings_profile_contents.data.get('vm', {}).get('transparent_hugepages', '') |
146 | 186 | if not kernel_settings_purge |
147 | 187 | and kernel_settings_transparent_hugepages != __kernel_settings_state_absent |
148 | | - else none }}" |
| 188 | + else '' }}" |
| 189 | + __trans_huge_new: "{{ kernel_settings_transparent_hugepages |
| 190 | + if kernel_settings_transparent_hugepages is not none and |
| 191 | + kernel_settings_transparent_hugepages != __kernel_settings_state_absent and |
| 192 | + kernel_settings_transparent_hugepages | length > 0 |
| 193 | + else __trans_huge_old }}" |
149 | 194 | __trans_defrag_old: "{{ |
150 | | - __kernel_settings_profile_contents.data.get('vm', {}).get('transparent_hugepage.defrag') |
| 195 | + __kernel_settings_profile_contents.data.get('vm', {}).get('transparent_hugepage.defrag', '') |
151 | 196 | if not kernel_settings_purge |
152 | 197 | and kernel_settings_transparent_hugepages_defrag != __kernel_settings_state_absent |
153 | | - else none }}" |
154 | | - __sections: |
155 | | - - name: sysctl |
156 | | - new: "{{ kernel_settings_sysctl | difference([__kernel_settings_previous_replaced]) | list |
157 | | - if kernel_settings_sysctl != __kernel_settings_state_empty |
158 | | - else [] }}" |
159 | | - old: "{{ __sysctl_old }}" |
160 | | - - name: sysfs |
161 | | - new: "{{ kernel_settings_sysfs | difference([__kernel_settings_previous_replaced]) | list |
162 | | - if kernel_settings_sysfs != __kernel_settings_state_empty |
163 | | - else [] }}" |
164 | | - old: "{{ __sysfs_old }}" |
165 | | - - name: systemd |
166 | | - new: |
167 | | - - name: cpu_affinity |
168 | | - value: "{{ kernel_settings_systemd_cpu_affinity }}" |
169 | | - old: |
170 | | - cpu_affinity: "{{ __systemd_old }}" |
171 | | - - name: vm |
172 | | - new: |
173 | | - - name: transparent_hugepages |
174 | | - value: "{{ kernel_settings_transparent_hugepages }}" |
175 | | - - name: transparent_hugepage.defrag |
176 | | - value: "{{ kernel_settings_transparent_hugepages_defrag }}" |
177 | | - old: |
178 | | - transparent_hugepages: "{{ __trans_huge_old }}" |
179 | | - transparent_hugepage.defrag: "{{ __trans_defrag_old }}" |
| 198 | + else '' }}" |
| 199 | + __trans_defrag_new: "{{ kernel_settings_transparent_hugepages_defrag |
| 200 | + if kernel_settings_transparent_hugepages_defrag is not none and |
| 201 | + kernel_settings_transparent_hugepages_defrag != __kernel_settings_state_absent and |
| 202 | + kernel_settings_transparent_hugepages_defrag | length > 0 |
| 203 | + else __trans_defrag_old }}" |
180 | 204 | register: __kernel_settings_register_apply |
181 | 205 |
|
182 | 206 | # this will also apply the kernel_settings profile, so we |
|
0 commit comments