agentsclimarketplace

Ingress controller install

Skill qwedsazxc78/devops-ai-skill/skills/ingress-controller-install

GitOps-flavored Traefik Ingress Controller bootstrap, env addition, or chart upgrade in a Kustomize + ArgoCD repo. Operates exclusively on files under `common.traefik/` (base, overlays, argocd manifests). Never runs `helm install` or `helm upgrade` — those are ArgoCD's job. Plan-only: edits Kustomize files, emits the `git add` / commit / push commands, and the operator drives git. Validates coexistence with `ingress-nginx` via Kustomize-build inspection (no live cluster required). Use for new-cluster bootstrap, adding a new env overlay, or bumping the Traefik chart version.From its SKILL.md

Install
npx -y skills add qwedsazxc78/devops-ai-skill --skill ingress-controller-install

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 10 stars10 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

10.3 KB, ~2.6k tokens by cl100k_base, as published. Nobody here has run it

ingress-controller-install Skill

Invoked by Zeus pipeline *install-traefik. This is the GitOps companion to *decommission-nginx — both manipulate the common.*/ Kustomize modules ArgoCD reconciles, never the live cluster directly.

What this skill is NOT

  • Not a helm install / helm upgrade runner — those would conflict with ArgoCD reconciling the same release.
  • Not a cluster mutator — the only side effects are edits to repo files under common.traefik/.
  • Not an ArgoCD application applier — the operator runs kubectl apply -f common.traefik/argocd/<env>.yaml after committing.

Modes

The skill auto-detects which of three modes applies, based on repo state:

ModeTriggerAction
bootstrapcommon.traefik/ does not existScaffold the whole module from references/traefik-module-template.yaml
new-envcommon.traefik/base/ exists, overlays/<target-env>/ does notCopy overlays/dev/overlays/<target-env>/, prompt operator for env-specific overrides
upgradecommon.traefik/overlays/<target-env>/ existsBump the Traefik chart version: in base/kustomization.yaml AND every overlays/*/kustomization.yaml, idempotent

Override the detected mode with --mode <bootstrap|new-env|upgrade>.

Canonical references

FileWhen to read
references/coexistence-checklist.mdStep 3 — pre-commit checks for IngressClass / LB IP / port collision (read-only, Kustomize-build inspection)
references/values-template.yamlStep 2 (bootstrap) — embedded into base/app.values.yaml
references/traefik-module-template.yamlStep 2 (bootstrap) — Kustomize scaffolding skeleton (kustomization.yaml + base + overlays + argocd)

Bundled scripts

ScriptUsed byPurpose
scripts/detect_mode.shStep 1Inspect repo, decide between bootstrap / new-env / upgrade
scripts/validate_coexistence_kustomize.shStep 3Build the planned overlay AND any existing nginx overlay; verify no class / port / LB collision
scripts/upgrade_chart_version.shStep 4 (upgrade mode)Atomic version bump across base + all overlays + pre-commit consistency check

Activation

Triggered explicitly by *install-traefik from Zeus. Not auto-triggered.

Invocation forms

*install-traefik                                # interactive: detect mode, prompt as needed
*install-traefik --env dev                      # explicit target env
*install-traefik --env prd --mode new-env       # force new-env mode
*install-traefik --upgrade-to 40.1.0            # upgrade chart version on every overlay
*install-traefik --resume <state-path>          # continue from state.yaml

Output location

docs/reports/ingress-controller-install/<isodate>/
  state.yaml          # machine-readable plan + verdict
  plan.md             # operator-readable summary + commit message + git commands
  diff.patch          # unified diff of all proposed file edits (pre-commit preview)

The skill edits files in place under common.traefik/. Before any edit it writes a backup to docs/reports/.../backups/ (full file content, not a diff — matches the safety pattern from gateway-api-migration). On kustomize build failure post-edit, the backup is restored automatically.

Step Flow

StepActionScript
0Tool check (kustomize, yq, git)inline command -v
1Detect mode + target envdetect_mode.sh
2Branch on mode: scaffold OR copy-env OR identify upgrade scopeinline
3Validate coexistence (read-only Kustomize-build inspection)validate_coexistence_kustomize.sh
4Apply edits to common.traefik/, with backupsupgrade_chart_version.sh (upgrade) or inline (bootstrap / new-env)
5kustomize build the target overlay; rollback from backups on failureinline
6Render plan.md + diff.patch; print git commandsinline

Step 0 — Tool check

Run command -v kustomize yq git. HALT on any missing.

Step 1 — Detect mode

Invoke scripts/detect_mode.sh --repo-root . --target-env <env>. The script returns JSON:

{
  "mode": "bootstrap" | "new-env" | "upgrade",
  "moduleExists": true,
  "baseExists": true,
  "targetEnvExists": false,
  "existingOverlays": ["dev", "stg", "prd"],
  "currentChartVersion": "39.0.8"
}

If --mode is explicit, the script validates it's compatible with the detected state (e.g., refuses to bootstrap if common.traefik/ already exists, unless --force is passed).

Step 2 — Branch on mode

bootstrap: Read references/traefik-module-template.yaml, substitute env names, write to common.traefik/{base,overlays/<env>,argocd}/. Read references/values-template.yaml and write to common.traefik/base/app.values.yaml. The values file is parameterized on ${INGRESS_CLASS_NAME} (default traefik), ${LB_IP} (operator must supply — never derive from cluster), and ${GATEWAY_API_ENABLED} (default false).

new-env: cp -r common.traefik/overlays/<source-env>/ common.traefik/overlays/<target-env>/ where <source-env> defaults to dev. Prompt operator for env-specific overrides (LB IP, log level, replica count). Apply substitutions.

upgrade: No file structure changes; only version bumps in Step 4.

Step 3 — Validate coexistence

Invoke scripts/validate_coexistence_kustomize.sh --target-env <env>.

The script does read-only Kustomize-build inspection — no live cluster queries:

CheckHow
classCollisionRun kustomize build on the target overlay + every other common.*/overlays/<env>/. Extract every IngressClass and every kubernetes.io/ingress.class / spec.ingressClassName. The proposed Traefik class must not appear in any other module's built output (unless mode is upgrade — then collision against the existing Traefik class is expected).
lbIpCollisionGrep loadBalancerIP: and kubernetes.io/load-balancer-source-ranges annotations across all module builds. Proposed IP must not appear elsewhere.
portCollisionFor Services with type: LoadBalancer, port 80/443 must not be claimed by a non-Traefik release in the target namespace.

