---

- name: Ambassador | Create addon dir
  file:
    path: "{{ kube_config_dir }}/addons/ambassador"
    state: directory
    owner: root
    group: root
    mode: 0755
  when:
    - inventory_hostname == groups['kube-master'][0]

- name: Ambassador | Templates list
  set_fact:
    ingress_ambassador_templates:
      - { name: 00-namespace, file: 00-namespace.yml, type: ns }
      - { name: crd-ambassador-installation, file: crd-ambassador-installation.yml, type: customresourcedefinition }
      - { name: sa-ambassador, file: sa-ambassador.yml, type: sa }
      - { name: clusterrole-ambassador, file: clusterrole-ambassador.yml, type: clusterrole }
      - { name: clusterrolebinding-ambassador, file: clusterrolebinding-ambassador.yml, type: clusterrolebinding }
      - { name: role-ambassador, file: role-ambassador.yml, type: role }
      - { name: rolebinding-ambassador, file: rolebinding-ambassador.yml, type: rolebinding }
      - { name: deploy-ambassador, file: deploy-ambassador.yml, type: deploy }

- name: Ambassador | Create manifests
  template:
    src: "{{ item.file }}.j2"
    dest: "{{ kube_config_dir }}/addons/ambassador/{{ item.file }}"
  loop: "{{ ingress_ambassador_templates }}"
  register: ingress_ambassador_manifests
  when:
    - inventory_hostname == groups['kube-master'][0]

- name: Ambassador | Apply manifests
  kube:
    name: "{{ item.item.name }}"
    namespace: "{{ ingress_ambassador_namespace }}"
    kubectl: "{{ bin_dir }}/kubectl"
    resource: "{{ item.item.type }}"
    filename: "{{ kube_config_dir }}/addons/ambassador/{{ item.item.file }}"
    state: "latest"
  loop: "{{ ingress_ambassador_manifests.results }}"
  when:
    - inventory_hostname == groups['kube-master'][0]

# load the AmbassadorInstallation _after_ the CustomResourceDefinition has been loaded

- name: Ambassador | AmbassadorInstallation template
  set_fact:
    ingress_ambassador_cr_templates:
      - { name: cr-ambassador-installation, file: cr-ambassador-installation.yml, type: cr }

- name: Ambassador | Create installation manifests
  template:
    src: "{{ item.file }}.j2"
    dest: "{{ kube_config_dir }}/addons/ambassador/{{ item.file }}"
  loop: "{{ ingress_ambassador_cr_templates }}"
  register: ingress_ambassador_cr_manifests
  when:
    - inventory_hostname == groups['kube-master'][0]

- name: Ambassador | Apply AmbassadorInstallation
  kube:
    name: "{{ item.item.name }}"
    namespace: "{{ ingress_ambassador_namespace }}"
    kubectl: "{{ bin_dir }}/kubectl"
    resource: "{{ item.item.type }}"
    filename: "{{ kube_config_dir }}/addons/ambassador/{{ item.item.file }}"
    state: "latest"
  loop: "{{ ingress_ambassador_cr_manifests.results }}"
  when:
    - inventory_hostname == groups['kube-master'][0]
