我正在尝试将方法定义从模式中分离出来。这是一个松散的受官方如何.启发的案例。如果下面的代码出现在同一个文件中,它就能正常工作。但是,如果我以以下方式将方法定义拆分为一个单独的文件,则会导致错误。
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应用via: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
发布于 2022-01-03 08:56:54
携带方法定义的文件应作为库加载。因此,应该将其重命名为labels.lib.yaml (库必须使用.lib.yaml后缀)。
之后,应该通过以下方法将库和相应的方法加载到适当的模板文件中,在我们的svc.yaml中是这样的:
#@ load("labels.lib.yaml", "labels")https://stackoverflow.com/questions/70554879
复制相似问题