# TODO: test against real connection plugins to ensure they're not leaking module args

- name: normal play
  hosts: testhost
  gather_facts: no
  tasks:
    - include_vars: secretvars.yml
      no_log: true

    - name: args should be logged in the absence of no_log
      shell: echo "{{log_me_prefix}}TASK_SUCCEEDED"

    - name: failed args should be logged in the absence of no_log
      shell: echo "{{log_me_prefix}}TASK_FAILED"
      failed_when: true
      ignore_errors: true

    - name: item args should be logged in the absence of no_log
      shell: echo {{ item }}
      with_items: [ "{{log_me_prefix}}ITEM", "{{log_me_prefix}}SKIPPED", "{{log_me_prefix}}ITEM_FAILED" ]
      when: item != log_me_prefix ~ "SKIPPED"
      failed_when: item == log_me_prefix ~ "ITEM_FAILED"
      ignore_errors: true

    - name: args should not be logged when task-level no_log set
      shell: echo "DO_NOT_LOG_TASK_SUCCEEDED"
      no_log: true

    - name: failed args should not be logged when task-level no_log set
      shell: echo "DO_NOT_LOG_TASK_FAILED"
      no_log: true
      failed_when: true
      ignore_errors: true

    - name: skipped task args should be suppressed with no_log
      shell: echo "DO_NOT_LOG_TASK_SKIPPED"
      no_log: true
      when: false

    - name: items args should be suppressed with no_log in every state
      shell: echo {{ item }}
      no_log: true
      with_items: [ "DO_NOT_LOG_ITEM", "DO_NOT_LOG_ITEM_SKIPPED", "DO_NOT_LOG_ITEM_FAILED" ]
      when: item != "DO_NOT_LOG_ITEM_SKIPPED"
      failed_when: item == "DO_NOT_LOG_ITEM_FAILED"
      ignore_errors: yes

    - name: async task args should suppressed with no_log
      async: 10
      poll: 1
      shell: echo "DO_NOT_LOG_ASYNC_TASK_SUCCEEDED"
      no_log: true

- name: play-level no_log set
  hosts: testhost
  gather_facts: no
  no_log: true
  tasks:
      - name: args should not be logged when play-level no_log set
        shell: echo "DO_NOT_LOG_PLAY"

      - name: args should not be logged when both play- and task-level no_log set
        shell: echo "DO_NOT_LOG_TASK_AND_PLAY"
        no_log: true

      - name: args should be logged when task-level no_log overrides play-level
        shell: echo "{{log_me_prefix}}OVERRIDE"
        no_log: false

      - name: Add a fake host for next play
        add_host:
            hostname: fake

- name: use 'fake' unreachable host to force unreachable error
  hosts: fake
  gather_facts: no
  connection: ssh
  tasks:
    - name: 'EXPECTED FAILURE: Fail to run a lineinfile task'
      vars:
        logins:
          - machine: foo
            login: bar
            password: DO_NOT_LOG_UNREACHABLE_ITEM
          - machine: two
            login: three
            password: DO_NOT_LOG_UNREACHABLE_ITEM
      lineinfile:
        path: /dev/null
        mode: 0600
        create: true
        insertafter: EOF
        line: "machine {{ item.machine }} login {{ item.login }} password {{ item.password }}"
      loop: "{{ logins }}"
      no_log: true
