From b0c03c5599d9f53ca33af07c811fda9f74fb093f Mon Sep 17 00:00:00 2001 From: Katakam-Rakesh Date: Thu, 14 May 2026 12:58:24 +0530 Subject: [PATCH 1/2] Add Code for fresh k8s installation 1.35.1 Signed-off-by: Katakam-Rakesh --- .../input_validation/common_utils/config.py | 2 +- .../validation_flows/common_validation.py | 12 +- .../validation_flows/local_repo_validation.py | 21 +++- .../module_utils/local_repo/software_utils.py | 14 ++- .../modules/image_package_collector.py | 26 +++- common/library/modules/prepare_tasklist.py | 9 +- examples/rhel_software_config.json | 2 +- ..._rhel_10.0_multi_arch_software_config.json | 2 +- ...late_rhel_10.0_x86-64_software_config.json | 2 +- .../x86_64/rhel/10.0/service_k8s_v1.34.1.json | 108 ++++++++++++++++ .../x86_64/rhel/10.0/service_k8s_v1.35.1.json | 118 ++++++++++++++++++ input/local_repo_config.yml | 15 ++- input/software_config.json | 2 +- .../tasks/validate_software_config_json.yml | 2 +- local_repo/roles/validation/vars/main.yml | 13 +- .../tasks/check_k8s_support.yml | 4 +- .../prepare_oim_validation/vars/main.yml | 13 +- .../tasks/create_k8s_config_nfs.yml | 2 +- provision/roles/k8s_config/vars/main.yml | 3 +- .../telemetry/tasks/load_service_images.yml | 2 +- provision/roles/telemetry/tasks/main.yml | 2 +- .../telemetry/tasks/read_software_config.yml | 4 +- .../common/telemetry_pod_cleanup.yaml.j2 | 2 +- provision/roles/telemetry/vars/main.yml | 9 +- 24 files changed, 344 insertions(+), 45 deletions(-) create mode 100644 input/config/x86_64/rhel/10.0/service_k8s_v1.34.1.json create mode 100644 input/config/x86_64/rhel/10.0/service_k8s_v1.35.1.json diff --git a/common/library/module_utils/input_validation/common_utils/config.py b/common/library/module_utils/input_validation/common_utils/config.py index 095849d88f..d1bb4b5b61 100644 --- a/common/library/module_utils/input_validation/common_utils/config.py +++ b/common/library/module_utils/input_validation/common_utils/config.py @@ -132,7 +132,7 @@ "openmpi": "5.0.8", "csi_driver_powerscale": "v2.15.0", "rocm": "6.3.1", - "service_k8s": "1.34.1" + "service_k8s": "1.35.1" } # All of the passwords fields diff --git a/common/library/module_utils/input_validation/validation_flows/common_validation.py b/common/library/module_utils/input_validation/validation_flows/common_validation.py index 6ff8df745c..363be36fd7 100644 --- a/common/library/module_utils/input_validation/validation_flows/common_validation.py +++ b/common/library/module_utils/input_validation/validation_flows/common_validation.py @@ -252,15 +252,23 @@ def validate_software_config( for software_pkg in data['softwares']: software = software_pkg['name'] arch_list = software_pkg.get('arch') + # Get software version for versioned JSON files (e.g., service_k8s_v1.35.1.json) + software_version = software_pkg.get('version') for arch in arch_list: json_path = get_json_file_path( - software, cluster_os_type, cluster_os_version, input_file_path, arch) + software, cluster_os_type, cluster_os_version, input_file_path, arch, + software_version=software_version) # Check if json_path is None or if the JSON syntax is invalid if not json_path: + # Construct expected filename for error message + if software == "service_k8s" and software_version: + expected_file = f"{software}_v{software_version}.json" + else: + expected_file = f"{software}.json" errors.append( create_error_msg( "Validation Error: ", software, - f"is present in software_config.json. JSON file not found: {software}.json" + f"is present in software_config.json. JSON file not found: {expected_file}" ) ) else: diff --git a/common/library/module_utils/input_validation/validation_flows/local_repo_validation.py b/common/library/module_utils/input_validation/validation_flows/local_repo_validation.py index 8254faca1e..e81ecd8be7 100644 --- a/common/library/module_utils/input_validation/validation_flows/local_repo_validation.py +++ b/common/library/module_utils/input_validation/validation_flows/local_repo_validation.py @@ -21,7 +21,7 @@ from ansible.module_utils.input_validation.common_utils import validation_utils from ansible.module_utils.input_validation.common_utils import config from ansible.module_utils.input_validation.common_utils import en_us_validation_msg -from ansible.module_utils.local_repo.software_utils import load_yaml, load_json +from ansible.module_utils.local_repo.software_utils import load_yaml, load_json, get_json_file_path file_names = config.files create_error_msg = validation_utils.create_error_msg @@ -239,13 +239,22 @@ def validate_local_repo_config(input_file_path, data, for software in software_config_json["softwares"]: sw = software["name"] arch_list = software.get("arch") + # Get software version for versioned JSON files (e.g., service_k8s_v1.35.1.json) + software_version = software.get("version") for arch in arch_list: - json_path = create_file_path( - input_file_path, - f"config/{arch}{os_ver_path}" + sw +".json") - if not os.path.exists(json_path): + # Use get_json_file_path for proper versioned JSON file resolution + json_path = get_json_file_path( + sw, cluster_os_type, cluster_os_version, + software_config_file_path, arch, + software_version=software_version) + if not json_path or not os.path.exists(json_path): + # Construct expected filename for error message + if sw == "service_k8s" and software_version: + expected_file = f"{sw}_v{software_version}.json" + else: + expected_file = f"{sw}.json" errors.append( - create_error_msg(sw + '/' + arch, f"{sw} JSON file not found for architecture {arch}.", json_path)) + create_error_msg(sw + '/' + arch, f"{sw} JSON file not found for architecture {arch}.", expected_file)) else: curr_json = load_json(json_path) pkg_list = curr_json[sw]['cluster'] diff --git a/common/library/module_utils/local_repo/software_utils.py b/common/library/module_utils/local_repo/software_utils.py index bc5da2876a..d3306d58b8 100644 --- a/common/library/module_utils/local_repo/software_utils.py +++ b/common/library/module_utils/local_repo/software_utils.py @@ -118,7 +118,7 @@ def load_yaml(file_path): return yaml.safe_load(file) def get_json_file_path(software_name, cluster_os_type, - cluster_os_version, user_json_path, arch): + cluster_os_version, user_json_path, arch, software_version=None): """ Generate the file path for a JSON file based on the provided software name, cluster OS type, cluster OS version, and user JSON path. @@ -129,13 +129,23 @@ def get_json_file_path(software_name, cluster_os_type, cluster_os_version (str): The version of the cluster operating system. user_json_path (str): The path to the user JSON file. arch: Architecture for a particular software + software_version (str, optional): Version of the software for versioned JSON files. + Used for software like service_k8s that have versioned JSON files + (e.g., service_k8s_v1.35.1.json). Returns: str or None: The file path for the JSON file if it exists, otherwise None. """ base_path = os.path.dirname(os.path.abspath(user_json_path)) + + # Handle versioned JSON files (e.g., service_k8s_v1.35.1.json) + if software_name == "service_k8s" and software_version: + json_filename = f"{software_name}_v{software_version}.json" + else: + json_filename = f"{software_name}.json" + json_path = os.path.join(base_path, - f'{SOFTWARE_CONFIG_SUBDIR}/{arch}/{cluster_os_type}/{cluster_os_version}/{software_name}.json' + f'{SOFTWARE_CONFIG_SUBDIR}/{arch}/{cluster_os_type}/{cluster_os_version}/{json_filename}' ) return json_path diff --git a/common/library/modules/image_package_collector.py b/common/library/modules/image_package_collector.py index 77ff67b50d..90a315d750 100644 --- a/common/library/modules/image_package_collector.py +++ b/common/library/modules/image_package_collector.py @@ -151,7 +151,12 @@ def process_functional_group(fg_name, arch, os_version, input_project_dir, packages = [] for json_file in json_files: + # Extract software name from json file + # Handle versioned files like service_k8s_v1.35.1.json -> service_k8s sw_name = json_file.replace(".json", "") + # Remove version suffix for versioned files (e.g., service_k8s_v1.35.1 -> service_k8s) + if sw_name.startswith("service_k8s_v"): + sw_name = "service_k8s" if sw_name not in allowed_softwares: continue @@ -170,7 +175,8 @@ def process_functional_group(fg_name, arch, os_version, input_project_dir, sw_data, fg_name=fg_name, slurm_defined=True ) ) - elif json_file == "service_k8s.json": + elif json_file.startswith("service_k8s_v"): + # Handle versioned service_k8s_v.json files packages.extend( collect_packages_from_json( sw_data, fg_name=fg_name, service_k8s_defined=True @@ -194,6 +200,7 @@ def run_module(): software_config_file=dict(type="str", required=True), input_project_dir=dict(type="str", required=True), additional_json_path=dict(type="str", required=False, default=""), + service_k8s_version=dict(type="str", required=False, default=""), ) result = dict( @@ -212,6 +219,7 @@ def run_module(): software_config_file = module.params["software_config_file"] input_project_dir = module.params["input_project_dir"] additional_json_path = module.params["additional_json_path"] + service_k8s_version = module.params["service_k8s_version"] software_config = load_json_file(software_config_file, module) if not software_config: @@ -221,6 +229,13 @@ def run_module(): if not os_version: module.fail_json(msg="cluster_os_version not found in software_config.json") + # Extract service_k8s version from software_config if not provided + if not service_k8s_version: + for sw in software_config.get("softwares", []): + if sw.get("name") == "service_k8s" and sw.get("version"): + service_k8s_version = sw["version"] + break + allowed_softwares = { sw["name"] for sw in software_config.get("softwares", []) } @@ -229,14 +244,17 @@ def run_module(): additional_enabled = is_additional_packages_enabled(software_config) allowed_additional_subgroups = get_allowed_additional_subgroups(software_config) if additional_enabled else [] + # Versioned JSON file for service_k8s: service_k8s_v.json + service_k8s_json = f"service_k8s_v{service_k8s_version}.json" if service_k8s_version else "service_k8s.json" + # pylint: disable=line-too-long # Functional group → json files mapping software_map = { "os_x86_64": ["default_packages.json", "ldms.json"], "os_aarch64": ["default_packages.json", "ldms.json"], - "service_kube_node_x86_64": ["service_k8s.json"], - "service_kube_control_plane_first_x86_64": ["service_k8s.json"], - "service_kube_control_plane_x86_64": ["service_k8s.json"], + "service_kube_node_x86_64": [service_k8s_json], + "service_kube_control_plane_first_x86_64": [service_k8s_json], + "service_kube_control_plane_x86_64": [service_k8s_json], "slurm_control_node_x86_64": ["slurm_custom.json", "openldap.json", "ldms.json"], "slurm_node_x86_64": ["slurm_custom.json", "openldap.json", "ldms.json"], "login_node_x86_64": ["slurm_custom.json", "openldap.json", "ldms.json"], diff --git a/common/library/modules/prepare_tasklist.py b/common/library/modules/prepare_tasklist.py index 9714c7aaf0..688774cdd7 100644 --- a/common/library/modules/prepare_tasklist.py +++ b/common/library/modules/prepare_tasklist.py @@ -123,8 +123,15 @@ def main(): logger.info("Preparing package lists...") for software in software_list[arch]: logger.info(f"Processing software: {software}") + # Get software version for versioned JSON files (e.g., service_k8s_v1.35.1.json) + software_version = None + for sw in user_data.get("softwares", []): + if sw.get("name") == software and sw.get("version"): + software_version = sw["version"] + break json_path[arch] = get_json_file_path(software, cluster_os_type, - cluster_os_version, user_json_file, arch) + cluster_os_version, user_json_file, arch, + software_version=software_version) status_csv_path[arch] = get_csv_file_path(software, log_dir, arch) logger.info(f"json_path: {json_path}") logger.info(f"status_csv_path: {status_csv_path}") diff --git a/examples/rhel_software_config.json b/examples/rhel_software_config.json index 394ef53120..b9f60b3f3d 100644 --- a/examples/rhel_software_config.json +++ b/examples/rhel_software_config.json @@ -6,7 +6,7 @@ {"name": "default_packages", "arch": ["x86_64","aarch64"]}, {"name": "admin_debug_packages", "arch": ["x86_64","aarch64"]}, {"name": "openldap", "arch": ["x86_64","aarch64"]}, - {"name": "service_k8s","version": "1.34.1", "arch": ["x86_64"]}, + {"name": "service_k8s","version": "1.35.1", "arch": ["x86_64"]}, {"name": "slurm_custom", "arch": ["x86_64","aarch64"]}, {"name": "ucx", "version": "1.19.0", "arch": ["x86_64","aarch64"]}, {"name": "openmpi", "version": "5.0.8", "arch": ["x86_64","aarch64"]}, diff --git a/examples/software_config_template/template_rhel_10.0_multi_arch_software_config.json b/examples/software_config_template/template_rhel_10.0_multi_arch_software_config.json index 83eaa12a8c..69bc80c84f 100644 --- a/examples/software_config_template/template_rhel_10.0_multi_arch_software_config.json +++ b/examples/software_config_template/template_rhel_10.0_multi_arch_software_config.json @@ -7,7 +7,7 @@ {"name": "admin_debug_packages", "arch": ["x86_64","aarch64"]}, {"name": "openldap", "arch": ["x86_64","aarch64"]}, {"name": "slurm_custom", "arch": ["x86_64","aarch64"]}, - {"name": "service_k8s", "version": "1.34.1", "arch": ["x86_64"]}, + {"name": "service_k8s", "version": "1.35.1", "arch": ["x86_64"]}, {"name": "ucx", "version": "1.19.0", "arch": ["x86_64","aarch64"]}, {"name": "openmpi", "version": "5.0.8", "arch": ["x86_64","aarch64"]}, {"name": "csi_driver_powerscale", "version":"v2.15.0", "arch": ["x86_64"]}, diff --git a/examples/software_config_template/template_rhel_10.0_x86-64_software_config.json b/examples/software_config_template/template_rhel_10.0_x86-64_software_config.json index 907958e590..650e912b78 100644 --- a/examples/software_config_template/template_rhel_10.0_x86-64_software_config.json +++ b/examples/software_config_template/template_rhel_10.0_x86-64_software_config.json @@ -7,7 +7,7 @@ {"name": "admin_debug_packages", "arch": ["x86_64"]}, {"name": "openldap", "arch": ["x86_64"]}, {"name": "slurm_custom", "arch": ["x86_64"]}, - {"name": "service_k8s", "version": "1.34.1", "arch": ["x86_64"]}, + {"name": "service_k8s", "version": "1.35.1", "arch": ["x86_64"]}, {"name": "ucx", "version": "1.19.0", "arch": ["x86_64"]}, {"name": "openmpi", "version": "5.0.8", "arch": ["x86_64"]}, {"name": "csi_driver_powerscale", "version":"v2.15.0", "arch": ["x86_64"]}, diff --git a/input/config/x86_64/rhel/10.0/service_k8s_v1.34.1.json b/input/config/x86_64/rhel/10.0/service_k8s_v1.34.1.json new file mode 100644 index 0000000000..6deed2309b --- /dev/null +++ b/input/config/x86_64/rhel/10.0/service_k8s_v1.34.1.json @@ -0,0 +1,108 @@ +{ + "service_k8s": { + "cluster": [ + { "package": "docker.io/library/busybox", "type": "image", "tag": "1.36" }, + { "package": "firewalld", "type": "rpm", "repo_name": "baseos" }, + { "package": "python3-firewall", "type": "rpm", "repo_name": "baseos" }, + { "package": "git", "type": "rpm", "repo_name": "appstream"}, + { "package": "vim-enhanced", "type": "rpm", "repo_name": "appstream"}, + { "package": "fuse-overlayfs", "type": "rpm", "repo_name": "appstream"}, + { "package": "podman", "type": "rpm", "repo_name": "appstream"}, + { "package": "kubeadm-1.34.1", "type": "rpm", "repo_name": "kubernetes"}, + { "package": "kubelet-1.34.1", "type": "rpm", "repo_name": "kubernetes"}, + { "package": "container-selinux", "type": "rpm", "repo_name": "appstream"}, + { "package": "cri-o-1.34.1", "type": "rpm", "repo_name": "cri-o"}, + { "package": "docker.io/victoriametrics/victoria-metrics", "type": "image", "tag": "v1.128.0" }, + { "package": "docker.io/victoriametrics/vmagent", "type": "image", "tag": "v1.128.0" }, + { "package": "docker.io/victoriametrics/vmstorage", "type": "image", "tag": "v1.128.0-cluster" }, + { "package": "docker.io/victoriametrics/vminsert", "type": "image", "tag": "v1.128.0-cluster" }, + { "package": "docker.io/victoriametrics/vmselect", "type": "image", "tag": "v1.128.0-cluster" }, + { "package": "docker.io/alpine/kubectl", "tag": "1.34.1", "type": "image" }, + { "package": "docker.io/curlimages/curl", "type": "image", "tag": "8.17.0" }, + { "package": "docker.io/rmohr/activemq", "type": "image", "tag": "5.15.9" }, + { "package": "docker.io/library/mysql", "type": "image", "tag": "9.3.0" }, + { "package": "docker.io/dellhpcomniaaisolution/idrac_telemetry_receiver", "type": "image", "tag": "1.2" }, + { "package": "docker.io/dellhpcomniaaisolution/kafkapump", "type": "image", "tag": "1.2" }, + { "package": "docker.io/dellhpcomniaaisolution/victoriapump", "type": "image", "tag": "1.2" }, + { "package": "cryptography==45.0.7", "type": "pip_module" }, + { "package": "omsdk==1.2.518", "type": "pip_module" }, + { "package": "cffi==1.17.1", "type": "pip_module" }, + { "package": "quay.io/strimzi/operator", "tag": "0.48.0", "type": "image" }, + { "package": "quay.io/strimzi/kafka", "tag": "0.48.0-kafka-4.1.0", "type": "image" }, + { "package": "docker.io/dellhpcomniaaisolution/ubuntu-ldms", "tag": "1.0", "type": "image" }, + { "package": "strimzi-kafka-operator-helm-3-chart-0.48.0", "type": "tarball", "url": "https://github.com/strimzi/strimzi-kafka-operator/releases/download/0.48.0/strimzi-kafka-operator-helm-3-chart-0.48.0.tgz" }, + { "package": "quay.io/strimzi/kafka-bridge", "tag": "0.33.1", "type": "image" }, + { "package": "apptainer", "type": "rpm", "repo_name": "epel" }, + { "package": "doca-ofed", "type": "rpm_repo", "repo_name": "doca" } + ] + }, + "service_kube_control_plane": { + "cluster": [ + { "package": "ghcr.io/kube-vip/kube-vip", "tag": "v0.8.9", "type": "image" }, + { "package": "docker.io/alpine/kubectl", "tag": "1.34.1", "type": "image" }, + { "package": "registry.k8s.io/kube-apiserver", "tag": "v1.34.1", "type": "image" }, + { "package": "registry.k8s.io/kube-controller-manager", "tag": "v1.34.1", "type": "image" }, + { "package": "registry.k8s.io/kube-scheduler", "tag": "v1.34.1", "type": "image" }, + { "package": "registry.k8s.io/kube-proxy", "tag": "v1.34.1", "type": "image" }, + { "package": "registry.k8s.io/coredns/coredns", "tag": "v1.12.1", "type": "image" }, + { "package": "registry.k8s.io/pause", "tag": "3.10.1", "type": "image" }, + { "package": "registry.k8s.io/etcd", "tag": "3.6.4-0", "type": "image" }, + { "package": "docker.io/calico/cni", "tag": "v3.30.3", "type": "image" }, + { "package": "docker.io/calico/kube-controllers", "tag": "v3.30.3", "type": "image" }, + { "package": "docker.io/calico/node", "tag": "v3.30.3", "type": "image" }, + { "package": "quay.io/metallb/speaker", "tag": "v0.15.2", "type": "image" }, + { "package": "kubectl-1.34.1", "type": "rpm", "repo_name": "kubernetes"}, + { "package": "prettytable==3.14.0", "type": "pip_module" }, + { "package": "python3-3.12.9", "type": "rpm", "repo_name": "baseos" }, + { "package": "git", "type": "rpm", "repo_name": "appstream"}, + { "package": "kubernetes==33.1.0", "type": "pip_module" }, + { "package": "PyMySQL==1.1.2", "type": "pip_module" } + + ] + }, + "service_kube_control_plane_first": { + "cluster": [ + { "package": "ghcr.io/kube-vip/kube-vip", "tag": "v0.8.9", "type": "image" }, + { "package": "registry.k8s.io/kube-apiserver", "tag": "v1.34.1", "type": "image" }, + { "package": "registry.k8s.io/kube-controller-manager", "tag": "v1.34.1", "type": "image" }, + { "package": "registry.k8s.io/kube-scheduler", "tag": "v1.34.1", "type": "image" }, + { "package": "registry.k8s.io/kube-proxy", "tag": "v1.34.1", "type": "image" }, + { "package": "registry.k8s.io/coredns/coredns", "tag": "v1.12.1", "type": "image" }, + { "package": "docker.io/alpine/kubectl", "tag": "1.34.1", "type": "image" }, + { "package": "registry.k8s.io/pause", "tag": "3.10.1", "type": "image" }, + { "package": "registry.k8s.io/etcd", "tag": "3.6.4-0", "type": "image" }, + { "package": "docker.io/calico/cni", "tag": "v3.30.3", "type": "image" }, + { "package": "docker.io/calico/kube-controllers", "tag": "v3.30.3", "type": "image" }, + { "package": "docker.io/calico/node", "tag": "v3.30.3", "type": "image" }, + { "package": "quay.io/metallb/speaker", "tag": "v0.15.2", "type": "image" }, + { + "package": "calico-v3.30.3", + "type": "manifest", + "url": "https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/calico.yaml" + }, + { + "package": "metallb-native-v0.15.2", + "type": "manifest", + "url": "https://raw.githubusercontent.com/metallb/metallb/v0.15.2/config/manifests/metallb-native.yaml" + }, + { "package": "helm-v3.19.0-amd64", "type": "tarball", "url": "https://get.helm.sh/helm-v3.19.0-linux-amd64.tar.gz" }, + { "package": "nfs-subdir-external-provisioner-4.0.18", "type": "tarball", "url": "https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/releases/download/nfs-subdir-external-provisioner-4.0.18/nfs-subdir-external-provisioner-4.0.18.tgz" }, + { "package": "kubectl-1.34.1", "type": "rpm", "repo_name": "kubernetes"}, + { "package": "prettytable==3.14.0", "type": "pip_module" }, + { "package": "python3-3.12.9", "type": "rpm", "repo_name": "baseos" }, + { "package": "git", "type": "rpm", "repo_name": "appstream"}, + { "package": "kubernetes==33.1.0", "type": "pip_module" }, + { "package": "PyMySQL==1.1.2", "type": "pip_module" } + + ] + }, + + "service_kube_node": { + "cluster": [ + { "package": "registry.k8s.io/sig-storage/nfs-subdir-external-provisioner", "tag": "v4.0.2", "type": "image" }, + { "package": "quay.io/metallb/speaker", "tag": "v0.15.2", "type": "image" }, + { "package": "quay.io/metallb/controller", "tag": "v0.15.2", "type": "image" } + ] + } +} + diff --git a/input/config/x86_64/rhel/10.0/service_k8s_v1.35.1.json b/input/config/x86_64/rhel/10.0/service_k8s_v1.35.1.json new file mode 100644 index 0000000000..7195ce8168 --- /dev/null +++ b/input/config/x86_64/rhel/10.0/service_k8s_v1.35.1.json @@ -0,0 +1,118 @@ +{ + "service_k8s": { + "cluster": [ + { "package": "docker.io/library/busybox", "type": "image", "tag": "1.36" }, + { "package": "firewalld", "type": "rpm", "repo_name": "baseos" }, + { "package": "python3-firewall", "type": "rpm", "repo_name": "baseos" }, + { "package": "git", "type": "rpm", "repo_name": "appstream"}, + { "package": "vim-enhanced", "type": "rpm", "repo_name": "appstream"}, + { "package": "fuse-overlayfs", "type": "rpm", "repo_name": "appstream"}, + { "package": "podman", "type": "rpm", "repo_name": "appstream"}, + { "package": "kubeadm-1.35.1", "type": "rpm", "repo_name": "kubernetes-v1-35"}, + { "package": "kubelet-1.35.1", "type": "rpm", "repo_name": "kubernetes-v1-35"}, + { "package": "container-selinux", "type": "rpm", "repo_name": "appstream"}, + { "package": "cri-o-1.35.1", "type": "rpm", "repo_name": "cri-o-v1-35"}, + { "package": "docker.io/victoriametrics/victoria-metrics", "type": "image", "tag": "v1.128.0" }, + { "package": "docker.io/victoriametrics/vmagent", "type": "image", "tag": "v1.128.0" }, + { "package": "docker.io/victoriametrics/vmstorage", "type": "image", "tag": "v1.128.0-cluster" }, + { "package": "docker.io/victoriametrics/vminsert", "type": "image", "tag": "v1.128.0-cluster" }, + { "package": "docker.io/victoriametrics/vmselect", "type": "image", "tag": "v1.128.0-cluster" }, + { "package": "docker.io/victoriametrics/victoria-logs", "type": "image", "tag": "v1.49.0" }, + { "package": "docker.io/victoriametrics/vlagent", "type": "image", "tag": "v1.49.0" }, + { "package": "docker.io/alpine/kubectl", "tag": "1.35.1", "type": "image" }, + { "package": "docker.io/curlimages/curl", "type": "image", "tag": "8.17.0" }, + { "package": "docker.io/rmohr/activemq", "type": "image", "tag": "5.15.9" }, + { "package": "docker.io/library/mysql", "type": "image", "tag": "9.3.0" }, + { "package": "docker.io/dellhpcomniaaisolution/idrac_telemetry_receiver", "type": "image", "tag": "1.2" }, + { "package": "docker.io/dellhpcomniaaisolution/kafkapump", "type": "image", "tag": "1.2" }, + { "package": "docker.io/dellhpcomniaaisolution/victoriapump", "type": "image", "tag": "1.2" }, + { "package": "cryptography==45.0.7", "type": "pip_module" }, + { "package": "omsdk==1.2.518", "type": "pip_module" }, + { "package": "cffi==1.17.1", "type": "pip_module" }, + { "package": "quay.io/strimzi/operator", "tag": "0.48.0", "type": "image" }, + { "package": "quay.io/strimzi/kafka", "tag": "0.48.0-kafka-4.1.0", "type": "image" }, + { "package": "docker.io/dellhpcomniaaisolution/ubuntu-ldms", "tag": "1.0", "type": "image" }, + { "package": "quay.io/dell/container-storage-modules/csm-metrics-powerscale", "tag": "v1.11.0", "type": "image" }, + { "package": "ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector", "tag": "0.148.0", "type": "image" }, + { "package": "docker.io/nginxinc/nginx-unprivileged", "tag": "1.29", "type": "image" }, + { "package": "karavi-observability", "type": "git", "url": "https://github.com/dell/karavi-observability.git", "version": "v1.12.0" }, + { "package": "helm-charts", "type": "git", "url": "https://github.com/dell/helm-charts.git", "version": "container-storage-modules-1.9.2" }, + { "package": "cert-manager-v1.10.0", "type": "tarball", "url": "https://charts.jetstack.io/charts/cert-manager-v1.10.0.tgz" }, + { "package": "strimzi-kafka-operator-helm-3-chart-0.48.0", "type": "tarball", "url": "https://github.com/strimzi/strimzi-kafka-operator/releases/download/0.48.0/strimzi-kafka-operator-helm-3-chart-0.48.0.tgz" }, + { "package": "quay.io/strimzi/kafka-bridge", "tag": "0.33.1", "type": "image" }, + { "package": "docker.io/victoriametrics/operator", "tag": "v0.68.3", "type": "image" }, + { "package": "docker.io/victoriametrics/operator", "tag": "config-reloader-v0.68.3", "type": "image" }, + { "package": "victoria-metrics-operator-0.59.3", "type": "tarball", "url": "https://github.com/VictoriaMetrics/helm-charts/releases/download/victoria-metrics-operator-0.59.3/victoria-metrics-operator-0.59.3.tgz" }, + { "package": "apptainer", "type": "rpm", "repo_name": "epel" }, + { "package": "doca-ofed", "type": "rpm_repo", "repo_name": "doca" } + ] + }, + "service_kube_control_plane": { + "cluster": [ + { "package": "ghcr.io/kube-vip/kube-vip", "tag": "v0.8.9", "type": "image" }, + { "package": "docker.io/alpine/kubectl", "tag": "1.35.1", "type": "image" }, + { "package": "registry.k8s.io/kube-apiserver", "tag": "v1.35.1", "type": "image" }, + { "package": "registry.k8s.io/kube-controller-manager", "tag": "v1.35.1", "type": "image" }, + { "package": "registry.k8s.io/kube-scheduler", "tag": "v1.35.1", "type": "image" }, + { "package": "registry.k8s.io/kube-proxy", "tag": "v1.35.1", "type": "image" }, + { "package": "registry.k8s.io/coredns/coredns", "tag": "v1.13.1", "type": "image" }, + { "package": "registry.k8s.io/pause", "tag": "3.10.1", "type": "image" }, + { "package": "registry.k8s.io/etcd", "tag": "3.6.6-0", "type": "image" }, + { "package": "docker.io/calico/cni", "tag": "v3.31.4", "type": "image" }, + { "package": "docker.io/calico/kube-controllers", "tag": "v3.31.4", "type": "image" }, + { "package": "docker.io/calico/node", "tag": "v3.31.4", "type": "image" }, + { "package": "quay.io/metallb/speaker", "tag": "v0.15.3", "type": "image" }, + { "package": "kubectl-1.35.1", "type": "rpm", "repo_name": "kubernetes-v1-35"}, + { "package": "prettytable==3.14.0", "type": "pip_module" }, + { "package": "python3-3.12.9", "type": "rpm", "repo_name": "baseos" }, + { "package": "git", "type": "rpm", "repo_name": "appstream"}, + { "package": "kubernetes==35.0.0", "type": "pip_module" }, + { "package": "PyMySQL==1.1.2", "type": "pip_module" } + + ] + }, + "service_kube_control_plane_first": { + "cluster": [ + { "package": "ghcr.io/kube-vip/kube-vip", "tag": "v0.8.9", "type": "image" }, + { "package": "registry.k8s.io/kube-apiserver", "tag": "v1.35.1", "type": "image" }, + { "package": "registry.k8s.io/kube-controller-manager", "tag": "v1.35.1", "type": "image" }, + { "package": "registry.k8s.io/kube-scheduler", "tag": "v1.35.1", "type": "image" }, + { "package": "registry.k8s.io/kube-proxy", "tag": "v1.35.1", "type": "image" }, + { "package": "registry.k8s.io/coredns/coredns", "tag": "v1.13.1", "type": "image" }, + { "package": "docker.io/alpine/kubectl", "tag": "1.35.1", "type": "image" }, + { "package": "registry.k8s.io/pause", "tag": "3.10.1", "type": "image" }, + { "package": "registry.k8s.io/etcd", "tag": "3.6.6-0", "type": "image" }, + { "package": "docker.io/calico/cni", "tag": "v3.31.4", "type": "image" }, + { "package": "docker.io/calico/kube-controllers", "tag": "v3.31.4", "type": "image" }, + { "package": "docker.io/calico/node", "tag": "v3.31.4", "type": "image" }, + { "package": "quay.io/metallb/speaker", "tag": "v0.15.3", "type": "image" }, + { + "package": "calico-v3.31.4", + "type": "manifest", + "url": "https://raw.githubusercontent.com/projectcalico/calico/v3.31.4/manifests/calico.yaml" + }, + { + "package": "metallb-native-v0.15.3", + "type": "manifest", + "url": "https://raw.githubusercontent.com/metallb/metallb/v0.15.3/config/manifests/metallb-native.yaml" + }, + { "package": "helm-v3.20.1-amd64", "type": "tarball", "url": "https://get.helm.sh/helm-v3.20.1-linux-amd64.tar.gz" }, + { "package": "nfs-subdir-external-provisioner-4.0.18", "type": "tarball", "url": "https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/releases/download/nfs-subdir-external-provisioner-4.0.18/nfs-subdir-external-provisioner-4.0.18.tgz" }, + { "package": "kubectl-1.35.1", "type": "rpm", "repo_name": "kubernetes-v1-35"}, + { "package": "prettytable==3.14.0", "type": "pip_module" }, + { "package": "python3-3.12.9", "type": "rpm", "repo_name": "baseos" }, + { "package": "git", "type": "rpm", "repo_name": "appstream"}, + { "package": "kubernetes==35.0.0", "type": "pip_module" }, + { "package": "PyMySQL==1.1.2", "type": "pip_module" } + + ] + }, + + "service_kube_node": { + "cluster": [ + { "package": "registry.k8s.io/sig-storage/nfs-subdir-external-provisioner", "tag": "v4.0.2", "type": "image" }, + { "package": "quay.io/metallb/speaker", "tag": "v0.15.3", "type": "image" }, + { "package": "quay.io/metallb/controller", "tag": "v0.15.3", "type": "image" } + ] + } +} \ No newline at end of file diff --git a/input/local_repo_config.yml b/input/local_repo_config.yml index 7eca8c9346..73aaa09b51 100644 --- a/input/local_repo_config.yml +++ b/input/local_repo_config.yml @@ -50,7 +50,7 @@ # Notes: # - Do not use Jinja variables in this configuration. # - Omit SSL fields entirely if SSL is not in use. -# - Its a mandatory field in case of slurm_custom with name as 'slurm_custom' +# - Version-specific naming (e.g., 'kubernetes-v1-35', 'cri-o-v1-35') is used only for service_k8s # # 3. user_repo_url_aarch64 #--------------------------- @@ -180,11 +180,20 @@ rhel_os_url_aarch64: rhel_subscription_repo_config_x86_64: rhel_subscription_repo_config_aarch64: # Making incorrect changes to this variable can cause omnia failure. Please edit cautiously. +# ============================================================================ +# VERSIONED REPOSITORY NAMING CONVENTION (Omnia 2.2+) +# ============================================================================ +# Starting from Omnia 2.2, repositories use versioned naming: +# - kubernetes-v- (e.g., kubernetes-v1-35) +# - cri-o-v- (e.g., cri-o-v1-35) +# Version-specific naming is used only for service_k8s components (kubernetes, cri-o) +# Other components (doca, cuda, slurm_custom) use non-versioned naming +# ============================================================================ omnia_repo_url_rhel_x86_64: - { url: "https://download.docker.com/linux/centos/10/x86_64/stable/", gpgkey: "https://download.docker.com/linux/centos/gpg", name: "docker-ce"} - { url: "https://dl.fedoraproject.org/pub/epel/10/Everything/x86_64/", gpgkey: "https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-10", name: "epel"} - - { url: "https://pkgs.k8s.io/core:/stable:/v1.34/rpm/", gpgkey: "https://pkgs.k8s.io/core:/stable:/v1.34/rpm/repodata/repomd.xml.key", name: "kubernetes"} - - { url: "https://download.opensuse.org/repositories/isv:/cri-o:/stable:/v1.34/rpm/", gpgkey: "https://download.opensuse.org/repositories/isv:/cri-o:/stable:/v1.34/rpm/repodata/repomd.xml.key", name: "cri-o"} + - { url: "https://pkgs.k8s.io/core:/stable:/v1.35/rpm/", gpgkey: "https://pkgs.k8s.io/core:/stable:/v1.35/rpm/repodata/repomd.xml.key", name: "kubernetes-v1-35"} + - { url: "https://download.opensuse.org/repositories/isv:/cri-o:/stable:/v1.35/rpm/", gpgkey: "https://download.opensuse.org/repositories/isv:/cri-o:/stable:/v1.35/rpm/repodata/repomd.xml.key", name: "cri-o-v1-35"} - { url: "https://linux.mellanox.com/public/repo/doca/3.2.1/rhel10/x86_64/", gpgkey: "https://linux.mellanox.com/public/repo/doca/3.2.1/rhel10/x86_64/repodata/repomd.xml.key", name: "doca"} - { url: "https://developer.download.nvidia.com/compute/cuda/repos/rhel10/x86_64/", gpgkey: "https://developer.download.nvidia.com/compute/cuda/repos/rhel10/x86_64/repodata/repomd.xml.key", name: "cuda"} omnia_repo_url_rhel_aarch64: diff --git a/input/software_config.json b/input/software_config.json index 8fa558bf28..70e3d679ee 100644 --- a/input/software_config.json +++ b/input/software_config.json @@ -6,7 +6,7 @@ {"name": "default_packages", "arch": ["x86_64","aarch64"]}, {"name": "admin_debug_packages", "arch": ["x86_64","aarch64"]}, {"name": "openldap", "arch": ["x86_64","aarch64"]}, - {"name": "service_k8s","version": "1.34.1", "arch": ["x86_64"]}, + {"name": "service_k8s","version": "1.35.1", "arch": ["x86_64"]}, {"name": "slurm_custom", "arch": ["x86_64","aarch64"]}, {"name": "csi_driver_powerscale", "version":"v2.15.0", "arch": ["x86_64"]}, {"name": "ldms", "arch": ["x86_64","aarch64"]}, diff --git a/local_repo/roles/validation/tasks/validate_software_config_json.yml b/local_repo/roles/validation/tasks/validate_software_config_json.yml index 0a221ebfee..190904eb95 100644 --- a/local_repo/roles/validation/tasks/validate_software_config_json.yml +++ b/local_repo/roles/validation/tasks/validate_software_config_json.yml @@ -91,4 +91,4 @@ msg: "{{ fail_msg }}" when: - service_k8s_support - - service_k8s_version != default_k8s_version + - service_k8s_version not in supported_k8s_versions diff --git a/local_repo/roles/validation/vars/main.yml b/local_repo/roles/validation/vars/main.yml index 88cceea868..8720bec1de 100644 --- a/local_repo/roles/validation/vars/main.yml +++ b/local_repo/roles/validation/vars/main.yml @@ -106,11 +106,14 @@ specific_softwares: - 'intelgaudi' - 'openmpi' - 'bcm_roce_libraries' -default_k8s_version: "1.34.1" +default_k8s_version: "1.35.1" +supported_k8s_versions: + - "1.34.1" + - "1.35.1" fail_msg: >- service_k8s is not supported for version: {{ service_k8s_version }}. - Please update the service_k8s version in software_config.json to {{ default_k8s_version }} - and rerun the playbook. + Please update the service_k8s version in software_config.json to a supported version + ({{ supported_k8s_versions | join(', ') }}) and rerun the playbook. versions_fail_msg: "Versions were not defined for the following softwares: {{ failed_softwares | join(', ') }} in software_config.json. Refer examples/template_{{ cluster_os_type }}_software_config.json and define version details accordingly in {{ project_input_path }}/software_config.json" @@ -175,6 +178,10 @@ http_key: http # Usage: validate_metadata.yml meta_dest: "{{ nfs_shared_path }}/offline_repo/.data" metadata_file_path: "{{ meta_dest }}/localrepo_metadata.yml" +metadata_identical_msg: "Metadata is identical. No changes detected." +metadata_warn_msg: | + WARNING: Metadata has changed since last run. + This may indicate changes in software_config.json or local_repo_config.yml. build_stream_auto_accept_metadata_msg: "Build stream is enabled, automatically accepting metadata changes." # Usage: remove_k8s_line.yml diff --git a/prepare_oim/roles/prepare_oim_validation/tasks/check_k8s_support.yml b/prepare_oim/roles/prepare_oim_validation/tasks/check_k8s_support.yml index 9bbda37138..b3b4c76fb9 100644 --- a/prepare_oim/roles/prepare_oim_validation/tasks/check_k8s_support.yml +++ b/prepare_oim/roles/prepare_oim_validation/tasks/check_k8s_support.yml @@ -31,10 +31,10 @@ k8s_versions: "{{ software_config.softwares | selectattr('name', 'in', ['compute_k8s', 'service_k8s']) | map(attribute='version') | list | unique }}" # noqa: yaml[line-length] k8s_arch: "{{ (software_config.softwares | selectattr('name', 'in', ['compute_k8s', 'service_k8s']) | first).get('arch', default_archs) }}" - - name: Set k8s_support_check to false if any k8s version is not default_k8s_version + - name: Set k8s_support_check to false if any k8s version is not in supported_k8s_versions ansible.builtin.set_fact: k8s_support_check: false - when: (k8s_versions | select('ne', default_k8s_version) | list | length) > 0 + when: (k8s_versions | reject('in', supported_k8s_versions) | list | length) > 0 - name: Fail if unsupported service_k8s version is detected ansible.builtin.fail: diff --git a/prepare_oim/roles/prepare_oim_validation/vars/main.yml b/prepare_oim/roles/prepare_oim_validation/vars/main.yml index 79bd5f5b4d..7ee5cfd5a9 100644 --- a/prepare_oim/roles/prepare_oim_validation/vars/main.yml +++ b/prepare_oim/roles/prepare_oim_validation/vars/main.yml @@ -32,13 +32,16 @@ software_config_syntax_fail_msg: "Failed. Syntax errors present in software_conf file_permission: "0755" # Usage: check_k8s_support.yml -fail_msg_k8s_version: "Failed. Kubernetes Version is unsupported or incorrect in software_config.json. Update software_config.json with a supported Kubernetes versions and re-run the playbook.Supported versions are - {{ supported_k8s_version }}" # noqa: yaml[line-length] -invalid_k8s_versions: "{{ k8s_versions | select('ne', default_k8s_version) | list }}" +fail_msg_k8s_version: "Failed. Kubernetes Version is unsupported or incorrect in software_config.json. Update software_config.json with a supported Kubernetes versions and re-run the playbook.Supported versions are - {{ supported_k8s_versions }}" # noqa: yaml[line-length] +invalid_k8s_versions: "{{ k8s_versions | reject('in', supported_k8s_versions) | list }}" fail_msg: >- service_k8s is not supported for version: {{ invalid_k8s_versions }}. - Please update the service_k8s version in software_config.json to {{ default_k8s_version }} - and rerun the playbook. -default_k8s_version: "1.34.1" + Please update the service_k8s version in software_config.json to a supported version + ({{ supported_k8s_versions | join(', ') }}) and rerun the playbook. +default_k8s_version: "1.35.1" +supported_k8s_versions: + - "1.34.1" + - "1.35.1" # Usage: validate_network_spec.yml network_spec: "{{ input_project_dir }}/network_spec.yml" diff --git a/provision/roles/k8s_config/tasks/create_k8s_config_nfs.yml b/provision/roles/k8s_config/tasks/create_k8s_config_nfs.yml index ac573840b9..45c1b2e818 100644 --- a/provision/roles/k8s_config/tasks/create_k8s_config_nfs.yml +++ b/provision/roles/k8s_config/tasks/create_k8s_config_nfs.yml @@ -197,7 +197,7 @@ - name: Include local repo access variable file ansible.builtin.include_vars: "{{ local_repo_access_config_file }}" -- name: Load service_k8s.json +- name: Load service_k8s_.json ansible.builtin.set_fact: k8s_packages_json: "{{ lookup('file', k8s_packages_file) | from_json }}" diff --git a/provision/roles/k8s_config/vars/main.yml b/provision/roles/k8s_config/vars/main.yml index 5785565568..9f0dfff2ee 100644 --- a/provision/roles/k8s_config/vars/main.yml +++ b/provision/roles/k8s_config/vars/main.yml @@ -15,7 +15,8 @@ local_repo_access_config_file: "/opt/omnia/provision/local_repo_access.yml" input_project_dir: "{{ hostvars['localhost']['input_project_dir'] }}" -k8s_packages_file: "{{ input_project_dir }}/config/x86_64/{{ software_config.cluster_os_type }}/{{ software_config.cluster_os_version }}/service_k8s.json" # noqa: yaml[line-length] +# Versioned JSON file: service_k8s_v.json (e.g., service_k8s_v1.35.1.json) +k8s_packages_file: "{{ input_project_dir }}/config/x86_64/{{ software_config.cluster_os_type }}/{{ software_config.cluster_os_version }}/service_k8s_v{{ hostvars['localhost']['service_k8s_version'] }}.json" # noqa: yaml[line-length] calico_manifest_yaml_url: "{{ offline_manifest_path }}/{{ calico_package }}/{{ calico_package }}.yml" metallb_manifest_yaml_url: "{{ offline_manifest_path }}/{{ metallb_package }}/{{ metallb_package }}.yml" multus_manifest_yaml_url: "{{ offline_manifest_path }}/{{ multus_package }}/{{ multus_package }}.yml" diff --git a/provision/roles/telemetry/tasks/load_service_images.yml b/provision/roles/telemetry/tasks/load_service_images.yml index 893b830fb2..654c73c9a7 100644 --- a/provision/roles/telemetry/tasks/load_service_images.yml +++ b/provision/roles/telemetry/tasks/load_service_images.yml @@ -13,7 +13,7 @@ # limitations under the License. --- -- name: Extract image packages from service_k8s.json +- name: Extract image packages from service_k8s_.json ansible.builtin.set_fact: service_k8s_image_list: "{{ telemetry_packages['service_k8s']['cluster'] | selectattr('type', 'equalto', 'image') | list }}" diff --git a/provision/roles/telemetry/tasks/main.yml b/provision/roles/telemetry/tasks/main.yml index 1693a8f1cd..743c67889d 100644 --- a/provision/roles/telemetry/tasks/main.yml +++ b/provision/roles/telemetry/tasks/main.yml @@ -24,7 +24,7 @@ - name: Derive sink support flags from collection_targets ansible.builtin.include_tasks: derive_sink_support_flags.yml -- name: Load service images from service_k8s.json +- name: Load service images from service_k8s_.json ansible.builtin.include_tasks: load_service_images.yml - name: Check kube_vip reachability for validation diff --git a/provision/roles/telemetry/tasks/read_software_config.yml b/provision/roles/telemetry/tasks/read_software_config.yml index 005f9e65a2..3bc1a52637 100644 --- a/provision/roles/telemetry/tasks/read_software_config.yml +++ b/provision/roles/telemetry/tasks/read_software_config.yml @@ -35,11 +35,11 @@ ansible.builtin.set_fact: cluster_os_version: "{{ software_config['cluster_os_version'] }}" -- name: Load service_k8s.json +- name: Load service_k8s_.json ansible.builtin.set_fact: telemetry_packages: "{{ lookup('file', k8s_packages_file) | from_json }}" -- name: Extract service_k8s.json and set facts for pip_modules and python_version +- name: Extract service_k8s_.json and set facts for pip_modules and python_version ansible.builtin.set_fact: k8s_pip_packages: >- {{ telemetry_packages['service_kube_control_plane']['cluster'] diff --git a/provision/roles/telemetry/templates/telemetry/common/telemetry_pod_cleanup.yaml.j2 b/provision/roles/telemetry/templates/telemetry/common/telemetry_pod_cleanup.yaml.j2 index 3709759f78..acd8d35029 100644 --- a/provision/roles/telemetry/templates/telemetry/common/telemetry_pod_cleanup.yaml.j2 +++ b/provision/roles/telemetry/templates/telemetry/common/telemetry_pod_cleanup.yaml.j2 @@ -25,7 +25,7 @@ spec: tolerationSeconds: 30 # Evict after 30s if node is unreachable containers: - name: kubectl-cleanup - image: docker.io/alpine/kubectl:1.34.1 + image: docker.io/alpine/kubectl:1.35.1 command: - /bin/sh - -c diff --git a/provision/roles/telemetry/vars/main.yml b/provision/roles/telemetry/vars/main.yml index 6c8756c7c2..6282d097ee 100644 --- a/provision/roles/telemetry/vars/main.yml +++ b/provision/roles/telemetry/vars/main.yml @@ -20,7 +20,8 @@ service_cluster_metadata_path: "/opt/omnia/.data/service_cluster_metadata.yml" metadata_perm: "0644" # Usage: read_software_config.yml -k8s_packages_file: "{{ input_project_dir }}/config/x86_64/{{ software_config.cluster_os_type }}/{{ software_config.cluster_os_version }}/service_k8s.json" +# Versioned JSON file: service_k8s_v.json (e.g., service_k8s_v1.35.1.json) +k8s_packages_file: "{{ input_project_dir }}/config/x86_64/{{ software_config.cluster_os_type }}/{{ software_config.cluster_os_version }}/service_k8s_v{{ hostvars['localhost']['service_k8s_version'] }}.json" # Usage: secrets_creation.yml mysqldb_secrets_name: mysqldb-credentials @@ -68,7 +69,7 @@ kafka: service_name: "kafka-headless" lb_service_name: "kafka-loadbalancer" container_port1: 9093 - # Kafka images from service_k8s.json + # Kafka images from service_k8s_.json operator_image: "{{ telemetry_images['strimzi/operator'] | default('quay.io/strimzi/operator:0.48.0') }}" kafka_image: "{{ telemetry_images['strimzi/kafka'] | default('quay.io/strimzi/kafka:0.48.0-kafka-4.1.0') }}" bridge_image: "{{ telemetry_images['strimzi/kafka-bridge'] | default('quay.io/strimzi/kafka-bridge:0.33.1') }}" @@ -98,8 +99,8 @@ kafka: # name: "{{ ome_identifier }}.logs" # partitions: 2 -# Dynamic image configuration from service_k8s.json -# Images and versions are read dynamically from input/config/x86_64/rhel/10.0/service_k8s.json +# Dynamic image configuration from service_k8s_.json +# Images and versions are read dynamically from input/config/x86_64/rhel/10.0/service_k8s_.json telemetry_images: "{{ service_k8s_images | default({}) }}" # Usage: victoriametric_deployment.yml From 8267233d38d03dac614817e211bd0b3169e84b99 Mon Sep 17 00:00:00 2001 From: Katakam-Rakesh Date: Thu, 14 May 2026 12:58:24 +0530 Subject: [PATCH 2/2] update service_k8s_v1.35.1.json and local_repo_config.yml Signed-off-by: Katakam-Rakesh --- .../input_validation/common_utils/config.py | 2 +- .../validation_flows/common_validation.py | 12 +- .../validation_flows/local_repo_validation.py | 21 ++- .../module_utils/local_repo/software_utils.py | 14 +- .../modules/image_package_collector.py | 26 +++- common/library/modules/prepare_tasklist.py | 9 +- examples/rhel_software_config.json | 2 +- ..._rhel_10.0_multi_arch_software_config.json | 2 +- ...late_rhel_10.0_x86-64_software_config.json | 2 +- .../x86_64/rhel/10.0/service_k8s_v1.34.1.json | 108 ++++++++++++++++ .../x86_64/rhel/10.0/service_k8s_v1.35.1.json | 122 ++++++++++++++++++ input/local_repo_config.yml | 14 +- input/software_config.json | 2 +- .../tasks/validate_software_config_json.yml | 2 +- local_repo/roles/validation/vars/main.yml | 13 +- .../tasks/check_k8s_support.yml | 4 +- .../prepare_oim_validation/vars/main.yml | 13 +- .../tasks/create_k8s_config_nfs.yml | 2 +- provision/roles/k8s_config/vars/main.yml | 3 +- .../telemetry/tasks/load_service_images.yml | 2 +- provision/roles/telemetry/tasks/main.yml | 2 +- .../telemetry/tasks/read_software_config.yml | 4 +- .../common/telemetry_pod_cleanup.yaml.j2 | 2 +- provision/roles/telemetry/vars/main.yml | 9 +- 24 files changed, 348 insertions(+), 44 deletions(-) create mode 100644 input/config/x86_64/rhel/10.0/service_k8s_v1.34.1.json create mode 100644 input/config/x86_64/rhel/10.0/service_k8s_v1.35.1.json diff --git a/common/library/module_utils/input_validation/common_utils/config.py b/common/library/module_utils/input_validation/common_utils/config.py index 095849d88f..d1bb4b5b61 100644 --- a/common/library/module_utils/input_validation/common_utils/config.py +++ b/common/library/module_utils/input_validation/common_utils/config.py @@ -132,7 +132,7 @@ "openmpi": "5.0.8", "csi_driver_powerscale": "v2.15.0", "rocm": "6.3.1", - "service_k8s": "1.34.1" + "service_k8s": "1.35.1" } # All of the passwords fields diff --git a/common/library/module_utils/input_validation/validation_flows/common_validation.py b/common/library/module_utils/input_validation/validation_flows/common_validation.py index 6ff8df745c..363be36fd7 100644 --- a/common/library/module_utils/input_validation/validation_flows/common_validation.py +++ b/common/library/module_utils/input_validation/validation_flows/common_validation.py @@ -252,15 +252,23 @@ def validate_software_config( for software_pkg in data['softwares']: software = software_pkg['name'] arch_list = software_pkg.get('arch') + # Get software version for versioned JSON files (e.g., service_k8s_v1.35.1.json) + software_version = software_pkg.get('version') for arch in arch_list: json_path = get_json_file_path( - software, cluster_os_type, cluster_os_version, input_file_path, arch) + software, cluster_os_type, cluster_os_version, input_file_path, arch, + software_version=software_version) # Check if json_path is None or if the JSON syntax is invalid if not json_path: + # Construct expected filename for error message + if software == "service_k8s" and software_version: + expected_file = f"{software}_v{software_version}.json" + else: + expected_file = f"{software}.json" errors.append( create_error_msg( "Validation Error: ", software, - f"is present in software_config.json. JSON file not found: {software}.json" + f"is present in software_config.json. JSON file not found: {expected_file}" ) ) else: diff --git a/common/library/module_utils/input_validation/validation_flows/local_repo_validation.py b/common/library/module_utils/input_validation/validation_flows/local_repo_validation.py index 8254faca1e..e81ecd8be7 100644 --- a/common/library/module_utils/input_validation/validation_flows/local_repo_validation.py +++ b/common/library/module_utils/input_validation/validation_flows/local_repo_validation.py @@ -21,7 +21,7 @@ from ansible.module_utils.input_validation.common_utils import validation_utils from ansible.module_utils.input_validation.common_utils import config from ansible.module_utils.input_validation.common_utils import en_us_validation_msg -from ansible.module_utils.local_repo.software_utils import load_yaml, load_json +from ansible.module_utils.local_repo.software_utils import load_yaml, load_json, get_json_file_path file_names = config.files create_error_msg = validation_utils.create_error_msg @@ -239,13 +239,22 @@ def validate_local_repo_config(input_file_path, data, for software in software_config_json["softwares"]: sw = software["name"] arch_list = software.get("arch") + # Get software version for versioned JSON files (e.g., service_k8s_v1.35.1.json) + software_version = software.get("version") for arch in arch_list: - json_path = create_file_path( - input_file_path, - f"config/{arch}{os_ver_path}" + sw +".json") - if not os.path.exists(json_path): + # Use get_json_file_path for proper versioned JSON file resolution + json_path = get_json_file_path( + sw, cluster_os_type, cluster_os_version, + software_config_file_path, arch, + software_version=software_version) + if not json_path or not os.path.exists(json_path): + # Construct expected filename for error message + if sw == "service_k8s" and software_version: + expected_file = f"{sw}_v{software_version}.json" + else: + expected_file = f"{sw}.json" errors.append( - create_error_msg(sw + '/' + arch, f"{sw} JSON file not found for architecture {arch}.", json_path)) + create_error_msg(sw + '/' + arch, f"{sw} JSON file not found for architecture {arch}.", expected_file)) else: curr_json = load_json(json_path) pkg_list = curr_json[sw]['cluster'] diff --git a/common/library/module_utils/local_repo/software_utils.py b/common/library/module_utils/local_repo/software_utils.py index bc5da2876a..d3306d58b8 100644 --- a/common/library/module_utils/local_repo/software_utils.py +++ b/common/library/module_utils/local_repo/software_utils.py @@ -118,7 +118,7 @@ def load_yaml(file_path): return yaml.safe_load(file) def get_json_file_path(software_name, cluster_os_type, - cluster_os_version, user_json_path, arch): + cluster_os_version, user_json_path, arch, software_version=None): """ Generate the file path for a JSON file based on the provided software name, cluster OS type, cluster OS version, and user JSON path. @@ -129,13 +129,23 @@ def get_json_file_path(software_name, cluster_os_type, cluster_os_version (str): The version of the cluster operating system. user_json_path (str): The path to the user JSON file. arch: Architecture for a particular software + software_version (str, optional): Version of the software for versioned JSON files. + Used for software like service_k8s that have versioned JSON files + (e.g., service_k8s_v1.35.1.json). Returns: str or None: The file path for the JSON file if it exists, otherwise None. """ base_path = os.path.dirname(os.path.abspath(user_json_path)) + + # Handle versioned JSON files (e.g., service_k8s_v1.35.1.json) + if software_name == "service_k8s" and software_version: + json_filename = f"{software_name}_v{software_version}.json" + else: + json_filename = f"{software_name}.json" + json_path = os.path.join(base_path, - f'{SOFTWARE_CONFIG_SUBDIR}/{arch}/{cluster_os_type}/{cluster_os_version}/{software_name}.json' + f'{SOFTWARE_CONFIG_SUBDIR}/{arch}/{cluster_os_type}/{cluster_os_version}/{json_filename}' ) return json_path diff --git a/common/library/modules/image_package_collector.py b/common/library/modules/image_package_collector.py index 77ff67b50d..90a315d750 100644 --- a/common/library/modules/image_package_collector.py +++ b/common/library/modules/image_package_collector.py @@ -151,7 +151,12 @@ def process_functional_group(fg_name, arch, os_version, input_project_dir, packages = [] for json_file in json_files: + # Extract software name from json file + # Handle versioned files like service_k8s_v1.35.1.json -> service_k8s sw_name = json_file.replace(".json", "") + # Remove version suffix for versioned files (e.g., service_k8s_v1.35.1 -> service_k8s) + if sw_name.startswith("service_k8s_v"): + sw_name = "service_k8s" if sw_name not in allowed_softwares: continue @@ -170,7 +175,8 @@ def process_functional_group(fg_name, arch, os_version, input_project_dir, sw_data, fg_name=fg_name, slurm_defined=True ) ) - elif json_file == "service_k8s.json": + elif json_file.startswith("service_k8s_v"): + # Handle versioned service_k8s_v.json files packages.extend( collect_packages_from_json( sw_data, fg_name=fg_name, service_k8s_defined=True @@ -194,6 +200,7 @@ def run_module(): software_config_file=dict(type="str", required=True), input_project_dir=dict(type="str", required=True), additional_json_path=dict(type="str", required=False, default=""), + service_k8s_version=dict(type="str", required=False, default=""), ) result = dict( @@ -212,6 +219,7 @@ def run_module(): software_config_file = module.params["software_config_file"] input_project_dir = module.params["input_project_dir"] additional_json_path = module.params["additional_json_path"] + service_k8s_version = module.params["service_k8s_version"] software_config = load_json_file(software_config_file, module) if not software_config: @@ -221,6 +229,13 @@ def run_module(): if not os_version: module.fail_json(msg="cluster_os_version not found in software_config.json") + # Extract service_k8s version from software_config if not provided + if not service_k8s_version: + for sw in software_config.get("softwares", []): + if sw.get("name") == "service_k8s" and sw.get("version"): + service_k8s_version = sw["version"] + break + allowed_softwares = { sw["name"] for sw in software_config.get("softwares", []) } @@ -229,14 +244,17 @@ def run_module(): additional_enabled = is_additional_packages_enabled(software_config) allowed_additional_subgroups = get_allowed_additional_subgroups(software_config) if additional_enabled else [] + # Versioned JSON file for service_k8s: service_k8s_v.json + service_k8s_json = f"service_k8s_v{service_k8s_version}.json" if service_k8s_version else "service_k8s.json" + # pylint: disable=line-too-long # Functional group → json files mapping software_map = { "os_x86_64": ["default_packages.json", "ldms.json"], "os_aarch64": ["default_packages.json", "ldms.json"], - "service_kube_node_x86_64": ["service_k8s.json"], - "service_kube_control_plane_first_x86_64": ["service_k8s.json"], - "service_kube_control_plane_x86_64": ["service_k8s.json"], + "service_kube_node_x86_64": [service_k8s_json], + "service_kube_control_plane_first_x86_64": [service_k8s_json], + "service_kube_control_plane_x86_64": [service_k8s_json], "slurm_control_node_x86_64": ["slurm_custom.json", "openldap.json", "ldms.json"], "slurm_node_x86_64": ["slurm_custom.json", "openldap.json", "ldms.json"], "login_node_x86_64": ["slurm_custom.json", "openldap.json", "ldms.json"], diff --git a/common/library/modules/prepare_tasklist.py b/common/library/modules/prepare_tasklist.py index 9714c7aaf0..688774cdd7 100644 --- a/common/library/modules/prepare_tasklist.py +++ b/common/library/modules/prepare_tasklist.py @@ -123,8 +123,15 @@ def main(): logger.info("Preparing package lists...") for software in software_list[arch]: logger.info(f"Processing software: {software}") + # Get software version for versioned JSON files (e.g., service_k8s_v1.35.1.json) + software_version = None + for sw in user_data.get("softwares", []): + if sw.get("name") == software and sw.get("version"): + software_version = sw["version"] + break json_path[arch] = get_json_file_path(software, cluster_os_type, - cluster_os_version, user_json_file, arch) + cluster_os_version, user_json_file, arch, + software_version=software_version) status_csv_path[arch] = get_csv_file_path(software, log_dir, arch) logger.info(f"json_path: {json_path}") logger.info(f"status_csv_path: {status_csv_path}") diff --git a/examples/rhel_software_config.json b/examples/rhel_software_config.json index 394ef53120..b9f60b3f3d 100644 --- a/examples/rhel_software_config.json +++ b/examples/rhel_software_config.json @@ -6,7 +6,7 @@ {"name": "default_packages", "arch": ["x86_64","aarch64"]}, {"name": "admin_debug_packages", "arch": ["x86_64","aarch64"]}, {"name": "openldap", "arch": ["x86_64","aarch64"]}, - {"name": "service_k8s","version": "1.34.1", "arch": ["x86_64"]}, + {"name": "service_k8s","version": "1.35.1", "arch": ["x86_64"]}, {"name": "slurm_custom", "arch": ["x86_64","aarch64"]}, {"name": "ucx", "version": "1.19.0", "arch": ["x86_64","aarch64"]}, {"name": "openmpi", "version": "5.0.8", "arch": ["x86_64","aarch64"]}, diff --git a/examples/software_config_template/template_rhel_10.0_multi_arch_software_config.json b/examples/software_config_template/template_rhel_10.0_multi_arch_software_config.json index 83eaa12a8c..69bc80c84f 100644 --- a/examples/software_config_template/template_rhel_10.0_multi_arch_software_config.json +++ b/examples/software_config_template/template_rhel_10.0_multi_arch_software_config.json @@ -7,7 +7,7 @@ {"name": "admin_debug_packages", "arch": ["x86_64","aarch64"]}, {"name": "openldap", "arch": ["x86_64","aarch64"]}, {"name": "slurm_custom", "arch": ["x86_64","aarch64"]}, - {"name": "service_k8s", "version": "1.34.1", "arch": ["x86_64"]}, + {"name": "service_k8s", "version": "1.35.1", "arch": ["x86_64"]}, {"name": "ucx", "version": "1.19.0", "arch": ["x86_64","aarch64"]}, {"name": "openmpi", "version": "5.0.8", "arch": ["x86_64","aarch64"]}, {"name": "csi_driver_powerscale", "version":"v2.15.0", "arch": ["x86_64"]}, diff --git a/examples/software_config_template/template_rhel_10.0_x86-64_software_config.json b/examples/software_config_template/template_rhel_10.0_x86-64_software_config.json index 907958e590..650e912b78 100644 --- a/examples/software_config_template/template_rhel_10.0_x86-64_software_config.json +++ b/examples/software_config_template/template_rhel_10.0_x86-64_software_config.json @@ -7,7 +7,7 @@ {"name": "admin_debug_packages", "arch": ["x86_64"]}, {"name": "openldap", "arch": ["x86_64"]}, {"name": "slurm_custom", "arch": ["x86_64"]}, - {"name": "service_k8s", "version": "1.34.1", "arch": ["x86_64"]}, + {"name": "service_k8s", "version": "1.35.1", "arch": ["x86_64"]}, {"name": "ucx", "version": "1.19.0", "arch": ["x86_64"]}, {"name": "openmpi", "version": "5.0.8", "arch": ["x86_64"]}, {"name": "csi_driver_powerscale", "version":"v2.15.0", "arch": ["x86_64"]}, diff --git a/input/config/x86_64/rhel/10.0/service_k8s_v1.34.1.json b/input/config/x86_64/rhel/10.0/service_k8s_v1.34.1.json new file mode 100644 index 0000000000..6deed2309b --- /dev/null +++ b/input/config/x86_64/rhel/10.0/service_k8s_v1.34.1.json @@ -0,0 +1,108 @@ +{ + "service_k8s": { + "cluster": [ + { "package": "docker.io/library/busybox", "type": "image", "tag": "1.36" }, + { "package": "firewalld", "type": "rpm", "repo_name": "baseos" }, + { "package": "python3-firewall", "type": "rpm", "repo_name": "baseos" }, + { "package": "git", "type": "rpm", "repo_name": "appstream"}, + { "package": "vim-enhanced", "type": "rpm", "repo_name": "appstream"}, + { "package": "fuse-overlayfs", "type": "rpm", "repo_name": "appstream"}, + { "package": "podman", "type": "rpm", "repo_name": "appstream"}, + { "package": "kubeadm-1.34.1", "type": "rpm", "repo_name": "kubernetes"}, + { "package": "kubelet-1.34.1", "type": "rpm", "repo_name": "kubernetes"}, + { "package": "container-selinux", "type": "rpm", "repo_name": "appstream"}, + { "package": "cri-o-1.34.1", "type": "rpm", "repo_name": "cri-o"}, + { "package": "docker.io/victoriametrics/victoria-metrics", "type": "image", "tag": "v1.128.0" }, + { "package": "docker.io/victoriametrics/vmagent", "type": "image", "tag": "v1.128.0" }, + { "package": "docker.io/victoriametrics/vmstorage", "type": "image", "tag": "v1.128.0-cluster" }, + { "package": "docker.io/victoriametrics/vminsert", "type": "image", "tag": "v1.128.0-cluster" }, + { "package": "docker.io/victoriametrics/vmselect", "type": "image", "tag": "v1.128.0-cluster" }, + { "package": "docker.io/alpine/kubectl", "tag": "1.34.1", "type": "image" }, + { "package": "docker.io/curlimages/curl", "type": "image", "tag": "8.17.0" }, + { "package": "docker.io/rmohr/activemq", "type": "image", "tag": "5.15.9" }, + { "package": "docker.io/library/mysql", "type": "image", "tag": "9.3.0" }, + { "package": "docker.io/dellhpcomniaaisolution/idrac_telemetry_receiver", "type": "image", "tag": "1.2" }, + { "package": "docker.io/dellhpcomniaaisolution/kafkapump", "type": "image", "tag": "1.2" }, + { "package": "docker.io/dellhpcomniaaisolution/victoriapump", "type": "image", "tag": "1.2" }, + { "package": "cryptography==45.0.7", "type": "pip_module" }, + { "package": "omsdk==1.2.518", "type": "pip_module" }, + { "package": "cffi==1.17.1", "type": "pip_module" }, + { "package": "quay.io/strimzi/operator", "tag": "0.48.0", "type": "image" }, + { "package": "quay.io/strimzi/kafka", "tag": "0.48.0-kafka-4.1.0", "type": "image" }, + { "package": "docker.io/dellhpcomniaaisolution/ubuntu-ldms", "tag": "1.0", "type": "image" }, + { "package": "strimzi-kafka-operator-helm-3-chart-0.48.0", "type": "tarball", "url": "https://github.com/strimzi/strimzi-kafka-operator/releases/download/0.48.0/strimzi-kafka-operator-helm-3-chart-0.48.0.tgz" }, + { "package": "quay.io/strimzi/kafka-bridge", "tag": "0.33.1", "type": "image" }, + { "package": "apptainer", "type": "rpm", "repo_name": "epel" }, + { "package": "doca-ofed", "type": "rpm_repo", "repo_name": "doca" } + ] + }, + "service_kube_control_plane": { + "cluster": [ + { "package": "ghcr.io/kube-vip/kube-vip", "tag": "v0.8.9", "type": "image" }, + { "package": "docker.io/alpine/kubectl", "tag": "1.34.1", "type": "image" }, + { "package": "registry.k8s.io/kube-apiserver", "tag": "v1.34.1", "type": "image" }, + { "package": "registry.k8s.io/kube-controller-manager", "tag": "v1.34.1", "type": "image" }, + { "package": "registry.k8s.io/kube-scheduler", "tag": "v1.34.1", "type": "image" }, + { "package": "registry.k8s.io/kube-proxy", "tag": "v1.34.1", "type": "image" }, + { "package": "registry.k8s.io/coredns/coredns", "tag": "v1.12.1", "type": "image" }, + { "package": "registry.k8s.io/pause", "tag": "3.10.1", "type": "image" }, + { "package": "registry.k8s.io/etcd", "tag": "3.6.4-0", "type": "image" }, + { "package": "docker.io/calico/cni", "tag": "v3.30.3", "type": "image" }, + { "package": "docker.io/calico/kube-controllers", "tag": "v3.30.3", "type": "image" }, + { "package": "docker.io/calico/node", "tag": "v3.30.3", "type": "image" }, + { "package": "quay.io/metallb/speaker", "tag": "v0.15.2", "type": "image" }, + { "package": "kubectl-1.34.1", "type": "rpm", "repo_name": "kubernetes"}, + { "package": "prettytable==3.14.0", "type": "pip_module" }, + { "package": "python3-3.12.9", "type": "rpm", "repo_name": "baseos" }, + { "package": "git", "type": "rpm", "repo_name": "appstream"}, + { "package": "kubernetes==33.1.0", "type": "pip_module" }, + { "package": "PyMySQL==1.1.2", "type": "pip_module" } + + ] + }, + "service_kube_control_plane_first": { + "cluster": [ + { "package": "ghcr.io/kube-vip/kube-vip", "tag": "v0.8.9", "type": "image" }, + { "package": "registry.k8s.io/kube-apiserver", "tag": "v1.34.1", "type": "image" }, + { "package": "registry.k8s.io/kube-controller-manager", "tag": "v1.34.1", "type": "image" }, + { "package": "registry.k8s.io/kube-scheduler", "tag": "v1.34.1", "type": "image" }, + { "package": "registry.k8s.io/kube-proxy", "tag": "v1.34.1", "type": "image" }, + { "package": "registry.k8s.io/coredns/coredns", "tag": "v1.12.1", "type": "image" }, + { "package": "docker.io/alpine/kubectl", "tag": "1.34.1", "type": "image" }, + { "package": "registry.k8s.io/pause", "tag": "3.10.1", "type": "image" }, + { "package": "registry.k8s.io/etcd", "tag": "3.6.4-0", "type": "image" }, + { "package": "docker.io/calico/cni", "tag": "v3.30.3", "type": "image" }, + { "package": "docker.io/calico/kube-controllers", "tag": "v3.30.3", "type": "image" }, + { "package": "docker.io/calico/node", "tag": "v3.30.3", "type": "image" }, + { "package": "quay.io/metallb/speaker", "tag": "v0.15.2", "type": "image" }, + { + "package": "calico-v3.30.3", + "type": "manifest", + "url": "https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/calico.yaml" + }, + { + "package": "metallb-native-v0.15.2", + "type": "manifest", + "url": "https://raw.githubusercontent.com/metallb/metallb/v0.15.2/config/manifests/metallb-native.yaml" + }, + { "package": "helm-v3.19.0-amd64", "type": "tarball", "url": "https://get.helm.sh/helm-v3.19.0-linux-amd64.tar.gz" }, + { "package": "nfs-subdir-external-provisioner-4.0.18", "type": "tarball", "url": "https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/releases/download/nfs-subdir-external-provisioner-4.0.18/nfs-subdir-external-provisioner-4.0.18.tgz" }, + { "package": "kubectl-1.34.1", "type": "rpm", "repo_name": "kubernetes"}, + { "package": "prettytable==3.14.0", "type": "pip_module" }, + { "package": "python3-3.12.9", "type": "rpm", "repo_name": "baseos" }, + { "package": "git", "type": "rpm", "repo_name": "appstream"}, + { "package": "kubernetes==33.1.0", "type": "pip_module" }, + { "package": "PyMySQL==1.1.2", "type": "pip_module" } + + ] + }, + + "service_kube_node": { + "cluster": [ + { "package": "registry.k8s.io/sig-storage/nfs-subdir-external-provisioner", "tag": "v4.0.2", "type": "image" }, + { "package": "quay.io/metallb/speaker", "tag": "v0.15.2", "type": "image" }, + { "package": "quay.io/metallb/controller", "tag": "v0.15.2", "type": "image" } + ] + } +} + diff --git a/input/config/x86_64/rhel/10.0/service_k8s_v1.35.1.json b/input/config/x86_64/rhel/10.0/service_k8s_v1.35.1.json new file mode 100644 index 0000000000..88e2692fc8 --- /dev/null +++ b/input/config/x86_64/rhel/10.0/service_k8s_v1.35.1.json @@ -0,0 +1,122 @@ +{ + "service_k8s": { + "cluster": [ + { "package": "docker.io/library/busybox", "type": "image", "tag": "1.36" }, + { "package": "firewalld", "type": "rpm", "repo_name": "baseos" }, + { "package": "python3-firewall", "type": "rpm", "repo_name": "baseos" }, + { "package": "git", "type": "rpm", "repo_name": "appstream"}, + { "package": "vim-enhanced", "type": "rpm", "repo_name": "appstream"}, + { "package": "fuse-overlayfs", "type": "rpm", "repo_name": "appstream"}, + { "package": "podman", "type": "rpm", "repo_name": "appstream"}, + { "package": "kubeadm-1.35.1", "type": "rpm", "repo_name": "kubernetes-v1-35"}, + { "package": "kubelet-1.35.1", "type": "rpm", "repo_name": "kubernetes-v1-35"}, + { "package": "container-selinux", "type": "rpm", "repo_name": "appstream"}, + { "package": "cri-o-1.35.1", "type": "rpm", "repo_name": "cri-o-v1-35"}, + { "package": "docker.io/victoriametrics/victoria-metrics", "type": "image", "tag": "v1.128.0" }, + { "package": "docker.io/victoriametrics/vmagent", "type": "image", "tag": "v1.128.0" }, + { "package": "docker.io/victoriametrics/vmstorage", "type": "image", "tag": "v1.128.0-cluster" }, + { "package": "docker.io/victoriametrics/vminsert", "type": "image", "tag": "v1.128.0-cluster" }, + { "package": "docker.io/victoriametrics/vmselect", "type": "image", "tag": "v1.128.0-cluster" }, + { "package": "docker.io/victoriametrics/victoria-logs", "type": "image", "tag": "v1.50.0" }, + { "package": "docker.io/victoriametrics/vlagent", "type": "image", "tag": "v1.50.0" }, + { "package": "docker.io/alpine/kubectl", "tag": "1.35.1", "type": "image" }, + { "package": "docker.io/curlimages/curl", "type": "image", "tag": "8.17.0" }, + { "package": "docker.io/rmohr/activemq", "type": "image", "tag": "5.15.9" }, + { "package": "docker.io/library/mysql", "type": "image", "tag": "9.3.0" }, + { "package": "docker.io/library/python", "type": "image", "tag": "3.11-slim" }, + { "package": "docker.io/dellhpcomniaaisolution/idrac_telemetry_receiver", "type": "image", "tag": "1.2" }, + { "package": "docker.io/dellhpcomniaaisolution/kafkapump", "type": "image", "tag": "1.2" }, + { "package": "docker.io/dellhpcomniaaisolution/victoriapump", "type": "image", "tag": "1.2" }, + { "package": "cryptography==45.0.7", "type": "pip_module" }, + { "package": "omsdk==1.2.518", "type": "pip_module" }, + { "package": "cffi==1.17.1", "type": "pip_module" }, + { "package": "prometheus_client==0.20.0", "type": "pip_module" }, + { "package": "kubernetes==33.1.0", "type": "pip_module" }, + { "package": "quay.io/strimzi/operator", "tag": "0.48.0", "type": "image" }, + { "package": "quay.io/strimzi/kafka", "tag": "0.48.0-kafka-4.1.0", "type": "image" }, + { "package": "docker.io/dellhpcomniaaisolution/ubuntu-ldms", "tag": "1.0", "type": "image" }, + { "package": "quay.io/dell/container-storage-modules/csm-metrics-powerscale", "tag": "v1.11.0", "type": "image" }, + { "package": "ghcr.io/open-telemetry/opentelemetry-collector-releases/opentelemetry-collector", "tag": "0.143.1", "type": "image" }, + { "package": "docker.io/nginxinc/nginx-unprivileged", "tag": "1.29", "type": "image" }, + { "package": "karavi-observability", "type": "git", "url": "https://github.com/dell/karavi-observability.git", "version": "v1.12.0" }, + { "package": "helm-charts", "type": "git", "url": "https://github.com/dell/helm-charts.git", "version": "container-storage-modules-1.9.2" }, + { "package": "quay.io/jetstack/cert-manager-controller", "tag": "v1.10.0", "type": "image" }, + { "package": "quay.io/jetstack/cert-manager-cainjector", "tag": "v1.10.0", "type": "image" }, + { "package": "quay.io/jetstack/cert-manager-webhook", "tag": "v1.10.0", "type": "image" }, + { "package": "quay.io/jetstack/cert-manager-acmesolver", "tag": "v1.10.0", "type": "image" }, + { "package": "cert-manager-v1.10.0", "type": "tarball", "url": "https://charts.jetstack.io/charts/cert-manager-v1.10.0.tgz" }, + { "package": "strimzi-kafka-operator-helm-3-chart-0.48.0", "type": "tarball", "url": "https://github.com/strimzi/strimzi-kafka-operator/releases/download/0.48.0/strimzi-kafka-operator-helm-3-chart-0.48.0.tgz" }, + { "package": "quay.io/strimzi/kafka-bridge", "tag": "0.33.1", "type": "image" }, + { "package": "docker.io/victoriametrics/operator", "tag": "v0.68.3", "type": "image" }, + { "package": "docker.io/victoriametrics/operator", "tag": "config-reloader-v0.68.3", "type": "image" }, + { "package": "victoria-metrics-operator-0.59.3", "type": "tarball", "url": "https://github.com/VictoriaMetrics/helm-charts/releases/download/victoria-metrics-operator-0.59.3/victoria-metrics-operator-0.59.3.tgz" }, + { "package": "docker.io/timberio/vector", "tag": "0.54.0-debian", "type": "image" }, + { "package": "apptainer", "type": "rpm", "repo_name": "epel" }, + { "package": "doca-ofed", "type": "rpm_repo", "repo_name": "doca" }, + { "package": "iscsi-initiator-utils", "type": "rpm", "repo_name": "baseos" }, + { "package": "device-mapper-multipath", "type": "rpm", "repo_name": "baseos" }, + { "package": "sg3_utils", "type": "rpm", "repo_name": "baseos" }, + { "package": "lsscsi", "type": "rpm", "repo_name": "baseos" } + ] + }, + "service_kube_control_plane": { + "cluster": [ + { "package": "ghcr.io/kube-vip/kube-vip", "tag": "v0.8.9", "type": "image" }, + { "package": "docker.io/alpine/kubectl", "tag": "1.35.1", "type": "image" }, + { "package": "registry.k8s.io/kube-apiserver", "tag": "v1.35.1", "type": "image" }, + { "package": "registry.k8s.io/kube-controller-manager", "tag": "v1.35.1", "type": "image" }, + { "package": "registry.k8s.io/kube-scheduler", "tag": "v1.35.1", "type": "image" }, + { "package": "registry.k8s.io/kube-proxy", "tag": "v1.35.1", "type": "image" }, + { "package": "registry.k8s.io/coredns/coredns", "tag": "v1.13.1", "type": "image" }, + { "package": "registry.k8s.io/pause", "tag": "3.10.1", "type": "image" }, + { "package": "registry.k8s.io/etcd", "tag": "3.6.6-0", "type": "image" }, + { "package": "docker.io/calico/cni", "tag": "v3.31.4", "type": "image" }, + { "package": "docker.io/calico/kube-controllers", "tag": "v3.31.4", "type": "image" }, + { "package": "docker.io/calico/node", "tag": "v3.31.4", "type": "image" }, + { "package": "quay.io/metallb/speaker", "tag": "v0.15.3", "type": "image" }, + { "package": "kubectl-1.35.1", "type": "rpm", "repo_name": "kubernetes-v1-35"}, + { "package": "prettytable==3.14.0", "type": "pip_module" }, + { "package": "python3-3.12.9", "type": "rpm", "repo_name": "baseos" }, + { "package": "git", "type": "rpm", "repo_name": "appstream"}, + { "package": "kubernetes==35.0.0", "type": "pip_module" }, + { "package": "PyMySQL==1.1.2", "type": "pip_module" } + + ] + }, + "service_kube_control_plane_first": { + "cluster": [ + { "package": "ghcr.io/kube-vip/kube-vip", "tag": "v0.8.9", "type": "image" }, + { "package": "registry.k8s.io/kube-apiserver", "tag": "v1.35.1", "type": "image" }, + { "package": "registry.k8s.io/kube-controller-manager", "tag": "v1.35.1", "type": "image" }, + { "package": "registry.k8s.io/kube-scheduler", "tag": "v1.35.1", "type": "image" }, + { "package": "registry.k8s.io/kube-proxy", "tag": "v1.35.1", "type": "image" }, + { "package": "registry.k8s.io/coredns/coredns", "tag": "v1.13.1", "type": "image" }, + { "package": "docker.io/alpine/kubectl", "tag": "1.35.1", "type": "image" }, + { "package": "registry.k8s.io/pause", "tag": "3.10.1", "type": "image" }, + { "package": "registry.k8s.io/etcd", "tag": "3.6.6-0", "type": "image" }, + { "package": "docker.io/calico/cni", "tag": "v3.31.4", "type": "image" }, + { "package": "docker.io/calico/kube-controllers", "tag": "v3.31.4", "type": "image" }, + { "package": "docker.io/calico/node", "tag": "v3.31.4", "type": "image" }, + { "package": "quay.io/metallb/speaker", "tag": "v0.15.3", "type": "image" }, + { "package": "calico-v3.31.4","type": "manifest", "url": "https://raw.githubusercontent.com/projectcalico/calico/v3.31.4/manifests/calico.yaml" }, + { "package": "metallb-native-v0.15.3", "type": "manifest", "url": "https://raw.githubusercontent.com/metallb/metallb/v0.15.3/config/manifests/metallb-native.yaml" }, + { "package": "helm-v3.20.1-amd64", "type": "tarball", "url": "https://get.helm.sh/helm-v3.20.1-linux-amd64.tar.gz" }, + { "package": "nfs-subdir-external-provisioner-4.0.18", "type": "tarball", "url": "https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/releases/download/nfs-subdir-external-provisioner-4.0.18/nfs-subdir-external-provisioner-4.0.18.tgz" }, + { "package": "kubectl-1.35.1", "type": "rpm", "repo_name": "kubernetes-v1-35"}, + { "package": "prettytable==3.14.0", "type": "pip_module" }, + { "package": "python3-3.12.9", "type": "rpm", "repo_name": "baseos" }, + { "package": "git", "type": "rpm", "repo_name": "appstream"}, + { "package": "kubernetes==35.0.0", "type": "pip_module" }, + { "package": "PyMySQL==1.1.2", "type": "pip_module" } + + ] + }, + + "service_kube_node": { + "cluster": [ + { "package": "registry.k8s.io/sig-storage/nfs-subdir-external-provisioner", "tag": "v4.0.2", "type": "image" }, + { "package": "quay.io/metallb/speaker", "tag": "v0.15.3", "type": "image" }, + { "package": "quay.io/metallb/controller", "tag": "v0.15.3", "type": "image" } + ] + } +} \ No newline at end of file diff --git a/input/local_repo_config.yml b/input/local_repo_config.yml index 7eca8c9346..2a0b0d5276 100644 --- a/input/local_repo_config.yml +++ b/input/local_repo_config.yml @@ -51,6 +51,7 @@ # - Do not use Jinja variables in this configuration. # - Omit SSL fields entirely if SSL is not in use. # - Its a mandatory field in case of slurm_custom with name as 'slurm_custom' +# - Version-specific naming (e.g., 'kubernetes-v1-35', 'cri-o-v1-35') is used only for service_k8s # # 3. user_repo_url_aarch64 #--------------------------- @@ -180,11 +181,20 @@ rhel_os_url_aarch64: rhel_subscription_repo_config_x86_64: rhel_subscription_repo_config_aarch64: # Making incorrect changes to this variable can cause omnia failure. Please edit cautiously. +# ============================================================================ +# VERSIONED REPOSITORY NAMING CONVENTION (Omnia 2.2+) +# ============================================================================ +# Starting from Omnia 2.2, repositories use versioned naming: +# - kubernetes-v- (e.g., kubernetes-v1-35) +# - cri-o-v- (e.g., cri-o-v1-35) +# Version-specific naming is used only for service_k8s components (kubernetes, cri-o) +# Other components (doca, cuda, slurm_custom) use non-versioned naming +# ============================================================================ omnia_repo_url_rhel_x86_64: - { url: "https://download.docker.com/linux/centos/10/x86_64/stable/", gpgkey: "https://download.docker.com/linux/centos/gpg", name: "docker-ce"} - { url: "https://dl.fedoraproject.org/pub/epel/10/Everything/x86_64/", gpgkey: "https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-10", name: "epel"} - - { url: "https://pkgs.k8s.io/core:/stable:/v1.34/rpm/", gpgkey: "https://pkgs.k8s.io/core:/stable:/v1.34/rpm/repodata/repomd.xml.key", name: "kubernetes"} - - { url: "https://download.opensuse.org/repositories/isv:/cri-o:/stable:/v1.34/rpm/", gpgkey: "https://download.opensuse.org/repositories/isv:/cri-o:/stable:/v1.34/rpm/repodata/repomd.xml.key", name: "cri-o"} + - { url: "https://pkgs.k8s.io/core:/stable:/v1.35/rpm/", gpgkey: "https://pkgs.k8s.io/core:/stable:/v1.35/rpm/repodata/repomd.xml.key", name: "kubernetes-v1-35"} + - { url: "https://download.opensuse.org/repositories/isv:/cri-o:/stable:/v1.35/rpm/", gpgkey: "https://download.opensuse.org/repositories/isv:/cri-o:/stable:/v1.35/rpm/repodata/repomd.xml.key", name: "cri-o-v1-35"} - { url: "https://linux.mellanox.com/public/repo/doca/3.2.1/rhel10/x86_64/", gpgkey: "https://linux.mellanox.com/public/repo/doca/3.2.1/rhel10/x86_64/repodata/repomd.xml.key", name: "doca"} - { url: "https://developer.download.nvidia.com/compute/cuda/repos/rhel10/x86_64/", gpgkey: "https://developer.download.nvidia.com/compute/cuda/repos/rhel10/x86_64/repodata/repomd.xml.key", name: "cuda"} omnia_repo_url_rhel_aarch64: diff --git a/input/software_config.json b/input/software_config.json index 8fa558bf28..70e3d679ee 100644 --- a/input/software_config.json +++ b/input/software_config.json @@ -6,7 +6,7 @@ {"name": "default_packages", "arch": ["x86_64","aarch64"]}, {"name": "admin_debug_packages", "arch": ["x86_64","aarch64"]}, {"name": "openldap", "arch": ["x86_64","aarch64"]}, - {"name": "service_k8s","version": "1.34.1", "arch": ["x86_64"]}, + {"name": "service_k8s","version": "1.35.1", "arch": ["x86_64"]}, {"name": "slurm_custom", "arch": ["x86_64","aarch64"]}, {"name": "csi_driver_powerscale", "version":"v2.15.0", "arch": ["x86_64"]}, {"name": "ldms", "arch": ["x86_64","aarch64"]}, diff --git a/local_repo/roles/validation/tasks/validate_software_config_json.yml b/local_repo/roles/validation/tasks/validate_software_config_json.yml index 0a221ebfee..190904eb95 100644 --- a/local_repo/roles/validation/tasks/validate_software_config_json.yml +++ b/local_repo/roles/validation/tasks/validate_software_config_json.yml @@ -91,4 +91,4 @@ msg: "{{ fail_msg }}" when: - service_k8s_support - - service_k8s_version != default_k8s_version + - service_k8s_version not in supported_k8s_versions diff --git a/local_repo/roles/validation/vars/main.yml b/local_repo/roles/validation/vars/main.yml index 88cceea868..8720bec1de 100644 --- a/local_repo/roles/validation/vars/main.yml +++ b/local_repo/roles/validation/vars/main.yml @@ -106,11 +106,14 @@ specific_softwares: - 'intelgaudi' - 'openmpi' - 'bcm_roce_libraries' -default_k8s_version: "1.34.1" +default_k8s_version: "1.35.1" +supported_k8s_versions: + - "1.34.1" + - "1.35.1" fail_msg: >- service_k8s is not supported for version: {{ service_k8s_version }}. - Please update the service_k8s version in software_config.json to {{ default_k8s_version }} - and rerun the playbook. + Please update the service_k8s version in software_config.json to a supported version + ({{ supported_k8s_versions | join(', ') }}) and rerun the playbook. versions_fail_msg: "Versions were not defined for the following softwares: {{ failed_softwares | join(', ') }} in software_config.json. Refer examples/template_{{ cluster_os_type }}_software_config.json and define version details accordingly in {{ project_input_path }}/software_config.json" @@ -175,6 +178,10 @@ http_key: http # Usage: validate_metadata.yml meta_dest: "{{ nfs_shared_path }}/offline_repo/.data" metadata_file_path: "{{ meta_dest }}/localrepo_metadata.yml" +metadata_identical_msg: "Metadata is identical. No changes detected." +metadata_warn_msg: | + WARNING: Metadata has changed since last run. + This may indicate changes in software_config.json or local_repo_config.yml. build_stream_auto_accept_metadata_msg: "Build stream is enabled, automatically accepting metadata changes." # Usage: remove_k8s_line.yml diff --git a/prepare_oim/roles/prepare_oim_validation/tasks/check_k8s_support.yml b/prepare_oim/roles/prepare_oim_validation/tasks/check_k8s_support.yml index 9bbda37138..b3b4c76fb9 100644 --- a/prepare_oim/roles/prepare_oim_validation/tasks/check_k8s_support.yml +++ b/prepare_oim/roles/prepare_oim_validation/tasks/check_k8s_support.yml @@ -31,10 +31,10 @@ k8s_versions: "{{ software_config.softwares | selectattr('name', 'in', ['compute_k8s', 'service_k8s']) | map(attribute='version') | list | unique }}" # noqa: yaml[line-length] k8s_arch: "{{ (software_config.softwares | selectattr('name', 'in', ['compute_k8s', 'service_k8s']) | first).get('arch', default_archs) }}" - - name: Set k8s_support_check to false if any k8s version is not default_k8s_version + - name: Set k8s_support_check to false if any k8s version is not in supported_k8s_versions ansible.builtin.set_fact: k8s_support_check: false - when: (k8s_versions | select('ne', default_k8s_version) | list | length) > 0 + when: (k8s_versions | reject('in', supported_k8s_versions) | list | length) > 0 - name: Fail if unsupported service_k8s version is detected ansible.builtin.fail: diff --git a/prepare_oim/roles/prepare_oim_validation/vars/main.yml b/prepare_oim/roles/prepare_oim_validation/vars/main.yml index 79bd5f5b4d..7ee5cfd5a9 100644 --- a/prepare_oim/roles/prepare_oim_validation/vars/main.yml +++ b/prepare_oim/roles/prepare_oim_validation/vars/main.yml @@ -32,13 +32,16 @@ software_config_syntax_fail_msg: "Failed. Syntax errors present in software_conf file_permission: "0755" # Usage: check_k8s_support.yml -fail_msg_k8s_version: "Failed. Kubernetes Version is unsupported or incorrect in software_config.json. Update software_config.json with a supported Kubernetes versions and re-run the playbook.Supported versions are - {{ supported_k8s_version }}" # noqa: yaml[line-length] -invalid_k8s_versions: "{{ k8s_versions | select('ne', default_k8s_version) | list }}" +fail_msg_k8s_version: "Failed. Kubernetes Version is unsupported or incorrect in software_config.json. Update software_config.json with a supported Kubernetes versions and re-run the playbook.Supported versions are - {{ supported_k8s_versions }}" # noqa: yaml[line-length] +invalid_k8s_versions: "{{ k8s_versions | reject('in', supported_k8s_versions) | list }}" fail_msg: >- service_k8s is not supported for version: {{ invalid_k8s_versions }}. - Please update the service_k8s version in software_config.json to {{ default_k8s_version }} - and rerun the playbook. -default_k8s_version: "1.34.1" + Please update the service_k8s version in software_config.json to a supported version + ({{ supported_k8s_versions | join(', ') }}) and rerun the playbook. +default_k8s_version: "1.35.1" +supported_k8s_versions: + - "1.34.1" + - "1.35.1" # Usage: validate_network_spec.yml network_spec: "{{ input_project_dir }}/network_spec.yml" diff --git a/provision/roles/k8s_config/tasks/create_k8s_config_nfs.yml b/provision/roles/k8s_config/tasks/create_k8s_config_nfs.yml index ac573840b9..45c1b2e818 100644 --- a/provision/roles/k8s_config/tasks/create_k8s_config_nfs.yml +++ b/provision/roles/k8s_config/tasks/create_k8s_config_nfs.yml @@ -197,7 +197,7 @@ - name: Include local repo access variable file ansible.builtin.include_vars: "{{ local_repo_access_config_file }}" -- name: Load service_k8s.json +- name: Load service_k8s_.json ansible.builtin.set_fact: k8s_packages_json: "{{ lookup('file', k8s_packages_file) | from_json }}" diff --git a/provision/roles/k8s_config/vars/main.yml b/provision/roles/k8s_config/vars/main.yml index 5785565568..9f0dfff2ee 100644 --- a/provision/roles/k8s_config/vars/main.yml +++ b/provision/roles/k8s_config/vars/main.yml @@ -15,7 +15,8 @@ local_repo_access_config_file: "/opt/omnia/provision/local_repo_access.yml" input_project_dir: "{{ hostvars['localhost']['input_project_dir'] }}" -k8s_packages_file: "{{ input_project_dir }}/config/x86_64/{{ software_config.cluster_os_type }}/{{ software_config.cluster_os_version }}/service_k8s.json" # noqa: yaml[line-length] +# Versioned JSON file: service_k8s_v.json (e.g., service_k8s_v1.35.1.json) +k8s_packages_file: "{{ input_project_dir }}/config/x86_64/{{ software_config.cluster_os_type }}/{{ software_config.cluster_os_version }}/service_k8s_v{{ hostvars['localhost']['service_k8s_version'] }}.json" # noqa: yaml[line-length] calico_manifest_yaml_url: "{{ offline_manifest_path }}/{{ calico_package }}/{{ calico_package }}.yml" metallb_manifest_yaml_url: "{{ offline_manifest_path }}/{{ metallb_package }}/{{ metallb_package }}.yml" multus_manifest_yaml_url: "{{ offline_manifest_path }}/{{ multus_package }}/{{ multus_package }}.yml" diff --git a/provision/roles/telemetry/tasks/load_service_images.yml b/provision/roles/telemetry/tasks/load_service_images.yml index 893b830fb2..654c73c9a7 100644 --- a/provision/roles/telemetry/tasks/load_service_images.yml +++ b/provision/roles/telemetry/tasks/load_service_images.yml @@ -13,7 +13,7 @@ # limitations under the License. --- -- name: Extract image packages from service_k8s.json +- name: Extract image packages from service_k8s_.json ansible.builtin.set_fact: service_k8s_image_list: "{{ telemetry_packages['service_k8s']['cluster'] | selectattr('type', 'equalto', 'image') | list }}" diff --git a/provision/roles/telemetry/tasks/main.yml b/provision/roles/telemetry/tasks/main.yml index 1693a8f1cd..743c67889d 100644 --- a/provision/roles/telemetry/tasks/main.yml +++ b/provision/roles/telemetry/tasks/main.yml @@ -24,7 +24,7 @@ - name: Derive sink support flags from collection_targets ansible.builtin.include_tasks: derive_sink_support_flags.yml -- name: Load service images from service_k8s.json +- name: Load service images from service_k8s_.json ansible.builtin.include_tasks: load_service_images.yml - name: Check kube_vip reachability for validation diff --git a/provision/roles/telemetry/tasks/read_software_config.yml b/provision/roles/telemetry/tasks/read_software_config.yml index 005f9e65a2..3bc1a52637 100644 --- a/provision/roles/telemetry/tasks/read_software_config.yml +++ b/provision/roles/telemetry/tasks/read_software_config.yml @@ -35,11 +35,11 @@ ansible.builtin.set_fact: cluster_os_version: "{{ software_config['cluster_os_version'] }}" -- name: Load service_k8s.json +- name: Load service_k8s_.json ansible.builtin.set_fact: telemetry_packages: "{{ lookup('file', k8s_packages_file) | from_json }}" -- name: Extract service_k8s.json and set facts for pip_modules and python_version +- name: Extract service_k8s_.json and set facts for pip_modules and python_version ansible.builtin.set_fact: k8s_pip_packages: >- {{ telemetry_packages['service_kube_control_plane']['cluster'] diff --git a/provision/roles/telemetry/templates/telemetry/common/telemetry_pod_cleanup.yaml.j2 b/provision/roles/telemetry/templates/telemetry/common/telemetry_pod_cleanup.yaml.j2 index 3709759f78..acd8d35029 100644 --- a/provision/roles/telemetry/templates/telemetry/common/telemetry_pod_cleanup.yaml.j2 +++ b/provision/roles/telemetry/templates/telemetry/common/telemetry_pod_cleanup.yaml.j2 @@ -25,7 +25,7 @@ spec: tolerationSeconds: 30 # Evict after 30s if node is unreachable containers: - name: kubectl-cleanup - image: docker.io/alpine/kubectl:1.34.1 + image: docker.io/alpine/kubectl:1.35.1 command: - /bin/sh - -c diff --git a/provision/roles/telemetry/vars/main.yml b/provision/roles/telemetry/vars/main.yml index 6c8756c7c2..6282d097ee 100644 --- a/provision/roles/telemetry/vars/main.yml +++ b/provision/roles/telemetry/vars/main.yml @@ -20,7 +20,8 @@ service_cluster_metadata_path: "/opt/omnia/.data/service_cluster_metadata.yml" metadata_perm: "0644" # Usage: read_software_config.yml -k8s_packages_file: "{{ input_project_dir }}/config/x86_64/{{ software_config.cluster_os_type }}/{{ software_config.cluster_os_version }}/service_k8s.json" +# Versioned JSON file: service_k8s_v.json (e.g., service_k8s_v1.35.1.json) +k8s_packages_file: "{{ input_project_dir }}/config/x86_64/{{ software_config.cluster_os_type }}/{{ software_config.cluster_os_version }}/service_k8s_v{{ hostvars['localhost']['service_k8s_version'] }}.json" # Usage: secrets_creation.yml mysqldb_secrets_name: mysqldb-credentials @@ -68,7 +69,7 @@ kafka: service_name: "kafka-headless" lb_service_name: "kafka-loadbalancer" container_port1: 9093 - # Kafka images from service_k8s.json + # Kafka images from service_k8s_.json operator_image: "{{ telemetry_images['strimzi/operator'] | default('quay.io/strimzi/operator:0.48.0') }}" kafka_image: "{{ telemetry_images['strimzi/kafka'] | default('quay.io/strimzi/kafka:0.48.0-kafka-4.1.0') }}" bridge_image: "{{ telemetry_images['strimzi/kafka-bridge'] | default('quay.io/strimzi/kafka-bridge:0.33.1') }}" @@ -98,8 +99,8 @@ kafka: # name: "{{ ome_identifier }}.logs" # partitions: 2 -# Dynamic image configuration from service_k8s.json -# Images and versions are read dynamically from input/config/x86_64/rhel/10.0/service_k8s.json +# Dynamic image configuration from service_k8s_.json +# Images and versions are read dynamically from input/config/x86_64/rhel/10.0/service_k8s_.json telemetry_images: "{{ service_k8s_images | default({}) }}" # Usage: victoriametric_deployment.yml