如何从架构中分离ytt方法定义

  • 本文关键字:分离 ytt 方法 定义 ytt
  • 更新时间 :
  • 英文 :


我正试图从模式中分离一个方法定义。这是一个大致受官方指南启发的案例。如果以下代码存在于同一个文件中,则它运行良好。但是,如果按照以下方式将方法定义拆分为一个单独的文件,则会导致错误。

svc.yaml:

#@ load("@ytt:data", "data")
---
apiVersion: v1
kind: Service
metadata:
  labels: #@ labels(with_version=True)
  name: #@ data.values.promOperatorName
  namespace: #@ data.values.namespace
spec:
  clusterIP: None
  ports:
  - name: http
    port: 8080
    targetPort: http
  selector: #@ labels()

labels.yaml:

#@ load("@ytt:data", "data")
#@ def labels(with_version=False):
  app.kubernetes.io/component: controller
  app.kubernetes.io/name: prometheus-operator
  #@ if with_version:
  app.kubernetes.io/version: 0.53.1
  #@ end
#@ end

通过:ytt -f labels.yaml -f svc.yaml -f data.yaml应用,产生

ytt: Error: 
- undefined: labels
    svc.yaml:7 |   labels: #@ labels(with_version=True)
- undefined: labels
    svc.yaml:16 |   selector: #@ labels()

显然,在处理过程中没有拾取def labels()方法定义。

ytt版本0.38.0

携带方法定义的文件应该作为库加载。因此,应将其重命名为labels.lib.yaml(库必须使用.lib.yaml后缀(。

然后,应该将库和相应的方法加载到适当的模板文件中,在我们的svc.yaml中,通过:

#@ load("labels.lib.yaml", "labels")

相关内容

  • 没有找到相关文章

最新更新