---
- name: setup network
  cs_network:
    name: "net_nic"
    zone: "{{ cs_common_zone_adv }}"
    network_offering: DefaultSharedNetworkOffering
    network_domain: example.com
    vlan: 1234
    start_ip: 10.100.123.11
    end_ip: 10.100.123.250
    gateway: 10.100.123.1
    netmask: 255.255.255.0
  register: net
- name: verify setup network
  assert:
    that:
    - net|success
    - net.name == "net_nic"

- name: setup instance
  cs_instance:
    name: "instance-nic-vm"
    template: "{{ cs_common_template }}"
    service_offering: "{{ cs_common_service_offering }}"
    zone: "{{ cs_common_zone_adv }}"
    network: "net_nic"
    state: stopped
  register: instance
- name: verify setup instance
  assert:
    that:
    - instance|success
    - instance.name == "instance-nic-vm"
    - instance.state == "Stopped"

- name: setup network 2
  cs_network:
    name: "net_nic2"
    zone: "{{ cs_common_zone_adv }}"
    network_offering: DefaultSharedNetworkOffering
    network_domain: example.com
    vlan: 1235
    start_ip: 10.100.124.11
    end_ip: 10.100.124.250
    gateway: 10.100.124.1
    netmask: 255.255.255.0
  register: net
- name: verify setup network 2
  assert:
    that:
    - net|success
    - net.name == "net_nic2"

- name: setup absent nic
  cs_instance_nic:
    vm: "instance-nic-vm"
    network: "net_nic2"
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  register: nic
- name: verify setup absent nic
  assert:
    that:
    - nic|success

- name: test fail missing params
  cs_instance_nic:
  ignore_errors: true
  register: nic
- name: verify test fail missing params
  assert:
    that:
    - nic|failed
    - "nic.msg.startswith('missing required arguments: ')"

- name: test create nic in check mode
  cs_instance_nic:
    vm: "instance-nic-vm"
    network: "net_nic2"
    zone: "{{ cs_common_zone_adv }}"
  check_mode: yes
  register: nic
- name: verify test create nic in check mode
  assert:
    that:
    - nic|success
    - nic|changed
    - nic.network == "net_nic2"
    - nic.vm == "instance-nic-vm"
    - nic.zone == "{{ cs_common_zone_adv }}"

- name: test create nic
  cs_instance_nic:
    vm: "instance-nic-vm"
    network: "net_nic2"
    ip_address: 10.100.124.42
    zone: "{{ cs_common_zone_adv }}"
  register: nic
- name: verify test create nic
  assert:
    that:
    - nic|success
    - nic|changed
    - nic.ip_address == "10.100.124.42"
    - nic.netmask == "255.255.255.0"
    - nic.network == "net_nic2"
    - nic.vm == "instance-nic-vm"
    - nic.zone == "{{ cs_common_zone_adv }}"
    - nic.mac_address is defined

- name: test create nic idempotence
  cs_instance_nic:
    vm: "instance-nic-vm"
    network: "net_nic2"
    ip_address: 10.100.124.42
    zone: "{{ cs_common_zone_adv }}"
  register: nic
- name: verify test create nic idempotence
  assert:
    that:
    - nic|success
    - not nic|changed
    - nic.ip_address == "10.100.124.42"
    - nic.netmask == "255.255.255.0"
    - nic.network == "net_nic2"
    - nic.vm == "instance-nic-vm"
    - nic.zone == "{{ cs_common_zone_adv }}"
    - nic.mac_address is defined

- name: test create nic without ip address idempotence
  cs_instance_nic:
    vm: "instance-nic-vm"
    network: "net_nic2"
    zone: "{{ cs_common_zone_adv }}"
  register: nic
- name: verify test create nic without ip address idempotence
  assert:
    that:
    - nic|success
    - not nic|changed
    - nic.ip_address == "10.100.124.42"
    - nic.netmask == "255.255.255.0"
    - nic.network == "net_nic2"
    - nic.vm == "instance-nic-vm"
    - nic.zone == "{{ cs_common_zone_adv }}"
    - nic.mac_address is defined

