使用一个yaml中的变量并在另一个yaml中替换

2024-06-06 04:00:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写自动化脚本,以使用一个yaml中的变量,并在另一个yaml中替换

要求: 我应该加载yaml1并创建变量,并将它们用作yaml2中的变量。我能够创建变量,但无法获取替换yaml2中获得的变量的逻辑。请帮忙

样品yaml1

变量yaml

environmentName: "dev1_westus2"
jumpbox: "dev1-westus2-jumpbox"
jumpboxDeploymentIndex: "0"
k8sClusterB:
  kubeConfig: "dev1"
  kubeContext: "admin"
namespace: "cp5"
nfsMountName: "nfsdev1westus2_cp5"
usego: "true"

示例值.yaml:

namespace: null
environmentName: null
protocol: https://
proxyErrorLog: /dev/stderr
adminAccessLog: /dev/stdout
adminErrorLog: /dev/stderr
serviceName: apiver
kubeConfig: null
kubeContext: null
replicas: 1
image:
  repository: ubuntu

通过从variables.yaml中获取上述变量,应替换values.yaml中的空值

例如:

它应该从variables.yaml中获取environmentname、namespace等,并仅将vaules.yaml中的值替换为null值

所需输出:

namespace: cp5
environmentName: dev1_westus2
protocol: https://
proxyErrorLog: /dev/stderr
adminAccessLog: /dev/stdout
adminErrorLog: /dev/stderr
serviceName: apiver
kubeConfig: dev1
kubeContext: admin
replicas: 1
image:
   repository: ubuntu

示例代码:

import yaml

with open('variable.yaml') as info:
    info_dict = yaml.safe_load(info)
    print (info_dict)
    for item, doc in info_dict.items():
        print(item, ":", doc)

多谢各位


Tags: devinfoyamldev1stderrnamespacenulldict
1条回答
网友
1楼 · 发布于 2024-06-06 04:00:10

这会让你走到那里的一段路。不过,我发现variable.yaml有一个问题——嵌套值(如kubeConfig)不太容易访问。程序如何知道如何查看k8sClusterB.kubeConfig来访问kubeConfig值

#!/usr/bin/env python3

import yaml

with open('variable.yaml') as info:
    info_dict = yaml.safe_load(info)

with open('values.yaml') as values_file:
    values_dict = yaml.safe_load(values_file)

for key, value in values_dict.items():
    if value == None:
        values_dict[key] = info_dict.get(key)

print(yaml.dump(values_dict))

相关问题 更多 >