deploy/ansible/roles-sap/3.3.1-bom-utility/tasks/bom-register.yaml (128 lines of code) (raw):

# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. # Inputs: # bom_name - Name of BOM (ex: S41909SPS03_v0001ms) # # # Outputs: # bom - object # --- # -------------------------------------+---------------------------------------8 # # Description: Check if BOM is Microsoft supplied and register BOM as an object. # If not, download from storage account location. # # -------------------------------------+---------------------------------------8 # Step: 01 # Description: Create download directory structure # - name: "3.3.1 BoM Processing: - Create BOM download directories" ansible.builtin.file: path: "{{ item }}" state: directory mode: 0755 owner: "{{ orchestration_ansible_user if bom_processing_become else omit }}" delegate_to: localhost become: "{{ bom_processing_become }}" become_user: root loop: - "{{ download_directory }}" - "{{ download_directory }}/tmp" - "{{ download_directory }}/bom" - "{{ download_directory }}/files" # Step: 01 - END # -------------------------------------+---------------------------------------8 # -------------------------------------+---------------------------------------8 # Step: 02 # Description: Set Python version # # Step: 02 - END # -------------------------------------+---------------------------------------8 - name: "3.3.1 BoM Processing: - Set the new name" ansible.builtin.set_fact: new_bom_name: "{{ bom_base_name }}{{ bom_suffix }}" - name: "3.3.1 BoM Processing: - Show new name" ansible.builtin.debug: msg: - "BoM Name: {{ new_bom_name }}" # -------------------------------------+---------------------------------------8 # Step: 03 # Description: Check Storage Account for BOM when SA is enabled # - name: "Check Storage Account for BOM block" block: # -------------------------------------+---------------------------------------8 # Step: 03-01 # Description: # - name: "3.3.1 BoM Processing: {{ bom_name }} Download: {{ new_bom_name }} from the storage account" ansible.builtin.get_url: url: "{{ sapbits_location_base_path }}/{{ sapbits_bom_files }}/boms/{{ new_bom_name }}/{{ new_bom_name }}.yaml\ {% if sapbits_sas_token is defined %}?{{ sapbits_sas_token }}{% endif %}" dest: "{{ download_directory }}/bom/{{ new_bom_name }}.yaml" mode: 0644 validate_certs: false delegate_to: localhost become: "{{ bom_processing_become }}" ignore_errors: true register: result # Step: 03-01 - END # -------------------------------------+---------------------------------------8 # -------------------------------------+---------------------------------------8 # Step: 03-03 # Description: # - name: "BOM: Show BoM download status" ansible.builtin.debug: msg: - "URL: {{ sapbits_location_base_path }}/{{ sapbits_bom_files }}/boms/{{ new_bom_name }}/{{ new_bom_name }}.yaml{% if sapbits_sas_token is defined %}?{{ sapbits_sas_token }}{% endif %}" - "Result: {{ result }}" verbosity: 2 # Step: 03-03 - END # -------------------------------------+---------------------------------------8 when: - sa_enabled | default(true) # when true; if not defined, then value is false # - sa_enabled is defined # - sa_enabled # - sa_enabled is not defined or sa_enabled | bool # Step: 03 - END # -------------------------------------+---------------------------------------8 # -------------------------------------+---------------------------------------8 # Step: 04 # Description: Register BOM if found in Storage Account # - name: "3.3.1 BoM Processing: Register BOM ({{ bom_name }}) from Storage Account" block: # -------------------------------------+---------------------------------------8 # Step: 04-01 # Description: # - name: "{{ task_prefix }} Register downloaded BOM ({{ bom_name }})" ansible.builtin.include_vars: file: "{{ download_directory }}/bom/{{ new_bom_name }}.yaml" name: bom # Step: 04-01 - END # -------------------------------------+---------------------------------------8 # -------------------------------------+---------------------------------------8 # Step: 04-02 # Description: # - name: "{{ task_prefix }} Register downloaded BOM ({{ bom_name }}) file name" ansible.builtin.set_fact: bom_file: "{{ download_directory }}/bom/{{ new_bom_name }}.yaml" aggregated_bom_directories: "{{ aggregated_bom_directories | default([]) + [{'path': path, 'location': 'sa'}] }}" vars: path: "{{ sapbits_location_base_path }}/{{ sapbits_bom_files }}/boms/{{ new_bom_name }}" # Step: 04-02 - END # -------------------------------------+---------------------------------------8 when: - result is succeeded or result is skipped - sa_enabled | default(false) # - sa_enabled is not defined or sa_enabled | bool # Step: 04 - END # -------------------------------------+---------------------------------------8 # -------------------------------------+---------------------------------------8 # Step: 05 # Description: Check for MS provided BOM if not in SA # - name: "{{ task_prefix }} Check for Microsoft Supplied BOM ({{ bom_name }})" block: # -------------------------------------+---------------------------------------8 # Step: 05-01 # Description: # - name: "{{ task_prefix }} Check for Microsoft Supplied BOM ({{ bom_name }})" ansible.builtin.stat: path: "{{ BOM_directory }}/{{ bom_name }}/{{ bom_name }}.yaml" register: microsoft_supplied_bom delegate_to: localhost become: "{{ bom_processing_become }}" # Step: 05-01 - END # -------------------------------------+---------------------------------------8 # -------------------------------------+---------------------------------------8 # Step: 05-02 # Description: # - name: "{{ task_prefix }} Show Microsoft Supplied BOM ({{ bom_base_name }}) result" ansible.builtin.debug: msg: |- BOM PATH: {{ BOM_directory }}/{{ bom_name }}/{{ bom_name }}.yaml BOM Exists: {{ microsoft_supplied_bom.stat.exists }} verbosity: 0 # Step: 05-02 - END # -------------------------------------+---------------------------------------8 # -------------------------------------+---------------------------------------8 # Step: 05-03 # Description: # - name: "{{ task_prefix }} Register Microsoft Supplied BOM {{ bom_name }}" ansible.builtin.include_vars: file: "{{ microsoft_supplied_bom.stat.path }}" name: bom_temp when: microsoft_supplied_bom.stat.exists # Step: 05-03 - END # -------------------------------------+---------------------------------------8 # -------------------------------------+---------------------------------------8 # Step: 05-04 # Description: # - name: "{{ task_prefix }} Register Microsoft Supplied BOM ({{ bom_name }}) facts" ansible.builtin.set_fact: bom: "{{ bom_temp }}" bom_file: "{{ microsoft_supplied_bom.stat.path }}" aggregated_bom_directories: "{{ aggregated_bom_directories | default([]) + [{'path': path, 'location': 'local'}] }}" vars: path: "{{ microsoft_supplied_bom.stat.path | dirname }}" when: microsoft_supplied_bom.stat.exists # Step: 05-04 - END # -------------------------------------+---------------------------------------8 # -------------------------------------+---------------------------------------8 # Step: 05-05 # Description: # - name: "{{ task_prefix }} Check for Microsoft Supplied BOM ({{ bom_name }}) in archives" block: # -------------------------------------+---------------------------------------8 # Step: 05-05-01 # Description: # - name: "{{ task_prefix }} Check for Microsoft Supplied BOM ({{ bom_name }}) in archives" ansible.builtin.stat: path: "{{ BOM_directory }}/archives/{{ bom_name }}/{{ bom_name }}.yaml" register: microsoft_supplied_bom_archive delegate_to: localhost become: "{{ bom_processing_become }}" # Step: 05-05-01 - END # -------------------------------------+---------------------------------------8 # -------------------------------------+---------------------------------------8 # Step: 05-05-02 # Description: # - name: "{{ task_prefix }} Register Microsoft Supplied BOM {{ bom_name }} from archives" ansible.builtin.include_vars: file: "{{ microsoft_supplied_bom_archive.stat.path }}" name: bom_temp when: microsoft_supplied_bom_archive.stat.exists # Step: 05-05-02 - END # -------------------------------------+---------------------------------------8 # -------------------------------------+---------------------------------------8 # Step: 05-05-03 # Description: # - name: "{{ task_prefix }} Register Microsoft Supplied BOM ({{ bom_name }}) facts" ansible.builtin.set_fact: bom: "{{ bom_temp }}" bom_file: "{{ microsoft_supplied_bom_archive.stat.path }}" aggregated_bom_directories: "{{ aggregated_bom_directories | default([]) + [{'path': path, 'location': 'local'}] }}" vars: path: "{{ microsoft_supplied_bom_archive.stat.path | dirname }}" when: microsoft_supplied_bom_archive.stat.exists # Step: 05-05-03 - END # -------------------------------------+---------------------------------------8 when: not microsoft_supplied_bom.stat.exists # Step: 05-05 - END # -------------------------------------+---------------------------------------8 when: result is failed or always_upload_jinja_templates or (sa_enabled is defined and not sa_enabled) # when: result is failed or always_upload_jinja_templates or sa_enabled is not defined or not sa_enabled # Step: 05 - END # -------------------------------------+---------------------------------------8 # -------------------------------------+---------------------------------------8 # Step: 06 # Description: Validate that BoM was found # - name: "{{ task_prefix }} Show BOM object" ansible.builtin.debug: var: bom verbosity: 2 - name: "{{ task_prefix }} Validate that a BOM object is created" ansible.builtin.fail: msg: "Unable to find the Bill of materials file for {{ bom_name }}." when: bom is not defined # Step: 06 - END # -------------------------------------+---------------------------------------8 # -------------------------------------+---------------------------------------8 # Step: 07 # Description: Show BOM detail # - name: "{{ task_prefix }} Show BOM details" ansible.builtin.debug: msg: - "BoM name: {{ bom.name }}" - "BoM target: {{ bom.target }}" - "BoM version: {{ bom.version }}" - "BoM DB platform: {% if bom.platform is defined %}{{ bom.platform }}{% else %}Not defined{% endif %}" - "Instance type: {% if bom.InstanceType is defined %}{{ bom.InstanceType }}{% else %}Not defined{% endif %}" when: - bom.name is not search('SWPM') - bom.name is not search('SUM') # Step: 07 - END # -------------------------------------+---------------------------------------8 # -------------------------------------+---------------------------------------8 # Step: 08 # Description: Validate that BoM was found # # ToDo Add this back later, Kimmo Jan 25 # - name: "{{ task_prefix }} Ensure that a BoM platform is defined" # ansible.builtin.assert: # that: # - bom.platform is defined # Has the variable been defined # - bom.platform | upper == platform | upper # fail_msg: "The BoM {{ bom_name }} is not for platform {{ platform }}" # when: # - platform is defined # - platform | length > 2 # Step: 08 - END # -------------------------------------+---------------------------------------8 ... # /*---------------------------------------------------------------------------8 # | END | # +------------------------------------4--------------------------------------*/