# Copyright: (c) 2019, Hetzner Cloud GmbH <info@hetzner-cloud.de>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
---
- name: test missing required parameters on create ssh_key
  hcloud_ssh_key:
    name: "{{ hcloud_ssh_key_name }}"
  register: result
  ignore_errors: yes
- name: verify fail test missing required parameters on create ssh_key
  assert:
    that:
      - result is failed
      - 'result.msg == "missing required arguments: public_key"'

- name: test create ssh key with check mode
  hcloud_ssh_key:
    name: "{{ hcloud_ssh_key_name }}"
    public_key: "{{ key_material }}"
  register: result
  check_mode: yes
- name: test create ssh key with check mode
  assert:
    that:
      - result is changed

- name: test create ssh key
  hcloud_ssh_key:
    name: "{{ hcloud_ssh_key_name }}"
    public_key: "{{ key_material }}"
    labels:
      key: value
      my-label: label
  register: sshKey
- name: verify create ssh key
  assert:
    that:
      - sshKey is changed
      - sshKey.hcloud_ssh_key.name == "{{ hcloud_ssh_key_name }}"
      - sshKey.hcloud_ssh_key.public_key ==  "{{ key_material }}"
      - sshKey.hcloud_ssh_key.labels.key == "value"

- name: test create ssh key idempotence
  hcloud_ssh_key:
    name: "{{ hcloud_ssh_key_name }}"
    public_key: "{{ key_material }}"
  register: result
- name: verify create ssh key idempotence
  assert:
    that:
      - result is not changed

- name: test update ssh key with check mode
  hcloud_ssh_key:
    id: "{{ sshKey.hcloud_ssh_key.id }}"
    name: "changed-{{ hcloud_ssh_key_name }}"
  register: result
  check_mode: yes
- name: test create ssh key with check mode
  assert:
    that:
      - result is changed

- name: test update ssh key
  hcloud_ssh_key:
    id: "{{ sshKey.hcloud_ssh_key.id }}"
    name: "changed-{{ hcloud_ssh_key_name }}"
    labels:
      key: value
  register: result
- name: test update ssh key
  assert:
    that:
      - result is changed
      - result.hcloud_ssh_key.name == "changed-{{ hcloud_ssh_key_name }}"

- name: test update ssh key with same labels
  hcloud_ssh_key:
    id: "{{ sshKey.hcloud_ssh_key.id }}"
    name: "changed-{{ hcloud_ssh_key_name }}"
    labels:
      key: value
  register: result
- name: test update ssh key with same labels
  assert:
    that:
      - result is not changed

- name: test update ssh key with other labels
  hcloud_ssh_key:
    id: "{{ sshKey.hcloud_ssh_key.id }}"
    name: "changed-{{ hcloud_ssh_key_name }}"
    labels:
      key: value
      test: "val123"
  register: result
- name: test update ssh key  with other labels
  assert:
    that:
      - result is changed

- name: test rename ssh key
  hcloud_ssh_key:
    id: "{{ sshKey.hcloud_ssh_key.id }}"
    name: "{{ hcloud_ssh_key_name }}"
  register: result
- name: test rename ssh key
  assert:
    that:
      - result is changed
      - result.hcloud_ssh_key.name == "{{ hcloud_ssh_key_name }}"

- name: test create server with ssh key
  hcloud_server:
    name: "{{ hcloud_server_name }}"
    server_type: cx11
    image: "ubuntu-18.04"
    ssh_keys:
      - "{{ hcloud_ssh_key_name }}"
    state: started
  register: main_server
- name: verify create server with ssh key
  assert:
    that:
      - main_server is changed

- name: absent ssh key
  hcloud_ssh_key:
    id: "{{ sshKey.hcloud_ssh_key.id }}"
    state: absent
  register: result
- name: verify absent server
  assert:
    that:
      - result is success

- name: cleanup
  hcloud_server:
    name: "{{ hcloud_server_name }}"
    state: absent
  register: result
- name: verify cleanup
  assert:
    that:
      - result is success
