【问题标题】:Understanding and then creating a YAML configuration file了解并创建 YAML 配置文件
【发布时间】:2023-03-04 13:06:03
【问题描述】:

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

【问题讨论】:

    标签: python yaml ruamel.yaml


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我相信我在上面帖子中的 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

      【讨论】:

        猜你喜欢
        • 2022-12-18
        • 2012-02-16
        • 2019-03-08
        • 2014-05-23
        • 1970-01-01
        • 1970-01-01
        • 2016-02-05
        • 2020-05-07
        相关资源
        最近更新 更多