Skip to content

fix(orchestrator): fix runtime crashes and test automation API compatibility - #5072

Closed
sujit-jadhav wants to merge 151 commits into
mainfrom
issue-4849-omnia-modernization
Closed

fix(orchestrator): fix runtime crashes and test automation API compatibility#5072
sujit-jadhav wants to merge 151 commits into
mainfrom
issue-4849-omnia-modernization

Conversation

@sujit-jadhav

Copy link
Copy Markdown
Collaborator

Summary

  • Fix generate_inventories variable reference: use input_project_dir instead of orchestrator_input_dir (which was never set on localhost)
  • Fix k8s version extraction: handle None from regex_search, fallback to kubeadm package name when functional layer name lacks version
  • Port discovery fix: add fallback default for input_project_dir in include_vars
  • Fix test automation: update sync_files/clone_repo calls to match new omnia_auto API
  • Make run_validation.sh executable
  • Encrypt test_creds.yml with Ansible Vault

Test plan

  • Verified orchestrator.yml runs successfully with --tag prepare
  • Verified test automation runs successfully (5/5 tests passed)

abhishek-sa1 and others added 30 commits June 24, 2026 17:33
Feature branch sync - pub/q2_upgrade to q3_main
- Move 13 playbook directories into src/playbooks/

- Move common/ into src/common/

- Update root ansible.cfg: common/ -> src/common/

- Update 13 subsystem ansible.cfg: reduce ../ for common/

- Update credential_utility ansible.cfg: reduce ../ for common/

- Update all role_path and playbook_dir references in YAML files

- Update decrypt_include_encrypt.yml internal path

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>
- git mv build_stream -> src/build_stream/
- Self-contained Python code, no path updates needed
- build_images.sh stays separate (not merged into omnia.sh)

Part of: Monorepo Migration Plan - Phase 1

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>
- git mv input -> src/input
- git mv examples -> src/examples
- Update omnia.sh container repo paths: /omnia/input -> /omnia/src/input
- Add pub/q3_main to ansible-lint.yml and pylint.yml (CI branch triggers)
- Remove obsolete pub/q2_dev and pub/q2_ansible from CI workflows
- Host data paths (/opt/omnia/input) unchanged

Part of: Monorepo Migration Plan - Phase 1

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>
…-to-src

PR1: Move playbooks/ and common/ to src/, update all paths
…am-to-src

PR2: Move build_stream/ to src/build_stream/
…mples-to-src

PR3: Move input/ and examples/ to src/
* PR4: monorepo path fixes — omnia.sh, containers, playbook paths, .gitignore BATS helpers

* PR4: remove legacy test_pr4_validation.sh (replaced by BATS test)

* feat(PR4): migrate containers to src/containers/ + fix .gitignore paths

- Migrate container build scripts and Containerfiles to src/containers/
- Add build_images.sh, _common.sh, README.md for container build infra
- Add per-container build.sh for: omnia_core, omnia_auth, omnia_build_stream,
  ldms, kafkapump, victoriapump, telemetry_receiver, image_builder
- Replace Dockerfile with Containerfile naming convention
- Fix .gitignore: stale build_stream/ paths updated to src/build_stream/

* Update omnia.sh

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

---------

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>
Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>
* Add SDD CI/CD checks to PR gate pipeline

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Update ansible-lint to run only on changed files and add gitleaks config

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Fix yamllint config for ansible-lint compatibility and exclude Ansible files from yamllint

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Add Ansible collections cache to speed up ansible-lint workflow

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

