Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
cd107a7
Merge pull request #4294 from mithileshreddy04/pub/q2_dev
mithileshreddy04 Apr 20, 2026
4f0d824
Feature branch sync - pub/telemetry to pub/q2_dev (#4293)
abhishek-sa1 Apr 21, 2026
772d7b1
IB nic ip assignment
Nagachandan-P Apr 22, 2026
19d17ad
update MinIO and registry images to fixed tagged versions, omnia cor…
mithileshreddy04 Apr 24, 2026
7e5bb0b
Merge branch 'dell:pub/q2_dev' into pub/q2_dev
Nagachandan-P Apr 24, 2026
df70a83
Merge pull request #4302 from Nagachandan-P/pub/q2_dev
snarthan Apr 27, 2026
650c76a
vast client installation
Nagachandan-P Apr 27, 2026
7fe563c
single template way
Nagachandan-P Apr 27, 2026
9e335e1
Merge pull request #4322 from Nagachandan-P/pub/q2_dev
snarthan Apr 28, 2026
e4fc455
fix(OMN01D-2164): prompt OME credentials only when enable_bmc_discove…
sujit-jadhav Apr 28, 2026
9430b64
fix(OMN01D-2168): fail explicitly when discovery_mechanism is not pro…
sujit-jadhav Apr 28, 2026
3ff9ac3
fix(OMN01D-2169): add L1 input validation for discovery.yml
sujit-jadhav Apr 29, 2026
d3238ce
fix(OMN01D-2225): improve OME authentication and reachability error m…
sujit-jadhav Apr 29, 2026
c0551de
fix(OMN01D-2226): correct discovery completion message next steps
sujit-jadhav Apr 29, 2026
4c0c053
fix(OMN01D-2227): escape backslash in docstring to suppress SyntaxWar…
sujit-jadhav Apr 29, 2026
ee5addd
fix(OMN01D-2230): correct GROUP_NAME and PARENT_SERVICE_TAG in PXE ma…
sujit-jadhav Apr 29, 2026
26a0c4d
fix(OMN01D-2231): detect and fail on duplicate OME static group assig…
sujit-jadhav Apr 29, 2026
c879c86
fix(OMN01D-2232): validate OME group names against supported function…
sujit-jadhav Apr 29, 2026
ee36f6f
Merge branch 'pub/q2_dev' into pub/q2_dev
jagadeeshnv Apr 29, 2026
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
1 change: 1 addition & 0 deletions .github/workflows/ansible-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ on:
- release_1.7.1
- pub/build_stream
- pub/q2_dev
- pub/telemetry

jobs:
build:
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/pylint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ on:
- release_1.7.1
- pub/build_stream
- pub/q2_dev
- pub/telemetry

jobs:
build:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@
"telemetry_config": "telemetry_config.yml",
"high_availability_config": "high_availability_config.yml",
"build_stream_config": "build_stream_config.yml",
"gitlab_config": "gitlab_config.yml"
"gitlab_config": "gitlab_config.yml",
"discovery_config": "discovery_config.yml"
# "additional_software": "additional_software.json"
}

Expand Down Expand Up @@ -103,6 +104,7 @@
# "high_availability": [files["high_availability_config"]],
# "additional_software": [files["additional_software"]],
"build_stream": [files["build_stream_config"]],
"discovery": [files["discovery_config"]],
"gitlab": [files["gitlab_config"], files["build_stream_config"]],
"all": [
files["local_repo_config"],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@
"and Ports fields.")
SWITCH_DETAILS_NO_BMC_DETAILS_MSG = ("If switch details are provided then bmc_detail's "
"static_range must also be provided.")
INVALID_GROUP_NAME_MSG = "Groups must be defined in the form of grp<n> where n is 0-100, or SU<n> where n is 1-100."
INVALID_GROUP_NAME_MSG = "Groups must be defined in the form of grp<n> where n is 0-99."
INVALID_LOCATION_ID_MSG = ("location_id must follow the format SU-<n>.RACK-<n> where n is 0-99. "
"This input is case-sensitive. Please use uppercase letters only.")
INVALID_ATTRIBUTES_ROLE_MSG = ("Please provide valid attributes for the role, "
Expand Down Expand Up @@ -264,6 +264,75 @@ def switch_snmp3_username_fail_msg(min_username_length, max_length):
"service k8s/slurm roles in the mapping file or remove ldms from "
"software_config.json and rerun the playbook.")

