# Copyright 2021 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: Validate the cluster
  hosts: localhost
  connection: local
  gather_facts: no
  roles:
    - cluster_validation
    
- name: Validate nfs_node config
  hosts: nfs_node
  gather_facts: false
  tasks:
    - name: Validate nfs_node config
      include_role:
        name: powervault_me4_nfs
        tasks_from: validate_nfs_config.yml
      when: hostvars['127.0.0.1']['powervault_status']

- name: Gather facts from all the nodes
  hosts: manager, compute, login_node, nfs_node

- name: Apply common installation and config
  hosts: manager, compute, login_node
  gather_facts: false
  roles:
    - common
  tags: common

- name: Apply login common installation and config
  hosts: manager, login_node
  gather_facts: false
  roles:
    - login_common
  tags: freeipa

- name: Apply login server installation and config
  hosts: manager
  gather_facts: false
  roles:
    - login_server
  tags: freeipa

- name: Apply login node installation and config
  hosts: login_node
  gather_facts: false
  roles:
    - login_node
  tags: freeipa

- name: Apply common K8s installation and config
  hosts: manager, compute
  gather_facts: false
  roles:
    - k8s_common
  tags: kubernetes

- name: Apply K8s manager config
  hosts: manager
  gather_facts: true
  roles:
    - k8s_manager
  tags: kubernetes

- name: Apply K8s firewalld config on manager and compute nodes
  hosts: manager, compute
  gather_facts: false
  roles:
    - k8s_firewalld
  tags: kubernetes

- name: Powervault Server Configuration
  hosts: nfs_node
  gather_facts: false
  tasks:
    - name: Configuring NFS node
      include_role:
        name: powervault_me4_nfs
      when: hostvars['127.0.0.1']['powervault_status']

- name: Map volume
  hosts: powervault_me4
  connection: local
  gather_facts: false
  tasks:
    - name: Include map volume task
      include_tasks: "{{ playbook_dir }}/control_plane/roles/powervault_me4/tasks/ports.yml"
      when: hostvars['127.0.0.1']['powervault_status']

    - name: Include map volume task
      include_tasks: "{{ playbook_dir }}/control_plane/roles/powervault_me4/tasks/map_volume.yml"
      when: hostvars['127.0.0.1']['powervault_status']

- name: Apply NFS server setup on NFS node
  hosts: nfs_node
  gather_facts: false
  tasks:
    - name: Check the mapped volume on server
      include_role:
        name: powervault_me4_nfs
        tasks_from: nfs_volume
      when: hostvars['127.0.0.1']['powervault_status']

    - name: Mount partitions
      include_role:
         name: powervault_me4_nfs
         tasks_from: mount_me4_partitions
      when: hostvars['127.0.0.1']['powervault_status']

    - name: Setup NFS server on the partitions
      include_role:
         name: powervault_me4_nfs
         tasks_from: me4_nfs_server_setup
      when: hostvars['127.0.0.1']['powervault_status']

- name: Apply NFS server setup on manager node
  hosts: manager
  gather_facts: false
  tasks:
    - name: Apply NFS server setup on manager node
      include_role:
        name: k8s_nfs_server_setup
      when: not hostvars['127.0.0.1']['powervault_status']
      tags:
        - kubernetes
        - nfs

- name: Apply NFS client setup on compute nodes
  hosts: compute
  gather_facts: false
  tasks:
    - name: Apply NFS client setup on compute nodes
      include_role:
        name: k8s_nfs_client_setup
      when: not hostvars['127.0.0.1']['powervault_status']
      tags:
        - kubernetes
        - nfs

- name: Start K8s on manager server
  hosts: manager
  gather_facts: true
  roles:
    - k8s_start_manager
  tags: kubernetes

- name: Start K8s worker servers on compute nodes
  hosts: compute
  gather_facts: false
  roles:
    - k8s_start_workers
  tags: kubernetes

- name: Start K8s worker servers on manager nodes
  hosts: manager, compute
  gather_facts: false
  roles:
    - k8s_start_services
  tags: kubernetes

- name: Apply common Slurm installation and config
  hosts: manager, compute, login_node
  gather_facts: false
  roles:
    - slurm_common
  tags: slurm

- name: Apply Slurm manager config
  hosts: manager
  gather_facts: false
  roles:
    - slurm_manager
  tags: slurm

- name: Configure Slurm workers
  hosts: compute, login_node
  serial: 1
  gather_facts: false
  roles:
    - slurm_workers
  tags: slurm

- name: Start Slurm workers
  hosts: compute, login_node
  gather_facts: false
  roles:
    - slurm_workers_service
  tags: slurm

- name: Start Slurm services
  hosts: manager
  gather_facts: false
  roles:
    - slurm_start_services
  tags: slurm

- name: Install slurm exporter
  hosts: manager
  gather_facts: false
  roles:
    - slurm_exporter
  tags: slurm

- name: Passwordless SSH between manager and compute nodes
  include: control_plane/tools/passwordless_ssh.yml
  when: hostvars['127.0.0.1']['control_plane_status']