---
- debug: msg="START net_vrf junos/basic.yaml"

- name: setup - remove vrf
  net_vrf:
    name: test-1
    state: absent
    provider: "{{ netconf }}"

- name: Configure vrf and its parameter
  net_vrf:
    name: test-1
    description: test-vrf-1
    interfaces:
          - ge-0/0/6
          - ge-0/0/5
    rd: 3.3.3.3:10
    target: target:65513:111
    state: present
    provider: "{{ netconf }}"
  register: result

- assert:
    that:
      - "result.changed == true"
      - result.diff.prepared | search("\+ *test-1")
      - result.diff.prepared | search("\+ *description test-vrf-1")
      - result.diff.prepared | search("\+ *instance-type vrf")
      - result.diff.prepared | search("\+ *interface ge-0/0/5.0")
      - result.diff.prepared | search("\+ *interface ge-0/0/6.0")
      - result.diff.prepared | search("\+ *route-distinguisher 3.3.3.3:10")
      - result.diff.prepared | search("\+ *vrf-target target:65513:111")

- name: Configure vrf and its parameter (idempotent)
  net_vrf:
    name: test-1
    description: test-vrf-1
    interfaces:
          - ge-0/0/6
          - ge-0/0/5
    rd: 3.3.3.3:10
    target: target:65513:111
    state: present
    provider: "{{ netconf }}"
  register: result

- assert:
    that:
      - "result.changed == false"

- name: Change vrf parameter
  net_vrf:
    name: test-1
    description: test-vrf-1
    interfaces:
          - ge-0/0/3
          - ge-0/0/2
    rd: 1.1.1.1:10
    target: target:65514:113
    state: present
    provider: "{{ netconf }}"
  register: result

- assert:
    that:
      - "result.changed == true"
      - "'[edit routing-instances test-1]' in result.diff.prepared"
      - result.diff.prepared | search("\+ *interface ge-0/0/2.0")
      - result.diff.prepared | search("\+ *interface ge-0/0/3.0")
      - "'[edit routing-instances test-1]' in result.diff.prepared"
      - result.diff.prepared | search("\+ *route-distinguisher 1.1.1.1:10")
      - result.diff.prepared | search("\+ *vrf-target target:65514:113")


- name: Delete vrf
  net_vrf:
    name: test-1
    description: test-vrf-1
    interfaces:
          - ge-0/0/3
          - ge-0/0/2
    rd: 1.1.1.1:10
    target: target:65514:113
    state: absent
    provider: "{{ netconf }}"
  register: result

- assert:
    that:
      - "result.changed == true"
      - result.diff.prepared | search("\- *test-1")
      - result.diff.prepared | search("\- *description test-vrf-1")
      - result.diff.prepared | search("\- *instance-type vrf")
      - result.diff.prepared | search("\- *interface ge-0/0/2.0")
      - result.diff.prepared | search("\- *interface ge-0/0/3.0")
      - result.diff.prepared | search("\- *route-distinguisher 1.1.1.1:10")
      - result.diff.prepared | search("\- *vrf-target target:65514:113")

- name: Delete vrf (idempotent)
  net_vrf:
    name: test-1
    description: test-vrf-1
    interfaces:
          - ge-0/0/3
          - ge-0/0/2
    rd: 1.1.1.1:10
    target: target:65514:113
    state: absent
    provider: "{{ netconf }}"
  register: result

- assert:
    that:
      - "result.changed == false"

- name: Setup vrf using aggregate
  net_vrf:
    aggregate:
    - name: test-1
    - name: test-2
    state: absent
    provider: "{{ netconf }}"
  register: result

- name: Create vrf using aggregate
  net_vrf:
    aggregate:
    - name: test-1
      description: test-vrf-1
      interfaces:
        - ge-0/0/3
        - ge-0/0/2
      rd: 1.1.1.1:10
      target: target:65514:113
    - name: test-2
      description: test-vrf-2
      interfaces:
        - ge-0/0/4
        - ge-0/0/5
      rd: 2.2.2.2:10
      target: target:65515:114
    provider: "{{ netconf }}"
  register: result

- assert:
    that:
      - "result.changed == true"
      - result.diff.prepared | search("\+ *test-1")
      - result.diff.prepared | search("\+ *description test-vrf-1")
      - result.diff.prepared | search("\+ *instance-type vrf")
      - result.diff.prepared | search("\+ *interface ge-0/0/2.0")
      - result.diff.prepared | search("\+ *interface ge-0/0/3.0")
      - result.diff.prepared | search("\+ *route-distinguisher 1.1.1.1:10")
      - result.diff.prepared | search("\+ *vrf-target target:65514:113")
      - result.diff.prepared | search("\+ *test-2")
      - result.diff.prepared | search("\+ *description test-vrf-2")
      - result.diff.prepared | search("\+ *instance-type vrf")
      - result.diff.prepared | search("\+ *interface ge-0/0/4.0")
      - result.diff.prepared | search("\+ *interface ge-0/0/5.0")
      - result.diff.prepared | search("\+ *route-distinguisher 2.2.2.2:10")
      - result.diff.prepared | search("\+ *vrf-target target:65515:114")

- name: Delete vrf configuration using aggregate
  net_vrf:
    aggregate:
    - name: test-1
    - name: test-2
    state: absent
    provider: "{{ netconf }}"
  register: result

- assert:
    that:
      - "result.changed == true"
      - result.diff.prepared | search("\- *test-1")
      - result.diff.prepared | search("\- *description test-vrf-1")
      - result.diff.prepared | search("\- *instance-type vrf")
      - result.diff.prepared | search("\- *interface ge-0/0/2.0")
      - result.diff.prepared | search("\- *interface ge-0/0/3.0")
      - result.diff.prepared | search("\- *route-distinguisher 1.1.1.1:10")
      - result.diff.prepared | search("\- *vrf-target target:65514:113")
      - result.diff.prepared | search("\- *test-2")
      - result.diff.prepared | search("\- *description test-vrf-2")
      - result.diff.prepared | search("\- *instance-type vrf")
      - result.diff.prepared | search("\- *interface ge-0/0/4.0")
      - result.diff.prepared | search("\- *interface ge-0/0/5.0")
      - result.diff.prepared | search("\- *route-distinguisher 2.2.2.2:10")
      - result.diff.prepared | search("\- *vrf-target target:65515:114")

- name: Delete vrf configuration using aggregate (idempotent)
  net_vrf:
    aggregate:
    - name: test-1
    - name: test-2
    state: absent
    provider: "{{ netconf }}"
  register: result

- assert:
    that:
      - "result.changed == false"
