# Copyright 2022 Dell Inc. or its subsidiaries. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
---

- name: Deploy cobbler pod
  command: "kubectl apply -f {{ role_path }}/files/k8s_cobbler.yml"
  changed_when: true
  tags: install
  when:
    - cobbler_container_status
    - not cobbler_config_status
    - not provision_os_change

- name: Wait for cobbler pod to come to ready state
  command: kubectl wait --for=condition=ready -n {{ cobbler_namespace }} pod -l app=cobbler
  changed_when: false
  tags: install

- name: Get cobbler pod name
  command: 'kubectl get pod -n {{ cobbler_namespace }} -l app=cobbler -o jsonpath="{.items[0].metadata.name}"'
  changed_when: false
  register: cobbler_pod_name
  tags: install

- name: Wait for 30 seconds to get cobbler pod ready
  wait_for:
    timeout: 30

- name: Copy kickstart file inside cobbler container
  command: kubectl cp {{ role_path }}/files/{{ cobbler_kickstart_file }} {{ cobbler_pod_name.stdout }}:/root/{{ cobbler_kickstart_file }} -n {{ cobbler_namespace }}
  changed_when: true
  when: not cobbler_config_status

- name: Configuring cobbler inside container (It may take 5-10 mins)
  command: "kubectl exec --stdin --tty -n {{ cobbler_namespace }} {{ cobbler_pod_name.stdout }} -- ansible-playbook /root/cobbler_configurations_rocky.yml -e provision_os={{ provision_os }} -e file_perm={{ file_perm }}"
  changed_when: true
  tags: install
  when:
    - not cobbler_config_status
    - mgmt_os == os_supported_rocky
    - not provision_os_change

- name: Configuring cobbler inside container (It may take 5-10 mins)
  command: "kubectl exec --stdin --tty -n {{ cobbler_namespace }} {{ cobbler_pod_name.stdout }} -- ansible-playbook /root/cobbler_configurations_leap.yml -e provision_os={{ provision_os }} -e host_network_nic={{ host_network_nic }}  -e file_perm={{ file_perm }}"
  changed_when: true
  tags: install
  when:
    - not cobbler_config_status
    - os_supported_leap in mgmt_os 
    - not provision_os_change

- name: Configuring cobbler for multiple profile support
  command: "kubectl exec --stdin --tty -n {{ cobbler_namespace }} {{ cobbler_pod_name.stdout }} -- ansible-playbook /root/multi_cluster_provisioning.yml -e provision_os={{ provision_os }} -e provision_os_change={{ provision_os_change }} -e file_perm={{ file_perm }}"
  changed_when: true
  tags: install
  when: provision_os_change

- name: Schedule task
  cron:
    name: "start cobbler on reboot"
    special_time: reboot
    job: "ansible-playbook {{ role_path }}/files/start_cobbler.yml"
  tags: install
  when: not cobbler_config_status

- name: Execute cobbler sync in cobbler container
  command: 'kubectl exec --stdin --tty -n {{ cobbler_namespace }} {{ cobbler_pod_name.stdout }} -- cobbler sync'
  changed_when: true
  when: cobbler_config_status

- name: Store the provisioned os in .provisioned_os.txt file
  shell: echo "{{ provision_os }}">> {{ role_path }}/files/.provisioned_os
  changed_when: false

- name: Remove the files
  file:
    path: "{{ item }}"
    state: absent
  with_items:
    - "{{ role_path }}/files/.users.digest"
    - "{{ role_path }}/files/dhcp.template"
    - "{{ role_path }}/files/settings"
    - "{{ role_path }}/files/{{ cobbler_kickstart_file }}"
    - "{{ role_path }}/files/temp_host_mapping_file.csv.bak"
    - "/mnt/tmp"