diff --git a/roles/sap_hypervisor_node_preconfigure/tasks/platform/redhat_ocp_virt/operators/install-cnv-operator.yml b/roles/sap_hypervisor_node_preconfigure/tasks/platform/redhat_ocp_virt/operators/install-cnv-operator.yml index 908422f..f6eba29 100644 --- a/roles/sap_hypervisor_node_preconfigure/tasks/platform/redhat_ocp_virt/operators/install-cnv-operator.yml +++ b/roles/sap_hypervisor_node_preconfigure/tasks/platform/redhat_ocp_virt/operators/install-cnv-operator.yml @@ -95,20 +95,10 @@ delay: 60 until: __sap_hypervisor_node_preconfigure_register_hco_webhook_pod.resources | selectattr('status.phase', 'equalto', 'Running') | list | length == __sap_hypervisor_node_preconfigure_register_hco_webhook_pod.resources | length -- name: Wait and check if hco-webhook-service exists in the namespace "{{ sap_hypervisor_node_preconfigure_ocpv_namespace }}" - kubernetes.core.k8s_info: - kind: Service - namespace: "{{ sap_hypervisor_node_preconfigure_ocpv_namespace }}" - name: hco-webhook-service - register: webhook_service - retries: 2 - delay: 60 - until: webhook_service.resources | default([]) | length > 0 - -- name: Check if CNV webhook endpoint is available +- name: Check if hco-webhook-service webhook endpoint is available ansible.builtin.include_tasks: wait_for_webhook_endpoints.yml vars: - sap_hypervisor_node_preconfigure_webhook_service_name: virt-api + sap_hypervisor_node_preconfigure_webhook_service_name: hco-webhook-service sap_hypervisor_node_preconfigure_webhook_namespace: "{{ sap_hypervisor_node_preconfigure_ocpv_namespace }}" - name: Create CNV HyperConverged diff --git a/roles/sap_vm_provision/defaults/main.yml b/roles/sap_vm_provision/defaults/main.yml index 6603ca0..5d4a932 100644 --- a/roles/sap_vm_provision/defaults/main.yml +++ b/roles/sap_vm_provision/defaults/main.yml @@ -782,6 +782,10 @@ sap_vm_provision_kubevirt_vm_host_specifications_dictionary: kubevirt_vm_cpu_smt: 2 kubevirt_vm_cpu_cores: 2 kubevirt_vm_memory_gib: 24 + # Defines size of huge pages for kubervirt hypervisor (e.g. '2Mi' or '1Gi') + # This can be disabled by setting value to false. The default value is '1Gi'. + # When set to false, remove NUMA and dedicatedCpuPlacement from sap_vm_provision_kubevirt_vm_performance_cpu_settings + kubevirt_vm_memory_hypervisor_hugepages: '1Gi' sap_system_type: project_dev # project_dev, project_tst, project_prd sap_host_type: hana_primary # hana_primary, hana_secondary, anydb_primary, anydb_secondary, nwas_ascs, nwas_ers, nwas_pas, nwas_aas # Provide either an existing PVC or a URL for an OS image diff --git a/roles/sap_vm_provision/tasks/platform_ansible/kubevirt_vm/execute_main.yml b/roles/sap_vm_provision/tasks/platform_ansible/kubevirt_vm/execute_main.yml index c32b777..44224a7 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible/kubevirt_vm/execute_main.yml +++ b/roles/sap_vm_provision/tasks/platform_ansible/kubevirt_vm/execute_main.yml @@ -61,6 +61,10 @@ - not lookup('ansible.builtin.vars', loop_item, default='') is skipped - lookup('ansible.builtin.vars', loop_item, default='') is failed + - name: Stop execution of playbook if there was an error during deployment. + ansible.builtin.fail: + msg: "Stopping execution of playbook since there was an error during deployment. Review the previous steps to find out what and where the error occurred." + - name: Ansible Task block to execute on target inventory hosts remote_user: "{{ sap_vm_provision_kubevirt_vm_os_user }}" become: true diff --git a/roles/sap_vm_provision/tasks/platform_ansible/kubevirt_vm/execute_provision.yml b/roles/sap_vm_provision/tasks/platform_ansible/kubevirt_vm/execute_provision.yml index 1b17553..17053d1 100644 --- a/roles/sap_vm_provision/tasks/platform_ansible/kubevirt_vm/execute_provision.yml +++ b/roles/sap_vm_provision/tasks/platform_ansible/kubevirt_vm/execute_provision.yml @@ -217,6 +217,36 @@ {%- endfor %} {{ networks }} +- name: Fail if hugepages are not used but dedicated CPU placement and/or NUMA guestMappingPassthrough + ansible.builtin.fail: + msg: | + FAIL: Invalid CPU configuration: dedicatedCpuPlacement=true cannot be used + together with numa.guestMappingPassthrough without huge pages. + when: + - sap_vm_provision_kubevirt_vm_performance_cpu_settings.dedicatedCpuPlacement | d(false) | bool + or sap_vm_provision_kubevirt_vm_performance_cpu_settings.numa.guestMappingPassthrough is defined + - __sap_vm_provision_register_vm_config.kubevirt_vm_memory_hypervisor_hugepages is defined + - not (__sap_vm_provision_register_vm_config.kubevirt_vm_memory_hypervisor_hugepages | bool) + +- name: Set fact for memory definition + ansible.builtin.set_fact: + __sap_vm_provision_fact_memory_definition: >- + {{ + { + 'guest': __sap_vm_provision_register_vm_config.kubevirt_vm_memory_gib ~ 'Gi' + } + | combine( + (__sap_vm_provision_register_vm_config.kubevirt_vm_memory_hypervisor_hugepages | default(true)) | ternary( + { + 'hugepages': { + 'pageSize': (__sap_vm_provision_register_vm_config.kubevirt_vm_memory_hypervisor_hugepages | default('1Gi')) + } + }, + {} + ) + ) + }} + - name: Set fact for VM deploy config ansible.builtin.set_fact: __sap_vm_provision_register_vm_deploy_config: @@ -244,10 +274,7 @@ cores: "{{ __sap_vm_provision_register_vm_config.kubevirt_vm_cpu_cores }}" threads: "{{ __sap_vm_provision_register_vm_config.kubevirt_vm_cpu_smt }}" - memory: - guest: "{{ __sap_vm_provision_register_vm_config.kubevirt_vm_memory_gib }}Gi" - hugepages: - pageSize: 1Gi + memory: "{{ __sap_vm_provision_fact_memory_definition }}" - name: Apply CPU performance settings ansible.builtin.set_fact: