helm --set-file ではなく UI から SSH 秘密鍵 + known_hosts / HTTPS トークンを登録可能に。
- git.guiIdentities.enabled(既定 true)。UI に「認証情報」カード(一覧/追加/削除)
- GET/POST/DELETE /api/identities。登録分はセッション NS の Secret
(ラベル identity-source=gui / identity-type)として保存。Helm 管理分と同一覧に統合
- manager.py: resolve_identity / list_identities / create_gui_identity / delete_gui_identity。
build_pod と create_session は Helm 管理 + GUI 登録の両方を解決。
/api/config の identities を {name,type,source} 配列に変更
- rbac.yaml: guiIdentities.enabled 時のみ manager Role に同 NS secrets の CRUD を付与
- 秘密鍵はリクエストボディで manager へ届くため README に経路 TLS 必須を明記
- helm lint / template 検証済み
296 lines
9.7 KiB
JSON
296 lines
9.7 KiB
JSON
{
|
|
"title": "claude-code Helm chart values",
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"properties": {
|
|
"nameOverride": { "type": "string" },
|
|
"fullnameOverride": { "type": "string" },
|
|
|
|
"image": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["gateway", "manager", "session"],
|
|
"properties": {
|
|
"gateway": { "$ref": "#/definitions/image" },
|
|
"manager": { "$ref": "#/definitions/image" },
|
|
"session": { "$ref": "#/definitions/image" }
|
|
}
|
|
},
|
|
"imagePullSecrets": {
|
|
"type": "array",
|
|
"items": { "type": "object", "required": ["name"], "properties": { "name": { "type": "string" } } }
|
|
},
|
|
|
|
"gateway": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"replicaCount": { "type": "integer", "minimum": 1 },
|
|
"port": { "type": "integer", "minimum": 1, "maximum": 65535 },
|
|
"resources": { "type": "object" }
|
|
}
|
|
},
|
|
|
|
"manager": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"logLevel": { "type": "string", "enum": ["debug", "info", "warning", "error"] },
|
|
"resources": { "type": "object" }
|
|
}
|
|
},
|
|
|
|
"sessionsNamespace": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"name": { "type": "string" },
|
|
"create": { "type": "boolean" },
|
|
"podSecurityLevel": { "type": "string", "enum": ["privileged", "baseline", "restricted"] },
|
|
"resourceQuota": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"hard": { "type": "object" }
|
|
}
|
|
},
|
|
"limitRange": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"max": { "type": "object" },
|
|
"default": { "type": "object" },
|
|
"defaultRequest": { "type": "object" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
"auth": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["mode"],
|
|
"properties": {
|
|
"mode": { "type": "string", "enum": ["token", "basic", "forward", "none"] },
|
|
"token": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"value": { "type": "string" },
|
|
"existingSecret": { "type": "string" },
|
|
"existingSecretKey": { "type": "string" }
|
|
}
|
|
},
|
|
"basic": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"users": { "type": "array", "items": { "type": "string" } },
|
|
"existingSecret": { "type": "string" },
|
|
"existingSecretKey": { "type": "string" }
|
|
}
|
|
},
|
|
"forward": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"url": { "type": "string" },
|
|
"signInUrl": { "type": "string" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
"anthropic": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["authMode"],
|
|
"properties": {
|
|
"authMode": { "type": "string", "enum": ["apiKey", "oauth", "credentials"] },
|
|
"apiKey": { "type": "string" },
|
|
"oauthToken": { "type": "string" },
|
|
"credentialsJson": { "type": "string" },
|
|
"existingSecret": { "type": "string" },
|
|
"existingSecretKeyApiKey": { "type": "string" },
|
|
"existingSecretKeyOauthToken": { "type": "string" },
|
|
"existingSecretKeyCredentials": { "type": "string" },
|
|
"extraEnv": { "type": "object" },
|
|
"refresher": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"schedule": { "type": "string" },
|
|
"refreshIfExpiresInSeconds": { "type": "integer", "minimum": 60 },
|
|
"tokenUrl": { "type": "string" },
|
|
"clientId": { "type": "string" },
|
|
"resources": { "type": "object" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
"git": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["allowedHosts"],
|
|
"properties": {
|
|
"allowedHosts": { "type": "array", "items": { "type": "string" } },
|
|
"allowArbitraryRepos": { "type": "boolean" },
|
|
"defaultAuthorName": { "type": "string" },
|
|
"defaultAuthorEmail": { "type": "string" },
|
|
"guiIdentities": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": { "enabled": { "type": "boolean" } }
|
|
},
|
|
"identities": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["type"],
|
|
"properties": {
|
|
"type": { "type": "string", "enum": ["ssh", "https-token"] },
|
|
"sshPrivateKey": { "type": "string" },
|
|
"knownHosts": { "type": "string" },
|
|
"username": { "type": "string" },
|
|
"token": { "type": "string" },
|
|
"existingSecret": { "type": "string" },
|
|
"existingSecretKeyPrivateKey": { "type": "string" },
|
|
"existingSecretKeyKnownHosts": { "type": "string" },
|
|
"existingSecretKeyToken": { "type": "string" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
"session": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"autoStartClaude": { "type": "boolean" },
|
|
"workspaceDir": { "type": "string" },
|
|
"ttydPort": { "type": "integer", "minimum": 1, "maximum": 65535 },
|
|
"extraApkPackages": { "type": "array", "items": { "type": "string" } },
|
|
"claudeCodeVersion": { "type": "string" },
|
|
"resources": { "type": "object" },
|
|
"idleTimeoutSeconds": { "type": "integer", "minimum": 60 },
|
|
"maxLifetimeSeconds": { "type": "integer", "minimum": 300 },
|
|
"reaper": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"intervalSeconds": { "type": "integer", "minimum": 10 },
|
|
"terminatedRetentionSeconds": { "type": "integer", "minimum": 0 },
|
|
"cronjob": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"schedule": { "type": "string" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"maxSessions": { "type": "integer", "minimum": 1 },
|
|
"verifyCommand": { "type": "string" },
|
|
"autoPush": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"branchPrefix": { "type": "string" },
|
|
"protectedBranches": { "type": "array", "items": { "type": "string" } }
|
|
}
|
|
},
|
|
"podLabels": { "type": "object" },
|
|
"podAnnotations": { "type": "object" },
|
|
"nodeSelector": { "type": "object" },
|
|
"tolerations": { "type": "array" },
|
|
"priorityClassName": { "type": "string" }
|
|
}
|
|
},
|
|
|
|
"networkPolicy": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"dnsNamespaceSelector": { "type": "object" },
|
|
"allowInternetHttps": { "type": "boolean" },
|
|
"allowSshGit": { "type": "boolean" },
|
|
"blockedEgressCIDRs": { "type": "array", "items": { "type": "string" } },
|
|
"sessionEgressExtra": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["cidr", "ports"],
|
|
"properties": {
|
|
"cidr": { "type": "string" },
|
|
"ports": { "type": "array" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
"ingress": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"className": { "type": "string" },
|
|
"annotations": { "type": "object" },
|
|
"hosts": { "type": "array" },
|
|
"tls": { "type": "array" }
|
|
}
|
|
},
|
|
|
|
"service": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"type": { "type": "string", "enum": ["ClusterIP", "NodePort", "LoadBalancer"] },
|
|
"port": { "type": "integer", "minimum": 1, "maximum": 65535 },
|
|
"nodePort": { "type": ["integer", "null"], "minimum": 1, "maximum": 65535 },
|
|
"annotations": { "type": "object" },
|
|
"loadBalancerIP": { "type": "string" },
|
|
"loadBalancerClass": { "type": "string" },
|
|
"loadBalancerSourceRanges": { "type": "array", "items": { "type": "string" } },
|
|
"externalTrafficPolicy": { "type": "string", "enum": ["", "Cluster", "Local"] },
|
|
"labels": { "type": "object" }
|
|
}
|
|
},
|
|
|
|
"podSecurityContext": { "type": "object" },
|
|
"containerSecurityContext": { "type": "object" },
|
|
"commonLabels": { "type": "object" },
|
|
"commonAnnotations": { "type": "object" },
|
|
"podDisruptionBudget": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"minAvailable": { "type": ["integer", "string"] }
|
|
}
|
|
}
|
|
},
|
|
"definitions": {
|
|
"image": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["registry", "repository", "tag"],
|
|
"properties": {
|
|
"registry": { "type": "string" },
|
|
"repository": { "type": "string" },
|
|
"tag": { "type": "string" },
|
|
"pullPolicy": { "type": "string", "enum": ["Always", "IfNotPresent", "Never"] }
|
|
}
|
|
}
|
|
}
|
|
}
|