title: Ansible - Using or conditional in when:
body: <p>I have the below code in <strong>tasks/main.yml</strong></p>
  
  <pre><code>---
  - name: Check if service exists.
    shell: "systemctl status {{ service }}"
    ignore_errors: yes
    register: service_exists
  
  - name: Enable service and start if it exists.
    systemd:
      name: "{{ service }}"
      state: started
      enabled: true
    when: "could not be found" not in service_exists.stderr' or '"Failed to get properties" not in service_exists.stderr' or '"not-found" not in service_exists.stderr'
  </code></pre>
  
  <p>I have the below code in <strong>configure-services.yml</strong></p>
  
  <pre><code>---
  - hosts: localhost
    become: true
    gather_facts: yes
    tasks:
      - include: tasks/main.yml
        with_items: "{{ services }}"
        loop_control:
          loop_var: service
  </code></pre>
  
  <p>However I get the below error when running the playbook.</p>
  
  <pre><code>fatal: [localhost]: FAILED! =&gt; {"reason": "Syntax Error while loading YAML.\n  did not find expected key\n\nThe error appears to have been in '/home/adambirds/Development/ansible-playbooks/system-services/tasks/main.yml': line 12, column 11, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n    enabled: true\n  when:''\"could not be found\" not in service_exists.stderr' or '\"Failed to get properties\" not in service_exists.stderr' or '\"not-found\" not in service_exists.stderr''\n          ^ here\nWe could be wrong, but this one looks like it might be an issue with\nunbalanced quotes.  If starting a value with a quote, make sure the\nline ends with the same set of quotes.  For instance this arbitrary\nexample:\n\n    foo: \"bad\" \"wolf\"\n\nCould be written as:\n\n    foo: '\"bad\" \"wolf\"'\n"}
  </code></pre>
  
  <p>I believe the issue is with my <strong>when:</strong> statement, my aim is to run the task if any of the the below doesn't appear in <strong>service_exists.stderr</strong>:</p>
  
  <pre><code>could not be found
  Failed to get properties
  not-found
  </code></pre>
  
  <p>After using the suggestion by @tinita below and changing <strong>tasks/main.yml</strong> to the below:</p>
  
  <pre><code>---
  - name: Check if service exists.
    shell: "systemctl status {{ service }}"
    ignore_errors: yes
    register: service_exists
  
  - name: Enable service and start if it exists.
    systemd:
      name: "{{ service }}"
      state: started
      enabled: true
    when: &gt;
      "could not be found" not in service_exists.stderr
      or "Failed to get properties" not in service_exists.stderr
      or "not-found" not in service_exists.stderr
  </code></pre>
  
  <p>I get the below errors when running the playbook:</p>
  
  <pre><code>TASK [Check if service exists.] ***************************************************************************************************************************************************************
  fatal: [localhost]: FAILED! =&gt; {"changed": true, "cmd": "systemctl status mariadb.service", "delta": "0:00:00.004881", "end": "2018-06-02 16:28:18.849473", "msg": "non-zero return code", "rc": 4, "start": "2018-06-02 16:28:18.844592", "stderr": "Unit mariadb.service could not be found.", "stderr_lines": ["Unit mariadb.service could not be found."], "stdout": "", "stdout_lines": []}
  ...ignoring
  
  TASK [Enable service and start if it exists.] *************************************************************************************************************************************************
  fatal: [localhost]: FAILED! =&gt; {"changed": false, "msg": "Could not find the requested service mariadb.service: host"}
          to retry, use: --limit @/home/adambirds/Development/ansible-playbooks/system-services/configure-services.retry
  
  PLAY RECAP ************************************************************************************************************************************************************************************
  localhost                  : ok=20   changed=1    unreachable=0    failed=1
  </code></pre>