首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将ytt方法定义与模式分离

如何将ytt方法定义与模式分离
EN

Stack Overflow用户
提问于 2022-01-02 09:24:29
回答 1查看 121关注 0票数 1

我正在尝试将方法定义从模式中分离出来。这是一个松散的受官方如何.启发的案例。如果下面的代码出现在同一个文件中,它就能正常工作。但是,如果我以以下方式将方法定义拆分为一个单独的文件,则会导致错误。

svc.yaml

代码语言:javascript
复制
#@ 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

代码语言:javascript
复制
#@ 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 --这将产生

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2022-01-03 08:56:54

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

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

代码语言:javascript
复制
#@ load("labels.lib.yaml", "labels")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70554879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档