- name: main block
  vars:
    test_file: /tmp/ansible-test.module_defaults.foo
  module_defaults:
    debug:
      msg: test default
    file:
      path: '{{ test_file }}'
  block:
    - debug:
      register: foo

    - name: test that 'debug' task used default 'msg' param
      assert:
        that: foo.msg == "test default"

    - name: remove test file
      file:
        state: absent

    - name: touch test file
      file:
        state: touch

    - name: stat test file
      stat:
        path: '{{ test_file }}'
      register: foo

    - name: check that test file exists
      assert:
        that: foo.stat.exists

    - name: remove test file
      file:
        state: absent

    - name: test that module defaults from parent are inherited and merged
      module_defaults:
        # Meaningless values to make sure that 'module_defaults' gets
        # evaluated for this block
        foo:
          bar: baz
      block:
      - debug:
        register: foo

      - assert:
          that: foo.msg == "test default"

    - name: test that we can override module defaults inherited from parent
      module_defaults:
        debug:
          msg: "different test message"
      block:
      - debug:
        register: foo

      - assert:
          that: foo.msg == "different test message"

    - name: test that module defaults inherited from parent can be removed
      module_defaults:
        debug: {}
      block:
      - debug:
        register: foo

      - assert:
          that:
            foo.msg == "Hello world!"

    - name: test that module defaults can be overridden by module params
      block:
      - debug:
          msg: another test message
        register: foo

      - assert:
          that:
            foo.msg == "another test message"

      - debug:
          msg: '{{ omit }}'
        register: foo

      - assert:
          that:
            foo.msg == "Hello world!"
