首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将某些文本文件(python)中的值传递给YAML文件

如何将某些文本文件(python)中的值传递给YAML文件
EN

Stack Overflow用户
提问于 2019-12-17 17:25:57
回答 2查看 334关注 0票数 0

我需要将python文件中的值传递给yaml文件。

这是我的constants.py

代码语言:javascript
复制
NAMESPACE = "bitesize-troubleshooter"
DEPLOYMENT_NAME = "deployment-test"

这是我的yaml文件

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: deployment-test-ingress
  namespace: //here I want to pass the NAMESPACE value
  annotations:
    ingress.kubernetes.io/rewrite-target: / 
    nginx.org/ssl-services: deployment-test-clusterip
spec:
  rules:
  - host: # empty in this case, but you could fill in the host here (we use the minikube IP instead)
    http:
      paths:
      - path: /
        backend:
          serviceName: deployment-test-clusterip
          servicePort: 80

yaml中的位置,它告诉namespace应该在python文件中使用NAMESPACE常量赋值。

有没有办法用yaml来做这件事?

EN

回答 2

Stack Overflow用户

发布于 2019-12-17 17:41:48

您必须重写yaml,将其视为模板。有许多模板替换的方法。例如,使用以下命令:

代码语言:javascript
复制
kind: Ingress
metadata:
  name: deployment-test-ingress
  namespace: ${NAMESPACE} 
...

Also, I see you're working with Kubernetes yaml. Take a look at Helm, which adds this sort of configurability.

Python可以通过启动外部进程来调用envsubst,或者使用这个Pypi library,或者简单地读入yaml并调用yaml_str.replace("${NAMESPACE}", namespace)

票数 0
EN

Stack Overflow用户

发布于 2019-12-18 01:56:30

如果您还没有pyyaml包,请安装它:pip install pyyaml

然后更新yaml文件中的名称空间和DEPLOYMENT_NAME参数,如下所示:

代码语言:javascript
复制
import yaml

NAMESPACE, DEPLOYMENT_NAME = "bitesize-troubleshooter", "deployment-test"
yaml_file, params = "your.yaml", None

with open(yaml_file) as f:
    params = yaml.safe_load(f)

params['metadata']['namespace'] = NAMESPACE
params['metadata']['name']      = DEPLOYMENT_NAME

with open(yaml_file, 'w') as f:
    yaml.safe_dump(params, f)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59371130

复制
相关文章

相似问题

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