|
13 | 13 | {{ ansible_facts['distribution_version'] }}.yml"
|
14 | 14 | when: item is file
|
15 | 15 |
|
| 16 | +# if inputs are given and rsyslog_enabled is true, rsyslog.conf will be |
| 17 | +# overwritten, so no need to reinstall package |
| 18 | +- name: Reinstall package to restore rsyslog config if purging |
| 19 | + when: |
| 20 | + - logging_purge_confs | bool | d(false) |
| 21 | + - not (rsyslog_inputs and __rsyslog_enabled | bool) |
| 22 | + block: |
| 23 | + # it is assumed that the only packages providing config files that might |
| 24 | + # be modified are the base packages - if this is not so, then additional |
| 25 | + # packages will need to be added to this check |
| 26 | + - name: Get status of rsyslog packages |
| 27 | + command: rpm -V {{ item }} |
| 28 | + loop: "{{ __rsyslog_base_packages }}" |
| 29 | + register: __rsyslog_package_status |
| 30 | + failed_when: false |
| 31 | + changed_when: false |
| 32 | + args: |
| 33 | + warn: false |
| 34 | + |
| 35 | + - name: Reset original confs - logging package is absent |
| 36 | + package: |
| 37 | + name: "{{ __rsyslog_base_packages }}" |
| 38 | + state: absent |
| 39 | + register: __rsyslog_erased |
| 40 | + when: __rsyslog_package_status.results | |
| 41 | + rejectattr('stdout', 'match', '^package .* is not installed') | |
| 42 | + selectattr('stdout', 'search', ' /etc/rsyslog[.]conf($|\n)') | |
| 43 | + list | length > 0 |
| 44 | + |
16 | 45 | - name: Install/Update required packages
|
17 | 46 | package:
|
18 | 47 | name: "{{ __rsyslog_base_packages }} + {{ __rsyslog_tls_packages
|
19 | 48 | if (logging_pki_files | d([]) | length > 0) else [] }} +
|
20 | 49 | {{ rsyslog_extra_packages | flatten }}"
|
21 | 50 | state: present
|
22 | 51 | when:
|
23 |
| - - __rsyslog_enabled | bool |
| 52 | + - __rsyslog_enabled | bool or |
| 53 | + (__rsyslog_erased is success and __rsyslog_erased is changed) |
| 54 | + |
| 55 | +# make sure we do not pollute the global namespace for subsequent runs |
| 56 | +# of this role |
| 57 | +- name: Reset erased flag |
| 58 | + set_fact: |
| 59 | + __rsyslog_erased: false |
24 | 60 |
|
25 | 61 | - name: Gather package facts
|
26 | 62 | package_facts:
|
|
66 | 102 | path: '{{ __rsyslog_work_dir }}'
|
67 | 103 | mode: '0700'
|
68 | 104 |
|
69 |
| - # If logging_purge_confs is set to true, remove files in rsyslog.d |
70 |
| - # which do not belong to any rpm packages. That includes config |
71 |
| - # files generated by the previous logging role run. |
72 |
| - # If logging_reset_confs is set to true, reinstall rsyslog package, |
73 |
| - # and restore the pre-existing config files, which restores the |
74 |
| - # default /etc/rsyslog.conf. |
75 |
| - - name: >- |
76 |
| - Purge original conf - remove confs with no owner package and |
77 |
| - confs generated by previous logging role. |
78 |
| - shell: |- |
79 |
| - set -euo pipefail |
80 |
| - for conf in $( ls "{{ __rsyslog_config_dir }}" ); do |
81 |
| - rstr=$( rpm -qf "{{ __rsyslog_config_dir }}/$conf" 2>&1 || : ) |
82 |
| - if [[ $rstr == *"not owned by any package"* ]]; then |
83 |
| - # confs generated by the logging role do not belong to |
84 |
| - # any rpm packages. |
85 |
| - /usr/bin/rm -f "{{ __rsyslog_config_dir }}/$conf" |
86 |
| - fi |
87 |
| - done |
88 |
| - when: logging_purge_confs | bool | d(false) |
89 |
| -
|
90 |
| - - block: |
91 |
| - - name: Reset original confs - logging package is absent |
92 |
| - package: |
93 |
| - name: "{{ __rsyslog_base_packages }}" |
94 |
| - state: absent |
95 |
| - |
96 |
| - - name: Reset original confs - logging package is present |
97 |
| - package: |
98 |
| - name: "{{ __rsyslog_base_packages }}" |
99 |
| - state: present |
100 |
| - rescue: |
101 |
| - - name: Reset original configuration files failed |
102 |
| - fail: |
103 |
| - msg: > |
104 |
| - Error: Reset {{ __rsyslog_base_packages }} failed. |
105 |
| - Please ensure the package(s) are available to install |
106 |
| - from the repository. |
107 |
| - when: logging_reset_confs | bool | d(false) |
108 |
| - |
109 | 105 | - name: "Create logging directory if it does not exist or
|
110 | 106 | the ownership and/or modes are different."
|
111 | 107 | file:
|
|
175 | 171 | - inner_item.state is undefined or inner_item.state != 'absent'
|
176 | 172 | - inner_item.options | d() or inner_item.sections | d()
|
177 | 173 | notify: restart rsyslogd
|
| 174 | + register: __rsyslog_templates |
| 175 | + |
| 176 | + - name: Initialize list of template results |
| 177 | + set_fact: |
| 178 | + __rsyslog_template_results: "{{ [__rsyslog_templates] }}" |
178 | 179 |
|
179 | 180 | - name: Remove common config files in rsyslog.d
|
180 | 181 | file:
|
|
194 | 195 | - inner_item.options | d() or inner_item.sections | d()
|
195 | 196 | notify: stop rsyslogd
|
196 | 197 |
|
| 198 | + - name: Include input sub-vars |
| 199 | + include_vars: |
| 200 | + file: "{{ role_path }}/vars/{{ varfile }}" |
| 201 | + vars: |
| 202 | + varfile: "inputs/{{ input_item.type }}/main.yml" |
| 203 | + loop: "{{ rsyslog_inputs }}" |
| 204 | + loop_control: |
| 205 | + loop_var: input_item |
| 206 | + when: |
| 207 | + - input_item | d([]) |
| 208 | + |
| 209 | + - name: Run input sub-tasks |
| 210 | + include_tasks: |
| 211 | + file: "{{ tasks }}" |
| 212 | + vars: |
| 213 | + tasks: "{{ role_path }}/tasks/inputs/{{ input_item.type }}/main.yml" |
| 214 | + __rsyslog_input: "{{ input_item }}" |
| 215 | + loop: '{{ rsyslog_inputs | sort(attribute="type") }}' |
| 216 | + loop_control: |
| 217 | + extended: yes |
| 218 | + loop_var: input_item |
| 219 | + when: |
| 220 | + - input_item | d([]) |
| 221 | + - input_item.type | d() |
| 222 | + - input_item.type != "basics" or |
| 223 | + (input_item.type == "basics" and |
| 224 | + (ansible_loop.previtem is not defined or |
| 225 | + (ansible_loop.previtem is defined and |
| 226 | + ansible_loop.previtem.type != 'basics'))) |
| 227 | + |
| 228 | + - name: Include output sub-vars |
| 229 | + include_vars: |
| 230 | + file: "{{ role_path }}/vars/{{ varfile }}" |
| 231 | + vars: |
| 232 | + varfile: "outputs/{{ output_item.type }}/main.yml" |
| 233 | + loop: "{{ rsyslog_outputs }}" |
| 234 | + loop_control: |
| 235 | + loop_var: output_item |
| 236 | + when: |
| 237 | + - output_item | d([]) |
| 238 | + - output_item.type | d() |
| 239 | + |
| 240 | + - name: Run output sub-tasks |
| 241 | + include_tasks: |
| 242 | + file: "{{ tasks }}" |
| 243 | + vars: |
| 244 | + tasks: "{{ role_path }}/tasks/outputs/{{ output_item.type }}/main.yml" |
| 245 | + __rsyslog_output: "{{ output_item }}" |
| 246 | + loop: "{{ rsyslog_outputs }}" |
| 247 | + loop_control: |
| 248 | + loop_var: output_item |
| 249 | + when: |
| 250 | + - output_item | d([]) |
| 251 | + |
| 252 | + - name: Get rsyslog config files not owned by any package |
| 253 | + shell: | |
| 254 | + set -euo pipefail |
| 255 | + for conf in $( ls "{{ __rsyslog_config_dir }}" ); do |
| 256 | + rstr=$( rpm -qf "{{ __rsyslog_config_dir }}/$conf" 2>&1 || : ) |
| 257 | + if [[ "$rstr" == *"not owned by any package"* ]]; then |
| 258 | + echo "{{ __rsyslog_config_dir }}/$conf" |
| 259 | + fi |
| 260 | + done |
| 261 | + register: __rsyslog_confs |
| 262 | + failed_when: false |
| 263 | + changed_when: false |
| 264 | + when: logging_purge_confs | bool | d(false) |
| 265 | + |
| 266 | + # If logging_purge_confs is set to true, remove files in rsyslog.d |
| 267 | + # which do not belong to any rpm packages. That includes config |
| 268 | + # files generated by the previous logging role run. |
| 269 | + - name: Purge - remove files not generated by current state |
| 270 | + file: |
| 271 | + path: "{{ item }}" |
| 272 | + state: absent |
| 273 | + loop: "{{ __rsyslog_files_to_remove }}" |
| 274 | + notify: "{{ 'restart rsyslogd' if logging_enabled else 'stop rsyslogd' }}" |
| 275 | + when: |
| 276 | + - logging_purge_confs | bool | d(false) |
| 277 | + - __rsyslog_files_to_remove | length > 0 |
| 278 | + vars: |
| 279 | + __rsyslog_current_files: "{{ __rsyslog_template_results | |
| 280 | + selectattr('results', 'defined') | map(attribute='results') | |
| 281 | + flatten | selectattr('dest', 'defined') | map(attribute='dest') | |
| 282 | + list | to_nice_json |
| 283 | + }}" |
| 284 | + __rsyslog_files_to_remove: "{{ |
| 285 | + __rsyslog_confs.stdout_lines | difference(__rsyslog_current_files) |
| 286 | + }}" |
| 287 | + |
197 | 288 | # How to set rsyslog_custom_config_files:
|
198 | 289 | # rsyslog_custom_config_files:
|
199 | 290 | # - /path/to/custom0.conf
|
|
292 | 383 | when:
|
293 | 384 | - __rsyslog_enabled | bool
|
294 | 385 |
|
295 |
| - - name: Include input sub-vars |
296 |
| - include_vars: |
297 |
| - file: "{{ role_path }}/vars/{{ varfile }}" |
298 |
| - vars: |
299 |
| - varfile: "inputs/{{ input_item.type }}/main.yml" |
300 |
| - loop: "{{ rsyslog_inputs }}" |
301 |
| - loop_control: |
302 |
| - loop_var: input_item |
303 |
| - when: |
304 |
| - - input_item | d([]) |
305 |
| - |
306 |
| - - name: Run input sub-tasks |
307 |
| - include_tasks: |
308 |
| - file: "{{ tasks }}" |
309 |
| - vars: |
310 |
| - tasks: "{{ role_path }}/tasks/inputs/{{ input_item.type }}/main.yml" |
311 |
| - __rsyslog_input: "{{ input_item }}" |
312 |
| - loop: '{{ rsyslog_inputs | sort(attribute="type") }}' |
313 |
| - loop_control: |
314 |
| - extended: yes |
315 |
| - loop_var: input_item |
316 |
| - when: |
317 |
| - - input_item | d([]) |
318 |
| - - input_item.type | d() |
319 |
| - - input_item.type != "basics" or |
320 |
| - (input_item.type == "basics" and |
321 |
| - (ansible_loop.previtem is not defined or |
322 |
| - (ansible_loop.previtem is defined and |
323 |
| - ansible_loop.previtem.type != 'basics'))) |
324 |
| - |
325 |
| - - name: Include output sub-vars |
326 |
| - include_vars: |
327 |
| - file: "{{ role_path }}/vars/{{ varfile }}" |
328 |
| - vars: |
329 |
| - varfile: "outputs/{{ output_item.type }}/main.yml" |
330 |
| - loop: "{{ rsyslog_outputs }}" |
331 |
| - loop_control: |
332 |
| - loop_var: output_item |
333 |
| - when: |
334 |
| - - output_item | d([]) |
335 |
| - - output_item.type | d() |
336 |
| - |
337 |
| - - name: Run output sub-tasks |
338 |
| - include_tasks: |
339 |
| - file: "{{ tasks }}" |
340 |
| - vars: |
341 |
| - tasks: "{{ role_path }}/tasks/outputs/{{ output_item.type }}/main.yml" |
342 |
| - __rsyslog_output: "{{ output_item }}" |
343 |
| - loop: "{{ rsyslog_outputs }}" |
344 |
| - loop_control: |
345 |
| - loop_var: output_item |
346 |
| - when: |
347 |
| - - output_item | d([]) |
348 |
| - |
349 | 386 | - name: Enable rsyslog service
|
350 | 387 | service:
|
351 | 388 | name: rsyslog
|
|
0 commit comments