- name: Prepare random number
  set_fact:
    vnetname: "vnet{{ resource_group | hash('md5') | truncate(7, True, '') }}{{ 1000 | random }}"

- name: Delete virtual network, if it exists
  azure_rm_virtualnetwork:
    name: "{{ vnetname }}"
    resource_group: "{{ resource_group }}"
    state: absent

- name: Create virtual network
  azure_rm_virtualnetwork:
    name: "{{ vnetname }}"
    address_prefixes_cidr:
      - 10.1.0.0/16
      - 172.100.0.0/16
    tags:
      testing: testing
      delete: on-exit
    resource_group: "{{ resource_group }}"

- name: Create virtual network
  azure_rm_virtualnetwork:
    name: "{{ vnetname }}"
    address_prefixes_cidr:
      - 10.1.0.0/16
      - 172.100.0.0/16
    dns_servers:
      - 127.0.0.1
      - 127.0.0.3
    tags:
      testing: testing
      delete: on-exit
    resource_group: "{{ resource_group }}"
  register: output

- assert:
    that:
      - "output.state.address_prefixes | length == 2"
      - "output.state.dns_servers | length == 2"
      - "output.state.tags.delete == 'on-exit'"
      - "output.state.tags | length == 2"

- name: Attach a subnet
  azure_rm_subnet:
    resource_group: "{{ resource_group }}"
    name: "{{ vnetname }}"
    virtual_network_name: "{{ vnetname }}"
    address_prefix_cidr: "10.1.0.0/24"

- name: Gather facts by name, tags
  azure_rm_virtualnetwork_facts:
    resource_group: "{{ resource_group }}"
    name: "{{ vnetname }}"
    tags:
      - testing
  register: facts

- assert:
    that:
      - "azure_virtualnetworks | length == 1"
      - "facts.virtualnetworks | length == 1"
      - "facts.virtualnetworks[0].dns_servers | length == 2"
      - "facts.virtualnetworks[0].address_prefixes | length == 2"
      - "facts.virtualnetworks[0].subnets | length == 1"

- name: Gather facts by resource group, tags
  azure_rm_virtualnetwork_facts:
    resource_group: "{{ resource_group }}"
    tags:
      - testing

- assert:
    that: "azure_virtualnetworks | length == 1"

- name: Gather facts by tags
  azure_rm_virtualnetwork_facts:
    tags:
      - testing

- assert:
    that: "azure_virtualnetworks | length >= 1"

- name: Should be idempotent
  azure_rm_virtualnetwork:
    name: "{{ vnetname }}"
    address_prefixes_cidr:
      - 10.1.0.0/16
      - 172.100.0.0/16
    dns_servers:
      - 127.0.0.1
      - 127.0.0.3
    tags:
      testing: testing
      delete: on-exit
    resource_group: "{{ resource_group }}"
  register: output

- assert:
    that: not output.changed

- name: Update tags
  azure_rm_virtualnetwork:
    name: "{{ vnetname }}"
    tags:
      testing: 'no'
      delete: never
      foo: bar
    resource_group: "{{ resource_group }}"
  register: output

- assert:
     that: output.state.tags | length == 3

- name: Purge tags
  azure_rm_virtualnetwork:
    name: "{{ vnetname }}"
    append_tags: no
    tags:
      testing: 'always'
    resource_group: "{{ resource_group }}"
  register: output

- assert:
     that:
       - output.state.tags | length == 1
       - output.state.tags.testing == 'always'

- name: Should require address_prefixes_cidr when purge_address_prefixes
  azure_rm_virtualnetwork:
    name: "{{ vnetname }}"
    purge_address_prefixes: true
    resource_group: "{{ resource_group }}"
  register: output
  ignore_errors: yes

- assert:
      that: output.failed

- name: Purge address prefixes
  azure_rm_virtualnetwork:
    name: "{{ vnetname }}"
    address_prefixes_cidr: 10.1.0.0/16
    purge_address_prefixes: true
    resource_group: "{{ resource_group }}"
  register: output

- assert:
    that:
        - output.state.address_prefixes | length == 1
        - output.state.address_prefixes[0] == '10.1.0.0/16'
        - output.state.dns_servers | length == 2
        - output.state.dns_servers[0] == '127.0.0.1'

- name: Purge DNS servers
  azure_rm_virtualnetwork:
    name: "{{ vnetname }}"
    purge_dns_servers: true
    resource_group: "{{ resource_group }}"
  register: output

- assert:
    that: output.state['dns_servers'] is undefined

- name: Gather facts
  azure_rm_virtualnetwork_facts:
    resource_group: "{{ resource_group }}"
    name: "{{ vnetname }}"
  register: facts

- assert:
    that:
      - azure_virtualnetworks | length == 1
      - facts.virtualnetworks | length == 1
      - "facts.virtualnetworks[0].subnets | length == 1"

- name: Delete virtual network
  azure_rm_virtualnetwork:
    name: "{{ vnetname }}"
    resource_group: "{{ resource_group }}"
    state: absent