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