# PowerScale telemetry validation messages
POWERSCALE_VICTORIA_REQUIRED_MSG = (
"PowerScale telemetry requires VictoriaMetrics to be deployed. "
"When powerscale_configurations.powerscale_telemetry_support is true, 'victoria' must be included in "
"telemetry_collection_type (e.g., 'victoria' or 'victoria,kafka')."
)
POWERSCALE_CSI_DRIVER_MISSING_MSG = (
"csi_driver_powerscale is not configured in software_config.json. "
"PowerScale telemetry requires the CSI driver for PowerScale to be configured."
)
POWERSCALE_SERVICE_CLUSTER_MISSING_MSG = (
"service cluster is not defined in functional_groups_config.yml. "
"PowerScale telemetry requires a service cluster."
)
POWERSCALE_CONFIGURATIONS_MISSING_MSG = (
"powerscale_configurations section is required and must contain powerscale_telemetry_support."
)
POWERSCALE_OTEL_STORAGE_SIZE_INVALID_MSG = (
"must be a non-empty string in format 'XGi' (e.g., '5Gi')"
)
POWERSCALE_CSM_VALUES_PATH_REQUIRED_MSG = (
"csm_observability_values_file_path is required when powerscale_configurations.powerscale_telemetry_support is true. "
"Please provide the path to the CSM Observability values.yaml file."
)
POWERSCALE_AUTH_PROXY_HOST_MISSING_MSG = (
"karaviMetricsPowerscale.authorization.proxyHost is required in the CSM Observability values file "
"when karaviMetricsPowerscale.authorization.enabled is true. "
"Please provide the hostname or IP of the CSM Authorization Proxy server."
)
def powerscale_csm_values_not_found_msg(path):
"""Returns error message when CSM Observability values.yaml file is not found."""
return (
f"CSM Observability values.yaml file not found at '{path}'. "
"Please verify the file path is correct."
)
POWERSCALE_CSM_VALUES_INVALID_YAML_MSG = (
"CSM Observability values.yaml must contain a valid YAML dictionary."
)
def powerscale_csm_values_parse_error_msg(error):
"""Returns error message when CSM Observability values.yaml fails to parse."""
return f"Failed to parse CSM Observability values.yaml: {error}"
POWERSCALE_CSM_VALUES_MISSING_KARAVI_SECTION_MSG = (
"CSM Observability values.yaml is missing 'karaviMetricsPowerscale' section."
)
POWERSCALE_CSM_METRICS_IMAGE_MISSING_MSG = (
"CSM Metrics PowerScale image is required in CSM Observability values.yaml."
)
POWERSCALE_OTEL_COLLECTOR_IMAGE_MISSING_MSG = (
"OTEL Collector image is required in CSM Observability values.yaml."
)
POWERSCALE_ADDITIONAL_ENDPOINTS_URL_EMPTY_MSG = (
"Each additional_remote_write_endpoint must have a non-empty 'url' field."
)
POWERSCALE_ADDITIONAL_ENDPOINTS_URL_INVALID_MSG = (
"URL must start with 'http://' or 'https://'."
)
def powerscale_image_version_mismatch_msg(image_name, values_image, service_k8s_image):
"""Returns error message when CSM values.yaml image version doesn't match service_k8s.json."""
return (
f"Image version mismatch for '{image_name}': "
f"CSM Observability values.yaml has '{values_image}' but "
f"service_k8s.json has '{service_k8s_image}'. "
f"Please update service_k8s.json to match the values.yaml version "
f"and re-run local_repo.yml to mirror the correct image to Pulp."
)
POWERSCALE_SERVICE_K8S_JSON_NOT_FOUND_MSG = (
"service_k8s.json not found. Cannot validate PowerScale telemetry image versions. "
"Please ensure local_repo.yml has been executed."
)
def boolean_fail_msg(value):
"""Returns a formatted message indicating boolean_fail_msg."""
return f"{value} must be set to either true or false."
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Discovery Configuration",
"type": "object",
"properties": {
"enable_bmc_discovery": {
"type": "boolean",
"description": "Enable BMC discovery via OME. When true, ome_ip must be a valid IP address."
},
"ome_ip": {
"type": "string",
"description": "IP address of the Dell OpenManage Enterprise (OME) instance."
}
},
"required": [
"enable_bmc_discovery",
"ome_ip"
],
"allOf": [
{
"if": {
"properties": {
"enable_bmc_discovery": { "const": true }
}
},
"then": {
"properties": {
"ome_ip": {
"type": "string",
"minLength": 7,
"pattern": "^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$",
"errorMessage": "ome_ip must be a valid IPv4 address when enable_bmc_discovery is true. Example: 192.168.1.100"
}
}
}
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"type": "boolean",
"description": "Enable or disable NVIDIA DCGM (Data Center GPU Manager) on GPU compute nodes. When true, nvidia-dcgm.service is started during cloud-init provisioning. Default: true"
},
"idrac_telemetry_collection_type": {
"telemetry_collection_type": {
"anyOf": [
{
"type": "string",
Expand Down Expand Up @@ -43,6 +43,53 @@
"default": 10001,
"description": "LDMS sampler port on compute nodes. Valid range: 10001-10100. Default: 10001"
},
"powerscale_configurations": {
"type": "object",
"properties": {
"powerscale_telemetry_support": {
"type": "boolean",
"default": true,
"description": "Enable or disable PowerScale telemetry support. Requires csi_driver_powerscale in software_config.json."
},
"powerscale_log_enabled": {
"type": "boolean",
"default": false,
"description": "Enable or disable PowerScale log collection (syslog to VictoriaLogs). Requires powerscale_telemetry_support: true."
},
"otel_collector_storage_size": {
"type": "string",
"pattern": "^[0-9]+(Ki|Mi|Gi|Ti|Pi|Ei)$",
"default": "5Gi",
"description": "PVC size for OTEL Collector metric batching and buffering."
},
"csm_observability_values_file_path": {
"type": "string",
"description": "Path to the user-provided Helm values file for karavi-observability chart. Required when powerscale_telemetry_support is true."
},
"additional_remote_write_endpoints": {
"type": "array",
"default": [],
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"pattern": "^https?://",
"description": "VictoriaMetrics remote_write endpoint URL."
},
"tls_insecure_skip_verify": {
"type": "boolean",
"default": false,
"description": "Skip TLS certificate verification for this endpoint."
}
},
"required": ["url"]
},
"description": "Additional VictoriaMetrics remote_write endpoints. vmagent writes to all configured endpoints."
}
},
"required": ["powerscale_telemetry_support", "otel_collector_storage_size", "csm_observability_values_file_path"]
},
"ldms_sampler_configurations": {
"anyOf": [
{
Expand Down Expand Up @@ -126,7 +173,7 @@
]
}
},
"required": ["idrac_telemetry_support", "dcgm_support", "idrac_telemetry_collection_type", "ldms_sampler_configurations", "ldms_agg_port", "ldms_store_port", "ldms_sampler_port" ],
"required": ["idrac_telemetry_support", "dcgm_support", "telemetry_collection_type", "ldms_sampler_configurations", "ldms_agg_port", "ldms_store_port", "ldms_sampler_port", "powerscale_configurations" ],
"$defs": {
"kafka_configurations": {
"type": "object",
Expand Down Expand Up @@ -177,7 +224,7 @@
}
},
"uniqueItems": true,
"description": "IMPORTANT: At least one Kafka topic must be defined. Topic names 'idrac' and 'ldms' are CONSTANTS. 'idrac' is required if idrac_telemetry_support is true and kafka is in idrac_telemetry_collection_type. 'ldms' is required if LDMS software is configured in software_config.json (automatic detection). Only partition counts can be changed.",
"description": "IMPORTANT: At least one Kafka topic must be defined. Topic names 'idrac' and 'ldms' are CONSTANTS. 'idrac' is required if idrac_telemetry_support is true and kafka is in telemetry_collection_type. 'ldms' is required if LDMS software is configured in software_config.json (automatic detection). Only partition counts can be changed.",
"errorMessage": {
"minItems": "At least 1 Kafka topic must be defined. Configure based on enabled features.",
"maxItems": "Maximum 2 topics allowed: 'idrac' and 'ldms'",
Expand All @@ -194,18 +241,9 @@
],
"additionalProperties": false
},
"victoria_configurations": {
"victoria_metrics_configurations": {
"type": "object",
"properties": {
"deployment_mode": {
"type": "string",
"enum": ["single-node", "cluster"],
"default": "cluster",
"description": "VictoriaMetrics deployment mode. 'single-node' for simple deployment (1 pod), 'cluster' for high-availability deployment (7 pods). Default: 'cluster'",
"errorMessage": {
"enum": "deployment_mode must be either 'single-node' or 'cluster'"
}
},
"persistence_size": {
"type": "string",
"pattern": "^[0-9]+(Ki|Mi|Gi|Ti|Pi|Ei)$"
Expand All @@ -216,19 +254,37 @@
}
},
"required": [
"deployment_mode",
"persistence_size",
"retention_period"
],
"additionalProperties": false
},
"victoria_logs_configurations": {
"type": "object",
"description": "VictoriaLogs cluster mode configuration. Deployed alongside VictoriaMetrics when 'victoria' is in collection type.",
"properties": {
"storage_size": {
"type": "string",
"pattern": "^[0-9]+(Ki|Mi|Gi|Ti|Pi|Ei)$",
"default": "8Gi",
"description": "Storage size per vlstorage replica PVC. Total = storage_size x 3 replicas.",
"errorMessage": "storage_size must be a valid Kubernetes PVC size (e.g., '8Gi', '50Gi', '1Ti')"
},
"retention_period": {
"type": "integer",
"minimum": 24
}
},
"required": ["storage_size", "retention_period"],
"additionalProperties": false
}
},
"allOf": [
{
"if": {
"properties": {
"idrac_telemetry_support": { "const": true },
"idrac_telemetry_collection_type": { "pattern": "(?i)^kafka$" }
"telemetry_collection_type": { "pattern": "(?i)^kafka$" }
}
},
"then": {
Expand All @@ -242,30 +298,32 @@
"if": {
"properties": {
"idrac_telemetry_support": { "const": true },
"idrac_telemetry_collection_type": { "pattern": "(?i)^victoria$" }
"telemetry_collection_type": { "pattern": "(?i)^victoria$" }
}
},
"then": {
"required": ["victoria_configurations"],
"required": ["victoria_metrics_configurations", "victoria_logs_configurations"],
"properties": {
"victoria_configurations": { "$ref": "#/$defs/victoria_configurations" }
"victoria_metrics_configurations": { "$ref": "#/$defs/victoria_metrics_configurations" },
"victoria_logs_configurations": { "$ref": "#/$defs/victoria_logs_configurations" }
}
}
},
{
"if": {
"properties": {
"idrac_telemetry_support": { "const": true },
"idrac_telemetry_collection_type": {
"telemetry_collection_type": {
"pattern": "(?i)^(victoria,kafka|kafka,victoria)$"
}
}
},
"then": {
"required": ["kafka_configurations", "victoria_configurations"],
"required": ["kafka_configurations", "victoria_metrics_configurations", "victoria_logs_configurations"],
"properties": {
"kafka_configurations": { "$ref": "#/$defs/kafka_configurations" },
"victoria_configurations": { "$ref": "#/$defs/victoria_configurations" }
"victoria_metrics_configurations": { "$ref": "#/$defs/victoria_metrics_configurations" },
"victoria_logs_configurations": { "$ref": "#/$defs/victoria_logs_configurations" }
}
}
}
Expand Down
Loading
Loading