- name: failure check define * for host header
  win_iis_webbinding:
    name: "{{ test_iis_site_name }}"
    state: present
    host_header: '*'
    protocol: http
    ip: '*'
  register: failure
  failed_when: failure.msg != "To make or remove a catch-all binding, please omit the host_header parameter entirely rather than specify host_header *"

- debug:
    var: failure
    verbosity: 1

- block:
  - name: get all websites from server
    raw: powershell.exe "(get-website).name"
    register: existing_sites

  - name: ensure all sites are removed for clean testing
    win_iis_website:
      name: "{{ item }}"
      state: absent
    with_items:
      - "{{ existing_sites.stdout_lines }}"

  - name: add testremove site
    win_iis_website:
      name: testremove
      state: started
      physical_path: c:\inetpub\wwwroot

  - name: add bindings to testremove
    win_iis_webbinding:
      name: testremove
      ip: "{{ item.ip }}"
      port: "{{ item.port }}"
    with_items:
      - {ip: 127.0.0.1, port: 80}
      - {ip: '*', port: 80}

  - name: remove ip  * binding from testremove
    win_iis_webbinding:
      name: testremove
      state: absent
      port: 80
      ip: '*'

  - name: get the remaining binding from testremove
    test_get_webbindings:
      name: testremove
      port: 80
      ip: 127.0.0.1
    register: test_result

  - debug:
      var: test_result
      verbosity: 1

  - name: assert that remove *:80 doesn't also remove 127.0.0.1:80
    assert:
      that:
      - test_result.binding.ip == '127.0.0.1'
      - test_result.binding.port == 80

  always:
  - name: remove websites
    win_iis_website:
      name: testremove
      state: absent