[英]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.