簡體   English   中英

如何將某些文本文件(python)中的值傳遞給 YAML 文件

[英]How to pass values in some text file (python) to a YAML file

我需要將python文件中的值傳遞給yaml文件。

這是我的constants.py

NAMESPACE = "bitesize-troubleshooter"
DEPLOYMENT_NAME = "deployment-test"

這是我的yaml文件

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 中做到這一點?

您將不得不重寫 yaml,將其視為模板。 模板替換有很多方法。 例如,與此:

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,或者簡單地讀入 yaml,然后調用yaml_str.replace("${NAMESPACE}", namespace)

如果您還沒有安裝 pyyaml 包,請pip install pyyaml它: pip install pyyaml

然后更新 yaml 文件中的 NAMESPACE 和 DEPLOYMENT_NAME 參數,如下所示:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM