You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Update stacklok/toolhive to v0.26.0
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Refresh reference assets for toolhive v0.26.0
* Document v0.26.0 user-facing additions
- Note that OAuth 2.0 upstream userInfo is now optional with synthesis mode
for upstreams without a userinfo endpoint
- Add an "Interactive dashboard" pointer to thv tui from the CLI manage guide
- Document operator.defaultImagePullSecrets for chart-level pull secrets
and its precedence with per-CR imagePullSecrets
Co-authored-by: claude[bot] <noreply@anthropic.com>
* Edit v0.26.0 doc additions for clarity
- Tighten the thv tui tip and drop the trailing complement-to-CLI line
- Move the tk- prefix next to the synthesized subject and replace "shape"
with "configuration" in the userInfo synthesis-mode note
- Lift the per-CR imagePullSecrets parenthetical into a list and remove
redundant phrasing in the operator pull-secret section
Co-authored-by: claude[bot] <noreply@anthropic.com>
---------
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: claude[bot] <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: static/api-specs/crds/mcpexternalauthconfigs.schema.json
+6-3Lines changed: 6 additions & 3 deletions
Original file line number
Diff line number
Diff line change
@@ -86,6 +86,10 @@
86
86
"default": "sub",
87
87
"description": "SessionNameClaim is the JWT claim to use for role session name\nDefaults to \"sub\" to use the subject claim",
88
88
"type": "string"
89
+
},
90
+
"subjectProviderName": {
91
+
"description": "SubjectProviderName is the name of the upstream provider whose access token\nis used as the web identity token for STS AssumeRoleWithWebIdentity.\nThis field is used exclusively by VirtualMCPServer, where there is no\nupstream swap middleware to replace the bearer token before the strategy runs.\nWhen left empty and an embedded authorization server is configured on the\nVirtualMCPServer, the controller automatically populates this field with\nthe first configured upstream provider name. Set it explicitly to override\nthat default or to select a specific provider when multiple upstreams are\nconfigured.\nWhen no embedded auth server is present, the bearer token from the incoming\nrequest's Authorization header is used instead.",
92
+
"type": "string"
89
93
}
90
94
},
91
95
"required": [
@@ -490,7 +494,7 @@
490
494
"type": "object"
491
495
},
492
496
"userInfo": {
493
-
"description": "UserInfo contains configuration for fetching user information from the upstream provider.\nRequired for OAuth2 providers to resolve user identity.",
497
+
"description": "UserInfo contains configuration for fetching user information from the upstream provider.\nWhen omitted, the embedded auth server runs in synthesis mode for this\nupstream: a non-PII subject derived from the access token, no Name/Email.\nUse this shape for upstreams with no userinfo surface (e.g., MCP\nauthorization servers per the MCP spec).",
Copy file name to clipboardExpand all lines: static/api-specs/crds/mcpregistries.schema.json
+17Lines changed: 17 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -24,6 +24,23 @@
24
24
"description": "DisplayName is a human-readable name for the registry.",
25
25
"type": "string"
26
26
},
27
+
"imagePullSecrets": {
28
+
"description": "ImagePullSecrets allows specifying image pull secrets for the registry API workload.\nThese are applied to both the registry-api Deployment's PodSpec.ImagePullSecrets\nand to the operator-managed ServiceAccount the registry API runs as, so private\nimages are pullable through either path.\n\nUse this field for new manifests.\n\nImportant: this is the ONLY way to attach image-pull credentials to the\noperator-managed ServiceAccount. The legacy\nspec.podTemplateSpec.spec.imagePullSecrets path populates the Deployment's pod\nspec ONLY — it does NOT touch the ServiceAccount. On managed Kubernetes\nplatforms that rely on ServiceAccount-level credential injection (for example\nGKE Workload Identity, OpenShift's per-SA dockercfg secrets, EKS IRSA), using\nonly the legacy PodTemplateSpec path can fail to pull private images even when\nthe secret exists in the namespace. Always set spec.imagePullSecrets when\nSA-level credentials matter.\n\nPrecedence with PodTemplateSpec:\n - This field is applied first as the controller-generated default.\n - Values set under spec.podTemplateSpec.spec.imagePullSecrets are user overrides\n and win on overlap. If the user supplies imagePullSecrets via PodTemplateSpec,\n those replace the default list on the Deployment (the list is treated atomically).\n - The ServiceAccount is always populated from this field — PodTemplateSpec does not\n affect the ServiceAccount.\n\nAn omitted field and an explicitly empty list are equivalent: both leave the\nServiceAccount's existing ImagePullSecrets unchanged. This preserves\nplatform-managed pull secrets (for example OpenShift's per-SA dockercfg\nentries) when overlays or patches emit an empty list. Truly clearing the\nServiceAccount's pull secrets requires recreating the resource.",
29
+
"items": {
30
+
"description": "LocalObjectReference contains enough information to let you locate the\nreferenced object inside the same namespace.",
31
+
"properties": {
32
+
"name": {
33
+
"default": "",
34
+
"description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
35
+
"type": "string"
36
+
}
37
+
},
38
+
"type": "object",
39
+
"x-kubernetes-map-type": "atomic"
40
+
},
41
+
"type": "array",
42
+
"x-kubernetes-list-type": "atomic"
43
+
},
27
44
"pgpassSecretRef": {
28
45
"description": "PGPassSecretRef references a Secret containing a pre-created pgpass file.\n\nWhy this is a dedicated field instead of a regular volume/volumeMount:\nPostgreSQL's libpq rejects pgpass files that aren't mode 0600. Kubernetes\nsecret volumes mount files as root-owned, and the registry-api container\nruns as non-root (UID 65532). A root-owned 0600 file is unreadable by\nUID 65532, and using fsGroup changes permissions to 0640 which libpq also\nrejects. The only solution is an init container that copies the file to an\nemptyDir as the app user and runs chmod 0600. This cannot be expressed\nthrough volumes/volumeMounts alone -- it requires an init container, two\nextra volumes (secret + emptyDir), a subPath mount, and an environment\nvariable, all wired together correctly.\n\nWhen specified, the operator generates all of that plumbing invisibly.\nThe user creates the Secret with pgpass-formatted content; the operator\nhandles only the Kubernetes permission mechanics.\n\nExample Secret:\n\n\tapiVersion: v1\n\tkind: Secret\n\tmetadata:\n\t name: my-pgpass\n\tstringData:\n\t .pgpass: |\n\t postgres:5432:registry:db_app:mypassword\n\t postgres:5432:registry:db_migrator:otherpassword\n\nThen reference it:\n\n\tpgpassSecretRef:\n\t name: my-pgpass\n\t key: .pgpass",
0 commit comments