【发布时间】:2021-05-20 05:00:47
【问题描述】:
我有一个template.yml,内容如下:
hostname:
image: my_image:latest
script:
- ansible -m command -a "echo Hi" hostname
使用python,我需要读取一个.txt文件,内容如下:
server1.example.com
server2.example.com
server3.example.com
...
并使用一些循环并替换上面template.yml 中两个位置的主机名变量。所有配置都需要在一个 output.yml 文件中。
我一直在尝试使用 python yaml 库及其 yaml.update 和 yaml.dump 功能,但无法将所有生成的配置存储在同一个输出文件中。对此的任何帮助表示赞赏。
更新:
我已经添加了我在下面尝试过的代码:
import yaml
def generate_yml(host):
with open('template.yml') as f:
config = yaml.safe_load(f)
config['hostname']['script'] = "ansible -m command -a 'echo Hi' " + host
return config
with open('output.yml', 'w') as f:
yaml.dump(config, f, default_flow_style=False)
hostfile = open("test.txt", "r")
for host in hostfile:
host = host.rstrip("\n")
generate_yml(host)
myfile.close()
对于yaml_update,我试过了:
with open('output.yml','r') as f:
config = yaml.load(yamlfile)
config['hostname']['script'] = "ansible -m command -a 'echo Hi' " + host
config['hostname'].update(config)
with open('output.yml', 'w') as yamlfile:
yaml.dump(config, yamlfile, default_flow_style=False)
这两种方法都只为.txt文件中的最后一个条目编写配置,并且不考虑template.yml中的第一个主机名变量。
【问题讨论】:
-
提供示例输入文件和示例输出文件以及您尝试过但不起作用的代码会很有帮助
-
@KrishnaChaurasia 添加了详细信息。
-
@KrishnaChaurasia 我正在寻找这样的东西:pastebin.com/e6JLwVMN