[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-azure-generate-k8s-manifests":3,"mdc-3oeyt4-key":34,"related-repo-azure-generate-k8s-manifests":5879,"related-org-azure-generate-k8s-manifests":5919},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":30,"sourceUrl":32,"mdContent":33},"generate-k8s-manifests","generate production Kubernetes manifests","Generate production-ready Kubernetes manifests (Deployment, Service, ConfigMap, Secret, ServiceAccount, optional HPA) for a containerized application. Use AFTER a Dockerfile exists and has been validated by fix-dockerfile. Triggers include \"generate kubernetes manifests\", \"deploy this to k8s\", \"write k8s yaml\", \"create deployment yaml\", or when running aks-loop and image is built. Writes manifests directly to the target directory.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"azure","Azure (Microsoft)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fazure.png","Azure",[13,15,18,21],{"name":11,"slug":8,"type":14},"tag",{"name":16,"slug":17,"type":14},"Containers","containers",{"name":19,"slug":20,"type":14},"Deployment","deployment",{"name":22,"slug":23,"type":14},"Kubernetes","kubernetes",41,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fcontainerization-assist","2026-07-12T08:18:26.554131",null,16,[],{"repoUrl":25,"stars":24,"forks":28,"topics":31,"description":27},[],"https:\u002F\u002Fgithub.com\u002FAzure\u002Fcontainerization-assist\u002Ftree\u002FHEAD\u002Fskills\u002Fgenerate-k8s-manifests","---\nname: generate-k8s-manifests\ndescription: Generate production-ready Kubernetes manifests (Deployment, Service, ConfigMap, Secret, ServiceAccount, optional HPA) for a containerized application. Use AFTER a Dockerfile exists and has been validated by fix-dockerfile. Triggers include \"generate kubernetes manifests\", \"deploy this to k8s\", \"write k8s yaml\", \"create deployment yaml\", or when running aks-loop and image is built. Writes manifests directly to the target directory.\nargument-hint: \u003CmodulePath> [appName] [namespace=default] [environment=production|development]\n---\n\n# Generate Kubernetes Manifests\n\nProduce a complete, production-ready set of Kubernetes manifests for **one\napplication** in **one module** and **write them to disk**. Deterministic —\nevery choice below comes from a fixed rule or table, not the model's\njudgment. The artifacts are the YAML files on disk, not chat output.\n\n## Inputs\n\n| Field | Required | Description |\n|---|---|---|\n| `modulePath` | yes | Absolute path of the module to deploy (a module from `analyze-repo`). |\n| `appName` | optional | Kubernetes resource name. Defaults to the directory basename of `modulePath`. Must be a valid DNS-1123 label (lowercase, digits, `-`, ≤ 63 chars). If the resolved value is invalid, normalize it (lowercase, replace invalid chars with `-`) and tell the user. |\n| `image` | optional | Container image reference (`registry\u002Frepo:tag`). Defaults to `\u003CappName>:dev` (caller must replace it before deploy). Used for `Deployment.spec.template.spec.containers[].image`. |\n| `namespace` | optional | Defaults to `default`. |\n| `environment` | optional | `production` (default) or `development`. Affects replicas, probes, resource defaults. |\n| `language` | optional | From `analyze-repo`. Used to pick default container port if `ports` empty. |\n| `framework` | optional | From `analyze-repo`. Same. |\n| `ports` | optional | From `analyze-repo`. First port becomes `containerPort` + `Service.targetPort`. |\n| `detectedEnvVars` | optional | From `analyze-repo`. Used to build `ConfigMap` (`config`\u002F`database` types) and `Secret` (`secret` type). |\n| `detectedDatabases` | optional | From `analyze-repo`. If any database is in the managed set (see below), emit a `ServiceAccount` with workload-identity annotations + reference it from the `Deployment`. |\n| `trafficLevel` | optional | `high` \\| `medium` \\| `low`. Affects replica count + HPA. |\n| `criticalityTier` | optional | `tier-1` (mission-critical) \\| `tier-2` \\| `tier-3`. Same. |\n| `manifestType` | optional | `kubernetes` (default), `helm`, `kustomize`, `aca`. **This skill only handles `kubernetes`.** For `helm` \u002F `kustomize` \u002F `aca`, tell the user it's out of scope and STOP. |\n| `outputDir` | optional | Where to write the YAML files. Default: `\u003CmodulePath>\u002Fk8s\u002F`. |\n\nIf `modulePath` is missing → ask the user. STOP.\n\n## Prerequisite: analyze-repo\n\nThis skill needs `language`, `framework`, `ports`, `detectedDatabases`,\nand `detectedEnvVars` from the `analyze-repo` skill. If you don't\nalready have that output for `\u003CmodulePath>` from earlier in this\nconversation, follow the `analyze-repo` skill against `\u003CmodulePath>`\nfirst, then come back.\n\n## Procedure\n\n### Step 1 — Resolve defaults\n\n**Container port** — if `ports[0]` is set, use it. Otherwise pick from the\nlanguage default:\n\n| Language \u002F framework | Default port |\n|---|---|\n| Spring Boot | 8080 |\n| Java (other) | 8080 |\n| ASP.NET Core | 8080 |\n| Node \u002F Express \u002F Next \u002F Fastify | 3000 |\n| Python \u002F Flask | 5000 |\n| Python \u002F Django | 8000 |\n| Python \u002F FastAPI \u002F Uvicorn | 8000 |\n| Go (gin \u002F echo \u002F fiber \u002F chi) | 8080 |\n| Rust (axum \u002F actix \u002F rocket) | 8080 |\n| PHP-FPM | 9000 |\n| PHP \u002F Apache | 80 |\n| Ruby on Rails | 3000 |\n| Unknown | 8080 |\n\n**Replica count** — start from this table, then override if both\n`trafficLevel` and `criticalityTier` are given (lower row wins):\n\n| Environment | Default `replicas` |\n|---|---|\n| `development` | 1 |\n| `production` | 2 |\n\n| Traffic × Criticality | `replicas` |\n|---|---|\n| `high` × `tier-1` | 5 |\n| `high` × `tier-2` | 3 |\n| `medium` × `tier-1` | 3 |\n| `medium` × `tier-2` | 2 |\n| `low` × any | 1 |\n| `tier-3` (any traffic) | 1 |\n\n**Resources** — fixed defaults (`requests` ≈ 50% of `limits`):\n\n| Environment | requests.cpu | requests.memory | limits.cpu | limits.memory |\n|---|---|---|---|---|\n| `development` | `100m` | `128Mi` | `500m` | `512Mi` |\n| `production` | `250m` | `256Mi` | `500m` | `512Mi` |\n\nIf the user supplied `k8sConfig.resourceDefaults`, use those instead.\n\n**Probes** — pick a probe path:\n\n| Framework | path |\n|---|---|\n| Spring Boot | `\u002Factuator\u002Fhealth` (liveness), `\u002Factuator\u002Fhealth\u002Freadiness` (readiness) |\n| ASP.NET Core | `\u002Fhealth` |\n| Express \u002F Fastify with `health-checks` dependency | `\u002Fhealth` |\n| FastAPI \u002F Flask \u002F Django | `\u002Fhealth` |\n| Go web frameworks | `\u002Fhealth` |\n| Others | `\u002F` (TCP socket probe fallback — see below) |\n\nIf you cannot infer a meaningful HTTP endpoint, fall back to a **TCP\nsocket** probe on `containerPort`.\n\nIn **development** environment, omit probes entirely (keeps startup simple).\n\n**Managed databases** — workload identity is required for any DB whose\n`dbType` is in:\n\n```\n{ postgres, mysql, mongodb, redis, mssql, cosmosdb }\n```\n\nIf `detectedDatabases` includes any of these → emit a `ServiceAccount`\ncalled `\u003CappName>-sa` with the Azure Workload Identity annotations (see\nStep 2). Use this SA in the `Deployment.spec.template.spec.serviceAccountName`.\n\nIf no managed DB is detected → omit the ServiceAccount, the Deployment\nuses the namespace's default SA.\n\n### Step 2 — Build each manifest\n\nAlways required: **Deployment**, **Service**.\nConditional: **ConfigMap** (any `config` \u002F `database` env var), **Secret**\n(any `secret` env var — values **must be placeholders**, never real\nsecrets), **ServiceAccount** (managed DB detected),\n**HorizontalPodAutoscaler** (production AND `trafficLevel ∈ {high, medium}`).\n\n#### Required labels & annotations (on every resource's `metadata`)\n\n```yaml\nmetadata:\n  name: \u003CappName>[-suffix]\n  namespace: \u003Cnamespace>\n  labels:\n    app.kubernetes.io\u002Fname: \u003CappName>\n    app.kubernetes.io\u002Fmanaged-by: containerization-assist\n  # Include the annotation only if the current `containerization-assist`\n  # package version is readable from the environment; otherwise omit\n  # the entire `annotations:` block. Never hard-code a stale version.\n  annotations:\n    com.azure.containerizationassist\u002Fversion: \u003Cversion>\n```\n\nDo NOT rename the annotation key to `containerization-assist\u002Fversion`.\n\n#### Deployment\n\n```yaml\napiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: \u003CappName>\n  namespace: \u003Cnamespace>\n  labels:\n    app.kubernetes.io\u002Fname: \u003CappName>\n    app.kubernetes.io\u002Fmanaged-by: containerization-assist\nspec:\n  replicas: \u003Cfrom Step 1>\n  selector:\n    matchLabels:\n      app.kubernetes.io\u002Fname: \u003CappName>\n  template:\n    metadata:\n      labels:\n        app.kubernetes.io\u002Fname: \u003CappName>\n        app.kubernetes.io\u002Fmanaged-by: containerization-assist\n      # If a managed DB is detected, add this annotations block (matches the ServiceAccount + serviceAccountName below).\n      # Otherwise omit the entire `annotations:` key.\n      annotations:\n        azure.workload.identity\u002Fuse: \"true\"\n    spec:\n      # Include `serviceAccountName` only if a managed DB is detected (matches the workload-identity annotation above).\n      serviceAccountName: \u003CappName>-sa\n      securityContext:\n        runAsNonRoot: true\n        runAsUser: 10001\n        fsGroup: 10001\n        seccompProfile: { type: RuntimeDefault }\n      containers:\n        - name: \u003CappName>\n          image: \u003Cimage>\n          imagePullPolicy: IfNotPresent\n          ports:\n            - name: http\n              containerPort: \u003Cport>\n              protocol: TCP\n          env:                                  # one entry per env var (see below)\n            - name: PORT\n              value: \"\u003Cport>\"\n          # Include `envFrom` only for the refs whose backing object you emit:\n          # `configMapRef` only if a ConfigMap was emitted; `secretRef` only if a Secret was emitted.\n          envFrom:\n            - configMapRef:\n                name: \u003CappName>-config\n            - secretRef:\n                name: \u003CappName>-secret\n          resources:\n            requests:\n              cpu: \u003Csee Step 1>\n              memory: \u003Csee Step 1>\n            limits:\n              cpu: \u003Csee Step 1>\n              memory: \u003Csee Step 1>\n          securityContext:\n            allowPrivilegeEscalation: false\n            readOnlyRootFilesystem: true\n            capabilities:\n              drop: [\"ALL\"]\n          # Include `livenessProbe` and `readinessProbe` only in production. Omit both in development.\n          livenessProbe:\n            httpGet:\n              path: \u003Cprobe path>\n              port: http\n            initialDelaySeconds: 30\n            periodSeconds: 10\n          readinessProbe:\n            httpGet:\n              path: \u003Cprobe path>\n              port: http\n            initialDelaySeconds: 5\n            periodSeconds: 5\n```\n\n**Env-var emission rules** (per entry in `detectedEnvVars`):\n\n- `classification == \"config\"` or `\"database\"` with a `defaultValue` →\n  becomes a key in the ConfigMap. Reference via `envFrom.configMapRef`.\n- `classification == \"config\"` or `\"database\"` without a `defaultValue` →\n  becomes a key in the ConfigMap with value `\"\"` (user must fill in).\n- `classification == \"secret\"` → key in the Secret with placeholder value\n  `\"REPLACE_ME\"`. Reference via `envFrom.secretRef`. **NEVER include any\n  real `defaultValue` for secret-classified entries.**\n\nIf `readOnlyRootFilesystem: true` would break the framework (Java apps\nthat write to `\u002Ftmp`, ASP.NET Core), add a `volumeMounts` + `emptyDir`\nvolume for `\u002Ftmp`:\n\n```yaml\nvolumes:\n  - name: tmp\n    emptyDir: {}\n# inside container:\nvolumeMounts:\n  - name: tmp\n    mountPath: \u002Ftmp\n```\n\n#### Service\n\n```yaml\napiVersion: v1\nkind: Service\nmetadata:\n  name: \u003CappName>\n  namespace: \u003Cnamespace>\n  labels:\n    app.kubernetes.io\u002Fname: \u003CappName>\n    app.kubernetes.io\u002Fmanaged-by: containerization-assist\nspec:\n  type: ClusterIP\n  selector:\n    app.kubernetes.io\u002Fname: \u003CappName>\n  ports:\n    - name: http\n      port: 80\n      targetPort: http\n      protocol: TCP\n```\n\n#### ConfigMap *(only if any non-secret env vars)*\n\n```yaml\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: \u003CappName>-config\n  namespace: \u003Cnamespace>\n  labels:\n    app.kubernetes.io\u002Fname: \u003CappName>\n    app.kubernetes.io\u002Fmanaged-by: containerization-assist\ndata:\n  \u003CKEY>: \"\u003CdefaultValue or empty string>\"\n  ...\n```\n\n#### Secret *(only if any secret env vars)*\n\n```yaml\napiVersion: v1\nkind: Secret\nmetadata:\n  name: \u003CappName>-secret\n  namespace: \u003Cnamespace>\n  labels:\n    app.kubernetes.io\u002Fname: \u003CappName>\n    app.kubernetes.io\u002Fmanaged-by: containerization-assist\ntype: Opaque\nstringData:\n  \u003CKEY>: \"REPLACE_ME\"\n  ...\n```\n\n#### ServiceAccount *(only if managed DB detected)*\n\n```yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: \u003CappName>-sa\n  namespace: \u003Cnamespace>\n  labels:\n    app.kubernetes.io\u002Fname: \u003CappName>\n    app.kubernetes.io\u002Fmanaged-by: containerization-assist\n  annotations:\n    azure.workload.identity\u002Fclient-id: \"\u003CREPLACE_WITH_USER_ASSIGNED_IDENTITY_CLIENT_ID>\"\n```\n\nAlso add the Deployment pod-template annotation:\n`azure.workload.identity\u002Fuse: \"true\"`.\n\n#### HorizontalPodAutoscaler *(only if production AND trafficLevel ∈ {high, medium})*\n\n```yaml\napiVersion: autoscaling\u002Fv2\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: \u003CappName>\n  namespace: \u003Cnamespace>\n  labels:\n    app.kubernetes.io\u002Fname: \u003CappName>\n    app.kubernetes.io\u002Fmanaged-by: containerization-assist\nspec:\n  scaleTargetRef:\n    apiVersion: apps\u002Fv1\n    kind: Deployment\n    name: \u003CappName>\n  minReplicas: \u003Creplicas from Step 1>\n  maxReplicas: \u003CminReplicas * 3, min 5, max 20>\n  metrics:\n    - type: Resource\n      resource:\n        name: cpu\n        target: { type: Utilization, averageUtilization: 70 }\n```\n\n### Step 3 — Self-check before writing\n\nFor each generated YAML, confirm:\n\n- [ ] `apiVersion` and `kind` present\n- [ ] `metadata.name` matches `\u003CappName>` (or `\u003CappName>-\u003Csuffix>`)\n- [ ] `metadata.namespace` matches input\n- [ ] Required labels (`app.kubernetes.io\u002Fname`, `app.kubernetes.io\u002Fmanaged-by`) present\n- [ ] Deployment: `runAsNonRoot: true`, `runAsUser` ≥ 1000, no `privileged`, no `hostNetwork`, no `hostPID`\n- [ ] Deployment: resources requests **and** limits both set\n- [ ] No real secret values (only `REPLACE_ME` placeholders) in Secret\n- [ ] If managed DB present: ServiceAccount exists AND Deployment references it AND `azure.workload.identity\u002Fuse` annotation on pod template\n- [ ] YAML parses cleanly (no tabs, consistent 2-space indent)\n\nIf any check fails, fix the YAML before writing. Never write a manifest\nthat fails the security checks.\n\n### Step 4 — Write to disk\n\n- Create `outputDir` (default `\u003CmodulePath>\u002Fk8s\u002F`) if it doesn't exist.\n- Write one file per resource, using these names (skip files for resources\n  you did not emit):\n\n  | File | Resource |\n  |---|---|\n  | `deployment.yaml` | Deployment |\n  | `service.yaml` | Service |\n  | `configmap.yaml` | ConfigMap |\n  | `secret.yaml` | Secret |\n  | `serviceaccount.yaml` | ServiceAccount |\n  | `hpa.yaml` | HorizontalPodAutoscaler |\n\n- Use the chat environment's file-edit\u002Fwrite capability. Do NOT ask the\n  user to copy-paste. Do NOT print the YAML in chat unless the user asks.\n\n### Step 5 — Output\n\nUse this exact format (succinct — the YAML files are the artifact):\n\n````md\n**Kubernetes manifests** — `\u003CappName>` in `\u003Cnamespace>`\n\n### Result\n✅ Wrote N manifest(s) to `\u003CoutputDir>`:\n- `deployment.yaml` — N replicas, image `\u003Cimage>`\n- `service.yaml` — ClusterIP on port 80 → containerPort \u003Cport>\n- `configmap.yaml` — N keys                  *(omit line if not emitted)*\n- `secret.yaml` — N keys (all `REPLACE_ME`)  *(omit line if not emitted)*\n- `serviceaccount.yaml` — workload identity for \u003CDB list>  *(omit line if not emitted)*\n- `hpa.yaml` — min N, max M, target CPU 70%  *(omit line if not emitted)*\n\n### Configuration summary\n- **Replicas:** \u003CN> (\u003Creason — e.g. \"production default\", \"trafficLevel=high × tier-1\">)\n- **Resources:** requests cpu=\u003Cv> mem=\u003Cv>, limits cpu=\u003Cv> mem=\u003Cv>\n- **Probes:** \u003C\"liveness + readiness on \u003Cpath>\" or \"disabled (development)\" or \"TCP fallback\">\n- **Security context:** runAsNonRoot=true, readOnlyRootFilesystem=true, capabilities dropped\n- **Workload identity:** \u003C\"enabled — replace client-id annotation with your User-Assigned Identity ID\" or \"not required\">\n\n### Action required before deploy\n- \u003Clist every `REPLACE_ME` value in secret.yaml and the workload identity client-id if SA was emitted>\n- \u003C\"Replace placeholder image \u003CappName>:dev\" if image was defaulted>\n\n### Next steps\n1. `kubectl apply -n \u003Cnamespace> -f \u003CoutputDir>\u002F`\n2. Run **verify-deploy** (tool) to confirm rollout succeeds.\n3. Run **scan-image** (tool) on the image before promoting to production.\n````\n\n## Constraints\n\n- The artifacts are the files in `\u003CoutputDir>`. Always write them to disk.\n- NEVER print full YAML in chat unless the user explicitly asks (\"show me\",\n  \"print the deployment\", etc.).\n- NEVER put real secret values in a Secret. Always `REPLACE_ME`.\n- NEVER omit `securityContext.runAsNonRoot: true` or `allowPrivilegeEscalation: false`.\n- NEVER set `privileged: true`, `hostNetwork: true`, `hostPID: true`, or `hostIPC: true`.\n- NEVER pick the `latest` tag for the image. If user gave one, warn and\n  proceed but mark it in \"Action required\".\n- NEVER emit `helm` or `kustomize` — out of scope for this skill.\n- Manifest order in `kubectl apply -f` matters: this skill writes one file\n  per kind, so kubectl handles ordering naturally.\n\n## Failure modes\n\n| Symptom | Action |\n|---|---|\n| `modulePath` doesn't exist | Echo path; ask for a valid one. STOP. |\n| `appName` invalid for DNS-1123 | Normalize; tell user; continue with normalized name. |\n| User asked for `helm` \u002F `kustomize` | Decline politely; suggest manual chart authoring. STOP. |\n| Cannot infer port AND no `ports` provided | Use `8080`; note in **Configuration summary** that the port is a guess. |\n| `outputDir` is not writable | Surface the OS error; ask user for a different path. STOP. |\n| User provided real-looking secret values in `detectedEnvVars` | Strip them; write `REPLACE_ME`; surface a warning. |\n",{"data":35,"body":37},{"name":4,"description":6,"argument-hint":36},"\u003CmodulePath> [appName] [namespace=default] [environment=production|development]",{"type":38,"children":39},"root",[40,49,77,84,704,716,722,788,794,801,819,1003,1026,1086,1232,1258,1386,1399,1409,1547,1565,1576,1594,1606,1639,1644,1650,1726,1741,1913,1925,1929,3105,3121,3229,3270,3382,3387,3643,3655,3820,3831,4011,4022,4178,4190,4201,4540,4546,4551,4756,4761,4767,4917,4923,4928,5574,5580,5708,5714,5873],{"type":41,"tag":42,"props":43,"children":45},"element","h1",{"id":44},"generate-kubernetes-manifests",[46],{"type":47,"value":48},"text","Generate Kubernetes Manifests",{"type":41,"tag":50,"props":51,"children":52},"p",{},[53,55,61,63,68,70,75],{"type":47,"value":54},"Produce a complete, production-ready set of Kubernetes manifests for ",{"type":41,"tag":56,"props":57,"children":58},"strong",{},[59],{"type":47,"value":60},"one\napplication",{"type":47,"value":62}," in ",{"type":41,"tag":56,"props":64,"children":65},{},[66],{"type":47,"value":67},"one module",{"type":47,"value":69}," and ",{"type":41,"tag":56,"props":71,"children":72},{},[73],{"type":47,"value":74},"write them to disk",{"type":47,"value":76},". Deterministic —\nevery choice below comes from a fixed rule or table, not the model's\njudgment. The artifacts are the YAML files on disk, not chat output.",{"type":41,"tag":78,"props":79,"children":81},"h2",{"id":80},"inputs",[82],{"type":47,"value":83},"Inputs",{"type":41,"tag":85,"props":86,"children":87},"table",{},[88,112],{"type":41,"tag":89,"props":90,"children":91},"thead",{},[92],{"type":41,"tag":93,"props":94,"children":95},"tr",{},[96,102,107],{"type":41,"tag":97,"props":98,"children":99},"th",{},[100],{"type":47,"value":101},"Field",{"type":41,"tag":97,"props":103,"children":104},{},[105],{"type":47,"value":106},"Required",{"type":41,"tag":97,"props":108,"children":109},{},[110],{"type":47,"value":111},"Description",{"type":41,"tag":113,"props":114,"children":115},"tbody",{},[116,148,192,237,265,300,336,363,404,470,511,553,594,676],{"type":41,"tag":93,"props":117,"children":118},{},[119,130,135],{"type":41,"tag":120,"props":121,"children":122},"td",{},[123],{"type":41,"tag":124,"props":125,"children":127},"code",{"className":126},[],[128],{"type":47,"value":129},"modulePath",{"type":41,"tag":120,"props":131,"children":132},{},[133],{"type":47,"value":134},"yes",{"type":41,"tag":120,"props":136,"children":137},{},[138,140,146],{"type":47,"value":139},"Absolute path of the module to deploy (a module from ",{"type":41,"tag":124,"props":141,"children":143},{"className":142},[],[144],{"type":47,"value":145},"analyze-repo",{"type":47,"value":147},").",{"type":41,"tag":93,"props":149,"children":150},{},[151,160,165],{"type":41,"tag":120,"props":152,"children":153},{},[154],{"type":41,"tag":124,"props":155,"children":157},{"className":156},[],[158],{"type":47,"value":159},"appName",{"type":41,"tag":120,"props":161,"children":162},{},[163],{"type":47,"value":164},"optional",{"type":41,"tag":120,"props":166,"children":167},{},[168,170,175,177,183,185,190],{"type":47,"value":169},"Kubernetes resource name. Defaults to the directory basename of ",{"type":41,"tag":124,"props":171,"children":173},{"className":172},[],[174],{"type":47,"value":129},{"type":47,"value":176},". Must be a valid DNS-1123 label (lowercase, digits, ",{"type":41,"tag":124,"props":178,"children":180},{"className":179},[],[181],{"type":47,"value":182},"-",{"type":47,"value":184},", ≤ 63 chars). If the resolved value is invalid, normalize it (lowercase, replace invalid chars with ",{"type":41,"tag":124,"props":186,"children":188},{"className":187},[],[189],{"type":47,"value":182},{"type":47,"value":191},") and tell the user.",{"type":41,"tag":93,"props":193,"children":194},{},[195,204,208],{"type":41,"tag":120,"props":196,"children":197},{},[198],{"type":41,"tag":124,"props":199,"children":201},{"className":200},[],[202],{"type":47,"value":203},"image",{"type":41,"tag":120,"props":205,"children":206},{},[207],{"type":47,"value":164},{"type":41,"tag":120,"props":209,"children":210},{},[211,213,219,221,227,229,235],{"type":47,"value":212},"Container image reference (",{"type":41,"tag":124,"props":214,"children":216},{"className":215},[],[217],{"type":47,"value":218},"registry\u002Frepo:tag",{"type":47,"value":220},"). Defaults to ",{"type":41,"tag":124,"props":222,"children":224},{"className":223},[],[225],{"type":47,"value":226},"\u003CappName>:dev",{"type":47,"value":228}," (caller must replace it before deploy). Used for ",{"type":41,"tag":124,"props":230,"children":232},{"className":231},[],[233],{"type":47,"value":234},"Deployment.spec.template.spec.containers[].image",{"type":47,"value":236},".",{"type":41,"tag":93,"props":238,"children":239},{},[240,249,253],{"type":41,"tag":120,"props":241,"children":242},{},[243],{"type":41,"tag":124,"props":244,"children":246},{"className":245},[],[247],{"type":47,"value":248},"namespace",{"type":41,"tag":120,"props":250,"children":251},{},[252],{"type":47,"value":164},{"type":41,"tag":120,"props":254,"children":255},{},[256,258,264],{"type":47,"value":257},"Defaults to ",{"type":41,"tag":124,"props":259,"children":261},{"className":260},[],[262],{"type":47,"value":263},"default",{"type":47,"value":236},{"type":41,"tag":93,"props":266,"children":267},{},[268,277,281],{"type":41,"tag":120,"props":269,"children":270},{},[271],{"type":41,"tag":124,"props":272,"children":274},{"className":273},[],[275],{"type":47,"value":276},"environment",{"type":41,"tag":120,"props":278,"children":279},{},[280],{"type":47,"value":164},{"type":41,"tag":120,"props":282,"children":283},{},[284,290,292,298],{"type":41,"tag":124,"props":285,"children":287},{"className":286},[],[288],{"type":47,"value":289},"production",{"type":47,"value":291}," (default) or ",{"type":41,"tag":124,"props":293,"children":295},{"className":294},[],[296],{"type":47,"value":297},"development",{"type":47,"value":299},". Affects replicas, probes, resource defaults.",{"type":41,"tag":93,"props":301,"children":302},{},[303,312,316],{"type":41,"tag":120,"props":304,"children":305},{},[306],{"type":41,"tag":124,"props":307,"children":309},{"className":308},[],[310],{"type":47,"value":311},"language",{"type":41,"tag":120,"props":313,"children":314},{},[315],{"type":47,"value":164},{"type":41,"tag":120,"props":317,"children":318},{},[319,321,326,328,334],{"type":47,"value":320},"From ",{"type":41,"tag":124,"props":322,"children":324},{"className":323},[],[325],{"type":47,"value":145},{"type":47,"value":327},". Used to pick default container port if ",{"type":41,"tag":124,"props":329,"children":331},{"className":330},[],[332],{"type":47,"value":333},"ports",{"type":47,"value":335}," empty.",{"type":41,"tag":93,"props":337,"children":338},{},[339,348,352],{"type":41,"tag":120,"props":340,"children":341},{},[342],{"type":41,"tag":124,"props":343,"children":345},{"className":344},[],[346],{"type":47,"value":347},"framework",{"type":41,"tag":120,"props":349,"children":350},{},[351],{"type":47,"value":164},{"type":41,"tag":120,"props":353,"children":354},{},[355,356,361],{"type":47,"value":320},{"type":41,"tag":124,"props":357,"children":359},{"className":358},[],[360],{"type":47,"value":145},{"type":47,"value":362},". Same.",{"type":41,"tag":93,"props":364,"children":365},{},[366,374,378],{"type":41,"tag":120,"props":367,"children":368},{},[369],{"type":41,"tag":124,"props":370,"children":372},{"className":371},[],[373],{"type":47,"value":333},{"type":41,"tag":120,"props":375,"children":376},{},[377],{"type":47,"value":164},{"type":41,"tag":120,"props":379,"children":380},{},[381,382,387,389,395,397,403],{"type":47,"value":320},{"type":41,"tag":124,"props":383,"children":385},{"className":384},[],[386],{"type":47,"value":145},{"type":47,"value":388},". First port becomes ",{"type":41,"tag":124,"props":390,"children":392},{"className":391},[],[393],{"type":47,"value":394},"containerPort",{"type":47,"value":396}," + ",{"type":41,"tag":124,"props":398,"children":400},{"className":399},[],[401],{"type":47,"value":402},"Service.targetPort",{"type":47,"value":236},{"type":41,"tag":93,"props":405,"children":406},{},[407,416,420],{"type":41,"tag":120,"props":408,"children":409},{},[410],{"type":41,"tag":124,"props":411,"children":413},{"className":412},[],[414],{"type":47,"value":415},"detectedEnvVars",{"type":41,"tag":120,"props":417,"children":418},{},[419],{"type":47,"value":164},{"type":41,"tag":120,"props":421,"children":422},{},[423,424,429,431,437,439,445,447,453,455,461,462,468],{"type":47,"value":320},{"type":41,"tag":124,"props":425,"children":427},{"className":426},[],[428],{"type":47,"value":145},{"type":47,"value":430},". Used to build ",{"type":41,"tag":124,"props":432,"children":434},{"className":433},[],[435],{"type":47,"value":436},"ConfigMap",{"type":47,"value":438}," (",{"type":41,"tag":124,"props":440,"children":442},{"className":441},[],[443],{"type":47,"value":444},"config",{"type":47,"value":446},"\u002F",{"type":41,"tag":124,"props":448,"children":450},{"className":449},[],[451],{"type":47,"value":452},"database",{"type":47,"value":454}," types) and ",{"type":41,"tag":124,"props":456,"children":458},{"className":457},[],[459],{"type":47,"value":460},"Secret",{"type":47,"value":438},{"type":41,"tag":124,"props":463,"children":465},{"className":464},[],[466],{"type":47,"value":467},"secret",{"type":47,"value":469}," type).",{"type":41,"tag":93,"props":471,"children":472},{},[473,482,486],{"type":41,"tag":120,"props":474,"children":475},{},[476],{"type":41,"tag":124,"props":477,"children":479},{"className":478},[],[480],{"type":47,"value":481},"detectedDatabases",{"type":41,"tag":120,"props":483,"children":484},{},[485],{"type":47,"value":164},{"type":41,"tag":120,"props":487,"children":488},{},[489,490,495,497,503,505,510],{"type":47,"value":320},{"type":41,"tag":124,"props":491,"children":493},{"className":492},[],[494],{"type":47,"value":145},{"type":47,"value":496},". If any database is in the managed set (see below), emit a ",{"type":41,"tag":124,"props":498,"children":500},{"className":499},[],[501],{"type":47,"value":502},"ServiceAccount",{"type":47,"value":504}," with workload-identity annotations + reference it from the ",{"type":41,"tag":124,"props":506,"children":508},{"className":507},[],[509],{"type":47,"value":19},{"type":47,"value":236},{"type":41,"tag":93,"props":512,"children":513},{},[514,523,527],{"type":41,"tag":120,"props":515,"children":516},{},[517],{"type":41,"tag":124,"props":518,"children":520},{"className":519},[],[521],{"type":47,"value":522},"trafficLevel",{"type":41,"tag":120,"props":524,"children":525},{},[526],{"type":47,"value":164},{"type":41,"tag":120,"props":528,"children":529},{},[530,536,538,544,545,551],{"type":41,"tag":124,"props":531,"children":533},{"className":532},[],[534],{"type":47,"value":535},"high",{"type":47,"value":537}," | ",{"type":41,"tag":124,"props":539,"children":541},{"className":540},[],[542],{"type":47,"value":543},"medium",{"type":47,"value":537},{"type":41,"tag":124,"props":546,"children":548},{"className":547},[],[549],{"type":47,"value":550},"low",{"type":47,"value":552},". Affects replica count + HPA.",{"type":41,"tag":93,"props":554,"children":555},{},[556,565,569],{"type":41,"tag":120,"props":557,"children":558},{},[559],{"type":41,"tag":124,"props":560,"children":562},{"className":561},[],[563],{"type":47,"value":564},"criticalityTier",{"type":41,"tag":120,"props":566,"children":567},{},[568],{"type":47,"value":164},{"type":41,"tag":120,"props":570,"children":571},{},[572,578,580,586,587,593],{"type":41,"tag":124,"props":573,"children":575},{"className":574},[],[576],{"type":47,"value":577},"tier-1",{"type":47,"value":579}," (mission-critical) | ",{"type":41,"tag":124,"props":581,"children":583},{"className":582},[],[584],{"type":47,"value":585},"tier-2",{"type":47,"value":537},{"type":41,"tag":124,"props":588,"children":590},{"className":589},[],[591],{"type":47,"value":592},"tier-3",{"type":47,"value":362},{"type":41,"tag":93,"props":595,"children":596},{},[597,606,610],{"type":41,"tag":120,"props":598,"children":599},{},[600],{"type":41,"tag":124,"props":601,"children":603},{"className":602},[],[604],{"type":47,"value":605},"manifestType",{"type":41,"tag":120,"props":607,"children":608},{},[609],{"type":47,"value":164},{"type":41,"tag":120,"props":611,"children":612},{},[613,618,620,626,628,634,635,641,643,654,656,661,663,668,669,674],{"type":41,"tag":124,"props":614,"children":616},{"className":615},[],[617],{"type":47,"value":23},{"type":47,"value":619}," (default), ",{"type":41,"tag":124,"props":621,"children":623},{"className":622},[],[624],{"type":47,"value":625},"helm",{"type":47,"value":627},", ",{"type":41,"tag":124,"props":629,"children":631},{"className":630},[],[632],{"type":47,"value":633},"kustomize",{"type":47,"value":627},{"type":41,"tag":124,"props":636,"children":638},{"className":637},[],[639],{"type":47,"value":640},"aca",{"type":47,"value":642},". ",{"type":41,"tag":56,"props":644,"children":645},{},[646,648,653],{"type":47,"value":647},"This skill only handles ",{"type":41,"tag":124,"props":649,"children":651},{"className":650},[],[652],{"type":47,"value":23},{"type":47,"value":236},{"type":47,"value":655}," For ",{"type":41,"tag":124,"props":657,"children":659},{"className":658},[],[660],{"type":47,"value":625},{"type":47,"value":662}," \u002F ",{"type":41,"tag":124,"props":664,"children":666},{"className":665},[],[667],{"type":47,"value":633},{"type":47,"value":662},{"type":41,"tag":124,"props":670,"children":672},{"className":671},[],[673],{"type":47,"value":640},{"type":47,"value":675},", tell the user it's out of scope and STOP.",{"type":41,"tag":93,"props":677,"children":678},{},[679,688,692],{"type":41,"tag":120,"props":680,"children":681},{},[682],{"type":41,"tag":124,"props":683,"children":685},{"className":684},[],[686],{"type":47,"value":687},"outputDir",{"type":41,"tag":120,"props":689,"children":690},{},[691],{"type":47,"value":164},{"type":41,"tag":120,"props":693,"children":694},{},[695,697,703],{"type":47,"value":696},"Where to write the YAML files. Default: ",{"type":41,"tag":124,"props":698,"children":700},{"className":699},[],[701],{"type":47,"value":702},"\u003CmodulePath>\u002Fk8s\u002F",{"type":47,"value":236},{"type":41,"tag":50,"props":705,"children":706},{},[707,709,714],{"type":47,"value":708},"If ",{"type":41,"tag":124,"props":710,"children":712},{"className":711},[],[713],{"type":47,"value":129},{"type":47,"value":715}," is missing → ask the user. STOP.",{"type":41,"tag":78,"props":717,"children":719},{"id":718},"prerequisite-analyze-repo",[720],{"type":47,"value":721},"Prerequisite: analyze-repo",{"type":41,"tag":50,"props":723,"children":724},{},[725,727,732,733,738,739,744,745,750,752,757,759,764,766,772,774,779,781,786],{"type":47,"value":726},"This skill needs ",{"type":41,"tag":124,"props":728,"children":730},{"className":729},[],[731],{"type":47,"value":311},{"type":47,"value":627},{"type":41,"tag":124,"props":734,"children":736},{"className":735},[],[737],{"type":47,"value":347},{"type":47,"value":627},{"type":41,"tag":124,"props":740,"children":742},{"className":741},[],[743],{"type":47,"value":333},{"type":47,"value":627},{"type":41,"tag":124,"props":746,"children":748},{"className":747},[],[749],{"type":47,"value":481},{"type":47,"value":751},",\nand ",{"type":41,"tag":124,"props":753,"children":755},{"className":754},[],[756],{"type":47,"value":415},{"type":47,"value":758}," from the ",{"type":41,"tag":124,"props":760,"children":762},{"className":761},[],[763],{"type":47,"value":145},{"type":47,"value":765}," skill. If you don't\nalready have that output for ",{"type":41,"tag":124,"props":767,"children":769},{"className":768},[],[770],{"type":47,"value":771},"\u003CmodulePath>",{"type":47,"value":773}," from earlier in this\nconversation, follow the ",{"type":41,"tag":124,"props":775,"children":777},{"className":776},[],[778],{"type":47,"value":145},{"type":47,"value":780}," skill against ",{"type":41,"tag":124,"props":782,"children":784},{"className":783},[],[785],{"type":47,"value":771},{"type":47,"value":787},"\nfirst, then come back.",{"type":41,"tag":78,"props":789,"children":791},{"id":790},"procedure",[792],{"type":47,"value":793},"Procedure",{"type":41,"tag":795,"props":796,"children":798},"h3",{"id":797},"step-1-resolve-defaults",[799],{"type":47,"value":800},"Step 1 — Resolve defaults",{"type":41,"tag":50,"props":802,"children":803},{},[804,809,811,817],{"type":41,"tag":56,"props":805,"children":806},{},[807],{"type":47,"value":808},"Container port",{"type":47,"value":810}," — if ",{"type":41,"tag":124,"props":812,"children":814},{"className":813},[],[815],{"type":47,"value":816},"ports[0]",{"type":47,"value":818}," is set, use it. Otherwise pick from the\nlanguage default:",{"type":41,"tag":85,"props":820,"children":821},{},[822,838],{"type":41,"tag":89,"props":823,"children":824},{},[825],{"type":41,"tag":93,"props":826,"children":827},{},[828,833],{"type":41,"tag":97,"props":829,"children":830},{},[831],{"type":47,"value":832},"Language \u002F framework",{"type":41,"tag":97,"props":834,"children":835},{},[836],{"type":47,"value":837},"Default port",{"type":41,"tag":113,"props":839,"children":840},{},[841,854,866,878,891,904,917,929,941,953,966,979,991],{"type":41,"tag":93,"props":842,"children":843},{},[844,849],{"type":41,"tag":120,"props":845,"children":846},{},[847],{"type":47,"value":848},"Spring Boot",{"type":41,"tag":120,"props":850,"children":851},{},[852],{"type":47,"value":853},"8080",{"type":41,"tag":93,"props":855,"children":856},{},[857,862],{"type":41,"tag":120,"props":858,"children":859},{},[860],{"type":47,"value":861},"Java (other)",{"type":41,"tag":120,"props":863,"children":864},{},[865],{"type":47,"value":853},{"type":41,"tag":93,"props":867,"children":868},{},[869,874],{"type":41,"tag":120,"props":870,"children":871},{},[872],{"type":47,"value":873},"ASP.NET Core",{"type":41,"tag":120,"props":875,"children":876},{},[877],{"type":47,"value":853},{"type":41,"tag":93,"props":879,"children":880},{},[881,886],{"type":41,"tag":120,"props":882,"children":883},{},[884],{"type":47,"value":885},"Node \u002F Express \u002F Next \u002F Fastify",{"type":41,"tag":120,"props":887,"children":888},{},[889],{"type":47,"value":890},"3000",{"type":41,"tag":93,"props":892,"children":893},{},[894,899],{"type":41,"tag":120,"props":895,"children":896},{},[897],{"type":47,"value":898},"Python \u002F Flask",{"type":41,"tag":120,"props":900,"children":901},{},[902],{"type":47,"value":903},"5000",{"type":41,"tag":93,"props":905,"children":906},{},[907,912],{"type":41,"tag":120,"props":908,"children":909},{},[910],{"type":47,"value":911},"Python \u002F Django",{"type":41,"tag":120,"props":913,"children":914},{},[915],{"type":47,"value":916},"8000",{"type":41,"tag":93,"props":918,"children":919},{},[920,925],{"type":41,"tag":120,"props":921,"children":922},{},[923],{"type":47,"value":924},"Python \u002F FastAPI \u002F Uvicorn",{"type":41,"tag":120,"props":926,"children":927},{},[928],{"type":47,"value":916},{"type":41,"tag":93,"props":930,"children":931},{},[932,937],{"type":41,"tag":120,"props":933,"children":934},{},[935],{"type":47,"value":936},"Go (gin \u002F echo \u002F fiber \u002F chi)",{"type":41,"tag":120,"props":938,"children":939},{},[940],{"type":47,"value":853},{"type":41,"tag":93,"props":942,"children":943},{},[944,949],{"type":41,"tag":120,"props":945,"children":946},{},[947],{"type":47,"value":948},"Rust (axum \u002F actix \u002F rocket)",{"type":41,"tag":120,"props":950,"children":951},{},[952],{"type":47,"value":853},{"type":41,"tag":93,"props":954,"children":955},{},[956,961],{"type":41,"tag":120,"props":957,"children":958},{},[959],{"type":47,"value":960},"PHP-FPM",{"type":41,"tag":120,"props":962,"children":963},{},[964],{"type":47,"value":965},"9000",{"type":41,"tag":93,"props":967,"children":968},{},[969,974],{"type":41,"tag":120,"props":970,"children":971},{},[972],{"type":47,"value":973},"PHP \u002F Apache",{"type":41,"tag":120,"props":975,"children":976},{},[977],{"type":47,"value":978},"80",{"type":41,"tag":93,"props":980,"children":981},{},[982,987],{"type":41,"tag":120,"props":983,"children":984},{},[985],{"type":47,"value":986},"Ruby on Rails",{"type":41,"tag":120,"props":988,"children":989},{},[990],{"type":47,"value":890},{"type":41,"tag":93,"props":992,"children":993},{},[994,999],{"type":41,"tag":120,"props":995,"children":996},{},[997],{"type":47,"value":998},"Unknown",{"type":41,"tag":120,"props":1000,"children":1001},{},[1002],{"type":47,"value":853},{"type":41,"tag":50,"props":1004,"children":1005},{},[1006,1011,1013,1018,1019,1024],{"type":41,"tag":56,"props":1007,"children":1008},{},[1009],{"type":47,"value":1010},"Replica count",{"type":47,"value":1012}," — start from this table, then override if both\n",{"type":41,"tag":124,"props":1014,"children":1016},{"className":1015},[],[1017],{"type":47,"value":522},{"type":47,"value":69},{"type":41,"tag":124,"props":1020,"children":1022},{"className":1021},[],[1023],{"type":47,"value":564},{"type":47,"value":1025}," are given (lower row wins):",{"type":41,"tag":85,"props":1027,"children":1028},{},[1029,1051],{"type":41,"tag":89,"props":1030,"children":1031},{},[1032],{"type":41,"tag":93,"props":1033,"children":1034},{},[1035,1040],{"type":41,"tag":97,"props":1036,"children":1037},{},[1038],{"type":47,"value":1039},"Environment",{"type":41,"tag":97,"props":1041,"children":1042},{},[1043,1045],{"type":47,"value":1044},"Default ",{"type":41,"tag":124,"props":1046,"children":1048},{"className":1047},[],[1049],{"type":47,"value":1050},"replicas",{"type":41,"tag":113,"props":1052,"children":1053},{},[1054,1070],{"type":41,"tag":93,"props":1055,"children":1056},{},[1057,1065],{"type":41,"tag":120,"props":1058,"children":1059},{},[1060],{"type":41,"tag":124,"props":1061,"children":1063},{"className":1062},[],[1064],{"type":47,"value":297},{"type":41,"tag":120,"props":1066,"children":1067},{},[1068],{"type":47,"value":1069},"1",{"type":41,"tag":93,"props":1071,"children":1072},{},[1073,1081],{"type":41,"tag":120,"props":1074,"children":1075},{},[1076],{"type":41,"tag":124,"props":1077,"children":1079},{"className":1078},[],[1080],{"type":47,"value":289},{"type":41,"tag":120,"props":1082,"children":1083},{},[1084],{"type":47,"value":1085},"2",{"type":41,"tag":85,"props":1087,"children":1088},{},[1089,1108],{"type":41,"tag":89,"props":1090,"children":1091},{},[1092],{"type":41,"tag":93,"props":1093,"children":1094},{},[1095,1100],{"type":41,"tag":97,"props":1096,"children":1097},{},[1098],{"type":47,"value":1099},"Traffic × Criticality",{"type":41,"tag":97,"props":1101,"children":1102},{},[1103],{"type":41,"tag":124,"props":1104,"children":1106},{"className":1105},[],[1107],{"type":47,"value":1050},{"type":41,"tag":113,"props":1109,"children":1110},{},[1111,1134,1156,1177,1198,1215],{"type":41,"tag":93,"props":1112,"children":1113},{},[1114,1129],{"type":41,"tag":120,"props":1115,"children":1116},{},[1117,1122,1124],{"type":41,"tag":124,"props":1118,"children":1120},{"className":1119},[],[1121],{"type":47,"value":535},{"type":47,"value":1123}," × ",{"type":41,"tag":124,"props":1125,"children":1127},{"className":1126},[],[1128],{"type":47,"value":577},{"type":41,"tag":120,"props":1130,"children":1131},{},[1132],{"type":47,"value":1133},"5",{"type":41,"tag":93,"props":1135,"children":1136},{},[1137,1151],{"type":41,"tag":120,"props":1138,"children":1139},{},[1140,1145,1146],{"type":41,"tag":124,"props":1141,"children":1143},{"className":1142},[],[1144],{"type":47,"value":535},{"type":47,"value":1123},{"type":41,"tag":124,"props":1147,"children":1149},{"className":1148},[],[1150],{"type":47,"value":585},{"type":41,"tag":120,"props":1152,"children":1153},{},[1154],{"type":47,"value":1155},"3",{"type":41,"tag":93,"props":1157,"children":1158},{},[1159,1173],{"type":41,"tag":120,"props":1160,"children":1161},{},[1162,1167,1168],{"type":41,"tag":124,"props":1163,"children":1165},{"className":1164},[],[1166],{"type":47,"value":543},{"type":47,"value":1123},{"type":41,"tag":124,"props":1169,"children":1171},{"className":1170},[],[1172],{"type":47,"value":577},{"type":41,"tag":120,"props":1174,"children":1175},{},[1176],{"type":47,"value":1155},{"type":41,"tag":93,"props":1178,"children":1179},{},[1180,1194],{"type":41,"tag":120,"props":1181,"children":1182},{},[1183,1188,1189],{"type":41,"tag":124,"props":1184,"children":1186},{"className":1185},[],[1187],{"type":47,"value":543},{"type":47,"value":1123},{"type":41,"tag":124,"props":1190,"children":1192},{"className":1191},[],[1193],{"type":47,"value":585},{"type":41,"tag":120,"props":1195,"children":1196},{},[1197],{"type":47,"value":1085},{"type":41,"tag":93,"props":1199,"children":1200},{},[1201,1211],{"type":41,"tag":120,"props":1202,"children":1203},{},[1204,1209],{"type":41,"tag":124,"props":1205,"children":1207},{"className":1206},[],[1208],{"type":47,"value":550},{"type":47,"value":1210}," × any",{"type":41,"tag":120,"props":1212,"children":1213},{},[1214],{"type":47,"value":1069},{"type":41,"tag":93,"props":1216,"children":1217},{},[1218,1228],{"type":41,"tag":120,"props":1219,"children":1220},{},[1221,1226],{"type":41,"tag":124,"props":1222,"children":1224},{"className":1223},[],[1225],{"type":47,"value":592},{"type":47,"value":1227}," (any traffic)",{"type":41,"tag":120,"props":1229,"children":1230},{},[1231],{"type":47,"value":1069},{"type":41,"tag":50,"props":1233,"children":1234},{},[1235,1240,1242,1248,1250,1256],{"type":41,"tag":56,"props":1236,"children":1237},{},[1238],{"type":47,"value":1239},"Resources",{"type":47,"value":1241}," — fixed defaults (",{"type":41,"tag":124,"props":1243,"children":1245},{"className":1244},[],[1246],{"type":47,"value":1247},"requests",{"type":47,"value":1249}," ≈ 50% of ",{"type":41,"tag":124,"props":1251,"children":1253},{"className":1252},[],[1254],{"type":47,"value":1255},"limits",{"type":47,"value":1257},"):",{"type":41,"tag":85,"props":1259,"children":1260},{},[1261,1291],{"type":41,"tag":89,"props":1262,"children":1263},{},[1264],{"type":41,"tag":93,"props":1265,"children":1266},{},[1267,1271,1276,1281,1286],{"type":41,"tag":97,"props":1268,"children":1269},{},[1270],{"type":47,"value":1039},{"type":41,"tag":97,"props":1272,"children":1273},{},[1274],{"type":47,"value":1275},"requests.cpu",{"type":41,"tag":97,"props":1277,"children":1278},{},[1279],{"type":47,"value":1280},"requests.memory",{"type":41,"tag":97,"props":1282,"children":1283},{},[1284],{"type":47,"value":1285},"limits.cpu",{"type":41,"tag":97,"props":1287,"children":1288},{},[1289],{"type":47,"value":1290},"limits.memory",{"type":41,"tag":113,"props":1292,"children":1293},{},[1294,1341],{"type":41,"tag":93,"props":1295,"children":1296},{},[1297,1305,1314,1323,1332],{"type":41,"tag":120,"props":1298,"children":1299},{},[1300],{"type":41,"tag":124,"props":1301,"children":1303},{"className":1302},[],[1304],{"type":47,"value":297},{"type":41,"tag":120,"props":1306,"children":1307},{},[1308],{"type":41,"tag":124,"props":1309,"children":1311},{"className":1310},[],[1312],{"type":47,"value":1313},"100m",{"type":41,"tag":120,"props":1315,"children":1316},{},[1317],{"type":41,"tag":124,"props":1318,"children":1320},{"className":1319},[],[1321],{"type":47,"value":1322},"128Mi",{"type":41,"tag":120,"props":1324,"children":1325},{},[1326],{"type":41,"tag":124,"props":1327,"children":1329},{"className":1328},[],[1330],{"type":47,"value":1331},"500m",{"type":41,"tag":120,"props":1333,"children":1334},{},[1335],{"type":41,"tag":124,"props":1336,"children":1338},{"className":1337},[],[1339],{"type":47,"value":1340},"512Mi",{"type":41,"tag":93,"props":1342,"children":1343},{},[1344,1352,1361,1370,1378],{"type":41,"tag":120,"props":1345,"children":1346},{},[1347],{"type":41,"tag":124,"props":1348,"children":1350},{"className":1349},[],[1351],{"type":47,"value":289},{"type":41,"tag":120,"props":1353,"children":1354},{},[1355],{"type":41,"tag":124,"props":1356,"children":1358},{"className":1357},[],[1359],{"type":47,"value":1360},"250m",{"type":41,"tag":120,"props":1362,"children":1363},{},[1364],{"type":41,"tag":124,"props":1365,"children":1367},{"className":1366},[],[1368],{"type":47,"value":1369},"256Mi",{"type":41,"tag":120,"props":1371,"children":1372},{},[1373],{"type":41,"tag":124,"props":1374,"children":1376},{"className":1375},[],[1377],{"type":47,"value":1331},{"type":41,"tag":120,"props":1379,"children":1380},{},[1381],{"type":41,"tag":124,"props":1382,"children":1384},{"className":1383},[],[1385],{"type":47,"value":1340},{"type":41,"tag":50,"props":1387,"children":1388},{},[1389,1391,1397],{"type":47,"value":1390},"If the user supplied ",{"type":41,"tag":124,"props":1392,"children":1394},{"className":1393},[],[1395],{"type":47,"value":1396},"k8sConfig.resourceDefaults",{"type":47,"value":1398},", use those instead.",{"type":41,"tag":50,"props":1400,"children":1401},{},[1402,1407],{"type":41,"tag":56,"props":1403,"children":1404},{},[1405],{"type":47,"value":1406},"Probes",{"type":47,"value":1408}," — pick a probe path:",{"type":41,"tag":85,"props":1410,"children":1411},{},[1412,1428],{"type":41,"tag":89,"props":1413,"children":1414},{},[1415],{"type":41,"tag":93,"props":1416,"children":1417},{},[1418,1423],{"type":41,"tag":97,"props":1419,"children":1420},{},[1421],{"type":47,"value":1422},"Framework",{"type":41,"tag":97,"props":1424,"children":1425},{},[1426],{"type":47,"value":1427},"path",{"type":41,"tag":113,"props":1429,"children":1430},{},[1431,1457,1473,1497,1513,1529],{"type":41,"tag":93,"props":1432,"children":1433},{},[1434,1438],{"type":41,"tag":120,"props":1435,"children":1436},{},[1437],{"type":47,"value":848},{"type":41,"tag":120,"props":1439,"children":1440},{},[1441,1447,1449,1455],{"type":41,"tag":124,"props":1442,"children":1444},{"className":1443},[],[1445],{"type":47,"value":1446},"\u002Factuator\u002Fhealth",{"type":47,"value":1448}," (liveness), ",{"type":41,"tag":124,"props":1450,"children":1452},{"className":1451},[],[1453],{"type":47,"value":1454},"\u002Factuator\u002Fhealth\u002Freadiness",{"type":47,"value":1456}," (readiness)",{"type":41,"tag":93,"props":1458,"children":1459},{},[1460,1464],{"type":41,"tag":120,"props":1461,"children":1462},{},[1463],{"type":47,"value":873},{"type":41,"tag":120,"props":1465,"children":1466},{},[1467],{"type":41,"tag":124,"props":1468,"children":1470},{"className":1469},[],[1471],{"type":47,"value":1472},"\u002Fhealth",{"type":41,"tag":93,"props":1474,"children":1475},{},[1476,1489],{"type":41,"tag":120,"props":1477,"children":1478},{},[1479,1481,1487],{"type":47,"value":1480},"Express \u002F Fastify with ",{"type":41,"tag":124,"props":1482,"children":1484},{"className":1483},[],[1485],{"type":47,"value":1486},"health-checks",{"type":47,"value":1488}," dependency",{"type":41,"tag":120,"props":1490,"children":1491},{},[1492],{"type":41,"tag":124,"props":1493,"children":1495},{"className":1494},[],[1496],{"type":47,"value":1472},{"type":41,"tag":93,"props":1498,"children":1499},{},[1500,1505],{"type":41,"tag":120,"props":1501,"children":1502},{},[1503],{"type":47,"value":1504},"FastAPI \u002F Flask \u002F Django",{"type":41,"tag":120,"props":1506,"children":1507},{},[1508],{"type":41,"tag":124,"props":1509,"children":1511},{"className":1510},[],[1512],{"type":47,"value":1472},{"type":41,"tag":93,"props":1514,"children":1515},{},[1516,1521],{"type":41,"tag":120,"props":1517,"children":1518},{},[1519],{"type":47,"value":1520},"Go web frameworks",{"type":41,"tag":120,"props":1522,"children":1523},{},[1524],{"type":41,"tag":124,"props":1525,"children":1527},{"className":1526},[],[1528],{"type":47,"value":1472},{"type":41,"tag":93,"props":1530,"children":1531},{},[1532,1537],{"type":41,"tag":120,"props":1533,"children":1534},{},[1535],{"type":47,"value":1536},"Others",{"type":41,"tag":120,"props":1538,"children":1539},{},[1540,1545],{"type":41,"tag":124,"props":1541,"children":1543},{"className":1542},[],[1544],{"type":47,"value":446},{"type":47,"value":1546}," (TCP socket probe fallback — see below)",{"type":41,"tag":50,"props":1548,"children":1549},{},[1550,1552,1557,1559,1564],{"type":47,"value":1551},"If you cannot infer a meaningful HTTP endpoint, fall back to a ",{"type":41,"tag":56,"props":1553,"children":1554},{},[1555],{"type":47,"value":1556},"TCP\nsocket",{"type":47,"value":1558}," probe on ",{"type":41,"tag":124,"props":1560,"children":1562},{"className":1561},[],[1563],{"type":47,"value":394},{"type":47,"value":236},{"type":41,"tag":50,"props":1566,"children":1567},{},[1568,1570,1574],{"type":47,"value":1569},"In ",{"type":41,"tag":56,"props":1571,"children":1572},{},[1573],{"type":47,"value":297},{"type":47,"value":1575}," environment, omit probes entirely (keeps startup simple).",{"type":41,"tag":50,"props":1577,"children":1578},{},[1579,1584,1586,1592],{"type":41,"tag":56,"props":1580,"children":1581},{},[1582],{"type":47,"value":1583},"Managed databases",{"type":47,"value":1585}," — workload identity is required for any DB whose\n",{"type":41,"tag":124,"props":1587,"children":1589},{"className":1588},[],[1590],{"type":47,"value":1591},"dbType",{"type":47,"value":1593}," is in:",{"type":41,"tag":1595,"props":1596,"children":1600},"pre",{"className":1597,"code":1599,"language":47},[1598],"language-text","{ postgres, mysql, mongodb, redis, mssql, cosmosdb }\n",[1601],{"type":41,"tag":124,"props":1602,"children":1604},{"__ignoreMap":1603},"",[1605],{"type":47,"value":1599},{"type":41,"tag":50,"props":1607,"children":1608},{},[1609,1610,1615,1617,1622,1624,1630,1632,1638],{"type":47,"value":708},{"type":41,"tag":124,"props":1611,"children":1613},{"className":1612},[],[1614],{"type":47,"value":481},{"type":47,"value":1616}," includes any of these → emit a ",{"type":41,"tag":124,"props":1618,"children":1620},{"className":1619},[],[1621],{"type":47,"value":502},{"type":47,"value":1623},"\ncalled ",{"type":41,"tag":124,"props":1625,"children":1627},{"className":1626},[],[1628],{"type":47,"value":1629},"\u003CappName>-sa",{"type":47,"value":1631}," with the Azure Workload Identity annotations (see\nStep 2). Use this SA in the ",{"type":41,"tag":124,"props":1633,"children":1635},{"className":1634},[],[1636],{"type":47,"value":1637},"Deployment.spec.template.spec.serviceAccountName",{"type":47,"value":236},{"type":41,"tag":50,"props":1640,"children":1641},{},[1642],{"type":47,"value":1643},"If no managed DB is detected → omit the ServiceAccount, the Deployment\nuses the namespace's default SA.",{"type":41,"tag":795,"props":1645,"children":1647},{"id":1646},"step-2-build-each-manifest",[1648],{"type":47,"value":1649},"Step 2 — Build each manifest",{"type":41,"tag":50,"props":1651,"children":1652},{},[1653,1655,1659,1660,1665,1667,1671,1673,1678,1679,1684,1686,1690,1692,1697,1699,1704,1706,1710,1712,1717,1719,1725],{"type":47,"value":1654},"Always required: ",{"type":41,"tag":56,"props":1656,"children":1657},{},[1658],{"type":47,"value":19},{"type":47,"value":627},{"type":41,"tag":56,"props":1661,"children":1662},{},[1663],{"type":47,"value":1664},"Service",{"type":47,"value":1666},".\nConditional: ",{"type":41,"tag":56,"props":1668,"children":1669},{},[1670],{"type":47,"value":436},{"type":47,"value":1672}," (any ",{"type":41,"tag":124,"props":1674,"children":1676},{"className":1675},[],[1677],{"type":47,"value":444},{"type":47,"value":662},{"type":41,"tag":124,"props":1680,"children":1682},{"className":1681},[],[1683],{"type":47,"value":452},{"type":47,"value":1685}," env var), ",{"type":41,"tag":56,"props":1687,"children":1688},{},[1689],{"type":47,"value":460},{"type":47,"value":1691},"\n(any ",{"type":41,"tag":124,"props":1693,"children":1695},{"className":1694},[],[1696],{"type":47,"value":467},{"type":47,"value":1698}," env var — values ",{"type":41,"tag":56,"props":1700,"children":1701},{},[1702],{"type":47,"value":1703},"must be placeholders",{"type":47,"value":1705},", never real\nsecrets), ",{"type":41,"tag":56,"props":1707,"children":1708},{},[1709],{"type":47,"value":502},{"type":47,"value":1711}," (managed DB detected),\n",{"type":41,"tag":56,"props":1713,"children":1714},{},[1715],{"type":47,"value":1716},"HorizontalPodAutoscaler",{"type":47,"value":1718}," (production AND ",{"type":41,"tag":124,"props":1720,"children":1722},{"className":1721},[],[1723],{"type":47,"value":1724},"trafficLevel ∈ {high, medium}",{"type":47,"value":147},{"type":41,"tag":1727,"props":1728,"children":1730},"h4",{"id":1729},"required-labels-annotations-on-every-resources-metadata",[1731,1733,1739],{"type":47,"value":1732},"Required labels & annotations (on every resource's ",{"type":41,"tag":124,"props":1734,"children":1736},{"className":1735},[],[1737],{"type":47,"value":1738},"metadata",{"type":47,"value":1740},")",{"type":41,"tag":1595,"props":1742,"children":1746},{"className":1743,"code":1744,"language":1745,"meta":1603,"style":1603},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","metadata:\n  name: \u003CappName>[-suffix]\n  namespace: \u003Cnamespace>\n  labels:\n    app.kubernetes.io\u002Fname: \u003CappName>\n    app.kubernetes.io\u002Fmanaged-by: containerization-assist\n  # Include the annotation only if the current `containerization-assist`\n  # package version is readable from the environment; otherwise omit\n  # the entire `annotations:` block. Never hard-code a stale version.\n  annotations:\n    com.azure.containerizationassist\u002Fversion: \u003Cversion>\n","yaml",[1747],{"type":41,"tag":124,"props":1748,"children":1749},{"__ignoreMap":1603},[1750,1767,1787,1805,1818,1836,1854,1864,1873,1882,1895],{"type":41,"tag":1751,"props":1752,"children":1755},"span",{"class":1753,"line":1754},"line",1,[1756,1761],{"type":41,"tag":1751,"props":1757,"children":1759},{"style":1758},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1760],{"type":47,"value":1738},{"type":41,"tag":1751,"props":1762,"children":1764},{"style":1763},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1765],{"type":47,"value":1766},":\n",{"type":41,"tag":1751,"props":1768,"children":1770},{"class":1753,"line":1769},2,[1771,1776,1781],{"type":41,"tag":1751,"props":1772,"children":1773},{"style":1758},[1774],{"type":47,"value":1775},"  name",{"type":41,"tag":1751,"props":1777,"children":1778},{"style":1763},[1779],{"type":47,"value":1780},":",{"type":41,"tag":1751,"props":1782,"children":1784},{"style":1783},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1785],{"type":47,"value":1786}," \u003CappName>[-suffix]\n",{"type":41,"tag":1751,"props":1788,"children":1790},{"class":1753,"line":1789},3,[1791,1796,1800],{"type":41,"tag":1751,"props":1792,"children":1793},{"style":1758},[1794],{"type":47,"value":1795},"  namespace",{"type":41,"tag":1751,"props":1797,"children":1798},{"style":1763},[1799],{"type":47,"value":1780},{"type":41,"tag":1751,"props":1801,"children":1802},{"style":1783},[1803],{"type":47,"value":1804}," \u003Cnamespace>\n",{"type":41,"tag":1751,"props":1806,"children":1808},{"class":1753,"line":1807},4,[1809,1814],{"type":41,"tag":1751,"props":1810,"children":1811},{"style":1758},[1812],{"type":47,"value":1813},"  labels",{"type":41,"tag":1751,"props":1815,"children":1816},{"style":1763},[1817],{"type":47,"value":1766},{"type":41,"tag":1751,"props":1819,"children":1821},{"class":1753,"line":1820},5,[1822,1827,1831],{"type":41,"tag":1751,"props":1823,"children":1824},{"style":1758},[1825],{"type":47,"value":1826},"    app.kubernetes.io\u002Fname",{"type":41,"tag":1751,"props":1828,"children":1829},{"style":1763},[1830],{"type":47,"value":1780},{"type":41,"tag":1751,"props":1832,"children":1833},{"style":1783},[1834],{"type":47,"value":1835}," \u003CappName>\n",{"type":41,"tag":1751,"props":1837,"children":1839},{"class":1753,"line":1838},6,[1840,1845,1849],{"type":41,"tag":1751,"props":1841,"children":1842},{"style":1758},[1843],{"type":47,"value":1844},"    app.kubernetes.io\u002Fmanaged-by",{"type":41,"tag":1751,"props":1846,"children":1847},{"style":1763},[1848],{"type":47,"value":1780},{"type":41,"tag":1751,"props":1850,"children":1851},{"style":1783},[1852],{"type":47,"value":1853}," containerization-assist\n",{"type":41,"tag":1751,"props":1855,"children":1857},{"class":1753,"line":1856},7,[1858],{"type":41,"tag":1751,"props":1859,"children":1861},{"style":1860},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1862],{"type":47,"value":1863},"  # Include the annotation only if the current `containerization-assist`\n",{"type":41,"tag":1751,"props":1865,"children":1867},{"class":1753,"line":1866},8,[1868],{"type":41,"tag":1751,"props":1869,"children":1870},{"style":1860},[1871],{"type":47,"value":1872},"  # package version is readable from the environment; otherwise omit\n",{"type":41,"tag":1751,"props":1874,"children":1876},{"class":1753,"line":1875},9,[1877],{"type":41,"tag":1751,"props":1878,"children":1879},{"style":1860},[1880],{"type":47,"value":1881},"  # the entire `annotations:` block. Never hard-code a stale version.\n",{"type":41,"tag":1751,"props":1883,"children":1885},{"class":1753,"line":1884},10,[1886,1891],{"type":41,"tag":1751,"props":1887,"children":1888},{"style":1758},[1889],{"type":47,"value":1890},"  annotations",{"type":41,"tag":1751,"props":1892,"children":1893},{"style":1763},[1894],{"type":47,"value":1766},{"type":41,"tag":1751,"props":1896,"children":1898},{"class":1753,"line":1897},11,[1899,1904,1908],{"type":41,"tag":1751,"props":1900,"children":1901},{"style":1758},[1902],{"type":47,"value":1903},"    com.azure.containerizationassist\u002Fversion",{"type":41,"tag":1751,"props":1905,"children":1906},{"style":1763},[1907],{"type":47,"value":1780},{"type":41,"tag":1751,"props":1909,"children":1910},{"style":1783},[1911],{"type":47,"value":1912}," \u003Cversion>\n",{"type":41,"tag":50,"props":1914,"children":1915},{},[1916,1918,1924],{"type":47,"value":1917},"Do NOT rename the annotation key to ",{"type":41,"tag":124,"props":1919,"children":1921},{"className":1920},[],[1922],{"type":47,"value":1923},"containerization-assist\u002Fversion",{"type":47,"value":236},{"type":41,"tag":1727,"props":1926,"children":1927},{"id":20},[1928],{"type":47,"value":19},{"type":41,"tag":1595,"props":1930,"children":1932},{"className":1743,"code":1931,"language":1745,"meta":1603,"style":1603},"apiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: \u003CappName>\n  namespace: \u003Cnamespace>\n  labels:\n    app.kubernetes.io\u002Fname: \u003CappName>\n    app.kubernetes.io\u002Fmanaged-by: containerization-assist\nspec:\n  replicas: \u003Cfrom Step 1>\n  selector:\n    matchLabels:\n      app.kubernetes.io\u002Fname: \u003CappName>\n  template:\n    metadata:\n      labels:\n        app.kubernetes.io\u002Fname: \u003CappName>\n        app.kubernetes.io\u002Fmanaged-by: containerization-assist\n      # If a managed DB is detected, add this annotations block (matches the ServiceAccount + serviceAccountName below).\n      # Otherwise omit the entire `annotations:` key.\n      annotations:\n        azure.workload.identity\u002Fuse: \"true\"\n    spec:\n      # Include `serviceAccountName` only if a managed DB is detected (matches the workload-identity annotation above).\n      serviceAccountName: \u003CappName>-sa\n      securityContext:\n        runAsNonRoot: true\n        runAsUser: 10001\n        fsGroup: 10001\n        seccompProfile: { type: RuntimeDefault }\n      containers:\n        - name: \u003CappName>\n          image: \u003Cimage>\n          imagePullPolicy: IfNotPresent\n          ports:\n            - name: http\n              containerPort: \u003Cport>\n              protocol: TCP\n          env:                                  # one entry per env var (see below)\n            - name: PORT\n              value: \"\u003Cport>\"\n          # Include `envFrom` only for the refs whose backing object you emit:\n          # `configMapRef` only if a ConfigMap was emitted; `secretRef` only if a Secret was emitted.\n          envFrom:\n            - configMapRef:\n                name: \u003CappName>-config\n            - secretRef:\n                name: \u003CappName>-secret\n          resources:\n            requests:\n              cpu: \u003Csee Step 1>\n              memory: \u003Csee Step 1>\n            limits:\n              cpu: \u003Csee Step 1>\n              memory: \u003Csee Step 1>\n          securityContext:\n            allowPrivilegeEscalation: false\n            readOnlyRootFilesystem: true\n            capabilities:\n              drop: [\"ALL\"]\n          # Include `livenessProbe` and `readinessProbe` only in production. Omit both in development.\n          livenessProbe:\n            httpGet:\n              path: \u003Cprobe path>\n              port: http\n            initialDelaySeconds: 30\n            periodSeconds: 10\n          readinessProbe:\n            httpGet:\n              path: \u003Cprobe path>\n              port: http\n            initialDelaySeconds: 5\n            periodSeconds: 5\n",[1933],{"type":41,"tag":124,"props":1934,"children":1935},{"__ignoreMap":1603},[1936,1953,1970,1981,1996,2011,2022,2037,2052,2064,2081,2093,2106,2123,2136,2149,2161,2178,2195,2204,2213,2226,2254,2267,2276,2294,2307,2326,2345,2362,2399,2412,2434,2452,2470,2483,2505,2523,2541,2559,2580,2605,2614,2623,2636,2653,2671,2688,2705,2718,2731,2749,2766,2779,2795,2811,2824,2842,2859,2872,2909,2918,2931,2944,2962,2979,2997,3015,3028,3040,3056,3072,3089],{"type":41,"tag":1751,"props":1937,"children":1938},{"class":1753,"line":1754},[1939,1944,1948],{"type":41,"tag":1751,"props":1940,"children":1941},{"style":1758},[1942],{"type":47,"value":1943},"apiVersion",{"type":41,"tag":1751,"props":1945,"children":1946},{"style":1763},[1947],{"type":47,"value":1780},{"type":41,"tag":1751,"props":1949,"children":1950},{"style":1783},[1951],{"type":47,"value":1952}," apps\u002Fv1\n",{"type":41,"tag":1751,"props":1954,"children":1955},{"class":1753,"line":1769},[1956,1961,1965],{"type":41,"tag":1751,"props":1957,"children":1958},{"style":1758},[1959],{"type":47,"value":1960},"kind",{"type":41,"tag":1751,"props":1962,"children":1963},{"style":1763},[1964],{"type":47,"value":1780},{"type":41,"tag":1751,"props":1966,"children":1967},{"style":1783},[1968],{"type":47,"value":1969}," Deployment\n",{"type":41,"tag":1751,"props":1971,"children":1972},{"class":1753,"line":1789},[1973,1977],{"type":41,"tag":1751,"props":1974,"children":1975},{"style":1758},[1976],{"type":47,"value":1738},{"type":41,"tag":1751,"props":1978,"children":1979},{"style":1763},[1980],{"type":47,"value":1766},{"type":41,"tag":1751,"props":1982,"children":1983},{"class":1753,"line":1807},[1984,1988,1992],{"type":41,"tag":1751,"props":1985,"children":1986},{"style":1758},[1987],{"type":47,"value":1775},{"type":41,"tag":1751,"props":1989,"children":1990},{"style":1763},[1991],{"type":47,"value":1780},{"type":41,"tag":1751,"props":1993,"children":1994},{"style":1783},[1995],{"type":47,"value":1835},{"type":41,"tag":1751,"props":1997,"children":1998},{"class":1753,"line":1820},[1999,2003,2007],{"type":41,"tag":1751,"props":2000,"children":2001},{"style":1758},[2002],{"type":47,"value":1795},{"type":41,"tag":1751,"props":2004,"children":2005},{"style":1763},[2006],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2008,"children":2009},{"style":1783},[2010],{"type":47,"value":1804},{"type":41,"tag":1751,"props":2012,"children":2013},{"class":1753,"line":1838},[2014,2018],{"type":41,"tag":1751,"props":2015,"children":2016},{"style":1758},[2017],{"type":47,"value":1813},{"type":41,"tag":1751,"props":2019,"children":2020},{"style":1763},[2021],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2023,"children":2024},{"class":1753,"line":1856},[2025,2029,2033],{"type":41,"tag":1751,"props":2026,"children":2027},{"style":1758},[2028],{"type":47,"value":1826},{"type":41,"tag":1751,"props":2030,"children":2031},{"style":1763},[2032],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2034,"children":2035},{"style":1783},[2036],{"type":47,"value":1835},{"type":41,"tag":1751,"props":2038,"children":2039},{"class":1753,"line":1866},[2040,2044,2048],{"type":41,"tag":1751,"props":2041,"children":2042},{"style":1758},[2043],{"type":47,"value":1844},{"type":41,"tag":1751,"props":2045,"children":2046},{"style":1763},[2047],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2049,"children":2050},{"style":1783},[2051],{"type":47,"value":1853},{"type":41,"tag":1751,"props":2053,"children":2054},{"class":1753,"line":1875},[2055,2060],{"type":41,"tag":1751,"props":2056,"children":2057},{"style":1758},[2058],{"type":47,"value":2059},"spec",{"type":41,"tag":1751,"props":2061,"children":2062},{"style":1763},[2063],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2065,"children":2066},{"class":1753,"line":1884},[2067,2072,2076],{"type":41,"tag":1751,"props":2068,"children":2069},{"style":1758},[2070],{"type":47,"value":2071},"  replicas",{"type":41,"tag":1751,"props":2073,"children":2074},{"style":1763},[2075],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2077,"children":2078},{"style":1783},[2079],{"type":47,"value":2080}," \u003Cfrom Step 1>\n",{"type":41,"tag":1751,"props":2082,"children":2083},{"class":1753,"line":1897},[2084,2089],{"type":41,"tag":1751,"props":2085,"children":2086},{"style":1758},[2087],{"type":47,"value":2088},"  selector",{"type":41,"tag":1751,"props":2090,"children":2091},{"style":1763},[2092],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2094,"children":2096},{"class":1753,"line":2095},12,[2097,2102],{"type":41,"tag":1751,"props":2098,"children":2099},{"style":1758},[2100],{"type":47,"value":2101},"    matchLabels",{"type":41,"tag":1751,"props":2103,"children":2104},{"style":1763},[2105],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2107,"children":2109},{"class":1753,"line":2108},13,[2110,2115,2119],{"type":41,"tag":1751,"props":2111,"children":2112},{"style":1758},[2113],{"type":47,"value":2114},"      app.kubernetes.io\u002Fname",{"type":41,"tag":1751,"props":2116,"children":2117},{"style":1763},[2118],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2120,"children":2121},{"style":1783},[2122],{"type":47,"value":1835},{"type":41,"tag":1751,"props":2124,"children":2126},{"class":1753,"line":2125},14,[2127,2132],{"type":41,"tag":1751,"props":2128,"children":2129},{"style":1758},[2130],{"type":47,"value":2131},"  template",{"type":41,"tag":1751,"props":2133,"children":2134},{"style":1763},[2135],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2137,"children":2139},{"class":1753,"line":2138},15,[2140,2145],{"type":41,"tag":1751,"props":2141,"children":2142},{"style":1758},[2143],{"type":47,"value":2144},"    metadata",{"type":41,"tag":1751,"props":2146,"children":2147},{"style":1763},[2148],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2150,"children":2151},{"class":1753,"line":28},[2152,2157],{"type":41,"tag":1751,"props":2153,"children":2154},{"style":1758},[2155],{"type":47,"value":2156},"      labels",{"type":41,"tag":1751,"props":2158,"children":2159},{"style":1763},[2160],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2162,"children":2164},{"class":1753,"line":2163},17,[2165,2170,2174],{"type":41,"tag":1751,"props":2166,"children":2167},{"style":1758},[2168],{"type":47,"value":2169},"        app.kubernetes.io\u002Fname",{"type":41,"tag":1751,"props":2171,"children":2172},{"style":1763},[2173],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2175,"children":2176},{"style":1783},[2177],{"type":47,"value":1835},{"type":41,"tag":1751,"props":2179,"children":2181},{"class":1753,"line":2180},18,[2182,2187,2191],{"type":41,"tag":1751,"props":2183,"children":2184},{"style":1758},[2185],{"type":47,"value":2186},"        app.kubernetes.io\u002Fmanaged-by",{"type":41,"tag":1751,"props":2188,"children":2189},{"style":1763},[2190],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2192,"children":2193},{"style":1783},[2194],{"type":47,"value":1853},{"type":41,"tag":1751,"props":2196,"children":2198},{"class":1753,"line":2197},19,[2199],{"type":41,"tag":1751,"props":2200,"children":2201},{"style":1860},[2202],{"type":47,"value":2203},"      # If a managed DB is detected, add this annotations block (matches the ServiceAccount + serviceAccountName below).\n",{"type":41,"tag":1751,"props":2205,"children":2207},{"class":1753,"line":2206},20,[2208],{"type":41,"tag":1751,"props":2209,"children":2210},{"style":1860},[2211],{"type":47,"value":2212},"      # Otherwise omit the entire `annotations:` key.\n",{"type":41,"tag":1751,"props":2214,"children":2216},{"class":1753,"line":2215},21,[2217,2222],{"type":41,"tag":1751,"props":2218,"children":2219},{"style":1758},[2220],{"type":47,"value":2221},"      annotations",{"type":41,"tag":1751,"props":2223,"children":2224},{"style":1763},[2225],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2227,"children":2229},{"class":1753,"line":2228},22,[2230,2235,2239,2244,2249],{"type":41,"tag":1751,"props":2231,"children":2232},{"style":1758},[2233],{"type":47,"value":2234},"        azure.workload.identity\u002Fuse",{"type":41,"tag":1751,"props":2236,"children":2237},{"style":1763},[2238],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2240,"children":2241},{"style":1763},[2242],{"type":47,"value":2243}," \"",{"type":41,"tag":1751,"props":2245,"children":2246},{"style":1783},[2247],{"type":47,"value":2248},"true",{"type":41,"tag":1751,"props":2250,"children":2251},{"style":1763},[2252],{"type":47,"value":2253},"\"\n",{"type":41,"tag":1751,"props":2255,"children":2257},{"class":1753,"line":2256},23,[2258,2263],{"type":41,"tag":1751,"props":2259,"children":2260},{"style":1758},[2261],{"type":47,"value":2262},"    spec",{"type":41,"tag":1751,"props":2264,"children":2265},{"style":1763},[2266],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2268,"children":2270},{"class":1753,"line":2269},24,[2271],{"type":41,"tag":1751,"props":2272,"children":2273},{"style":1860},[2274],{"type":47,"value":2275},"      # Include `serviceAccountName` only if a managed DB is detected (matches the workload-identity annotation above).\n",{"type":41,"tag":1751,"props":2277,"children":2279},{"class":1753,"line":2278},25,[2280,2285,2289],{"type":41,"tag":1751,"props":2281,"children":2282},{"style":1758},[2283],{"type":47,"value":2284},"      serviceAccountName",{"type":41,"tag":1751,"props":2286,"children":2287},{"style":1763},[2288],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2290,"children":2291},{"style":1783},[2292],{"type":47,"value":2293}," \u003CappName>-sa\n",{"type":41,"tag":1751,"props":2295,"children":2297},{"class":1753,"line":2296},26,[2298,2303],{"type":41,"tag":1751,"props":2299,"children":2300},{"style":1758},[2301],{"type":47,"value":2302},"      securityContext",{"type":41,"tag":1751,"props":2304,"children":2305},{"style":1763},[2306],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2308,"children":2310},{"class":1753,"line":2309},27,[2311,2316,2320],{"type":41,"tag":1751,"props":2312,"children":2313},{"style":1758},[2314],{"type":47,"value":2315},"        runAsNonRoot",{"type":41,"tag":1751,"props":2317,"children":2318},{"style":1763},[2319],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2321,"children":2323},{"style":2322},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[2324],{"type":47,"value":2325}," true\n",{"type":41,"tag":1751,"props":2327,"children":2329},{"class":1753,"line":2328},28,[2330,2335,2339],{"type":41,"tag":1751,"props":2331,"children":2332},{"style":1758},[2333],{"type":47,"value":2334},"        runAsUser",{"type":41,"tag":1751,"props":2336,"children":2337},{"style":1763},[2338],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2340,"children":2342},{"style":2341},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[2343],{"type":47,"value":2344}," 10001\n",{"type":41,"tag":1751,"props":2346,"children":2348},{"class":1753,"line":2347},29,[2349,2354,2358],{"type":41,"tag":1751,"props":2350,"children":2351},{"style":1758},[2352],{"type":47,"value":2353},"        fsGroup",{"type":41,"tag":1751,"props":2355,"children":2356},{"style":1763},[2357],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2359,"children":2360},{"style":2341},[2361],{"type":47,"value":2344},{"type":41,"tag":1751,"props":2363,"children":2365},{"class":1753,"line":2364},30,[2366,2371,2375,2380,2385,2389,2394],{"type":41,"tag":1751,"props":2367,"children":2368},{"style":1758},[2369],{"type":47,"value":2370},"        seccompProfile",{"type":41,"tag":1751,"props":2372,"children":2373},{"style":1763},[2374],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2376,"children":2377},{"style":1763},[2378],{"type":47,"value":2379}," {",{"type":41,"tag":1751,"props":2381,"children":2382},{"style":1758},[2383],{"type":47,"value":2384}," type",{"type":41,"tag":1751,"props":2386,"children":2387},{"style":1763},[2388],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2390,"children":2391},{"style":1783},[2392],{"type":47,"value":2393}," RuntimeDefault",{"type":41,"tag":1751,"props":2395,"children":2396},{"style":1763},[2397],{"type":47,"value":2398}," }\n",{"type":41,"tag":1751,"props":2400,"children":2402},{"class":1753,"line":2401},31,[2403,2408],{"type":41,"tag":1751,"props":2404,"children":2405},{"style":1758},[2406],{"type":47,"value":2407},"      containers",{"type":41,"tag":1751,"props":2409,"children":2410},{"style":1763},[2411],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2413,"children":2415},{"class":1753,"line":2414},32,[2416,2421,2426,2430],{"type":41,"tag":1751,"props":2417,"children":2418},{"style":1763},[2419],{"type":47,"value":2420},"        -",{"type":41,"tag":1751,"props":2422,"children":2423},{"style":1758},[2424],{"type":47,"value":2425}," name",{"type":41,"tag":1751,"props":2427,"children":2428},{"style":1763},[2429],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2431,"children":2432},{"style":1783},[2433],{"type":47,"value":1835},{"type":41,"tag":1751,"props":2435,"children":2437},{"class":1753,"line":2436},33,[2438,2443,2447],{"type":41,"tag":1751,"props":2439,"children":2440},{"style":1758},[2441],{"type":47,"value":2442},"          image",{"type":41,"tag":1751,"props":2444,"children":2445},{"style":1763},[2446],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2448,"children":2449},{"style":1783},[2450],{"type":47,"value":2451}," \u003Cimage>\n",{"type":41,"tag":1751,"props":2453,"children":2455},{"class":1753,"line":2454},34,[2456,2461,2465],{"type":41,"tag":1751,"props":2457,"children":2458},{"style":1758},[2459],{"type":47,"value":2460},"          imagePullPolicy",{"type":41,"tag":1751,"props":2462,"children":2463},{"style":1763},[2464],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2466,"children":2467},{"style":1783},[2468],{"type":47,"value":2469}," IfNotPresent\n",{"type":41,"tag":1751,"props":2471,"children":2473},{"class":1753,"line":2472},35,[2474,2479],{"type":41,"tag":1751,"props":2475,"children":2476},{"style":1758},[2477],{"type":47,"value":2478},"          ports",{"type":41,"tag":1751,"props":2480,"children":2481},{"style":1763},[2482],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2484,"children":2486},{"class":1753,"line":2485},36,[2487,2492,2496,2500],{"type":41,"tag":1751,"props":2488,"children":2489},{"style":1763},[2490],{"type":47,"value":2491},"            -",{"type":41,"tag":1751,"props":2493,"children":2494},{"style":1758},[2495],{"type":47,"value":2425},{"type":41,"tag":1751,"props":2497,"children":2498},{"style":1763},[2499],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2501,"children":2502},{"style":1783},[2503],{"type":47,"value":2504}," http\n",{"type":41,"tag":1751,"props":2506,"children":2508},{"class":1753,"line":2507},37,[2509,2514,2518],{"type":41,"tag":1751,"props":2510,"children":2511},{"style":1758},[2512],{"type":47,"value":2513},"              containerPort",{"type":41,"tag":1751,"props":2515,"children":2516},{"style":1763},[2517],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2519,"children":2520},{"style":1783},[2521],{"type":47,"value":2522}," \u003Cport>\n",{"type":41,"tag":1751,"props":2524,"children":2526},{"class":1753,"line":2525},38,[2527,2532,2536],{"type":41,"tag":1751,"props":2528,"children":2529},{"style":1758},[2530],{"type":47,"value":2531},"              protocol",{"type":41,"tag":1751,"props":2533,"children":2534},{"style":1763},[2535],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2537,"children":2538},{"style":1783},[2539],{"type":47,"value":2540}," TCP\n",{"type":41,"tag":1751,"props":2542,"children":2544},{"class":1753,"line":2543},39,[2545,2550,2554],{"type":41,"tag":1751,"props":2546,"children":2547},{"style":1758},[2548],{"type":47,"value":2549},"          env",{"type":41,"tag":1751,"props":2551,"children":2552},{"style":1763},[2553],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2555,"children":2556},{"style":1860},[2557],{"type":47,"value":2558},"                                  # one entry per env var (see below)\n",{"type":41,"tag":1751,"props":2560,"children":2562},{"class":1753,"line":2561},40,[2563,2567,2571,2575],{"type":41,"tag":1751,"props":2564,"children":2565},{"style":1763},[2566],{"type":47,"value":2491},{"type":41,"tag":1751,"props":2568,"children":2569},{"style":1758},[2570],{"type":47,"value":2425},{"type":41,"tag":1751,"props":2572,"children":2573},{"style":1763},[2574],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2576,"children":2577},{"style":1783},[2578],{"type":47,"value":2579}," PORT\n",{"type":41,"tag":1751,"props":2581,"children":2582},{"class":1753,"line":24},[2583,2588,2592,2596,2601],{"type":41,"tag":1751,"props":2584,"children":2585},{"style":1758},[2586],{"type":47,"value":2587},"              value",{"type":41,"tag":1751,"props":2589,"children":2590},{"style":1763},[2591],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2593,"children":2594},{"style":1763},[2595],{"type":47,"value":2243},{"type":41,"tag":1751,"props":2597,"children":2598},{"style":1783},[2599],{"type":47,"value":2600},"\u003Cport>",{"type":41,"tag":1751,"props":2602,"children":2603},{"style":1763},[2604],{"type":47,"value":2253},{"type":41,"tag":1751,"props":2606,"children":2608},{"class":1753,"line":2607},42,[2609],{"type":41,"tag":1751,"props":2610,"children":2611},{"style":1860},[2612],{"type":47,"value":2613},"          # Include `envFrom` only for the refs whose backing object you emit:\n",{"type":41,"tag":1751,"props":2615,"children":2617},{"class":1753,"line":2616},43,[2618],{"type":41,"tag":1751,"props":2619,"children":2620},{"style":1860},[2621],{"type":47,"value":2622},"          # `configMapRef` only if a ConfigMap was emitted; `secretRef` only if a Secret was emitted.\n",{"type":41,"tag":1751,"props":2624,"children":2626},{"class":1753,"line":2625},44,[2627,2632],{"type":41,"tag":1751,"props":2628,"children":2629},{"style":1758},[2630],{"type":47,"value":2631},"          envFrom",{"type":41,"tag":1751,"props":2633,"children":2634},{"style":1763},[2635],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2637,"children":2639},{"class":1753,"line":2638},45,[2640,2644,2649],{"type":41,"tag":1751,"props":2641,"children":2642},{"style":1763},[2643],{"type":47,"value":2491},{"type":41,"tag":1751,"props":2645,"children":2646},{"style":1758},[2647],{"type":47,"value":2648}," configMapRef",{"type":41,"tag":1751,"props":2650,"children":2651},{"style":1763},[2652],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2654,"children":2656},{"class":1753,"line":2655},46,[2657,2662,2666],{"type":41,"tag":1751,"props":2658,"children":2659},{"style":1758},[2660],{"type":47,"value":2661},"                name",{"type":41,"tag":1751,"props":2663,"children":2664},{"style":1763},[2665],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2667,"children":2668},{"style":1783},[2669],{"type":47,"value":2670}," \u003CappName>-config\n",{"type":41,"tag":1751,"props":2672,"children":2674},{"class":1753,"line":2673},47,[2675,2679,2684],{"type":41,"tag":1751,"props":2676,"children":2677},{"style":1763},[2678],{"type":47,"value":2491},{"type":41,"tag":1751,"props":2680,"children":2681},{"style":1758},[2682],{"type":47,"value":2683}," secretRef",{"type":41,"tag":1751,"props":2685,"children":2686},{"style":1763},[2687],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2689,"children":2691},{"class":1753,"line":2690},48,[2692,2696,2700],{"type":41,"tag":1751,"props":2693,"children":2694},{"style":1758},[2695],{"type":47,"value":2661},{"type":41,"tag":1751,"props":2697,"children":2698},{"style":1763},[2699],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2701,"children":2702},{"style":1783},[2703],{"type":47,"value":2704}," \u003CappName>-secret\n",{"type":41,"tag":1751,"props":2706,"children":2708},{"class":1753,"line":2707},49,[2709,2714],{"type":41,"tag":1751,"props":2710,"children":2711},{"style":1758},[2712],{"type":47,"value":2713},"          resources",{"type":41,"tag":1751,"props":2715,"children":2716},{"style":1763},[2717],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2719,"children":2721},{"class":1753,"line":2720},50,[2722,2727],{"type":41,"tag":1751,"props":2723,"children":2724},{"style":1758},[2725],{"type":47,"value":2726},"            requests",{"type":41,"tag":1751,"props":2728,"children":2729},{"style":1763},[2730],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2732,"children":2734},{"class":1753,"line":2733},51,[2735,2740,2744],{"type":41,"tag":1751,"props":2736,"children":2737},{"style":1758},[2738],{"type":47,"value":2739},"              cpu",{"type":41,"tag":1751,"props":2741,"children":2742},{"style":1763},[2743],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2745,"children":2746},{"style":1783},[2747],{"type":47,"value":2748}," \u003Csee Step 1>\n",{"type":41,"tag":1751,"props":2750,"children":2752},{"class":1753,"line":2751},52,[2753,2758,2762],{"type":41,"tag":1751,"props":2754,"children":2755},{"style":1758},[2756],{"type":47,"value":2757},"              memory",{"type":41,"tag":1751,"props":2759,"children":2760},{"style":1763},[2761],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2763,"children":2764},{"style":1783},[2765],{"type":47,"value":2748},{"type":41,"tag":1751,"props":2767,"children":2769},{"class":1753,"line":2768},53,[2770,2775],{"type":41,"tag":1751,"props":2771,"children":2772},{"style":1758},[2773],{"type":47,"value":2774},"            limits",{"type":41,"tag":1751,"props":2776,"children":2777},{"style":1763},[2778],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2780,"children":2782},{"class":1753,"line":2781},54,[2783,2787,2791],{"type":41,"tag":1751,"props":2784,"children":2785},{"style":1758},[2786],{"type":47,"value":2739},{"type":41,"tag":1751,"props":2788,"children":2789},{"style":1763},[2790],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2792,"children":2793},{"style":1783},[2794],{"type":47,"value":2748},{"type":41,"tag":1751,"props":2796,"children":2798},{"class":1753,"line":2797},55,[2799,2803,2807],{"type":41,"tag":1751,"props":2800,"children":2801},{"style":1758},[2802],{"type":47,"value":2757},{"type":41,"tag":1751,"props":2804,"children":2805},{"style":1763},[2806],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2808,"children":2809},{"style":1783},[2810],{"type":47,"value":2748},{"type":41,"tag":1751,"props":2812,"children":2814},{"class":1753,"line":2813},56,[2815,2820],{"type":41,"tag":1751,"props":2816,"children":2817},{"style":1758},[2818],{"type":47,"value":2819},"          securityContext",{"type":41,"tag":1751,"props":2821,"children":2822},{"style":1763},[2823],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2825,"children":2827},{"class":1753,"line":2826},57,[2828,2833,2837],{"type":41,"tag":1751,"props":2829,"children":2830},{"style":1758},[2831],{"type":47,"value":2832},"            allowPrivilegeEscalation",{"type":41,"tag":1751,"props":2834,"children":2835},{"style":1763},[2836],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2838,"children":2839},{"style":2322},[2840],{"type":47,"value":2841}," false\n",{"type":41,"tag":1751,"props":2843,"children":2845},{"class":1753,"line":2844},58,[2846,2851,2855],{"type":41,"tag":1751,"props":2847,"children":2848},{"style":1758},[2849],{"type":47,"value":2850},"            readOnlyRootFilesystem",{"type":41,"tag":1751,"props":2852,"children":2853},{"style":1763},[2854],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2856,"children":2857},{"style":2322},[2858],{"type":47,"value":2325},{"type":41,"tag":1751,"props":2860,"children":2862},{"class":1753,"line":2861},59,[2863,2868],{"type":41,"tag":1751,"props":2864,"children":2865},{"style":1758},[2866],{"type":47,"value":2867},"            capabilities",{"type":41,"tag":1751,"props":2869,"children":2870},{"style":1763},[2871],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2873,"children":2875},{"class":1753,"line":2874},60,[2876,2881,2885,2890,2895,2900,2904],{"type":41,"tag":1751,"props":2877,"children":2878},{"style":1758},[2879],{"type":47,"value":2880},"              drop",{"type":41,"tag":1751,"props":2882,"children":2883},{"style":1763},[2884],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2886,"children":2887},{"style":1763},[2888],{"type":47,"value":2889}," [",{"type":41,"tag":1751,"props":2891,"children":2892},{"style":1763},[2893],{"type":47,"value":2894},"\"",{"type":41,"tag":1751,"props":2896,"children":2897},{"style":1783},[2898],{"type":47,"value":2899},"ALL",{"type":41,"tag":1751,"props":2901,"children":2902},{"style":1763},[2903],{"type":47,"value":2894},{"type":41,"tag":1751,"props":2905,"children":2906},{"style":1763},[2907],{"type":47,"value":2908},"]\n",{"type":41,"tag":1751,"props":2910,"children":2912},{"class":1753,"line":2911},61,[2913],{"type":41,"tag":1751,"props":2914,"children":2915},{"style":1860},[2916],{"type":47,"value":2917},"          # Include `livenessProbe` and `readinessProbe` only in production. Omit both in development.\n",{"type":41,"tag":1751,"props":2919,"children":2921},{"class":1753,"line":2920},62,[2922,2927],{"type":41,"tag":1751,"props":2923,"children":2924},{"style":1758},[2925],{"type":47,"value":2926},"          livenessProbe",{"type":41,"tag":1751,"props":2928,"children":2929},{"style":1763},[2930],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2932,"children":2934},{"class":1753,"line":2933},63,[2935,2940],{"type":41,"tag":1751,"props":2936,"children":2937},{"style":1758},[2938],{"type":47,"value":2939},"            httpGet",{"type":41,"tag":1751,"props":2941,"children":2942},{"style":1763},[2943],{"type":47,"value":1766},{"type":41,"tag":1751,"props":2945,"children":2947},{"class":1753,"line":2946},64,[2948,2953,2957],{"type":41,"tag":1751,"props":2949,"children":2950},{"style":1758},[2951],{"type":47,"value":2952},"              path",{"type":41,"tag":1751,"props":2954,"children":2955},{"style":1763},[2956],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2958,"children":2959},{"style":1783},[2960],{"type":47,"value":2961}," \u003Cprobe path>\n",{"type":41,"tag":1751,"props":2963,"children":2965},{"class":1753,"line":2964},65,[2966,2971,2975],{"type":41,"tag":1751,"props":2967,"children":2968},{"style":1758},[2969],{"type":47,"value":2970},"              port",{"type":41,"tag":1751,"props":2972,"children":2973},{"style":1763},[2974],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2976,"children":2977},{"style":1783},[2978],{"type":47,"value":2504},{"type":41,"tag":1751,"props":2980,"children":2982},{"class":1753,"line":2981},66,[2983,2988,2992],{"type":41,"tag":1751,"props":2984,"children":2985},{"style":1758},[2986],{"type":47,"value":2987},"            initialDelaySeconds",{"type":41,"tag":1751,"props":2989,"children":2990},{"style":1763},[2991],{"type":47,"value":1780},{"type":41,"tag":1751,"props":2993,"children":2994},{"style":2341},[2995],{"type":47,"value":2996}," 30\n",{"type":41,"tag":1751,"props":2998,"children":3000},{"class":1753,"line":2999},67,[3001,3006,3010],{"type":41,"tag":1751,"props":3002,"children":3003},{"style":1758},[3004],{"type":47,"value":3005},"            periodSeconds",{"type":41,"tag":1751,"props":3007,"children":3008},{"style":1763},[3009],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3011,"children":3012},{"style":2341},[3013],{"type":47,"value":3014}," 10\n",{"type":41,"tag":1751,"props":3016,"children":3018},{"class":1753,"line":3017},68,[3019,3024],{"type":41,"tag":1751,"props":3020,"children":3021},{"style":1758},[3022],{"type":47,"value":3023},"          readinessProbe",{"type":41,"tag":1751,"props":3025,"children":3026},{"style":1763},[3027],{"type":47,"value":1766},{"type":41,"tag":1751,"props":3029,"children":3031},{"class":1753,"line":3030},69,[3032,3036],{"type":41,"tag":1751,"props":3033,"children":3034},{"style":1758},[3035],{"type":47,"value":2939},{"type":41,"tag":1751,"props":3037,"children":3038},{"style":1763},[3039],{"type":47,"value":1766},{"type":41,"tag":1751,"props":3041,"children":3043},{"class":1753,"line":3042},70,[3044,3048,3052],{"type":41,"tag":1751,"props":3045,"children":3046},{"style":1758},[3047],{"type":47,"value":2952},{"type":41,"tag":1751,"props":3049,"children":3050},{"style":1763},[3051],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3053,"children":3054},{"style":1783},[3055],{"type":47,"value":2961},{"type":41,"tag":1751,"props":3057,"children":3059},{"class":1753,"line":3058},71,[3060,3064,3068],{"type":41,"tag":1751,"props":3061,"children":3062},{"style":1758},[3063],{"type":47,"value":2970},{"type":41,"tag":1751,"props":3065,"children":3066},{"style":1763},[3067],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3069,"children":3070},{"style":1783},[3071],{"type":47,"value":2504},{"type":41,"tag":1751,"props":3073,"children":3075},{"class":1753,"line":3074},72,[3076,3080,3084],{"type":41,"tag":1751,"props":3077,"children":3078},{"style":1758},[3079],{"type":47,"value":2987},{"type":41,"tag":1751,"props":3081,"children":3082},{"style":1763},[3083],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3085,"children":3086},{"style":2341},[3087],{"type":47,"value":3088}," 5\n",{"type":41,"tag":1751,"props":3090,"children":3092},{"class":1753,"line":3091},73,[3093,3097,3101],{"type":41,"tag":1751,"props":3094,"children":3095},{"style":1758},[3096],{"type":47,"value":3005},{"type":41,"tag":1751,"props":3098,"children":3099},{"style":1763},[3100],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3102,"children":3103},{"style":2341},[3104],{"type":47,"value":3088},{"type":41,"tag":50,"props":3106,"children":3107},{},[3108,3113,3115,3120],{"type":41,"tag":56,"props":3109,"children":3110},{},[3111],{"type":47,"value":3112},"Env-var emission rules",{"type":47,"value":3114}," (per entry in ",{"type":41,"tag":124,"props":3116,"children":3118},{"className":3117},[],[3119],{"type":47,"value":415},{"type":47,"value":1257},{"type":41,"tag":3122,"props":3123,"children":3124},"ul",{},[3125,3160,3191],{"type":41,"tag":3126,"props":3127,"children":3128},"li",{},[3129,3135,3137,3143,3145,3151,3153,3159],{"type":41,"tag":124,"props":3130,"children":3132},{"className":3131},[],[3133],{"type":47,"value":3134},"classification == \"config\"",{"type":47,"value":3136}," or ",{"type":41,"tag":124,"props":3138,"children":3140},{"className":3139},[],[3141],{"type":47,"value":3142},"\"database\"",{"type":47,"value":3144}," with a ",{"type":41,"tag":124,"props":3146,"children":3148},{"className":3147},[],[3149],{"type":47,"value":3150},"defaultValue",{"type":47,"value":3152}," →\nbecomes a key in the ConfigMap. Reference via ",{"type":41,"tag":124,"props":3154,"children":3156},{"className":3155},[],[3157],{"type":47,"value":3158},"envFrom.configMapRef",{"type":47,"value":236},{"type":41,"tag":3126,"props":3161,"children":3162},{},[3163,3168,3169,3174,3176,3181,3183,3189],{"type":41,"tag":124,"props":3164,"children":3166},{"className":3165},[],[3167],{"type":47,"value":3134},{"type":47,"value":3136},{"type":41,"tag":124,"props":3170,"children":3172},{"className":3171},[],[3173],{"type":47,"value":3142},{"type":47,"value":3175}," without a ",{"type":41,"tag":124,"props":3177,"children":3179},{"className":3178},[],[3180],{"type":47,"value":3150},{"type":47,"value":3182}," →\nbecomes a key in the ConfigMap with value ",{"type":41,"tag":124,"props":3184,"children":3186},{"className":3185},[],[3187],{"type":47,"value":3188},"\"\"",{"type":47,"value":3190}," (user must fill in).",{"type":41,"tag":3126,"props":3192,"children":3193},{},[3194,3200,3202,3208,3210,3216,3217],{"type":41,"tag":124,"props":3195,"children":3197},{"className":3196},[],[3198],{"type":47,"value":3199},"classification == \"secret\"",{"type":47,"value":3201}," → key in the Secret with placeholder value\n",{"type":41,"tag":124,"props":3203,"children":3205},{"className":3204},[],[3206],{"type":47,"value":3207},"\"REPLACE_ME\"",{"type":47,"value":3209},". Reference via ",{"type":41,"tag":124,"props":3211,"children":3213},{"className":3212},[],[3214],{"type":47,"value":3215},"envFrom.secretRef",{"type":47,"value":642},{"type":41,"tag":56,"props":3218,"children":3219},{},[3220,3222,3227],{"type":47,"value":3221},"NEVER include any\nreal ",{"type":41,"tag":124,"props":3223,"children":3225},{"className":3224},[],[3226],{"type":47,"value":3150},{"type":47,"value":3228}," for secret-classified entries.",{"type":41,"tag":50,"props":3230,"children":3231},{},[3232,3233,3239,3241,3247,3249,3255,3256,3262,3264,3269],{"type":47,"value":708},{"type":41,"tag":124,"props":3234,"children":3236},{"className":3235},[],[3237],{"type":47,"value":3238},"readOnlyRootFilesystem: true",{"type":47,"value":3240}," would break the framework (Java apps\nthat write to ",{"type":41,"tag":124,"props":3242,"children":3244},{"className":3243},[],[3245],{"type":47,"value":3246},"\u002Ftmp",{"type":47,"value":3248},", ASP.NET Core), add a ",{"type":41,"tag":124,"props":3250,"children":3252},{"className":3251},[],[3253],{"type":47,"value":3254},"volumeMounts",{"type":47,"value":396},{"type":41,"tag":124,"props":3257,"children":3259},{"className":3258},[],[3260],{"type":47,"value":3261},"emptyDir",{"type":47,"value":3263},"\nvolume for ",{"type":41,"tag":124,"props":3265,"children":3267},{"className":3266},[],[3268],{"type":47,"value":3246},{"type":47,"value":1780},{"type":41,"tag":1595,"props":3271,"children":3273},{"className":1743,"code":3272,"language":1745,"meta":1603,"style":1603},"volumes:\n  - name: tmp\n    emptyDir: {}\n# inside container:\nvolumeMounts:\n  - name: tmp\n    mountPath: \u002Ftmp\n",[3274],{"type":41,"tag":124,"props":3275,"children":3276},{"__ignoreMap":1603},[3277,3289,3310,3327,3335,3346,3365],{"type":41,"tag":1751,"props":3278,"children":3279},{"class":1753,"line":1754},[3280,3285],{"type":41,"tag":1751,"props":3281,"children":3282},{"style":1758},[3283],{"type":47,"value":3284},"volumes",{"type":41,"tag":1751,"props":3286,"children":3287},{"style":1763},[3288],{"type":47,"value":1766},{"type":41,"tag":1751,"props":3290,"children":3291},{"class":1753,"line":1769},[3292,3297,3301,3305],{"type":41,"tag":1751,"props":3293,"children":3294},{"style":1763},[3295],{"type":47,"value":3296},"  -",{"type":41,"tag":1751,"props":3298,"children":3299},{"style":1758},[3300],{"type":47,"value":2425},{"type":41,"tag":1751,"props":3302,"children":3303},{"style":1763},[3304],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3306,"children":3307},{"style":1783},[3308],{"type":47,"value":3309}," tmp\n",{"type":41,"tag":1751,"props":3311,"children":3312},{"class":1753,"line":1789},[3313,3318,3322],{"type":41,"tag":1751,"props":3314,"children":3315},{"style":1758},[3316],{"type":47,"value":3317},"    emptyDir",{"type":41,"tag":1751,"props":3319,"children":3320},{"style":1763},[3321],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3323,"children":3324},{"style":1763},[3325],{"type":47,"value":3326}," {}\n",{"type":41,"tag":1751,"props":3328,"children":3329},{"class":1753,"line":1807},[3330],{"type":41,"tag":1751,"props":3331,"children":3332},{"style":1860},[3333],{"type":47,"value":3334},"# inside container:\n",{"type":41,"tag":1751,"props":3336,"children":3337},{"class":1753,"line":1820},[3338,3342],{"type":41,"tag":1751,"props":3339,"children":3340},{"style":1758},[3341],{"type":47,"value":3254},{"type":41,"tag":1751,"props":3343,"children":3344},{"style":1763},[3345],{"type":47,"value":1766},{"type":41,"tag":1751,"props":3347,"children":3348},{"class":1753,"line":1838},[3349,3353,3357,3361],{"type":41,"tag":1751,"props":3350,"children":3351},{"style":1763},[3352],{"type":47,"value":3296},{"type":41,"tag":1751,"props":3354,"children":3355},{"style":1758},[3356],{"type":47,"value":2425},{"type":41,"tag":1751,"props":3358,"children":3359},{"style":1763},[3360],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3362,"children":3363},{"style":1783},[3364],{"type":47,"value":3309},{"type":41,"tag":1751,"props":3366,"children":3367},{"class":1753,"line":1856},[3368,3373,3377],{"type":41,"tag":1751,"props":3369,"children":3370},{"style":1758},[3371],{"type":47,"value":3372},"    mountPath",{"type":41,"tag":1751,"props":3374,"children":3375},{"style":1763},[3376],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3378,"children":3379},{"style":1783},[3380],{"type":47,"value":3381}," \u002Ftmp\n",{"type":41,"tag":1727,"props":3383,"children":3385},{"id":3384},"service",[3386],{"type":47,"value":1664},{"type":41,"tag":1595,"props":3388,"children":3390},{"className":1743,"code":3389,"language":1745,"meta":1603,"style":1603},"apiVersion: v1\nkind: Service\nmetadata:\n  name: \u003CappName>\n  namespace: \u003Cnamespace>\n  labels:\n    app.kubernetes.io\u002Fname: \u003CappName>\n    app.kubernetes.io\u002Fmanaged-by: containerization-assist\nspec:\n  type: ClusterIP\n  selector:\n    app.kubernetes.io\u002Fname: \u003CappName>\n  ports:\n    - name: http\n      port: 80\n      targetPort: http\n      protocol: TCP\n",[3391],{"type":41,"tag":124,"props":3392,"children":3393},{"__ignoreMap":1603},[3394,3410,3426,3437,3452,3467,3478,3493,3508,3519,3536,3547,3562,3574,3594,3611,3627],{"type":41,"tag":1751,"props":3395,"children":3396},{"class":1753,"line":1754},[3397,3401,3405],{"type":41,"tag":1751,"props":3398,"children":3399},{"style":1758},[3400],{"type":47,"value":1943},{"type":41,"tag":1751,"props":3402,"children":3403},{"style":1763},[3404],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3406,"children":3407},{"style":1783},[3408],{"type":47,"value":3409}," v1\n",{"type":41,"tag":1751,"props":3411,"children":3412},{"class":1753,"line":1769},[3413,3417,3421],{"type":41,"tag":1751,"props":3414,"children":3415},{"style":1758},[3416],{"type":47,"value":1960},{"type":41,"tag":1751,"props":3418,"children":3419},{"style":1763},[3420],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3422,"children":3423},{"style":1783},[3424],{"type":47,"value":3425}," Service\n",{"type":41,"tag":1751,"props":3427,"children":3428},{"class":1753,"line":1789},[3429,3433],{"type":41,"tag":1751,"props":3430,"children":3431},{"style":1758},[3432],{"type":47,"value":1738},{"type":41,"tag":1751,"props":3434,"children":3435},{"style":1763},[3436],{"type":47,"value":1766},{"type":41,"tag":1751,"props":3438,"children":3439},{"class":1753,"line":1807},[3440,3444,3448],{"type":41,"tag":1751,"props":3441,"children":3442},{"style":1758},[3443],{"type":47,"value":1775},{"type":41,"tag":1751,"props":3445,"children":3446},{"style":1763},[3447],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3449,"children":3450},{"style":1783},[3451],{"type":47,"value":1835},{"type":41,"tag":1751,"props":3453,"children":3454},{"class":1753,"line":1820},[3455,3459,3463],{"type":41,"tag":1751,"props":3456,"children":3457},{"style":1758},[3458],{"type":47,"value":1795},{"type":41,"tag":1751,"props":3460,"children":3461},{"style":1763},[3462],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3464,"children":3465},{"style":1783},[3466],{"type":47,"value":1804},{"type":41,"tag":1751,"props":3468,"children":3469},{"class":1753,"line":1838},[3470,3474],{"type":41,"tag":1751,"props":3471,"children":3472},{"style":1758},[3473],{"type":47,"value":1813},{"type":41,"tag":1751,"props":3475,"children":3476},{"style":1763},[3477],{"type":47,"value":1766},{"type":41,"tag":1751,"props":3479,"children":3480},{"class":1753,"line":1856},[3481,3485,3489],{"type":41,"tag":1751,"props":3482,"children":3483},{"style":1758},[3484],{"type":47,"value":1826},{"type":41,"tag":1751,"props":3486,"children":3487},{"style":1763},[3488],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3490,"children":3491},{"style":1783},[3492],{"type":47,"value":1835},{"type":41,"tag":1751,"props":3494,"children":3495},{"class":1753,"line":1866},[3496,3500,3504],{"type":41,"tag":1751,"props":3497,"children":3498},{"style":1758},[3499],{"type":47,"value":1844},{"type":41,"tag":1751,"props":3501,"children":3502},{"style":1763},[3503],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3505,"children":3506},{"style":1783},[3507],{"type":47,"value":1853},{"type":41,"tag":1751,"props":3509,"children":3510},{"class":1753,"line":1875},[3511,3515],{"type":41,"tag":1751,"props":3512,"children":3513},{"style":1758},[3514],{"type":47,"value":2059},{"type":41,"tag":1751,"props":3516,"children":3517},{"style":1763},[3518],{"type":47,"value":1766},{"type":41,"tag":1751,"props":3520,"children":3521},{"class":1753,"line":1884},[3522,3527,3531],{"type":41,"tag":1751,"props":3523,"children":3524},{"style":1758},[3525],{"type":47,"value":3526},"  type",{"type":41,"tag":1751,"props":3528,"children":3529},{"style":1763},[3530],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3532,"children":3533},{"style":1783},[3534],{"type":47,"value":3535}," ClusterIP\n",{"type":41,"tag":1751,"props":3537,"children":3538},{"class":1753,"line":1897},[3539,3543],{"type":41,"tag":1751,"props":3540,"children":3541},{"style":1758},[3542],{"type":47,"value":2088},{"type":41,"tag":1751,"props":3544,"children":3545},{"style":1763},[3546],{"type":47,"value":1766},{"type":41,"tag":1751,"props":3548,"children":3549},{"class":1753,"line":2095},[3550,3554,3558],{"type":41,"tag":1751,"props":3551,"children":3552},{"style":1758},[3553],{"type":47,"value":1826},{"type":41,"tag":1751,"props":3555,"children":3556},{"style":1763},[3557],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3559,"children":3560},{"style":1783},[3561],{"type":47,"value":1835},{"type":41,"tag":1751,"props":3563,"children":3564},{"class":1753,"line":2108},[3565,3570],{"type":41,"tag":1751,"props":3566,"children":3567},{"style":1758},[3568],{"type":47,"value":3569},"  ports",{"type":41,"tag":1751,"props":3571,"children":3572},{"style":1763},[3573],{"type":47,"value":1766},{"type":41,"tag":1751,"props":3575,"children":3576},{"class":1753,"line":2125},[3577,3582,3586,3590],{"type":41,"tag":1751,"props":3578,"children":3579},{"style":1763},[3580],{"type":47,"value":3581},"    -",{"type":41,"tag":1751,"props":3583,"children":3584},{"style":1758},[3585],{"type":47,"value":2425},{"type":41,"tag":1751,"props":3587,"children":3588},{"style":1763},[3589],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3591,"children":3592},{"style":1783},[3593],{"type":47,"value":2504},{"type":41,"tag":1751,"props":3595,"children":3596},{"class":1753,"line":2138},[3597,3602,3606],{"type":41,"tag":1751,"props":3598,"children":3599},{"style":1758},[3600],{"type":47,"value":3601},"      port",{"type":41,"tag":1751,"props":3603,"children":3604},{"style":1763},[3605],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3607,"children":3608},{"style":2341},[3609],{"type":47,"value":3610}," 80\n",{"type":41,"tag":1751,"props":3612,"children":3613},{"class":1753,"line":28},[3614,3619,3623],{"type":41,"tag":1751,"props":3615,"children":3616},{"style":1758},[3617],{"type":47,"value":3618},"      targetPort",{"type":41,"tag":1751,"props":3620,"children":3621},{"style":1763},[3622],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3624,"children":3625},{"style":1783},[3626],{"type":47,"value":2504},{"type":41,"tag":1751,"props":3628,"children":3629},{"class":1753,"line":2163},[3630,3635,3639],{"type":41,"tag":1751,"props":3631,"children":3632},{"style":1758},[3633],{"type":47,"value":3634},"      protocol",{"type":41,"tag":1751,"props":3636,"children":3637},{"style":1763},[3638],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3640,"children":3641},{"style":1783},[3642],{"type":47,"value":2540},{"type":41,"tag":1727,"props":3644,"children":3646},{"id":3645},"configmap-only-if-any-non-secret-env-vars",[3647,3649],{"type":47,"value":3648},"ConfigMap ",{"type":41,"tag":3650,"props":3651,"children":3652},"em",{},[3653],{"type":47,"value":3654},"(only if any non-secret env vars)",{"type":41,"tag":1595,"props":3656,"children":3658},{"className":1743,"code":3657,"language":1745,"meta":1603,"style":1603},"apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: \u003CappName>-config\n  namespace: \u003Cnamespace>\n  labels:\n    app.kubernetes.io\u002Fname: \u003CappName>\n    app.kubernetes.io\u002Fmanaged-by: containerization-assist\ndata:\n  \u003CKEY>: \"\u003CdefaultValue or empty string>\"\n  ...\n",[3659],{"type":41,"tag":124,"props":3660,"children":3661},{"__ignoreMap":1603},[3662,3677,3693,3704,3719,3734,3745,3760,3775,3787,3812],{"type":41,"tag":1751,"props":3663,"children":3664},{"class":1753,"line":1754},[3665,3669,3673],{"type":41,"tag":1751,"props":3666,"children":3667},{"style":1758},[3668],{"type":47,"value":1943},{"type":41,"tag":1751,"props":3670,"children":3671},{"style":1763},[3672],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3674,"children":3675},{"style":1783},[3676],{"type":47,"value":3409},{"type":41,"tag":1751,"props":3678,"children":3679},{"class":1753,"line":1769},[3680,3684,3688],{"type":41,"tag":1751,"props":3681,"children":3682},{"style":1758},[3683],{"type":47,"value":1960},{"type":41,"tag":1751,"props":3685,"children":3686},{"style":1763},[3687],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3689,"children":3690},{"style":1783},[3691],{"type":47,"value":3692}," ConfigMap\n",{"type":41,"tag":1751,"props":3694,"children":3695},{"class":1753,"line":1789},[3696,3700],{"type":41,"tag":1751,"props":3697,"children":3698},{"style":1758},[3699],{"type":47,"value":1738},{"type":41,"tag":1751,"props":3701,"children":3702},{"style":1763},[3703],{"type":47,"value":1766},{"type":41,"tag":1751,"props":3705,"children":3706},{"class":1753,"line":1807},[3707,3711,3715],{"type":41,"tag":1751,"props":3708,"children":3709},{"style":1758},[3710],{"type":47,"value":1775},{"type":41,"tag":1751,"props":3712,"children":3713},{"style":1763},[3714],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3716,"children":3717},{"style":1783},[3718],{"type":47,"value":2670},{"type":41,"tag":1751,"props":3720,"children":3721},{"class":1753,"line":1820},[3722,3726,3730],{"type":41,"tag":1751,"props":3723,"children":3724},{"style":1758},[3725],{"type":47,"value":1795},{"type":41,"tag":1751,"props":3727,"children":3728},{"style":1763},[3729],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3731,"children":3732},{"style":1783},[3733],{"type":47,"value":1804},{"type":41,"tag":1751,"props":3735,"children":3736},{"class":1753,"line":1838},[3737,3741],{"type":41,"tag":1751,"props":3738,"children":3739},{"style":1758},[3740],{"type":47,"value":1813},{"type":41,"tag":1751,"props":3742,"children":3743},{"style":1763},[3744],{"type":47,"value":1766},{"type":41,"tag":1751,"props":3746,"children":3747},{"class":1753,"line":1856},[3748,3752,3756],{"type":41,"tag":1751,"props":3749,"children":3750},{"style":1758},[3751],{"type":47,"value":1826},{"type":41,"tag":1751,"props":3753,"children":3754},{"style":1763},[3755],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3757,"children":3758},{"style":1783},[3759],{"type":47,"value":1835},{"type":41,"tag":1751,"props":3761,"children":3762},{"class":1753,"line":1866},[3763,3767,3771],{"type":41,"tag":1751,"props":3764,"children":3765},{"style":1758},[3766],{"type":47,"value":1844},{"type":41,"tag":1751,"props":3768,"children":3769},{"style":1763},[3770],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3772,"children":3773},{"style":1783},[3774],{"type":47,"value":1853},{"type":41,"tag":1751,"props":3776,"children":3777},{"class":1753,"line":1875},[3778,3783],{"type":41,"tag":1751,"props":3779,"children":3780},{"style":1758},[3781],{"type":47,"value":3782},"data",{"type":41,"tag":1751,"props":3784,"children":3785},{"style":1763},[3786],{"type":47,"value":1766},{"type":41,"tag":1751,"props":3788,"children":3789},{"class":1753,"line":1884},[3790,3795,3799,3803,3808],{"type":41,"tag":1751,"props":3791,"children":3792},{"style":1758},[3793],{"type":47,"value":3794},"  \u003CKEY>",{"type":41,"tag":1751,"props":3796,"children":3797},{"style":1763},[3798],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3800,"children":3801},{"style":1763},[3802],{"type":47,"value":2243},{"type":41,"tag":1751,"props":3804,"children":3805},{"style":1783},[3806],{"type":47,"value":3807},"\u003CdefaultValue or empty string>",{"type":41,"tag":1751,"props":3809,"children":3810},{"style":1763},[3811],{"type":47,"value":2253},{"type":41,"tag":1751,"props":3813,"children":3814},{"class":1753,"line":1897},[3815],{"type":41,"tag":1751,"props":3816,"children":3817},{"style":2341},[3818],{"type":47,"value":3819},"  ...\n",{"type":41,"tag":1727,"props":3821,"children":3823},{"id":3822},"secret-only-if-any-secret-env-vars",[3824,3826],{"type":47,"value":3825},"Secret ",{"type":41,"tag":3650,"props":3827,"children":3828},{},[3829],{"type":47,"value":3830},"(only if any secret env vars)",{"type":41,"tag":1595,"props":3832,"children":3834},{"className":1743,"code":3833,"language":1745,"meta":1603,"style":1603},"apiVersion: v1\nkind: Secret\nmetadata:\n  name: \u003CappName>-secret\n  namespace: \u003Cnamespace>\n  labels:\n    app.kubernetes.io\u002Fname: \u003CappName>\n    app.kubernetes.io\u002Fmanaged-by: containerization-assist\ntype: Opaque\nstringData:\n  \u003CKEY>: \"REPLACE_ME\"\n  ...\n",[3835],{"type":41,"tag":124,"props":3836,"children":3837},{"__ignoreMap":1603},[3838,3853,3869,3880,3895,3910,3921,3936,3951,3968,3980,4004],{"type":41,"tag":1751,"props":3839,"children":3840},{"class":1753,"line":1754},[3841,3845,3849],{"type":41,"tag":1751,"props":3842,"children":3843},{"style":1758},[3844],{"type":47,"value":1943},{"type":41,"tag":1751,"props":3846,"children":3847},{"style":1763},[3848],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3850,"children":3851},{"style":1783},[3852],{"type":47,"value":3409},{"type":41,"tag":1751,"props":3854,"children":3855},{"class":1753,"line":1769},[3856,3860,3864],{"type":41,"tag":1751,"props":3857,"children":3858},{"style":1758},[3859],{"type":47,"value":1960},{"type":41,"tag":1751,"props":3861,"children":3862},{"style":1763},[3863],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3865,"children":3866},{"style":1783},[3867],{"type":47,"value":3868}," Secret\n",{"type":41,"tag":1751,"props":3870,"children":3871},{"class":1753,"line":1789},[3872,3876],{"type":41,"tag":1751,"props":3873,"children":3874},{"style":1758},[3875],{"type":47,"value":1738},{"type":41,"tag":1751,"props":3877,"children":3878},{"style":1763},[3879],{"type":47,"value":1766},{"type":41,"tag":1751,"props":3881,"children":3882},{"class":1753,"line":1807},[3883,3887,3891],{"type":41,"tag":1751,"props":3884,"children":3885},{"style":1758},[3886],{"type":47,"value":1775},{"type":41,"tag":1751,"props":3888,"children":3889},{"style":1763},[3890],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3892,"children":3893},{"style":1783},[3894],{"type":47,"value":2704},{"type":41,"tag":1751,"props":3896,"children":3897},{"class":1753,"line":1820},[3898,3902,3906],{"type":41,"tag":1751,"props":3899,"children":3900},{"style":1758},[3901],{"type":47,"value":1795},{"type":41,"tag":1751,"props":3903,"children":3904},{"style":1763},[3905],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3907,"children":3908},{"style":1783},[3909],{"type":47,"value":1804},{"type":41,"tag":1751,"props":3911,"children":3912},{"class":1753,"line":1838},[3913,3917],{"type":41,"tag":1751,"props":3914,"children":3915},{"style":1758},[3916],{"type":47,"value":1813},{"type":41,"tag":1751,"props":3918,"children":3919},{"style":1763},[3920],{"type":47,"value":1766},{"type":41,"tag":1751,"props":3922,"children":3923},{"class":1753,"line":1856},[3924,3928,3932],{"type":41,"tag":1751,"props":3925,"children":3926},{"style":1758},[3927],{"type":47,"value":1826},{"type":41,"tag":1751,"props":3929,"children":3930},{"style":1763},[3931],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3933,"children":3934},{"style":1783},[3935],{"type":47,"value":1835},{"type":41,"tag":1751,"props":3937,"children":3938},{"class":1753,"line":1866},[3939,3943,3947],{"type":41,"tag":1751,"props":3940,"children":3941},{"style":1758},[3942],{"type":47,"value":1844},{"type":41,"tag":1751,"props":3944,"children":3945},{"style":1763},[3946],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3948,"children":3949},{"style":1783},[3950],{"type":47,"value":1853},{"type":41,"tag":1751,"props":3952,"children":3953},{"class":1753,"line":1875},[3954,3959,3963],{"type":41,"tag":1751,"props":3955,"children":3956},{"style":1758},[3957],{"type":47,"value":3958},"type",{"type":41,"tag":1751,"props":3960,"children":3961},{"style":1763},[3962],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3964,"children":3965},{"style":1783},[3966],{"type":47,"value":3967}," Opaque\n",{"type":41,"tag":1751,"props":3969,"children":3970},{"class":1753,"line":1884},[3971,3976],{"type":41,"tag":1751,"props":3972,"children":3973},{"style":1758},[3974],{"type":47,"value":3975},"stringData",{"type":41,"tag":1751,"props":3977,"children":3978},{"style":1763},[3979],{"type":47,"value":1766},{"type":41,"tag":1751,"props":3981,"children":3982},{"class":1753,"line":1897},[3983,3987,3991,3995,4000],{"type":41,"tag":1751,"props":3984,"children":3985},{"style":1758},[3986],{"type":47,"value":3794},{"type":41,"tag":1751,"props":3988,"children":3989},{"style":1763},[3990],{"type":47,"value":1780},{"type":41,"tag":1751,"props":3992,"children":3993},{"style":1763},[3994],{"type":47,"value":2243},{"type":41,"tag":1751,"props":3996,"children":3997},{"style":1783},[3998],{"type":47,"value":3999},"REPLACE_ME",{"type":41,"tag":1751,"props":4001,"children":4002},{"style":1763},[4003],{"type":47,"value":2253},{"type":41,"tag":1751,"props":4005,"children":4006},{"class":1753,"line":2095},[4007],{"type":41,"tag":1751,"props":4008,"children":4009},{"style":2341},[4010],{"type":47,"value":3819},{"type":41,"tag":1727,"props":4012,"children":4014},{"id":4013},"serviceaccount-only-if-managed-db-detected",[4015,4017],{"type":47,"value":4016},"ServiceAccount ",{"type":41,"tag":3650,"props":4018,"children":4019},{},[4020],{"type":47,"value":4021},"(only if managed DB detected)",{"type":41,"tag":1595,"props":4023,"children":4025},{"className":1743,"code":4024,"language":1745,"meta":1603,"style":1603},"apiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: \u003CappName>-sa\n  namespace: \u003Cnamespace>\n  labels:\n    app.kubernetes.io\u002Fname: \u003CappName>\n    app.kubernetes.io\u002Fmanaged-by: containerization-assist\n  annotations:\n    azure.workload.identity\u002Fclient-id: \"\u003CREPLACE_WITH_USER_ASSIGNED_IDENTITY_CLIENT_ID>\"\n",[4026],{"type":41,"tag":124,"props":4027,"children":4028},{"__ignoreMap":1603},[4029,4044,4060,4071,4086,4101,4112,4127,4142,4153],{"type":41,"tag":1751,"props":4030,"children":4031},{"class":1753,"line":1754},[4032,4036,4040],{"type":41,"tag":1751,"props":4033,"children":4034},{"style":1758},[4035],{"type":47,"value":1943},{"type":41,"tag":1751,"props":4037,"children":4038},{"style":1763},[4039],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4041,"children":4042},{"style":1783},[4043],{"type":47,"value":3409},{"type":41,"tag":1751,"props":4045,"children":4046},{"class":1753,"line":1769},[4047,4051,4055],{"type":41,"tag":1751,"props":4048,"children":4049},{"style":1758},[4050],{"type":47,"value":1960},{"type":41,"tag":1751,"props":4052,"children":4053},{"style":1763},[4054],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4056,"children":4057},{"style":1783},[4058],{"type":47,"value":4059}," ServiceAccount\n",{"type":41,"tag":1751,"props":4061,"children":4062},{"class":1753,"line":1789},[4063,4067],{"type":41,"tag":1751,"props":4064,"children":4065},{"style":1758},[4066],{"type":47,"value":1738},{"type":41,"tag":1751,"props":4068,"children":4069},{"style":1763},[4070],{"type":47,"value":1766},{"type":41,"tag":1751,"props":4072,"children":4073},{"class":1753,"line":1807},[4074,4078,4082],{"type":41,"tag":1751,"props":4075,"children":4076},{"style":1758},[4077],{"type":47,"value":1775},{"type":41,"tag":1751,"props":4079,"children":4080},{"style":1763},[4081],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4083,"children":4084},{"style":1783},[4085],{"type":47,"value":2293},{"type":41,"tag":1751,"props":4087,"children":4088},{"class":1753,"line":1820},[4089,4093,4097],{"type":41,"tag":1751,"props":4090,"children":4091},{"style":1758},[4092],{"type":47,"value":1795},{"type":41,"tag":1751,"props":4094,"children":4095},{"style":1763},[4096],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4098,"children":4099},{"style":1783},[4100],{"type":47,"value":1804},{"type":41,"tag":1751,"props":4102,"children":4103},{"class":1753,"line":1838},[4104,4108],{"type":41,"tag":1751,"props":4105,"children":4106},{"style":1758},[4107],{"type":47,"value":1813},{"type":41,"tag":1751,"props":4109,"children":4110},{"style":1763},[4111],{"type":47,"value":1766},{"type":41,"tag":1751,"props":4113,"children":4114},{"class":1753,"line":1856},[4115,4119,4123],{"type":41,"tag":1751,"props":4116,"children":4117},{"style":1758},[4118],{"type":47,"value":1826},{"type":41,"tag":1751,"props":4120,"children":4121},{"style":1763},[4122],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4124,"children":4125},{"style":1783},[4126],{"type":47,"value":1835},{"type":41,"tag":1751,"props":4128,"children":4129},{"class":1753,"line":1866},[4130,4134,4138],{"type":41,"tag":1751,"props":4131,"children":4132},{"style":1758},[4133],{"type":47,"value":1844},{"type":41,"tag":1751,"props":4135,"children":4136},{"style":1763},[4137],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4139,"children":4140},{"style":1783},[4141],{"type":47,"value":1853},{"type":41,"tag":1751,"props":4143,"children":4144},{"class":1753,"line":1875},[4145,4149],{"type":41,"tag":1751,"props":4146,"children":4147},{"style":1758},[4148],{"type":47,"value":1890},{"type":41,"tag":1751,"props":4150,"children":4151},{"style":1763},[4152],{"type":47,"value":1766},{"type":41,"tag":1751,"props":4154,"children":4155},{"class":1753,"line":1884},[4156,4161,4165,4169,4174],{"type":41,"tag":1751,"props":4157,"children":4158},{"style":1758},[4159],{"type":47,"value":4160},"    azure.workload.identity\u002Fclient-id",{"type":41,"tag":1751,"props":4162,"children":4163},{"style":1763},[4164],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4166,"children":4167},{"style":1763},[4168],{"type":47,"value":2243},{"type":41,"tag":1751,"props":4170,"children":4171},{"style":1783},[4172],{"type":47,"value":4173},"\u003CREPLACE_WITH_USER_ASSIGNED_IDENTITY_CLIENT_ID>",{"type":41,"tag":1751,"props":4175,"children":4176},{"style":1763},[4177],{"type":47,"value":2253},{"type":41,"tag":50,"props":4179,"children":4180},{},[4181,4183,4189],{"type":47,"value":4182},"Also add the Deployment pod-template annotation:\n",{"type":41,"tag":124,"props":4184,"children":4186},{"className":4185},[],[4187],{"type":47,"value":4188},"azure.workload.identity\u002Fuse: \"true\"",{"type":47,"value":236},{"type":41,"tag":1727,"props":4191,"children":4193},{"id":4192},"horizontalpodautoscaler-only-if-production-and-trafficlevel-high-medium",[4194,4196],{"type":47,"value":4195},"HorizontalPodAutoscaler ",{"type":41,"tag":3650,"props":4197,"children":4198},{},[4199],{"type":47,"value":4200},"(only if production AND trafficLevel ∈ {high, medium})",{"type":41,"tag":1595,"props":4202,"children":4204},{"className":1743,"code":4203,"language":1745,"meta":1603,"style":1603},"apiVersion: autoscaling\u002Fv2\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: \u003CappName>\n  namespace: \u003Cnamespace>\n  labels:\n    app.kubernetes.io\u002Fname: \u003CappName>\n    app.kubernetes.io\u002Fmanaged-by: containerization-assist\nspec:\n  scaleTargetRef:\n    apiVersion: apps\u002Fv1\n    kind: Deployment\n    name: \u003CappName>\n  minReplicas: \u003Creplicas from Step 1>\n  maxReplicas: \u003CminReplicas * 3, min 5, max 20>\n  metrics:\n    - type: Resource\n      resource:\n        name: cpu\n        target: { type: Utilization, averageUtilization: 70 }\n",[4205],{"type":41,"tag":124,"props":4206,"children":4207},{"__ignoreMap":1603},[4208,4224,4240,4251,4266,4281,4292,4307,4322,4333,4345,4361,4377,4393,4410,4427,4439,4459,4471,4488],{"type":41,"tag":1751,"props":4209,"children":4210},{"class":1753,"line":1754},[4211,4215,4219],{"type":41,"tag":1751,"props":4212,"children":4213},{"style":1758},[4214],{"type":47,"value":1943},{"type":41,"tag":1751,"props":4216,"children":4217},{"style":1763},[4218],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4220,"children":4221},{"style":1783},[4222],{"type":47,"value":4223}," autoscaling\u002Fv2\n",{"type":41,"tag":1751,"props":4225,"children":4226},{"class":1753,"line":1769},[4227,4231,4235],{"type":41,"tag":1751,"props":4228,"children":4229},{"style":1758},[4230],{"type":47,"value":1960},{"type":41,"tag":1751,"props":4232,"children":4233},{"style":1763},[4234],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4236,"children":4237},{"style":1783},[4238],{"type":47,"value":4239}," HorizontalPodAutoscaler\n",{"type":41,"tag":1751,"props":4241,"children":4242},{"class":1753,"line":1789},[4243,4247],{"type":41,"tag":1751,"props":4244,"children":4245},{"style":1758},[4246],{"type":47,"value":1738},{"type":41,"tag":1751,"props":4248,"children":4249},{"style":1763},[4250],{"type":47,"value":1766},{"type":41,"tag":1751,"props":4252,"children":4253},{"class":1753,"line":1807},[4254,4258,4262],{"type":41,"tag":1751,"props":4255,"children":4256},{"style":1758},[4257],{"type":47,"value":1775},{"type":41,"tag":1751,"props":4259,"children":4260},{"style":1763},[4261],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4263,"children":4264},{"style":1783},[4265],{"type":47,"value":1835},{"type":41,"tag":1751,"props":4267,"children":4268},{"class":1753,"line":1820},[4269,4273,4277],{"type":41,"tag":1751,"props":4270,"children":4271},{"style":1758},[4272],{"type":47,"value":1795},{"type":41,"tag":1751,"props":4274,"children":4275},{"style":1763},[4276],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4278,"children":4279},{"style":1783},[4280],{"type":47,"value":1804},{"type":41,"tag":1751,"props":4282,"children":4283},{"class":1753,"line":1838},[4284,4288],{"type":41,"tag":1751,"props":4285,"children":4286},{"style":1758},[4287],{"type":47,"value":1813},{"type":41,"tag":1751,"props":4289,"children":4290},{"style":1763},[4291],{"type":47,"value":1766},{"type":41,"tag":1751,"props":4293,"children":4294},{"class":1753,"line":1856},[4295,4299,4303],{"type":41,"tag":1751,"props":4296,"children":4297},{"style":1758},[4298],{"type":47,"value":1826},{"type":41,"tag":1751,"props":4300,"children":4301},{"style":1763},[4302],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4304,"children":4305},{"style":1783},[4306],{"type":47,"value":1835},{"type":41,"tag":1751,"props":4308,"children":4309},{"class":1753,"line":1866},[4310,4314,4318],{"type":41,"tag":1751,"props":4311,"children":4312},{"style":1758},[4313],{"type":47,"value":1844},{"type":41,"tag":1751,"props":4315,"children":4316},{"style":1763},[4317],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4319,"children":4320},{"style":1783},[4321],{"type":47,"value":1853},{"type":41,"tag":1751,"props":4323,"children":4324},{"class":1753,"line":1875},[4325,4329],{"type":41,"tag":1751,"props":4326,"children":4327},{"style":1758},[4328],{"type":47,"value":2059},{"type":41,"tag":1751,"props":4330,"children":4331},{"style":1763},[4332],{"type":47,"value":1766},{"type":41,"tag":1751,"props":4334,"children":4335},{"class":1753,"line":1884},[4336,4341],{"type":41,"tag":1751,"props":4337,"children":4338},{"style":1758},[4339],{"type":47,"value":4340},"  scaleTargetRef",{"type":41,"tag":1751,"props":4342,"children":4343},{"style":1763},[4344],{"type":47,"value":1766},{"type":41,"tag":1751,"props":4346,"children":4347},{"class":1753,"line":1897},[4348,4353,4357],{"type":41,"tag":1751,"props":4349,"children":4350},{"style":1758},[4351],{"type":47,"value":4352},"    apiVersion",{"type":41,"tag":1751,"props":4354,"children":4355},{"style":1763},[4356],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4358,"children":4359},{"style":1783},[4360],{"type":47,"value":1952},{"type":41,"tag":1751,"props":4362,"children":4363},{"class":1753,"line":2095},[4364,4369,4373],{"type":41,"tag":1751,"props":4365,"children":4366},{"style":1758},[4367],{"type":47,"value":4368},"    kind",{"type":41,"tag":1751,"props":4370,"children":4371},{"style":1763},[4372],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4374,"children":4375},{"style":1783},[4376],{"type":47,"value":1969},{"type":41,"tag":1751,"props":4378,"children":4379},{"class":1753,"line":2108},[4380,4385,4389],{"type":41,"tag":1751,"props":4381,"children":4382},{"style":1758},[4383],{"type":47,"value":4384},"    name",{"type":41,"tag":1751,"props":4386,"children":4387},{"style":1763},[4388],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4390,"children":4391},{"style":1783},[4392],{"type":47,"value":1835},{"type":41,"tag":1751,"props":4394,"children":4395},{"class":1753,"line":2125},[4396,4401,4405],{"type":41,"tag":1751,"props":4397,"children":4398},{"style":1758},[4399],{"type":47,"value":4400},"  minReplicas",{"type":41,"tag":1751,"props":4402,"children":4403},{"style":1763},[4404],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4406,"children":4407},{"style":1783},[4408],{"type":47,"value":4409}," \u003Creplicas from Step 1>\n",{"type":41,"tag":1751,"props":4411,"children":4412},{"class":1753,"line":2138},[4413,4418,4422],{"type":41,"tag":1751,"props":4414,"children":4415},{"style":1758},[4416],{"type":47,"value":4417},"  maxReplicas",{"type":41,"tag":1751,"props":4419,"children":4420},{"style":1763},[4421],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4423,"children":4424},{"style":1783},[4425],{"type":47,"value":4426}," \u003CminReplicas * 3, min 5, max 20>\n",{"type":41,"tag":1751,"props":4428,"children":4429},{"class":1753,"line":28},[4430,4435],{"type":41,"tag":1751,"props":4431,"children":4432},{"style":1758},[4433],{"type":47,"value":4434},"  metrics",{"type":41,"tag":1751,"props":4436,"children":4437},{"style":1763},[4438],{"type":47,"value":1766},{"type":41,"tag":1751,"props":4440,"children":4441},{"class":1753,"line":2163},[4442,4446,4450,4454],{"type":41,"tag":1751,"props":4443,"children":4444},{"style":1763},[4445],{"type":47,"value":3581},{"type":41,"tag":1751,"props":4447,"children":4448},{"style":1758},[4449],{"type":47,"value":2384},{"type":41,"tag":1751,"props":4451,"children":4452},{"style":1763},[4453],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4455,"children":4456},{"style":1783},[4457],{"type":47,"value":4458}," Resource\n",{"type":41,"tag":1751,"props":4460,"children":4461},{"class":1753,"line":2180},[4462,4467],{"type":41,"tag":1751,"props":4463,"children":4464},{"style":1758},[4465],{"type":47,"value":4466},"      resource",{"type":41,"tag":1751,"props":4468,"children":4469},{"style":1763},[4470],{"type":47,"value":1766},{"type":41,"tag":1751,"props":4472,"children":4473},{"class":1753,"line":2197},[4474,4479,4483],{"type":41,"tag":1751,"props":4475,"children":4476},{"style":1758},[4477],{"type":47,"value":4478},"        name",{"type":41,"tag":1751,"props":4480,"children":4481},{"style":1763},[4482],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4484,"children":4485},{"style":1783},[4486],{"type":47,"value":4487}," cpu\n",{"type":41,"tag":1751,"props":4489,"children":4490},{"class":1753,"line":2206},[4491,4496,4500,4504,4508,4512,4517,4522,4527,4531,4536],{"type":41,"tag":1751,"props":4492,"children":4493},{"style":1758},[4494],{"type":47,"value":4495},"        target",{"type":41,"tag":1751,"props":4497,"children":4498},{"style":1763},[4499],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4501,"children":4502},{"style":1763},[4503],{"type":47,"value":2379},{"type":41,"tag":1751,"props":4505,"children":4506},{"style":1758},[4507],{"type":47,"value":2384},{"type":41,"tag":1751,"props":4509,"children":4510},{"style":1763},[4511],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4513,"children":4514},{"style":1783},[4515],{"type":47,"value":4516}," Utilization",{"type":41,"tag":1751,"props":4518,"children":4519},{"style":1763},[4520],{"type":47,"value":4521},",",{"type":41,"tag":1751,"props":4523,"children":4524},{"style":1758},[4525],{"type":47,"value":4526}," averageUtilization",{"type":41,"tag":1751,"props":4528,"children":4529},{"style":1763},[4530],{"type":47,"value":1780},{"type":41,"tag":1751,"props":4532,"children":4533},{"style":2341},[4534],{"type":47,"value":4535}," 70",{"type":41,"tag":1751,"props":4537,"children":4538},{"style":1763},[4539],{"type":47,"value":2398},{"type":41,"tag":795,"props":4541,"children":4543},{"id":4542},"step-3-self-check-before-writing",[4544],{"type":47,"value":4545},"Step 3 — Self-check before writing",{"type":41,"tag":50,"props":4547,"children":4548},{},[4549],{"type":47,"value":4550},"For each generated YAML, confirm:",{"type":41,"tag":3122,"props":4552,"children":4555},{"className":4553},[4554],"contains-task-list",[4556,4582,4613,4629,4653,4698,4714,4730,4747],{"type":41,"tag":3126,"props":4557,"children":4560},{"className":4558},[4559],"task-list-item",[4561,4567,4569,4574,4575,4580],{"type":41,"tag":4562,"props":4563,"children":4566},"input",{"disabled":4564,"type":4565},true,"checkbox",[],{"type":47,"value":4568}," ",{"type":41,"tag":124,"props":4570,"children":4572},{"className":4571},[],[4573],{"type":47,"value":1943},{"type":47,"value":69},{"type":41,"tag":124,"props":4576,"children":4578},{"className":4577},[],[4579],{"type":47,"value":1960},{"type":47,"value":4581}," present",{"type":41,"tag":3126,"props":4583,"children":4585},{"className":4584},[4559],[4586,4589,4590,4596,4598,4604,4606,4612],{"type":41,"tag":4562,"props":4587,"children":4588},{"disabled":4564,"type":4565},[],{"type":47,"value":4568},{"type":41,"tag":124,"props":4591,"children":4593},{"className":4592},[],[4594],{"type":47,"value":4595},"metadata.name",{"type":47,"value":4597}," matches ",{"type":41,"tag":124,"props":4599,"children":4601},{"className":4600},[],[4602],{"type":47,"value":4603},"\u003CappName>",{"type":47,"value":4605}," (or ",{"type":41,"tag":124,"props":4607,"children":4609},{"className":4608},[],[4610],{"type":47,"value":4611},"\u003CappName>-\u003Csuffix>",{"type":47,"value":1740},{"type":41,"tag":3126,"props":4614,"children":4616},{"className":4615},[4559],[4617,4620,4621,4627],{"type":41,"tag":4562,"props":4618,"children":4619},{"disabled":4564,"type":4565},[],{"type":47,"value":4568},{"type":41,"tag":124,"props":4622,"children":4624},{"className":4623},[],[4625],{"type":47,"value":4626},"metadata.namespace",{"type":47,"value":4628}," matches input",{"type":41,"tag":3126,"props":4630,"children":4632},{"className":4631},[4559],[4633,4636,4638,4644,4645,4651],{"type":41,"tag":4562,"props":4634,"children":4635},{"disabled":4564,"type":4565},[],{"type":47,"value":4637}," Required labels (",{"type":41,"tag":124,"props":4639,"children":4641},{"className":4640},[],[4642],{"type":47,"value":4643},"app.kubernetes.io\u002Fname",{"type":47,"value":627},{"type":41,"tag":124,"props":4646,"children":4648},{"className":4647},[],[4649],{"type":47,"value":4650},"app.kubernetes.io\u002Fmanaged-by",{"type":47,"value":4652},") present",{"type":41,"tag":3126,"props":4654,"children":4656},{"className":4655},[4559],[4657,4660,4662,4668,4669,4675,4677,4683,4685,4691,4692],{"type":41,"tag":4562,"props":4658,"children":4659},{"disabled":4564,"type":4565},[],{"type":47,"value":4661}," Deployment: ",{"type":41,"tag":124,"props":4663,"children":4665},{"className":4664},[],[4666],{"type":47,"value":4667},"runAsNonRoot: true",{"type":47,"value":627},{"type":41,"tag":124,"props":4670,"children":4672},{"className":4671},[],[4673],{"type":47,"value":4674},"runAsUser",{"type":47,"value":4676}," ≥ 1000, no ",{"type":41,"tag":124,"props":4678,"children":4680},{"className":4679},[],[4681],{"type":47,"value":4682},"privileged",{"type":47,"value":4684},", no ",{"type":41,"tag":124,"props":4686,"children":4688},{"className":4687},[],[4689],{"type":47,"value":4690},"hostNetwork",{"type":47,"value":4684},{"type":41,"tag":124,"props":4693,"children":4695},{"className":4694},[],[4696],{"type":47,"value":4697},"hostPID",{"type":41,"tag":3126,"props":4699,"children":4701},{"className":4700},[4559],[4702,4705,4707,4712],{"type":41,"tag":4562,"props":4703,"children":4704},{"disabled":4564,"type":4565},[],{"type":47,"value":4706}," Deployment: resources requests ",{"type":41,"tag":56,"props":4708,"children":4709},{},[4710],{"type":47,"value":4711},"and",{"type":47,"value":4713}," limits both set",{"type":41,"tag":3126,"props":4715,"children":4717},{"className":4716},[4559],[4718,4721,4723,4728],{"type":41,"tag":4562,"props":4719,"children":4720},{"disabled":4564,"type":4565},[],{"type":47,"value":4722}," No real secret values (only ",{"type":41,"tag":124,"props":4724,"children":4726},{"className":4725},[],[4727],{"type":47,"value":3999},{"type":47,"value":4729}," placeholders) in Secret",{"type":41,"tag":3126,"props":4731,"children":4733},{"className":4732},[4559],[4734,4737,4739,4745],{"type":41,"tag":4562,"props":4735,"children":4736},{"disabled":4564,"type":4565},[],{"type":47,"value":4738}," If managed DB present: ServiceAccount exists AND Deployment references it AND ",{"type":41,"tag":124,"props":4740,"children":4742},{"className":4741},[],[4743],{"type":47,"value":4744},"azure.workload.identity\u002Fuse",{"type":47,"value":4746}," annotation on pod template",{"type":41,"tag":3126,"props":4748,"children":4750},{"className":4749},[4559],[4751,4754],{"type":41,"tag":4562,"props":4752,"children":4753},{"disabled":4564,"type":4565},[],{"type":47,"value":4755}," YAML parses cleanly (no tabs, consistent 2-space indent)",{"type":41,"tag":50,"props":4757,"children":4758},{},[4759],{"type":47,"value":4760},"If any check fails, fix the YAML before writing. Never write a manifest\nthat fails the security checks.",{"type":41,"tag":795,"props":4762,"children":4764},{"id":4763},"step-4-write-to-disk",[4765],{"type":47,"value":4766},"Step 4 — Write to disk",{"type":41,"tag":3122,"props":4768,"children":4769},{},[4770,4789,4912],{"type":41,"tag":3126,"props":4771,"children":4772},{},[4773,4775,4780,4782,4787],{"type":47,"value":4774},"Create ",{"type":41,"tag":124,"props":4776,"children":4778},{"className":4777},[],[4779],{"type":47,"value":687},{"type":47,"value":4781}," (default ",{"type":41,"tag":124,"props":4783,"children":4785},{"className":4784},[],[4786],{"type":47,"value":702},{"type":47,"value":4788},") if it doesn't exist.",{"type":41,"tag":3126,"props":4790,"children":4791},{},[4792,4794],{"type":47,"value":4793},"Write one file per resource, using these names (skip files for resources\nyou did not emit):",{"type":41,"tag":85,"props":4795,"children":4796},{},[4797,4813],{"type":41,"tag":89,"props":4798,"children":4799},{},[4800],{"type":41,"tag":93,"props":4801,"children":4802},{},[4803,4808],{"type":41,"tag":97,"props":4804,"children":4805},{},[4806],{"type":47,"value":4807},"File",{"type":41,"tag":97,"props":4809,"children":4810},{},[4811],{"type":47,"value":4812},"Resource",{"type":41,"tag":113,"props":4814,"children":4815},{},[4816,4832,4848,4864,4880,4896],{"type":41,"tag":93,"props":4817,"children":4818},{},[4819,4828],{"type":41,"tag":120,"props":4820,"children":4821},{},[4822],{"type":41,"tag":124,"props":4823,"children":4825},{"className":4824},[],[4826],{"type":47,"value":4827},"deployment.yaml",{"type":41,"tag":120,"props":4829,"children":4830},{},[4831],{"type":47,"value":19},{"type":41,"tag":93,"props":4833,"children":4834},{},[4835,4844],{"type":41,"tag":120,"props":4836,"children":4837},{},[4838],{"type":41,"tag":124,"props":4839,"children":4841},{"className":4840},[],[4842],{"type":47,"value":4843},"service.yaml",{"type":41,"tag":120,"props":4845,"children":4846},{},[4847],{"type":47,"value":1664},{"type":41,"tag":93,"props":4849,"children":4850},{},[4851,4860],{"type":41,"tag":120,"props":4852,"children":4853},{},[4854],{"type":41,"tag":124,"props":4855,"children":4857},{"className":4856},[],[4858],{"type":47,"value":4859},"configmap.yaml",{"type":41,"tag":120,"props":4861,"children":4862},{},[4863],{"type":47,"value":436},{"type":41,"tag":93,"props":4865,"children":4866},{},[4867,4876],{"type":41,"tag":120,"props":4868,"children":4869},{},[4870],{"type":41,"tag":124,"props":4871,"children":4873},{"className":4872},[],[4874],{"type":47,"value":4875},"secret.yaml",{"type":41,"tag":120,"props":4877,"children":4878},{},[4879],{"type":47,"value":460},{"type":41,"tag":93,"props":4881,"children":4882},{},[4883,4892],{"type":41,"tag":120,"props":4884,"children":4885},{},[4886],{"type":41,"tag":124,"props":4887,"children":4889},{"className":4888},[],[4890],{"type":47,"value":4891},"serviceaccount.yaml",{"type":41,"tag":120,"props":4893,"children":4894},{},[4895],{"type":47,"value":502},{"type":41,"tag":93,"props":4897,"children":4898},{},[4899,4908],{"type":41,"tag":120,"props":4900,"children":4901},{},[4902],{"type":41,"tag":124,"props":4903,"children":4905},{"className":4904},[],[4906],{"type":47,"value":4907},"hpa.yaml",{"type":41,"tag":120,"props":4909,"children":4910},{},[4911],{"type":47,"value":1716},{"type":41,"tag":3126,"props":4913,"children":4914},{},[4915],{"type":47,"value":4916},"Use the chat environment's file-edit\u002Fwrite capability. Do NOT ask the\nuser to copy-paste. Do NOT print the YAML in chat unless the user asks.",{"type":41,"tag":795,"props":4918,"children":4920},{"id":4919},"step-5-output",[4921],{"type":47,"value":4922},"Step 5 — Output",{"type":41,"tag":50,"props":4924,"children":4925},{},[4926],{"type":47,"value":4927},"Use this exact format (succinct — the YAML files are the artifact):",{"type":41,"tag":1595,"props":4929,"children":4933},{"className":4930,"code":4931,"language":4932,"meta":1603,"style":1603},"language-md shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","**Kubernetes manifests** — `\u003CappName>` in `\u003Cnamespace>`\n\n### Result\n✅ Wrote N manifest(s) to `\u003CoutputDir>`:\n- `deployment.yaml` — N replicas, image `\u003Cimage>`\n- `service.yaml` — ClusterIP on port 80 → containerPort \u003Cport>\n- `configmap.yaml` — N keys                  *(omit line if not emitted)*\n- `secret.yaml` — N keys (all `REPLACE_ME`)  *(omit line if not emitted)*\n- `serviceaccount.yaml` — workload identity for \u003CDB list>  *(omit line if not emitted)*\n- `hpa.yaml` — min N, max M, target CPU 70%  *(omit line if not emitted)*\n\n### Configuration summary\n- **Replicas:** \u003CN> (\u003Creason — e.g. \"production default\", \"trafficLevel=high × tier-1\">)\n- **Resources:** requests cpu=\u003Cv> mem=\u003Cv>, limits cpu=\u003Cv> mem=\u003Cv>\n- **Probes:** \u003C\"liveness + readiness on \u003Cpath>\" or \"disabled (development)\" or \"TCP fallback\">\n- **Security context:** runAsNonRoot=true, readOnlyRootFilesystem=true, capabilities dropped\n- **Workload identity:** \u003C\"enabled — replace client-id annotation with your User-Assigned Identity ID\" or \"not required\">\n\n### Action required before deploy\n- \u003Clist every `REPLACE_ME` value in secret.yaml and the workload identity client-id if SA was emitted>\n- \u003C\"Replace placeholder image \u003CappName>:dev\" if image was defaulted>\n\n### Next steps\n1. `kubectl apply -n \u003Cnamespace> -f \u003CoutputDir>\u002F`\n2. Run **verify-deploy** (tool) to confirm rollout succeeds.\n3. Run **scan-image** (tool) on the image before promoting to production.\n","md",[4934],{"type":41,"tag":124,"props":4935,"children":4936},{"__ignoreMap":1603},[4937,4993,5001,5015,5040,5078,5102,5143,5196,5232,5268,5275,5287,5313,5338,5363,5388,5413,5420,5432,5461,5473,5480,5492,5513,5544],{"type":41,"tag":1751,"props":4938,"children":4939},{"class":1753,"line":1754},[4940,4946,4952,4956,4962,4967,4971,4975,4979,4983,4988],{"type":41,"tag":1751,"props":4941,"children":4943},{"style":4942},"--shiki-light:#39ADB5;--shiki-light-font-weight:bold;--shiki-default:#89DDFF;--shiki-default-font-weight:bold;--shiki-dark:#89DDFF;--shiki-dark-font-weight:bold",[4944],{"type":47,"value":4945},"**",{"type":41,"tag":1751,"props":4947,"children":4949},{"style":4948},"--shiki-light:#E53935;--shiki-light-font-weight:bold;--shiki-default:#F07178;--shiki-default-font-weight:bold;--shiki-dark:#F07178;--shiki-dark-font-weight:bold",[4950],{"type":47,"value":4951},"Kubernetes manifests",{"type":41,"tag":1751,"props":4953,"children":4954},{"style":4942},[4955],{"type":47,"value":4945},{"type":41,"tag":1751,"props":4957,"children":4959},{"style":4958},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[4960],{"type":47,"value":4961}," — ",{"type":41,"tag":1751,"props":4963,"children":4964},{"style":1763},[4965],{"type":47,"value":4966},"`",{"type":41,"tag":1751,"props":4968,"children":4969},{"style":1783},[4970],{"type":47,"value":4603},{"type":41,"tag":1751,"props":4972,"children":4973},{"style":1763},[4974],{"type":47,"value":4966},{"type":41,"tag":1751,"props":4976,"children":4977},{"style":4958},[4978],{"type":47,"value":62},{"type":41,"tag":1751,"props":4980,"children":4981},{"style":1763},[4982],{"type":47,"value":4966},{"type":41,"tag":1751,"props":4984,"children":4985},{"style":1783},[4986],{"type":47,"value":4987},"\u003Cnamespace>",{"type":41,"tag":1751,"props":4989,"children":4990},{"style":1763},[4991],{"type":47,"value":4992},"`\n",{"type":41,"tag":1751,"props":4994,"children":4995},{"class":1753,"line":1769},[4996],{"type":41,"tag":1751,"props":4997,"children":4998},{"emptyLinePlaceholder":4564},[4999],{"type":47,"value":5000},"\n",{"type":41,"tag":1751,"props":5002,"children":5003},{"class":1753,"line":1789},[5004,5009],{"type":41,"tag":1751,"props":5005,"children":5006},{"style":1763},[5007],{"type":47,"value":5008},"### ",{"type":41,"tag":1751,"props":5010,"children":5012},{"style":5011},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[5013],{"type":47,"value":5014},"Result\n",{"type":41,"tag":1751,"props":5016,"children":5017},{"class":1753,"line":1807},[5018,5023,5027,5032,5036],{"type":41,"tag":1751,"props":5019,"children":5020},{"style":4958},[5021],{"type":47,"value":5022},"✅ Wrote N manifest(s) to ",{"type":41,"tag":1751,"props":5024,"children":5025},{"style":1763},[5026],{"type":47,"value":4966},{"type":41,"tag":1751,"props":5028,"children":5029},{"style":1783},[5030],{"type":47,"value":5031},"\u003CoutputDir>",{"type":41,"tag":1751,"props":5033,"children":5034},{"style":1763},[5035],{"type":47,"value":4966},{"type":41,"tag":1751,"props":5037,"children":5038},{"style":4958},[5039],{"type":47,"value":1766},{"type":41,"tag":1751,"props":5041,"children":5042},{"class":1753,"line":1820},[5043,5047,5052,5056,5060,5065,5069,5074],{"type":41,"tag":1751,"props":5044,"children":5045},{"style":1763},[5046],{"type":47,"value":182},{"type":41,"tag":1751,"props":5048,"children":5049},{"style":1763},[5050],{"type":47,"value":5051}," `",{"type":41,"tag":1751,"props":5053,"children":5054},{"style":1783},[5055],{"type":47,"value":4827},{"type":41,"tag":1751,"props":5057,"children":5058},{"style":1763},[5059],{"type":47,"value":4966},{"type":41,"tag":1751,"props":5061,"children":5062},{"style":4958},[5063],{"type":47,"value":5064}," — N replicas, image ",{"type":41,"tag":1751,"props":5066,"children":5067},{"style":1763},[5068],{"type":47,"value":4966},{"type":41,"tag":1751,"props":5070,"children":5071},{"style":1783},[5072],{"type":47,"value":5073},"\u003Cimage>",{"type":41,"tag":1751,"props":5075,"children":5076},{"style":1763},[5077],{"type":47,"value":4992},{"type":41,"tag":1751,"props":5079,"children":5080},{"class":1753,"line":1838},[5081,5085,5089,5093,5097],{"type":41,"tag":1751,"props":5082,"children":5083},{"style":1763},[5084],{"type":47,"value":182},{"type":41,"tag":1751,"props":5086,"children":5087},{"style":1763},[5088],{"type":47,"value":5051},{"type":41,"tag":1751,"props":5090,"children":5091},{"style":1783},[5092],{"type":47,"value":4843},{"type":41,"tag":1751,"props":5094,"children":5095},{"style":1763},[5096],{"type":47,"value":4966},{"type":41,"tag":1751,"props":5098,"children":5099},{"style":4958},[5100],{"type":47,"value":5101}," — ClusterIP on port 80 → containerPort \u003Cport>\n",{"type":41,"tag":1751,"props":5103,"children":5104},{"class":1753,"line":1856},[5105,5109,5113,5117,5121,5126,5132,5138],{"type":41,"tag":1751,"props":5106,"children":5107},{"style":1763},[5108],{"type":47,"value":182},{"type":41,"tag":1751,"props":5110,"children":5111},{"style":1763},[5112],{"type":47,"value":5051},{"type":41,"tag":1751,"props":5114,"children":5115},{"style":1783},[5116],{"type":47,"value":4859},{"type":41,"tag":1751,"props":5118,"children":5119},{"style":1763},[5120],{"type":47,"value":4966},{"type":41,"tag":1751,"props":5122,"children":5123},{"style":4958},[5124],{"type":47,"value":5125}," — N keys                  ",{"type":41,"tag":1751,"props":5127,"children":5129},{"style":5128},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[5130],{"type":47,"value":5131},"*",{"type":41,"tag":1751,"props":5133,"children":5135},{"style":5134},"--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#F07178;--shiki-default-font-style:italic;--shiki-dark:#F07178;--shiki-dark-font-style:italic",[5136],{"type":47,"value":5137},"(omit line if not emitted)",{"type":41,"tag":1751,"props":5139,"children":5140},{"style":5128},[5141],{"type":47,"value":5142},"*\n",{"type":41,"tag":1751,"props":5144,"children":5145},{"class":1753,"line":1866},[5146,5150,5154,5158,5162,5167,5171,5175,5179,5184,5188,5192],{"type":41,"tag":1751,"props":5147,"children":5148},{"style":1763},[5149],{"type":47,"value":182},{"type":41,"tag":1751,"props":5151,"children":5152},{"style":1763},[5153],{"type":47,"value":5051},{"type":41,"tag":1751,"props":5155,"children":5156},{"style":1783},[5157],{"type":47,"value":4875},{"type":41,"tag":1751,"props":5159,"children":5160},{"style":1763},[5161],{"type":47,"value":4966},{"type":41,"tag":1751,"props":5163,"children":5164},{"style":4958},[5165],{"type":47,"value":5166}," — N keys (all ",{"type":41,"tag":1751,"props":5168,"children":5169},{"style":1763},[5170],{"type":47,"value":4966},{"type":41,"tag":1751,"props":5172,"children":5173},{"style":1783},[5174],{"type":47,"value":3999},{"type":41,"tag":1751,"props":5176,"children":5177},{"style":1763},[5178],{"type":47,"value":4966},{"type":41,"tag":1751,"props":5180,"children":5181},{"style":4958},[5182],{"type":47,"value":5183},")  ",{"type":41,"tag":1751,"props":5185,"children":5186},{"style":5128},[5187],{"type":47,"value":5131},{"type":41,"tag":1751,"props":5189,"children":5190},{"style":5134},[5191],{"type":47,"value":5137},{"type":41,"tag":1751,"props":5193,"children":5194},{"style":5128},[5195],{"type":47,"value":5142},{"type":41,"tag":1751,"props":5197,"children":5198},{"class":1753,"line":1875},[5199,5203,5207,5211,5215,5220,5224,5228],{"type":41,"tag":1751,"props":5200,"children":5201},{"style":1763},[5202],{"type":47,"value":182},{"type":41,"tag":1751,"props":5204,"children":5205},{"style":1763},[5206],{"type":47,"value":5051},{"type":41,"tag":1751,"props":5208,"children":5209},{"style":1783},[5210],{"type":47,"value":4891},{"type":41,"tag":1751,"props":5212,"children":5213},{"style":1763},[5214],{"type":47,"value":4966},{"type":41,"tag":1751,"props":5216,"children":5217},{"style":4958},[5218],{"type":47,"value":5219}," — workload identity for \u003CDB list>  ",{"type":41,"tag":1751,"props":5221,"children":5222},{"style":5128},[5223],{"type":47,"value":5131},{"type":41,"tag":1751,"props":5225,"children":5226},{"style":5134},[5227],{"type":47,"value":5137},{"type":41,"tag":1751,"props":5229,"children":5230},{"style":5128},[5231],{"type":47,"value":5142},{"type":41,"tag":1751,"props":5233,"children":5234},{"class":1753,"line":1884},[5235,5239,5243,5247,5251,5256,5260,5264],{"type":41,"tag":1751,"props":5236,"children":5237},{"style":1763},[5238],{"type":47,"value":182},{"type":41,"tag":1751,"props":5240,"children":5241},{"style":1763},[5242],{"type":47,"value":5051},{"type":41,"tag":1751,"props":5244,"children":5245},{"style":1783},[5246],{"type":47,"value":4907},{"type":41,"tag":1751,"props":5248,"children":5249},{"style":1763},[5250],{"type":47,"value":4966},{"type":41,"tag":1751,"props":5252,"children":5253},{"style":4958},[5254],{"type":47,"value":5255}," — min N, max M, target CPU 70%  ",{"type":41,"tag":1751,"props":5257,"children":5258},{"style":5128},[5259],{"type":47,"value":5131},{"type":41,"tag":1751,"props":5261,"children":5262},{"style":5134},[5263],{"type":47,"value":5137},{"type":41,"tag":1751,"props":5265,"children":5266},{"style":5128},[5267],{"type":47,"value":5142},{"type":41,"tag":1751,"props":5269,"children":5270},{"class":1753,"line":1897},[5271],{"type":41,"tag":1751,"props":5272,"children":5273},{"emptyLinePlaceholder":4564},[5274],{"type":47,"value":5000},{"type":41,"tag":1751,"props":5276,"children":5277},{"class":1753,"line":2095},[5278,5282],{"type":41,"tag":1751,"props":5279,"children":5280},{"style":1763},[5281],{"type":47,"value":5008},{"type":41,"tag":1751,"props":5283,"children":5284},{"style":5011},[5285],{"type":47,"value":5286},"Configuration summary\n",{"type":41,"tag":1751,"props":5288,"children":5289},{"class":1753,"line":2108},[5290,5294,5299,5304,5308],{"type":41,"tag":1751,"props":5291,"children":5292},{"style":1763},[5293],{"type":47,"value":182},{"type":41,"tag":1751,"props":5295,"children":5296},{"style":4942},[5297],{"type":47,"value":5298}," **",{"type":41,"tag":1751,"props":5300,"children":5301},{"style":4948},[5302],{"type":47,"value":5303},"Replicas:",{"type":41,"tag":1751,"props":5305,"children":5306},{"style":4942},[5307],{"type":47,"value":4945},{"type":41,"tag":1751,"props":5309,"children":5310},{"style":4958},[5311],{"type":47,"value":5312}," \u003CN> (\u003Creason — e.g. \"production default\", \"trafficLevel=high × tier-1\">)\n",{"type":41,"tag":1751,"props":5314,"children":5315},{"class":1753,"line":2125},[5316,5320,5324,5329,5333],{"type":41,"tag":1751,"props":5317,"children":5318},{"style":1763},[5319],{"type":47,"value":182},{"type":41,"tag":1751,"props":5321,"children":5322},{"style":4942},[5323],{"type":47,"value":5298},{"type":41,"tag":1751,"props":5325,"children":5326},{"style":4948},[5327],{"type":47,"value":5328},"Resources:",{"type":41,"tag":1751,"props":5330,"children":5331},{"style":4942},[5332],{"type":47,"value":4945},{"type":41,"tag":1751,"props":5334,"children":5335},{"style":4958},[5336],{"type":47,"value":5337}," requests cpu=\u003Cv> mem=\u003Cv>, limits cpu=\u003Cv> mem=\u003Cv>\n",{"type":41,"tag":1751,"props":5339,"children":5340},{"class":1753,"line":2138},[5341,5345,5349,5354,5358],{"type":41,"tag":1751,"props":5342,"children":5343},{"style":1763},[5344],{"type":47,"value":182},{"type":41,"tag":1751,"props":5346,"children":5347},{"style":4942},[5348],{"type":47,"value":5298},{"type":41,"tag":1751,"props":5350,"children":5351},{"style":4948},[5352],{"type":47,"value":5353},"Probes:",{"type":41,"tag":1751,"props":5355,"children":5356},{"style":4942},[5357],{"type":47,"value":4945},{"type":41,"tag":1751,"props":5359,"children":5360},{"style":4958},[5361],{"type":47,"value":5362}," \u003C\"liveness + readiness on \u003Cpath>\" or \"disabled (development)\" or \"TCP fallback\">\n",{"type":41,"tag":1751,"props":5364,"children":5365},{"class":1753,"line":28},[5366,5370,5374,5379,5383],{"type":41,"tag":1751,"props":5367,"children":5368},{"style":1763},[5369],{"type":47,"value":182},{"type":41,"tag":1751,"props":5371,"children":5372},{"style":4942},[5373],{"type":47,"value":5298},{"type":41,"tag":1751,"props":5375,"children":5376},{"style":4948},[5377],{"type":47,"value":5378},"Security context:",{"type":41,"tag":1751,"props":5380,"children":5381},{"style":4942},[5382],{"type":47,"value":4945},{"type":41,"tag":1751,"props":5384,"children":5385},{"style":4958},[5386],{"type":47,"value":5387}," runAsNonRoot=true, readOnlyRootFilesystem=true, capabilities dropped\n",{"type":41,"tag":1751,"props":5389,"children":5390},{"class":1753,"line":2163},[5391,5395,5399,5404,5408],{"type":41,"tag":1751,"props":5392,"children":5393},{"style":1763},[5394],{"type":47,"value":182},{"type":41,"tag":1751,"props":5396,"children":5397},{"style":4942},[5398],{"type":47,"value":5298},{"type":41,"tag":1751,"props":5400,"children":5401},{"style":4948},[5402],{"type":47,"value":5403},"Workload identity:",{"type":41,"tag":1751,"props":5405,"children":5406},{"style":4942},[5407],{"type":47,"value":4945},{"type":41,"tag":1751,"props":5409,"children":5410},{"style":4958},[5411],{"type":47,"value":5412}," \u003C\"enabled — replace client-id annotation with your User-Assigned Identity ID\" or \"not required\">\n",{"type":41,"tag":1751,"props":5414,"children":5415},{"class":1753,"line":2180},[5416],{"type":41,"tag":1751,"props":5417,"children":5418},{"emptyLinePlaceholder":4564},[5419],{"type":47,"value":5000},{"type":41,"tag":1751,"props":5421,"children":5422},{"class":1753,"line":2197},[5423,5427],{"type":41,"tag":1751,"props":5424,"children":5425},{"style":1763},[5426],{"type":47,"value":5008},{"type":41,"tag":1751,"props":5428,"children":5429},{"style":5011},[5430],{"type":47,"value":5431},"Action required before deploy\n",{"type":41,"tag":1751,"props":5433,"children":5434},{"class":1753,"line":2206},[5435,5439,5444,5448,5452,5456],{"type":41,"tag":1751,"props":5436,"children":5437},{"style":1763},[5438],{"type":47,"value":182},{"type":41,"tag":1751,"props":5440,"children":5441},{"style":4958},[5442],{"type":47,"value":5443}," \u003Clist every ",{"type":41,"tag":1751,"props":5445,"children":5446},{"style":1763},[5447],{"type":47,"value":4966},{"type":41,"tag":1751,"props":5449,"children":5450},{"style":1783},[5451],{"type":47,"value":3999},{"type":41,"tag":1751,"props":5453,"children":5454},{"style":1763},[5455],{"type":47,"value":4966},{"type":41,"tag":1751,"props":5457,"children":5458},{"style":4958},[5459],{"type":47,"value":5460}," value in secret.yaml and the workload identity client-id if SA was emitted>\n",{"type":41,"tag":1751,"props":5462,"children":5463},{"class":1753,"line":2215},[5464,5468],{"type":41,"tag":1751,"props":5465,"children":5466},{"style":1763},[5467],{"type":47,"value":182},{"type":41,"tag":1751,"props":5469,"children":5470},{"style":4958},[5471],{"type":47,"value":5472}," \u003C\"Replace placeholder image \u003CappName>:dev\" if image was defaulted>\n",{"type":41,"tag":1751,"props":5474,"children":5475},{"class":1753,"line":2228},[5476],{"type":41,"tag":1751,"props":5477,"children":5478},{"emptyLinePlaceholder":4564},[5479],{"type":47,"value":5000},{"type":41,"tag":1751,"props":5481,"children":5482},{"class":1753,"line":2256},[5483,5487],{"type":41,"tag":1751,"props":5484,"children":5485},{"style":1763},[5486],{"type":47,"value":5008},{"type":41,"tag":1751,"props":5488,"children":5489},{"style":5011},[5490],{"type":47,"value":5491},"Next steps\n",{"type":41,"tag":1751,"props":5493,"children":5494},{"class":1753,"line":2269},[5495,5500,5504,5509],{"type":41,"tag":1751,"props":5496,"children":5497},{"style":1763},[5498],{"type":47,"value":5499},"1.",{"type":41,"tag":1751,"props":5501,"children":5502},{"style":1763},[5503],{"type":47,"value":5051},{"type":41,"tag":1751,"props":5505,"children":5506},{"style":1783},[5507],{"type":47,"value":5508},"kubectl apply -n \u003Cnamespace> -f \u003CoutputDir>\u002F",{"type":41,"tag":1751,"props":5510,"children":5511},{"style":1763},[5512],{"type":47,"value":4992},{"type":41,"tag":1751,"props":5514,"children":5515},{"class":1753,"line":2278},[5516,5521,5526,5530,5535,5539],{"type":41,"tag":1751,"props":5517,"children":5518},{"style":1763},[5519],{"type":47,"value":5520},"2.",{"type":41,"tag":1751,"props":5522,"children":5523},{"style":4958},[5524],{"type":47,"value":5525}," Run ",{"type":41,"tag":1751,"props":5527,"children":5528},{"style":4942},[5529],{"type":47,"value":4945},{"type":41,"tag":1751,"props":5531,"children":5532},{"style":4948},[5533],{"type":47,"value":5534},"verify-deploy",{"type":41,"tag":1751,"props":5536,"children":5537},{"style":4942},[5538],{"type":47,"value":4945},{"type":41,"tag":1751,"props":5540,"children":5541},{"style":4958},[5542],{"type":47,"value":5543}," (tool) to confirm rollout succeeds.\n",{"type":41,"tag":1751,"props":5545,"children":5546},{"class":1753,"line":2296},[5547,5552,5556,5560,5565,5569],{"type":41,"tag":1751,"props":5548,"children":5549},{"style":1763},[5550],{"type":47,"value":5551},"3.",{"type":41,"tag":1751,"props":5553,"children":5554},{"style":4958},[5555],{"type":47,"value":5525},{"type":41,"tag":1751,"props":5557,"children":5558},{"style":4942},[5559],{"type":47,"value":4945},{"type":41,"tag":1751,"props":5561,"children":5562},{"style":4948},[5563],{"type":47,"value":5564},"scan-image",{"type":41,"tag":1751,"props":5566,"children":5567},{"style":4942},[5568],{"type":47,"value":4945},{"type":41,"tag":1751,"props":5570,"children":5571},{"style":4958},[5572],{"type":47,"value":5573}," (tool) on the image before promoting to production.\n",{"type":41,"tag":78,"props":5575,"children":5577},{"id":5576},"constraints",[5578],{"type":47,"value":5579},"Constraints",{"type":41,"tag":3122,"props":5581,"children":5582},{},[5583,5595,5600,5611,5630,5664,5677,5695],{"type":41,"tag":3126,"props":5584,"children":5585},{},[5586,5588,5593],{"type":47,"value":5587},"The artifacts are the files in ",{"type":41,"tag":124,"props":5589,"children":5591},{"className":5590},[],[5592],{"type":47,"value":5031},{"type":47,"value":5594},". Always write them to disk.",{"type":41,"tag":3126,"props":5596,"children":5597},{},[5598],{"type":47,"value":5599},"NEVER print full YAML in chat unless the user explicitly asks (\"show me\",\n\"print the deployment\", etc.).",{"type":41,"tag":3126,"props":5601,"children":5602},{},[5603,5605,5610],{"type":47,"value":5604},"NEVER put real secret values in a Secret. Always ",{"type":41,"tag":124,"props":5606,"children":5608},{"className":5607},[],[5609],{"type":47,"value":3999},{"type":47,"value":236},{"type":41,"tag":3126,"props":5612,"children":5613},{},[5614,5616,5622,5623,5629],{"type":47,"value":5615},"NEVER omit ",{"type":41,"tag":124,"props":5617,"children":5619},{"className":5618},[],[5620],{"type":47,"value":5621},"securityContext.runAsNonRoot: true",{"type":47,"value":3136},{"type":41,"tag":124,"props":5624,"children":5626},{"className":5625},[],[5627],{"type":47,"value":5628},"allowPrivilegeEscalation: false",{"type":47,"value":236},{"type":41,"tag":3126,"props":5631,"children":5632},{},[5633,5635,5641,5642,5648,5649,5655,5657,5663],{"type":47,"value":5634},"NEVER set ",{"type":41,"tag":124,"props":5636,"children":5638},{"className":5637},[],[5639],{"type":47,"value":5640},"privileged: true",{"type":47,"value":627},{"type":41,"tag":124,"props":5643,"children":5645},{"className":5644},[],[5646],{"type":47,"value":5647},"hostNetwork: true",{"type":47,"value":627},{"type":41,"tag":124,"props":5650,"children":5652},{"className":5651},[],[5653],{"type":47,"value":5654},"hostPID: true",{"type":47,"value":5656},", or ",{"type":41,"tag":124,"props":5658,"children":5660},{"className":5659},[],[5661],{"type":47,"value":5662},"hostIPC: true",{"type":47,"value":236},{"type":41,"tag":3126,"props":5665,"children":5666},{},[5667,5669,5675],{"type":47,"value":5668},"NEVER pick the ",{"type":41,"tag":124,"props":5670,"children":5672},{"className":5671},[],[5673],{"type":47,"value":5674},"latest",{"type":47,"value":5676}," tag for the image. If user gave one, warn and\nproceed but mark it in \"Action required\".",{"type":41,"tag":3126,"props":5678,"children":5679},{},[5680,5682,5687,5688,5693],{"type":47,"value":5681},"NEVER emit ",{"type":41,"tag":124,"props":5683,"children":5685},{"className":5684},[],[5686],{"type":47,"value":625},{"type":47,"value":3136},{"type":41,"tag":124,"props":5689,"children":5691},{"className":5690},[],[5692],{"type":47,"value":633},{"type":47,"value":5694}," — out of scope for this skill.",{"type":41,"tag":3126,"props":5696,"children":5697},{},[5698,5700,5706],{"type":47,"value":5699},"Manifest order in ",{"type":41,"tag":124,"props":5701,"children":5703},{"className":5702},[],[5704],{"type":47,"value":5705},"kubectl apply -f",{"type":47,"value":5707}," matters: this skill writes one file\nper kind, so kubectl handles ordering naturally.",{"type":41,"tag":78,"props":5709,"children":5711},{"id":5710},"failure-modes",[5712],{"type":47,"value":5713},"Failure modes",{"type":41,"tag":85,"props":5715,"children":5716},{},[5717,5733],{"type":41,"tag":89,"props":5718,"children":5719},{},[5720],{"type":41,"tag":93,"props":5721,"children":5722},{},[5723,5728],{"type":41,"tag":97,"props":5724,"children":5725},{},[5726],{"type":47,"value":5727},"Symptom",{"type":41,"tag":97,"props":5729,"children":5730},{},[5731],{"type":47,"value":5732},"Action",{"type":41,"tag":113,"props":5734,"children":5735},{},[5736,5754,5772,5796,5830,5848],{"type":41,"tag":93,"props":5737,"children":5738},{},[5739,5749],{"type":41,"tag":120,"props":5740,"children":5741},{},[5742,5747],{"type":41,"tag":124,"props":5743,"children":5745},{"className":5744},[],[5746],{"type":47,"value":129},{"type":47,"value":5748}," doesn't exist",{"type":41,"tag":120,"props":5750,"children":5751},{},[5752],{"type":47,"value":5753},"Echo path; ask for a valid one. STOP.",{"type":41,"tag":93,"props":5755,"children":5756},{},[5757,5767],{"type":41,"tag":120,"props":5758,"children":5759},{},[5760,5765],{"type":41,"tag":124,"props":5761,"children":5763},{"className":5762},[],[5764],{"type":47,"value":159},{"type":47,"value":5766}," invalid for DNS-1123",{"type":41,"tag":120,"props":5768,"children":5769},{},[5770],{"type":47,"value":5771},"Normalize; tell user; continue with normalized name.",{"type":41,"tag":93,"props":5773,"children":5774},{},[5775,5791],{"type":41,"tag":120,"props":5776,"children":5777},{},[5778,5780,5785,5786],{"type":47,"value":5779},"User asked for ",{"type":41,"tag":124,"props":5781,"children":5783},{"className":5782},[],[5784],{"type":47,"value":625},{"type":47,"value":662},{"type":41,"tag":124,"props":5787,"children":5789},{"className":5788},[],[5790],{"type":47,"value":633},{"type":41,"tag":120,"props":5792,"children":5793},{},[5794],{"type":47,"value":5795},"Decline politely; suggest manual chart authoring. STOP.",{"type":41,"tag":93,"props":5797,"children":5798},{},[5799,5811],{"type":41,"tag":120,"props":5800,"children":5801},{},[5802,5804,5809],{"type":47,"value":5803},"Cannot infer port AND no ",{"type":41,"tag":124,"props":5805,"children":5807},{"className":5806},[],[5808],{"type":47,"value":333},{"type":47,"value":5810}," provided",{"type":41,"tag":120,"props":5812,"children":5813},{},[5814,5816,5821,5823,5828],{"type":47,"value":5815},"Use ",{"type":41,"tag":124,"props":5817,"children":5819},{"className":5818},[],[5820],{"type":47,"value":853},{"type":47,"value":5822},"; note in ",{"type":41,"tag":56,"props":5824,"children":5825},{},[5826],{"type":47,"value":5827},"Configuration summary",{"type":47,"value":5829}," that the port is a guess.",{"type":41,"tag":93,"props":5831,"children":5832},{},[5833,5843],{"type":41,"tag":120,"props":5834,"children":5835},{},[5836,5841],{"type":41,"tag":124,"props":5837,"children":5839},{"className":5838},[],[5840],{"type":47,"value":687},{"type":47,"value":5842}," is not writable",{"type":41,"tag":120,"props":5844,"children":5845},{},[5846],{"type":47,"value":5847},"Surface the OS error; ask user for a different path. STOP.",{"type":41,"tag":93,"props":5849,"children":5850},{},[5851,5861],{"type":41,"tag":120,"props":5852,"children":5853},{},[5854,5856],{"type":47,"value":5855},"User provided real-looking secret values in ",{"type":41,"tag":124,"props":5857,"children":5859},{"className":5858},[],[5860],{"type":47,"value":415},{"type":41,"tag":120,"props":5862,"children":5863},{},[5864,5866,5871],{"type":47,"value":5865},"Strip them; write ",{"type":41,"tag":124,"props":5867,"children":5869},{"className":5868},[],[5870],{"type":47,"value":3999},{"type":47,"value":5872},"; surface a warning.",{"type":41,"tag":5874,"props":5875,"children":5876},"style",{},[5877],{"type":47,"value":5878},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":5880,"total":1789},[5881,5901,5912],{"slug":5882,"name":5882,"fn":5883,"description":5884,"org":5885,"tags":5886,"stars":24,"repoUrl":25,"updatedAt":5900},"fix-dockerfile","validate and remediate Dockerfiles","Validate and remediate an existing Dockerfile against security, performance, and best-practice rules. Use AFTER a Dockerfile exists (either user-authored or produced by generate-dockerfile) and BEFORE building or pushing the image. Triggers include \"fix my Dockerfile\", \"is this Dockerfile secure\", \"validate Dockerfile\", \"check Dockerfile for issues\", \"audit Dockerfile\", or any container build flow that needs a sanity check.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5887,5888,5891,5894,5897],{"name":19,"slug":20,"type":14},{"name":5889,"slug":5890,"type":14},"Docker","docker",{"name":5892,"slug":5893,"type":14},"Engineering","engineering",{"name":5895,"slug":5896,"type":14},"Performance","performance",{"name":5898,"slug":5899,"type":14},"Security","security","2026-07-12T08:18:23.567237",{"slug":5902,"name":5902,"fn":5903,"description":5904,"org":5905,"tags":5906,"stars":24,"repoUrl":25,"updatedAt":5911},"generate-dockerfile","generate and optimize Dockerfiles","Generate or enhance a Dockerfile for a containerized application using curated base-image recommendations and security best practices. Use AFTER analyze-repo (or after the user has told you the language\u002Fframework). Triggers include \"generate a Dockerfile\", \"containerize this\", \"write Dockerfile for X\", or when running aks-loop and no Dockerfile yet exists. If a Dockerfile already exists, this skill enhances it in place.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5907,5908,5909,5910],{"name":11,"slug":8,"type":14},{"name":16,"slug":17,"type":14},{"name":5889,"slug":5890,"type":14},{"name":5898,"slug":5899,"type":14},"2026-07-19T05:40:02.706462",{"slug":4,"name":4,"fn":5,"description":6,"org":5913,"tags":5914,"stars":24,"repoUrl":25,"updatedAt":26},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5915,5916,5917,5918],{"name":11,"slug":8,"type":14},{"name":16,"slug":17,"type":14},{"name":19,"slug":20,"type":14},{"name":22,"slug":23,"type":14},{"items":5920,"total":6095},[5921,5940,5957,5976,5991,6006,6019,6034,6045,6057,6070,6083],{"slug":5922,"name":5922,"fn":5923,"description":5924,"org":5925,"tags":5926,"stars":5937,"repoUrl":5938,"updatedAt":5939},"azure-arg-external-evaluation-policy-author","author and test Azure Resource Graph policies","Use when the user wants to author, design, or test an Azure Policy that queries Azure Resource Graph (ARG) at request-time — i.e. a policy whose deny\u002Faudit decision depends on data from elsewhere in the subscription (sibling\u002Fparent resource state, RG-wide invariants, multi-hop relationships, etc.). Formally called Azure Policy External Evaluation; sometimes referred to colloquially as \"Invoke\". Drives an iterative KQL co-design loop against the user's real subscription via `az graph query`, then emits a policy definition, assignment, `.http` test flow, and an `EXPLANATION.md` companion. Read-only; never provisions anything.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5927,5928,5931,5934],{"name":11,"slug":8,"type":14},{"name":5929,"slug":5930,"type":14},"Compliance","compliance",{"name":5932,"slug":5933,"type":14},"Governance","governance",{"name":5935,"slug":5936,"type":14},"Policy","policy",1686,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-policy","2026-07-12T08:17:48.378432",{"slug":5941,"name":5941,"fn":5942,"description":5943,"org":5944,"tags":5945,"stars":5954,"repoUrl":5955,"updatedAt":5956},"azure-blueprints-migration","migrate Azure Blueprints to Template Specs","Use when a user needs to migrate off Azure Blueprints (definitions and\u002For assignments) to Template Specs and Deployment Stacks before the January 31, 2027 retirement. Covers inventory, export, conversion to Bicep, policy decoupling, Template Spec publishing, Deployment Stack deployment with deny-settings, validation, and cutover.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5946,5947,5948,5951],{"name":11,"slug":8,"type":14},{"name":19,"slug":20,"type":14},{"name":5949,"slug":5950,"type":14},"Infrastructure as Code","infrastructure-as-code",{"name":5952,"slug":5953,"type":14},"Migration","migration",260,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-blueprints","2026-07-12T08:17:49.646405",{"slug":5958,"name":5958,"fn":5959,"description":5960,"org":5961,"tags":5962,"stars":5973,"repoUrl":5974,"updatedAt":5975},"apiview-feedback-resolution","resolve APIView feedback on Azure SDKs","Analyze and resolve APIView review feedback on Azure SDK PRs. **UTILITY SKILL**. USE FOR: APIView comments, API review feedback, SDK API surface changes. DO NOT USE FOR: general code review, non-APIView feedback. INVOKES: azure-sdk-mcp:azsdk_apiview_get_comments, azure-sdk-mcp:azsdk_typespec_customized_code_update.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5963,5966,5967,5970],{"name":5964,"slug":5965,"type":14},"API Development","api-development",{"name":11,"slug":8,"type":14},{"name":5968,"slug":5969,"type":14},"Code Review","code-review",{"name":5971,"slug":5972,"type":14},"Documentation","documentation",133,"https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-tools","2026-07-12T08:17:43.350876",{"slug":5977,"name":5977,"fn":5978,"description":5979,"org":5980,"tags":5981,"stars":5973,"repoUrl":5974,"updatedAt":5990},"azsdk-common-live-and-recorded-tests","deploy resources and run Azure SDK tests","Deploy test resources and run Azure SDK tests in live, record, or playback mode. WHEN: \"run live tests\", \"run recorded tests\", \"deploy test resources\", \"record tests\", \"run tests in record mode\", \"clean up test resources\", \"run tests against live resources\". DO NOT USE FOR: writing new tests, authoring Bicep templates, playback-only test runs without resource deployment. INVOKES: azure-sdk-mcp:azsdk_package_run_tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5982,5983,5984,5987],{"name":11,"slug":8,"type":14},{"name":19,"slug":20,"type":14},{"name":5985,"slug":5986,"type":14},"SDK","sdk",{"name":5988,"slug":5989,"type":14},"Testing","testing","2026-07-12T08:17:44.718943",{"slug":5992,"name":5992,"fn":5993,"description":5994,"org":5995,"tags":5996,"stars":5973,"repoUrl":5974,"updatedAt":6005},"azsdk-common-prepare-release-plan","manage Azure SDK release plan work items","Create, get, update, abandon, and link SDK PRs to release plan work items for Azure SDK releases. **UTILITY SKILL**. USE FOR: \"create release plan\", \"get release plan\", \"update release plan\", \"update API spec in release plan\", \"update SDK details in release plan\", \"abandon release plan\", \"link SDK PR to plan\", \"namespace approval\", \"check release plan status\". DO NOT USE FOR: SDK code generation, pipeline troubleshooting, API review feedback. INVOKES: azure-sdk-mcp:azsdk_create_release_plan, azure-sdk-mcp:azsdk_get_release_plan, azure-sdk-mcp:azsdk_get_release_plan_for_spec_pr, azure-sdk-mcp:azsdk_update_release_plan, azure-sdk-mcp:azsdk_update_api_spec_pull_request_in_release_plan, azure-sdk-mcp:azsdk_update_sdk_details_in_release_plan, azure-sdk-mcp:azsdk_abandon_release_plan, azure-sdk-mcp:azsdk_link_sdk_pull_request_to_release_plan, azure-sdk-mcp:azsdk_link_namespace_approval_issue.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[5997,5998,6001,6004],{"name":11,"slug":8,"type":14},{"name":5999,"slug":6000,"type":14},"GitHub","github",{"name":6002,"slug":6003,"type":14},"Project Management","project-management",{"name":5985,"slug":5986,"type":14},"2026-07-12T08:17:38.345387",{"slug":6007,"name":6007,"fn":6008,"description":6009,"org":6010,"tags":6011,"stars":5973,"repoUrl":5974,"updatedAt":6018},"azsdk-common-sdk-release","release Azure SDK packages","Check release readiness and trigger the release pipeline for Azure SDK packages. **UTILITY SKILL**. USE FOR: \"release SDK\", \"trigger release\", \"check release readiness\", \"release pipeline\", \"publish package\", \"ship SDK\". DO NOT USE FOR: SDK development, code generation, pipeline debugging, release plan creation. INVOKES: azure-sdk-mcp:azsdk_release_sdk.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6012,6013,6016,6017],{"name":11,"slug":8,"type":14},{"name":6014,"slug":6015,"type":14},"CI\u002FCD","ci-cd",{"name":19,"slug":20,"type":14},{"name":5985,"slug":5986,"type":14},"2026-07-12T08:17:34.27607",{"slug":6020,"name":6020,"fn":6021,"description":6022,"org":6023,"tags":6024,"stars":5973,"repoUrl":5974,"updatedAt":6033},"azure-typespec-author","author and modify Azure TypeSpec API specifications","Authors and modifies Azure TypeSpec (.tsp) API specifications. USE FOR: any TypeSpec\u002Ftsp change — api versions (add, bump, preview, stable, promote), resources, operations, models, properties, decorators, visibility, constraints, breaking changes, LRO, suppressions, operationId, spread model. Covers ARM resource-manager and data-plane services. DO NOT USE FOR: SDK generation, releasing SDK packages, or single MCP tool calls. INVOKES: azure-sdk-mcp:azsdk_typespec_generate_authoring_plan, azure-sdk-mcp:azsdk_run_typespec_validation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6025,6026,6027,6030],{"name":5964,"slug":5965,"type":14},{"name":11,"slug":8,"type":14},{"name":6028,"slug":6029,"type":14},"OpenAPI","openapi",{"name":6031,"slug":6032,"type":14},"Technical Writing","technical-writing","2026-07-12T08:17:39.603232",{"slug":6035,"name":6035,"fn":6036,"description":6037,"org":6038,"tags":6039,"stars":5973,"repoUrl":5974,"updatedAt":6044},"generate-sdk-locally","generate and test Azure SDKs locally","Generate, build, and test Azure SDKs locally from TypeSpec with automatic customization. WHEN: \"generate SDK locally\", \"build SDK\", \"run SDK tests\", \"run CI checks\", \"validate package\", \"run checks\", \"update changelog\", \"fix SDK build errors\", \"fix breaking changes\", \"resolve SDK generation errors\", \"customize TypeSpec\", \"rename SDK client\", \"rename SDK model\", \"hide operation from SDK\", \"fix analyzer errors\", \"resolve customization drift\", \"create subclient\", \"update metadata\", \"update version\". DO NOT USE FOR: publishing to package registries, CI pipeline configuration, API design review. INVOKES: azsdk_verify_setup, azsdk_package_generate_code, azsdk_package_build_code, azsdk_package_run_check, azsdk_package_run_tests, azsdk_customized_code_update, azsdk_package_update_changelog_content, azsdk_package_update_metadata, azsdk_package_update_version.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6040,6041,6042,6043],{"name":11,"slug":8,"type":14},{"name":6014,"slug":6015,"type":14},{"name":5985,"slug":5986,"type":14},{"name":5988,"slug":5989,"type":14},"2026-07-12T08:17:37.08523",{"slug":6046,"name":6046,"fn":6047,"description":6048,"org":6049,"tags":6050,"stars":5973,"repoUrl":5974,"updatedAt":6056},"markdown-token-optimizer","optimize markdown files for token efficiency","Analyze markdown files for token efficiency and reduce context-window bloat. **UTILITY SKILL**. DO NOT USE FOR: code optimization, general file editing, non-markdown files. TRIGGERS: optimize markdown, reduce tokens, token count, token bloat, too many tokens, make concise, shrink file, file too large, optimize for AI, token efficiency, verbose markdown, reduce file size. INVOKES: waza CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6051,6054,6055],{"name":6052,"slug":6053,"type":14},"LLM","llm",{"name":5895,"slug":5896,"type":14},{"name":6031,"slug":6032,"type":14},"2026-07-12T08:17:42.080413",{"slug":6058,"name":6058,"fn":6059,"description":6060,"org":6061,"tags":6062,"stars":5973,"repoUrl":5974,"updatedAt":6069},"pipeline-troubleshooting","troubleshoot Azure SDK CI pipelines","Diagnose and resolve failures in Azure SDK CI and generation pipelines. **UTILITY SKILL**. USE FOR: \"pipeline failed\", \"build failure\", \"CI check failing\", \"SDK generation error\", \"reproduce pipeline locally\", \"debug SDK pipeline\". DO NOT USE FOR: local build issues without pipeline context, API design review, SDK publishing. INVOKES: azure-sdk-mcp:azsdk_analyze_pipeline, azure-sdk-mcp:azsdk_package_build_code, azure-sdk-mcp:azsdk_package_run_check.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6063,6064,6065,6068],{"name":11,"slug":8,"type":14},{"name":6014,"slug":6015,"type":14},{"name":6066,"slug":6067,"type":14},"Debugging","debugging",{"name":5985,"slug":5986,"type":14},"2026-07-12T08:17:40.821512",{"slug":6071,"name":6071,"fn":6072,"description":6073,"org":6074,"tags":6075,"stars":5973,"repoUrl":5974,"updatedAt":6082},"sensei","improve skill frontmatter compliance","**WORKFLOW SKILL** — Iteratively improve skill frontmatter compliance using the Ralph loop pattern. WHEN: \"run sensei\", \"sensei help\", \"improve skill\", \"fix frontmatter\", \"skill compliance\", \"frontmatter audit\", \"score skill\", \"check skill tokens\". INVOKES: token counting tools, test runners, git commands. FOR SINGLE OPERATIONS: use token CLI directly for counts\u002Fchecks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6076,6077,6078,6081],{"name":11,"slug":8,"type":14},{"name":5929,"slug":5930,"type":14},{"name":6079,"slug":6080,"type":14},"Process Optimization","process-optimization",{"name":6031,"slug":6032,"type":14},"2026-07-12T08:17:32.970921",{"slug":6084,"name":6084,"fn":6085,"description":6086,"org":6087,"tags":6088,"stars":5973,"repoUrl":5974,"updatedAt":6094},"skill-authoring","author agent skills for agentskills.io","Write Agent Skills that comply with the agentskills.io specification. WHEN: \"create a skill\", \"new skill\", \"write a skill\", \"skill template\", \"skill structure\", \"review skill\", \"skill PR\", \"skill compliance\", \"SKILL.md format\", \"skill frontmatter\", \"skill best practices\". DO NOT USE FOR: improving existing skills (use sensei), general documentation. INVOKES: waza CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[6089,6090,6093],{"name":5971,"slug":5972,"type":14},{"name":6091,"slug":6092,"type":14},"Plugin Development","plugin-development",{"name":6031,"slug":6032,"type":14},"2026-07-12T08:17:35.873862",109]