diff --git a/tests/global_config.py b/tests/global_config.py index dc887fb342..608052f976 100644 --- a/tests/global_config.py +++ b/tests/global_config.py @@ -15,7 +15,7 @@ ALL_CNV_DEPLOYMENTS, ALL_CNV_PODS, ALL_HCO_RELATED_OBJECTS, - BREW_REGISTERY_SOURCE, + BREW_REGISTRY_SOURCE, CENTOS_STREAM9_PREFERENCE, CENTOS_STREAM10_PREFERENCE, CNV_OPERATORS, @@ -69,11 +69,11 @@ def _get_default_storage_class(sc_list): no_unprivileged_client = False hco_cr_name = "kubevirt-hyperconverged" -hco_namespace = "openshift-cnv" -openshift_apiserver_namespace = "openshift-apiserver" -sriov_namespace = "openshift-sriov-network-operator" -marketplace_namespace = "openshift-marketplace" -machine_api_namespace = "openshift-machine-api" +hco_namespace = NamespacesNames.OPENSHIFT_CNV +openshift_apiserver_namespace = NamespacesNames.OPENSHIFT_APISERVER +sriov_namespace = NamespacesNames.OPENSHIFT_SRIOV_NETWORK_OPERATOR +marketplace_namespace = NamespacesNames.OPENSHIFT_MARKETPLACE +machine_api_namespace = NamespacesNames.MACHINE_API_NAMESPACE golden_images_namespace = NamespacesNames.OPENSHIFT_VIRTUALIZATION_OS_IMAGES hco_subscription = "" # TODO: remove constants/HCO_SUBSCRIPTION and use this instead. disconnected_cluster = False @@ -90,7 +90,7 @@ def _get_default_storage_class(sc_list): cnv_registry_sources = { "osbs": { "cnv_subscription_source": HCO_CATALOG_SOURCE, - "source_map": BREW_REGISTERY_SOURCE, + "source_map": BREW_REGISTRY_SOURCE, }, "hotfix": { "cnv_subscription_source": HCO_CATALOG_SOURCE, @@ -100,7 +100,7 @@ def _get_default_storage_class(sc_list): }, "fbc": { "cnv_subscription_source": HCO_CATALOG_SOURCE, - "source_map": BREW_REGISTERY_SOURCE, + "source_map": BREW_REGISTRY_SOURCE, }, } diff --git a/tests/install_upgrade_operators/relationship_labels/constants.py b/tests/install_upgrade_operators/relationship_labels/constants.py index 89043c18a2..c37f11db4d 100644 --- a/tests/install_upgrade_operators/relationship_labels/constants.py +++ b/tests/install_upgrade_operators/relationship_labels/constants.py @@ -63,7 +63,7 @@ VIRT_PLATFORM_AUTOPILOT, VIRT_SYNCHRONIZATION_CONTROLLER, VIRT_TEMPLATE_VALIDATOR, - VIRTCTL_CLIDOWNLOADS_KUBEVIRT_HYPERCONVERGED, + VIRTCTL_CLI_DOWNLOADS, VIRTIO_WIN, WINDOWS_BOOTSOURCE_PIPELINE, ) @@ -331,7 +331,7 @@ VERSION_LABEL_KEY: None, PART_OF_LABEL_KEY: HYPERCONVERGED_CLUSTER, }, - VIRTCTL_CLIDOWNLOADS_KUBEVIRT_HYPERCONVERGED: { + VIRTCTL_CLI_DOWNLOADS: { MANAGED_BY_LABEL_KEY: HCO_OPERATOR, COMPONENT_LABEL_KEY: COMPUTE_STR, VERSION_LABEL_KEY: None, diff --git a/utilities/constants.py b/utilities/constants.py deleted file mode 100644 index 4ba19fd9c7..0000000000 --- a/utilities/constants.py +++ /dev/null @@ -1,1095 +0,0 @@ -from typing import Any - -from kubernetes.dynamic.exceptions import InternalServerError -from ocp_resources.aaq import AAQ -from ocp_resources.api_service import APIService -from ocp_resources.cdi import CDI -from ocp_resources.cluster_role import ClusterRole -from ocp_resources.cluster_role_binding import ClusterRoleBinding -from ocp_resources.config_map import ConfigMap -from ocp_resources.data_import_cron import DataImportCron -from ocp_resources.datavolume import DataVolume -from ocp_resources.deployment import Deployment -from ocp_resources.hyperconverged import HyperConverged -from ocp_resources.kubevirt import KubeVirt -from ocp_resources.network_addons_config import NetworkAddonsConfig -from ocp_resources.resource import Resource -from ocp_resources.role_binding import RoleBinding -from ocp_resources.service import Service -from ocp_resources.service_account import ServiceAccount -from ocp_resources.ssp import SSP -from urllib3.exceptions import ( - MaxRetryError, - NewConnectionError, - ProtocolError, - ResponseError, -) - -from libs.infra.images import ( - BASE_IMAGES_DIR, - Alpine, - Cdi, - Centos, - Cirros, - Fedora, - Rhel, - Windows, -) -from utilities.architecture import get_cluster_architecture - -# Architecture constants -KUBERNETES_ARCH_LABEL = f"{Resource.ApiGroup.KUBERNETES_IO}/arch" -AMD_64 = "amd64" -ARM_64 = "arm64" -S390X = "s390x" -X86_64 = "x86_64" -MULTIARCH = "multiarch" -# Supported architectures for multi-arch runs -SUPPORTED_MULTIARCH_OPTIONS = {AMD_64, ARM_64} -# Supported architectures for single-arch runs -SUPPORTED_CPU_ARCHITECTURES = {AMD_64, ARM_64, S390X} - -# OS constants -OS_FLAVOR_CIRROS = "cirros" -OS_FLAVOR_ALPINE = "alpine" -OS_FLAVOR_WINDOWS = "win" -OS_FLAVOR_RHEL = "rhel" -OS_FLAVOR_FEDORA = "fedora" -OS_FLAVOR_WIN_CONTAINER_DISK = "win-container-disk" - -FEDORA_DISK_DEMO = "fedora-cloud-registry-disk-demo" -CIRROS_DISK_DEMO = "cirros-registry-disk-demo" -CIRROS_QCOW2_IMG = "cirros-qcow2.img" - -ALPINE_VERSION = "3.20.1" - - -class ArchImages: - class AMD64: - BASE_CIRROS_NAME = "cirros-0.4.0-x86_64-disk" - BASE_ALPINE_NAME = "alpine-x86_64-disk" - BASE_VERSIONED_ALPINE_NAME = f"alpine-{ALPINE_VERSION}-x86_64-disk" - Cirros = Cirros( - RAW_IMG=f"{BASE_CIRROS_NAME}.raw", - RAW_IMG_GZ=f"{BASE_CIRROS_NAME}.raw.gz", - RAW_IMG_XZ=f"{BASE_CIRROS_NAME}.raw.xz", - QCOW2_IMG=f"{BASE_CIRROS_NAME}.qcow2", - QCOW2_IMG_GZ=f"{BASE_CIRROS_NAME}.qcow2.gz", - QCOW2_IMG_XZ=f"{BASE_CIRROS_NAME}.qcow2.xz", - DISK_DEMO=CIRROS_DISK_DEMO, - ) - - Alpine = Alpine( - QCOW2_IMG=f"{BASE_ALPINE_NAME}.qcow2", - QCOW2_IMG_VERSIONED=f"{BASE_VERSIONED_ALPINE_NAME}.qcow2", - RAW_IMG_XZ=f"{BASE_VERSIONED_ALPINE_NAME}.raw.xz", - ) - - Rhel = Rhel( - RHEL8_0_IMG="rhel-8.qcow2", - RHEL8_9_IMG="rhel-89.qcow2", - RHEL8_10_IMG="rhel-810.qcow2", - RHEL9_3_IMG="rhel-93.qcow2", - RHEL9_4_IMG="rhel-94.qcow2", - RHEL9_6_IMG="rhel-96.qcow2", - ) - Rhel.LATEST_RELEASE_STR = Rhel.RHEL9_6_IMG - - Windows = Windows( - WIN10_IMG="win_10_uefi.qcow2", - WIN10_WSL2_IMG="win_10_wsl2_uefi.qcow2", - WIN10_ISO_IMG="Win10_22H2_English_x64.iso", - WIN2k19_IMG="win_2k19_uefi.qcow2", - WIN2k25_IMG="win_2k25_uefi.qcow2", - WIN2k19_HA_IMG="win_2019_virtio.qcow2", - WIN11_IMG="win_11.qcow2", - WIN11_WSL2_IMG="win_11_wsl2.qcow2", - WIN11_ISO_IMG="en-us_windows_11_business_editions_version_24h2_x64_dvd_59a1851e.iso", - WIN19_RAW="win_2k19_uefi.raw", - WIN2022_IMG="win_2022.qcow2", - WIN2022_ISO_IMG="Windows_Server_2022_x64FRE_en-us.iso", - WIN2025_ISO_IMG="windows_server_2025_x64_dvd_eval.iso", - ) - Windows.LATEST_RELEASE_STR = Windows.WIN2022_IMG - - Fedora = Fedora( - FEDORA42_IMG="Fedora-Cloud-Base-Generic-42-1.1.x86_64.qcow2", - FEDORA43_IMG="Fedora-Cloud-Base-Generic-43-1.6.x86_64.qcow2", - FEDORA_CONTAINER_IMAGE="quay.io/openshift-cnv/qe-cnv-tests-fedora:41", - DISK_DEMO=FEDORA_DISK_DEMO, - ) - Fedora.LATEST_RELEASE_STR = Fedora.FEDORA43_IMG - - Centos = Centos(CENTOS_STREAM_9_IMG="CentOS-Stream-GenericCloud-9-20220107.0.x86_64.qcow2") - Centos.LATEST_RELEASE_STR = Centos.CENTOS_STREAM_9_IMG - - Cdi = Cdi(QCOW2_IMG=CIRROS_QCOW2_IMG) - - class ARM64: - BASE_CIRROS_NAME = "cirros-0.5.2-aarch64-disk" - BASE_ALPINE_NAME = "alpine-aarch64-disk" - BASE_VERSIONED_ALPINE_NAME = f"alpine-{ALPINE_VERSION}-aarch64-disk" - Cirros = Cirros( - RAW_IMG=f"{BASE_CIRROS_NAME}.raw", - RAW_IMG_GZ=f"{BASE_CIRROS_NAME}.raw.gz", - RAW_IMG_XZ=f"{BASE_CIRROS_NAME}.raw.xz", - QCOW2_IMG=f"{BASE_CIRROS_NAME}.qcow2", - QCOW2_IMG_GZ=f"{BASE_CIRROS_NAME}.qcow2.gz", - QCOW2_IMG_XZ=f"{BASE_CIRROS_NAME}.qcow2.xz", - DISK_DEMO=CIRROS_DISK_DEMO, - ) - - Alpine = Alpine( - QCOW2_IMG=f"{BASE_ALPINE_NAME}.qcow2", - QCOW2_IMG_VERSIONED=f"{BASE_VERSIONED_ALPINE_NAME}.qcow2", - RAW_IMG_XZ=f"{BASE_VERSIONED_ALPINE_NAME}.raw.xz", - ) - - Rhel = Rhel( - RHEL9_5_IMG="rhel-95-aarch64.qcow2", - RHEL9_6_IMG="rhel-96-aarch64.qcow2", - ) - Rhel.LATEST_RELEASE_STR = Rhel.RHEL9_6_IMG - - Windows = Windows() - Fedora = Fedora( - FEDORA42_IMG="Fedora-Cloud-Base-Generic-42-1.1.aarch64.qcow2", - FEDORA_CONTAINER_IMAGE="quay.io/openshift-cnv/qe-cnv-tests-fedora:41-arm64", - DISK_DEMO=FEDORA_DISK_DEMO, - ) - Fedora.LATEST_RELEASE_STR = Fedora.FEDORA42_IMG - - Centos = Centos(CENTOS_STREAM_9_IMG="CentOS-Stream-GenericCloud-9-latest.aarch64.qcow2") - Centos.LATEST_RELEASE_STR = Centos.CENTOS_STREAM_9_IMG - - Cdi = Cdi(QCOW2_IMG=CIRROS_QCOW2_IMG) - - class S390X: - BASE_ALPINE_NAME = "alpine-s390x-disk" - BASE_VERSIONED_ALPINE_NAME = f"alpine-{ALPINE_VERSION}-s390x-disk" - Cirros = Cirros( - # TODO: S390X does not support Cirros; this is a workaround until tests are moved to Fedora - RAW_IMG="Fedora-Cloud-Base-Generic-41-1.4.s390x.raw", - RAW_IMG_GZ="Fedora-Cloud-Base-Generic-41-1.4.s390x.raw.gz", - RAW_IMG_XZ="Fedora-Cloud-Base-Generic-41-1.4.s390x.raw.xz", - QCOW2_IMG="Fedora-Cloud-Base-Generic-41-1.4.s390x.qcow2", - QCOW2_IMG_GZ="Fedora-Cloud-Base-Generic-41-1.4.s390x.qcow2.gz", - QCOW2_IMG_XZ="Fedora-Cloud-Base-Generic-41-1.4.s390x.qcow2.xz", - DISK_DEMO=FEDORA_DISK_DEMO, - DIR=f"{BASE_IMAGES_DIR}/fedora-images", - DEFAULT_DV_SIZE="10Gi", - DEFAULT_MEMORY_SIZE="1Gi", - OS_FLAVOR=OS_FLAVOR_FEDORA, - ) - - Alpine = Alpine( - QCOW2_IMG=f"{BASE_ALPINE_NAME}.qcow2", - QCOW2_IMG_VERSIONED=f"{BASE_VERSIONED_ALPINE_NAME}.qcow2", - RAW_IMG_XZ=f"{BASE_VERSIONED_ALPINE_NAME}.raw.xz", - ) - - Rhel = Rhel( - RHEL8_0_IMG="rhel-82-s390x.qcow2", - RHEL8_9_IMG="rhel-89-s390x.qcow2", - RHEL8_10_IMG="rhel-810-s390x.qcow2", - RHEL9_3_IMG="rhel-93-s390x.qcow2", - RHEL9_4_IMG="rhel-94-s390x.qcow2", - RHEL9_5_IMG="rhel-95-s390x.qcow2", - RHEL9_6_IMG="rhel-96-s390x.qcow2", - ) - Rhel.LATEST_RELEASE_STR = Rhel.RHEL9_6_IMG - - Fedora = Fedora( - FEDORA42_IMG="Fedora-Cloud-Base-Generic-42-1.1.s390x.qcow2", - FEDORA_CONTAINER_IMAGE="quay.io/openshift-cnv/qe-cnv-tests-fedora:41-s390x", - DISK_DEMO=FEDORA_DISK_DEMO, - ) - Fedora.LATEST_RELEASE_STR = Fedora.FEDORA42_IMG - - Centos = Centos(CENTOS_STREAM_9_IMG="CentOS-Stream-GenericCloud-9-latest.s390x.qcow2") - Centos.LATEST_RELEASE_STR = Centos.CENTOS_STREAM_9_IMG - - Cdi = Cdi( - # TODO: S390X does not support Cirros; this is a workaround until tests are moved to Fedora - QCOW2_IMG="Fedora-qcow2.img", - DIR=f"{BASE_IMAGES_DIR}/fedora-images", - DEFAULT_DV_SIZE="10Gi", - ) - - Windows = Windows() - - -# Choose the Image class according to the cluster architecture. -# TODO: remove this when utilities modules are refactored -Images = getattr(ArchImages, next(iter(get_cluster_architecture())).upper()) - - -# Virtctl constants -VIRTCTL = "virtctl" -VIRTCTL_CLI_DOWNLOADS = f"{VIRTCTL}-clidownloads-kubevirt-hyperconverged" -# Network constants -SRIOV = "sriov" -IP_FAMILY_POLICY_PREFER_DUAL_STACK = "PreferDualStack" -IPV4_STR = "ipv4" -IPV6_STR = "ipv6" -CLUSTER_NETWORK_ADDONS_OPERATOR = "cluster-network-addons-operator" -BRIDGE_MARKER = "bridge-marker" -KUBE_CNI_LINUX_BRIDGE_PLUGIN = "kube-cni-linux-bridge-plugin" -LINUX_BRIDGE = "linux-bridge" -OVS_BRIDGE = "ovs-bridge" -FLAT_OVERLAY_STR = "layer2" -KUBEMACPOOL_CERT_MANAGER = "kubemacpool-cert-manager" -KUBEMACPOOL_MAC_CONTROLLER_MANAGER = "kubemacpool-mac-controller-manager" -KUBEVIRT_IPAM_CONTROLLER_MANAGER = "kubevirt-ipam-controller-manager" -KUBEMACPOOL_MAC_RANGE_CONFIG = "kubemacpool-mac-range-config" -SSH_PORT_22 = 22 -PORT_80 = 80 -ACTIVE_BACKUP = "active-backup" - -# Time constants -TIMEOUT_1SEC = 1 -TIMEOUT_5SEC = 5 -TIMEOUT_10SEC = 10 -TIMEOUT_15SEC = 15 -TIMEOUT_20SEC = 20 -TIMEOUT_30SEC = 30 -TIMEOUT_40SEC = 40 -TIMEOUT_90SEC = 90 -TIMEOUT_1MIN = 60 -TIMEOUT_2MIN = 2 * 60 -TIMEOUT_3MIN = 3 * 60 -TIMEOUT_4MIN = 4 * 60 -TIMEOUT_5MIN = 5 * 60 -TIMEOUT_6MIN = 6 * 60 -TIMEOUT_8MIN = 8 * 60 -TIMEOUT_9MIN = 9 * 60 -TIMEOUT_10MIN = 10 * 60 -TIMEOUT_11MIN = 11 * 60 -TIMEOUT_12MIN = 12 * 60 -TIMEOUT_15MIN = 15 * 60 -TIMEOUT_20MIN = 20 * 60 -TIMEOUT_25MIN = 25 * 60 -TIMEOUT_30MIN = 30 * 60 -TIMEOUT_35MIN = 35 * 60 -TIMEOUT_40MIN = 40 * 60 -TIMEOUT_50MIN = 50 * 60 -TIMEOUT_60MIN = 60 * 60 -TIMEOUT_75MIN = 75 * 60 -TIMEOUT_90MIN = 90 * 60 -TIMEOUT_180MIN = 180 * 60 -TIMEOUT_12HRS = 12 * 60 * 60 - -TCP_TIMEOUT_30SEC = 30.0 - - -# OpenShift Virtualization components constants -VIRT_OPERATOR = "virt-operator" -VIRT_LAUNCHER = "virt-launcher" -VIRT_API = "virt-api" -VIRT_CONTROLLER = "virt-controller" -VIRT_HANDLER = "virt-handler" -VIRT_TEMPLATE_VALIDATOR = "virt-template-validator" -VIRT_EXPORTPROXY = "virt-exportproxy" -SSP_KUBEVIRT_HYPERCONVERGED = "ssp-kubevirt-hyperconverged" -SSP_OPERATOR = "ssp-operator" -CDI_OPERATOR = "cdi-operator" -CDI_APISERVER = "cdi-apiserver" -CDI_DEPLOYMENT = "cdi-deployment" -CDI_UPLOADPROXY = "cdi-uploadproxy" -HCO_OPERATOR = "hco-operator" -HCO_WEBHOOK = "hco-webhook" -HOSTPATH_CSI_BASIC = "hostpath-csi-basic" -HOSTPATH_PROVISIONER_CSI = "hostpath-provisioner-csi" -HOSTPATH_PROVISIONER = "hostpath-provisioner" -HOSTPATH_PROVISIONER_OPERATOR = "hostpath-provisioner-operator" -HYPERCONVERGED_CLUSTER_CLI_DOWNLOAD = "hyperconverged-cluster-cli-download" -KUBEVIRT_HCO_NAME = "kubevirt-kubevirt-hyperconverged" -HCO_PART_OF_LABEL_VALUE = "hyperconverged-cluster" -MANAGED_BY_LABEL_VALUE_OLM = "olm" -HPP_POOL = "hpp-pool" -HCO_CATALOG_SOURCE = "hco-catalogsource" -KUBEVIRT_CONSOLE_PLUGIN = "kubevirt-console-plugin" -CNAO_OPERATOR = "cnao-operator" -HYPERCONVERGED_CLUSTER = "hyperconverged-cluster" -RESOURCE_REQUIREMENTS_KEY_HCO_CR = "resourceRequirements" - -# CDI related constants -CDI_LABEL = Resource.ApiGroup.CDI_KUBEVIRT_IO -CDI_UPLOAD = "cdi-upload" -PVC = "pvc" -CDI_UPLOAD_TMP_PVC = f"cdi-upload-tmp-{PVC}" -SOURCE_POD = "source-pod" - -CDI_SECRETS = [ - "cdi-apiserver-server-cert", - "cdi-apiserver-signer", - "cdi-uploadproxy-server-cert", - "cdi-uploadproxy-signer", - "cdi-uploadserver-client-cert", - "cdi-uploadserver-client-signer", - "cdi-uploadserver-signer", -] - -CDI_CONFIGMAPS = [ - "cdi-apiserver-signer-bundle", - "cdi-config", - "cdi-controller-leader-election-helper", - "cdi-insecure-registries", - "cdi-uploadproxy-signer-bundle", - "cdi-uploadserver-client-signer-bundle", - "cdi-uploadserver-signer-bundle", -] -# Miscellaneous constants -UTILITY = "utility" -WORKERS_TYPE = "WORKERS_TYPE" -QUARANTINED = "quarantined" -SETUP_ERROR = "setup_error" - -# Kernel Device Driver -# Compute: GPU Devices are bound to this Kernel Driver for GPU Passthrough. -# Networking: For SRIOV Node Policy, The driver type for the virtual functions -KERNEL_DRIVER = "vfio-pci" - -# cloud-init constants -CLOUD_INIT_DISK_NAME = "cloudinitdisk" -CLOUD_INIT_NO_CLOUD = "cloudInitNoCloud" - -# Kubemacpool constants -KMP_VM_ASSIGNMENT_LABEL = "mutatevirtualmachines.kubemacpool.io" -KMP_ENABLED_LABEL = "allocate" - -# SSH constants -CNV_VM_SSH_KEY_PATH = "CNV-SSH-KEY-PATH" - -# CPU ARCH -INTEL = "Intel" -AMD = "AMD" - -# unprivileged_client constants -UNPRIVILEGED_USER = "unprivileged-user" -UNPRIVILEGED_PASSWORD = "unprivileged-password" - -# KUBECONFIG variables -KUBECONFIG = "KUBECONFIG" - -# commands -LS_COMMAND = "ls -1 | sort | tr '\n' ' '" - -ONE_CPU_CORE = 1 -ONE_CPU_THREAD = 1 -TWO_CPU_CORES = 2 -TWO_CPU_SOCKETS = 2 -TWO_CPU_THREADS = 2 -FOUR_CPU_SOCKETS = 4 -SIX_CPU_SOCKETS = 6 -EIGHT_CPU_SOCKETS = 8 -TEN_CPU_SOCKETS = 10 - -FOUR_GI_MEMORY = "4Gi" -FIVE_GI_MEMORY = "5Gi" -SIX_GI_MEMORY = "6Gi" -TEN_GI_MEMORY = "10Gi" -TWELVE_GI_MEMORY = "12Gi" - -# pyetest configuration -SANITY_TESTS_FAILURE = 99 -HCO_SUBSCRIPTION = "hco-operatorhub" - -# VM configuration -LIVE_MIGRATE = "LiveMigrate" -MIGRATION_POLICY_VM_LABEL = {"vm-label": "test-vm"} -ROOTDISK = "rootdisk" -DV_DISK = "dv-disk" - -# Upgrade tests configuration -DEPENDENCY_SCOPE_SESSION = "session" - -# hco spec -ENABLE_COMMON_BOOT_IMAGE_IMPORT = "enableCommonBootImageImport" - -# Common templates constants -DATA_SOURCE_NAME = "DATA_SOURCE_NAME" -DATA_SOURCE_NAMESPACE = "DATA_SOURCE_NAMESPACE" -SSP_CR_COMMON_TEMPLATES_LIST_KEY_NAME = "dataImportCronTemplates" -COMMON_TEMPLATES_KEY_NAME = "commonTemplates" -KUBEVIRT_HYPERCONVERGED_PROMETHEUS_RULE = "kubevirt-hyperconverged-prometheus-rule" -KUBEMACPOOL_PROMETHEUS_RULE = "kubemacpool-prometheus-rule" -HYPERCONVERGED_CLUSTER_OPERATOR_METRICS = "hyperconverged-cluster-operator-metrics" -KUBEVIRT_HYPERCONVERGED_OPERATOR_METRICS = "kubevirt-hyperconverged-operator-metrics" -KUBEVIRT_CLUSTER_CRITICAL = "kubevirt-cluster-critical" -KUBEVIRT_KUBEVIRT_HYPERCONVERGED = "kubevirt-kubevirt-hyperconverged" -CDI_KUBEVIRT_HYPERCONVERGED = "cdi-kubevirt-hyperconverged" -CLUSTER = "cluster" -VIRTCTL_CLIDOWNLOADS_KUBEVIRT_HYPERCONVERGED = f"{VIRTCTL}-clidownloads-kubevirt-hyperconverged" -KUBEVIRT_CONSOLE_PLUGIN_SERVICE = "kubevirt-console-plugin-service" -CREATING_VIRTUAL_MACHINE = "creating-virtual-machine" -CREATING_VIRTUAL_MACHINE_FROM_VOLUME = "creating-virtual-machine-from-volume" -UPLOAD_BOOT_SOURCE = "upload-boot-source" -GRAFANA_DASHBOARD_KUBEVIRT_TOP_CONSUMERS = "grafana-dashboard-kubevirt-top-consumers" -RHEL9_STR = "rhel9" -RHEL10_STR = "rhel10" -RHEL8_GUEST = "rhel8-guest" -RHEL9_GUEST = "rhel9-guest" -RHEL10_GUEST = "rhel10-guest" -VIRTIO = "virtio" -VIRTIO_WIN = "virtio-win" -NGINX_CONF = "nginx-conf" -HYPERCONVERGED_CLUSTER_OPERATOR = "hyperconverged-cluster-operator" -PROMETHEUS_RULES_STR = "prometheus-rules" -KUBEVIRT_UI_CONFIG = "kubevirt-ui-config" -KUBEVIRT_USER_SETTINGS = "kubevirt-user-settings" -KUBEVIRT_UI_FEATURES = "kubevirt-ui-features" -KUBEVIRT_UI_CONFIG_READER = "kubevirt-ui-config-reader" -KUBEVIRT_UI_CONFIG_READER_ROLE_BINDING = "kubevirt-ui-config-reader-rolebinding" -HCO_BEARER_AUTH = "hco-bearer-auth" -KUBEVIRT_CONSOLE_PLUGIN_NP = "kubevirt-console-plugin-np" -KUBEVIRT_APISERVER_PROXY_NP = "kubevirt-apiserver-proxy-np" -MIGCONTROLLER_KUBEVIRT_HYPERCONVERGED = "migcontroller-kubevirt-hyperconverged" -# components kind -ROLEBINDING_STR = "RoleBinding" -POD_STR = "Pod" -PROMETHEUSRULE_STR = "PrometheusRule" -ROLE_STR = "Role" -SERVICE_STR = "Service" -SERVICEMONITOR_STR = "ServiceMonitor" -PRIORITYCLASS_STR = "PriorityClass" -KUBEVIRT_STR = "KubeVirt" -NETWORKADDONSCONFIG_STR = "NetworkAddonsConfig" -CONSOLECLIDOWNLOAD_STR = "ConsoleCLIDownload" -ROUTE_STR = "Route" -CONSOLEQUICKSTART_STR = "ConsoleQuickStart" -CONFIGMAP_STR = "ConfigMap" -IMAGESTREAM_STR = "ImageStream" -DEPLOYMENT_STR = "Deployment" -CONSOLE_PLUGIN_STR = "ConsolePlugin" -KUBEVIRT_PLUGIN = "kubevirt-plugin" -CDI_STR = "CDI" -SSP_STR = "SSP" -SECRET_STR = "Secret" -KUBEVIRT_APISERVER_PROXY = "kubevirt-apiserver-proxy" -NETWORKPOLICY_STR = "NetworkPolicy" -SERVICEACCOUNT_STR = "ServiceAccount" -AAQ_OPERATOR = "aaq-operator" -WINDOWS_BOOTSOURCE_PIPELINE = "windows-bootsource-pipeline" -KUBEVIRT_MIGRATION_OPERATOR = "kubevirt-migration-operator" -KUBEVIRT_MIGRATION_CONTROLLER = "kubevirt-migration-controller" -VIRT_PLATFORM_AUTOPILOT = "virt-platform-autopilot" -VIRT_SYNCHRONIZATION_CONTROLLER = "virt-synchronization-controller" -KUBEVIRT_OPERATOR = "kubevirt-operator" -# All hco relate objects with kind -ALL_HCO_RELATED_OBJECTS = [ - {KUBEVIRT_HYPERCONVERGED_PROMETHEUS_RULE: PROMETHEUSRULE_STR}, - {HYPERCONVERGED_CLUSTER_OPERATOR_METRICS: ROLE_STR}, - {HYPERCONVERGED_CLUSTER_OPERATOR_METRICS: ROLEBINDING_STR}, - {KUBEVIRT_HYPERCONVERGED_OPERATOR_METRICS: SERVICE_STR}, - {KUBEVIRT_HYPERCONVERGED_OPERATOR_METRICS: SERVICEMONITOR_STR}, - {KUBEVIRT_CLUSTER_CRITICAL: PRIORITYCLASS_STR}, - {KUBEVIRT_KUBEVIRT_HYPERCONVERGED: KUBEVIRT_STR}, - {CDI_KUBEVIRT_HYPERCONVERGED: CDI_STR}, - {CLUSTER: NETWORKADDONSCONFIG_STR}, - {SSP_KUBEVIRT_HYPERCONVERGED: SSP_STR}, - {VIRTCTL_CLIDOWNLOADS_KUBEVIRT_HYPERCONVERGED: CONSOLECLIDOWNLOAD_STR}, - {HYPERCONVERGED_CLUSTER_CLI_DOWNLOAD: ROUTE_STR}, - {HYPERCONVERGED_CLUSTER_CLI_DOWNLOAD: SERVICE_STR}, - {KUBEVIRT_CONSOLE_PLUGIN_SERVICE: SERVICE_STR}, - {f"{KUBEVIRT_APISERVER_PROXY}-{SERVICE_STR.lower()}": SERVICE_STR}, - {KUBEVIRT_APISERVER_PROXY: DEPLOYMENT_STR}, - {KUBEVIRT_CONSOLE_PLUGIN: SERVICEACCOUNT_STR}, - {KUBEVIRT_APISERVER_PROXY: SERVICEACCOUNT_STR}, - {CREATING_VIRTUAL_MACHINE: CONSOLEQUICKSTART_STR}, - {CREATING_VIRTUAL_MACHINE_FROM_VOLUME: CONSOLEQUICKSTART_STR}, - {UPLOAD_BOOT_SOURCE: CONSOLEQUICKSTART_STR}, - {GRAFANA_DASHBOARD_KUBEVIRT_TOP_CONSUMERS: CONFIGMAP_STR}, - {RHEL8_GUEST: IMAGESTREAM_STR}, - {RHEL9_GUEST: IMAGESTREAM_STR}, - {RHEL10_GUEST: IMAGESTREAM_STR}, - {VIRTIO_WIN: CONFIGMAP_STR}, - {VIRTIO_WIN: ROLE_STR}, - {VIRTIO_WIN: ROLEBINDING_STR}, - {KUBEVIRT_CONSOLE_PLUGIN: DEPLOYMENT_STR}, - {NGINX_CONF: CONFIGMAP_STR}, - {KUBEVIRT_PLUGIN: CONSOLE_PLUGIN_STR}, - {WINDOWS_BOOTSOURCE_PIPELINE: CONSOLEQUICKSTART_STR}, - {KUBEVIRT_USER_SETTINGS: CONFIGMAP_STR}, - {KUBEVIRT_UI_FEATURES: CONFIGMAP_STR}, - {KUBEVIRT_UI_CONFIG_READER: ROLE_STR}, - {KUBEVIRT_UI_CONFIG_READER_ROLE_BINDING: ROLEBINDING_STR}, - {HCO_BEARER_AUTH: SECRET_STR}, - {KUBEVIRT_CONSOLE_PLUGIN_NP: NETWORKPOLICY_STR}, - {KUBEVIRT_APISERVER_PROXY_NP: NETWORKPOLICY_STR}, - {MIGCONTROLLER_KUBEVIRT_HYPERCONVERGED: "MigController"}, -] -CNV_PODS_NO_HPP_CSI_HPP_POOL = [ - AAQ_OPERATOR, - BRIDGE_MARKER, - CDI_APISERVER, - CDI_DEPLOYMENT, - CDI_OPERATOR, - CDI_UPLOADPROXY, - CLUSTER_NETWORK_ADDONS_OPERATOR, - HCO_OPERATOR, - HCO_WEBHOOK, - HOSTPATH_PROVISIONER_OPERATOR, - HYPERCONVERGED_CLUSTER_CLI_DOWNLOAD, - KUBE_CNI_LINUX_BRIDGE_PLUGIN, - KUBEMACPOOL_CERT_MANAGER, - KUBEMACPOOL_MAC_CONTROLLER_MANAGER, - KUBEVIRT_CONSOLE_PLUGIN, - KUBEVIRT_MIGRATION_OPERATOR, - KUBEVIRT_MIGRATION_CONTROLLER, - SSP_OPERATOR, - VIRT_API, - VIRT_CONTROLLER, - VIRT_HANDLER, - VIRT_OPERATOR, - VIRT_TEMPLATE_VALIDATOR, - VIRT_EXPORTPROXY, - KUBEVIRT_APISERVER_PROXY, - KUBEVIRT_IPAM_CONTROLLER_MANAGER, - VIRT_PLATFORM_AUTOPILOT, - VIRT_SYNCHRONIZATION_CONTROLLER, -] -ALL_CNV_PODS = CNV_PODS_NO_HPP_CSI_HPP_POOL + [HOSTPATH_PROVISIONER_CSI, HPP_POOL] -ALL_CNV_DEPLOYMENTS = [ - AAQ_OPERATOR, - CDI_APISERVER, - CDI_DEPLOYMENT, - CDI_OPERATOR, - CDI_UPLOADPROXY, - CLUSTER_NETWORK_ADDONS_OPERATOR, - HCO_OPERATOR, - HCO_WEBHOOK, - HOSTPATH_PROVISIONER_OPERATOR, - HYPERCONVERGED_CLUSTER_CLI_DOWNLOAD, - KUBEMACPOOL_CERT_MANAGER, - KUBEMACPOOL_MAC_CONTROLLER_MANAGER, - KUBEVIRT_CONSOLE_PLUGIN, - SSP_OPERATOR, - VIRT_API, - VIRT_CONTROLLER, - VIRT_OPERATOR, - VIRT_TEMPLATE_VALIDATOR, - VIRT_EXPORTPROXY, - KUBEVIRT_APISERVER_PROXY, - KUBEVIRT_IPAM_CONTROLLER_MANAGER, - HPP_POOL, - KUBEVIRT_MIGRATION_OPERATOR, - KUBEVIRT_MIGRATION_CONTROLLER, - VIRT_PLATFORM_AUTOPILOT, - VIRT_SYNCHRONIZATION_CONTROLLER, -] -ALL_CNV_DAEMONSETS = [ - BRIDGE_MARKER, - HOSTPATH_PROVISIONER_CSI, - KUBE_CNI_LINUX_BRIDGE_PLUGIN, - VIRT_HANDLER, -] - - -CNV_OPERATORS = [ - AAQ_OPERATOR, - CDI_OPERATOR, - CLUSTER_NETWORK_ADDONS_OPERATOR, - HOSTPATH_PROVISIONER_OPERATOR, - HYPERCONVERGED_CLUSTER_OPERATOR, - KUBEVIRT_MIGRATION_OPERATOR, - KUBEVIRT_OPERATOR, - SSP_OPERATOR, - HYPERCONVERGED_CLUSTER_CLI_DOWNLOAD, - VIRT_PLATFORM_AUTOPILOT, -] -# Node labels -NODE_TYPE_WORKER_LABEL = {"node-type": "worker"} -CPU_MODEL_LABEL_PREFIX = f"cpu-model.node.{Resource.ApiGroup.KUBEVIRT_IO}" -NODE_ROLE_KUBERNETES_IO = "node-role.kubernetes.io" -WORKER_NODE_LABEL_KEY = f"{NODE_ROLE_KUBERNETES_IO}/worker" -CDI_KUBEVIRT_HYPERCONVERGED = "cdi-kubevirt-hyperconverged" -TSC_FREQUENCY = "tsc-frequency" - -# hotplug -HOTPLUG_DISK_SERIAL = "1234567890" -HOTPLUG_DISK_VIRTIO_BUS = VIRTIO -HOTPLUG_DISK_SCSI_BUS = "scsi" - -# Container constants -CNV_TESTS_CONTAINER = "CNV_TESTS_CONTAINER" -DEFAULT_HCO_CONDITIONS = { - Resource.Condition.AVAILABLE: Resource.Condition.Status.TRUE, - Resource.Condition.PROGRESSING: Resource.Condition.Status.FALSE, - Resource.Condition.RECONCILE_COMPLETE: Resource.Condition.Status.TRUE, - Resource.Condition.DEGRADED: Resource.Condition.Status.FALSE, - Resource.Condition.UPGRADEABLE: Resource.Condition.Status.TRUE, -} -DEFAULT_KUBEVIRT_CONDITIONS = { - Resource.Condition.AVAILABLE: Resource.Condition.Status.TRUE, - Resource.Condition.PROGRESSING: Resource.Condition.Status.FALSE, - Resource.Condition.CREATED: Resource.Condition.Status.TRUE, - Resource.Condition.DEGRADED: Resource.Condition.Status.FALSE, -} -DEFAULT_RESOURCE_CONDITIONS = { - Resource.Condition.AVAILABLE: Resource.Condition.Status.TRUE, - Resource.Condition.PROGRESSING: Resource.Condition.Status.FALSE, - Resource.Condition.DEGRADED: Resource.Condition.Status.FALSE, -} -EXPECTED_STATUS_CONDITIONS = { - HyperConverged: DEFAULT_HCO_CONDITIONS, - KubeVirt: DEFAULT_KUBEVIRT_CONDITIONS, - CDI: DEFAULT_RESOURCE_CONDITIONS, - SSP: DEFAULT_RESOURCE_CONDITIONS, - NetworkAddonsConfig: DEFAULT_RESOURCE_CONDITIONS, - AAQ: DEFAULT_RESOURCE_CONDITIONS, -} -BREW_REGISTERY_SOURCE = "brew.registry.redhat.io" -ICSP_FILE = "imageContentSourcePolicy.yaml" -IDMS_FILE = "imageDigestMirrorSet.yaml" -BASE_EXCEPTIONS_DICT: dict[type[Exception], list[str]] = { - NewConnectionError: [], - ConnectionRefusedError: [], - ProtocolError: [], - ResponseError: [], - MaxRetryError: [], - InternalServerError: [], - ConnectionResetError: [], -} - -# Container images -NET_UTIL_CONTAINER_IMAGE = "quay.io/openshift-cnv/qe-net-utils:latest" - -OC_ADM_LOGS_COMMAND = "oc adm node-logs" -AUDIT_LOGS_PATH = "--path=kube-apiserver" -CNV_TEST_SERVICE_ACCOUNT = "cnv-tests-sa" -VM_CRD = f"virtualmachines.{Resource.ApiGroup.KUBEVIRT_IO}" -VM_CLONE_CRD = f"virtualmachineclones.clone.{Resource.ApiGroup.KUBEVIRT_IO}" -VM_EXPORT_CRD = f"virtualmachineexports.export.{Resource.ApiGroup.KUBEVIRT_IO}" -ALL_CNV_CRDS = [ - f"aaqs.{Resource.ApiGroup.AAQ_KUBEVIRT_IO}", - f"cdiconfigs.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", - f"cdis.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", - f"dataimportcrons.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", - f"datasources.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", - f"datavolumes.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", - f"hostpathprovisioners.{Resource.ApiGroup.HOSTPATHPROVISIONER_KUBEVIRT_IO}", - f"hyperconvergeds.{Resource.ApiGroup.HCO_KUBEVIRT_IO}", - f"kubevirts.{Resource.ApiGroup.KUBEVIRT_IO}", - f"migcontrollers.{Resource.ApiGroup.MIGRATIONS_KUBEVIRT_IO}", - f"migrationpolicies.{Resource.ApiGroup.MIGRATIONS_KUBEVIRT_IO}", - f"networkaddonsconfigs.{Resource.ApiGroup.NETWORKADDONSOPERATOR_NETWORK_KUBEVIRT_IO}", - f"objecttransfers.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", - f"ssps.{Resource.ApiGroup.SSP_KUBEVIRT_IO}", - f"storageprofiles.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", - f"virtualmachinebackups.backup.{Resource.ApiGroup.KUBEVIRT_IO}", - f"virtualmachinebackuptrackers.backup.{Resource.ApiGroup.KUBEVIRT_IO}", - f"virtualmachineclusterinstancetypes.{Resource.ApiGroup.INSTANCETYPE_KUBEVIRT_IO}", - f"virtualmachineinstancetypes.{Resource.ApiGroup.INSTANCETYPE_KUBEVIRT_IO}", - f"virtualmachineinstancemigrations.{Resource.ApiGroup.KUBEVIRT_IO}", - f"virtualmachineinstancepresets.{Resource.ApiGroup.KUBEVIRT_IO}", - f"virtualmachineinstancereplicasets.{Resource.ApiGroup.KUBEVIRT_IO}", - f"virtualmachineinstances.{Resource.ApiGroup.KUBEVIRT_IO}", - f"virtualmachinepools.{Resource.ApiGroup.POOL_KUBEVIRT_IO}", - f"virtualmachinerestores.{Resource.ApiGroup.SNAPSHOT_KUBEVIRT_IO}", - VM_CRD, - f"virtualmachinesnapshotcontents.{Resource.ApiGroup.SNAPSHOT_KUBEVIRT_IO}", - f"virtualmachinesnapshots.{Resource.ApiGroup.SNAPSHOT_KUBEVIRT_IO}", - VM_CLONE_CRD, - f"virtualmachineclusterpreferences.{Resource.ApiGroup.INSTANCETYPE_KUBEVIRT_IO}", - VM_EXPORT_CRD, - f"virtualmachinepreferences.{Resource.ApiGroup.INSTANCETYPE_KUBEVIRT_IO}", - f"volumeuploadsources.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", - f"volumeimportsources.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", - f"volumeclonesources.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", - f"openstackvolumepopulators.forklift.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", - f"ovirtvolumepopulators.forklift.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", - f"multinamespacevirtualmachinestoragemigrationplans.{Resource.ApiGroup.MIGRATIONS_KUBEVIRT_IO}", - f"multinamespacevirtualmachinestoragemigrations.{Resource.ApiGroup.MIGRATIONS_KUBEVIRT_IO}", - f"virtualmachinestoragemigrationplans.{Resource.ApiGroup.MIGRATIONS_KUBEVIRT_IO}", - f"virtualmachinestoragemigrations.{Resource.ApiGroup.MIGRATIONS_KUBEVIRT_IO}", -] -PRODUCTION_CATALOG_SOURCE = "redhat-operators" -TLS_OLD_POLICY = "old" -TLS_CUSTOM_POLICY = "custom" -HOTFIX_STR = "hotfix" - - -class UpgradeStreams: - X_STREAM = "x-stream" - Y_STREAM = "y-stream" - Z_STREAM = "z-stream" - - -IMAGE_CRON_STR = "image-cron" -TLS_SECURITY_PROFILE = "tlsSecurityProfile" -KUBELET_READY_CONDITION = {"KubeletReady": "True"} -CNV_PROMETHEUS_RULES = [ - f"{PROMETHEUS_RULES_STR}-{CLUSTER_NETWORK_ADDONS_OPERATOR}", - KUBEVIRT_HYPERCONVERGED_PROMETHEUS_RULE, - "prometheus-cdi-rules", - "prometheus-hpp-rules", - "prometheus-k8s-rules-cnv", - "prometheus-kubevirt-rules", - f"kubevirt-cnv-{PROMETHEUS_RULES_STR}", - KUBEMACPOOL_PROMETHEUS_RULE, -] - - -class StorageClassNames: - CEPH_RBD = "ocs-storagecluster-ceph-rbd" - CEPH_RBD_VIRTUALIZATION = f"{CEPH_RBD}-virtualization" - CEPHFS = "ocs-storagecluster-cephfs" - HOSTPATH = "hostpath-provisioner" - NFS = "nfs" - TOPOLVM = "lvms-vg1" - PORTWORX_CSI_DB_SHARED = "px-csi-db-shared" - RH_INTERNAL_NFS = "rh-internal-nfs" - TRIDENT_CSI_FSX = "trident-csi-fsx" - TRIDENT_CSI_NFS = "trident-csi-nfs" - IO2_CSI = "io2-csi" - GPFS = "ibm-spectrum-scale-sample" - OCI = "oci-bv" - OCI_UHP = "oci-bv-uhp" - GCP = "sp-balanced-storage" - GCNV = "gcnv-flex" - - -# Namespace constants -class NamespacesNames: - OPENSHIFT = "openshift" - OPENSHIFT_MONITORING = "openshift-monitoring" - OPENSHIFT_CONFIG = "openshift-config" - OPENSHIFT_APISERVER = "openshift-apiserver" - OPENSHIFT_STORAGE = "openshift-storage" - OPENSHIFT_CLUSTER_STORAGE_OPERATOR = "openshift-cluster-storage-operator" - CHAOS = "chaos" - DEFAULT = "default" - NVIDIA_GPU_OPERATOR = "nvidia-gpu-operator" - MACHINE_API_NAMESPACE = "machine-api-namespace" - OPENSHIFT_VIRTUALIZATION_OS_IMAGES = "openshift-virtualization-os-images" - WASP = "wasp" - OPENSHIFT_KUBE_DESCHEDULER_OPERATOR = "openshift-kube-descheduler-operator" - OPENSHIFT_NMSTATE = "openshift-nmstate" - OPENSHIFT_FRR_K8S = "openshift-frr-k8s" - OPENSHIFT_MTV = "openshift-mtv" - CNV_TESTS_UTILITIES = "cnv-tests-utilities" - - -# CNV supplemental-templates -CNV_SUPPLEMENTAL_TEMPLATES_URL = "https://raw.githubusercontent.com/RHsyseng/cnv-supplemental-templates/main/templates" - -LINUX_AMD_64 = "linux/amd64" - -EVICTIONSTRATEGY = "evictionStrategy" -CRITICAL_STR = "critical" -INFO_STR = "info" -KUBEVIRT_HYPERCONVERGED_OPERATOR_HEALTH_STATUS = "kubevirt_hyperconverged_operator_health_status" -WARNING_STR = "warning" -NONE_STRING = "none" -ACCESS_MODE = "access_mode" -VOLUME_MODE = "volume_mode" -OPERATOR_HEALTH_IMPACT_VALUES = { - CRITICAL_STR: "2", - WARNING_STR: "1", - NONE_STRING: "0", -} -FIRING_STATE = "firing" -PENDING_STR = "pending" -KUBEVIRT_HCO_HYPERCONVERGED_CR_EXISTS = "kubevirt_hco_hyperconverged_cr_exists" -ES_LIVE_MIGRATE_IF_POSSIBLE = "LiveMigrateIfPossible" -ES_NONE = "None" -POD_SECURITY_NAMESPACE_LABELS = { - "pod-security.kubernetes.io/enforce": "privileged", - "security.openshift.io/scc.podSecurityLabelSync": "false", -} -CNV_TEST_RUN_IN_PROGRESS = "cnv-tests-run-in-progress" -VERSION_LABEL_KEY = f"{Resource.ApiGroup.APP_KUBERNETES_IO}/version" -FEATURE_GATES = "featureGates" -COUNT_FIVE = 5 -DATA_IMPORT_CRON_ENABLE = ( - f"metadata->annotations->{DataImportCron.ApiGroup.DATA_IMPORT_CRON_TEMPLATE_KUBEVIRT_IO}/enable" -) -UPDATE_STR = "update" -VALUE_STR = "value" -GET_STR = "get" -CREATE_STR = "create" -DELETE_STR = "delete" -WILDCARD_CRON_EXPRESSION = "* * * * *" -OUTDATED = "Outdated" - -RHEL_WITH_INSTANCETYPE_AND_PREFERENCE = "rhel-with-instancetype-and-preference" -CENTOS_STREAM9_PREFERENCE = "centos.stream9" -CENTOS_STREAM10_PREFERENCE = "centos.stream10" -RHEL8_PREFERENCE = "rhel.8" -RHEL9_PREFERENCE = "rhel.9" -RHEL10_PREFERENCE = "rhel.10" -U1_SMALL = "u1.small" -U1_LARGE = "u1.large" -PROMETHEUS_K8S = "prometheus-k8s" -INSTANCE_TYPE_STR = "instance_type" -U1_MEDIUM_STR = "u1.medium" -PREFERENCE_STR = "preference" -FLAVOR_STR = "flavor" -NONE_STR = "" -OS_STR = "os" -LINUX_STR = "linux" -EXPECTED_CLUSTER_INSTANCE_TYPE_LABELS = { - INSTANCE_TYPE_STR: U1_MEDIUM_STR, - PREFERENCE_STR: RHEL9_PREFERENCE, - OS_STR: LINUX_STR, -} - -# VM Console Proxy Resources -VM_CONSOLE_PROXY_CLUSTER_RESOURCES = [ - APIService, - ClusterRole, - ClusterRoleBinding, -] - -VM_CONSOLE_PROXY_NAMESPACE_RESOURCES = [ - ServiceAccount, - ConfigMap, - Service, - Deployment, - RoleBinding, -] - -CNV_TEST_RUN_IN_PROGRESS_NS = f"{CNV_TEST_RUN_IN_PROGRESS}-ns" - -SECURITY_CONTEXT = "securityContext" - -POD_SECURITY_CONTEXT_SPEC = { - "seccompProfile": {"type": "RuntimeDefault"}, - "runAsNonRoot": True, - "runAsUser": 1000, - "fsGroup": 107, -} - -POD_CONTAINER_SPEC = { - "name": "runner", - "image": NET_UTIL_CONTAINER_IMAGE, - "command": [ - "/bin/bash", - "-c", - "echo ok > /tmp/healthy && sleep INF", - ], - SECURITY_CONTEXT: { - "allowPrivilegeEscalation": False, - "seccompProfile": {"type": "RuntimeDefault"}, - "runAsNonRoot": True, - "capabilities": {"drop": ["ALL"]}, - }, -} - -EXCLUDED_CPU_MODELS_S390X = [ - # Below are deprecated & usable models, but violate RHEL 9 ALS (min z14) causing guest to crash (disable-wait) - # Ref: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/automatically_installing_rhel/preparing-a-rhel-installation-on-64-bit-ibm-z_rhel-installer#planning-for-installation-on-ibm-z_preparing-a-rhel-installation-on-64-bit-ibm-z - "z114", - "z114-base", - "z13", - "z13-base", - "z13.2", - "z13.2-base", - "z13s", - "z13s-base", - "z196", - "z196-base", - "z196.2", - "z196.2-base", - "zBC12", - "zBC12-base", - "zEC12", - "zEC12-base", - "zEC12.2", - "zEC12.2-base", - # Below are usable (non-deprecated) models, but base models doesn't work on RHEL guests - # unless required features are appended (ex: 'gen15b-base,vx=on,..'), - "z14ZR1-base", - "z14.2-base", - "z14-base", - "gen15a-base", - "gen15b-base", - "gen16a-base", - "gen16b-base", - "gen17a-base", - "gen17b-base", -] -# Opteron - Windows image can't boot -# Penryn - does not support WSL2 -EXCLUDED_CPU_MODELS = [*EXCLUDED_CPU_MODELS_S390X, "Opteron", "Penryn"] -# Latest windows can't boot with old cpu models -EXCLUDED_OLD_CPU_MODELS = [*EXCLUDED_CPU_MODELS, "Westmere", "SandyBridge", "Nehalem", "IvyBridge", "Skylake"] - -AAQ_VIRTUAL_RESOURCES = "VirtualResources" -AAQ_VMI_POD_USAGE = "VmiPodUsage" -NODE_STR = "node" -KUBEVIRT_VIRT_OPERATOR_UP = "kubevirt_virt_operator_up" - - -REGEDIT_PROC_NAME = "regedit.exe" -OS_PROC_NAME = {"linux": "ping", "windows": REGEDIT_PROC_NAME} - -DISK_SERIAL = "D23YZ9W6WA5DJ489" -RHSM_SECRET_NAME = "rhsm-secret" - -CAPACITY = "capacity" -USED = "used" - - -# Tekton Tasks and Pipelines -WINDOWS_EFI_INSTALLER_STR = "windows-efi-installer" -WINDOWS_CUSTOMIZE_STR = "windows-customize" -TEKTON_AVAILABLE_PIPELINEREF = [ - WINDOWS_EFI_INSTALLER_STR, - WINDOWS_CUSTOMIZE_STR, -] - -TEKTON_AVAILABLE_TASKS = [ - "modify-data-object", - "create-vm-from-manifest", - "wait-for-vmi-status", - "cleanup-vm", - "disk-virt-sysprep", - "disk-virt-customize", - "modify-windows-iso-file", - "disk-uploader", -] - -# Windows versions -WIN_10 = "win10" -WIN_11 = "win11" -WIN_2K25 = "win2k25" -WIN_2K22 = "win2k22" -WIN_2K19 = "win2k19" - -# Windows VirtualMachine preferences -WINDOWS_11_PREFERENCE = "windows.11" -WINDOWS_2K22_PREFERENCE = "windows.2k22" - -HYPERV_FEATURES_LABELS_DOM_XML = [ - "relaxed", - "vapic", - "spinlocks", - "vpindex", - "synic", - "stimer", # synictimer in VM yaml - "frequencies", - "ipi", - "reset", - "runtime", - "tlbflush", - "reenlightenment", -] -HYPERV_FEATURES_LABELS_VM_YAML = HYPERV_FEATURES_LABELS_DOM_XML.copy() -HYPERV_FEATURES_LABELS_VM_YAML[HYPERV_FEATURES_LABELS_VM_YAML.index("stimer")] = "synictimer" - -PUBLIC_DNS_SERVER_IP = "8.8.8.8" - -BIND_IMMEDIATE_ANNOTATION = {f"{Resource.ApiGroup.CDI_KUBEVIRT_IO}/storage.bind.immediate.requested": "true"} - -HCO_DEFAULT_CPU_MODEL_KEY = "defaultCPUModel" - -HPP_CAPABILITIES: dict[str, Any] = { - VOLUME_MODE: DataVolume.VolumeMode.FILE, - ACCESS_MODE: DataVolume.AccessMode.RWO, - "snapshot": False, - "online_resize": False, - "wffc": True, -} - - -KUBEVIRT_VMI_NETWORK_RECEIVE_PACKETS_DROPPED_TOTAL = "kubevirt_vmi_network_receive_packets_dropped_total" -KUBEVIRT_VMI_NETWORK_TRANSMIT_PACKETS_DROPPED_TOTAL = "kubevirt_vmi_network_transmit_packets_dropped_total" -KUBEVIRT_VMI_MEMORY_DOMAIN_BYTES = "kubevirt_vmi_memory_domain_bytes" -KUBEVIRT_VMI_MEMORY_UNUSED_BYTES = "kubevirt_vmi_memory_unused_bytes" -KUBEVIRT_VMI_MEMORY_USABLE_BYTES = "kubevirt_vmi_memory_usable_bytes" -KUBEVIRT_VMI_MEMORY_ACTUAL_BALLOON_BYTES = "kubevirt_vmi_memory_actual_balloon_bytes" -KUBEVIRT_VMI_MEMORY_PGMAJFAULT_TOTAL = "kubevirt_vmi_memory_pgmajfault_total" -KUBEVIRT_VMI_STORAGE_FLUSH_REQUESTS_TOTAL = "kubevirt_vmi_storage_flush_requests_total" -KUBEVIRT_VMI_STORAGE_FLUSH_TIMES_SECONDS_TOTAL = "kubevirt_vmi_storage_flush_times_seconds_total" -KUBEVIRT_VMI_NETWORK_RECEIVE_BYTES_TOTAL = "kubevirt_vmi_network_receive_bytes_total" -KUBEVIRT_VMI_NETWORK_TRANSMIT_BYTES_TOTAL = "kubevirt_vmi_network_transmit_bytes_total" -KUBEVIRT_VMI_STORAGE_IOPS_WRITE_TOTAL = "kubevirt_vmi_storage_iops_write_total" -KUBEVIRT_VMI_STORAGE_IOPS_READ_TOTAL = "kubevirt_vmi_storage_iops_read_total" -KUBEVIRT_VMI_STORAGE_WRITE_TRAFFIC_BYTES_TOTAL = "kubevirt_vmi_storage_write_traffic_bytes_total" -KUBEVIRT_VMI_STORAGE_READ_TRAFFIC_BYTES_TOTAL = "kubevirt_vmi_storage_read_traffic_bytes_total" -KUBEVIRT_VMI_VCPU_WAIT_SECONDS_TOTAL = "kubevirt_vmi_vcpu_wait_seconds_total" -KUBEVIRT_VMI_MEMORY_SWAP_IN_TRAFFIC_BYTES = "kubevirt_vmi_memory_swap_in_traffic_bytes" -KUBEVIRT_VMI_MEMORY_SWAP_OUT_TRAFFIC_BYTES = "kubevirt_vmi_memory_swap_out_traffic_bytes" -KUBEVIRT_VMI_MEMORY_PGMINFAULT_TOTAL = "kubevirt_vmi_memory_pgminfault_total" - -MONITORING_METRICS = [ - KUBEVIRT_VMI_MEMORY_ACTUAL_BALLOON_BYTES, - KUBEVIRT_VMI_MEMORY_DOMAIN_BYTES, - KUBEVIRT_VMI_MEMORY_PGMAJFAULT_TOTAL, - KUBEVIRT_VMI_MEMORY_PGMINFAULT_TOTAL, - KUBEVIRT_VMI_MEMORY_SWAP_IN_TRAFFIC_BYTES, - KUBEVIRT_VMI_MEMORY_SWAP_OUT_TRAFFIC_BYTES, - KUBEVIRT_VMI_MEMORY_UNUSED_BYTES, - KUBEVIRT_VMI_MEMORY_USABLE_BYTES, - KUBEVIRT_VMI_NETWORK_RECEIVE_BYTES_TOTAL, - KUBEVIRT_VMI_NETWORK_RECEIVE_PACKETS_DROPPED_TOTAL, - KUBEVIRT_VMI_NETWORK_TRANSMIT_BYTES_TOTAL, - KUBEVIRT_VMI_NETWORK_TRANSMIT_PACKETS_DROPPED_TOTAL, - KUBEVIRT_VMI_STORAGE_FLUSH_REQUESTS_TOTAL, - KUBEVIRT_VMI_STORAGE_FLUSH_TIMES_SECONDS_TOTAL, - KUBEVIRT_VMI_STORAGE_IOPS_READ_TOTAL, - KUBEVIRT_VMI_STORAGE_IOPS_WRITE_TOTAL, - KUBEVIRT_VMI_STORAGE_READ_TRAFFIC_BYTES_TOTAL, - KUBEVIRT_VMI_STORAGE_WRITE_TRAFFIC_BYTES_TOTAL, - KUBEVIRT_VMI_VCPU_WAIT_SECONDS_TOTAL, -] -# Common templates matrix constants -IMAGE_NAME_STR = "image_name" -IMAGE_PATH_STR = "image_path" -CONTAINER_DISK_IMAGE_PATH_STR = "container_disk_image_path" -DV_SIZE_STR = "dv_size" -TEMPLATE_LABELS_STR = "template_labels" -OS_STR = "os" -WORKLOAD_STR = "workload" -LATEST_RELEASE_STR = "latest_released" -OS_VERSION_STR = "os_version" -DATA_SOURCE_STR = "data_source" - -# OADP -ADP_NAMESPACE = "openshift-adp" -FILE_NAME_FOR_BACKUP = "file_before_backup.txt" -TEXT_TO_TEST = "text" -BACKUP_STORAGE_LOCATION = "dpa-1" - -# AAQ -AAQ_NAMESPACE_LABEL = {"application-aware-quota/enable-gating": ""} -VM_CPU_CORES = 2 -REQUESTS_INSTANCES_VMI_STR = "requests.instances/vmi" -REQUESTS_CPU_VMI_STR = "requests.cpu/vmi" -REQUESTS_MEMORY_VMI_STR = "requests.memory/vmi" -PODS_STR = "pods" -LIMITS_CPU_STR = "limits.cpu" -LIMITS_MEMORY_STR = "limits.memory" -REQUESTS_CPU_STR = "requests.cpu" -REQUESTS_MEMORY_STR = "requests.memory" -POD_REQUESTS_CPU = 2 -POD_REQUESTS_MEMORY = "2.5Gi" -POD_LIMITS_CPU = POD_REQUESTS_CPU * 2 -POD_LIMITS_MEMORY = f"{float(POD_REQUESTS_MEMORY[:-2]) * 2}Gi" -VM_MEMORY_GUEST = "2Gi" -QUOTA_FOR_POD = { - PODS_STR: "1", - LIMITS_CPU_STR: POD_LIMITS_CPU, - LIMITS_MEMORY_STR: POD_LIMITS_MEMORY, - REQUESTS_CPU_STR: POD_REQUESTS_CPU, - REQUESTS_MEMORY_STR: POD_LIMITS_MEMORY, -} - -QUOTA_FOR_ONE_VMI = { - REQUESTS_INSTANCES_VMI_STR: "1", - REQUESTS_CPU_VMI_STR: VM_CPU_CORES, - REQUESTS_MEMORY_VMI_STR: VM_MEMORY_GUEST, -} - -ARQ_QUOTA_HARD_SPEC = {**QUOTA_FOR_POD, **QUOTA_FOR_ONE_VMI} -DEFAULT_FEDORA_REGISTRY_URL = "docker://quay.io/containerdisks/fedora:latest" -REGISTRY_STR = "registry" -STRESS_CPU_MEM_IO_COMMAND = ( - "nohup stress-ng --vm {workers} --vm-bytes {memory} --vm-method all " - "--verify -t {timeout} -v --hdd 1 --io 1 --vm-keep &> /dev/null &" -) - -# High performance & Numa related constants -NODE_HUGE_PAGES_1GI_KEY = "hugepages-1Gi" diff --git a/utilities/constants/__init__.py b/utilities/constants/__init__.py new file mode 100644 index 0000000000..58f6024f64 --- /dev/null +++ b/utilities/constants/__init__.py @@ -0,0 +1,818 @@ +# Compatibility shim: re-exports every public name from submodules so that +# existing `from utilities.constants import X` statements continue to work +# while the per-team import migration is in progress. +# This file will be emptied once all callers use direct submodule imports. +# +# NOTE: `Images` is computed at the very bottom of this file (not in images.py) +# to avoid a circular import: the original computation called +# get_cluster_architecture() at module level, which does a lazy +# `from utilities.constants import KUBERNETES_ARCH_LABEL` inside +# utilities.architecture. With the package structure that lazy import would fail +# if triggered while the package is still being initialised. Placing the +# computation after all submodule imports guarantees that KUBERNETES_ARCH_LABEL +# (from cluster.py) is already in the namespace when get_cluster_architecture() runs. +from libs.infra.images import BASE_IMAGES_DIR +from utilities.architecture import get_cluster_architecture as _get_cluster_architecture +from utilities.constants.aaq import ( + AAQ_NAMESPACE_LABEL, + AAQ_VIRTUAL_RESOURCES, + AAQ_VMI_POD_USAGE, + ARQ_QUOTA_HARD_SPEC, + LIMITS_CPU_STR, + LIMITS_MEMORY_STR, + NODE_STR, + POD_LIMITS_CPU, + POD_LIMITS_MEMORY, + POD_REQUESTS_CPU, + POD_REQUESTS_MEMORY, + PODS_STR, + QUOTA_FOR_ONE_VMI, + QUOTA_FOR_POD, + REQUESTS_CPU_STR, + REQUESTS_CPU_VMI_STR, + REQUESTS_INSTANCES_VMI_STR, + REQUESTS_MEMORY_STR, + REQUESTS_MEMORY_VMI_STR, + VM_CPU_CORES, + VM_MEMORY_GUEST, +) +from utilities.constants.architecture import ( + AMD, + AMD_64, + ARM_64, + INTEL, + LINUX_AMD_64, + MULTIARCH, + S390X, + SUPPORTED_CPU_ARCHITECTURES, + SUPPORTED_MULTIARCH_OPTIONS, + X86_64, +) +from utilities.constants.cluster import ( + AUDIT_LOGS_PATH, + BASE_EXCEPTIONS_DICT, + CNV_TEST_RUN_IN_PROGRESS, + CNV_TEST_RUN_IN_PROGRESS_NS, + CNV_TEST_SERVICE_ACCOUNT, + CNV_TESTS_CONTAINER, + COUNT_FIVE, + CPU_MODEL_LABEL_PREFIX, + CREATE_STR, + DELETE_STR, + GET_STR, + KUBECONFIG, + KUBERNETES_ARCH_LABEL, + LS_COMMAND, + NODE_ROLE_KUBERNETES_IO, + NODE_TYPE_WORKER_LABEL, + OC_ADM_LOGS_COMMAND, + POD_SECURITY_NAMESPACE_LABELS, + RHSM_SECRET_NAME, + TSC_FREQUENCY, + UPDATE_STR, + UTILITY, + VALUE_STR, + VERSION_LABEL_KEY, + WORKER_NODE_LABEL_KEY, + WORKERS_TYPE, +) +from utilities.constants.components import ( + AAQ_OPERATOR, + ALL_CNV_DAEMONSETS, + ALL_CNV_DEPLOYMENTS, + ALL_CNV_PODS, + ALL_HCO_RELATED_OBJECTS, + BRIDGE_MARKER, + CDI_APISERVER, + CDI_DEPLOYMENT, + CDI_KUBEVIRT_HYPERCONVERGED, + CDI_OPERATOR, + CDI_STR, + CDI_UPLOADPROXY, + CLUSTER, + CLUSTER_NETWORK_ADDONS_OPERATOR, + CNAO_OPERATOR, + CNV_OPERATORS, + CNV_PODS_NO_HPP_CSI_HPP_POOL, + CNV_PROMETHEUS_RULES, + CONFIGMAP_STR, + CONSOLE_PLUGIN_STR, + CONSOLECLIDOWNLOAD_STR, + CONSOLEQUICKSTART_STR, + CREATING_VIRTUAL_MACHINE, + CREATING_VIRTUAL_MACHINE_FROM_VOLUME, + DEPLOYMENT_STR, + GRAFANA_DASHBOARD_KUBEVIRT_TOP_CONSUMERS, + HCO_BEARER_AUTH, + HCO_CATALOG_SOURCE, + HCO_OPERATOR, + HCO_PART_OF_LABEL_VALUE, + HCO_WEBHOOK, + HOSTPATH_PROVISIONER, + HOSTPATH_PROVISIONER_CSI, + HOSTPATH_PROVISIONER_OPERATOR, + HPP_POOL, + HYPERCONVERGED_CLUSTER, + HYPERCONVERGED_CLUSTER_CLI_DOWNLOAD, + HYPERCONVERGED_CLUSTER_OPERATOR, + HYPERCONVERGED_CLUSTER_OPERATOR_METRICS, + IMAGESTREAM_STR, + KUBE_CNI_LINUX_BRIDGE_PLUGIN, + KUBEMACPOOL_CERT_MANAGER, + KUBEMACPOOL_MAC_CONTROLLER_MANAGER, + KUBEMACPOOL_PROMETHEUS_RULE, + KUBEVIRT_APISERVER_PROXY, + KUBEVIRT_APISERVER_PROXY_NP, + KUBEVIRT_CLUSTER_CRITICAL, + KUBEVIRT_CONSOLE_PLUGIN, + KUBEVIRT_CONSOLE_PLUGIN_NP, + KUBEVIRT_CONSOLE_PLUGIN_SERVICE, + KUBEVIRT_HCO_NAME, + KUBEVIRT_HYPERCONVERGED_OPERATOR_METRICS, + KUBEVIRT_HYPERCONVERGED_PROMETHEUS_RULE, + KUBEVIRT_IPAM_CONTROLLER_MANAGER, + KUBEVIRT_KUBEVIRT_HYPERCONVERGED, + KUBEVIRT_MIGRATION_CONTROLLER, + KUBEVIRT_MIGRATION_OPERATOR, + KUBEVIRT_OPERATOR, + KUBEVIRT_PLUGIN, + KUBEVIRT_STR, + KUBEVIRT_UI_CONFIG, + KUBEVIRT_UI_CONFIG_READER, + KUBEVIRT_UI_CONFIG_READER_ROLE_BINDING, + KUBEVIRT_UI_FEATURES, + KUBEVIRT_USER_SETTINGS, + MANAGED_BY_LABEL_VALUE_OLM, + MIGCONTROLLER_KUBEVIRT_HYPERCONVERGED, + NETWORKADDONSCONFIG_STR, + NETWORKPOLICY_STR, + NGINX_CONF, + POD_STR, + PRIORITYCLASS_STR, + PROMETHEUS_RULES_STR, + PROMETHEUSRULE_STR, + RHEL8_GUEST, + RHEL9_GUEST, + RHEL9_STR, + RHEL10_GUEST, + RHEL10_STR, + ROLE_STR, + ROLEBINDING_STR, + ROUTE_STR, + SECRET_STR, + SERVICE_STR, + SERVICEACCOUNT_STR, + SERVICEMONITOR_STR, + SSP_KUBEVIRT_HYPERCONVERGED, + SSP_OPERATOR, + SSP_STR, + UPLOAD_BOOT_SOURCE, + VIRT_API, + VIRT_CONTROLLER, + VIRT_EXPORTPROXY, + VIRT_HANDLER, + VIRT_LAUNCHER, + VIRT_OPERATOR, + VIRT_PLATFORM_AUTOPILOT, + VIRT_SYNCHRONIZATION_CONTROLLER, + VIRT_TEMPLATE_VALIDATOR, + VIRTCTL_CLI_DOWNLOADS, + VIRTIO_WIN, + VM_CONSOLE_PROXY_CLUSTER_RESOURCES, + VM_CONSOLE_PROXY_NAMESPACE_RESOURCES, + WINDOWS_BOOTSOURCE_PIPELINE, +) +from utilities.constants.cpu_models import ( + EXCLUDED_CPU_MODELS, + EXCLUDED_CPU_MODELS_S390X, + EXCLUDED_OLD_CPU_MODELS, +) +from utilities.constants.hco import ( + ALL_CNV_CRDS, + COMMON_TEMPLATES_KEY_NAME, + DATA_IMPORT_CRON_ENABLE, + DATA_SOURCE_NAME, + DATA_SOURCE_NAMESPACE, + DEFAULT_HCO_CONDITIONS, + DEFAULT_KUBEVIRT_CONDITIONS, + DEFAULT_RESOURCE_CONDITIONS, + ENABLE_COMMON_BOOT_IMAGE_IMPORT, + EXPECTED_STATUS_CONDITIONS, + FEATURE_GATES, + HCO_DEFAULT_CPU_MODEL_KEY, + HCO_SUBSCRIPTION, + HOTFIX_STR, + IMAGE_CRON_STR, + PRODUCTION_CATALOG_SOURCE, + RESOURCE_REQUIREMENTS_KEY_HCO_CR, + SSP_CR_COMMON_TEMPLATES_LIST_KEY_NAME, + TLS_CUSTOM_POLICY, + TLS_OLD_POLICY, + TLS_SECURITY_PROFILE, + VM_CLONE_CRD, + VM_CRD, + VM_EXPORT_CRD, + UpgradeStreams, +) +from utilities.constants.images import ( + ALPINE_VERSION, + CIRROS_DISK_DEMO, + CIRROS_QCOW2_IMG, + DEFAULT_FEDORA_REGISTRY_URL, + FEDORA_DISK_DEMO, + OS_FLAVOR_ALPINE, + OS_FLAVOR_CIRROS, + OS_FLAVOR_FEDORA, + OS_FLAVOR_RHEL, + OS_FLAVOR_WIN_CONTAINER_DISK, + OS_FLAVOR_WINDOWS, + ArchImages, +) +from utilities.constants.instance_types import ( + CENTOS_STREAM9_PREFERENCE, + CENTOS_STREAM10_PREFERENCE, + EXPECTED_CLUSTER_INSTANCE_TYPE_LABELS, + FLAVOR_STR, + INSTANCE_TYPE_STR, + LINUX_STR, + OS_STR, + PREFERENCE_STR, + RHEL8_PREFERENCE, + RHEL9_PREFERENCE, + RHEL10_PREFERENCE, + RHEL_WITH_INSTANCETYPE_AND_PREFERENCE, + U1_LARGE, + U1_MEDIUM_STR, + U1_SMALL, + WINDOWS_2K22_PREFERENCE, + WINDOWS_11_PREFERENCE, + WORKLOAD_STR, +) +from utilities.constants.monitoring import ( + CRITICAL_STR, + FIRING_STATE, + INFO_STR, + KUBELET_READY_CONDITION, + KUBEVIRT_HCO_HYPERCONVERGED_CR_EXISTS, + KUBEVIRT_HYPERCONVERGED_OPERATOR_HEALTH_STATUS, + KUBEVIRT_VMI_MEMORY_ACTUAL_BALLOON_BYTES, + KUBEVIRT_VMI_MEMORY_DOMAIN_BYTES, + KUBEVIRT_VMI_MEMORY_PGMAJFAULT_TOTAL, + KUBEVIRT_VMI_MEMORY_PGMINFAULT_TOTAL, + KUBEVIRT_VMI_MEMORY_SWAP_IN_TRAFFIC_BYTES, + KUBEVIRT_VMI_MEMORY_SWAP_OUT_TRAFFIC_BYTES, + KUBEVIRT_VMI_MEMORY_UNUSED_BYTES, + KUBEVIRT_VMI_MEMORY_USABLE_BYTES, + KUBEVIRT_VMI_NETWORK_RECEIVE_BYTES_TOTAL, + KUBEVIRT_VMI_NETWORK_RECEIVE_PACKETS_DROPPED_TOTAL, + KUBEVIRT_VMI_NETWORK_TRANSMIT_BYTES_TOTAL, + KUBEVIRT_VMI_NETWORK_TRANSMIT_PACKETS_DROPPED_TOTAL, + KUBEVIRT_VMI_STORAGE_FLUSH_REQUESTS_TOTAL, + KUBEVIRT_VMI_STORAGE_FLUSH_TIMES_SECONDS_TOTAL, + KUBEVIRT_VMI_STORAGE_IOPS_READ_TOTAL, + KUBEVIRT_VMI_STORAGE_IOPS_WRITE_TOTAL, + KUBEVIRT_VMI_STORAGE_READ_TRAFFIC_BYTES_TOTAL, + KUBEVIRT_VMI_STORAGE_WRITE_TRAFFIC_BYTES_TOTAL, + KUBEVIRT_VMI_VCPU_WAIT_SECONDS_TOTAL, + MONITORING_METRICS, + NONE_STRING, + OPERATOR_HEALTH_IMPACT_VALUES, + PENDING_STR, + PROMETHEUS_K8S, + WARNING_STR, +) +from utilities.constants.namespaces import NamespacesNames +from utilities.constants.networking import ( + ACTIVE_BACKUP, + FLAT_OVERLAY_STR, + IP_FAMILY_POLICY_PREFER_DUAL_STACK, + IPV4_STR, + IPV6_STR, + KMP_ENABLED_LABEL, + KMP_VM_ASSIGNMENT_LABEL, + KUBEMACPOOL_MAC_RANGE_CONFIG, + LINUX_BRIDGE, + NET_UTIL_CONTAINER_IMAGE, + OVS_BRIDGE, + POD_CONTAINER_SPEC, + POD_SECURITY_CONTEXT_SPEC, + PORT_80, + PUBLIC_DNS_SERVER_IP, + SECURITY_CONTEXT, + SRIOV, + SSH_PORT_22, +) +from utilities.constants.oadp import ( + BACKUP_STORAGE_LOCATION, + FILE_NAME_FOR_BACKUP, + TEXT_TO_TEST, +) +from utilities.constants.os_matrix import ( + CONTAINER_DISK_IMAGE_PATH_STR, + DATA_SOURCE_STR, + DV_SIZE_STR, + IMAGE_NAME_STR, + IMAGE_PATH_STR, + LATEST_RELEASE_STR, + OS_VERSION_STR, + TEMPLATE_LABELS_STR, +) +from utilities.constants.pytest import ( + DEPENDENCY_SCOPE_SESSION, + QUARANTINED, + SANITY_TESTS_FAILURE, + SETUP_ERROR, + UNPRIVILEGED_PASSWORD, + UNPRIVILEGED_USER, +) +from utilities.constants.storage import ( + ACCESS_MODE, + BIND_IMMEDIATE_ANNOTATION, + BREW_REGISTRY_SOURCE, + CAPACITY, + CDI_CONFIGMAPS, + CDI_LABEL, + CDI_SECRETS, + CDI_UPLOAD, + CDI_UPLOAD_TMP_PVC, + HOTPLUG_DISK_SCSI_BUS, + HOTPLUG_DISK_SERIAL, + HOTPLUG_DISK_VIRTIO_BUS, + HPP_CAPABILITIES, + OUTDATED, + PVC, + REGISTRY_STR, + SOURCE_POD, + USED, + VOLUME_MODE, + WILDCARD_CRON_EXPRESSION, + StorageClassNames, +) +from utilities.constants.tekton import ( + TEKTON_AVAILABLE_PIPELINEREF, + TEKTON_AVAILABLE_TASKS, + WINDOWS_CUSTOMIZE_STR, + WINDOWS_EFI_INSTALLER_STR, +) +from utilities.constants.timeouts import ( + TCP_TIMEOUT_30SEC, + TIMEOUT_1MIN, + TIMEOUT_1SEC, + TIMEOUT_2MIN, + TIMEOUT_3MIN, + TIMEOUT_4MIN, + TIMEOUT_5MIN, + TIMEOUT_5SEC, + TIMEOUT_6MIN, + TIMEOUT_8MIN, + TIMEOUT_9MIN, + TIMEOUT_10MIN, + TIMEOUT_10SEC, + TIMEOUT_11MIN, + TIMEOUT_12MIN, + TIMEOUT_15MIN, + TIMEOUT_15SEC, + TIMEOUT_20MIN, + TIMEOUT_20SEC, + TIMEOUT_25MIN, + TIMEOUT_30MIN, + TIMEOUT_30SEC, + TIMEOUT_40MIN, + TIMEOUT_50MIN, + TIMEOUT_60MIN, + TIMEOUT_75MIN, + TIMEOUT_90SEC, + TIMEOUT_180MIN, +) +from utilities.constants.virt import ( + CLOUD_INIT_DISK_NAME, + CLOUD_INIT_NO_CLOUD, + CNV_SUPPLEMENTAL_TEMPLATES_URL, + CNV_VM_SSH_KEY_PATH, + DISK_SERIAL, + DV_DISK, + EIGHT_CPU_SOCKETS, + ES_LIVE_MIGRATE_IF_POSSIBLE, + ES_NONE, + EVICTIONSTRATEGY, + FIVE_GI_MEMORY, + FOUR_CPU_SOCKETS, + FOUR_GI_MEMORY, + HYPERV_FEATURES_LABELS_DOM_XML, + HYPERV_FEATURES_LABELS_VM_YAML, + KERNEL_DRIVER, + LIVE_MIGRATE, + MIGRATION_POLICY_VM_LABEL, + NODE_HUGE_PAGES_1GI_KEY, + ONE_CPU_CORE, + ONE_CPU_THREAD, + OS_PROC_NAME, + REGEDIT_PROC_NAME, + ROOTDISK, + SIX_CPU_SOCKETS, + SIX_GI_MEMORY, + STRESS_CPU_MEM_IO_COMMAND, + TEN_CPU_SOCKETS, + TEN_GI_MEMORY, + TWELVE_GI_MEMORY, + TWO_CPU_CORES, + TWO_CPU_SOCKETS, + TWO_CPU_THREADS, + VIRTCTL, + VIRTIO, + WIN_2K19, + WIN_2K22, + WIN_2K25, + WIN_10, + WIN_11, +) + +__all__ = [ + "AAQ_NAMESPACE_LABEL", + "AAQ_OPERATOR", + "AAQ_VIRTUAL_RESOURCES", + "AAQ_VMI_POD_USAGE", + "ACCESS_MODE", + "ACTIVE_BACKUP", + "ALL_CNV_CRDS", + "ALL_CNV_DAEMONSETS", + "ALL_CNV_DEPLOYMENTS", + "ALL_CNV_PODS", + "ALL_HCO_RELATED_OBJECTS", + "ALPINE_VERSION", + "AMD", + "AMD_64", + "ARM_64", + "ARQ_QUOTA_HARD_SPEC", + "AUDIT_LOGS_PATH", + "BACKUP_STORAGE_LOCATION", + "BASE_EXCEPTIONS_DICT", + "BASE_IMAGES_DIR", + "BIND_IMMEDIATE_ANNOTATION", + "BREW_REGISTRY_SOURCE", + "BRIDGE_MARKER", + "CAPACITY", + "CDI_APISERVER", + "CDI_CONFIGMAPS", + "CDI_DEPLOYMENT", + "CDI_KUBEVIRT_HYPERCONVERGED", + "CDI_LABEL", + "CDI_OPERATOR", + "CDI_SECRETS", + "CDI_STR", + "CDI_UPLOAD", + "CDI_UPLOADPROXY", + "CDI_UPLOAD_TMP_PVC", + "CENTOS_STREAM9_PREFERENCE", + "CENTOS_STREAM10_PREFERENCE", + "CIRROS_DISK_DEMO", + "CIRROS_QCOW2_IMG", + "CLOUD_INIT_DISK_NAME", + "CLOUD_INIT_NO_CLOUD", + "CLUSTER", + "CLUSTER_NETWORK_ADDONS_OPERATOR", + "CNAO_OPERATOR", + "CNV_OPERATORS", + "CNV_PODS_NO_HPP_CSI_HPP_POOL", + "CNV_PROMETHEUS_RULES", + "CNV_SUPPLEMENTAL_TEMPLATES_URL", + "CNV_TESTS_CONTAINER", + "CNV_TEST_RUN_IN_PROGRESS", + "CNV_TEST_RUN_IN_PROGRESS_NS", + "CNV_TEST_SERVICE_ACCOUNT", + "CNV_VM_SSH_KEY_PATH", + "COMMON_TEMPLATES_KEY_NAME", + "CONFIGMAP_STR", + "CONSOLECLIDOWNLOAD_STR", + "CONSOLEQUICKSTART_STR", + "CONSOLE_PLUGIN_STR", + "CONTAINER_DISK_IMAGE_PATH_STR", + "COUNT_FIVE", + "CPU_MODEL_LABEL_PREFIX", + "CREATE_STR", + "CREATING_VIRTUAL_MACHINE", + "CREATING_VIRTUAL_MACHINE_FROM_VOLUME", + "CRITICAL_STR", + "DATA_IMPORT_CRON_ENABLE", + "DATA_SOURCE_NAME", + "DATA_SOURCE_NAMESPACE", + "DATA_SOURCE_STR", + "DEFAULT_FEDORA_REGISTRY_URL", + "DEFAULT_HCO_CONDITIONS", + "DEFAULT_KUBEVIRT_CONDITIONS", + "DEFAULT_RESOURCE_CONDITIONS", + "DELETE_STR", + "DEPENDENCY_SCOPE_SESSION", + "DEPLOYMENT_STR", + "DISK_SERIAL", + "DV_DISK", + "DV_SIZE_STR", + "EIGHT_CPU_SOCKETS", + "ENABLE_COMMON_BOOT_IMAGE_IMPORT", + "ES_LIVE_MIGRATE_IF_POSSIBLE", + "ES_NONE", + "EVICTIONSTRATEGY", + "EXCLUDED_CPU_MODELS", + "EXCLUDED_CPU_MODELS_S390X", + "EXCLUDED_OLD_CPU_MODELS", + "EXPECTED_CLUSTER_INSTANCE_TYPE_LABELS", + "EXPECTED_STATUS_CONDITIONS", + "FEATURE_GATES", + "FEDORA_DISK_DEMO", + "FILE_NAME_FOR_BACKUP", + "FIRING_STATE", + "FIVE_GI_MEMORY", + "FLAT_OVERLAY_STR", + "FLAVOR_STR", + "FOUR_CPU_SOCKETS", + "FOUR_GI_MEMORY", + "GET_STR", + "GRAFANA_DASHBOARD_KUBEVIRT_TOP_CONSUMERS", + "HCO_BEARER_AUTH", + "HCO_CATALOG_SOURCE", + "HCO_DEFAULT_CPU_MODEL_KEY", + "HCO_OPERATOR", + "HCO_PART_OF_LABEL_VALUE", + "HCO_SUBSCRIPTION", + "HCO_WEBHOOK", + "HOSTPATH_PROVISIONER", + "HOSTPATH_PROVISIONER_CSI", + "HOSTPATH_PROVISIONER_OPERATOR", + "HOTFIX_STR", + "HOTPLUG_DISK_SCSI_BUS", + "HOTPLUG_DISK_SERIAL", + "HOTPLUG_DISK_VIRTIO_BUS", + "HPP_CAPABILITIES", + "HPP_POOL", + "HYPERCONVERGED_CLUSTER", + "HYPERCONVERGED_CLUSTER_CLI_DOWNLOAD", + "HYPERCONVERGED_CLUSTER_OPERATOR", + "HYPERCONVERGED_CLUSTER_OPERATOR_METRICS", + "HYPERV_FEATURES_LABELS_DOM_XML", + "HYPERV_FEATURES_LABELS_VM_YAML", + "IMAGESTREAM_STR", + "IMAGE_CRON_STR", + "IMAGE_NAME_STR", + "IMAGE_PATH_STR", + "INFO_STR", + "INSTANCE_TYPE_STR", + "INTEL", + "IPV4_STR", + "IPV6_STR", + "IP_FAMILY_POLICY_PREFER_DUAL_STACK", + "KERNEL_DRIVER", + "KMP_ENABLED_LABEL", + "KMP_VM_ASSIGNMENT_LABEL", + "KUBECONFIG", + "KUBELET_READY_CONDITION", + "KUBEMACPOOL_CERT_MANAGER", + "KUBEMACPOOL_MAC_CONTROLLER_MANAGER", + "KUBEMACPOOL_MAC_RANGE_CONFIG", + "KUBEMACPOOL_PROMETHEUS_RULE", + "KUBERNETES_ARCH_LABEL", + "KUBEVIRT_APISERVER_PROXY", + "KUBEVIRT_APISERVER_PROXY_NP", + "KUBEVIRT_CLUSTER_CRITICAL", + "KUBEVIRT_CONSOLE_PLUGIN", + "KUBEVIRT_CONSOLE_PLUGIN_NP", + "KUBEVIRT_CONSOLE_PLUGIN_SERVICE", + "KUBEVIRT_HCO_HYPERCONVERGED_CR_EXISTS", + "KUBEVIRT_HCO_NAME", + "KUBEVIRT_HYPERCONVERGED_OPERATOR_HEALTH_STATUS", + "KUBEVIRT_HYPERCONVERGED_OPERATOR_METRICS", + "KUBEVIRT_HYPERCONVERGED_PROMETHEUS_RULE", + "KUBEVIRT_IPAM_CONTROLLER_MANAGER", + "KUBEVIRT_KUBEVIRT_HYPERCONVERGED", + "KUBEVIRT_MIGRATION_CONTROLLER", + "KUBEVIRT_MIGRATION_OPERATOR", + "KUBEVIRT_OPERATOR", + "KUBEVIRT_PLUGIN", + "KUBEVIRT_STR", + "KUBEVIRT_UI_CONFIG", + "KUBEVIRT_UI_CONFIG_READER", + "KUBEVIRT_UI_CONFIG_READER_ROLE_BINDING", + "KUBEVIRT_UI_FEATURES", + "KUBEVIRT_USER_SETTINGS", + "KUBEVIRT_VMI_MEMORY_ACTUAL_BALLOON_BYTES", + "KUBEVIRT_VMI_MEMORY_DOMAIN_BYTES", + "KUBEVIRT_VMI_MEMORY_PGMAJFAULT_TOTAL", + "KUBEVIRT_VMI_MEMORY_PGMINFAULT_TOTAL", + "KUBEVIRT_VMI_MEMORY_SWAP_IN_TRAFFIC_BYTES", + "KUBEVIRT_VMI_MEMORY_SWAP_OUT_TRAFFIC_BYTES", + "KUBEVIRT_VMI_MEMORY_UNUSED_BYTES", + "KUBEVIRT_VMI_MEMORY_USABLE_BYTES", + "KUBEVIRT_VMI_NETWORK_RECEIVE_BYTES_TOTAL", + "KUBEVIRT_VMI_NETWORK_RECEIVE_PACKETS_DROPPED_TOTAL", + "KUBEVIRT_VMI_NETWORK_TRANSMIT_BYTES_TOTAL", + "KUBEVIRT_VMI_NETWORK_TRANSMIT_PACKETS_DROPPED_TOTAL", + "KUBEVIRT_VMI_STORAGE_FLUSH_REQUESTS_TOTAL", + "KUBEVIRT_VMI_STORAGE_FLUSH_TIMES_SECONDS_TOTAL", + "KUBEVIRT_VMI_STORAGE_IOPS_READ_TOTAL", + "KUBEVIRT_VMI_STORAGE_IOPS_WRITE_TOTAL", + "KUBEVIRT_VMI_STORAGE_READ_TRAFFIC_BYTES_TOTAL", + "KUBEVIRT_VMI_STORAGE_WRITE_TRAFFIC_BYTES_TOTAL", + "KUBEVIRT_VMI_VCPU_WAIT_SECONDS_TOTAL", + "KUBE_CNI_LINUX_BRIDGE_PLUGIN", + "LATEST_RELEASE_STR", + "LIMITS_CPU_STR", + "LIMITS_MEMORY_STR", + "LINUX_AMD_64", + "LINUX_BRIDGE", + "LINUX_STR", + "LIVE_MIGRATE", + "LS_COMMAND", + "MANAGED_BY_LABEL_VALUE_OLM", + "MIGCONTROLLER_KUBEVIRT_HYPERCONVERGED", + "MIGRATION_POLICY_VM_LABEL", + "MONITORING_METRICS", + "MULTIARCH", + "NETWORKADDONSCONFIG_STR", + "NETWORKPOLICY_STR", + "NET_UTIL_CONTAINER_IMAGE", + "NGINX_CONF", + "NODE_HUGE_PAGES_1GI_KEY", + "NODE_ROLE_KUBERNETES_IO", + "NODE_STR", + "NODE_TYPE_WORKER_LABEL", + "NONE_STRING", + "OC_ADM_LOGS_COMMAND", + "ONE_CPU_CORE", + "ONE_CPU_THREAD", + "OPERATOR_HEALTH_IMPACT_VALUES", + "OS_FLAVOR_ALPINE", + "OS_FLAVOR_CIRROS", + "OS_FLAVOR_FEDORA", + "OS_FLAVOR_RHEL", + "OS_FLAVOR_WINDOWS", + "OS_FLAVOR_WIN_CONTAINER_DISK", + "OS_PROC_NAME", + "OS_STR", + "OS_VERSION_STR", + "OUTDATED", + "OVS_BRIDGE", + "PENDING_STR", + "PODS_STR", + "POD_CONTAINER_SPEC", + "POD_LIMITS_CPU", + "POD_LIMITS_MEMORY", + "POD_REQUESTS_CPU", + "POD_REQUESTS_MEMORY", + "POD_SECURITY_CONTEXT_SPEC", + "POD_SECURITY_NAMESPACE_LABELS", + "POD_STR", + "PORT_80", + "PREFERENCE_STR", + "PRIORITYCLASS_STR", + "PRODUCTION_CATALOG_SOURCE", + "PROMETHEUSRULE_STR", + "PROMETHEUS_K8S", + "PROMETHEUS_RULES_STR", + "PUBLIC_DNS_SERVER_IP", + "PVC", + "QUARANTINED", + "QUOTA_FOR_ONE_VMI", + "QUOTA_FOR_POD", + "REGEDIT_PROC_NAME", + "REGISTRY_STR", + "REQUESTS_CPU_STR", + "REQUESTS_CPU_VMI_STR", + "REQUESTS_INSTANCES_VMI_STR", + "REQUESTS_MEMORY_STR", + "REQUESTS_MEMORY_VMI_STR", + "RESOURCE_REQUIREMENTS_KEY_HCO_CR", + "RHEL8_GUEST", + "RHEL8_PREFERENCE", + "RHEL9_GUEST", + "RHEL9_PREFERENCE", + "RHEL9_STR", + "RHEL10_GUEST", + "RHEL10_PREFERENCE", + "RHEL10_STR", + "RHEL_WITH_INSTANCETYPE_AND_PREFERENCE", + "RHSM_SECRET_NAME", + "ROLEBINDING_STR", + "ROLE_STR", + "ROOTDISK", + "ROUTE_STR", + "S390X", + "SANITY_TESTS_FAILURE", + "SECRET_STR", + "SECURITY_CONTEXT", + "SERVICEACCOUNT_STR", + "SERVICEMONITOR_STR", + "SERVICE_STR", + "SETUP_ERROR", + "SIX_CPU_SOCKETS", + "SIX_GI_MEMORY", + "SOURCE_POD", + "SRIOV", + "SSH_PORT_22", + "SSP_CR_COMMON_TEMPLATES_LIST_KEY_NAME", + "SSP_KUBEVIRT_HYPERCONVERGED", + "SSP_OPERATOR", + "SSP_STR", + "STRESS_CPU_MEM_IO_COMMAND", + "SUPPORTED_CPU_ARCHITECTURES", + "SUPPORTED_MULTIARCH_OPTIONS", + "TCP_TIMEOUT_30SEC", + "TEKTON_AVAILABLE_PIPELINEREF", + "TEKTON_AVAILABLE_TASKS", + "TEMPLATE_LABELS_STR", + "TEN_CPU_SOCKETS", + "TEN_GI_MEMORY", + "TEXT_TO_TEST", + "TIMEOUT_1MIN", + "TIMEOUT_1SEC", + "TIMEOUT_2MIN", + "TIMEOUT_3MIN", + "TIMEOUT_4MIN", + "TIMEOUT_5MIN", + "TIMEOUT_5SEC", + "TIMEOUT_6MIN", + "TIMEOUT_8MIN", + "TIMEOUT_9MIN", + "TIMEOUT_10MIN", + "TIMEOUT_10SEC", + "TIMEOUT_11MIN", + "TIMEOUT_12MIN", + "TIMEOUT_15MIN", + "TIMEOUT_15SEC", + "TIMEOUT_20MIN", + "TIMEOUT_20SEC", + "TIMEOUT_25MIN", + "TIMEOUT_30MIN", + "TIMEOUT_30SEC", + "TIMEOUT_40MIN", + "TIMEOUT_50MIN", + "TIMEOUT_60MIN", + "TIMEOUT_75MIN", + "TIMEOUT_90SEC", + "TIMEOUT_180MIN", + "TLS_CUSTOM_POLICY", + "TLS_OLD_POLICY", + "TLS_SECURITY_PROFILE", + "TSC_FREQUENCY", + "TWELVE_GI_MEMORY", + "TWO_CPU_CORES", + "TWO_CPU_SOCKETS", + "TWO_CPU_THREADS", + "U1_LARGE", + "U1_MEDIUM_STR", + "U1_SMALL", + "UNPRIVILEGED_PASSWORD", + "UNPRIVILEGED_USER", + "UPDATE_STR", + "UPLOAD_BOOT_SOURCE", + "USED", + "UTILITY", + "VALUE_STR", + "VERSION_LABEL_KEY", + "VIRTCTL", + "VIRTCTL_CLI_DOWNLOADS", + "VIRTIO", + "VIRTIO_WIN", + "VIRT_API", + "VIRT_CONTROLLER", + "VIRT_EXPORTPROXY", + "VIRT_HANDLER", + "VIRT_LAUNCHER", + "VIRT_OPERATOR", + "VIRT_PLATFORM_AUTOPILOT", + "VIRT_SYNCHRONIZATION_CONTROLLER", + "VIRT_TEMPLATE_VALIDATOR", + "VM_CLONE_CRD", + "VM_CONSOLE_PROXY_CLUSTER_RESOURCES", + "VM_CONSOLE_PROXY_NAMESPACE_RESOURCES", + "VM_CPU_CORES", + "VM_CRD", + "VM_EXPORT_CRD", + "VM_MEMORY_GUEST", + "VOLUME_MODE", + "WARNING_STR", + "WILDCARD_CRON_EXPRESSION", + "WINDOWS_2K22_PREFERENCE", + "WINDOWS_11_PREFERENCE", + "WINDOWS_BOOTSOURCE_PIPELINE", + "WINDOWS_CUSTOMIZE_STR", + "WINDOWS_EFI_INSTALLER_STR", + "WIN_2K19", + "WIN_2K22", + "WIN_2K25", + "WIN_10", + "WIN_11", + "WORKERS_TYPE", + "WORKER_NODE_LABEL_KEY", + "WORKLOAD_STR", + "X86_64", + "ArchImages", + "Images", + "NamespacesNames", + "StorageClassNames", + "UpgradeStreams", +] + +# Computed after all submodule imports so that KUBERNETES_ARCH_LABEL (from cluster.py) +# is already in the utilities.constants namespace when get_cluster_architecture() +# triggers its lazy `from utilities.constants import KUBERNETES_ARCH_LABEL`. +# TODO: remove this when utilities modules are refactored +Images = getattr(ArchImages, next(iter(_get_cluster_architecture())).upper()) diff --git a/utilities/constants/aaq.py b/utilities/constants/aaq.py new file mode 100644 index 0000000000..cb276bf9a9 --- /dev/null +++ b/utilities/constants/aaq.py @@ -0,0 +1,40 @@ +"""Application-Aware Quota (AAQ) constants. + +Resource names, quota field keys, namespace labels, and pre-built quota +specification dicts for VMI and pod resource requests/limits. +""" + +AAQ_VIRTUAL_RESOURCES = "VirtualResources" +AAQ_VMI_POD_USAGE = "VmiPodUsage" +NODE_STR = "node" + +AAQ_NAMESPACE_LABEL = {"application-aware-quota/enable-gating": ""} +VM_CPU_CORES = 2 +REQUESTS_INSTANCES_VMI_STR = "requests.instances/vmi" +REQUESTS_CPU_VMI_STR = "requests.cpu/vmi" +REQUESTS_MEMORY_VMI_STR = "requests.memory/vmi" +PODS_STR = "pods" +LIMITS_CPU_STR = "limits.cpu" +LIMITS_MEMORY_STR = "limits.memory" +REQUESTS_CPU_STR = "requests.cpu" +REQUESTS_MEMORY_STR = "requests.memory" +POD_REQUESTS_CPU = 2 +POD_REQUESTS_MEMORY = "2.5Gi" +POD_LIMITS_CPU = POD_REQUESTS_CPU * 2 +POD_LIMITS_MEMORY = f"{float(POD_REQUESTS_MEMORY[:-2]) * 2}Gi" +VM_MEMORY_GUEST = "2Gi" +QUOTA_FOR_POD = { + PODS_STR: "1", + LIMITS_CPU_STR: POD_LIMITS_CPU, + LIMITS_MEMORY_STR: POD_LIMITS_MEMORY, + REQUESTS_CPU_STR: POD_REQUESTS_CPU, + REQUESTS_MEMORY_STR: POD_LIMITS_MEMORY, +} + +QUOTA_FOR_ONE_VMI = { + REQUESTS_INSTANCES_VMI_STR: "1", + REQUESTS_CPU_VMI_STR: VM_CPU_CORES, + REQUESTS_MEMORY_VMI_STR: VM_MEMORY_GUEST, +} + +ARQ_QUOTA_HARD_SPEC = {**QUOTA_FOR_POD, **QUOTA_FOR_ONE_VMI} diff --git a/utilities/constants/architecture.py b/utilities/constants/architecture.py new file mode 100644 index 0000000000..804692b3ae --- /dev/null +++ b/utilities/constants/architecture.py @@ -0,0 +1,25 @@ +"""CPU architecture identifiers and multi-architecture support constants. + +Covers architecture strings (AMD_64, ARM_64, S390X, X86_64), container platform +strings (LINUX_AMD_64), CPU vendor identifiers (INTEL, AMD), and supported +architecture sets. + +Not here: +- Kubernetes architecture node label → ``cluster.py`` +- CPU model exclusion lists → ``cpu_models.py`` +- VM CPU topology counts (cores/sockets/threads) → ``virt.py`` +- Image architecture variants → ``images.py`` +""" + +AMD_64 = "amd64" +ARM_64 = "arm64" +S390X = "s390x" +X86_64 = "x86_64" +MULTIARCH = "multiarch" +LINUX_AMD_64 = "linux/amd64" + +INTEL = "Intel" +AMD = "AMD" + +SUPPORTED_MULTIARCH_OPTIONS = {AMD_64, ARM_64} +SUPPORTED_CPU_ARCHITECTURES = {AMD_64, ARM_64, S390X} diff --git a/utilities/constants/cluster.py b/utilities/constants/cluster.py new file mode 100644 index 0000000000..429bfb7da0 --- /dev/null +++ b/utilities/constants/cluster.py @@ -0,0 +1,77 @@ +"""Cluster infrastructure constants. + +Covers Kubernetes node labels (architecture, worker role, CPU model prefix, TSC +frequency, version), pod security namespace labels, Kubernetes API verb strings, +environment variables (KUBECONFIG, WORKERS_TYPE), CNV test run markers, service +account names, the base network-exception dictionary, and audit-log command strings. + +Not here: +- Architecture identifier strings (AMD_64, ARM_64, …) → ``architecture.py`` +- CPU model exclusion lists → ``cpu_models.py`` +- VM CPU/memory topology → ``virt.py`` +- Networking pod specs → ``networking.py`` +- Pytest/test-runner strings → ``pytest.py`` +""" + +from kubernetes.dynamic.exceptions import InternalServerError +from ocp_resources.resource import Resource +from urllib3.exceptions import ( + MaxRetryError, + NewConnectionError, + ProtocolError, + ResponseError, +) + +# Node / selector labels +KUBERNETES_ARCH_LABEL = f"{Resource.ApiGroup.KUBERNETES_IO}/arch" +NODE_TYPE_WORKER_LABEL = {"node-type": "worker"} +NODE_ROLE_KUBERNETES_IO = "node-role.kubernetes.io" +WORKER_NODE_LABEL_KEY = f"{NODE_ROLE_KUBERNETES_IO}/worker" +VERSION_LABEL_KEY = f"{Resource.ApiGroup.APP_KUBERNETES_IO}/version" +CPU_MODEL_LABEL_PREFIX = f"cpu-model.node.{Resource.ApiGroup.KUBEVIRT_IO}" +TSC_FREQUENCY = "tsc-frequency" + +POD_SECURITY_NAMESPACE_LABELS = { + "pod-security.kubernetes.io/enforce": "privileged", + "security.openshift.io/scc.podSecurityLabelSync": "false", +} + +# CNV test run markers +CNV_TEST_RUN_IN_PROGRESS = "cnv-tests-run-in-progress" +CNV_TEST_RUN_IN_PROGRESS_NS = f"{CNV_TEST_RUN_IN_PROGRESS}-ns" + +# Service accounts and containers +CNV_TEST_SERVICE_ACCOUNT = "cnv-tests-sa" +CNV_TESTS_CONTAINER = "CNV_TESTS_CONTAINER" +UTILITY = "utility" + +# Environment variables +KUBECONFIG = "KUBECONFIG" +WORKERS_TYPE = "WORKERS_TYPE" +RHSM_SECRET_NAME = "rhsm-secret" + +# Kubernetes API verb strings +GET_STR = "get" +CREATE_STR = "create" +UPDATE_STR = "update" +DELETE_STR = "delete" +VALUE_STR = "value" + +# Shell commands +LS_COMMAND = "ls -1 | sort | tr '\\n' ' '" + +# Audit log commands +OC_ADM_LOGS_COMMAND = "oc adm node-logs" +AUDIT_LOGS_PATH = "--path=kube-apiserver" + +COUNT_FIVE = 5 + +BASE_EXCEPTIONS_DICT: dict[type[Exception], list[str]] = { + NewConnectionError: [], + ConnectionRefusedError: [], + ProtocolError: [], + ResponseError: [], + MaxRetryError: [], + InternalServerError: [], + ConnectionResetError: [], +} diff --git a/utilities/constants/components.py b/utilities/constants/components.py new file mode 100644 index 0000000000..a178d9e2ec --- /dev/null +++ b/utilities/constants/components.py @@ -0,0 +1,287 @@ +"""CNV component names and Kubernetes resource kind strings. + +Covers strings that identify deployed Kubernetes resources by name — operators, +deployments, daemonsets, pods, services — plus the kind strings used alongside them +(e.g. ``DEPLOYMENT_STR``, ``PROMETHEUSRULE_STR``). + +Rule of thumb: if you would use the constant in ``kubectl get /``, it belongs here. + +Not here: +- HCO conditions, CRD lists, feature gate keys → ``hco.py`` +- Networking config (bridge types, kubemacpool config map names) → ``networking.py`` +- Node selector labels and infrastructure labels (including CPU model / TSC labels) → ``cluster.py`` +""" + +from ocp_resources.api_service import APIService +from ocp_resources.cluster_role import ClusterRole +from ocp_resources.cluster_role_binding import ClusterRoleBinding +from ocp_resources.config_map import ConfigMap +from ocp_resources.deployment import Deployment +from ocp_resources.role_binding import RoleBinding +from ocp_resources.service import Service +from ocp_resources.service_account import ServiceAccount + +# Operators +HCO_OPERATOR = "hco-operator" +CDI_OPERATOR = "cdi-operator" +SSP_OPERATOR = "ssp-operator" +HOSTPATH_PROVISIONER_OPERATOR = "hostpath-provisioner-operator" +CNAO_OPERATOR = "cnao-operator" +CLUSTER_NETWORK_ADDONS_OPERATOR = "cluster-network-addons-operator" +AAQ_OPERATOR = "aaq-operator" +KUBEVIRT_OPERATOR = "kubevirt-operator" +KUBEVIRT_MIGRATION_OPERATOR = "kubevirt-migration-operator" +HYPERCONVERGED_CLUSTER_OPERATOR = "hyperconverged-cluster-operator" +VIRT_OPERATOR = "virt-operator" + +# Deployments / controllers +VIRT_API = "virt-api" +VIRT_CONTROLLER = "virt-controller" +VIRT_TEMPLATE_VALIDATOR = "virt-template-validator" +VIRT_EXPORTPROXY = "virt-exportproxy" +VIRT_PLATFORM_AUTOPILOT = "virt-platform-autopilot" +VIRT_SYNCHRONIZATION_CONTROLLER = "virt-synchronization-controller" +KUBEVIRT_MIGRATION_CONTROLLER = "kubevirt-migration-controller" +CDI_APISERVER = "cdi-apiserver" +CDI_DEPLOYMENT = "cdi-deployment" +CDI_UPLOADPROXY = "cdi-uploadproxy" +HCO_WEBHOOK = "hco-webhook" +KUBEMACPOOL_CERT_MANAGER = "kubemacpool-cert-manager" +KUBEMACPOOL_MAC_CONTROLLER_MANAGER = "kubemacpool-mac-controller-manager" +KUBEVIRT_IPAM_CONTROLLER_MANAGER = "kubevirt-ipam-controller-manager" +KUBEVIRT_CONSOLE_PLUGIN = "kubevirt-console-plugin" +KUBEVIRT_APISERVER_PROXY = "kubevirt-apiserver-proxy" + +# DaemonSets +VIRT_HANDLER = "virt-handler" +BRIDGE_MARKER = "bridge-marker" +KUBE_CNI_LINUX_BRIDGE_PLUGIN = "kube-cni-linux-bridge-plugin" +HOSTPATH_PROVISIONER_CSI = "hostpath-provisioner-csi" + +# Pods / launcher +VIRT_LAUNCHER = "virt-launcher" +HPP_POOL = "hpp-pool" + +# HPP +HOSTPATH_PROVISIONER = "hostpath-provisioner" + +# HCO metadata +HCO_CATALOG_SOURCE = "hco-catalogsource" +HCO_BEARER_AUTH = "hco-bearer-auth" +HCO_PART_OF_LABEL_VALUE = "hyperconverged-cluster" +MANAGED_BY_LABEL_VALUE_OLM = "olm" +KUBEVIRT_HCO_NAME = "kubevirt-kubevirt-hyperconverged" + +# KubeVirt / CDI CR names +KUBEVIRT_KUBEVIRT_HYPERCONVERGED = "kubevirt-kubevirt-hyperconverged" +CDI_KUBEVIRT_HYPERCONVERGED = "cdi-kubevirt-hyperconverged" +SSP_KUBEVIRT_HYPERCONVERGED = "ssp-kubevirt-hyperconverged" +MIGCONTROLLER_KUBEVIRT_HYPERCONVERGED = "migcontroller-kubevirt-hyperconverged" +CLUSTER = "cluster" +HYPERCONVERGED_CLUSTER = "hyperconverged-cluster" +KUBEVIRT_CLUSTER_CRITICAL = "kubevirt-cluster-critical" + +# Console / UI +KUBEVIRT_CONSOLE_PLUGIN_SERVICE = "kubevirt-console-plugin-service" +KUBEVIRT_CONSOLE_PLUGIN_NP = "kubevirt-console-plugin-np" +KUBEVIRT_APISERVER_PROXY_NP = "kubevirt-apiserver-proxy-np" +KUBEVIRT_PLUGIN = "kubevirt-plugin" +KUBEVIRT_UI_CONFIG = "kubevirt-ui-config" +KUBEVIRT_USER_SETTINGS = "kubevirt-user-settings" +KUBEVIRT_UI_FEATURES = "kubevirt-ui-features" +KUBEVIRT_UI_CONFIG_READER = "kubevirt-ui-config-reader" +KUBEVIRT_UI_CONFIG_READER_ROLE_BINDING = "kubevirt-ui-config-reader-rolebinding" + +# Prometheus / monitoring component names +KUBEVIRT_HYPERCONVERGED_PROMETHEUS_RULE = "kubevirt-hyperconverged-prometheus-rule" +KUBEMACPOOL_PROMETHEUS_RULE = "kubemacpool-prometheus-rule" +HYPERCONVERGED_CLUSTER_OPERATOR_METRICS = "hyperconverged-cluster-operator-metrics" +KUBEVIRT_HYPERCONVERGED_OPERATOR_METRICS = "kubevirt-hyperconverged-operator-metrics" +PROMETHEUS_RULES_STR = "prometheus-rules" + +# Misc resource names +HYPERCONVERGED_CLUSTER_CLI_DOWNLOAD = "hyperconverged-cluster-cli-download" +NGINX_CONF = "nginx-conf" +WINDOWS_BOOTSOURCE_PIPELINE = "windows-bootsource-pipeline" +VIRTCTL_CLI_DOWNLOADS = "virtctl-clidownloads-kubevirt-hyperconverged" +VIRTIO_WIN = "virtio-win" +UPLOAD_BOOT_SOURCE = "upload-boot-source" +CREATING_VIRTUAL_MACHINE = "creating-virtual-machine" +CREATING_VIRTUAL_MACHINE_FROM_VOLUME = "creating-virtual-machine-from-volume" +GRAFANA_DASHBOARD_KUBEVIRT_TOP_CONSUMERS = "grafana-dashboard-kubevirt-top-consumers" +RHEL9_STR = "rhel9" +RHEL10_STR = "rhel10" +RHEL8_GUEST = "rhel8-guest" +RHEL9_GUEST = "rhel9-guest" +RHEL10_GUEST = "rhel10-guest" + +# Kubernetes resource kind strings +ROLEBINDING_STR = "RoleBinding" +POD_STR = "Pod" +PROMETHEUSRULE_STR = "PrometheusRule" +ROLE_STR = "Role" +SERVICE_STR = "Service" +SERVICEMONITOR_STR = "ServiceMonitor" +PRIORITYCLASS_STR = "PriorityClass" +KUBEVIRT_STR = "KubeVirt" +NETWORKADDONSCONFIG_STR = "NetworkAddonsConfig" +CONSOLECLIDOWNLOAD_STR = "ConsoleCLIDownload" +ROUTE_STR = "Route" +CONSOLEQUICKSTART_STR = "ConsoleQuickStart" +CONFIGMAP_STR = "ConfigMap" +IMAGESTREAM_STR = "ImageStream" +DEPLOYMENT_STR = "Deployment" +CONSOLE_PLUGIN_STR = "ConsolePlugin" +CDI_STR = "CDI" +SSP_STR = "SSP" +SECRET_STR = "Secret" +NETWORKPOLICY_STR = "NetworkPolicy" +SERVICEACCOUNT_STR = "ServiceAccount" + +# All HCO related objects with kind +ALL_HCO_RELATED_OBJECTS = [ + {KUBEVIRT_HYPERCONVERGED_PROMETHEUS_RULE: PROMETHEUSRULE_STR}, + {HYPERCONVERGED_CLUSTER_OPERATOR_METRICS: ROLE_STR}, + {HYPERCONVERGED_CLUSTER_OPERATOR_METRICS: ROLEBINDING_STR}, + {KUBEVIRT_HYPERCONVERGED_OPERATOR_METRICS: SERVICE_STR}, + {KUBEVIRT_HYPERCONVERGED_OPERATOR_METRICS: SERVICEMONITOR_STR}, + {KUBEVIRT_CLUSTER_CRITICAL: PRIORITYCLASS_STR}, + {KUBEVIRT_KUBEVIRT_HYPERCONVERGED: KUBEVIRT_STR}, + {CDI_KUBEVIRT_HYPERCONVERGED: CDI_STR}, + {CLUSTER: NETWORKADDONSCONFIG_STR}, + {SSP_KUBEVIRT_HYPERCONVERGED: SSP_STR}, + {VIRTCTL_CLI_DOWNLOADS: CONSOLECLIDOWNLOAD_STR}, + {HYPERCONVERGED_CLUSTER_CLI_DOWNLOAD: ROUTE_STR}, + {HYPERCONVERGED_CLUSTER_CLI_DOWNLOAD: SERVICE_STR}, + {KUBEVIRT_CONSOLE_PLUGIN_SERVICE: SERVICE_STR}, + {f"{KUBEVIRT_APISERVER_PROXY}-{SERVICE_STR.lower()}": SERVICE_STR}, + {KUBEVIRT_APISERVER_PROXY: DEPLOYMENT_STR}, + {KUBEVIRT_CONSOLE_PLUGIN: SERVICEACCOUNT_STR}, + {KUBEVIRT_APISERVER_PROXY: SERVICEACCOUNT_STR}, + {CREATING_VIRTUAL_MACHINE: CONSOLEQUICKSTART_STR}, + {CREATING_VIRTUAL_MACHINE_FROM_VOLUME: CONSOLEQUICKSTART_STR}, + {UPLOAD_BOOT_SOURCE: CONSOLEQUICKSTART_STR}, + {GRAFANA_DASHBOARD_KUBEVIRT_TOP_CONSUMERS: CONFIGMAP_STR}, + {RHEL8_GUEST: IMAGESTREAM_STR}, + {RHEL9_GUEST: IMAGESTREAM_STR}, + {RHEL10_GUEST: IMAGESTREAM_STR}, + {VIRTIO_WIN: CONFIGMAP_STR}, + {VIRTIO_WIN: ROLE_STR}, + {VIRTIO_WIN: ROLEBINDING_STR}, + {KUBEVIRT_CONSOLE_PLUGIN: DEPLOYMENT_STR}, + {NGINX_CONF: CONFIGMAP_STR}, + {KUBEVIRT_PLUGIN: CONSOLE_PLUGIN_STR}, + {WINDOWS_BOOTSOURCE_PIPELINE: CONSOLEQUICKSTART_STR}, + {KUBEVIRT_USER_SETTINGS: CONFIGMAP_STR}, + {KUBEVIRT_UI_FEATURES: CONFIGMAP_STR}, + {KUBEVIRT_UI_CONFIG_READER: ROLE_STR}, + {KUBEVIRT_UI_CONFIG_READER_ROLE_BINDING: ROLEBINDING_STR}, + {HCO_BEARER_AUTH: SECRET_STR}, + {KUBEVIRT_CONSOLE_PLUGIN_NP: NETWORKPOLICY_STR}, + {KUBEVIRT_APISERVER_PROXY_NP: NETWORKPOLICY_STR}, + {MIGCONTROLLER_KUBEVIRT_HYPERCONVERGED: "MigController"}, +] + +CNV_PODS_NO_HPP_CSI_HPP_POOL = [ + AAQ_OPERATOR, + BRIDGE_MARKER, + CDI_APISERVER, + CDI_DEPLOYMENT, + CDI_OPERATOR, + CDI_UPLOADPROXY, + CLUSTER_NETWORK_ADDONS_OPERATOR, + HCO_OPERATOR, + HCO_WEBHOOK, + HOSTPATH_PROVISIONER_OPERATOR, + HYPERCONVERGED_CLUSTER_CLI_DOWNLOAD, + KUBE_CNI_LINUX_BRIDGE_PLUGIN, + KUBEMACPOOL_CERT_MANAGER, + KUBEMACPOOL_MAC_CONTROLLER_MANAGER, + KUBEVIRT_CONSOLE_PLUGIN, + KUBEVIRT_MIGRATION_OPERATOR, + KUBEVIRT_MIGRATION_CONTROLLER, + SSP_OPERATOR, + VIRT_API, + VIRT_CONTROLLER, + VIRT_HANDLER, + VIRT_OPERATOR, + VIRT_TEMPLATE_VALIDATOR, + VIRT_EXPORTPROXY, + KUBEVIRT_APISERVER_PROXY, + KUBEVIRT_IPAM_CONTROLLER_MANAGER, + VIRT_PLATFORM_AUTOPILOT, + VIRT_SYNCHRONIZATION_CONTROLLER, +] +ALL_CNV_PODS = [*CNV_PODS_NO_HPP_CSI_HPP_POOL, HOSTPATH_PROVISIONER_CSI, HPP_POOL] +ALL_CNV_DEPLOYMENTS = [ + AAQ_OPERATOR, + CDI_APISERVER, + CDI_DEPLOYMENT, + CDI_OPERATOR, + CDI_UPLOADPROXY, + CLUSTER_NETWORK_ADDONS_OPERATOR, + HCO_OPERATOR, + HCO_WEBHOOK, + HOSTPATH_PROVISIONER_OPERATOR, + HYPERCONVERGED_CLUSTER_CLI_DOWNLOAD, + KUBEMACPOOL_CERT_MANAGER, + KUBEMACPOOL_MAC_CONTROLLER_MANAGER, + KUBEVIRT_CONSOLE_PLUGIN, + SSP_OPERATOR, + VIRT_API, + VIRT_CONTROLLER, + VIRT_OPERATOR, + VIRT_TEMPLATE_VALIDATOR, + VIRT_EXPORTPROXY, + KUBEVIRT_APISERVER_PROXY, + KUBEVIRT_IPAM_CONTROLLER_MANAGER, + HPP_POOL, + KUBEVIRT_MIGRATION_OPERATOR, + KUBEVIRT_MIGRATION_CONTROLLER, + VIRT_PLATFORM_AUTOPILOT, + VIRT_SYNCHRONIZATION_CONTROLLER, +] +ALL_CNV_DAEMONSETS = [ + BRIDGE_MARKER, + HOSTPATH_PROVISIONER_CSI, + KUBE_CNI_LINUX_BRIDGE_PLUGIN, + VIRT_HANDLER, +] + +CNV_OPERATORS = [ + AAQ_OPERATOR, + CDI_OPERATOR, + CLUSTER_NETWORK_ADDONS_OPERATOR, + HOSTPATH_PROVISIONER_OPERATOR, + HYPERCONVERGED_CLUSTER_OPERATOR, + KUBEVIRT_MIGRATION_OPERATOR, + KUBEVIRT_OPERATOR, + SSP_OPERATOR, + HYPERCONVERGED_CLUSTER_CLI_DOWNLOAD, + VIRT_PLATFORM_AUTOPILOT, +] + +CNV_PROMETHEUS_RULES = [ + f"{PROMETHEUS_RULES_STR}-{CLUSTER_NETWORK_ADDONS_OPERATOR}", + KUBEVIRT_HYPERCONVERGED_PROMETHEUS_RULE, + "prometheus-cdi-rules", + "prometheus-hpp-rules", + "prometheus-k8s-rules-cnv", + "prometheus-kubevirt-rules", + f"kubevirt-cnv-{PROMETHEUS_RULES_STR}", + KUBEMACPOOL_PROMETHEUS_RULE, +] + +VM_CONSOLE_PROXY_CLUSTER_RESOURCES = [ + APIService, + ClusterRole, + ClusterRoleBinding, +] + +VM_CONSOLE_PROXY_NAMESPACE_RESOURCES = [ + ServiceAccount, + ConfigMap, + Service, + Deployment, + RoleBinding, +] diff --git a/utilities/constants/cpu_models.py b/utilities/constants/cpu_models.py new file mode 100644 index 0000000000..b4f3053d2b --- /dev/null +++ b/utilities/constants/cpu_models.py @@ -0,0 +1,44 @@ +"""CPU model exclusion lists. + +Lists of CPU model names that are unsupported or cause known failures in VM guests. +Used in tests to skip or filter out problematic CPU models. +""" + +EXCLUDED_CPU_MODELS_S390X = [ + # Below are deprecated & usable models, but violate RHEL 9 ALS (min z14) causing guest to crash (disable-wait) + # Ref: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/automatically_installing_rhel/preparing-a-rhel-installation-on-64-bit-ibm-z_rhel-installer#planning-for-installation-on-ibm-z_preparing-a-rhel-installation-on-64-bit-ibm-z + "z114", + "z114-base", + "z13", + "z13-base", + "z13.2", + "z13.2-base", + "z13s", + "z13s-base", + "z196", + "z196-base", + "z196.2", + "z196.2-base", + "zBC12", + "zBC12-base", + "zEC12", + "zEC12-base", + "zEC12.2", + "zEC12.2-base", + # Below are usable (non-deprecated) models, but base models doesn't work on RHEL guests + # unless required features are appended (ex: 'gen15b-base,vx=on,..'), + "z14ZR1-base", + "z14.2-base", + "z14-base", + "gen15a-base", + "gen15b-base", + "gen16a-base", + "gen16b-base", + "gen17a-base", + "gen17b-base", +] +# Opteron - Windows image can't boot +# Penryn - does not support WSL2 +EXCLUDED_CPU_MODELS = [*EXCLUDED_CPU_MODELS_S390X, "Opteron", "Penryn"] +# Latest windows can't boot with old cpu models +EXCLUDED_OLD_CPU_MODELS = [*EXCLUDED_CPU_MODELS, "Westmere", "SandyBridge", "Nehalem", "IvyBridge", "Skylake"] diff --git a/utilities/constants/hco.py b/utilities/constants/hco.py new file mode 100644 index 0000000000..bd19321680 --- /dev/null +++ b/utilities/constants/hco.py @@ -0,0 +1,119 @@ +"""HyperConverged Operator (HCO) configuration constants. + +Covers expected status conditions, upgrade stream identifiers, TLS security profile keys, +feature gate key names, and the full CNV CRD list. + +Not here: +- HCO-managed component deployment/pod name strings → ``components.py`` +""" + +from ocp_resources.aaq import AAQ +from ocp_resources.cdi import CDI +from ocp_resources.data_import_cron import DataImportCron +from ocp_resources.hyperconverged import HyperConverged +from ocp_resources.kubevirt import KubeVirt +from ocp_resources.network_addons_config import NetworkAddonsConfig +from ocp_resources.resource import Resource +from ocp_resources.ssp import SSP + +DEFAULT_HCO_CONDITIONS = { + Resource.Condition.AVAILABLE: Resource.Condition.Status.TRUE, + Resource.Condition.PROGRESSING: Resource.Condition.Status.FALSE, + Resource.Condition.RECONCILE_COMPLETE: Resource.Condition.Status.TRUE, + Resource.Condition.DEGRADED: Resource.Condition.Status.FALSE, + Resource.Condition.UPGRADEABLE: Resource.Condition.Status.TRUE, +} +DEFAULT_KUBEVIRT_CONDITIONS = { + Resource.Condition.AVAILABLE: Resource.Condition.Status.TRUE, + Resource.Condition.PROGRESSING: Resource.Condition.Status.FALSE, + Resource.Condition.CREATED: Resource.Condition.Status.TRUE, + Resource.Condition.DEGRADED: Resource.Condition.Status.FALSE, +} +DEFAULT_RESOURCE_CONDITIONS = { + Resource.Condition.AVAILABLE: Resource.Condition.Status.TRUE, + Resource.Condition.PROGRESSING: Resource.Condition.Status.FALSE, + Resource.Condition.DEGRADED: Resource.Condition.Status.FALSE, +} +EXPECTED_STATUS_CONDITIONS = { + HyperConverged: DEFAULT_HCO_CONDITIONS, + KubeVirt: DEFAULT_KUBEVIRT_CONDITIONS, + CDI: DEFAULT_RESOURCE_CONDITIONS, + SSP: DEFAULT_RESOURCE_CONDITIONS, + NetworkAddonsConfig: DEFAULT_RESOURCE_CONDITIONS, + AAQ: DEFAULT_RESOURCE_CONDITIONS, +} + + +class UpgradeStreams: + X_STREAM = "x-stream" + Y_STREAM = "y-stream" + Z_STREAM = "z-stream" + + +TLS_OLD_POLICY = "old" +TLS_CUSTOM_POLICY = "custom" +TLS_SECURITY_PROFILE = "tlsSecurityProfile" +HOTFIX_STR = "hotfix" +PRODUCTION_CATALOG_SOURCE = "redhat-operators" +ENABLE_COMMON_BOOT_IMAGE_IMPORT = "enableCommonBootImageImport" +RESOURCE_REQUIREMENTS_KEY_HCO_CR = "resourceRequirements" +FEATURE_GATES = "featureGates" +HCO_SUBSCRIPTION = "hco-operatorhub" +IMAGE_CRON_STR = "image-cron" +HCO_DEFAULT_CPU_MODEL_KEY = "defaultCPUModel" + +DATA_SOURCE_NAME = "DATA_SOURCE_NAME" +DATA_SOURCE_NAMESPACE = "DATA_SOURCE_NAMESPACE" +SSP_CR_COMMON_TEMPLATES_LIST_KEY_NAME = "dataImportCronTemplates" +COMMON_TEMPLATES_KEY_NAME = "commonTemplates" + +DATA_IMPORT_CRON_ENABLE = ( + f"metadata->annotations->{DataImportCron.ApiGroup.DATA_IMPORT_CRON_TEMPLATE_KUBEVIRT_IO}/enable" +) + +VM_CRD = f"virtualmachines.{Resource.ApiGroup.KUBEVIRT_IO}" +VM_CLONE_CRD = f"virtualmachineclones.clone.{Resource.ApiGroup.KUBEVIRT_IO}" +VM_EXPORT_CRD = f"virtualmachineexports.export.{Resource.ApiGroup.KUBEVIRT_IO}" +ALL_CNV_CRDS = [ + f"aaqs.{Resource.ApiGroup.AAQ_KUBEVIRT_IO}", + f"cdiconfigs.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", + f"cdis.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", + f"dataimportcrons.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", + f"datasources.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", + f"datavolumes.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", + f"hostpathprovisioners.{Resource.ApiGroup.HOSTPATHPROVISIONER_KUBEVIRT_IO}", + f"hyperconvergeds.{Resource.ApiGroup.HCO_KUBEVIRT_IO}", + f"kubevirts.{Resource.ApiGroup.KUBEVIRT_IO}", + f"migcontrollers.{Resource.ApiGroup.MIGRATIONS_KUBEVIRT_IO}", + f"migrationpolicies.{Resource.ApiGroup.MIGRATIONS_KUBEVIRT_IO}", + f"networkaddonsconfigs.{Resource.ApiGroup.NETWORKADDONSOPERATOR_NETWORK_KUBEVIRT_IO}", + f"objecttransfers.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", + f"ssps.{Resource.ApiGroup.SSP_KUBEVIRT_IO}", + f"storageprofiles.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", + f"virtualmachinebackups.backup.{Resource.ApiGroup.KUBEVIRT_IO}", + f"virtualmachinebackuptrackers.backup.{Resource.ApiGroup.KUBEVIRT_IO}", + f"virtualmachineclusterinstancetypes.{Resource.ApiGroup.INSTANCETYPE_KUBEVIRT_IO}", + f"virtualmachineinstancetypes.{Resource.ApiGroup.INSTANCETYPE_KUBEVIRT_IO}", + f"virtualmachineinstancemigrations.{Resource.ApiGroup.KUBEVIRT_IO}", + f"virtualmachineinstancepresets.{Resource.ApiGroup.KUBEVIRT_IO}", + f"virtualmachineinstancereplicasets.{Resource.ApiGroup.KUBEVIRT_IO}", + f"virtualmachineinstances.{Resource.ApiGroup.KUBEVIRT_IO}", + f"virtualmachinepools.{Resource.ApiGroup.POOL_KUBEVIRT_IO}", + f"virtualmachinerestores.{Resource.ApiGroup.SNAPSHOT_KUBEVIRT_IO}", + VM_CRD, + f"virtualmachinesnapshotcontents.{Resource.ApiGroup.SNAPSHOT_KUBEVIRT_IO}", + f"virtualmachinesnapshots.{Resource.ApiGroup.SNAPSHOT_KUBEVIRT_IO}", + VM_CLONE_CRD, + f"virtualmachineclusterpreferences.{Resource.ApiGroup.INSTANCETYPE_KUBEVIRT_IO}", + VM_EXPORT_CRD, + f"virtualmachinepreferences.{Resource.ApiGroup.INSTANCETYPE_KUBEVIRT_IO}", + f"volumeuploadsources.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", + f"volumeimportsources.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", + f"volumeclonesources.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", + f"openstackvolumepopulators.forklift.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", + f"ovirtvolumepopulators.forklift.{Resource.ApiGroup.CDI_KUBEVIRT_IO}", + f"multinamespacevirtualmachinestoragemigrationplans.{Resource.ApiGroup.MIGRATIONS_KUBEVIRT_IO}", + f"multinamespacevirtualmachinestoragemigrations.{Resource.ApiGroup.MIGRATIONS_KUBEVIRT_IO}", + f"virtualmachinestoragemigrationplans.{Resource.ApiGroup.MIGRATIONS_KUBEVIRT_IO}", + f"virtualmachinestoragemigrations.{Resource.ApiGroup.MIGRATIONS_KUBEVIRT_IO}", +] diff --git a/utilities/constants/images.py b/utilities/constants/images.py new file mode 100644 index 0000000000..8abf967d42 --- /dev/null +++ b/utilities/constants/images.py @@ -0,0 +1,189 @@ +"""OS image constants and architecture-specific image selection. + +Covers OS flavor strings (OS_FLAVOR_*), image disk demo names, Alpine version, +the default Fedora registry URL, and the ArchImages class that maps each CPU +architecture to its image set. The Images alias (resolved at package import time) +points to the current cluster's architecture variant. +""" + +from libs.infra.images import ( + BASE_IMAGES_DIR, + Alpine, + Cdi, + Centos, + Cirros, + Fedora, + Rhel, + Windows, +) + +# OS constants +OS_FLAVOR_CIRROS = "cirros" +OS_FLAVOR_ALPINE = "alpine" +OS_FLAVOR_WINDOWS = "win" +OS_FLAVOR_RHEL = "rhel" +OS_FLAVOR_FEDORA = "fedora" +OS_FLAVOR_WIN_CONTAINER_DISK = "win-container-disk" + +FEDORA_DISK_DEMO = "fedora-cloud-registry-disk-demo" +CIRROS_DISK_DEMO = "cirros-registry-disk-demo" +CIRROS_QCOW2_IMG = "cirros-qcow2.img" + +ALPINE_VERSION = "3.20.1" + +DEFAULT_FEDORA_REGISTRY_URL = "docker://quay.io/containerdisks/fedora:latest" + + +class ArchImages: + class AMD64: + BASE_CIRROS_NAME = "cirros-0.4.0-x86_64-disk" + BASE_ALPINE_NAME = "alpine-x86_64-disk" + BASE_VERSIONED_ALPINE_NAME = f"alpine-{ALPINE_VERSION}-x86_64-disk" + Cirros = Cirros( + RAW_IMG=f"{BASE_CIRROS_NAME}.raw", + RAW_IMG_GZ=f"{BASE_CIRROS_NAME}.raw.gz", + RAW_IMG_XZ=f"{BASE_CIRROS_NAME}.raw.xz", + QCOW2_IMG=f"{BASE_CIRROS_NAME}.qcow2", + QCOW2_IMG_GZ=f"{BASE_CIRROS_NAME}.qcow2.gz", + QCOW2_IMG_XZ=f"{BASE_CIRROS_NAME}.qcow2.xz", + DISK_DEMO=CIRROS_DISK_DEMO, + ) + + Alpine = Alpine( + QCOW2_IMG=f"{BASE_ALPINE_NAME}.qcow2", + QCOW2_IMG_VERSIONED=f"{BASE_VERSIONED_ALPINE_NAME}.qcow2", + RAW_IMG_XZ=f"{BASE_VERSIONED_ALPINE_NAME}.raw.xz", + ) + + Rhel = Rhel( + RHEL8_0_IMG="rhel-8.qcow2", + RHEL8_9_IMG="rhel-89.qcow2", + RHEL8_10_IMG="rhel-810.qcow2", + RHEL9_3_IMG="rhel-93.qcow2", + RHEL9_4_IMG="rhel-94.qcow2", + RHEL9_6_IMG="rhel-96.qcow2", + ) + Rhel.LATEST_RELEASE_STR = Rhel.RHEL9_6_IMG + + Windows = Windows( + WIN10_IMG="win_10_uefi.qcow2", + WIN10_WSL2_IMG="win_10_wsl2_uefi.qcow2", + WIN10_ISO_IMG="Win10_22H2_English_x64.iso", + WIN2k19_IMG="win_2k19_uefi.qcow2", + WIN2k25_IMG="win_2k25_uefi.qcow2", + WIN2k19_HA_IMG="win_2019_virtio.qcow2", + WIN11_IMG="win_11.qcow2", + WIN11_WSL2_IMG="win_11_wsl2.qcow2", + WIN11_ISO_IMG="en-us_windows_11_business_editions_version_24h2_x64_dvd_59a1851e.iso", + WIN19_RAW="win_2k19_uefi.raw", + WIN2022_IMG="win_2022.qcow2", + WIN2022_ISO_IMG="Windows_Server_2022_x64FRE_en-us.iso", + WIN2025_ISO_IMG="windows_server_2025_x64_dvd_eval.iso", + ) + Windows.LATEST_RELEASE_STR = Windows.WIN2022_IMG + + Fedora = Fedora( + FEDORA42_IMG="Fedora-Cloud-Base-Generic-42-1.1.x86_64.qcow2", + FEDORA43_IMG="Fedora-Cloud-Base-Generic-43-1.6.x86_64.qcow2", + FEDORA_CONTAINER_IMAGE="quay.io/openshift-cnv/qe-cnv-tests-fedora:41", + DISK_DEMO=FEDORA_DISK_DEMO, + ) + Fedora.LATEST_RELEASE_STR = Fedora.FEDORA43_IMG + + Centos = Centos(CENTOS_STREAM_9_IMG="CentOS-Stream-GenericCloud-9-20220107.0.x86_64.qcow2") + Centos.LATEST_RELEASE_STR = Centos.CENTOS_STREAM_9_IMG + + Cdi = Cdi(QCOW2_IMG=CIRROS_QCOW2_IMG) + + class ARM64: + BASE_CIRROS_NAME = "cirros-0.5.2-aarch64-disk" + BASE_ALPINE_NAME = "alpine-aarch64-disk" + BASE_VERSIONED_ALPINE_NAME = f"alpine-{ALPINE_VERSION}-aarch64-disk" + Cirros = Cirros( + RAW_IMG=f"{BASE_CIRROS_NAME}.raw", + RAW_IMG_GZ=f"{BASE_CIRROS_NAME}.raw.gz", + RAW_IMG_XZ=f"{BASE_CIRROS_NAME}.raw.xz", + QCOW2_IMG=f"{BASE_CIRROS_NAME}.qcow2", + QCOW2_IMG_GZ=f"{BASE_CIRROS_NAME}.qcow2.gz", + QCOW2_IMG_XZ=f"{BASE_CIRROS_NAME}.qcow2.xz", + DISK_DEMO=CIRROS_DISK_DEMO, + ) + + Alpine = Alpine( + QCOW2_IMG=f"{BASE_ALPINE_NAME}.qcow2", + QCOW2_IMG_VERSIONED=f"{BASE_VERSIONED_ALPINE_NAME}.qcow2", + RAW_IMG_XZ=f"{BASE_VERSIONED_ALPINE_NAME}.raw.xz", + ) + + Rhel = Rhel( + RHEL9_5_IMG="rhel-95-aarch64.qcow2", + RHEL9_6_IMG="rhel-96-aarch64.qcow2", + ) + Rhel.LATEST_RELEASE_STR = Rhel.RHEL9_6_IMG + + Windows = Windows() + Fedora = Fedora( + FEDORA42_IMG="Fedora-Cloud-Base-Generic-42-1.1.aarch64.qcow2", + FEDORA_CONTAINER_IMAGE="quay.io/openshift-cnv/qe-cnv-tests-fedora:41-arm64", + DISK_DEMO=FEDORA_DISK_DEMO, + ) + Fedora.LATEST_RELEASE_STR = Fedora.FEDORA42_IMG + + Centos = Centos(CENTOS_STREAM_9_IMG="CentOS-Stream-GenericCloud-9-latest.aarch64.qcow2") + Centos.LATEST_RELEASE_STR = Centos.CENTOS_STREAM_9_IMG + + Cdi = Cdi(QCOW2_IMG=CIRROS_QCOW2_IMG) + + class S390X: + BASE_ALPINE_NAME = "alpine-s390x-disk" + BASE_VERSIONED_ALPINE_NAME = f"alpine-{ALPINE_VERSION}-s390x-disk" + Cirros = Cirros( + # TODO: S390X does not support Cirros; this is a workaround until tests are moved to Fedora + RAW_IMG="Fedora-Cloud-Base-Generic-41-1.4.s390x.raw", + RAW_IMG_GZ="Fedora-Cloud-Base-Generic-41-1.4.s390x.raw.gz", + RAW_IMG_XZ="Fedora-Cloud-Base-Generic-41-1.4.s390x.raw.xz", + QCOW2_IMG="Fedora-Cloud-Base-Generic-41-1.4.s390x.qcow2", + QCOW2_IMG_GZ="Fedora-Cloud-Base-Generic-41-1.4.s390x.qcow2.gz", + QCOW2_IMG_XZ="Fedora-Cloud-Base-Generic-41-1.4.s390x.qcow2.xz", + DISK_DEMO=FEDORA_DISK_DEMO, + DIR=f"{BASE_IMAGES_DIR}/fedora-images", + DEFAULT_DV_SIZE="10Gi", + DEFAULT_MEMORY_SIZE="1Gi", + OS_FLAVOR=OS_FLAVOR_FEDORA, + ) + + Alpine = Alpine( + QCOW2_IMG=f"{BASE_ALPINE_NAME}.qcow2", + QCOW2_IMG_VERSIONED=f"{BASE_VERSIONED_ALPINE_NAME}.qcow2", + RAW_IMG_XZ=f"{BASE_VERSIONED_ALPINE_NAME}.raw.xz", + ) + + Rhel = Rhel( + RHEL8_0_IMG="rhel-82-s390x.qcow2", + RHEL8_9_IMG="rhel-89-s390x.qcow2", + RHEL8_10_IMG="rhel-810-s390x.qcow2", + RHEL9_3_IMG="rhel-93-s390x.qcow2", + RHEL9_4_IMG="rhel-94-s390x.qcow2", + RHEL9_5_IMG="rhel-95-s390x.qcow2", + RHEL9_6_IMG="rhel-96-s390x.qcow2", + ) + Rhel.LATEST_RELEASE_STR = Rhel.RHEL9_6_IMG + + Fedora = Fedora( + FEDORA42_IMG="Fedora-Cloud-Base-Generic-42-1.1.s390x.qcow2", + FEDORA_CONTAINER_IMAGE="quay.io/openshift-cnv/qe-cnv-tests-fedora:41-s390x", + DISK_DEMO=FEDORA_DISK_DEMO, + ) + Fedora.LATEST_RELEASE_STR = Fedora.FEDORA42_IMG + + Centos = Centos(CENTOS_STREAM_9_IMG="CentOS-Stream-GenericCloud-9-latest.s390x.qcow2") + Centos.LATEST_RELEASE_STR = Centos.CENTOS_STREAM_9_IMG + + Cdi = Cdi( + # TODO: S390X does not support Cirros; this is a workaround until tests are moved to Fedora + QCOW2_IMG="Fedora-qcow2.img", + DIR=f"{BASE_IMAGES_DIR}/fedora-images", + DEFAULT_DV_SIZE="10Gi", + ) + + Windows = Windows() diff --git a/utilities/constants/instance_types.py b/utilities/constants/instance_types.py new file mode 100644 index 0000000000..53ac10d965 --- /dev/null +++ b/utilities/constants/instance_types.py @@ -0,0 +1,35 @@ +"""Instance type and preference identifiers. + +Name strings for KubeVirt instance types (U1_*), VM preferences (RHEL*_PREFERENCE, +CENTOS_*_PREFERENCE, WINDOWS_*_PREFERENCE), and the label structures built from them. + +Not for OS test matrix parameter keys — those go in `os_matrix.py`. +""" + +INSTANCE_TYPE_STR = "instance_type" +U1_MEDIUM_STR = "u1.medium" +U1_SMALL = "u1.small" +U1_LARGE = "u1.large" + +PREFERENCE_STR = "preference" +FLAVOR_STR = "flavor" +OS_STR = "os" +LINUX_STR = "linux" +WORKLOAD_STR = "workload" + +CENTOS_STREAM9_PREFERENCE = "centos.stream9" +CENTOS_STREAM10_PREFERENCE = "centos.stream10" +RHEL8_PREFERENCE = "rhel.8" +RHEL9_PREFERENCE = "rhel.9" +RHEL10_PREFERENCE = "rhel.10" + +WINDOWS_11_PREFERENCE = "windows.11" +WINDOWS_2K22_PREFERENCE = "windows.2k22" + +RHEL_WITH_INSTANCETYPE_AND_PREFERENCE = "rhel-with-instancetype-and-preference" + +EXPECTED_CLUSTER_INSTANCE_TYPE_LABELS = { + INSTANCE_TYPE_STR: U1_MEDIUM_STR, + PREFERENCE_STR: RHEL9_PREFERENCE, + OS_STR: LINUX_STR, +} diff --git a/utilities/constants/monitoring.py b/utilities/constants/monitoring.py new file mode 100644 index 0000000000..d2445d1623 --- /dev/null +++ b/utilities/constants/monitoring.py @@ -0,0 +1,72 @@ +"""Monitoring and alerting constants. + +Alert severity strings (CRITICAL_STR, WARNING_STR, INFO_STR), operator health +status metric names, the full list of KubeVirt VMI metrics, and the Prometheus +stack service name used in monitoring tests. + +Not here: +- Prometheus operator deployment/pod names → ``components.py`` +""" + +CRITICAL_STR = "critical" +INFO_STR = "info" +WARNING_STR = "warning" +NONE_STRING = "none" + +KUBEVIRT_HYPERCONVERGED_OPERATOR_HEALTH_STATUS = "kubevirt_hyperconverged_operator_health_status" +KUBEVIRT_HCO_HYPERCONVERGED_CR_EXISTS = "kubevirt_hco_hyperconverged_cr_exists" + +OPERATOR_HEALTH_IMPACT_VALUES = { + CRITICAL_STR: "2", + WARNING_STR: "1", + NONE_STRING: "0", +} + +FIRING_STATE = "firing" +PENDING_STR = "pending" + +KUBELET_READY_CONDITION = {"KubeletReady": "True"} + +KUBEVIRT_VMI_NETWORK_RECEIVE_PACKETS_DROPPED_TOTAL = "kubevirt_vmi_network_receive_packets_dropped_total" +KUBEVIRT_VMI_NETWORK_TRANSMIT_PACKETS_DROPPED_TOTAL = "kubevirt_vmi_network_transmit_packets_dropped_total" +KUBEVIRT_VMI_MEMORY_DOMAIN_BYTES = "kubevirt_vmi_memory_domain_bytes" +KUBEVIRT_VMI_MEMORY_UNUSED_BYTES = "kubevirt_vmi_memory_unused_bytes" +KUBEVIRT_VMI_MEMORY_USABLE_BYTES = "kubevirt_vmi_memory_usable_bytes" +KUBEVIRT_VMI_MEMORY_ACTUAL_BALLOON_BYTES = "kubevirt_vmi_memory_actual_balloon_bytes" +KUBEVIRT_VMI_MEMORY_PGMAJFAULT_TOTAL = "kubevirt_vmi_memory_pgmajfault_total" +KUBEVIRT_VMI_STORAGE_FLUSH_REQUESTS_TOTAL = "kubevirt_vmi_storage_flush_requests_total" +KUBEVIRT_VMI_STORAGE_FLUSH_TIMES_SECONDS_TOTAL = "kubevirt_vmi_storage_flush_times_seconds_total" +KUBEVIRT_VMI_NETWORK_RECEIVE_BYTES_TOTAL = "kubevirt_vmi_network_receive_bytes_total" +KUBEVIRT_VMI_NETWORK_TRANSMIT_BYTES_TOTAL = "kubevirt_vmi_network_transmit_bytes_total" +KUBEVIRT_VMI_STORAGE_IOPS_WRITE_TOTAL = "kubevirt_vmi_storage_iops_write_total" +KUBEVIRT_VMI_STORAGE_IOPS_READ_TOTAL = "kubevirt_vmi_storage_iops_read_total" +KUBEVIRT_VMI_STORAGE_WRITE_TRAFFIC_BYTES_TOTAL = "kubevirt_vmi_storage_write_traffic_bytes_total" +KUBEVIRT_VMI_STORAGE_READ_TRAFFIC_BYTES_TOTAL = "kubevirt_vmi_storage_read_traffic_bytes_total" +KUBEVIRT_VMI_VCPU_WAIT_SECONDS_TOTAL = "kubevirt_vmi_vcpu_wait_seconds_total" +KUBEVIRT_VMI_MEMORY_SWAP_IN_TRAFFIC_BYTES = "kubevirt_vmi_memory_swap_in_traffic_bytes" +KUBEVIRT_VMI_MEMORY_SWAP_OUT_TRAFFIC_BYTES = "kubevirt_vmi_memory_swap_out_traffic_bytes" +KUBEVIRT_VMI_MEMORY_PGMINFAULT_TOTAL = "kubevirt_vmi_memory_pgminfault_total" + +PROMETHEUS_K8S = "prometheus-k8s" + +MONITORING_METRICS = [ + KUBEVIRT_VMI_MEMORY_ACTUAL_BALLOON_BYTES, + KUBEVIRT_VMI_MEMORY_DOMAIN_BYTES, + KUBEVIRT_VMI_MEMORY_PGMAJFAULT_TOTAL, + KUBEVIRT_VMI_MEMORY_PGMINFAULT_TOTAL, + KUBEVIRT_VMI_MEMORY_SWAP_IN_TRAFFIC_BYTES, + KUBEVIRT_VMI_MEMORY_SWAP_OUT_TRAFFIC_BYTES, + KUBEVIRT_VMI_MEMORY_UNUSED_BYTES, + KUBEVIRT_VMI_MEMORY_USABLE_BYTES, + KUBEVIRT_VMI_NETWORK_RECEIVE_BYTES_TOTAL, + KUBEVIRT_VMI_NETWORK_RECEIVE_PACKETS_DROPPED_TOTAL, + KUBEVIRT_VMI_NETWORK_TRANSMIT_BYTES_TOTAL, + KUBEVIRT_VMI_NETWORK_TRANSMIT_PACKETS_DROPPED_TOTAL, + KUBEVIRT_VMI_STORAGE_FLUSH_REQUESTS_TOTAL, + KUBEVIRT_VMI_STORAGE_FLUSH_TIMES_SECONDS_TOTAL, + KUBEVIRT_VMI_STORAGE_IOPS_READ_TOTAL, + KUBEVIRT_VMI_STORAGE_IOPS_WRITE_TOTAL, + KUBEVIRT_VMI_STORAGE_READ_TRAFFIC_BYTES_TOTAL, + KUBEVIRT_VMI_STORAGE_WRITE_TRAFFIC_BYTES_TOTAL, + KUBEVIRT_VMI_VCPU_WAIT_SECONDS_TOTAL, +] diff --git a/utilities/constants/namespaces.py b/utilities/constants/namespaces.py new file mode 100644 index 0000000000..d4a0dfc584 --- /dev/null +++ b/utilities/constants/namespaces.py @@ -0,0 +1,28 @@ +"""Namespace name constants. + +NamespacesNames groups well-known OpenShift and CNV namespace strings. +""" + + +class NamespacesNames: + OPENSHIFT = "openshift" + OPENSHIFT_CNV = "openshift-cnv" + OPENSHIFT_MONITORING = "openshift-monitoring" + OPENSHIFT_CONFIG = "openshift-config" + OPENSHIFT_APISERVER = "openshift-apiserver" + OPENSHIFT_MARKETPLACE = "openshift-marketplace" + OPENSHIFT_STORAGE = "openshift-storage" + OPENSHIFT_CLUSTER_STORAGE_OPERATOR = "openshift-cluster-storage-operator" + OPENSHIFT_SRIOV_NETWORK_OPERATOR = "openshift-sriov-network-operator" + CHAOS = "chaos" + DEFAULT = "default" + NVIDIA_GPU_OPERATOR = "nvidia-gpu-operator" + MACHINE_API_NAMESPACE = "openshift-machine-api" + OPENSHIFT_VIRTUALIZATION_OS_IMAGES = "openshift-virtualization-os-images" + WASP = "wasp" + OPENSHIFT_KUBE_DESCHEDULER_OPERATOR = "openshift-kube-descheduler-operator" + OPENSHIFT_NMSTATE = "openshift-nmstate" + OPENSHIFT_FRR_K8S = "openshift-frr-k8s" + OPENSHIFT_MTV = "openshift-mtv" + CNV_TESTS_UTILITIES = "cnv-tests-utilities" + ADP_NAMESPACE = "openshift-adp" diff --git a/utilities/constants/networking.py b/utilities/constants/networking.py new file mode 100644 index 0000000000..6016d3bbef --- /dev/null +++ b/utilities/constants/networking.py @@ -0,0 +1,50 @@ +"""Networking configuration constants. + +Covers SR-IOV identifiers, bridge types, IP family policy strings, port numbers, +KubeMacPool configuration names, bonding modes, DNS/label strings, and network +test pod specs (security context, container spec). + +For CNV network component deployment/pod name strings use ``components.py``. +""" + +SRIOV = "sriov" +IP_FAMILY_POLICY_PREFER_DUAL_STACK = "PreferDualStack" +IPV4_STR = "ipv4" +IPV6_STR = "ipv6" +LINUX_BRIDGE = "linux-bridge" +OVS_BRIDGE = "ovs-bridge" +FLAT_OVERLAY_STR = "layer2" +KUBEMACPOOL_MAC_RANGE_CONFIG = "kubemacpool-mac-range-config" +SSH_PORT_22 = 22 +PORT_80 = 80 +ACTIVE_BACKUP = "active-backup" +KMP_VM_ASSIGNMENT_LABEL = "mutatevirtualmachines.kubemacpool.io" +KMP_ENABLED_LABEL = "allocate" +PUBLIC_DNS_SERVER_IP = "8.8.8.8" + +# Network test pod specs +SECURITY_CONTEXT = "securityContext" +NET_UTIL_CONTAINER_IMAGE = "quay.io/openshift-cnv/qe-net-utils:latest" + +POD_SECURITY_CONTEXT_SPEC = { + "seccompProfile": {"type": "RuntimeDefault"}, + "runAsNonRoot": True, + "runAsUser": 1000, + "fsGroup": 107, +} + +POD_CONTAINER_SPEC = { + "name": "runner", + "image": NET_UTIL_CONTAINER_IMAGE, + "command": [ + "/bin/bash", + "-c", + "echo ok > /tmp/healthy && sleep INF", + ], + SECURITY_CONTEXT: { + "allowPrivilegeEscalation": False, + "seccompProfile": {"type": "RuntimeDefault"}, + "runAsNonRoot": True, + "capabilities": {"drop": ["ALL"]}, + }, +} diff --git a/utilities/constants/oadp.py b/utilities/constants/oadp.py new file mode 100644 index 0000000000..495f52ac05 --- /dev/null +++ b/utilities/constants/oadp.py @@ -0,0 +1,9 @@ +"""OADP (OpenShift API for Data Protection) test constants. + +File names written inside VMs before backup, expected text strings, and +backup storage location names used across OADP test scenarios. +""" + +FILE_NAME_FOR_BACKUP = "file_before_backup.txt" +TEXT_TO_TEST = "text" +BACKUP_STORAGE_LOCATION = "dpa-1" diff --git a/utilities/constants/os_matrix.py b/utilities/constants/os_matrix.py new file mode 100644 index 0000000000..0a5564d6cd --- /dev/null +++ b/utilities/constants/os_matrix.py @@ -0,0 +1,16 @@ +"""OS test matrix parameter keys. + +String keys used in common-templates test parametrization dictionaries. +Each constant names a field in a test parameter dict (image path, DV size, OS version, etc.). + +Not for instance type or preference name strings — those go in `instance_types.py`. +""" + +IMAGE_NAME_STR = "image_name" +IMAGE_PATH_STR = "image_path" +CONTAINER_DISK_IMAGE_PATH_STR = "container_disk_image_path" +DV_SIZE_STR = "dv_size" +TEMPLATE_LABELS_STR = "template_labels" +LATEST_RELEASE_STR = "latest_released" +OS_VERSION_STR = "os_version" +DATA_SOURCE_STR = "data_source" diff --git a/utilities/constants/pytest.py b/utilities/constants/pytest.py new file mode 100644 index 0000000000..7fcce31db1 --- /dev/null +++ b/utilities/constants/pytest.py @@ -0,0 +1,12 @@ +"""Pytest test-runner constants. + +Exit codes, quarantine marker strings, fixture scope strings, and +unprivileged test credential names used across pytest fixtures and utilities. +""" + +DEPENDENCY_SCOPE_SESSION = "session" +QUARANTINED = "quarantined" +SETUP_ERROR = "setup_error" +SANITY_TESTS_FAILURE = 99 +UNPRIVILEGED_USER = "unprivileged-user" +UNPRIVILEGED_PASSWORD = "unprivileged-password" diff --git a/utilities/constants/storage.py b/utilities/constants/storage.py new file mode 100644 index 0000000000..7fe3d09e46 --- /dev/null +++ b/utilities/constants/storage.py @@ -0,0 +1,89 @@ +"""Storage constants. + +Covers StorageClassNames, CDI (Containerized Data Importer) label keys and +configuration maps, HostPath Provisioner (HPP) capability flags, hotplug +constants, image content source policy file names, DataVolume source type +strings, and DataImportCron schedule/garbage-collect values. +""" + +from typing import Any + +from ocp_resources.datavolume import DataVolume +from ocp_resources.resource import Resource + + +class StorageClassNames: + CEPH_RBD = "ocs-storagecluster-ceph-rbd" + CEPH_RBD_VIRTUALIZATION = f"{CEPH_RBD}-virtualization" + CEPHFS = "ocs-storagecluster-cephfs" + HOSTPATH = "hostpath-provisioner" + NFS = "nfs" + TOPOLVM = "lvms-vg1" + PORTWORX_CSI_DB_SHARED = "px-csi-db-shared" + RH_INTERNAL_NFS = "rh-internal-nfs" + TRIDENT_CSI_FSX = "trident-csi-fsx" + TRIDENT_CSI_NFS = "trident-csi-nfs" + IO2_CSI = "io2-csi" + GPFS = "ibm-spectrum-scale-sample" + OCI = "oci-bv" + OCI_UHP = "oci-bv-uhp" + GCP = "sp-balanced-storage" + GCNV = "gcnv-flex" + + +CDI_LABEL = Resource.ApiGroup.CDI_KUBEVIRT_IO +CDI_UPLOAD = "cdi-upload" +PVC = "pvc" +CDI_UPLOAD_TMP_PVC = f"cdi-upload-tmp-{PVC}" +SOURCE_POD = "source-pod" + +CDI_SECRETS = [ + "cdi-apiserver-server-cert", + "cdi-apiserver-signer", + "cdi-uploadproxy-server-cert", + "cdi-uploadproxy-signer", + "cdi-uploadserver-client-cert", + "cdi-uploadserver-client-signer", + "cdi-uploadserver-signer", +] + +CDI_CONFIGMAPS = [ + "cdi-apiserver-signer-bundle", + "cdi-config", + "cdi-controller-leader-election-helper", + "cdi-insecure-registries", + "cdi-uploadproxy-signer-bundle", + "cdi-uploadserver-client-signer-bundle", + "cdi-uploadserver-signer-bundle", +] + +BREW_REGISTRY_SOURCE = "brew.registry.redhat.io" + +ACCESS_MODE = "access_mode" +VOLUME_MODE = "volume_mode" + +BIND_IMMEDIATE_ANNOTATION = {f"{Resource.ApiGroup.CDI_KUBEVIRT_IO}/storage.bind.immediate.requested": "true"} + +HPP_CAPABILITIES: dict[str, Any] = { + VOLUME_MODE: DataVolume.VolumeMode.FILE, + ACCESS_MODE: DataVolume.AccessMode.RWO, + "snapshot": False, + "online_resize": False, + "wffc": True, +} + +# hotplug +HOTPLUG_DISK_SERIAL = "1234567890" +HOTPLUG_DISK_VIRTIO_BUS = "virtio" +HOTPLUG_DISK_SCSI_BUS = "scsi" + +# DataVolume source type strings +REGISTRY_STR = "registry" + +# DataImportCron / golden image constants +WILDCARD_CRON_EXPRESSION = "* * * * *" +OUTDATED = "Outdated" + +# Storage capacity metric field names +CAPACITY = "capacity" +USED = "used" diff --git a/utilities/constants/tekton.py b/utilities/constants/tekton.py new file mode 100644 index 0000000000..19017fc89f --- /dev/null +++ b/utilities/constants/tekton.py @@ -0,0 +1,26 @@ +"""Tekton pipeline and task name constants. + +Covers available Tekton pipeline refs and task names for Windows VM automation. + +Not here: +- WINDOWS_BOOTSOURCE_PIPELINE (a K8s resource name used in ALL_HCO_RELATED_OBJECTS) → ``components.py`` +""" + +WINDOWS_EFI_INSTALLER_STR = "windows-efi-installer" +WINDOWS_CUSTOMIZE_STR = "windows-customize" + +TEKTON_AVAILABLE_PIPELINEREF = [ + WINDOWS_EFI_INSTALLER_STR, + WINDOWS_CUSTOMIZE_STR, +] + +TEKTON_AVAILABLE_TASKS = [ + "modify-data-object", + "create-vm-from-manifest", + "wait-for-vmi-status", + "cleanup-vm", + "disk-virt-sysprep", + "disk-virt-customize", + "modify-windows-iso-file", + "disk-uploader", +] diff --git a/utilities/constants/timeouts.py b/utilities/constants/timeouts.py new file mode 100644 index 0000000000..6b9bab7254 --- /dev/null +++ b/utilities/constants/timeouts.py @@ -0,0 +1,35 @@ +"""Timeout constants (in seconds). + +All TIMEOUT_* values are plain integers. TCP_TIMEOUT_30SEC is a float for +use with socket-level timeout parameters. +""" + +TIMEOUT_1SEC = 1 +TIMEOUT_5SEC = 5 +TIMEOUT_10SEC = 10 +TIMEOUT_15SEC = 15 +TIMEOUT_20SEC = 20 +TIMEOUT_30SEC = 30 +TIMEOUT_90SEC = 90 +TIMEOUT_1MIN = 60 +TIMEOUT_2MIN = 2 * 60 +TIMEOUT_3MIN = 3 * 60 +TIMEOUT_4MIN = 4 * 60 +TIMEOUT_5MIN = 5 * 60 +TIMEOUT_6MIN = 6 * 60 +TIMEOUT_8MIN = 8 * 60 +TIMEOUT_9MIN = 9 * 60 +TIMEOUT_10MIN = 10 * 60 +TIMEOUT_11MIN = 11 * 60 +TIMEOUT_12MIN = 12 * 60 +TIMEOUT_15MIN = 15 * 60 +TIMEOUT_20MIN = 20 * 60 +TIMEOUT_25MIN = 25 * 60 +TIMEOUT_30MIN = 30 * 60 +TIMEOUT_40MIN = 40 * 60 +TIMEOUT_50MIN = 50 * 60 +TIMEOUT_60MIN = 60 * 60 +TIMEOUT_75MIN = 75 * 60 +TIMEOUT_180MIN = 180 * 60 + +TCP_TIMEOUT_30SEC = 30.0 diff --git a/utilities/constants/virt.py b/utilities/constants/virt.py new file mode 100644 index 0000000000..12e3cb886f --- /dev/null +++ b/utilities/constants/virt.py @@ -0,0 +1,90 @@ +"""VM runtime configuration constants. + +Covers virtctl command strings, migration policy values, disk and cloud-init key names, +eviction strategy values, Windows version tags, CPU/memory topology sizing, and +VM-level hardware constants (NUMA, kernel driver, SSH key path). + +Not here: +- CNV component deployment/pod name strings → ``components.py`` +- Instance type or preference name strings → ``instance_types.py`` +- Architecture identifiers (AMD_64, ARM_64, …) → ``architecture.py`` +- CPU model exclusion lists → ``cpu_models.py`` +- Node labels (CPU model prefix, TSC frequency, worker labels) → ``cluster.py`` +- Tekton pipeline/task name strings → ``tekton.py`` +""" + +VIRTCTL = "virtctl" + +LIVE_MIGRATE = "LiveMigrate" +MIGRATION_POLICY_VM_LABEL = {"vm-label": "test-vm"} +ROOTDISK = "rootdisk" +DV_DISK = "dv-disk" + +EVICTIONSTRATEGY = "evictionStrategy" +ES_LIVE_MIGRATE_IF_POSSIBLE = "LiveMigrateIfPossible" +ES_NONE = "None" + +CLOUD_INIT_DISK_NAME = "cloudinitdisk" +CLOUD_INIT_NO_CLOUD = "cloudInitNoCloud" + +VIRTIO = "virtio" +DISK_SERIAL = "D23YZ9W6WA5DJ489" + +REGEDIT_PROC_NAME = "regedit.exe" +OS_PROC_NAME = {"linux": "ping", "windows": REGEDIT_PROC_NAME} + +STRESS_CPU_MEM_IO_COMMAND = ( + "nohup stress-ng --vm {workers} --vm-bytes {memory} --vm-method all " + "--verify -t {timeout} -v --hdd 1 --io 1 --vm-keep &> /dev/null &" +) + +# Windows versions +WIN_10 = "win10" +WIN_11 = "win11" +WIN_2K25 = "win2k25" +WIN_2K22 = "win2k22" +WIN_2K19 = "win2k19" + +HYPERV_FEATURES_LABELS_DOM_XML = [ + "relaxed", + "vapic", + "spinlocks", + "vpindex", + "synic", + "stimer", # synictimer in VM yaml + "frequencies", + "ipi", + "reset", + "runtime", + "tlbflush", + "reenlightenment", +] +HYPERV_FEATURES_LABELS_VM_YAML = HYPERV_FEATURES_LABELS_DOM_XML.copy() +HYPERV_FEATURES_LABELS_VM_YAML[HYPERV_FEATURES_LABELS_VM_YAML.index("stimer")] = "synictimer" + + +# CPU topology +ONE_CPU_CORE = 1 +ONE_CPU_THREAD = 1 +TWO_CPU_CORES = 2 +TWO_CPU_SOCKETS = 2 +TWO_CPU_THREADS = 2 +FOUR_CPU_SOCKETS = 4 +SIX_CPU_SOCKETS = 6 +EIGHT_CPU_SOCKETS = 8 +TEN_CPU_SOCKETS = 10 + +# Memory sizes +FOUR_GI_MEMORY = "4Gi" +FIVE_GI_MEMORY = "5Gi" +SIX_GI_MEMORY = "6Gi" +TEN_GI_MEMORY = "10Gi" +TWELVE_GI_MEMORY = "12Gi" + +NODE_HUGE_PAGES_1GI_KEY = "hugepages-1Gi" + +# For GPU Passthrough (compute) and SR-IOV VF binding (networking). +KERNEL_DRIVER = "vfio-pci" + +CNV_VM_SSH_KEY_PATH = "CNV-SSH-KEY-PATH" +CNV_SUPPLEMENTAL_TEMPLATES_URL = "https://raw.githubusercontent.com/RHsyseng/cnv-supplemental-templates/main/templates" diff --git a/utilities/oadp.py b/utilities/oadp.py index 44fbf7f310..155bc243c1 100644 --- a/utilities/oadp.py +++ b/utilities/oadp.py @@ -22,12 +22,12 @@ ) from utilities.console import Console from utilities.constants import ( - ADP_NAMESPACE, LS_COMMAND, OS_FLAVOR_RHEL, TIMEOUT_5MIN, TIMEOUT_20SEC, Images, + NamespacesNames, ) from utilities.infra import ( get_pod_by_name_prefix, @@ -56,7 +56,7 @@ def delete_velero_resource(resource: Backup | Restore, client: DynamicClient) -> command = ["./velero", "delete", resource.kind.lower(), resource.name, "--confirm"] try: - velero_pod = get_pod_by_name_prefix(client=client, pod_prefix="velero", namespace=ADP_NAMESPACE) + velero_pod = get_pod_by_name_prefix(client=client, pod_prefix="velero", namespace=NamespacesNames.ADP_NAMESPACE) LOGGER.info(f"Deleting Velero resource: kind={resource.kind} name={resource.name} command={' '.join(command)}") @@ -96,7 +96,7 @@ def __init__( self, name: str, client: DynamicClient, - namespace: str = ADP_NAMESPACE, + namespace: str = NamespacesNames.ADP_NAMESPACE, included_namespaces: list[str] | None = None, teardown: bool = False, yaml_file: str | None = None, @@ -203,7 +203,7 @@ class VeleroRestore(Restore): def __init__( self, name: str, - namespace: str = ADP_NAMESPACE, + namespace: str = NamespacesNames.ADP_NAMESPACE, teardown: bool = True, wait_complete: bool = True, timeout: int = TIMEOUT_5MIN, diff --git a/utilities/unittests/test_constants.py b/utilities/unittests/test_constants.py index 2c90db234a..804d8775e9 100644 --- a/utilities/unittests/test_constants.py +++ b/utilities/unittests/test_constants.py @@ -32,7 +32,6 @@ def test_timeout_constants(self): assert constants.TIMEOUT_10MIN == 10 * 60 assert constants.TIMEOUT_30MIN == 30 * 60 assert constants.TIMEOUT_60MIN == 60 * 60 - assert constants.TIMEOUT_12HRS == 12 * 60 * 60 def test_tcp_timeout_constants(self): """Test TCP timeout constants are defined""" @@ -86,20 +85,19 @@ def test_images_class_exists(self): def test_data_import_cron_constants(self): """Test data import cron related constants are defined""" - # Check for any data import cron related constants - assert hasattr(constants, "DataImportCron") + assert constants.DATA_IMPORT_CRON_ENABLE.startswith("metadata->annotations->") def test_os_related_constants(self): """Test OS related constants are defined""" - # Check for OS-specific images or constants - assert hasattr(constants, "Fedora") - assert hasattr(constants, "Rhel") - assert hasattr(constants, "Windows") - assert hasattr(constants, "Centos") + assert constants.OS_FLAVOR_RHEL == "rhel" + assert constants.OS_FLAVOR_FEDORA == "fedora" + assert constants.OS_FLAVOR_WINDOWS == "win" + assert constants.OS_FLAVOR_CIRROS == "cirros" def test_windows_os_constants(self): """Test Windows OS constants are defined""" - assert hasattr(constants, "Windows") + assert constants.WIN_10 == "win10" + assert constants.WIN_11 == "win11" def test_workload_constants(self): """Test workload constants are defined""" @@ -112,3 +110,16 @@ def test_network_constants(self): assert constants.OVS_BRIDGE == "ovs-bridge" assert constants.BRIDGE_MARKER == "bridge-marker" assert constants.CLUSTER_NETWORK_ADDONS_OPERATOR == "cluster-network-addons-operator" + + def test_instance_type_constants(self): + """Test instance type and preference constants are defined""" + assert constants.U1_SMALL == "u1.small" + assert constants.U1_LARGE == "u1.large" + assert constants.RHEL9_PREFERENCE == "rhel.9" + assert constants.CENTOS_STREAM9_PREFERENCE == "centos.stream9" + + def test_os_matrix_constants(self): + """Test OS matrix parameter key constants are defined""" + assert constants.IMAGE_NAME_STR == "image_name" + assert constants.OS_VERSION_STR == "os_version" + assert constants.DV_SIZE_STR == "dv_size" diff --git a/utilities/unittests/test_oadp.py b/utilities/unittests/test_oadp.py index 746fb035ee..dbf5e16bf6 100644 --- a/utilities/unittests/test_oadp.py +++ b/utilities/unittests/test_oadp.py @@ -26,9 +26,9 @@ from ocp_resources.exceptions import ResourceTeardownError from utilities.constants import ( - ADP_NAMESPACE, LS_COMMAND, TIMEOUT_20SEC, + NamespacesNames, ) from utilities.oadp import ( VeleroBackup, @@ -67,7 +67,7 @@ def test_delete_velero_resource_success(self, mock_logger, mock_get_pod, kind, n mock_get_pod.assert_called_once_with( client=mock_client, pod_prefix="velero", - namespace=ADP_NAMESPACE, + namespace=NamespacesNames.ADP_NAMESPACE, ) mock_pod.execute.assert_called_once_with(command=["./velero", "delete", kind.lower(), name, "--confirm"])