# ============================================================
- name: Test rax_meta with no args
  rax_meta:
  ignore_errors: true
  register: rax_meta

- name: Validate results of rax_meta with no args
  assert:
    that:
      - rax_meta|failed
      - 'rax_meta.msg == "one of the following is required: address,id,name"'
# ============================================================



# ============================================================
- name: Test rax_meta with credentials and address
  rax_meta:
    username: "{{ rackspace_username }}"
    api_key: "{{ rackspace_api_key }}"
    address: '1.2.3.4'
  ignore_errors: true
  register: rax_meta

- name: Validate results of rax_meta with only creds
  assert:
    that:
      - rax_meta|failed
      - rax_meta.msg.startswith('None is not a valid region')
# ============================================================


# ============================================================
- name: Test rax_meta with creds, region and address
  rax_meta:
    username: "{{ rackspace_username }}"
    api_key: "{{ rackspace_api_key }}"
    region: "{{ rackspace_region }}"
    address: '1.2.3.4'
  ignore_errors: true
  register: rax_meta

- name: Validate rax_meta creds, region and address
  assert:
    that:
      - rax_meta|failed
      - rax_meta.msg == 'Failed to find a server matching provided search parameters'
# ============================================================



# ============================================================
- name: Test rax_meta with creds, region and id
  rax_meta:
    username: "{{ rackspace_username }}"
    api_key: "{{ rackspace_api_key }}"
    region: "{{ rackspace_region }}"
    id: '1234'
  ignore_errors: true
  register: rax_meta

- name: Validate rax_meta creds, region and id
  assert:
    that:
      - rax_meta|failed
      - rax_meta.msg == 'Failed to find a server matching provided search parameters'
# ============================================================



# ============================================================
- name: Test rax_meta with creds, region and name
  rax_meta:
    username: "{{ rackspace_username }}"
    api_key: "{{ rackspace_api_key }}"
    region: "{{ rackspace_region }}"
    name: 'bad'
  ignore_errors: true
  register: rax_meta

- name: Validate rax_meta creds, region and name
  assert:
    that:
      - rax_meta|failed
      - rax_meta.msg == 'Failed to find a server matching provided search parameters'
# ============================================================



# ============================================================
- name: Test rax_meta with creds, region, address, id and name
  rax_meta:
    username: "{{ rackspace_username }}"
    api_key: "{{ rackspace_api_key }}"
    region: "{{ rackspace_region }}"
    address: '1.2.3.4'
    id: '1234'
    name: 'bad'
  ignore_errors: true
  register: rax_meta

- name: Validate rax_meta creds, region, address, id and name
  assert:
    that:
      - rax_meta|failed
      - "rax_meta.msg == 'parameters are mutually exclusive: [\\'address\\', \\'id\\', \\'name\\']'"
# ============================================================


# ============================================================
- name: Build CloudServer for rax_meta tests
  rax:
    username: "{{ rackspace_username }}"
    api_key: "{{ rackspace_api_key }}"
    region: "{{ rackspace_region }}"
    image: "{{ rackspace_image_id }}"
    flavor: "{{ rackspace_flavor }}"
    name: "{{ resource_prefix }}-rax_meta"
    meta:
      foo: bar
    wait: true
    wait_timeout: "{{ rackspace_wait_timeout }}"
  register: rax

- name: Validate build
  assert:
    that:
      - rax|success
      - rax|changed
      - rax.action == 'create'
      - rax.instances|length == 1
      - rax.instances[0].name == "{{ resource_prefix }}-rax_meta"
# ============================================================



# ============================================================
- name: Test rax_meta with creds, region, and valid public IPv4 address
  rax_meta:
    username: "{{ rackspace_username }}"
    api_key: "{{ rackspace_api_key }}"
    region: "{{ rackspace_region }}"
    address: "{{ rax.success.0.rax_accessipv4 }}"
  register: rax_meta


- name: Validate rax_meta creds, region, and valid public IPv4 address
  assert:
    that:
      - rax_meta|success
      - rax_meta.meta == {}
# ============================================================


# ============================================================
- name: Test rax_meta with creds, region, and valid public IPv6 address
  rax_meta:
    username: "{{ rackspace_username }}"
    api_key: "{{ rackspace_api_key }}"
    region: "{{ rackspace_region }}"
    address: "{{ rax.success.0.rax_accessipv6 }}"
  register: rax_meta


- name: Validate rax_meta creds, region, and valid public IPv6 address
  assert:
    that:
      - rax_meta|success
      - rax_meta.meta == {}
# ============================================================



# ============================================================
- name: Test rax_meta with creds, region, and valid private IPv4 address
  rax_meta:
    username: "{{ rackspace_username }}"
    api_key: "{{ rackspace_api_key }}"
    region: "{{ rackspace_region }}"
    address: "{{ rax.success.0.rax_networks.private|first }}"
  register: rax_meta


- name: Validate rax_meta creds, region, and valid private IPv4 address
  assert:
    that:
      - rax_meta|success
      - rax_meta.meta == {}
# ============================================================



# ============================================================
- name: Test rax_meta with creds, region, and valid ID
  rax_meta:
    username: "{{ rackspace_username }}"
    api_key: "{{ rackspace_api_key }}"
    region: "{{ rackspace_region }}"
    id: "{{ rax.success.0.rax_id }}"
  register: rax_meta


- name: Validate rax_meta creds, region, and valid ID
  assert:
    that:
      - rax_meta|success
      - rax_meta.meta == {}
# ============================================================



# ============================================================
- name: Test rax_meta with creds, region, and valid name
  rax_meta:
    username: "{{ rackspace_username }}"
    api_key: "{{ rackspace_api_key }}"
    region: "{{ rackspace_region }}"
    name: "{{ rax.success.0.rax_name }}"
  register: rax_meta


- name: Validate rax_meta creds, region, and valid name
  assert:
    that:
      - rax_meta|success
      - rax_meta.meta == {}
# ============================================================



# ============================================================
- name: Test rax_meta with creds, region, and valid ID set foo=bar
  rax_meta:
    username: "{{ rackspace_username }}"
    api_key: "{{ rackspace_api_key }}"
    region: "{{ rackspace_region }}"
    id: "{{ rax.success.0.rax_id }}"
    meta:
      foo: bar
  register: rax_meta


- name: Validate rax_meta creds, region, and valid ID set foo=bar
  assert:
    that:
      - rax_meta|success
      - rax_meta|changed
      - "rax_meta.meta == {'foo': 'bar'}"
# ============================================================



# ============================================================
- name: Test rax_meta with creds, region, and valid ID set bar=baz
  rax_meta:
    username: "{{ rackspace_username }}"
    api_key: "{{ rackspace_api_key }}"
    region: "{{ rackspace_region }}"
    id: "{{ rax.success.0.rax_id }}"
    meta:
      bar: baz
  register: rax_meta


- name: Validate rax_meta creds, region, and valid ID set bar=baz
  assert:
    that:
      - rax_meta|success
      - "rax_meta.meta == {'bar': 'baz'}"
# ============================================================



# ============================================================
- name: Test rax_meta with creds, region, and valid ID set bar=baz (idempotent)
  rax_meta:
    username: "{{ rackspace_username }}"
    api_key: "{{ rackspace_api_key }}"
    region: "{{ rackspace_region }}"
    id: "{{ rax.success.0.rax_id }}"
    meta:
      bar: baz
  register: rax_meta


- name: Validate rax_meta creds, region, and valid ID set bar=baz
  assert:
    that:
      - rax_meta|success
      - not rax_meta|changed
      - "rax_meta.meta == {'bar': 'baz'}"
# ============================================================



# ============================================================
- name: Test rax_meta with creds, region, and valid ID delete meta
  rax_meta:
    username: "{{ rackspace_username }}"
    api_key: "{{ rackspace_api_key }}"
    region: "{{ rackspace_region }}"
    id: "{{ rax.success.0.rax_id }}"
  register: rax_meta


- name: Validate rax_meta creds, region, and valid ID delete meta
  assert:
    that:
      - rax_meta|success
      - rax_meta|changed
      - rax_meta.meta == {}
# ============================================================



# ============================================================
- name: "Delete CloudServer"
  rax:
    username: "{{ rackspace_username }}"
    api_key: "{{ rackspace_api_key }}"
    region: "{{ rackspace_region }}"
    instance_ids:
      - "{{ rax.success.0.rax_id }}"
    state: absent
    wait: true
    wait_timeout: "{{ rackspace_wait_timeout }}"
  register: rax

- name: "Validate delete"
  assert:
    that:
      - rax|changed
      - rax|success
      - rax.action == 'delete'
      - rax.success[0].name == "{{ resource_prefix }}-rax_meta"
# ============================================================