# 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: Saving distribution of os set_fact: compute_os: "{{ ansible_facts['distribution'] | lower }}" - name: Create a custom fact directory on each host file: path: "{{ custom_fact_dir }}" state: directory mode: "{{ custom_fact_dir_mode }}" - name: Install accelerator discovery script copy: src: inventory.fact dest: "{{ accelerator_discovery_script_dest }}" owner: root group: root mode: "{{ accelerator_discovery_script_mode }}" - block: - name: Add epel-release repo package: name: epel-release state: present tags: install - name: Add elrepo GPG key rpm_key: state: present key: "{{ elrepo_gpg_key_url }}" register: elrepo_gpg_key until: elrepo_gpg_key is not failed retries: "{{ max_retries }}" delay: "{{ max_delay }}" tags: install - name: Add elrepo (nvidia kmod drivers) package: name: "{{ elrepo_rpm_url }}" state: present register: elrepo until: elrepo is not failed retries: "{{ max_retries }}" delay: "{{ max_delay }}" tags: install - name: Add docker community edition repository get_url: url: "{{ docker_repo_url }}" dest: "{{ docker_repo_dest }}" register: docker_repo until: docker_repo is not failed retries: "{{ max_retries }}" delay: "{{ max_delay }}" tags: install - name: Permanently Disable swap mount: name: "swap" fstype: swap state: absent - name: Disable selinux selinux: state: disabled tags: install - name: Install common packages package: name: "{{ common_packages }}" state: present tags: install - name: Install common packages package: name: "{{ common_packages_for_non_leap }}" state: present tags: install - name: Versionlock docker command: "yum versionlock '{{ item }}'" args: warn: false with_items: - "{{ docker_packages }}" changed_when: true tags: install - name: Collect host facts (including acclerator information) setup: ~ - name: Install infiniBand support package: name: "@Infiniband Support" state: present tags: install when: ( os_supported_leap not in compute_os ) - block: - name: Add leap repos zypper_repository: name: "{{ item.name }}" repo: "{{ item.repo }}" state: present autorefresh: yes with_items: - "{{ leap_repo }}" tags: install - name: Installing python-xml package: name: python-xml state: present tags: install - name: Add nvidia repo zypper_repository: name: NVIDIA repo: "{{ nvidia_repo }}" state: present disable_gpg_check: yes auto_import_keys: yes autorefresh: yes tags: install - name: Install nvidia(This might take 10-15 minutes) command: zypper --gpg-auto-import-keys install -l -y x11-video-nvidiaG06 changed_when: true tags: install - name: Add docker community edition repository get_url: url: "{{ docker_repo_url_leap }}" dest: "{{ docker_repo_dest_leap }}" register: docker_repo until: docker_repo is not failed retries: "{{ max_retries }}" delay: "{{ max_delay }}" tags: install - name: Permanently Disable swap mount: name: "swap" fstype: swap state: absent tags: install - name: Install common packages package: name: "{{ common_packages }}" state: present tags: install - name: Install docker-compose package: name: docker-compose state: present tags: install - name: Collect host facts (including acclerator information) setup: ~ tags: install - name: Install infiniBand support package: name: infiniband-diags state: present tags: install when: ( os_supported_leap in compute_os ) and ( ansible_distribution_version >= os_supported_leap_version ) - name: Deploy time ntp/chrony include_tasks: ntp.yml tags: install - name: Install Nvidia drivers and software components include_tasks: nvidia.yml when: - ansible_local.inventory.nvidia_gpu > 0 - ( ansible_facts['distribution'] == os_name and ansible_facts['distribution_major_version'] == os_version) or ( os_supported_leap in compute_os ) and ( ansible_distribution_version >= os_supported_leap_version ) tags: install - name: Install AMD GPU drivers and software components include_tasks: amd.yml when: - ansible_local.inventory.amd_gpu > 0 - ansible_facts['distribution'] == os_name or ( os_supported_leap in compute_os ) and ( ansible_distribution_version >= os_supported_leap_version ) tags: install - name: Get the hostname command: hostname register: machine_hostname changed_when: true - name: Set facts for node hostname and ip set_fact: node_ip: "{{ inventory_hostname }}" node_hostname: "{{ machine_hostname.stdout }}" - name: Add host name in hosts file lineinfile: dest: "{{ hosts_file_dest }}" line: "{{ inventory_hostname }} {{ machine_hostname.stdout }}" state: present create: yes mode: "{{ hosts_file_mode }}" - name: Add compute hosts info in manager node hosts file lineinfile: dest: "{{ hosts_file_dest }}" line: "{{ hostvars[item].node_ip }} {{ hostvars[item].node_hostname }}" state: present create: yes mode: "{{ hosts_file_mode }}" with_items: - "{{ groups['compute'] }}" when: "'manager' in group_names" - name: Add manager hosts info in compute node hosts file lineinfile: dest: "{{ hosts_file_dest }}" line: "{{ hostvars[item].node_ip }} {{ hostvars[item].node_hostname }}" state: present create: yes mode: "{{ hosts_file_mode }}" with_items: - "{{ groups['manager'] }}" when: "'compute' in group_names" - name: Add login node info in /etc/hosts of manager node lineinfile: dest: "{{ hosts_file_dest }}" line: "{{ hostvars[item].node_ip }} {{ hostvars[item].node_hostname }}" state: present create: yes mode: "{{ hosts_file_mode }}" with_items: - "{{ groups['login_node'] }}" when: - '"manager" in group_names' - hostvars["127.0.0.1"]["login_node_required"] - name: Add manager info in /etc/hosts of login node lineinfile: dest: "{{ hosts_file_dest }}" line: "{{ hostvars[item].node_ip }} {{ hostvars[item].node_hostname }}" state: present create: yes mode: "{{ hosts_file_mode }}" with_items: - "{{ groups['manager'] }}" when: - '"login_node" in group_names' - hostvars["127.0.0.1"]["login_node_required"] - name: Add compute info in /etc/hosts of login node lineinfile: dest: "{{ hosts_file_dest }}" line: "{{ hostvars[item].node_ip }} {{ hostvars[item].node_hostname }}" state: present create: yes mode: "{{ hosts_file_mode }}" with_items: - "{{ groups['compute'] }}" when: - hostvars["127.0.0.1"]["login_node_required"] - '"login_node" in group_names'