|
@@ -0,0 +1,232 @@
|
|
|
|
+# 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: Check if {{ tower_config_file }} file is encrypted
|
|
|
|
+ command: cat {{ tower_config_file }}
|
|
|
|
+ changed_when: false
|
|
|
|
+ no_log: true
|
|
|
|
+ register: config_content
|
|
|
|
+
|
|
|
|
+- name: Decrpyt {{ tower_config_file }}
|
|
|
|
+ command: >-
|
|
|
|
+ ansible-vault decrypt {{ tower_config_file }}
|
|
|
|
+ --vault-password-file {{ tower_vault_file }}
|
|
|
|
+ when: "'$ANSIBLE_VAULT;' in config_content.stdout"
|
|
|
|
+ changed_when: false
|
|
|
|
+
|
|
|
|
+- name: Change file permissions
|
|
|
|
+ file:
|
|
|
|
+ path: "{{ tower_config_file }}"
|
|
|
|
+ mode: "{{ file_perm }}"
|
|
|
|
+
|
|
|
|
+- name: Fetch awx host
|
|
|
|
+ command: grep "host:" "{{ tower_config_file }}"
|
|
|
|
+ changed_when: false
|
|
|
|
+ register: fetch_awx_host
|
|
|
|
+
|
|
|
|
+- name: Fetch awx password
|
|
|
|
+ command: grep "password:" "{{ tower_config_file }}"
|
|
|
|
+ changed_when: false
|
|
|
|
+ no_log: true
|
|
|
|
+ register: fetch_awx_password
|
|
|
|
+
|
|
|
|
+- name: Set awx variables
|
|
|
|
+ set_fact:
|
|
|
|
+ awx_host: "{{ fetch_awx_host.stdout | regex_replace('host: ','') }}"
|
|
|
|
+ awx_password: "{{ fetch_awx_password.stdout | regex_replace('password: ','') }}"
|
|
|
|
+ no_log: true
|
|
|
|
+
|
|
|
|
+- name: Launch dynamic inventory
|
|
|
|
+ block:
|
|
|
|
+ - name: Launch device inventory job template
|
|
|
|
+ awx.awx.tower_job_launch:
|
|
|
|
+ job_template: "{{ device_inventory_template }}"
|
|
|
|
+ tower_config_file: "{{ tower_config_file }}"
|
|
|
|
+ wait: yes
|
|
|
|
+ timeout: "{{ awx_max_wait_time }}"
|
|
|
|
+ register: inventory_job_status
|
|
|
|
+ rescue:
|
|
|
|
+ - name: Restart awx pod
|
|
|
|
+ command: kubectl rollout restart deployment awx -n awx
|
|
|
|
+ changed_when: false
|
|
|
|
+ when:
|
|
|
|
+ - inventory_job_status.status is defined
|
|
|
|
+ - '"pending" in inventory_job_status.status'
|
|
|
|
+
|
|
|
|
+ - name: Wait for the awx pod to be up and running
|
|
|
|
+ wait_for:
|
|
|
|
+ timeout: "{{ pod_restart_time }}"
|
|
|
|
+ when:
|
|
|
|
+ - inventory_job_status.status is defined
|
|
|
|
+ - '"pending" in inventory_job_status.status'
|
|
|
|
+
|
|
|
|
+ - name: Launch device inventory job template
|
|
|
|
+ awx.awx.tower_job_launch:
|
|
|
|
+ job_template: "{{ device_inventory_template }}"
|
|
|
|
+ tower_config_file: "{{ tower_config_file }}"
|
|
|
|
+ wait: yes
|
|
|
|
+ timeout: "{{ awx_max_wait_time }}"
|
|
|
|
+ when:
|
|
|
|
+ - inventory_job_status.status is defined
|
|
|
|
+ - '"pending" in inventory_job_status.status'
|
|
|
|
+
|
|
|
|
+ - name: Warning message for device inventory template
|
|
|
|
+ debug:
|
|
|
|
+ msg: "{{ device_inventory_template_warn_msg }}"
|
|
|
|
+ when:
|
|
|
|
+ - inventory_job_status.status is defined
|
|
|
|
+ - '"pending" not in inventory_job_status.status'
|
|
|
|
+
|
|
|
|
+- name: Configure TOR Switches
|
|
|
|
+ block:
|
|
|
|
+ - name: Launch ethernet job template for TOR switches
|
|
|
|
+ awx.awx.tower_job_launch:
|
|
|
|
+ job_template: "{{ ethernet_job_template }}"
|
|
|
|
+ tower_config_file: "{{ tower_config_file }}"
|
|
|
|
+ wait: yes
|
|
|
|
+ timeout: "{{ awx_max_wait_time }}"
|
|
|
|
+ register: ethernet_job_status
|
|
|
|
+ rescue:
|
|
|
|
+ - name: Warning message for ethernet template
|
|
|
|
+ debug:
|
|
|
|
+ msg: "{{ ethernet_template_warn_msg }}"
|
|
|
|
+ when: ethernet_switch_support
|
|
|
|
+
|
|
|
|
+- name: Wait for 15 mins for DHCP to assign IP to devices
|
|
|
|
+ wait_for:
|
|
|
|
+ timeout: "{{ dhcp_wait_time }}"
|
|
|
|
+
|
|
|
|
+- name: Launch device inventory job template
|
|
|
|
+ awx.awx.tower_job_launch:
|
|
|
|
+ job_template: "{{ device_inventory_template }}"
|
|
|
|
+ tower_config_file: "{{ tower_config_file }}"
|
|
|
|
+ wait: yes
|
|
|
|
+ timeout: "{{ awx_max_wait_time }}"
|
|
|
|
+ register: inventory_job_status
|
|
|
|
+
|
|
|
|
+- name: Execute ethernet template
|
|
|
|
+ block:
|
|
|
|
+ - name: Launch ethernet job template for all switches
|
|
|
|
+ awx.awx.tower_job_launch:
|
|
|
|
+ job_template: "{{ ethernet_job_template }}"
|
|
|
|
+ tower_config_file: "{{ tower_config_file }}"
|
|
|
|
+ wait: yes
|
|
|
|
+ timeout: "{{ awx_max_wait_time }}"
|
|
|
|
+ register: ethernet_job_status
|
|
|
|
+ rescue:
|
|
|
|
+ - name: Warning message for ethernet template
|
|
|
|
+ debug:
|
|
|
|
+ msg: "{{ ethernet_template_warn_msg }}"
|
|
|
|
+ when: ethernet_switch_support
|
|
|
|
+
|
|
|
|
+- name: Execute infiniband template
|
|
|
|
+ block:
|
|
|
|
+ - name: Launch infiniband job template
|
|
|
|
+ awx.awx.tower_job_launch:
|
|
|
|
+ job_template: "{{ infiniband_job_template }}"
|
|
|
|
+ tower_config_file: "{{ tower_config_file }}"
|
|
|
|
+ wait: yes
|
|
|
|
+ timeout: "{{ awx_max_wait_time }}"
|
|
|
|
+ register: ib_job_status
|
|
|
|
+ rescue:
|
|
|
|
+ - name: Warning message for infiniband template
|
|
|
|
+ debug:
|
|
|
|
+ msg: "{{ infiniband_template_warn_msg }}"
|
|
|
|
+ when: ib_switch_support
|
|
|
|
+
|
|
|
|
+- name: Execute powervault_me4 template
|
|
|
|
+ block:
|
|
|
|
+ - name: Launch powervault_me4 job template
|
|
|
|
+ awx.awx.tower_job_launch:
|
|
|
|
+ job_template: "{{ powervault_me4_job_template }}"
|
|
|
|
+ tower_config_file: "{{ tower_config_file }}"
|
|
|
|
+ wait: yes
|
|
|
|
+ timeout: "{{ awx_max_wait_time }}"
|
|
|
|
+ register: powervault_job_status
|
|
|
|
+ rescue:
|
|
|
|
+ - name: Warning message for powervault_me4 template
|
|
|
|
+ debug:
|
|
|
|
+ msg: "{{ powervault_template_warn_msg }}"
|
|
|
|
+ when: powervault_support
|
|
|
|
+
|
|
|
|
+- name: Execute idrac template
|
|
|
|
+ block:
|
|
|
|
+ - name: Launch idrac job template
|
|
|
|
+ awx.awx.tower_job_launch:
|
|
|
|
+ job_template: "{{ idrac_job_template }}"
|
|
|
|
+ tower_config_file: "{{ tower_config_file }}"
|
|
|
|
+ wait: yes
|
|
|
|
+ register: idrac_job_status
|
|
|
|
+ rescue:
|
|
|
|
+ - name: Warning message for idrac template
|
|
|
|
+ debug:
|
|
|
|
+ msg: "{{ idrac_template_warn_msg }}"
|
|
|
|
+
|
|
|
|
+- name: Wait for 30 mins for idrac provisioning to be completed and inventory to be updated in AWX
|
|
|
|
+ wait_for:
|
|
|
|
+ timeout: "{{ provisioning_wait_time }}"
|
|
|
|
+ when: host_mapping_file
|
|
|
|
+
|
|
|
|
+- name: Check the host_mapping_file_path output
|
|
|
|
+ command: cat {{ host_mapping_file_path }}
|
|
|
|
+ changed_when: false
|
|
|
|
+ register: mapping_file
|
|
|
|
+ when: host_mapping_file
|
|
|
|
+
|
|
|
|
+- name: Group the hosts in node_inventory when mapping file is present
|
|
|
|
+ include_tasks: "{{ role_path }}/tasks/group_inventory.yml"
|
|
|
|
+ with_items: "{{ mapping_file.stdout_lines }}"
|
|
|
|
+ when: host_mapping_file and component_role_support
|
|
|
|
+
|
|
|
|
+- name: Launch deploy_omnia job template
|
|
|
|
+ awx.awx.tower_job_launch:
|
|
|
|
+ job_template: "{{ component_role_job_template }}"
|
|
|
|
+ tower_config_file: "{{ tower_config_file }}"
|
|
|
|
+ wait: yes
|
|
|
|
+ register: component_role_job_status
|
|
|
|
+ when: host_mapping_file and component_role_support
|
|
|
|
+
|
|
|
|
+- name: Create awx job template for configuring new devices
|
|
|
|
+ awx.awx.tower_job_template:
|
|
|
|
+ name: "{{ item.name }}"
|
|
|
|
+ job_type: "run"
|
|
|
|
+ organization: "{{ awx_organization }}"
|
|
|
|
+ inventory: "{{ item.inventory }}"
|
|
|
|
+ project: "{{ project_name }}"
|
|
|
|
+ playbook: "{{ item.playbook }}"
|
|
|
|
+ credentials:
|
|
|
|
+ - "{{ item.credential }}"
|
|
|
|
+ state: present
|
|
|
|
+ tower_config_file: "{{ tower_config_file }}"
|
|
|
|
+ loop: "{{ job_template_details }}"
|
|
|
|
+
|
|
|
|
+- name: Build a schedule for configure new devices
|
|
|
|
+ awx.awx.tower_schedule:
|
|
|
|
+ name: "{{ item.name }}"
|
|
|
|
+ unified_job_template: "{{ item.template }}"
|
|
|
|
+ rrule: "{{ item.rrule }}"
|
|
|
|
+ state: present
|
|
|
|
+ tower_config_file: "{{ tower_config_file }}"
|
|
|
|
+ loop: "{{ scheduled_template }}"
|
|
|
|
+
|
|
|
|
+- name: Encrypt {{ tower_config_file }}
|
|
|
|
+ command: >-
|
|
|
|
+ ansible-vault encrypt {{ tower_config_file }}
|
|
|
|
+ --vault-password-file {{ tower_vault_file }}
|
|
|
|
+ changed_when: false
|
|
|
|
+
|
|
|
|
+- name: Change file permissions
|
|
|
|
+ file:
|
|
|
|
+ path: "{{ tower_config_file }}"
|
|
|
|
+ mode: "{{ file_perm }}"
|