---
- hosts: undercloud
  vars:
    metadata:
      name: Check connectivity to various OpenStack services
      # TODO: this could also check for undercloud endpoints
      description: >
        This validation gets the PublicVip address from the deployment and
        tries to access Horizon and get a Keystone token.
      groups:
      - post-deployment
      - pre-upgrade
      - post-upgrade
  tasks:
  # Check connectivity to horizon
  - name: Check Horizon
    uri: url={{ overcloud_horizon_url }}
    when: overcloud_horizon_url|default('')

  - name: Fail if the HorizonPublic endpoint is not defined
    fail: msg="The `HorizonPublic` endpoint is not defined in the `EndpointMap` of the deployed stack. This means Horizon may not have been deployed correctly."
    when: overcloud_horizon_url|default('') == ''

  # Check that we can obtain an auth token from horizon
  - name: Check Keystone
    uri:
      url: "{{ overcloud_keystone_url }}/tokens"
      method: POST
      body_format: json
      body:
        auth:
          passwordCredentials:
            username: admin
            password: "{{ overcloud_admin_password }}"
          tenantName: admin
      return_content: yes
    register: auth_token
    when: overcloud_keystone_url|default('')

  - name: Fail if KeystoneURL output is not available
    fail: msg="The `KeystoneURL` output is not available in the deployed stack."
    when: overcloud_keystone_url|default('') == ''

# TODO(shadower): other endpoints
