Terraform创建OpenShift项目遇权限问题,如何改用ProjectRequests API?
用Terraform调用ProjectRequests API创建OpenShift项目的解决方案
先明确:oc new-project本质是向OpenShift的projectrequests.project.openshift.io API提交请求,而非直接创建Namespace或Project资源。你的权限允许操作ProjectRequests,但不允许直接创建Namespace/Project,所以直接在Terraform里调用这个API对象就行。
Terraform的kubernetes_manifest资源可以直接定义Kubernetes/OpenShift API对象,不需要依赖特定的Provider资源类型,刚好适配这个场景。
具体配置代码
resource "kubernetes_manifest" "atlas_project_request" { manifest = { apiVersion = "project.openshift.io/v1" kind = "ProjectRequest" metadata = { # 若要固定项目名称,将generateName替换为name = "atlas"即可,注意避免名称重复 generateName = "atlas-" } spec = { displayName = "Atlas Project" # 可选配置,项目的显示名称 description = "用于Atlas工作负载的项目" # 可选配置,项目描述 } } }
关键说明
- 必须指定
apiVersion为project.openshift.io/v1、kind为ProjectRequest,这和oc new-project调用的API完全对应 - 执行该配置时,Terraform会向OpenShift提交ProjectRequest,集群会自动创建对应的Project及关联的Namespace,同时应用默认RBAC规则,效果和
oc new-project完全一致 - 既然你能成功执行
oc new-project aa,该Terraform配置的权限要求和它完全匹配,可正常通过RBAC校验
可选:提前验证权限
你可以先用oc命令手动确认自身是否具备创建ProjectRequests的权限:
oc auth can-i create projectrequests.project.openshift.io
返回yes即可放心使用上述配置。
内容的提问来源于stack exchange,提问作者Brandon Kauffman
相关产品推荐
相关产品推荐

