我正在调查YAML,必须承认,我有点挣扎。我有一个程序可以读取JSON配置文件(并且工作正常),但是我将其重构为与YAML配置文件一起使用,其中一个是我自己的教育,另外两个是对用户更人性化的配置文件。
简而言之,我想有两个键值对,例如
log-file: /var/log/file
api-key: /api/key
,仅定义一次。然后,我希望定义一个主机,并能够在我的配置文件中拥有多个主机。
这是主持人的一个例子。
fqdn: firewall.example.com.
project_id: fluffy-penguin-242411
managed_zone: example
domain: example.com
ttl: 60
interval: 600
这里有人可以帮助我定义一个可以在Python中轻松使用的YAML文件吗?
我已经设法将基本配置添加到我的代码中,但是没有一个与我想要的配置相匹配的配置。
最终,我希望能够有一个可以迭代的主机列表或字典。
干杯
C
更新
我想我可能会走上这样的路
api-key: './ddns-api-key.json'
log-path: './ddns.log'
hosts:
- fqdn: 'firewall.example.com.'
project_id: 'fluffy-penguin-242411'
managed_zone: 'example'
domain: 'example.com'
ttl: 60
interval: 600
答案 0 :(得分:2)
您不能完全做到这一点,但是可以通过在列表中使用命名的键/值对对象来完成类似的操作,例如:
api-key: './ddns-api-key.json'
log-path: './ddns.log'
hosts:
- host1:
fqdn: 'firewall.example.com.'
project_id: 'fluffy-penguin-242411'
managed_zone: 'example'
domain: 'example.com'
ttl: 60
interval: 600
- host2:
fqdn: 'stuff.example.org.'
project_id: 'fluffy-bear-213461'
managed_zone: 'example'
domain: 'example.org'
ttl: 70
interval: 700
您只需为每个列表条目使用一个唯一的名称-在此示例中,我使用了host1
,host2
等。
答案 1 :(得分:0)
我相信,在以上帖子中,在connectyourcharger的帮助下,我提出了以下建议:
api-key: './ddns-api-key.yaml'
logfile: './ddns.log'
hosts:
- host: 'firewall.example.com.'
project_id: 'fluffy-penguin-242411'
managed_zone: 'example'
domain: 'example.com'
ttl: 60
interval: 600
- host: 'www.example-two.com.'
project_id: 'fluffy-penguin-242411'
managed_zone: 'example-two'
domain: 'example-two.com'
ttl: 60
interval: 600
当我使用以下python访问此文件时,我可以遍历YAML主机并检索所有配置项。
import yaml
# Read YAML file
with open("configuration.yaml", 'r') as stream:
try:
yaml_data = yaml.safe_load(stream)
except yaml.YAMLError as exc:
print(exc)
print(yaml_data['api-key']) # prints ./ddns-api-key.yaml
for host in yaml_data['hosts']:
print(host['host']) # prints firewall.example.com and www.exmaple-two.com
print(host['ttl']) # prints 60 twice
print(host['domain']) # prints example.com and example-two.com
干杯, C