Skip to content

Commit ea94e11

Browse files
committed
Prevent Ansible Playbook termination in check mode
Some Ansible Playbooks are terminating prematurely on some Ansible Tasks where the `when` statement assumes that a systemd service is installed. In normal mode, the installation is performed by other tasks, but in check mode, the installation isn't executed and the service isn't installed at the moment of checking the service state. This manifests in the test `/scanning/host-os/ansible-check/check-mode`. Addressing: ``` Configure Firewalld to Restrict Loopback Traffic - Ensure firewalld trusted Zone Restricts IPv4 Loopback Traffic ({"msg": "The conditional check 'ansible_facts.services['firewalld.service'].state == 'running'' failed. The error was: error while evaluating conditional (ansible_facts.services['firewalld.service'].state == 'running'): 'dict object' has no attribute 'firewalld.service'. 'dict object' has no attribute 'firewalld.service'\n\nThe error appears to be in '/usr/share/scap-security-guide/ansible/centos8-playbook-pci-dss.yml': line 10070, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - name: Configure Firewalld to Restrict Loopback Traffic - Ensure firewalld trusted\n ^ here\n"}) ```
1 parent 46824c4 commit ea94e11

8 files changed

Lines changed: 15 additions & 15 deletions

File tree

  • linux_os/guide
    • auditing/auditd_configure_rules
      • audit_rules_enable_syscall_auditing/ansible
      • audit_rules_suid_auid_privilege_function/ansible
      • audit_rules_suid_privilege_function/ansible
    • services
      • ftp/ftp_configure_vsftpd/ftp_present_banner/ansible
      • ssh/ssh_server/firewalld_sshd_port_enabled/ansible
    • system/network
      • network-firewalld/ruleset_modifications
        • firewalld_loopback_traffic_restricted/ansible
        • firewalld_loopback_traffic_trusted/ansible
      • network-wireless/wireless_software/wireless_disable_interfaces/ansible

linux_os/guide/auditing/auditd_configure_rules/audit_rules_enable_syscall_auditing/ansible/shared.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,6 @@
5757
name: auditd.service
5858
state: restarted
5959
when:
60-
- ansible_facts.services["auditd.service"].state == "running"
60+
- '"auditd.service" in ansible_facts.services and ansible_facts.services["auditd.service"].state == "running"'
6161
- (augenrules_syscall_auditing_rule_update_result.changed or
6262
auditctl_syscall_auditing_rule_update_result.changed)

linux_os/guide/auditing/auditd_configure_rules/audit_rules_suid_auid_privilege_function/ansible/shared.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,4 @@
6767
when:
6868
- (augenrules_audit_rules_privilege_function_update_result.changed or
6969
auditctl_audit_rules_privilege_function_update_result.changed)
70-
- ansible_facts.services["auditd.service"].state == "running"
70+
- '"auditd.service" in ansible_facts.services and ansible_facts.services["auditd.service"].state == "running"'

linux_os/guide/auditing/auditd_configure_rules/audit_rules_suid_privilege_function/ansible/shared.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,4 @@
6868
when:
6969
- (augenrules_audit_rules_privilege_function_update_result.changed or
7070
auditctl_audit_rules_privilege_function_update_result.changed)
71-
- ansible_facts.services["auditd.service"].state == "running"
71+
- '"auditd.service" in ansible_facts.services and ansible_facts.services["auditd.service"].state == "running"'

linux_os/guide/services/ftp/ftp_configure_vsftpd/ftp_present_banner/ansible/shared.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@
2020
ansible.builtin.systemd:
2121
name: vsftpd.service
2222
state: restarted
23-
when: banner_file_update_result.changed and ansible_facts.services["vsftpd.service"].state == "running"
23+
when: banner_file_update_result.changed and "vsftpd.service" in ansible_facts.services and ansible_facts.services["vsftpd.service"].state == "running"

linux_os/guide/services/ssh/ssh_server/firewalld_sshd_port_enabled/ansible/shared.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,14 @@
8282
- result_firewall_cmd_zones_names.stdout_lines is defined
8383
- result_firewall_cmd_zones_names.stdout_lines | length > 0
8484
when:
85-
- ansible_facts.services['firewalld.service'].state == 'running'
86-
- ansible_facts.services['NetworkManager.service'].state == 'running'
85+
- "'firewalld.service' in ansible_facts.services and ansible_facts.services['firewalld.service'].state == 'running'"
86+
- "'NetworkManager.service' in ansible_facts.services and ansible_facts.services['NetworkManager.service'].state == 'running'"
8787

