Понимание и последующее создание файла конфигурации YAML - PullRequest
0 голосов
/ 20 июня 2019

Я смотрю в 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

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Вы не можете сделать в точности , но вы можете сделать нечто подобное, используя именованный объект пары ключ / значение в списке, например:

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

You 'Я просто буду использовать уникальное имя для каждой записи списка - в этом примере я использовал host1, host2 и т. д.

0 голосов
/ 22 июня 2019

Полагаю, что работает следующее, с помощью 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

...