如何调整Crossplane Provider资源生成的命名格式?
解决Upjet代码生成的资源命名拆分问题
用config.yaml强制指定资源命名
Upjet的代码生成逻辑靠资源配置文件控制命名规则,你得在对应Terraform资源的配置目录(一般是config/<你的资源组>/)里新建或修改config.yaml,通过name字段把资源名锁死成完整的loadbalancer:
比如针对provider_load_balancer,配置要这么写:
resources: - name: "loadbalancer" terraform_name: "provider_load_balancer" # 这里加上你原本需要的其他配置,比如schema路径之类的
这个name字段直接管控生成的CRD、目录结构还有deepcopy方法的命名,不会再把load_balancer拆成两个独立词组。
修复deepcopy方法的命名问题
如果改完上面的配置,deepcopy方法还是不对,就去config/根目录下的generator.yaml里检查命名策略:
generator: naming_strategy: kind: "exact" # 用这个策略会严格按照你指定的name生成,不会自动拆分词组
同时要确认资源配置里的kind字段设成LoadBalancer,这样生成的deepcopy方法就是DeepCopyLoadBalancer,不会只生成DeepCopyBalancer。
清缓存重新生成
改完配置别直接跑make generate,先清掉之前生成的旧文件:
make clean make generate
不然旧文件的残留会干扰新规则生效。
排查全局命名规则冲突
要是还不行,就看看config/naming.yaml里有没有全局的命名转换规则把单个资源的配置覆盖了。有的话,要么调整全局规则,要么给这个资源加个例外:
exceptions: - terraform_name: "provider_load_balancer" name: "loadbalancer"
内容的提问来源于stack exchange,提问作者mondragonfx
相关产品推荐
相关产品推荐

