Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
4f703f2
added crio-size and coredns restart
Katakam-Rakesh Dec 3, 2025
30e5e09
introduce polling mechanism for slurm controller
VrindaMarwah Dec 4, 2025
9a737a3
Merge branch 'dell:pub/k8s_telemetry' into pub/k8s_telemetry
VrindaMarwah Dec 4, 2025
5f4e360
introduce polling mechanism for slurm in login node and login compile…
VrindaMarwah Dec 4, 2025
09ea233
Merge branch 'pub/k8s_telemetry' of github.com:VrindaMarwah/omnia int…
VrindaMarwah Dec 4, 2025
646654a
modify install_cuda_toolkit path
VrindaMarwah Dec 4, 2025
84fa4f6
added arguments for kube-controller-manager
Katakam-Rakesh Dec 4, 2025
db66540
Merge branch 'dell:pub/k8s_telemetry' into pub/k8s_telemetry
Katakam-Rakesh Dec 4, 2025
058e80b
Fix for Docker credential validation
pullan1 Dec 4, 2025
63e3179
moved import to top
pullan1 Dec 4, 2025
89a147d
added arguments for kube-controller-manager
Katakam-Rakesh Dec 4, 2025
78da47d
Merge branch 'pub/k8s_telemetry' of github.com:Katakam-Rakesh/omnia i…
Katakam-Rakesh Dec 4, 2025
1f748e9
Merge pull request #3774 from pullan1/pub/k8s_telemetry
snarthan Dec 4, 2025
4d42794
address pr comments
VrindaMarwah Dec 4, 2025
15c68e3
added arguments for kubelet config and coredns config map
Katakam-Rakesh Dec 5, 2025
237add6
fix cloud-init
Katakam-Rakesh Dec 5, 2025
5514ff9
updated cloud-int
Katakam-Rakesh Dec 5, 2025
a5aa022
Merge branch 'dell:pub/k8s_telemetry' into pub/k8s_telemetry
Katakam-Rakesh Dec 5, 2025
caef853
added msg for informing cloud-init completion
Katakam-Rakesh Dec 5, 2025
6d5671c
Merge branch 'pub/k8s_telemetry' of github.com:Katakam-Rakesh/omnia i…
Katakam-Rakesh Dec 5, 2025
c7eff98
Update omnia_config.yml
Katakam-Rakesh Dec 5, 2025
e0b722b
move polling script to templates dir
VrindaMarwah Dec 5, 2025
090adef
omnia core and auth 1.0 update
abhishek-sa1 Dec 5, 2025
2694291
Update deploy_auth_service.yml
abhishek-sa1 Dec 5, 2025
e5f0400
Enable idrac telemtry service for iDRAC IP's
nethramg Dec 5, 2025
83958c7
Update deploy_auth_service.yml
abhishek-sa1 Dec 5, 2025
4198053
Ansible lint fixes
nethramg Dec 5, 2025
49bbf28
auth container update
abhishek-sa1 Dec 5, 2025
40fae1c
Update main.yml
abhishek-sa1 Dec 5, 2025
f3b31e9
Update deploy_auth_service.yml
abhishek-sa1 Dec 5, 2025
b82ae3b
Merge pull request #3776 from Katakam-Rakesh/pub/k8s_telemetry
snarthan Dec 5, 2025
6619433
Update deploy_auth_service.yml
abhishek-sa1 Dec 5, 2025
11875d3
updated kube-proxy config map
Katakam-Rakesh Dec 5, 2025
77bc3ec
Merge branch 'pub/k8s_telemetry' of github.com:Katakam-Rakesh/omnia i…
Katakam-Rakesh Dec 5, 2025
5ae9b2e
Merge pull request #3779 from Katakam-Rakesh/pub/k8s_telemetry
snarthan Dec 5, 2025
0fbc9b8
Enable runtime image download for diskless nodes
balajikumaran-c-s Dec 5, 2025
584693a
Enable runtime image download for diskless nodes
balajikumaran-c-s Dec 5, 2025
267aa5a
Update omnia.sh
abhishek-sa1 Dec 5, 2025
42dc017
Few more changes
nethramg Dec 6, 2025
3744329
Merge branch 'dell:pub/k8s_telemetry' into pub/k8s_telemetry
VrindaMarwah Dec 6, 2025
52d3aed
Remove timezone variable from input/provision_config.yml
priti-parate Dec 8, 2025
f8a9fbb
lint fix and adding thread safe measures
nethramg Dec 8, 2025
0900f2e
Adding the idrac ips variable corrected
nethramg Dec 8, 2025
2ea6375
Merge branch 'dell:pub/k8s_telemetry' into pub/k8s_telemetry
nethramg Dec 8, 2025
96fe13a
remove timezone from schema
priti-parate Dec 8, 2025
62064ac
pylint fixes
nethramg Dec 8, 2025
41244b7
Merge pull request #3781 from priti-parate/pub/k8s_telemetry
abhishek-sa1 Dec 8, 2025
06f92ff
update the kubelet files
sakshi-singla-1735 Dec 8, 2025
8a62c3d
updating csi poll value
sakshi-singla-1735 Dec 8, 2025
0e6d6e5
removed csi values part
sakshi-singla-1735 Dec 8, 2025
b808a94
update kubelet
sakshi-singla-1735 Dec 8, 2025
7054326
updating csi poll value
sakshi-singla-1735 Dec 8, 2025
310e3e0
Merge pull request #3782 from sakshi-singla-1735/pub/k8s_telemetry
snarthan Dec 8, 2025
9683a35
Adding the login node details in pxe mapping file
nethramg Dec 8, 2025
ccaf8d2
Merge branch 'dell:pub/k8s_telemetry' into pub/k8s_telemetry
abhishek-sa1 Dec 8, 2025
c79404e
Merge pull request #3778 from nethramg/pub/k8s_telemetry
abhishek-sa1 Dec 8, 2025
eecd401
Timezone Fix
Milisha-Gupta Dec 8, 2025
ba9d3f9
Timezone Fix
Milisha-Gupta Dec 8, 2025
838536c
testing changes
Milisha-Gupta Dec 8, 2025
87cadeb
testing changes
Milisha-Gupta Dec 8, 2025
e285df2
testing changes
Milisha-Gupta Dec 8, 2025
f2edf2d
Update validate_oim_timezone.yml
Milisha-Gupta Dec 8, 2025
3aae5e8
Merge pull request #3783 from Milisha-Gupta/pub/k8s_telemetry
abhishek-sa1 Dec 8, 2025
4236181
Merge branch 'dell:pub/k8s_telemetry' into pub/k8s_telemetry
abhishek-sa1 Dec 8, 2025
61a46db
Merge pull request #3777 from abhishek-sa1/pub/k8s_telemetry
abhishek-sa1 Dec 9, 2025
187f53f
Merge pull request #3773 from VrindaMarwah/pub/k8s_telemetry
jagadeeshnv Dec 10, 2025
d85bd97
Merge branch 'pub/k8s_telemetry' into pub/k8s_telemetry
abhishek-sa1 Dec 10, 2025
9a49953
Update ci-group-slurm_control_node_x86_64.yaml.j2
balajikumaran-c-s Dec 10, 2025
ffe6ae0
Update ci-group-login_node_x86_64.yaml.j2
balajikumaran-c-s Dec 10, 2025
7f26e39
Update ci-group-login_compiler_node_x86_64.yaml.j2
balajikumaran-c-s Dec 10, 2025
127d1a2
Update ci-group-slurm_node_x86_64.yaml.j2
balajikumaran-c-s Dec 10, 2025
fa1f7e3
Update ci-group-service_kube_node_x86_64.yaml.j2
Katakam-Rakesh Dec 11, 2025
e383191
Update storage_config.json
jagadeeshnv Dec 11, 2025
3aa8d55
Merge pull request #3792 from Katakam-Rakesh/pub/k8s_telemetry
snarthan Dec 11, 2025
630a629
Merge pull request #3780 from balajikumaran-c-s/pub/k8s_telemetry
abhishek-sa1 Dec 11, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,6 @@
PRIMARY_ADMIN_IP_IN_DYNAMIC_RANGE_MSG = "primary_oim_admin_ip should not be within the dynamic_range."
PRIMARY_BMC_IP_IN_DYNAMIC_RANGE_MSG = "primary_oim_bmc_ip should not be within the dynamic_range."
DEFAULT_LEASE_TIME_FAIL_MSG = "Please provide a valid default_lease_time."
TIMEZONE_FAIL_MSG = ("Unsupported Timezone. Please check the timezone.txt file "
"for a list of valid timezones.")
ENABLE_SWITCH_BASED_FAIL_MSG = "enable_switch_based must be set to either true or false."
LANGUAGE_FAIL_MSG = "Only en_US.UTF-8 language supported"
LANGUAGE_EMPTY_MSG = "Language setting cannot be empty"
Expand Down Expand Up @@ -321,7 +319,7 @@ def json_file_mandatory(file_path):
)
INVALID_DYNAMIC_RANGE_FORMAT_MSG = (
"Invalid dynamic_range format in network_spec.yml. "
"Expected format: 'start_ip-end_ip' (e.g., 192.168.1.10-192.168.1.50)."
"Expected format: 'start_ip-end_ip' (e.g., 10.1.1.10-10.1.1.50)."
)
ADMIN_IP_HOSTNAME_COLUMN_MISSING_MSG = (
"ADMIN_IP or HOSTNAME column not found in PXE mapping file. "
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -374,26 +374,6 @@ def validate_default_lease_time(default_lease_time):
return 21600 <= int(default_lease_time) <= 31536000


# validate timezone (input_tz: str, available_timezone_file_path: str) -> bool
def validate_timezone(input_tz, available_timezone_file_path):
"""
Validates the timezone.

Args:
input_tz (str): The input timezone.
available_timezone_file_path (str): The path to the file containing available timezones.

Returns:
bool: True if the timezone is valid, False otherwise.
"""
all_timezones = []
with open(available_timezone_file_path, "r") as file:
content = file.read()
for line in content.splitlines():
all_timezones.append(line)
return input_tz in all_timezones


# Checks if the password meets the specified requirements:
# Length of at least 8 characters. Does not contain '-', '\', "'", or '"'.
def is_valid_password(password):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,12 +86,18 @@
"type": "string",
"pattern": "^(|/?([a-zA-Z0-9._-]+/)*[a-zA-Z0-9._-]+\\.yaml)$"

},
"k8s_crio_storage_size": {
"description": "Storage size for CRI-O in Gigabytes only (example: 10G, 15G, 100G)",
"type": "string",
"pattern": "^[1-9][0-9]*G$"
}
},
"required": [
"cluster_name",
"k8s_cni",
"k8s_service_addresses"
"k8s_service_addresses",
"k8s_crio_storage_size"
],
"allOf": [
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,6 @@
"type": "string",
"description": "Path to the PXE mapping file."
},
"timezone": {
"type": "string",
"description": "Timezone setting.",
"default": "GMT"
},
"language": {
"type": "string",
"description": "Language setting.",
Expand All @@ -25,7 +20,6 @@
},
"required": [
"pxe_mapping_file_path",
"timezone",
"language",
"default_lease_time"
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@
},
"server_share_path": {
"type": "string",
"pattern": "^/(?:[^/]+(?:/[^/]+)*)?$"
"pattern": "^/(?:[^/]+(?:/[^/]+)*)?/?$"
},
"client_share_path": {
"type": "string",
"pattern": "^/(?:[^/]+(?:/[^/]+)*)?$"
"pattern": "^/(?:[^/]+(?:/[^/]+)*)?/?$"
},
"client_mount_options": {
"type": "string"
Expand All @@ -54,4 +54,4 @@
"required": [
"nfs_client_params"
]
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,6 @@
create_error_msg = validation_utils.create_error_msg
create_file_path = validation_utils.create_file_path

def load_oim_metadata(metadata_file_path):
with open(metadata_file_path, 'r') as file:
metadata = yaml.safe_load(file)
return metadata

metadata_file_path = '/opt/omnia/.data/oim_metadata.yml'
metadata = load_oim_metadata(metadata_file_path)
oim_timezone = metadata['oim_timezone']

# Expected header columns (case-insensitive)
required_headers = [
"FUNCTIONAL_GROUP_NAME",
Expand Down Expand Up @@ -635,9 +626,6 @@ def validate_provision_config(
create_error_msg("language", input_file_path, en_us_validation_msg.LANGUAGE_FAIL_MSG)
)

timezone_file_path = os.path.join(
module_utils_base, "input_validation", "common_utils", "timezone.txt"
)
pxe_mapping_file_path = data.get("pxe_mapping_file_path", "")
if pxe_mapping_file_path and validation_utils.verify_path(pxe_mapping_file_path):
try:
Expand Down Expand Up @@ -672,31 +660,6 @@ def validate_provision_config(
)
)

timezone = data["timezone"]
if not validation_utils.validate_timezone(timezone, timezone_file_path):
errors.append(
create_error_msg(
"timezone",
timezone,
en_us_validation_msg.TIMEZONE_FAIL_MSG,
)
)

# Normalize input and system timezones for comparison
input_timezone = (timezone or "").strip()
system_timezone = (oim_timezone or "").strip()

# Compare both timezones (case-insensitive)
if system_timezone.lower() != input_timezone.lower():
errors.append(
create_error_msg(
"timezone_mismatch",
f"Input: {input_timezone}, OIM: {system_timezone}",
"Timezone mismatch detected. Ensure both timezones match; "
"refer to timezone.txt.",
)
)

default_lease_time = data["default_lease_time"]
if not validation_utils.validate_default_lease_time(default_lease_time):
errors.append(
Expand Down
59 changes: 45 additions & 14 deletions common/library/module_utils/local_repo/process_parallel.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
import subprocess
import time
import threading
import requests
import traceback
import yaml
import requests
from jinja2 import Template
from ansible.module_utils.local_repo.common_functions import (
load_yaml_file,
Expand All @@ -41,7 +41,12 @@
def load_docker_credentials(vault_yml_path, vault_password_file):
"""
Decrypts an Ansible Vault YAML file, extracts docker_username and docker_password,
and optionally validates them by logging in to Docker Hub if both are present.
and validates them using Docker Hub API.

Validation Logic:
- Validates credentials via Docker Hub REST API
- Returns credentials if authentication succeeds (HTTP 200)
- Raises RuntimeError for all authentication failures

Args:
vault_yml_path (str): Path to the encrypted Ansible Vault YAML file.
Expand All @@ -51,7 +56,9 @@ def load_docker_credentials(vault_yml_path, vault_password_file):
tuple: (docker_username, docker_password) or (None, None) if not provided.

Raises:
RuntimeError: If decryption, parsing, or Docker login fails (when credentials are provided).
RuntimeError: If vault decryption fails, YAML parsing fails, Docker Hub API
authentication fails, network errors occur, or requests module
is not installed.
"""
try:
env = os.environ.copy()
Expand All @@ -72,24 +79,48 @@ def load_docker_credentials(vault_yml_path, vault_password_file):
if not docker_username or not docker_password:
return None, None

# Validate Docker Hub credentials
response = requests.post(
"https://hub.docker.com/v2/users/login/",
json={"username": docker_username, "password": docker_password},
timeout=10
)
# Validate credentials using Docker Hub API
try:
response = requests.post(
"https://hub.docker.com/v2/users/login/",
json={"username": docker_username, "password": docker_password},
timeout=30
)

if response.status_code == 200:
return docker_username, docker_password

if response.status_code == 429:
raise RuntimeError("Docker Hub rate limit exceeded. Please try again later.")

# Handle authentication failures
if response.status_code == 401:
raise RuntimeError("Invalid Docker Hub username or password.")

# Handle malformed client request
if response.status_code == 400:
raise RuntimeError("Bad request sent to Docker Hub. Check username/password format.")

# Handle server-side errors (5xx)
if 500 <= response.status_code < 600:
raise RuntimeError(
f"Docker Hub server error (status {response.status_code}). Try again later."
)

if response.status_code != 200:
raise RuntimeError("Docker Hub authentication failed: Invalid username or password.")
# Catch-all for other unexpected statuses
raise RuntimeError(
f"Docker Hub authentication failed with unexpected status {response.status_code}."
)

return docker_username, docker_password
except requests.RequestException as error:
raise RuntimeError(
"Unable to reach Docker Hub (network DNS/timeout/SSL issue)."
) from error

except subprocess.CalledProcessError as error:
raise RuntimeError(f"Vault decryption failed: {error.stderr.strip()}") from error
except yaml.YAMLError as error:
raise RuntimeError(f"Failed to parse decrypted YAML: {error}") from error
except requests.RequestException as error:
raise RuntimeError(f"Failed to contact Docker Hub: {error}") from error

def log_table_output(table_output, log_file):
"""
Expand Down
Loading