---------

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>
…RPM documentation` (#4803)

* PR4: monorepo path fixes — omnia.sh, containers, playbook paths, .gitignore BATS helpers

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

* PR4: remove legacy test_pr4_validation.sh (replaced by BATS test)

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

* feat(PR4): migrate containers to src/containers/ + fix .gitignore paths

- Migrate container build scripts and Containerfiles to src/containers/
- Add build_images.sh, _common.sh, README.md for container build infra
- Add per-container build.sh for: omnia_core, omnia_auth, omnia_build_stream,
  ldms, kafkapump, victoriapump, telemetry_receiver, image_builder
- Replace Dockerfile with Containerfile naming convention
- Fix .gitignore: stale build_stream/ paths updated to src/build_stream/

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

* feat(PR5): separate RPM build from omnia-artifactory into src/rpm_build/

- Import LDMS RPM build scripts from omnia-artifactory RpmFile/ldms/build/
- Add src/rpm_build/build_rpm.sh (entry point, updated paths for monorepo)
- Add src/rpm_build/ldms/build_ldms.rockylinux10.bash (Rocky 10 build)
- Add src/rpm_build/ldms/start_build_container.rockylinux10.bash (container launcher)
- Add src/rpm_build/ldms/configure.sh (LDMS configure flags)
- Add src/rpm_build/ldms/rpm_postuninstall.txt (RPM post-uninstall hook)
- Source: omnia-artifactory (omnia-container branch) RpmFile/

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

* Feature/mono pr4 build and path fixes (#4795)

* PR4: monorepo path fixes — omnia.sh, containers, playbook paths, .gitignore BATS helpers

* PR4: remove legacy test_pr4_validation.sh (replaced by BATS test)

* feat(PR4): migrate containers to src/containers/ + fix .gitignore paths

- Migrate container build scripts and Containerfiles to src/containers/
- Add build_images.sh, _common.sh, README.md for container build infra
- Add per-container build.sh for: omnia_core, omnia_auth, omnia_build_stream,
  ldms, kafkapump, victoriapump, telemetry_receiver, image_builder
- Replace Dockerfile with Containerfile naming convention
- Fix .gitignore: stale build_stream/ paths updated to src/build_stream/

* Update omnia.sh

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

---------

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

* feat(pr5): add aarch64 image-builder support, rewrite container/RPM READMEs

- image_builder/build.sh: auto-detect host arch (uname -m) to produce
  image-build-el10 (x86_64) or image-build-aarch64 (aarch64); same
  Containerfile.el10 handles both via multi-arch Go download
- Docker mode maps platform from docker info to correct image name
- containers/README.md: complete rewrite with directory layout, dual-arch
  docs, build groups, parameters table, Docker vs Podman comparison,
  troubleshooting; removed stale omnia_branch parameter (not implemented)
- rpm_build/README.md: new file documenting build_rpm.sh workflow, arch
  support (x86_64 + aarch64 auto-detected), parameters, prerequisites,
  relationship between container images and RPM packages

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

* sync: merge files staging

Signed-off-by: abhishek-sa1 <abhishek.sa3@dell.com>
Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

* copyright update

Signed-off-by: abhishek-sa1 <abhishek.sa3@dell.com>
Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

* fix: add execute permissions to shell scripts

- src/main/omnia.sh (chmod +x)
- src/containers/build_images.sh (chmod +x)
- src/rpm_build/build_rpm.sh (chmod +x)
- Update copyright year to 2026 in omnia.sh

These scripts need execute permissions to run properly on Linux systems. Signed-off-by: abhishek-sa1 <abhishek.sa3@dell.com>

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

* fix(rpm_build): fix OVIS clone logic and add execute permissions

- Remove git pull from main branch (causes rebase conflicts)
- Skip update if OVIS repo already exists (use cloned version tag)
- Add execute permissions to all shell scripts in:
  - src/rpm_build/ (4 scripts)
  - src/containers/ (14 scripts)

Fixes:
- OVIS v4.5.2 tag clone conflicts with main branch pull
- Permission denied errors on build scripts
- Incorrect relative path in container

Signed-off-by: abhishek-sa1 <abhishek.sa3@dell.com>
Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

* fix(rpm_build): fix recursive call and path

Signed-off-by: abhishek-sa1 <abhishek.sa3@dell.com>
Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

* fix: resolve 4 ShellCheck errors (SC2199, SC1128)

Changes:
- Fix array expansion in [[ ]] - use \ instead of \
  * build_images.sh line 94: VALID_PARAMS check
  * build_images.sh line 152: COMMON_PARAMS check
  * build_images.sh line 155: allowed_params check
- Move shebang to first line in migrate_strimzi_crds.sh
- Revert LDMS version to 4.5.1 (user preference)
- Remove v4.5.2 autoconf patch (not needed for 4.5.1)

The [*] expansion concatenates array elements with spaces, which is
exactly what the regex pattern matching needs. The surrounding spaces
in the pattern ensure exact parameter name matching.

ShellCheck: 0 errors, 38 warnings (warnings not fixed per user request)

Signed-off-by: abhishek-sa1 <abhishek.sa3@dell.com>
Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

---------

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>
Signed-off-by: abhishek-sa1 <abhishek.sa3@dell.com>
… path mapping

Syncs upstream staging changes to mono-repo structure:

Build_stream tests restructure:
- Delete end_to_end/ (7 E2E test files)
- Move integration/ tests -> unit/ (30+ test files)
- Delete core/catalog/tests/ (moved to tests/unit/core/catalog/)
- Add new unit tests: deploy, cleanup, s3_service, extract_bundle_name
- Update conftest.py, README.md, dependencies.py

Bug fixes and features:
- OMNDF-369: Add mandatory router field to admin_network for DHCP gateway
- Fix /etc/hosts not removing in slurm remove_node
- Update CUDA driver install template
- Validation for mount_on_oim storage
- Validation formatting improvements
- Clarify Omnia config directory in omnia.sh
- OpenCHAMI deploy/refresh/configs fixes
- Cloud-init service_kube_control_plane update
- Upgrade prepare + network_spec template + OpenCHAMI upgrade

Path mapping applied:
  build_stream/ -> src/build_stream/
  common/ -> src/common/
  input/ -> src/input/
  input_validation/ -> src/playbooks/input_validation/
  omnia.sh -> src/main/omnia.sh
  prepare_oim/ -> src/playbooks/prepare_oim/
  provision/ -> src/playbooks/provision/
  upgrade/ -> src/playbooks/upgrade/

Source commits from staging: c2c09bd, ce76741, edded33,
61c2500, de13dd2, fa7b90b, 8f4df2a, 55f0920,
afeb827, ed53e87, c47b8cd, d730b7d, c30242f,
1e1feb1, 6211bff, 155b991
…mits

Feature/sync staging 16commits to q3_main
Add --limit 0 to pulp rpm distribution list commands to disable
pagination and return all distributions. Without this flag, Pulp's
default pagination truncates results when the number of repos
exceeds the page size, causing downstream packages (e.g. Slurm)
to not be found during image builds.

This PR closes issue #4833

Signed-off-by: John Lockman <jlockman3@gmail.com>
Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>
* feat(build_manager): complete image build manager refactoring

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

* Github flow update

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

---------

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>
)

* Move provision to orchestrator domain and rename provision references to orchestration

- Move src/playbooks/provision/ to src/orchestrator/ (independent domain)
- Move src/playbooks/discovery/ to src/discovery/ (independent domain)
- Rename provision_validations role to orchestrator_validations
- Rename provision.yml to orchestrator.yml
- Rename provision_* variables to orchestration_* across orchestrator roles
- Rename provision_completion.yml to orchestration_completion.yml
- Rename provision_mapping_nodes.yml to orchestration_mapping_nodes.yml
- Update user-facing messages to reference orchestrator.yml
- Add orchestrator_config.json schema and validation
- Fix admin_nic_ip variable scoping in deploy_openchami role
- Add retry logic for SMD group data query (3 retries, 15s delay)
- Add deploy_openchami role (moved from prepare_oim)
- Add ARCHITECTURE_REFACTOR.md documenting the refactoring

Signed-off-by: Sujit Jadhav <sujit.jadhav@dell.com>

* Read S3 from build_status, remove minio/registry/git-clone from orchestrator

- Orchestrator reads S3 endpoint_url and bucket from image_build_manager's
  build_status.yml via image_build_manager_output_path in orchestrator_config
- Remove s3_configurations from storage_config.yml (now from build_status)
- Simplify BSS template to use endpoint_url directly (no provider checks)
- Remove minio, registry, s3_bucket, policy_update from deploy_openchami
- Remove git clone of OpenCHAMI deployment-recipes (quadlets via RPM)
- Remove s3 templates dir, inventory.yaml.j2, and related vars
- Remove data_oci_dir, data_s3_dir, s3_work_dir (managed by image_build_manager)
- Remove old openchami role from prepare_oim/deploy_containers
- Move input files from src/input/ to domain-specific input dirs

Signed-off-by: Sujit Jadhav <sujit.jadhav@dell.com>

* Update omnia.sh
Signed-off-by: Sujit Jadhav <sujit.jadhav@dell.com>

* Add telemetry common templates

Signed-off-by: Sujit Jadhav <sujit.jadhav@dell.com>

---------

Signed-off-by: Sujit Jadhav <sujit.jadhav@dell.com>
Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>
Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>
* Move BuildStream Code as per Domain Segregation

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Remove the files from the source location

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Move the playbooks and roles as per domain segregation

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Remove postgres and bs roles from legacy paths

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

---------

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>
Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>
…tion

Image Build Manager — Self-Contained Domain Refactoring
Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>
* telemetry repo with idrac and ldms telemetry support

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>

* copy telemetry input files using omnia.sh

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>

* deploy kafka and victoria templates

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>

* update kafka and victoria variables

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>

* telemetry credential generation

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>

* update condition for telemetry metrics

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>

* seprate secrets tempate for kafka and idrac

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>

* remove ldms.json

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>

---------

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>
…or automation (#4885)

fix(omnia.sh): move admin_nic_ip prompt to init_container_config, fix stdin handling
 
- Move admin_nic_ip prompt from setup_container() to init_container_config()
  so it is collected alongside other interactive inputs (after storage config,
  before password), improving the user experience flow.
 
- Replace infinite while-loop validation on admin_nic_ip with a single check
  and exit. Prevents infinite loop when stdin is piped or reaches EOF.
 
- Remove -ti flag from podman exec in fetch_config(). The -t flag allocates
  a pseudo-TTY which consumes piped stdin, breaking automation and reinstall
  flows. The command only reads a file, no interactive input needed.
 
- Add admin_nic_ip extraction to fetch_config() so the "Retain Existing
  configuration" reinstall path retrieves admin_nic_ip from metadata instead
  of re-prompting.
 
- In setup_container(), skip admin_nic_ip prompt if already set by
  init_container_config() (fresh install) or fetch_config() (retain reinstall).

Signed-off-by: balajikumaran.cs <balajikumaran.cs@dell.com>
…kage/image downloads in air-gapped environments (#4886)

* telemetry repo with idrac and ldms telemetry support (#4879)

* telemetry repo with idrac and ldms telemetry support

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>

* copy telemetry input files using omnia.sh

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>

* deploy kafka and victoria templates

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>

* update kafka and victoria variables

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>

* telemetry credential generation

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>

* update condition for telemetry metrics

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>

* seprate secrets tempate for kafka and idrac

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>

* remove ldms.json

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>

---------

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>
Signed-off-by: Narthan_S <narthan.s@dell.com>

* feat(repo_manager): repository management system with linting fixes

Existing Features:
- Automated local repository setup and management for air-gapped environments
- Pulp server deployment with HTTP/HTTPS configuration and SSL certificate generation
- Parallel downloading of RPM packages, container images, and Python packages
- software_config.json validation for defining required software packages
- Credential management with Ansible Vault encryption for secure storage
- RHEL subscription validation and repository URL configuration
- Container image mirroring from Docker Hub, Quay.io, and private registries
- Multi-architecture support (x86_64, aarch64) for container images
- Metadata tracking for repository synchronization status
- Cleanup utilities for removing outdated repositories and artifacts
- local_repo_access.yml generation for compute node repository configuration
- NFS-based shared storage for Pulp data persistence
- Comprehensive input validation with detailed error messages
- Custom Ansible callback plugin for formatted output display
- Endpoint configuration for external Pulp server connections
- Repository name migration for version upgrades
- Retry logic and error handling for network operations
- Configurable concurrency for parallel download tasks
- Detailed logging with separate log files for debugging

Linting Fixes:
- Fix 17 YAML formatting issues (trailing spaces, missing newlines, long lines)
- Fix 385+ Python style issues using autopep8
- Add comprehensive linting configuration (.ansible-lint, .pylintrc, .flake8)
- Fix log_path configuration in ansible.cfg files
- All playbooks pass ansible-lint and syntax-check validation

Signed-off-by: Narthan_S <narthan.s@dell.com>

* feat(repo_manager): Add repo_status.yml generation with software_config support

- Read cluster_os_type, cluster_os_version, and repo_config from software_config.json
- Generate repo_status.yml at /opt/omnia/output/project_default/repo_manager/
- Create output directory if it does not exist
- Quote all string values in YAML output for consistency
- Fix final_status case comparison (SUCCESS vs success) in completion tasks
- Update overall_status based on actual playbook execution result (success/failed)
- Add repo_config parameter to generate_local_repo_access module

Signed-off-by: Narthan_S <narthan.s@dell.com>

* Add repo_status.yml generation with software_config support

- Read cluster_os_type, cluster_os_version, and repo_config from software_config.json
- Generate repo_status.yml at /opt/omnia/output/project_default/repo_manager/
- Create output directory if it does not exist
- Quote all string values in YAML output for consistency
- Fix final_status case comparison (SUCCESS vs success) in completion tasks
- Update overall_status based on actual playbook execution result (success/failed)
- Add repo_config parameter to generate_local_repo_access module

Signed-off-by: Narthan_S <narthan.s@dell.com>

* removed few files not releted to code

Signed-off-by: Narthan_S <narthan.s@dell.com>

* Update repo_manager_config.yml

Signed-off-by: snarthan <narthan.s@dell.com>

* Update repo_manager_endpoint_config.yml

Signed-off-by: snarthan <narthan.s@dell.com>

* feat(repo_manager): Clean up legacy local_repo and fix PR review constraints

- Remove old src/playbooks/local_repo/ directory and update callers
- Update upgrade/prepare_oim playbooks to use repo_manager/playbooks/repo_manager.yml
- Fix hardcoded /opt/omnia paths in repo_manager vars
- Remove duplicate omnia_metadata_file definitions from role vars
- Guard metadata loading with repo_manager_metadata_support
- Add cluster_os_type, cluster_os_version, and repo_config to repo_status.yml
- Generate repo_status.yml at /opt/omnia/output/project_default/repo_manager/
- Quote all string values in YAML output
- Fix final_status case comparison in completion tasks
- Add .gitignore for credentials, output, and logs
- Update copyright year to 2026

Signed-off-by: Narthan_S <narthan.s@dell.com>

* fix(repo_manager): Address PR review constraints

- Remove old src/playbooks/local_repo/ directory and update all callers
- Update upgrade/prepare_oim/utils messages and paths to repo_manager/playbooks/repo_manager.yml
- Fix hardcoded /opt/omnia paths in repo_manager vars
- Remove duplicate omnia_metadata_file definitions
- Guard metadata loading with repo_manager_metadata_support
- Add default fallback for SELinux condition variables
- Add repo_config default fallback in generate_local_repo_access.yml
- Replace jq dependency with python3 -m json.tool
- Add .gitignore for credentials, output, and logs
- Remove stale input files (local_repo_config.yml, software_config.json, user_registry_credential.yml)

Signed-off-by: Narthan_S <narthan.s@dell.com>

* fix(repo_manager): Address PR review constraints

- Remove old src/playbooks/local_repo/ directory and update all callers
- Update upgrade/prepare_oim/utils messages and paths to repo_manager/playbooks/repo_manager.yml
- Fix hardcoded /opt/omnia paths in repo_manager vars
- Remove duplicate omnia_metadata_file definitions
- Guard metadata loading with repo_manager_metadata_support
- Add default fallback for SELinux condition variables
- Add repo_config default fallback in generate_local_repo_access.yml
- Replace jq dependency with python3 -m json.tool
- Add .gitignore for credentials, output, and logs
- Remove stale input files and config directory

Signed-off-by: Narthan_S <narthan.s@dell.com>

---------

Signed-off-by: priti-parate <140157516+priti-parate@users.noreply.github.com>
Signed-off-by: Narthan_S <narthan.s@dell.com>
Signed-off-by: snarthan <narthan.s@dell.com>
… reorganisation (#4888)

* BuildStream domain segregation - credential utility, cleanup, and app reorganization

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Addressed review comments

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* removal of input files

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

---------

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>
snarthan and others added 26 commits August 25, 2026 17:09
Signed-off-by: snarthan <narthan.s@dell.com>
…gs (#5047)

The OpenCHAMI RPM v0.2.0 has several configuration bugs that cause
deployment failures. This commit adds playbook-level fixes to work around
these issues:

1. Ensure openchami.env exists before lineinfile operations
   - The RPM ships this file, but on re-runs where RPM install is a no-op,
     the file may be absent if previously deleted or the config dir was cleaned.
   - Added file: state=touch task before lineinfile to ensure the file exists.

2. Template metadata-service.yaml with required smd_url
   - The RPM's metadata-service.yaml is missing the required smd_url setting,
     causing metadata-service to fail with "SMD_URL is required".
   - Created metadata-service.yaml.j2 template with smd_url: 'http://smd:27779'
     (internal Podman network address, matching boot-service.yaml pattern).
   - Added template task to ochami.yml alongside boot-service and haproxy templates.

3. Fix service startup race condition in verify_ochami.yml
   - Added wait for tokensmith.service to be active before gen_access_token.
   - Added retries to gen_access_token to handle transient startup failures.
   - Added systemctl reset-failed in verify.yml rescue block to clear
     systemd rate-limited services before retry restart.

4. Ensure Podman networks are created before starting services
   - Added explicit restart of network quadlet units before starting
     openchami.target in both the initial start and rescue retry blocks.
   - Fixes failures when network units show as "active exited" but the
     actual Podman networks were removed (e.g. after cleanup/reinstall).

Signed-off-by: Sujit Jadhav <sujit.jadhav@dell.com>
Migrates PXE boot roles (collect_pxe_credentials, idrac_pxe_boot,
verify_phone_home), playbook, and config into orchestrator under
playbooks/setpxe/. Updates orchestrator.yml workflow, adds
dellemc.openmanage dependency, and cleans all PXE references
from utils domain docs and playbooks.

Signed-off-by: venu <236371043+Venu-p1@users.noreply.github.com>
Signed-off-by: venu <236371043+Venu-p1@users.noreply.github.com>
…ory and slurm_inventory (#5052)

* remove DCGM from telemetry domain

Signed-off-by: priti_parate <priti_parate@dell.com>

* orchestrator_inventory with kube_vip

Signed-off-by: priti_parate <priti_parate@dell.com>

* Restore files from dell/issue-4849-omnia-modernization

Signed-off-by: priti_parate <priti_parate@dell.com>

* added sample files

Signed-off-by: priti_parate <priti_parate@dell.com>

* ansible HPC warning

Signed-off-by: priti_parate <priti_parate@dell.com>

---------

Signed-off-by: priti_parate <priti_parate@dell.com>
… domain initialization (#5056)

* feat(main): omnia.sh skip and dry run option addition

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

* fix: Scenarios update

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>

---------

Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>
…sswordless SSH

The inter-node SSH design relies on NFS-mounting oim_rsa from the storage
server to nodes at client_mount_path/slurm/ssh/oim_rsa. When the storage
server is unreachable from compute nodes, the NFS mount fails silently
and the private key never reaches the nodes.
Fix: Embed the oim_rsa private key directly in cloud-init write_files,
deploying it to /root/.ssh/oim_rsa on each node. Update the SSH config
IdentityFile to reference the local path instead of the NFS mount path.
The read_ssh_private_key variable was already registered but unused in
any template.

Signed-off-by: sayuri <sayuri.kamble@dell.com>
- Replace inventory-based input with pxe_mapping_file.csv
- Leverage orchestrator credential store (bmc_username/password)
- Tag-based execution: ansible-playbook orchestrator.yml --tags setpxe
- Remove enable_pxe_boot config flag requirement
- Add README with usage examples and ansible.cfg

Signed-off-by: venu <236371043+Venu-p1@users.noreply.github.com>
… runcmd issues

- Fix ssh_authorized_keys: restore list syntax (bare string violates
  cloud-init spec) in login/compiler node templates
- Restore StrictHostKeyChecking no and UserKnownHostsFile /dev/null
  in login/compiler node SSH configs to prevent interactive prompts
- Fix Containerfile: restore /run/openldap for slapd PID file,
  restore HEALTHCHECK and VOLUME directives, fix missing newline
- Fix firewall runcmd indentation: add missing '- |' block scalar
  prefix so the firewall shell script executes as a proper runcmd entry
- Add security comment documenting private key in metadata trade-off

Co-Authored-By: Sujit Jadhav <sujit.jadhav@dell.com>
Co-Authored-By: Sayuri Kamble <68416000+SAYUK09@users.noreply.github.com>
Signed-off-by: Sujit Jadhav <sujit.jadhav@dell.com>
…nges (#5055)

* refactor(orchestrator): modernize test automation to match source changes

Updates the orchestrator test automation to align with:

1. Source code changes (fabrica-based OpenCHAMI architecture):
   - Container names: smd, boot-service, metadata-service, postgres,
     tokensmith, step-ca, haproxy, coresmd-coredns, coresmd-coredhcp
   - Systemd target: openchami.target (replaces openchami.service)
   - Firewall ports: 8443, 8081, 5432, 27778, 27779
   - Input/output paths: /opt/omnia/orchestrator/{input,output}/{project}
   - Playbook workdir: src/orchestrator/playbooks

2. Test infrastructure modernization (matching telemetry/image_build_manager):
   - Add _run.py + domain_vars.py for ValidationRunner pattern
   - Replace 530-line run_validation.sh with thin Python delegation wrapper
   - Simplify setup_env.sh to match new pattern with tab-completion
   - Update test_run_config.yml to fvt_orchestrator format
   - Update conftest.py with get_last_tc_id, set_verbose_mode,
     dataset overrides, and pytest_terminal_summary hook

3. Bug fixes:
   - Fix test_dcgm_config.py hardcoded paths (use relative resolution)
   - Fix credential path to use domain-scoped INPUT_PATH_TEMPLATE
   - Update dataset orchestrator_config.yml with current schema fields

Signed-off-by: Sujit Jadhav <sujit.jadhav@dell.com>

* refactor(discovery): modernize test automation to match source changes

Updates the discovery test automation to align with:

1. Source code changes (domain-scoped paths):
   - Input path: /opt/omnia/discovery/input/{project}
     (was /opt/omnia/input/{project}/discovery)
   - Output path: /opt/omnia/discovery/output/{project}
     (was /opt/omnia/output/{project}/discovery)
   - Playbook workdir: src/discovery/playbooks
     (was src/discovery)
   - Credential path: now uses domain-scoped INPUT_PATH_TEMPLATE

2. Test infrastructure modernization (matching telemetry/image_build_manager):
   - Add _run.py + domain_vars.py for ValidationRunner pattern
   - Replace 530-line run_validation.sh with thin Python delegation wrapper
   - Simplify setup_env.sh to match new pattern with tab-completion
   - Update test_run_config.yml to fvt_discovery format
   - Update conftest.py with get_last_tc_id, set_verbose_mode,
     dataset overrides, and pytest_terminal_summary hook

3. Bug fixes:
   - Fix credential path in discovery_func.py to use _get_input_path()
   - Fix HOW TO FIX paths in discovery_msgs.py assert messages

Signed-off-by: Sujit Jadhav <sujit.jadhav@dell.com>

---------

Signed-off-by: Sujit Jadhav <sujit.jadhav@dell.com>
…gin_compiler templates

Revert the inline NFS-mount-and-parse firewall script back to the
original slurm_conf_dict Jinja template approach for the 4 login and
login_compiler templates. The inline script introduced an NFS dependency
at boot time that fails when the storage server is unreachable.

Signed-off-by: sayuri <sayuri.kamble@dell.com>
Signed-off-by: snarthan <narthan.s@dell.com>
…5060)

* feat(build_stream): standalone mode, no omnia_core dependency, and flattened input path structure)

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Update python-version to 3.12 in pytest

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Fix lint issues

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Remove temp container and use copy-input.sh and align to domain checker principles and env variables

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

t status

* Fixing Ansible lint Issues and use dell approved gitleaks

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Make gitleaks on self hosted runner and remaining ansible lint issues

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* refactor(build_stream): Align build_stream domain with Galaxy collection structure and revert cross-domain lint/gitleaks changes

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Restore flat input directory

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Remove the defaults

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Modify domain-init.sh to support flat input structure

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* refactor: implement domain segregation in BuildStream pipeline, retire centralized stages, core container

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Removed cross-domain credential hooks

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Fix bs auth credentials structure

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Fix the build-image stage for image_build_manager playbook

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Fix lint and UT issues

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Fix the lint issues

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Fix cx issues

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Fix Cx issues

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Fix Cx issues

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Revert to defaults

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Sync 2.2 code to 2.3 and update requirements.txt and few bug fixes

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Fix the Uts

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

* Fix failing UTs

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>

---------

Signed-off-by: Rajeshkumar S <rajeshkumar.s2@dell.com>
Signed-off-by: Rajeshkumar-s2 <rajeshkumar.s2@dell.com>
* idrac, ldms and 2.2 delta changes removing skyway and powevault

Signed-off-by: Kratika_Patidar <Kratika.Patidar@dell.com>

* idrac, ldms and 2.2 delta changes removing skyway and powevault

Signed-off-by: Kratika_Patidar <Kratika.Patidar@dell.com>

* lint-fix

Signed-off-by: Kratika_Patidar <Kratika.Patidar@dell.com>

* lint fix

Signed-off-by: Kratika_Patidar <Kratika.Patidar@dell.com>

* idrac telemetry and mysql deployment changes

Signed-off-by: Kratika_Patidar <Kratika.Patidar@dell.com>

* fix: LDMS deployment - delegate file operations to kube_vip host

Fixes LDMS deployment failures caused by file visibility issues between
slurm control node and kube_vip host.

Root causes:
- Files rendered on slurm control node were not accessible from kube_vip
  where kubectl/helm commands execute
- ldms_sampler_password sourced from wrong variable
- Munge key path incorrect (/etc/slurm vs /etc/munge)
- Inventory group name mismatch (slurm_node_x86_64 vs slurm_node)

Changes:
- configure_ldms_aggregator.yml: Delegate all file operations to kube_vip
- configure_ldms_sampler.yml: Fix password sourcing from telemetry_credentials
- vars/main.yml: Add munge_key_path variable (/etc/munge/munge.key)
- deploy_ldms.yml: Pass cluster_inv and slurm_inv variables
- host_map template: Fix inventory group name to slurm_node

Verified:
- Playbook runs successfully (exit code 0)
- LDMS pods running (nersc-ldms-aggr-0, nersc-ldms-store-slurm-cluster-0)
- All K8s secrets created (nersc-munge-key, nersc-ldms-ovis-auth)
- Helm chart installed successfully

No hardcoded values - all changes use dynamic variables and delegation.

Signed-off-by: Kratika_Patidar <Kratika.Patidar@dell.com>

* fix: remove trailing spaces from install_python_dependencies.yml

Signed-off-by: Kratika_Patidar <Kratika.Patidar@dell.com>

* pr update based on review comments

Signed-off-by: Kratika_Patidar <Kratika.Patidar@dell.com>

* chnage in file path

Signed-off-by: Kratika_Patidar <Kratika.Patidar@dell.com>

---------

Signed-off-by: Kratika_Patidar <Kratika.Patidar@dell.com>
Signed-off-by: Kratika Patidar <Kratika.Patidar@dell.com>
Signed-off-by: snarthan <narthan.s@dell.com>
Signed-off-by: snarthan <narthan.s@dell.com>
* remove DCGM from telemetry domain

Signed-off-by: priti_parate <priti_parate@dell.com>

* orchestrator_inventory with kube_vip

Signed-off-by: priti_parate <priti_parate@dell.com>

* Restore files from dell/issue-4849-omnia-modernization

Signed-off-by: priti_parate <priti_parate@dell.com>

* added sample files

Signed-off-by: priti_parate <priti_parate@dell.com>

* ansible HPC warning

Signed-off-by: priti_parate <priti_parate@dell.com>

* PowerScale validation changes: Removed image version cross-validation, Added offline image warning with specific image list, Integrated powerscale_telemetry_validation into telemetry_validation, Removed proxyHost validation

Signed-off-by: priti_parate <priti_parate@dell.com>

* Compare PowerScale images with telemetry_packages.yml in offline mode

Signed-off-by: priti_parate <priti_parate@dell.com>

* updating input validation with telemetry_packages.yml

Signed-off-by: priti_parate <priti_parate@dell.com>

* remove csi secret path variable

Signed-off-by: priti_parate <priti_parate@dell.com>

* remove unused functions

Signed-off-by: priti_parate <priti_parate@dell.com>

* update require functions

Signed-off-by: priti_parate <priti_parate@dell.com>

* update powerscale input messages

Signed-off-by: priti_parate <priti_parate@dell.com>

---------

Signed-off-by: priti_parate <priti_parate@dell.com>
…e ISO build fix (#5067)

* defect fixes and add auto-mount NFS, SSH key validation for install_os workflow

Signed-off-by: venu <236371043+Venu-p1@users.noreply.github.com>

* fix(install_os): add default filter to ssh_public_key_path and skip summary in credentials-only mode

Signed-off-by: venu <236371043+Venu-p1@users.noreply.github.com>

* fix(install_os): resolve NFS mount path for deploy-only mode

- Add NFS mount resolution logic in validate_install_os_config for deploy mode
- Parse mount output to resolve custom_iso_path to local filesystem path
- Set _local_iso_path variable needed by iso_delivery preflight checks
- Support both nfs and nfs4 mount types in grep pattern

Signed-off-by: venu <236371043+Venu-p1@users.noreply.github.com>

* fix(lint): replace mount command with ansible.builtin.mount module and remove trailing spaces

- Replace ansible.builtin.command mount with ansible.builtin.mount module
- Use proper mount module parameters: src, path, fstype, state
- Remove trailing whitespace from playbooks and roles
- Fixes command-instead-of-module and yaml[trailing-spaces] violations

Signed-off-by: venu <236371043+Venu-p1@users.noreply.github.com>

* fix(lint): add pipefail to shell commands and move messages to vars

- Add 'set -o pipefail' to shell commands in validate_install_os_config
- Move SSH key and config validation messages to vars/main.yml
- Add failed_when: false to handle grep with no matches
- Fixes risky-shell-pipe violations

Signed-off-by: venu <236371043+Venu-p1@users.noreply.github.com>

---------

Signed-off-by: venu <236371043+Venu-p1@users.noreply.github.com>
…FM removal, credential utility, Vast Automation (#5054)

* fix(telemetry): strip BOM from ansible.cfg, update VM image versions, add post-deploy pod verification

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* fix(telemetry): extract kube_vip from cluster_inventory instead of telemetry_config

- Remove kube_vip from telemetry_config.json schema required fields
- Update validation to extract kube_vip from cluster_inventory file
  (kube_vip_group.hosts[0].ansible_host or hostname)
- Remove directory restriction for cluster_inventory path (can be absolute)
- Update error messages to reflect kube_vip comes from cluster_inventory
- Remove unused KUBE_VIP_REQUIRED_MSG

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* feat(telemetry): add external_kafka_connect utility for OME integration

Migrate external_kafka_connect_details from omnia_core (2.2) to the
monorepo telemetry domain (2.3) following the new architecture.

Changes:
- Add external_kafka_connect role under roles/
  - Validates Kafka pods health on kube_vip
  - Extracts bridge LB external IP and TLS certs from K8s secrets
  - Writes ca.crt, user.crt, user.key, and connection details YAML
  - Displays OME mTLS integration steps
- Add playbook at playbooks/utils/external_kafka_connect.yml
  - Reuses telemetry_prereq.yml for config loading and kube_vip resolution
  - No dependency on high_availability_config.yml (uses cluster_inventory)
- Register as --tags external_kafka in telemetry.yml
- Add external_kafka to usage help in telemetry_setup vars
- Output generated at: /opt/omnia/telemetry/output/project_default/external_kafka/

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* feat(telemetry): fix cleanup tag isolation, add karavi-observability Helm deploy

- Fix cleanup tag isolation: import_playbook tags were inherited by
  parent, causing all components to be cleaned when only one tag was
  specified (e.g. cleanup_powerscale deleted Kafka, Victoria, OME).
  Restructured cleanup.yml to use include_tasks with ansible_run_tags
  conditions instead of import_playbook with tags.

- Add karavi-observability Helm deployment: the old container staged
  files to NFS and deferred helm install to cloud-init. Now the
  deploy_powerscale role directly runs helm install/upgrade for
  karavi-observability, applies cert-manager CRDs, copies isilon-creds
  secret, patches OTEL collector service for Prometheus metrics, and
  creates OTEL collector PVC for persistent buffering. This adds the
  previously missing pods: karavi-metrics-powerscale, otel-collector,
  cert-manager (3 pods).

- Add csi_powerscale_secret_path input validation.

- Clean up external_kafka_connect output to show only file location
  and bootstrap IPs/ports.

- Add csi-volume-exporter resources to cleanup vars (deployment,
  service, serviceaccount, clusterrole, clusterrolebinding).

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* feat(telemetry): ansible-lint compliance, cleanup ordering, status idempotency

- Fix key-order[task] in all 7 cleanup _tasks.yml files (name: before module)
- Add Dell copyright headers to all cleanup task include files
- Add source-before-sink guard in cleanup.yml: check remaining source pods
  and wait for termination before proceeding to sink cleanup
- Fix risky-shell-pipe: add set -o pipefail to all shell tasks with pipes
- Fix yaml[line-length]: break lines exceeding 160 chars
- Fix jinja[spacing]: correct Jinja2 whitespace in folded scalars
- Add csi_powerscale_secret_path to telemetry_config.json schema validation
- Improve pod stabilization wait in deploy.yml with explicit Ready check
- Ensure telemetry_status.yml is idempotent (gather_facts: true on Phase 5)
- Refactor telemetry_packages.yml schema and validation for new package
  manifest format (Helm charts, git repos, pip modules)
- Add OME source to telemetry_status.yml.j2 template and write task
- Cleanup summary shows explicit remaining pod/PVC/service counts
- All files pass ansible-lint 26.8.0 (profile: production, 0 failures, 0 warnings)

Verified: full cleanup (0 pods/PVCs/services) + deploy (40/40 pods Ready)

Signed-off-by: Balajikumaran C S <balajikumaran.cs@dell.com>

* feat(telemetry): consolidate cleanup roles, improve deploy templates

Consolidate 11 separate cleanup_* roles into a single roles/cleanup
role with per-component task files. This eliminates code duplication
across cleanup playbooks and centralizes cleanup variables.

Changes:
- Create roles/cleanup/ with task files for each component
  (idrac, ldms, ome, powerscale, ufm, vast, dcgm, sfm,
  kafka, victoria_metrics, victoria_logs)
- Refactor cleanup.yml to use include_role with tasks_from
  instead of include_tasks from separate _tasks.yml files
- Update standalone cleanup playbooks to use the consolidated role
- Add missing cleanup tags for ufm, vast, dcgm, sfm sources
- Fix UFM/VAST resource names to match deployed service names
  (ufm-external, vast-external)
- Improve deploy templates for UFM, VAST, OME, PowerScale
- Add credential exposure as top-level facts in telemetry_prereq
- Update deploy.yml phase comments to reflect actual flow

Tested: full cleanup + deploy cycle passes (40/40 pods ready)

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* feat: telemetry test automation — restructure, new sources, CLI redesign

Major redesign of telemetry FVT test framework:

Test structure:
- Flatten test hierarchy: remove per-source/sink subdirectories
  (e.g. sinks/kafka/test_kafka.py -> sinks/test_kafka.py)
- Remove duplicate fvt/telemetry/ folder; consolidate into tag-based folders
- Add cleanup/ tag folder with test_playbook.py and verify_cleanup tests
- Rename test_vm.py -> test_victoriametrics.py, test_vl.py -> test_victorialogs.py

New test sources:
- PowerScale: CSM deploy, OTEL collector, isilon-creds secret, VM metrics,
  VL logs, syslog forwarding (TC_SR_008 - TC_SR_013)
- UFM: external service, VMServiceScrape, credentials secret, InfiniBand
  metrics in VictoriaMetrics (TC_SR_016 - TC_SR_019)
- OME: Vector bridge, KafkaUser CR, Kafka cert upload and connectivity
  (TC_SR_014 - TC_SR_015, TC_SR_021)
- iDRAC: graceful skip when StatefulSet not found (no BMC inventory)

CLI redesign (run_validation.sh):
- Domain name as first argument: ./run_validation.sh telemetry <cmd>
- Rename deploy command to exec for playbook execution
- Tag-based routing: ./run_validation.sh telemetry deploy verify
- OMNIA_DEPLOY_TAG env var for test_playbook.py tag selection

Library:
- Split monolithic source_func.py into powerscale_func.py, ufm_func.py,
  ome_func.py
- Add not_found detection to verify_sts_ready() for graceful skipping
- Fix unused imports (pylint 10/10 clean)

omnia-auto plugin:
- Add resolve_domain_input_path and read_remote_yaml exports

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* fix(telemetry): shellcheck fixes and test_run_config exec command docs

- Fix SC2155: declare and assign separately for REPORT_ID, OMNIA_RESULTS_FILE
- Fix SC2168: remove local keyword outside functions (use cfg_* prefix)
- Fix SC2154: add shellcheck disable for eval-assigned run_flag
- Fix SC2086: quote $rc return value
- Fix SC2011: use find instead of ls | xargs for suite listing
- Update test_run_config.yml: document exec command (replaces deploy)
- Add tag: field to scenario definitions for explicit tag routing

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* fix(plugins): report box alignment with ANSI color codes

The result line in the report footer was misaligned because ANSI color
escape sequences were included in the width calculation. Fixed by:
- Calculate visible text length without color codes
- Apply padding based on visible length
- Rebuild wheel with fix

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* feat(telemetry): redesign source tests and fix infrastructure issues

Infrastructure fixes:
- Verbose [INFO] logging now only shows with -v flag
- Pod listing no longer truncates with ... at end
- Kafka display shows correct expected count
- Tab completion works in run_validation.sh
- All lint issues resolved across test/telemetry

Source test redesigns:

iDRAC (9 tests, up from 6):
- TC_SR_001: Pod count matches bmc_group_data.csv (NEW)
- TC_SR_002: StatefulSet pods ready
- TC_SR_003: All containers running (now checks ALL pods)
- TC_SR_004: MySQL data in iDRAC telemetry pods (NEW)
- TC_SR_005: Receiver collecting metrics (NEW)
- TC_SR_006: Kafka topic exists
- TC_SR_007: VictoriaPump metrics endpoint (now checks ALL pods)
- TC_SR_008: Telemetry service exists
- TC_SR_009: VM data per service tag

LDMS (4 tests, up from 2):
- TC_SR_020: LDMS aggregator pod running (NEW)
- TC_SR_021: LDMS store pod running (NEW)
- TC_SR_022: Vector-LDMS bridge deployment ready
- TC_SR_023: LDMS Kafka topic exists

PowerScale, OME, UFM: Renumbered TC IDs, consistent formatting,
architectural docstrings added.

New module: library/functions/idrac_func.py
- verify_idrac_pod_count() - BMC group scaling
- verify_mysql_data_in_pods() - MySQL services table
- verify_receiver_collecting() - receiver log analysis

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* feat(telemetry): OME cert flow, PowerScale syslog ordering, CI check docs

- PowerScale: swap TC_SR_035 (syslog config, order=64) before
  TC_SR_034 (log verification, order=65) so syslog is configured
  before checking log ingestion; skip reconfigure if already correct
- OME: add configure_ome flag in test_config.yml; when true, run
  external_kafka playbook, verify TLS certs, create PFX, upload
  ca.crt to OME via REST API, verify connectivity
- New TCs: TC_SR_052 (certs exist), TC_SR_053 (PFX), TC_SR_054
  (cert upload), TC_SR_055 (Kafka connectivity)
- ome_func: add run_external_kafka_playbook, verify_external_kafka_certs,
  convert_certs_to_pfx, verify_ome_kafka_user_cr, upload_ome_certs
- telemetry_func: add get_output_path for dynamic output dir resolution
- common_vars: OME_KAFKA_CERT_SUBDIR, OME_KAFKA_CERT_FILES, new CMDS
  (openssl_create_pfx, ome_upload_cert)
- test_automation.md: add section 8.1 with local check commands for
  flake8, pylint, bandit, gitleaks, DCO, pip-audit
- FVT README: update all TC IDs to match current test_case_vars

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* refactor(test): clean up TC IDs, CLI help, and test_run_config for image_build_manager and telemetry

- Remove orphaned ib_* TC entries (TC_IB_002-013) from test_case_vars.py
- Fix duplicate TC_BD_012 by renumbering repo_ssl_verify_applied to TC_BD_016
- Remove full-stack scenarios from both test_run_config.yml files
- Use scenario name as default Ansible tag (no explicit tag: field needed)
- Add dataset/sync_input/sync_output fields to telemetry test_run_config.yml
- Redesign CLI help: add COMMANDS section, MARKER EXPRESSIONS (+/,), examples
- Fix shellcheck errors (local outside function) in config handlers
- Update READMEs with comprehensive CLI usage, marker expressions, examples
- Update code-style docs: no Co-Authored-By tags in commits
- Delete fvt/image_build_manager/ (replaced by tag-based fvt/build/ layout)
- Move image_verification tests to fvt/build/image_verification/

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* refactor(test): add validation runner, domain vars, and cleanup_images suite

- Add ValidationRunner class (omnia_auto) with domain_config support
  for tags, markers, suites, and exclude_tags
- Add validation_vars.py (shared constants: COMMANDS, EXCLUDE_FROM_ALL)
- Add domain_vars.py for image_build_manager-specific config
- Create cleanup_images/cleanup_images/ suite directory
- Remove pip CLI entry point (run_validation) and tab completion;
  ./run_validation.sh from the domain directory is the sole entry point
- Add _run.py as the Python entry point (loads domain vars, creates runner)
- Slim run_validation.sh to delegate to _run.py
- Remove tab completion from setup_env.sh
- Update README, help text, and docs for ./run_validation.sh usage

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* refactor(telemetry): align run_validation.sh and test_run_config with image_build_manager pattern

- Replace monolithic run_validation.sh with thin shell wrapper + _run.py
- Create library/vars/domain_vars.py with FVT_TAGS, MARKERS, SUITES, EXCLUDE_TAGS
- Delegate to ValidationRunner from omnia_auto plugin (same as image_build_manager)
- Restructure test_run_config.yml with fvt_telemetry category (no order field)
- Update README.md to use fvt_telemetry naming convention
- Export domain_vars in library/vars/__init__.py

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* fix(plugins): replace insecure tempfile.mktemp with mkstemp (B306)

Replace tempfile.mktemp() with tempfile.mkstemp() in validation_runner.py
to fix Bandit B306 (CWE-377) security warning. mkstemp() creates the
file atomically, preventing race condition attacks.

Rebuild omnia_auto wheel with the fix.

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* fix(test): resolve pylint C0413 wrong-import-position in _run.py

Move sys.path.insert and local imports into main() function so pylint
does not flag them as wrong-import-position (C0413). Module-level
imports remain stdlib-only (os, sys).

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* Update test_creds.yml

Signed-off-by: balajikumaran.cs <balajikumaran.cs@dell.com>

* feat(telemetry): redesign status reporting, add external_victoria, remove SFM

## Status Reporting Redesign
- Simplified telemetry_status.yml format with passed/failed/skipped states
- Removed verbose version info and pod counts from status output
- Added Phase 4 cluster inspection to determine actual deployment status
- Status now reflects real cluster state, not just config flags
- Centralized status collection (removed per-role update_status calls)

## External Victoria Connect
- Added external_victoria_connect utility (mirrors external_kafka_connect)
- Fetches VictoriaMetrics/VictoriaLogs LoadBalancer endpoints and TLS certs
- Provides SFM and PowerScale integration instructions
- Output: external_victoria/external_victoria_connect_details.yml

## SFM Removal
- Removed all SFM (Storage Fabric Manager) references from telemetry
- Deleted deploy_sfm role, cleanup tasks, and related playbooks
- SFM is now external-only (use external_victoria for integration)

## Test Automation
- Enhanced setup_env.sh with domain credentials support
- Added --set-domain-creds and --domain-creds JSON options
- Supports BMC, MySQL, CSI, LDMS, UFM, VAST credentials

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* fix(test): credential utility + Checkmarx fixes + setup_env modernization

- Add omnia_auto credential management module (credential_func.py,
  credential_vars.py, credential_msgs.py) with vault key creation,
  encrypt/decrypt, read/write fields, and interactive prompt CLI
- Add __main__.py entry point for 'python -m omnia_auto' CLI usage
- Fix Checkmarx Stored_Command_Injection in validation_runner.py:
  add _validate_config_value() for config-derived subprocess args
- Fix Checkmarx Stored_Command_Injection in runner_func.py:
  shlex.quote() all config-derived values in _build_ansible_cmd()
- Fix Checkmarx Insufficiently_Protected_Credentials: rename
  'password' parameters/variables to 'auth_secret' across sync_func,
  host_func, runner_func, and all callers
- Fix Checkmarx Use_Of_Hardcoded_Password false positive on
  UFM_SECRET_NAME in common_vars.py (K8s Secret object name)
- Rewrite telemetry setup_env.sh: delegate credential management
  to Python CLI, rename flags (--set-creds, --update-creds, --creds),
  make oim_server_ip optional (soft warning instead of hard fail)
- Rewrite image_build_manager setup_env.sh: same pattern, separate
  domain credentials to image_build_credentials.yml at env-var path
- Remove venv_path/project_name from test_config.yml (both domains),
  now derived from OMNIA_VENV_PATH/OMNIA_PROJECT_NAME env vars
- Update READMEs for both domains with new credential flags and
  file creation details
- All checks passing: flake8, bandit, shellcheck, pylint (9.82/10)

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* fix(test): remove shell=True from sync_func.py (Checkmarx compliance)

Refactor sync_func.py to use list-based subprocess arguments instead
of shell=True, per python.md §8.3 Checkmarx-safe patterns:

- Add _build_ssh_cmd_list() returning list args for SSH commands
- Add _build_scp_cmd_list() returning list args for SCP commands
- Replace shell=True with ['bash', '-c', cmd] for local commands
- Replace shell=True with list args for SSH/SCP commands
- Keep _build_rsync_ssh_e() for rsync -e (string required by rsync)

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* fix(test): remove shell=True from docstrings to pass Checkmarx scan

The Checkmarx pre-scan grep was matching 'shell=True' in docstring
comments. Reworded to 'Checkmarx-safe, no shell mode' to avoid
false positive detection.

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* feat(telemetry): Add VAST storage telemetry test automation

Add comprehensive test automation for VAST Data storage telemetry:

- TC_SR_060: Verify VAST external service exists with correct endpoint
- TC_SR_061: Verify VAST VMServiceScrape CR exists
- TC_SR_062: Verify VAST credentials K8s secret exists
- TC_SR_063: Verify VAST storage metrics in VictoriaMetrics
- TC_SR_064: Verify VAST logs in VictoriaLogs

New files:
- test/telemetry/fvt/deploy/sources/test_vast.py
- test/telemetry/library/functions/vast_func.py

Updated files:
- library/vars/common_vars.py: Add VAST constants and expected metrics
- library/vars/test_case_vars.py: Add VAST test case registry
- library/messages/telemetry_msgs.py: Add VAST log/assert messages
- library/functions/__init__.py: Export VAST verification functions
- library/vars/__init__.py: Export VAST constants
- README.md: Update test case summary (34 total)

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>

* Update main.yml

Signed-off-by: balajikumaran.cs <balajikumaran.cs@dell.com>

* Delete test/image_build_manager/test_creds.yml

Signed-off-by: balajikumaran.cs <balajikumaran.cs@dell.com>

---------

Signed-off-by: balajikumaran-c-s <balajikumaran.cs@dell.com>
Signed-off-by: Balajikumaran C S <balajikumaran.cs@dell.com>
Signed-off-by: balajikumaran.cs <balajikumaran.cs@dell.com>
* Restructure test automation with separate FVT and NFT directories

Signed-off-by: mithileshreddy04 <mithilesh.reddy@dell.com>

* Fix for telemetry cleanup function

Signed-off-by: mithileshreddy04 <mithilesh.reddy@dell.com>

* Update conftest.py

Signed-off-by: mithileshreddy04 <mithilesh.reddy@dell.com>

* Update test_case_vars.py

Signed-off-by: mithileshreddy04 <mithilesh.reddy@dell.com>

* Update telemetry_msgs.py

Signed-off-by: mithileshreddy04 <mithilesh.reddy@dell.com>

* Add delete kafka topic logic in cleanup

Signed-off-by: mithileshreddy04 <mithilesh.reddy@dell.com>

* Fix nft testcase errors

Signed-off-by: mithileshreddy04 <mithilesh.reddy@dell.com>

* Update requirements.txt

Signed-off-by: mithileshreddy04 <mithilesh.reddy@dell.com>

---------

Signed-off-by: mithileshreddy04 <mithilesh.reddy@dell.com>
Signed-off-by: Abhishek S A <abhishek.sa3@dell.com>
Co-authored-by: Abhishek S A <abhishek.sa3@dell.com>
* Moved all test automation to issue branch

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>

* Fix collect test infrastructure bugs

- Fixed get_utils_output_path to correctly call read_remote_env with required parameters
- Updated metadata validation to match actual bundle structure (removed collection_timestamp requirement)
- Updated bundle contents test to expect k8s/slurm directories instead of logs/metadata

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>

* Complete utils test automation with error scenarios and post-boot validation

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>

* Update install_os test automation to match new playbook structure

- Update config file names: iso_config.yml -> install_os_config.yml
- Update credentials file: os_install_credentials.yml -> install_os_credentials.yml
- Update playbook tags: validate/fetch/create/deliver -> credentials/build_iso/deploy/generate_ks
- Update output paths: /opt/omnia/iso_output -> /opt/omnia/utils/output/<project>/
- Add install_os_status.yml verification tests
- Update validation functions to match new config structure
- Update test case IDs and documentation
- Add install_os scenario to run_validation.sh

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>

* Remove set_pxe_boot test automation and update utils domain for collect and install_os

- Remove entire set_pxe_boot test suite (fvt/set_pxe_boot/)
- Remove PXE-related variables, functions, and test cases
- Update test automation to support only collect and install_os modules
- Add install_os_config.yml.j2 template for dataset generation
- Add example_install_os.yml profile with install_os variables
- Update dataset profiles to include install_os configuration
- Update all documentation to remove PXE references
- Replace real IP addresses with dummy IPs (10.0.0.x range)
- Update test_run_config.yml to remove set_pxe_boot scenario
- Update run_validation.sh to remove set_pxe_boot scenario
- Update conftest.py to remove set_pxe_boot from valid scenarios
- Update library functions to remove PXE-specific code
- Update common_vars.py to remove PXE constants
- Update test_case_vars.py to remove PXE test cases
- Update utils_msgs.py to remove PXE failure messages
- Update setup_env.sh comments for install_os credentials

Test Results:
- Collect: 15/15 PASSED (100%)
- Install_os: Test automation ready (3 source bugs identified)

Source Code Bugs Identified:
1. Architecture validation in credentials mode (validate_install_os_config)
2. Missing ks_root_password_hash in generate_ks (rhel10.ks.j2)
3. Template error in credential prompting (prompt_credential_field.yml)

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>

* Remove remaining set_pxe_boot files and fix install_os_config

- Remove set_pxe_boot template files (set_pxe_boot.ini.j2, set_pxe_boot_config.yml.j2, set_pxe_boot_credentials.yml.j2)
- Remove example_install_os.yml profile (not required)
- Set target_architecture to empty in src/utils/input/install_os_config.yml for auto-detection
- Remove test_creds.yml from git tracking (credentials should not be committed)

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>

* Fix pylint line-too-long error in utils_msgs.py

- Split long line in install_os_config_invalid message to meet 100 character limit

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>

* chore(test): use standard clone_path in test_config.yml

- Change clone_path from /root/sujal/omnia to /opt/omnia (standard installation path)

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>

* feat(test): add log file content verification for collect bundle

- Add validate_bundle_log_files() function to verify log files with content
- Add test_collect_bundle_log_files_content() test case (TC_CL_032)
- Extract bundle to temp directory and check file sizes in k8s and slurm dirs
- Report collected files with content and empty files separately
- Update test case registry and documentation with new test

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>

* fix(test): make log file content verification more lenient for test environment

- Remove strict assertion requiring files with content
- Test now passes if bundle structure is correct
- Reports collected files and empty files separately
- Accepts empty log files in test environment (realistic scenario)

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>

* feat(test): improve log file verification to check input configuration

- Read collect_pxe.yml to determine which node groups have nodes
- Check for k8s and slurm log files based on input configuration
- Report collected files with full paths and content status
- Report empty files and missing files separately
- Use newest log bundle for verification
- Test now correctly identifies which files should be collected based on input

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>

* fix(security): use secure temp directory for log bundle verification

- Replace hardcoded /tmp/log_bundle_verify with tempfile.mkdtemp()
- Add shutil import for proper temp directory cleanup
- Use finally block to ensure temp directory is always cleaned up
- Fixes Bandit B108 security issue (hardcoded_tmp_directory)

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>

---------

Signed-off-by: SujalS27 <sujal.sooryavamshi@dell.com>
Move set_pxe_boot utility from utils to orchestrator domain
…stage tracking (#5070)

Add comprehensive test automation for the build_stream domain including
pipeline trigger, GitLab CI/CD stage monitoring, and verification.

Major changes:
- Add build_pipeline scenario with catalog push and pipeline trigger
- Add GitLab CI/CD stage tracking (initialization, copy-input-files,
  configure-local-repository, build-images, summary)
- Refactor gitlab_install to buildstream_install for clarity
- Add buildstream_cleanup and gitlab_cleanup scenarios
- Fix postgres pause task TTY issue for non-interactive execution
- Update catalog path from examples/ to src/main/samples/
- Add standalone_mode support for playbook tests
- Remove redundant trigger_build_pipeline_manual function
- Remove TC_BP_009 (build_image_meta_persisted test)

Files added:
- test/build_stream/library/functions/pipeline_func.py
- test/build_stream/library/vars/domain_vars.py
- test/build_stream/fvt/build_pipeline/
- test/build_stream/fvt/buildstream_install/
- test/build_stream/fvt/buildstream_cleanup/
- test/build_stream/fvt/gitlab_cleanup/

Files modified:
- src/build_stream/roles/postgres/tasks/deploy_postgres.yml
- src/build_stream/roles/hosted_gitlab/files/.gitlab-ci-build.yml
- test/build_stream/README.md
- test/build_stream/fvt/README.md
- test/build_stream/library/functions/__init__.py
- test/build_stream/library/vars/common_vars.py
- test/build_stream/library/vars/test_case_vars.py
- test/build_stream/library/messages/build_stream_msgs.py
- test/build_stream/test_config.yml
- test/build_stream/run_validation.sh
- test/build_stream/setup_env.sh
catalog is created for k8s and slurm for x86 only
Comment on lines +314 to +319
f"target ansible_host={oim_ip} "
f"ansible_user={ssh_user} "
f"ansible_port={ssh_port} "
f"ansible_ssh_pass={ssh_auth} "
f"ansible_connection=ssh "
f"ansible_ssh_common_args='{ssh_args}'\n"
"""Add line to output and print."""
global _last_output
self._output_lines.append(line)
print(line, flush=True)

elif args.command == "prompt-and-confirm":
secret = prompt_and_confirm(args.message)
print(secret, flush=True)

elif args.command == "prompt":
secret = prompt_credential(args.message)
print(secret, flush=True)
)
return "Success"

if package['package'].startswith('docker.io/') and docker_username and docker_secret_token:
Comment on lines +15 to +76
name: ShellCheck
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Get changed shell files (excluding deleted and Jinja2 templates)
id: changed-files
run: |
git fetch origin ${{ github.base_ref }}
CHANGED=$(git diff --name-only --diff-filter=d \
origin/${{ github.base_ref }} HEAD -- \
'*.sh' '*.bash' || true)

FILES=""
for f in $CHANGED; do
if [ -f "$f" ] && [[ "$f" != *.j2 ]]; then
FILES="$FILES $f"
fi
done

FILES=$(echo "$FILES" | xargs)
echo "Filtered files: $FILES"
echo "files=$FILES" >> "$GITHUB_OUTPUT"

- name: Install ShellCheck
if: steps.changed-files.outputs.files != ''
run: sudo apt-get install -y shellcheck

- name: Run ShellCheck on changed files
if: steps.changed-files.outputs.files != ''
run: |
echo "Running ShellCheck on: ${{ steps.changed-files.outputs.files }}"
shellcheck -f gcc ${{ steps.changed-files.outputs.files }} > shellcheck_output.txt 2>&1 || true

# Display the full output
cat shellcheck_output.txt

# Compute error and warning counts
ERROR_COUNT=$(grep -c "error:" shellcheck_output.txt || echo "0")
WARNING_COUNT=$(grep -c "warning:" shellcheck_output.txt || echo "0")

echo ""
echo "## ShellCheck Report"
echo "| Category | Count |"
echo "|----------|-------|"
echo "| Errors | $ERROR_COUNT |"
echo "| Warnings | $WARNING_COUNT |"

# Fail if there are errors
if [ "$ERROR_COUNT" -gt 0 ]; then
echo "ShellCheck found $ERROR_COUNT error(s). Please fix them."
exit 1
fi

- name: No shell files changed
if: steps.changed-files.outputs.files == ''
run: |
echo "No shell files changed in this PR."
echo "Skipping ShellCheck."
Comment on lines +14 to +99
name: Unit Tests & Coverage
runs-on: ubuntu-latest
env:
COVERAGE_THRESHOLD: 70
strategy:
matrix:
python-version: ["3.12"]
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Check for changed build_stream files
id: changed-files
run: |
git fetch origin ${{ github.base_ref }}
# Get all changed Python files in build_stream directory
# (including root level)
CHANGED=$(git diff --name-only --diff-filter=d \
origin/${{ github.base_ref }} HEAD | \
grep '^src/build_stream/.*\.py$' || true)

FILES=$(echo "$CHANGED" | xargs)
echo "Changed src/build_stream Python files: $FILES"

# Debug: show all changed files for troubleshooting
echo "All changed files in PR:"
git diff --name-only --diff-filter=d \
origin/${{ github.base_ref }} HEAD || true

echo "files=$FILES" >> "$GITHUB_OUTPUT"

- name: Set up Python ${{ matrix.python-version }}
if: steps.changed-files.outputs.files != ''
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}

- name: Install dependencies
if: steps.changed-files.outputs.files != ''
run: |
python -m pip install --upgrade pip
pip install -r src/build_stream/requirements.txt
pip install -r src/build_stream/requirements-dev.txt

- name: Run unit tests with coverage
if: steps.changed-files.outputs.files != ''
working-directory: src/build_stream
run: |
python -m pytest tests/unit/ -v --tb=short \
--junitxml=test-results.xml \
--cov=. \
--cov-report=xml:coverage.xml \
--cov-report=term-missing \
-m unit

- name: Check coverage threshold
if: steps.changed-files.outputs.files != ''
working-directory: src/build_stream
run: |
python -m pytest tests/unit/ \
--cov=. \
--cov-fail-under=${COVERAGE_THRESHOLD} \
-m unit -q --no-header 2>&1 | tail -5
echo "Coverage threshold check: ${COVERAGE_THRESHOLD}% minimum"

- name: Upload test results
if: steps.changed-files.outputs.files != '' && always()
uses: actions/upload-artifact@v4
with:
name: test-results
path: src/build_stream/test-results.xml

- name: Upload coverage report
if: steps.changed-files.outputs.files != '' && always()
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: src/build_stream/coverage.xml

- name: No build_stream files changed
if: steps.changed-files.outputs.files == ''
run: |
echo "No src/build_stream Python files changed in this PR."
echo "Skipping tests."
Comment on lines +15 to +53
name: pip-audit Dependency Scan
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Check for changed requirements files
id: changed-files
run: |
git fetch origin ${{ github.base_ref }}
CHANGED=$(git diff --name-only --diff-filter=d \
origin/${{ github.base_ref }} HEAD -- \
'src/build_stream/requirements*.txt' || true)

FILES=$(echo "$CHANGED" | xargs)
echo "Changed requirements files: $FILES"
echo "files=$FILES" >> "$GITHUB_OUTPUT"

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'

- name: Install pip-audit
run: pip install pip-audit

- name: Audit build_stream dependencies
run: |
echo "Auditing src/build_stream/requirements.txt"
echo "for known vulnerabilities..."
pip-audit -r src/build_stream/requirements.txt \
--desc on || true
echo ""
echo "Auditing src/build_stream/requirements-dev.txt"
echo "for known vulnerabilities..."
pip-audit -r src/build_stream/requirements-dev.txt \
--desc on || true
Comment on lines +15 to +65
name: Bandit Python SAST
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Get changed Python files (excluding deleted)
id: changed-files
run: |
git fetch origin ${{ github.base_ref }}
CHANGED=$(git diff --name-only --diff-filter=d \
origin/${{ github.base_ref }} HEAD -- '*.py' || true)

FILES=""
for f in $CHANGED; do
if [ -f "$f" ]; then
# Exclude test files — Bandit SAST is for product code
case "$f" in
*/tests/*|*/test_*|*_test.py) continue ;;
*) FILES="$FILES $f" ;;
esac
fi
done

FILES=$(echo "$FILES" | xargs)
echo "Filtered files: $FILES"
echo "files=$FILES" >> "$GITHUB_OUTPUT"

- name: Set up Python
if: steps.changed-files.outputs.files != ''
uses: actions/setup-python@v4
with:
python-version: '3.11'

- name: Install Bandit
if: steps.changed-files.outputs.files != ''
run: pip install bandit

- name: Run Bandit on changed files
if: steps.changed-files.outputs.files != ''
run: |
echo "Running Bandit on: ${{ steps.changed-files.outputs.files }}"
bandit ${{ steps.changed-files.outputs.files }} -ll -ii -f txt

- name: No Python product files changed
if: steps.changed-files.outputs.files == ''
run: |
echo "No Python product files changed in this PR."
echo "Skipping Bandit."
config = load_test_config()
clone_path = config.get("clone_path", "/root/omnia")
try:
result = clone_repo(host, target_path=clone_path)
Comment on lines +76 to +80
result = sync_files(
host,
local_path=local_input,
remote_path=remote_input,
)
Comment on lines +111 to +115
result = sync_files(
host,
local_path=local_output,
remote_path=remote_dir,
)
Comment on lines +45 to +50
sync_files(
mode="ssh",
host=host,
src=f"{module_root}/../../",
dest=clone_path,
)
Comment on lines +91 to +96
sync_files(
mode="ssh",
host=host,
src=src_path,
dest=dest_path,
)
config = load_test_config()
clone_path = config.get("clone_path", "/root/omnia")
try:
result = clone_repo(host, target_path=clone_path)
Comment on lines +74 to +78
result = sync_files(
host,
local_path=local_input,
remote_path=remote_input,
)
Comment on lines +61 to +73
result = sync_files(
host=host,
src=MONOREPO_ROOT,
dest=clone_path,
exclude=[
".git",
"__pycache__",
"*.pyc",
".venv",
"reports",
"test/*/datasets/data_set_*",
],
)
Comment on lines +138 to +142
result = sync_files(
mode=conn["mode"], src=src_dir, dest=dest_path,
ip=conn["ip"], user=conn["user"],
password=conn["password"], ssh_opts=conn["ssh_opts"],
)
@sujit-jadhav

Copy link
Copy Markdown
Collaborator Author

Closing to recreate targeting issue-4849-omnia-modernization branch

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.