---
- name: "Check vars defined correctly"
  assert:
    that:
      - "calico_pool_name is defined"
      - "calico_pool_name is match('^[a-zA-Z0-9-_\\\\.]{2,63}$')"
    msg: "calico_pool_name contains invalid characters"

- name: "Check calico network backend defined correctly"
  assert:
    that:
      - "calico_network_backend in ['bird', 'vxlan', 'none']"
    msg: "calico network backend is not 'bird', 'vxlan' or 'none'"
  when:
    - calico_network_backend is defined

- name: "Check ipip and vxlan mode defined correctly"
  assert:
    that:
      - "calico_ipip_mode in ['Always', 'CrossSubnet', 'Never']"
      - "calico_vxlan_mode in ['Always', 'CrossSubnet', 'Never']"
    msg: "calico inter host encapsulation mode is not 'Always', 'CrossSubnet' or 'Never'"

- name: "Check ipip and vxlan mode if simultaneously enabled"
  assert:
    that:
      - "calico_vxlan_mode in ['Never']"
    msg: "IP in IP and VXLAN mode is mutualy exclusive modes"
  when:
    - "calico_ipip_mode in ['Always', 'CrossSubnet']"

- name: "Check ipip and vxlan mode if simultaneously enabled"
  assert:
    that:
      - "calico_ipip_mode in ['Never']"
    msg: "IP in IP and VXLAN mode is mutualy exclusive modes"
  when:
    - "calico_vxlan_mode in ['Always', 'CrossSubnet']"

- name: "Get current version of calico cluster version"
  shell: "{{ bin_dir }}/calicoctl.sh version  | grep 'Cluster Version:' | awk '{ print $3}'"
  register: calico_version_on_server
  run_once: yes
  changed_when: false

- name: "Determine if calico upgrade is needed"
  block:
    - name: "Check that calico version is enough for upgrade"
      assert:
        that:
          - calico_version_on_server.stdout is version('v2.6.5', '>=')
        msg: "Your version of calico is not fresh enough for upgrade"
      when: calico_upgrade_enabled

    - name: "Set upgrade flag when version needs to be updated"
      set_fact:
        calico_upgrade_needed: True
      when:
        - calico_version_on_server.stdout is version('v2.6.5', '>=')
        - calico_version_on_server.stdout is version('v3.0.0', '<')

  when:
    - calico_version_on_server.stdout is defined
    - calico_version_on_server.stdout
    - inventory_hostname == groups['kube-master'][0]
  run_once: yes