--- # Copyright 2020 Red Hat, Inc. # 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: Set resource and role chain fact set_fact: resource_chains: "{{ tripleo_heat_resource_tree.resources | get_filtered_resources('OS::Heat::ResourceChain') }}" role_chain: "{{ tripleo_heat_resource_tree.resources | get_filtered_resource_chains(tripleo_role_name) }}" - name: Set service chain fact set_fact: service_chain: "{{ resource_chains | get_filtered_service_chain(role_chain.resources) }}" - name: Set role services fact set_fact: role_services: "{{ service_chain.resources | get_filtered_role_resources(tripleo_heat_resource_tree.resources) }}" - name: Set role service key fact set_fact: role_service_key: "{{ tripleo_role_name }}Services" - name: Set role_services_from_key fact set_fact: role_services_from_key: "{{ tripleo_heat_resource_tree['parameters'][role_service_key]['default'] }}" - name: Set features facts set_fact: dpdk: |- {{ (role_services_from_key|map('regex_search', '.*\:\:ComputeNeutronOvsDpdk')|list|select('string')|list|length)>0 }} sriov: |- {{ (role_services_from_key|map('regex_search', '.*\:\:NeutronSriovAgent')|list|select('string')|list|length)>0 }} hci: |- {% set novacompute = ((role_services_from_key | map('regex_search', '.*\:\:NovaCompute') | select('string') | list | length) > 0) | bool %} {% set cephosd = ((role_services_from_key | map('regex_search', '.*\:\:CephOSD') | select('string') | list | length) > 0) | bool %} {{ (novacompute | bool) and (cephosd | bool) }} - name: Set feature fact set_fact: feature_dict: DPDK: "{{ dpdk }}" SRIOV: "{{ sriov }}" HOST: "{{ dpdk or sriov }}" HCI: "{{ hci }}" - name: Set role feature fact set_fact: role_features: |- {% set enabled_services = [] %} {% for key, value in feature_dict.items() %} {% if value | bool %} {% set _ = enabled_services.append(key) %} {% endif %} {% endfor %} {{ enabled_services }} scheduler_hints: |- {% set params = tripleo_heat_resource_tree.parameters.get((tripleo_role_name ~ 'SchedulerHints'), {}) %} {{ params.get('default', {}) }} flavor_name: |- {% set param_name = 'Overcloud' ~ tripleo_role_name ~ 'Flavor' | replace('OvercloudControllerFlavor', 'OvercloudControlFlavor') %} {% set params = tripleo_heat_resource_tree.parameters.get(param_name, {}) %} {{ params.get('default', '') }} - name: Node block when: - tripleo_all_nodes is undefined block: - name: Return available ironic hosts os_baremetal_node_info: cloud: undercloud filters: provision_state: "available" is_maintenance: false register: known_available_nodes - name: Return available ironic hosts os_baremetal_node_info: cloud: undercloud filters: provision_state: "active" is_maintenance: false register: known_active_nodes - name: Set all nodes fact set_fact: tripleo_all_nodes: "{{ known_available_nodes.baremetal_nodes | union(known_active_nodes.baremetal_nodes) }}" - name: All node block when: - (tripleo_all_nodes | length) > 0 block: - name: Scheduler hint block when: - (scheduler_hints | length) > 0 - role_node_uuid is undefined block: - name: Set hint regex fact set_fact: hint_regex: >- {{ scheduler_hints.get('capabilities:node', {}) | replace('%index%', '(\d+)') }} - name: Union all nodes set_fact: matching_nodes_with_hint: "{{ tripleo_all_nodes | get_node_capabilities | selectattr('hint', 'regex', hint_regex) | map(attribute='uuid') | list }}" - name: Set role node uuid fact set_fact: role_node_uuid: "{{ matching_nodes_with_hint | first }}" when: - (matching_nodes_with_hint | length) > 0 - name: Flavor hint block when: - (scheduler_hints | length) < 1 - role_node_uuid is undefined block: - name: Get flavor profile tripleo_get_flavor_profile: flavor_name: "{{ flavor_name }}" register: flavor_profile - name: Union all nodes set_fact: matching_nodes_with_profile: "{{ tripleo_all_nodes | get_node_profile | selectattr('profile', 'equalto', flavor_profile.profile) | map(attribute='uuid') | list }}" - name: Set role node uuid fact set_fact: role_node_uuid: "{{ matching_nodes_with_profile | first }}" when: - (matching_nodes_with_profile | length) > 0 - name: Get baremetal inspection data tripleo_get_introspected_data: node_id: "{{ role_node_uuid }}" register: baremetal_data when: - role_node_uuid is defined - name: Set hardware data fact set_fact: hw_data: "{{ baremetal_data.data }}" when: - baremetal_data is defined - baremetal_data['data'] is defined - name: Derive parameters for OvS Dpdk when: - dpdk include_tasks: derive-ovs-dpdk-parameters.yml - name: Derive parameters for SRIOV when: - sriov include_tasks: derive-sriov-parameters.yml - name: Host derive parameters when: - dpdk or sriov include_tasks: derive-host-parameters.yml - name: Derive parameters for HCI when: - hci block: - name: extract average guest cpu and memory set_fact: average_guest_cpu_utilization_percentage: "{{ item.value.average_guest_cpu_utilization_percentage }}" average_guest_memory_size_in_mb: "{{ item.value.average_guest_memory_size_in_mb }}" loop: "{{ lookup('dict', hci_profile_config) }}" when: item.key == hci_profile - name: Default derive parameters for HCI set_fact: derived_parameters: {} when: - derived_parameters is not defined - name: Derive parameters for HCI (collocated ceph-osd/nova-compute nodes) tripleo_derive_hci_parameters: tripleo_environment_parameters: "{{ tripleo_environment_parameters }}" tripleo_role_name: "{{ tripleo_role_name }}" introspection_data: "{{ baremetal_data }}" average_guest_cpu_utilization_percentage: "{{ average_guest_cpu_utilization_percentage }}" average_guest_memory_size_in_mb: "{{ average_guest_memory_size_in_mb }}" derived_parameters: "{{ derived_parameters }}" register: derived_parameters_result - name: Show HCI derived paramters results debug: msg: "{{ derived_parameters_result }}" when: - derived_parameters_result is defined - derived_parameters_result|length >0