- name: test update nic in check mode
  cs_instance_nic:
    vm: "instance-nic-vm"
    network: "net_nic2"
    ip_address: 10.100.124.23
    zone: "{{ cs_common_zone_adv }}"
  check_mode: yes
  register: nic
- name: verify test update nic in check mode
  assert:
    that:
    - nic|success
    - nic|changed
    - nic.ip_address == "10.100.124.42"
    - nic.netmask == "255.255.255.0"
    - nic.network == "net_nic2"
    - nic.vm == "instance-nic-vm"
    - nic.zone == "{{ cs_common_zone_adv }}"
    - nic.mac_address is defined

- name: test update nic
  cs_instance_nic:
    vm: "instance-nic-vm"
    network: "net_nic2"
    ip_address: 10.100.124.23
    zone: "{{ cs_common_zone_adv }}"
  register: nic
- name: verify test update nic
  assert:
    that:
    - nic|success
    - nic|changed
    - nic.ip_address == "10.100.124.23"
    - nic.netmask == "255.255.255.0"
    - nic.network == "net_nic2"
    - nic.vm == "instance-nic-vm"
    - nic.zone == "{{ cs_common_zone_adv }}"
    - nic.mac_address is defined

- name: test update nic idempotence
  cs_instance_nic:
    vm: "instance-nic-vm"
    network: "net_nic2"
    ip_address: 10.100.124.23
    zone: "{{ cs_common_zone_adv }}"
  register: nic
- name: verify test update nic idempotence
  assert:
    that:
    - nic|success
    - not nic|changed
    - nic.ip_address == "10.100.124.23"
    - nic.netmask == "255.255.255.0"
    - nic.network == "net_nic2"
    - nic.vm == "instance-nic-vm"
    - nic.zone == "{{ cs_common_zone_adv }}"
    - nic.mac_address is defined

- name: test update nic without ip address idempotence
  cs_instance_nic:
    vm: "instance-nic-vm"
    network: "net_nic2"
    zone: "{{ cs_common_zone_adv }}"
  register: nic
- name: verify test update nic without ip address idempotence
  assert:
    that:
    - nic|success
    - not nic|changed
    - nic.ip_address == "10.100.124.23"
    - nic.netmask == "255.255.255.0"
    - nic.network == "net_nic2"
    - nic.vm == "instance-nic-vm"
    - nic.zone == "{{ cs_common_zone_adv }}"
    - nic.mac_address is defined

- name: test remove nic in check mode
  cs_instance_nic:
    vm: "instance-nic-vm"
    network: "net_nic2"
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  check_mode: yes
  register: nic
- name: verify test remove nic in check mode
  assert:
    that:
    - nic|success
    - nic|changed
    - nic.ip_address == "10.100.124.23"
    - nic.netmask == "255.255.255.0"
    - nic.network == "net_nic2"
    - nic.vm == "instance-nic-vm"
    - nic.zone == "{{ cs_common_zone_adv }}"
    - nic.mac_address is defined

- name: test remove nic
  cs_instance_nic:
    vm: "instance-nic-vm"
    network: "net_nic2"
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  register: nic
- name: verify test remove nic
  assert:
    that:
    - nic|success
    - nic|changed
    - nic.ip_address == "10.100.124.23"
    - nic.netmask == "255.255.255.0"
    - nic.network == "net_nic2"
    - nic.vm == "instance-nic-vm"
    - nic.zone == "{{ cs_common_zone_adv }}"
    - nic.mac_address is defined

- name: test remove nic idempotence
  cs_instance_nic:
    vm: "instance-nic-vm"
    network: "net_nic2"
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  register: nic
- name: verify test remove nic idempotence
  assert:
    that:
    - nic|success
    - not nic|changed

- name: cleanup instance
  cs_instance:
    name: "instance-nic-vm"
    state: expunged
  register: instance
- name: verify cleanup instance
  assert:
    that:
    - instance|success

- name: cleanup network
  cs_network:
    name: "net_nic"
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  register: net
- name: verify cleanup network
  assert:
    that:
    - net|success

- name: cleanup network 2
  cs_network:
    name: "net_nic2"
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  register: net
- name: verify cleanup network 2
  assert:
    that:
    - net|success
