- name: cleanup any previous failed runs
  consul:
    service_id: '{{item}}'
    state: absent
  with_items:
      - service1
      - service2
      - service3
      - http_check
      - with_check
      - with_tags

- name: cleanup previous checks
  consul:
    check_id: '{{item}}'
    state: absent
  with_items:
    - node_level
    - node_level_http

- name: register very basic service with consul gets default id
  consul:
    service_name: service1
    service_port: 80
  register: basic_result

- name: verify basic service registration
  assert:
    that:
        - basic_result.changed
        - basic_result.service_port == 80
        - basic_result.service_id == 'service1'
        - basic_result.service_name == 'service1'

- name: register very basic service with explicit id
  consul:
    service_name: Basic Service
    service_id: service2
    service_port: 80
  register: basic2_result

- name: verify service2 registration
  assert:
    that:
        - basic2_result.changed
        - basic2_result.service_port == 80
        - basic2_result.service_id == 'service2'
        - basic2_result.service_name == 'Basic Service'

- name: register service without name
  consul:
    service_id: this_will_fail
  register: noname_result
  ignore_errors: True

- name: verify registering service without name fails
  assert:
    that:
        - noname_result is failed

- name: register very basic service without service_port
  consul:
    service_name: Basic Service Without Port
    service_id: service3
  register: basic3_result

- name: verify service3 registration
  assert:
    that:
        - basic3_result.changed
        - basic3_result.service_port == None
        - basic3_result.service_id == 'service3'
        - basic3_result.service_name == 'Basic Service Without Port'

- name: register a service with an http check
  consul:
    service_name: http_check
    service_id: http_check
    service_port: 80
    http: "http://localhost/status"
    interval: 60s
  register: http_result

- name: verify service with an http check
  assert:
    that:
      - http_result.changed
      - http_result.service_port == 80
      - http_result.checks | length == 1

- name: register very basic service with check script
  consul:
    service_name: with_check
    service_port: 80
    script: "sh -c true"
    interval: 60s
  register: script_result

- name: verify service with check registration
  assert:
    that:
        - script_result.changed
        - script_result.service_port == 80
        - script_result.service_id == 'with_check'
        - script_result.checks | length == 1

- name: register service with some service tags
  consul:
    service_name: with_tags
    service_port: 80
    tags:
      - prod
      - webservers
  register: tags_result


- name: verify tags registration
  assert:
    that:
        - tags_result.changed
        - "tags_result.tags == ['prod', 'webservers']"

- name: create a node level check
  consul:
    check_name: Node Level Check
    check_id: node_level
    script: "sh -c true"
    interval: 50m
  register: nodelevel_result

- name: verify service with check registration
  assert:
    that:
        - nodelevel_result.changed
        - nodelevel_result.check_name == 'Node Level Check'
        - nodelevel_result.check_id == 'node_level'
        - nodelevel_result.script == 'sh -c true'
        - nodelevel_result.interval == '50m'

- name: create a node level http check
  consul:
    check_name: Node Level HTTP Check
    check_id: node_level_http
    http: 'http://localhost/status'
    interval: 1m
    timeout: 30s
  register: nodelevel_http_result

- name: verify node level http check
  assert:
    that:
      - nodelevel_http_result.changed
      - nodelevel_http_result.check_name == 'Node Level HTTP Check'
      - nodelevel_http_result.check_id == 'node_level_http'
      - nodelevel_http_result.http == 'http://localhost/status'
      - nodelevel_http_result.interval == '1m'
      - nodelevel_http_result.timeout == '30s'

- name: remove a service
  consul:
    service_id: 'service1'
    state: absent
  register: delete_service_result

- name: verify service removal
  assert:
    that:
      - delete_service_result.changed

- name: removal of an non-existent service causes no change
  consul:
    service_id: 'service1'
    state: absent
  register: delete_service_result

- name: verify service removal caused no change
  assert:
    that:
      - not delete_service_result.changed

- name: remove a check
  consul:
    check_id: 'node_level'
    state: absent
  register: delete_check_result

- name: verify check removal
  assert:
    that:
      - delete_check_result.changed

- name: removal of an non-existent check causes no change
  consul:
    check_id: 'node_level'
    state: absent
  register: delete_check_result

- name: verify check removal cause no change
  assert:
    that:
      - not delete_service_result.changed

- name: add service to test removal by name
  consul:
    service_name: by_name
    service_port: 12345

- name: remove service by name
  consul:
    service_name: by_name
    state: absent
  register: delete_service_by_name_result

- name: verify service removal
  assert:
    that:
      - delete_service_by_name_result.changed

- name: cleanup
  consul:
    service_id: '{{item}}'
    state: absent
  with_items:
    - service2
    - with_check
    - with_tags
