RHEL DevOps Auditor
When to Use
- User says "audit this project", "check compliance", "run an audit"
- User asks "how does this project compare to standards"
- After scaffolding a project, to validate completeness
- User wants to identify gaps before submitting for review
- User asks "what's missing" or "what do I need to fix"
- User asks to verify project structure against best practices
Do NOT use this skill for:
- Refactoring AgnosticD configs directly — use agnosticd-refactor (this skill audits and recommends, that skill executes)
- Validating a live running deployment — use agnosticd-deploy-test or student-readiness (this skill can dispatch to those)
- Creating a new project from scratch — use
./install.sh scaffold first, then audit
Instructions
This skill defines a four-module audit process. Each module checks a specific domain against documented standards. Run all modules by default (full audit) or individual modules on request.
Key behaviors:
- Always produce a structured report with PASS/WARN/FAIL per check
- Always produce a prioritized remediation plan when failures exist
- Remediation actions must include executable commands, not just descriptions
- Reference specific file paths and line numbers in findings
- Distinguish between BLOCKING (must fix), HIGH (should fix), and MEDIUM (nice to fix)
- If a module cannot run (e.g. no cluster credentials for deployment audit), mark it SKIP with a reason
Gotchas
- The auditor dispatches to other skills — it does NOT perform deep checks itself. If agnosticd-refactor or student-readiness are not installed, those check categories will be skipped
- Audit results are point-in-time — a PASS can become a FAIL if the environment changes between audit and student access
- The
--mode full default runs ALL check categories, which can take 10+ minutes on large deployments — use --mode quick for fast pre-flight checks
- WARN severity means "works but not ideal" — do NOT block a demo on WARNs unless the user explicitly asks for strict compliance
- Remediation commands in the report are generated, not tested — always review before executing, especially
oc delete commands
Audit Modes
| Mode |
Modules Run |
When to Use |
full |
All 4 modules |
Default; comprehensive project audit |
config |
Module 1 only |
Audit AgnosticD configs/roles |
manifest |
Module 2 only |
Audit onboard.yml against schema |
deployment |
Module 3 only |
Audit live deployed environment |
structure |
Module 4 only |
Audit project file structure |
Ask the user which mode they want if not specified. Default to full.
Required Input
| Input |
Required |
Default |
Notes |
| Project directory |
Yes |
Current working directory |
Must contain project files |
| Audit mode |
No |
full |
Can be narrowed to single module |
| Cluster credentials |
Only for Module 3 |
— |
kubeconfig or API URL + token |
| Project type |
No |
Auto-detected from Makefile |
hub-student, demo, or agnosticd-infra |
Module 1 — AgnosticD Config Audit
Standards source: agnosticd-refactor skill (Audit Areas 1-7)
Checks
| ID |
Check |
Severity |
Standard |
| M1-01 |
Config directory exists (ansible/configs/) |
BLOCKING |
AgnosticD v2 structure |
| M1-02 |
At least one config with required vars (cloud_provider, env_type) |
BLOCKING |
AgnosticD config contract |
| M1-03 |
Workload roles follow ocp4_workload_* naming |
HIGH |
AgnosticD role conventions |
| M1-04 |
Roles have defaults/main.yml with documented variables |
HIGH |
Ansible best practices |
| M1-05 |
Roles have meta/main.yml with role metadata |
MEDIUM |
Ansible Galaxy compatibility |
| M1-06 |
Pre/post hooks exist if config uses workloads |
MEDIUM |
AgnosticD lifecycle hooks |
| M1-07 |
No hardcoded secrets in vars files |
BLOCKING |
Security |
| M1-08 |
Vars files reference secrets via vault/external mechanism |
HIGH |
Secret management |
How to check
- Scan
ansible/configs/, ansible/roles/, and vars directories
- Verify file presence and YAML structure
- grep for hardcoded patterns: passwords, tokens, keys in plain text
- Validate variable naming conventions
Module 2 — Onboard Manifest Audit
Standards source: onboard skill's references/manifest-spec.md
Checks
| ID |
Check |
Severity |
Standard |
| M2-01 |
onboard.yml exists |
BLOCKING |
Project must be onboardable |
| M2-02 |
Required fields present (name, description, prerequisites) |
BLOCKING |
Manifest schema |
| M2-03 |
All prerequisites have check_command |
HIGH |
Idempotent detection |
| M2-04 |
Prerequisites have install commands for rhel9 |
BLOCKING |
Primary platform |
| M2-05 |
Prerequisites have install commands for macos |
MEDIUM |
Cross-platform |
| M2-06 |
Config prompts have defaults |
HIGH |
Non-interactive mode support |
| M2-07 |
Validation section has at least 1 required check |
HIGH |
Readiness gate |
| M2-08 |
config.output_file path is in .gitignore |
HIGH |
No secrets in git |
| M2-09 |
post_setup.message exists with next steps |
MEDIUM |
User guidance |
How to check
- Parse onboard.yml with python3 + PyYAML
- Validate against schema fields
- Cross-reference .gitignore entries
- Check each prerequisite entry for completeness
Module 3 — Live Deployment Audit
Standards source: student-readiness + agnosticd-deploy-test skills
Checks
| ID |
Check |
Severity |
Standard |
| M3-01 |
Cluster API is reachable |
BLOCKING |
Basic connectivity |
| M3-02 |
kubeconfig or credentials are valid (oc whoami succeeds) |
BLOCKING |
Authentication |
| M3-03 |
Hub cluster accessible (if hub-student type) |
BLOCKING |
Hub-student topology |
| M3-04 |
Showroom deployed and route accessible (if applicable) |
HIGH |
Showroom requirement |
| M3-05 |
Student clusters provisioned (N/N) |
BLOCKING |
Hub-student completeness |
| M3-06 |
agnosticd_user_info present with per-student credentials |
HIGH |
Credential pipeline |
| M3-07 |
Stop/start lifecycle works independently |
MEDIUM |
RHDP requirement |
| M3-08 |
Cross-cluster wiring: Showroom terminal targets student API |
HIGH |
Hub-student topology |
How to check
- Requires cluster credentials (kubeconfig path or API URL + token)
- Run
oc / kubectl commands against target clusters
- Check route/ingress for Showroom accessibility
- Verify ConfigMaps/Secrets for credential injection
- If no credentials provided: mark entire module as SKIP
Module 4 — Project Structure Audit
Standards source: ./install.sh scaffold output (standard project pattern)
Checks
| ID |
Check |
Severity |
Standard |
| M4-01 |
Makefile exists |
BLOCKING |
Standard entry point |
| M4-02 |
Makefile has 'deploy' target |
BLOCKING |
Deploy capability |
| M4-03 |
Makefile has 'destroy' target |
BLOCKING |
Teardown capability |
| M4-04 |
Makefile has 'dry-run' target |
HIGH |
Safe preview |
| M4-05 |
Makefile has 'status' target |
HIGH |
Environment awareness |
| M4-06 |
Makefile has 'check-quota' target |
HIGH |
Quota pre-flight |
| M4-07 |
Deploy script exists and is executable |
BLOCKING |
Provisioning |
| M4-08 |
Teardown script exists and is executable |
BLOCKING |
Cleanup |
| M4-09 |
bootstrap.sh or onboard.yml exists |
HIGH |
Onboarding path |
| M4-10 |
deploy/config.yml in .gitignore |
BLOCKING |
No secrets in git |
| M4-11 |
student_info.txt or deployment_info.txt in .gitignore |
HIGH |
No credentials in git |
| M4-12 |
logs/ in .gitignore |
MEDIUM |
No logs in git |
| M4-13 |
.workshop-state in .gitignore |
MEDIUM |
No state in git |
| M4-14 |
Deploy script has --dry-run flag |
HIGH |
Safe operations |
| M4-15 |
Deploy script has --confirm or --yes flag |
HIGH |
Explicit confirmation |
| M4-16 |
Teardown script destroys in correct order (students-first for hub-student) |
HIGH |
Data safety |
| M4-17 |
Scripts source workshop-common.sh from shared lib path |
MEDIUM |
DRY pattern |
| M4-18 |
GUID tracking present (.workshop-state with guid=) |
MEDIUM |
Environment identity |
| M4-19 |
State lock pattern present (.workshop-lock) |
MEDIUM |
Concurrency safety |
| M4-20 |
Scripts pass ShellCheck (no errors) |
MEDIUM |
Code quality |
How to check
- File existence checks (test -f, test -x)
- grep Makefile for target names
- grep .gitignore for required entries
- grep deploy/teardown scripts for flag handling patterns
- Run shellcheck if available
Report Format
After running all applicable modules, produce this exact format:
=== RHEL DevOps Project Audit Report ===
Project: <name> Date: <timestamp>
Type: <hub-student|demo|agnosticd-infra|unknown>
Mode: <full|config|manifest|deployment|structure>
Modules: <N>/4 run
Module 1: AgnosticD Config <PASS|WARN|FAIL|SKIP> (<X>/<Y> checks)
Module 2: Onboard Manifest <PASS|WARN|FAIL|SKIP> (<X>/<Y> checks)
Module 3: Live Deployment <PASS|WARN|FAIL|SKIP> (<X>/<Y> checks)
Module 4: Project Structure <PASS|WARN|FAIL|SKIP> (<X>/<Y> checks)
Overall: <READY|NEEDS ATTENTION> (<N> finding(s))
══════════════════════════════════════════════════════════════════
--- Findings ---
[FAIL] <ID>: <description>
File: <path>:<line> (if applicable)
[WARN] <ID>: <description>
...
--- Remediation Plan (prioritized) ---
Priority 1 (BLOCKING):
1. <finding description>
Action: <exact command or edit to fix>
Priority 2 (HIGH):
2. <finding description>
Action: <exact command or edit to fix>
Priority 3 (MEDIUM):
3. <finding description>
Action: <exact command or edit to fix>
Scoring
- Module PASS: All checks in that module pass (0 failures, 0 warnings)
- Module WARN: All required checks pass but at least 1 warning
- Module FAIL: At least 1 required check failed
- Module SKIP: Module could not run (missing input data)
- Overall READY: All modules are PASS or WARN (no FAIL)
- Overall NEEDS ATTENTION: At least 1 module has FAIL
Remediation Plan Rules
- Group by priority: BLOCKING first, then HIGH, then MEDIUM
- Each item must have an Action field with one of:
- An exact shell command to run
- An exact file edit (show the content to add/change)
- A reference to another skill to activate (e.g. "Activate agnosticd-refactor")
- Order within priority: fix items that unblock other items first
- If a scaffold would fix multiple items at once, recommend it:
Action: ./install.sh scaffold --type <type> --output .
- If the fix requires research: mark it as "(RESEARCH NEEDED)" and suggest activating the skill-researcher
Re-audit After Fixes
After the user applies fixes from the remediation plan, offer to re-run only the failed modules:
Re-running failed modules only:
Module 2 (Onboard Manifest) — re-checking...
Module 4 (Project Structure) — re-checking...
Skipping Module 1 (passed), Module 3 (skipped — no credentials).
Escalation
- AgnosticD config issues found → Recommend activating agnosticd-refactor to apply fixes
- Onboard manifest missing → Recommend
./install.sh scaffold --type <type> or manual creation per manifest-spec.md
- Deployment issues found → Recommend activating student-readiness or agnosticd-deploy-test
- Project structure gaps → Recommend
./install.sh scaffold --type <type> to generate missing files
- Research needed for a finding → Recommend activating skill-researcher
1---2name: rhel-devops-auditor3description: Audit projects against RHEL DevOps standards — AgnosticD configs, onboard.yml manifests, deployed environments, and project structure. Produces structured PASS/WARN/FAIL reports with prioritized remediation plans containing executable commands. A meta-auditor that dispatches to specific check modules and aggregates findings.4license: Apache-2.05---67# RHEL DevOps Auditor89## When to Use1011- User says "audit this project", "check compliance", "run an audit"12- User asks "how does this project compare to standards"13- After scaffolding a project, to validate completeness14- User wants to identify gaps before submitting for review15- User asks "what's missing" or "what do I need to fix"16- User asks to verify project structure against best practices1718Do NOT use this skill for:19- Refactoring AgnosticD configs directly — use **agnosticd-refactor** (this skill audits and recommends, that skill executes)20- Validating a live running deployment — use **agnosticd-deploy-test** or **student-readiness** (this skill can dispatch to those)21- Creating a new project from scratch — use `./install.sh scaffold` first, then audit2223## Instructions2425This skill defines a four-module audit process. Each module checks a specific domain against documented standards. Run all modules by default (full audit) or individual modules on request.2627**Key behaviors:**28- Always produce a structured report with PASS/WARN/FAIL per check29- Always produce a prioritized remediation plan when failures exist30- Remediation actions must include executable commands, not just descriptions31- Reference specific file paths and line numbers in findings32- Distinguish between BLOCKING (must fix), HIGH (should fix), and MEDIUM (nice to fix)33- If a module cannot run (e.g. no cluster credentials for deployment audit), mark it SKIP with a reason3435## Gotchas3637- The auditor dispatches to other skills — it does NOT perform deep checks itself. If agnosticd-refactor or student-readiness are not installed, those check categories will be skipped38- Audit results are point-in-time — a PASS can become a FAIL if the environment changes between audit and student access39- The `--mode full` default runs ALL check categories, which can take 10+ minutes on large deployments — use `--mode quick` for fast pre-flight checks40- WARN severity means "works but not ideal" — do NOT block a demo on WARNs unless the user explicitly asks for strict compliance41- Remediation commands in the report are generated, not tested — always review before executing, especially `oc delete` commands4243## Audit Modes4445| Mode | Modules Run | When to Use |46|------|-------------|-------------|47| `full` | All 4 modules | Default; comprehensive project audit |48| `config` | Module 1 only | Audit AgnosticD configs/roles |49| `manifest` | Module 2 only | Audit onboard.yml against schema |50| `deployment` | Module 3 only | Audit live deployed environment |51| `structure` | Module 4 only | Audit project file structure |5253Ask the user which mode they want if not specified. Default to `full`.5455## Required Input5657| Input | Required | Default | Notes |58|-------|----------|---------|-------|59| Project directory | Yes | Current working directory | Must contain project files |60| Audit mode | No | `full` | Can be narrowed to single module |61| Cluster credentials | Only for Module 3 | — | kubeconfig or API URL + token |62| Project type | No | Auto-detected from Makefile | hub-student, demo, or agnosticd-infra |6364## Module 1 — AgnosticD Config Audit6566**Standards source:** `agnosticd-refactor` skill (Audit Areas 1-7)6768### Checks6970| ID | Check | Severity | Standard |71|----|-------|----------|----------|72| M1-01 | Config directory exists (ansible/configs/) | BLOCKING | AgnosticD v2 structure |73| M1-02 | At least one config with required vars (cloud_provider, env_type) | BLOCKING | AgnosticD config contract |74| M1-03 | Workload roles follow ocp4_workload_* naming | HIGH | AgnosticD role conventions |75| M1-04 | Roles have defaults/main.yml with documented variables | HIGH | Ansible best practices |76| M1-05 | Roles have meta/main.yml with role metadata | MEDIUM | Ansible Galaxy compatibility |77| M1-06 | Pre/post hooks exist if config uses workloads | MEDIUM | AgnosticD lifecycle hooks |78| M1-07 | No hardcoded secrets in vars files | BLOCKING | Security |79| M1-08 | Vars files reference secrets via vault/external mechanism | HIGH | Secret management |8081### How to check8283- Scan `ansible/configs/`, `ansible/roles/`, and vars directories84- Verify file presence and YAML structure85- grep for hardcoded patterns: passwords, tokens, keys in plain text86- Validate variable naming conventions8788## Module 2 — Onboard Manifest Audit8990**Standards source:** `onboard` skill's `references/manifest-spec.md`9192### Checks9394| ID | Check | Severity | Standard |95|----|-------|----------|----------|96| M2-01 | onboard.yml exists | BLOCKING | Project must be onboardable |97| M2-02 | Required fields present (name, description, prerequisites) | BLOCKING | Manifest schema |98| M2-03 | All prerequisites have check_command | HIGH | Idempotent detection |99| M2-04 | Prerequisites have install commands for rhel9 | BLOCKING | Primary platform |100| M2-05 | Prerequisites have install commands for macos | MEDIUM | Cross-platform |101| M2-06 | Config prompts have defaults | HIGH | Non-interactive mode support |102| M2-07 | Validation section has at least 1 required check | HIGH | Readiness gate |103| M2-08 | config.output_file path is in .gitignore | HIGH | No secrets in git |104| M2-09 | post_setup.message exists with next steps | MEDIUM | User guidance |105106### How to check107108- Parse onboard.yml with python3 + PyYAML109- Validate against schema fields110- Cross-reference .gitignore entries111- Check each prerequisite entry for completeness112113## Module 3 — Live Deployment Audit114115**Standards source:** `student-readiness` + `agnosticd-deploy-test` skills116117### Checks118119| ID | Check | Severity | Standard |120|----|-------|----------|----------|121| M3-01 | Cluster API is reachable | BLOCKING | Basic connectivity |122| M3-02 | kubeconfig or credentials are valid (oc whoami succeeds) | BLOCKING | Authentication |123| M3-03 | Hub cluster accessible (if hub-student type) | BLOCKING | Hub-student topology |124| M3-04 | Showroom deployed and route accessible (if applicable) | HIGH | Showroom requirement |125| M3-05 | Student clusters provisioned (N/N) | BLOCKING | Hub-student completeness |126| M3-06 | agnosticd_user_info present with per-student credentials | HIGH | Credential pipeline |127| M3-07 | Stop/start lifecycle works independently | MEDIUM | RHDP requirement |128| M3-08 | Cross-cluster wiring: Showroom terminal targets student API | HIGH | Hub-student topology |129130### How to check131132- Requires cluster credentials (kubeconfig path or API URL + token)133- Run `oc` / `kubectl` commands against target clusters134- Check route/ingress for Showroom accessibility135- Verify ConfigMaps/Secrets for credential injection136- If no credentials provided: mark entire module as SKIP137138## Module 4 — Project Structure Audit139140**Standards source:** `./install.sh scaffold` output (standard project pattern)141142### Checks143144| ID | Check | Severity | Standard |145|----|-------|----------|----------|146| M4-01 | Makefile exists | BLOCKING | Standard entry point |147| M4-02 | Makefile has 'deploy' target | BLOCKING | Deploy capability |148| M4-03 | Makefile has 'destroy' target | BLOCKING | Teardown capability |149| M4-04 | Makefile has 'dry-run' target | HIGH | Safe preview |150| M4-05 | Makefile has 'status' target | HIGH | Environment awareness |151| M4-06 | Makefile has 'check-quota' target | HIGH | Quota pre-flight |152| M4-07 | Deploy script exists and is executable | BLOCKING | Provisioning |153| M4-08 | Teardown script exists and is executable | BLOCKING | Cleanup |154| M4-09 | bootstrap.sh or onboard.yml exists | HIGH | Onboarding path |155| M4-10 | deploy/config.yml in .gitignore | BLOCKING | No secrets in git |156| M4-11 | student_info.txt or deployment_info.txt in .gitignore | HIGH | No credentials in git |157| M4-12 | logs/ in .gitignore | MEDIUM | No logs in git |158| M4-13 | .workshop-state in .gitignore | MEDIUM | No state in git |159| M4-14 | Deploy script has --dry-run flag | HIGH | Safe operations |160| M4-15 | Deploy script has --confirm or --yes flag | HIGH | Explicit confirmation |161| M4-16 | Teardown script destroys in correct order (students-first for hub-student) | HIGH | Data safety |162| M4-17 | Scripts source workshop-common.sh from shared lib path | MEDIUM | DRY pattern |163| M4-18 | GUID tracking present (.workshop-state with guid=) | MEDIUM | Environment identity |164| M4-19 | State lock pattern present (.workshop-lock) | MEDIUM | Concurrency safety |165| M4-20 | Scripts pass ShellCheck (no errors) | MEDIUM | Code quality |166167### How to check168169- File existence checks (test -f, test -x)170- grep Makefile for target names171- grep .gitignore for required entries172- grep deploy/teardown scripts for flag handling patterns173- Run shellcheck if available174175## Report Format176177After running all applicable modules, produce this exact format:178179```180=== RHEL DevOps Project Audit Report ===181Project: <name> Date: <timestamp>182Type: <hub-student|demo|agnosticd-infra|unknown>183Mode: <full|config|manifest|deployment|structure>184Modules: <N>/4 run185186Module 1: AgnosticD Config <PASS|WARN|FAIL|SKIP> (<X>/<Y> checks)187Module 2: Onboard Manifest <PASS|WARN|FAIL|SKIP> (<X>/<Y> checks)188Module 3: Live Deployment <PASS|WARN|FAIL|SKIP> (<X>/<Y> checks)189Module 4: Project Structure <PASS|WARN|FAIL|SKIP> (<X>/<Y> checks)190191Overall: <READY|NEEDS ATTENTION> (<N> finding(s))192══════════════════════════════════════════════════════════════════193194--- Findings ---195196 [FAIL] <ID>: <description>197 File: <path>:<line> (if applicable)198 [WARN] <ID>: <description>199 ...200201--- Remediation Plan (prioritized) ---202203Priority 1 (BLOCKING):204 1. <finding description>205 Action: <exact command or edit to fix>206207Priority 2 (HIGH):208 2. <finding description>209 Action: <exact command or edit to fix>210211Priority 3 (MEDIUM):212 3. <finding description>213 Action: <exact command or edit to fix>214```215216## Scoring217218- **Module PASS:** All checks in that module pass (0 failures, 0 warnings)219- **Module WARN:** All required checks pass but at least 1 warning220- **Module FAIL:** At least 1 required check failed221- **Module SKIP:** Module could not run (missing input data)222- **Overall READY:** All modules are PASS or WARN (no FAIL)223- **Overall NEEDS ATTENTION:** At least 1 module has FAIL224225## Remediation Plan Rules2262271. Group by priority: BLOCKING first, then HIGH, then MEDIUM2282. Each item must have an **Action** field with one of:229 - An exact shell command to run230 - An exact file edit (show the content to add/change)231 - A reference to another skill to activate (e.g. "Activate agnosticd-refactor")2323. Order within priority: fix items that unblock other items first2334. If a scaffold would fix multiple items at once, recommend it:234 `Action: ./install.sh scaffold --type <type> --output .`2355. If the fix requires research: mark it as "(RESEARCH NEEDED)" and suggest activating the skill-researcher236237## Re-audit After Fixes238239After the user applies fixes from the remediation plan, offer to re-run only the failed modules:240241```242Re-running failed modules only:243 Module 2 (Onboard Manifest) — re-checking...244 Module 4 (Project Structure) — re-checking...245246Skipping Module 1 (passed), Module 3 (skipped — no credentials).247```248249## Escalation250251- **AgnosticD config issues found** → Recommend activating **agnosticd-refactor** to apply fixes252- **Onboard manifest missing** → Recommend `./install.sh scaffold --type <type>` or manual creation per manifest-spec.md253- **Deployment issues found** → Recommend activating **student-readiness** or **agnosticd-deploy-test**254- **Project structure gaps** → Recommend `./install.sh scaffold --type <type>` to generate missing files255- **Research needed for a finding** → Recommend activating **skill-researcher**