- hosts: localhost
  connection: local
  gather_facts: false

  vars:
    # these are the defaults from the consul-vagrant cluster setup
    - mgmt_token: '4791402A-D875-4C18-8316-E652DBA53B18'
    - acl_host: '11.0.0.2'
    - metadata_json: '{"clearance": "top_secret"}'

  pre_tasks:
    # this works except for the KV_lookusp
    - name: check that the consul agent is running locally
      local_action: wait_for port=8500 timeout=5
      ignore_errors: true
      register: consul_running

  roles:
    - {role: test_consul_service,
       when: not consul_running.failed is defined}

    - {role: test_consul_kv,
       when: not consul_running.failed is defined}

    - {role: test_consul_acl,
       when: not consul_running.failed is defined}

    - {role: test_consul_session,
       when: not consul_running.failed is defined}

  tasks:
    - name: setup services with passing check for consul inventory test
      consul:
        service_name: nginx
        service_port: 80
        script: "sh -c true"
        interval: 5
        token: '4791402A-D875-4C18-8316-E652DBA53B18'
        tags:
          - dev
          - master

    - name: setup failing service for inventory test
      consul:
        service_name: nginx
        service_port: 443
        script: "sh -c false"
        interval: 5
        tags:
          - qa
          - slave

    - name: setup ssh service for inventory test
      consul:
        service_name: ssh
        service_port: 2222
        script: "sh -c true"
        interval: 5
        token: '4791402A-D875-4C18-8316-E652DBA53B18'

    - name: update the Anonymous token to allow anon access to kv store
      consul_acl:
        mgmt_token: '{{mgmt_token}}'
        host: '{{acl_host}}'
        token: 'anonymous'
        rules:
          - key: ''
            policy: write

    - name: add metadata for the node through kv_store
      consul_kv: "key=ansible/metadata/dc1/consul-1 value='{{metadata_json}}'"

    - name: add metadata for the node through kv_store
      consul_kv: key=ansible/groups/dc1/consul-1 value='a_group, another_group'

    - name: warn that tests are ignored if consul agent is not running
      debug: msg="A consul agent needs to be running inorder to run the tests. To setup a vagrant cluster for use in testing see http://github.com/sgargan/consul-vagrant"
      when: consul_running.failed is defined
