---
- include_tasks: vsphere-credentials-check.yml
  tags: vsphere-csi-driver

- name: vSphere CSI Driver | Choose how to deploy CSI driver based on controller version
  set_fact:
    controller_spec: "{% if vsphere_csi_controller is version('v2.0.0', '<') %}vsphere-csi-controller-ss.yml{% else %}vsphere-csi-controller-deployment.yml{% endif %}"
  tags: vsphere-csi-driver

- name: vSphere CSI Driver | Generate CSI cloud-config
  template:
    src: "{{ item }}.j2"
    dest: "{{ kube_config_dir }}/{{ item }}"
    mode: 0640
  with_items:
    - vsphere-csi-cloud-config
  when: inventory_hostname == groups['kube_control_plane'][0]
  tags: vsphere-csi-driver

- name: vSphere CSI Driver | Generate Manifests
  template:
    src: "{{ item }}.j2"
    dest: "{{ kube_config_dir }}/{{ item }}"
  with_items:
    - vsphere-csi-controller-rbac.yml
    - vsphere-csi-node-rbac.yaml
    - "{{ controller_spec }}"
    - vsphere-csi-node.yml
  register: vsphere_csi_manifests
  when: inventory_hostname == groups['kube_control_plane'][0]
  tags: vsphere-csi-driver

- name: vSphere CSI Driver | Generate a CSI secret manifest
  command: "{{ bin_dir }}/kubectl create secret generic vsphere-config-secret --from-file=csi-vsphere.conf={{ kube_config_dir }}/vsphere-csi-cloud-config -n kube-system --dry-run --save-config -o yaml"
  register: vsphere_csi_secret_manifest
  when: inventory_hostname == groups['kube_control_plane'][0]
  no_log: true
  tags: vsphere-csi-driver

- name: vSphere CSI Driver | Apply a CSI secret manifest
  command:
    cmd: "{{ bin_dir }}/kubectl apply -f -"
    stdin: "{{ vsphere_csi_secret_manifest.stdout }}"
  when: inventory_hostname == groups['kube_control_plane'][0]
  no_log: true
  tags: vsphere-csi-driver

- name: vSphere CSI Driver | Apply Manifests
  kube:
    kubectl: "{{ bin_dir }}/kubectl"
    filename: "{{ kube_config_dir }}/{{ item.item }}"
    state: "latest"
  with_items:
    - "{{ vsphere_csi_manifests.results }}"
  when:
    - inventory_hostname == groups['kube_control_plane'][0]
    - not item is skipped
  loop_control:
    label: "{{ item.item }}"
  tags: vsphere-csi-driver