Как я могу добавить префикс в словарь Python, используемый для динамического инвентаризации Ansible? - PullRequest
0 голосов
/ 29 мая 2019

Я работаю над нестандартным сценарием Python для динамической инвентаризации.Я создал группы из пар k = v, но для определенных групп я хочу, чтобы ключ имел префикс к значениям, в противном случае названия групп не имеют смысла (1,2,3 и т. Д.)

Я пробовалнаклеивание ключевого имени в разных местах, но без должного понимания того, что я делаю.В приведенном ниже примере я пытаюсь получить группу «bucket», чтобы каждое значение выглядело как bucket_3 (тогда это будет имя группы Ansible).

result = {
  'all': {
    'hosts': [],
    'vars': {},
   },
  '_meta': {
    'hostvars': {}
   }
}
server = ''
for raw_line in output.split('\n'):
    line = raw_line.strip()
    if len(line) > 0 and not line.startswith(comment_char):
        if line.endswith(server_char):
            server = line[:-1]
            result['all']['hosts'].append(server)
            result['_meta']['hostvars'][server] = {}
        else:
            raw_key, raw_value = line.split('=', 1)
            key = raw_key.strip()
            value = raw_value.strip()
            result['_meta']['hostvars'][server][key] = value
            if key == 'ansible_groups':
                for group in value.split(","):
                    if group not in result.keys():
                        result[group] = {'hosts': [], 'vars': {}}
                    result[group]['hosts'].append(server)
            if key == 'bucket':
                for group in value:
                    if group not in result.keys():
                        result[group] = 'bucket_' + {'hosts': [], 'vars': {}}
                    result[group]['hosts'].append(server)

Я ожидаю получить такие группы, какbucket_1, bucket_2 и т. д. (у источника есть «bucket = 1», «bucket = 2» и т. д.).

Получение ошибки "'bucket_' + {'hosts': [], 'vars': {}} Ошибка типа: невозможно объединить объекты 'str' и 'dict' *

предоставлено, этоэто только моя последняя попытка, поэтому ошибки менялись, когда я пытаюсь найти правильный способ изменить имя группы.

1 Ответ

0 голосов
/ 29 мая 2019

неважно ... просто не думая.

if key == 'bucket': 
    for group in value: 
        group = 'bucket_' + group 
        if group not in result.keys():

все еще немного медленнее, чем хотелось бы, но это функционально

...