crossplane-contrib/provider-keycloak/provider-keycloak
Claude Code and agent skill by crossplane-contrib/provider-keycloak
- community
Checking that the SKILL.md file is still in the repository.
Build, test, and extend provider-keycloak — a Crossplane provider that manages Keycloak (IAM/SSO) resources as Kubernetes custom resources.
Install
npx vskill@latest install crossplane-contrib/provider-keycloak/provider-keycloakSKILL.md
provider-keycloak Skill
provider-keycloak is a Crossplane provider generated with Upjet from the Keycloak Terraform Provider. It reconciles Kubernetes CRDs against a live Keycloak instance.
Quick Reference
Build and Test
Key Files
| File | Purpose | |
|---|---|---|
config/external_name.go | Maps Terraform resource names to Keycloak-side identifiers | |
config/<group>/config.go | Cross-resource references, import config, custom behaviors | |
generate/main.go | Entry point for Upjet code generation | |
cluster/test/cases.txt | Resources covered by E2E tests | |
docs/scripts/gen-llms.sh | Generates llms.txt and llms-full.txt |
Conventions
- Never edit files in
apis/orpackage/crds/by hand — they are generated outputs. - Never edit
examples-generated/by hand. - Always run
make generateafter changingconfig/. - Do not add
+nullablemarkers to generated types (Upjet does not support them). - Do not let both a
Membershipsresource and aGroupsresource withexhaustive=true
manage the same group's membership simultaneously — they will conflict.
github.com/keycloak/terraform-provider-keycloakmust not be updated via Renovate;
it requires deliberate schema migration.
Adding a New Resource
- Add entry to
config/external_name.go(config.IdentifierFromProvider
for a plain provider-assigned ID, or a <group>.<Resource>IdentifierFromIdentifyingProperties helper when the ID must be derived from other fields).
- Create/update
config/<group>/config.gowith references and optional
lookup config. If an attribute can reference more than one resource type, use config/multitypes (see "Multi-Type References" below).
- Run
make generate. - Add example to
examples/<group>/<resource>.yaml. - Optionally add docs page to
docs/content/docs/using/resources/<resource>.md. - Optionally add the resource to
cluster/test/cases.txtplus an e2e
manifest under cluster/test/ or dev/demos/.
See "Adding a New Resource" in AGENTS.md for the full playbook (external name selection, references, import-by-properties, testing).
Automated Schema Diff Issues
.github/workflows/schema-diff-issues.yml runs scripts/schema_diff_issues.py to diff config/schema.json against config/generated.lst and file one GitHub issue per missing resource that isn't already tracked. It dry-runs only on pull requests that change the automation itself (script or workflow file), and creates real issues on schedule, on Makefile changes on main, and on manual dispatch.
config/generated.lst is generated from config.ExternalNameConfigs by make generated-lst (part of make generate); never edit it by hand. make generated-lst-check gates its freshness in CI.
Cross-Resource References
Multi-Type References
r.References only supports one TerraformName. When a Terraform attribute may hold the ID of several different resource types, use config/multitypes to generate one strongly-typed field per type; the values are consolidated back into the original Terraform field at runtime. Never expose such an attribute as a raw ID field.
Options.KeepOriginalField: trueis required exactly when oneInstance
reuses the original field name (backward compatibility); otherwise the original field becomes computed-only and its required-parameter CEL rule is no longer emitted.
- An
Instancereusing the original field name may omit itsReferenceto
keep that field settable for raw, untyped IDs (no Ref/Selector generated).
- Every referenced
TerraformNamemust exist inconfig/external_name.go, or
make generate panics.
- Examples:
config/role/config.go,config/mapper/config.go,
config/authentication/config.go, config/openidclient/config.go.
Import / Identify by Properties
To avoid 409 errors on create when a resource already exists in Keycloak, wire the resource to lookup.BuildIdentifyingPropertiesLookup (see config/openidclient/config.go for a full example).
Documentation
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingSKILL.md
Popularity
- Repository stars
- 71
- Repository forks
- 39
- 7-day trend score
- 21
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/crossplane-contrib/provider-keycloak/provider-keycloak)