了解并创建 YAML 配置文件



我正在研究 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

你不能完全做到这一点,但你可以通过在列表中使用命名键/值对对象来做类似的事情,如下所示:

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

您只需为每个列表条目使用唯一的名称 - 我在此示例中使用了host1host2等。

我相信我想出的以下内容,并在上面帖子中的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

最新更新