了解并创建 YAML 配置文件

Understanding and then creating a YAML configuration file

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

这里有没有人可以帮我定义一个 YAML 文件,我可以在 Python 中轻松使用它?

我已经设法将基本配置纳入我的代码,但不是与我想做的相匹配的配置。

最终,我希望能够有一个我可以遍历的主机列表或字典。

干杯,

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

您不能完全那样做,但是您可以通过在列表中使用命名的 key/value 对对象来做类似的事情,如下所示:

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 等。

我相信我想出了以下方法,并借助上面 post 中的 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