我需要将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来做这件事?
发布于 2019-12-17 17:41:48
您必须重写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 library,或者简单地读入yaml并调用yaml_str.replace("${NAMESPACE}", namespace)
。
发布于 2019-12-18 01:56:30
如果您还没有pyyaml包,请安装它:pip install pyyaml
。
然后更新yaml文件中的名称空间和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)
https://stackoverflow.com/questions/59371130
复制相似问题