У меня есть файл yaml, как показано ниже:
server1:
host: os1
ip: ##.###.#.##
path: /var/log/syslog
file: syslog
identityfile: /identityfile/keypair.pub
server2:
host: os2
ip: ##.###.#.##
path: /var/log/syslog
file: syslog.1
identityfile: /identityfile/id_rsa.pub
У меня есть фрагмент кода для анализа yaml и чтения записей.
чтение данных из файла конфигурации yaml
def read_yaml(file):
with open(file, "r") as stream:
try:
config = yaml.load(stream)
print(config)
except yaml.YAMLError as exc:
print(exc)
print("\n")
return config
read_yaml ("config_file") print (config)
Мои проблемы: 1. Я не могу вернуть значения и получаю "NameError: имя 'config' не определено "в операторе печати, вызываемом вне функции.
Как я могу перебирать и читать значения в моем файле yaml, передавая только параметры?Пример: print ('{host} @ {ip}: {path}'. Format (** config ['os1'])), но без 'os1', поскольку в файле yaml может быть 100s записей
Я гарантировал, что с помощью наборов нет дубликатов, но хочу использовать цикл и сохранить значения из моей команды форматирования строки в переменную без использования 'os1' или 'os2' или 'os #'.
def iterate_yaml():
remotesys = set()
for key,val in config.items():
print("{} = {}".format(key,val))
#check to ensure duplicates are removed by storing it in a set
remotesys.add('{host}@{ip}:{path}'.format(**config['os1']))
remotesys.add('{host}@{ip}:{path}'.format(**config['os2']))
remotesys.add('{host}@{ip}:{path}'.format(**config['os3']))
Спасибо за помощь.