On any collision: HALT with verdict BLOCKED. Plan files NOT written.

Step 4 — Apply edits

bootstrap and new-env: write the planned files directly.

upgrade: invoke scripts/upgrade_chart_version.sh --target <version>. The script:

  1. Backs up base/kustomization.yaml + all overlays/*/kustomization.yaml.
  2. Updates helmCharts[0].version in each (idempotent via yq -i).
  3. Verifies all updated versions match the target (consistency check — the traefik-version-consistency pre-commit hook in the consumer repo will enforce this, but the skill catches it first).

Step 5 — Build + rollback safety

kustomize build common.traefik/overlays/<target-env> > /tmp/built.yaml

If exit != 0: restore all backups from docs/reports/.../backups/, mark verdict FAIL, HALT with the kustomize stderr. The repo is left identical to its pre-skill state.

Step 6 — Render plan + commit message

Write plan.md with:

  • Detected mode + target env
  • Coexistence check results
  • File-level summary (created / modified / unchanged)
  • The exact git commands the operator runs next:
git add common.traefik/  # or specific files
git commit -m "feat(traefik): bootstrap controller for <env>"
git push
kubectl apply -f common.traefik/argocd/<env>.yaml  # only for bootstrap / new-env

Also write diff.patch (full unified diff) so the operator can preview exactly what changed before staging.

The skill never auto-commits. Operator drives git.

State YAML schema

schemaVersion: 1
skillVersion: "2.0.0"
runId: <ulid>
createdAt: <iso>
inputs:
  targetEnv: dev | stg | prd | <custom>
  mode: bootstrap | new-env | upgrade | auto
  upgradeTo: "<chart-version>" | null
  ingressClassName: traefik
  lbIp: "<operator-supplied>"
  gatewayApiEnabled: false
detection:
  moduleExists: true
  baseExists: true
  targetEnvExists: false
  existingOverlays: [dev, stg, prd]
  currentChartVersion: "39.0.8"
validation:
  classCollision: false
  lbIpCollision: false
  portCollision: false
  details: {}
plan:
  mode: upgrade
  filesCreated: []
  filesModified:
    - {path: common.traefik/base/kustomization.yaml, backup: "...", sha256Before: "...", sha256After: "..."}
  filesUnchanged: []
  commitMessage: "chore(traefik): upgrade chart 39.0.8 → 40.1.0"
  gitCommands: [...]
  postApplyCommands:
    - "kubectl apply -f common.traefik/argocd/dev.yaml"
verdict: READY | BLOCKED | NEEDS_REVIEW
reportPath: docs/reports/ingress-controller-install/<slug>/plan.md

Halt conditions

StepHalt cause
0Required tool missing
1Mode mismatch (e.g., --mode bootstrap but common.traefik/ exists), no --force
3Class / LB IP / port collision
5kustomize build fails post-edit (backups restored automatically)

Principle: GitOps-first

Four invariants:

  1. Never run helm install / helm upgrade directly. The HelmChartInflationGenerator embedded in common.traefik/overlays/<env>/kustomization.yaml is the source of truth. ArgoCD applies the rendered manifests when the operator commits.
  2. Never run kubectl apply directly. The skill prints the kubectl apply -f common.traefik/argocd/<env>.yaml command but does not execute it.
  3. Edit only common.traefik/. No other module is touched. Coexistence validation reads but never writes other modules.
  4. Full-file backups before any edit. On kustomize build failure post-edit, the backup is restored. Failure mode is "repo unchanged", not "repo half-edited".

What ships with it: 5 files

21.2 KB alongside SKILL.md, 3 of them executable

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.