Sriram
Sriram

Reputation: 10568

Invoke another 'play' based on output of another play - Ansible

I am trying to use Ansible to check if SELinux is enabled (set to Enforcing), and if not, enable it. The play to enable SELinux must be invoked only if SELinux is disabled.

The playbook looks like so:

- hosts: all

  # root should execute this.
  remote_user: root
  become: yes

  tasks:

    # Check if SELinux is enabled.
    - name: check if selinux is enabled
      tags: selinuxCheck
      register: selinuxCheckOut
      command: getenforce
    - debug: var=selinuxCheckOut.stdout_lines

    - name: enable selinux if not enabled already
      tags: enableSELinux
      selinux: policy=targeted state=enforcing
      when: selinuxCheckOut.stdout_lines == "Enforcing"
    - debug: var=enableSELinuxOut.stdout_lines

When I run this, the task enableSELinux fails with the reason, "Conditional check failed". The output is:

TASK [debug] *******************************************************************
task path: /root/ansible/playbooks/selinuxConfig.yml:24
ok: [localhost] => {
    "selinuxCheckOut.stdout_lines": [
        "Enforcing"
    ]
}

TASK [enable selinux if not enabled already] ***********************************
task path: /root/ansible/playbooks/selinuxConfig.yml:26
skipping: [localhost] => {"changed": false, "skip_reason": "Conditional check failed", "skipped": true}

My questions:
1. Is this the correct way to get a play to execute depending on the output from another play?
2. How do I get this to work?

Upvotes: 1

Views: 701

Answers (1)

helloV
helloV

Reputation: 52433

Your playbook is correct. But stdout_lines is a list. You have to compare the first element in that list. Try this:

when: selinuxCheckOut.stdout_lines[0] == "Enforcing"

Upvotes: 3

Related Questions