8888
- name: '{{{ rule_title }}} - Informative message based on services states'
8989
ansible.builtin.assert:
9090
that:
91-
- ansible_check_mode or ansible_facts.services['firewalld.service'].state == 'running'
92-
- ansible_check_mode or ansible_facts.services['NetworkManager.service'].state == 'running'
91+
- "ansible_check_mode or ('firewalld.service' in ansible_facts.services and ansible_facts.services['firewalld.service'].state == 'running')"
92+
- "ansible_check_mode or ('NetworkManager.service' in ansible_facts.services and ansible_facts.services['NetworkManager.service'].state == 'running')"
9393
fail_msg:
9494
- firewalld and NetworkManager services are not active. Remediation aborted!
9595
- This remediation could not be applied because it depends on firewalld and NetworkManager services running.

linux_os/guide/system/network/network-firewalld/ruleset_modifications/firewalld_loopback_traffic_restricted/ansible/shared.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,12 @@
3838
when:
3939
- result_trusted_ipv4_restriction is changed or result_trusted_ipv6_restriction is changed
4040
when:
41-
- ansible_facts.services['firewalld.service'].state == 'running'
41+
- "'firewalld.service' in ansible_facts.services and ansible_facts.services['firewalld.service'].state == 'running'"
4242

4343
- name: '{{{ rule_title }}} - Informative Message Based on Service State'
4444
ansible.builtin.assert:
4545
that:
46-
- ansible_check_mode or ansible_facts.services['firewalld.service'].state == 'running'
46+
- "ansible_check_mode or ('firewalld.service' in ansible_facts.services and ansible_facts.services['firewalld.service'].state == 'running')"
4747
fail_msg:
4848
- firewalld service is not active. Remediation aborted!
4949
- This remediation could not be applied because it depends on firewalld service running.

linux_os/guide/system/network/network-firewalld/ruleset_modifications/firewalld_loopback_traffic_trusted/ansible/shared.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@
3030
when:
3131
- result_lo_interface_assignment is changed
3232
when:
33-
- ansible_facts.services['firewalld.service'].state == 'running'
33+
- "'firewalld.service' in ansible_facts.services and ansible_facts.services['firewalld.service'].state == 'running'"
3434

3535
- name: '{{{ rule_title }}} - Informative Message Based on Service State'
3636
ansible.builtin.assert:
3737
that:
38-
- ansible_check_mode or ansible_facts.services['firewalld.service'].state == 'running'
38+
- "ansible_check_mode or ('firewalld.service' in ansible_facts.services and ansible_facts.services['firewalld.service'].state == 'running')"
3939
fail_msg:
4040
- firewalld service is not active. Remediation aborted!
4141
- This remediation could not be applied because it depends on firewalld service running.

linux_os/guide/system/network/network-wireless/wireless_software/wireless_disable_interfaces/ansible/shared.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
ansible.builtin.command: wicked ifdown {{ item }}
1414
loop: '{{ ansible_facts.interfaces }}'
1515
when:
16-
- ansible_facts.services['wickedd.service'].state == 'running'
16+
- "'wickedd.service' in ansible_facts.services and ansible_facts.services['wickedd.service'].state == 'running'"
1717
- 'item.startswith("wl")'
1818

1919
- name: "{{{ rule_title }}} - Wicked Disable Wireless Network Interfaces"
@@ -23,7 +23,7 @@
2323
line: STARTMODE=off
2424
loop: '{{ ansible_facts.interfaces }}'
2525
when:
26-
- ansible_facts.services['wickedd.service'].state == 'running'
26+
- "'wickedd.service' in ansible_facts.services and ansible_facts.services['wickedd.service'].state == 'running'"
2727
- 'item.startswith("wl")'
2828
{{%- else %}}
2929

@@ -40,4 +40,4 @@
4040
ansible.builtin.command: nmcli radio wifi off
4141
when:
4242
- "'NetworkManager' in ansible_facts.packages"
43-
- ansible_facts.services['NetworkManager.service'].state == 'running'
43+
- "'NetworkManager.service' in ansible_facts.services and ansible_facts.services['NetworkManager.service'].state == 'running'"

0 commit comments

Comments
 (0)