Skip to content

Commit 44520b8

Browse files
authored
Merge pull request #14006 from jan-cerny/sshd_idem
Make Ansible in sshd_lineinfile template idempotent
2 parents 48c6988 + 6b5102e commit 44520b8

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

shared/macros/10-ansible.jinja

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,13 +166,28 @@ value: :code:`Setting={{ varname1 }}`
166166
{{%- set lineinfile_items = "{{ " + dir_parameter + ".files }}" -%}}
167167
{{%- set lineinfile_when = dir_parameter + ".matched" -%}}
168168
{{%- set new_line = parameter + separator + value -%}}
169+
- name: {{{ rule_title }}} - Check if the parameter {{{ parameter }}} is configured
170+
ansible.builtin.find:
171+
paths:
172+
- {{{ config_file }}}
173+
- {{{ config_dir }}}
174+
contains: {{{ line_regex }}}
175+
register: _sshd_config_has_parameter
176+
- name: {{{ rule_title }}} - Check if the parameter {{{ parameter }}} is configured correctly
177+
ansible.builtin.find:
178+
paths:
179+
- {{{ config_file }}}
180+
- {{{ config_dir }}}
181+
contains: {{{ line_regex ~ value ~ "$" }}}
182+
register: _sshd_config_correctly
169183
- name: '{{{ msg or rule_title }}}'
170184
block:
171185
{{{ ansible_lineinfile("Deduplicate values from " + config_file, config_file, regex=line_regex, insensitive=insensitive, create='no', state='absent')|indent }}}
172186
{{{ ansible_stat("Check if " + config_dir + " exists", path=config_dir, register=dir_exists)|indent }}}
173187
{{{ ansible_find("Check if the parameter " + parameter + " is present in " + config_dir, paths=config_dir, contains=line_regex, register=dir_parameter, when=find_when)|indent }}}
174188
{{{ ansible_lineinfile("Remove parameter from files in " + config_dir, path="{{ item.path }}", regex=line_regex, insensitive=insensitive, state="absent", with_items=lineinfile_items, when=lineinfile_when)|indent }}}
175189
{{{ ansible_lineinfile("Insert correct line to " + set_file, set_file, regex=line_regex, insensitive=insensitive, new_line=new_line, create=create, state='present', validate=validate, insert_after=insert_after, insert_before=insert_before)|indent }}}
190+
when: _sshd_config_correctly.matched == 0 or _sshd_config_has_parameter.matched != 1
176191
{{%- endmacro %}}
177192

178193

@@ -222,6 +237,8 @@ value: :code:`Setting={{ varname1 }}`
222237
path: {{{ config_file }}}
223238
mode: '0600'
224239
state: touch
240+
modification_time: preserve
241+
access_time: preserve
225242
{{%- else %}}
226243
{{{ ansible_set_config_file(msg, "/etc/ssh/sshd_config", parameter, value=value, create="yes", prefix_regex='(?i)^\s*', validate="/usr/sbin/sshd -t -f %s", insert_before="BOF", rule_title=rule_title) }}}
227244
{{%- endif %}}

shared/macros/10-oval.jinja

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ Generates the :code:`<affected>` tag for OVAL check using correct product platfo
188188
{{%- set suffix_id = suffix_id_default_not_overriden -%}}
189189
{{%- set prefix_text = prefix_text + " absence of" -%}}
190190
{{%- elif avoid_conflicting -%}}
191-
{{%- set suffix_text = "if any" -%}}
191+
{{%- set suffix_text = " if any" -%}}
192192
{{%- endif %}}
193193
{{%- if not comment -%}}
194194
{{%- set comment = prefix_text ~ " " ~ parameter ~ " in " ~ path ~ suffix_text -%}}
@@ -222,7 +222,7 @@ Generates the :code:`<affected>` tag for OVAL check using correct product platfo
222222
{{%- elif avoid_conflicting -%}}
223223
{{%- set check_existence = "any_exist" -%}}
224224
{{%- set prefix_text = "value" -%}}
225-
{{%- set suffix_text = "if any" -%}}
225+
{{%- set suffix_text = " if any" -%}}
226226
{{%- else %}}
227227
{{%- set check_existence = "all_exist" -%}}
228228
{{%- set prefix_text = "value" -%}}

0 commit comments

Comments
 (0)