---
- include_tasks: vsphere-credentials-check.yml

- name: External vSphere Cloud Controller | Generate CPI cloud-config
  template:
    src: "{{ item }}.j2"
    dest: "{{ kube_config_dir }}/{{ item }}"
    mode: 0640
  with_items:
    - external-vsphere-cpi-cloud-config
  when: inventory_hostname == groups['kube_control_plane'][0]

- name: External vSphere Cloud Controller | Generate Manifests
  template:
    src: "{{ item }}.j2"
    dest: "{{ kube_config_dir }}/{{ item }}"
    mode: 0644
  with_items:
    - external-vsphere-cpi-cloud-config-secret.yml
    - external-vsphere-cloud-controller-manager-roles.yml
    - external-vsphere-cloud-controller-manager-role-bindings.yml
    - external-vsphere-cloud-controller-manager-ds.yml
  register: external_vsphere_manifests
  when: inventory_hostname == groups['kube_control_plane'][0]

- name: External vSphere Cloud Provider Interface | Create a CPI configMap manifest
  command: "{{ bin_dir }}/kubectl create configmap cloud-config --from-file=vsphere.conf={{ kube_config_dir }}/external-vsphere-cpi-cloud-config -n kube-system --dry-run --save-config -o yaml"
  register: external_vsphere_configmap_manifest
  when: inventory_hostname == groups['kube_control_plane'][0]

- name: External vSphere Cloud Provider Interface | Apply a CPI configMap manifest
  command:
    cmd: "{{ bin_dir }}/kubectl apply -f -"
    stdin: "{{ external_vsphere_configmap_manifest.stdout }}"
  when: inventory_hostname == groups['kube_control_plane'][0]

- name: External vSphere Cloud Controller | Apply Manifests
  kube:
    kubectl: "{{ bin_dir }}/kubectl"
    filename: "{{ kube_config_dir }}/{{ item.item }}"
    state: "latest"
  with_items:
    - "{{ external_vsphere_manifests.results }}"
  when:
    - inventory_hostname == groups['kube_control_plane'][0]
    - not item is skipped
  loop_control:
    label: "{{ item.item }}"