2016-11-10 2 views
0

У меня есть Dict:Собирают Dict из другого Dict в анзибль

users_to_add: 
    - username: Harley Quinn 
     login: 90987264 
     group: mininform 
     group_desc: "Some random data for description" 
     personal_data: 
     - first_name: Harley 
      last_name: Quinn 
      mail: [email protected] 
      telnum: +7777777777 
      jobtitle: minister 
    - username: Vasya Pupkin 
     login: 77777777 
     group: mininform 
     group_desc: "Some random data for description" 
     personal_data: 
     - first_name: Vasya 
      last_name: Pupkin 
      mail: [email protected] 
      telnum: +7970000000 
      jobtitle: minister 

И у меня есть анзибль модуль, который работает только со списками:

- name: Create needed groups 
    ipa_group: 
     state: present 
     name: "{{ item.group }}" 
     description: "{{ item.group_desc }}" 
     ipa_host: "{{ global_host }}" 
     ipa_user: "{{ global_user }}" 
     ipa_pass: "{{ global_pass }}" 
     validate_certs: no 
     user: [] 
    with_items: 
     - "{{ users_to_add }}" 

Этот модуль хочет список пользователей в разделе «пользователь» аргумент, создание группы и добавление к ней пользователей. Я хочу сопоставить dict «users_to_add» следующим образом: (используя users_to_add dict) {group_name: ["user1", "user2"...]} и передать этот новый dict модулю. Как это сделать с ansible? Я знаю, что первый я должен использовать

set_fact: 
    new_dict: 
with_items: {{ users_to_add }} 

...

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

+0

это трудно понять, что вы хотите достичь здесь ... 'ipa_g Модуль roup' создает группы и назначает им пользователей. Но вы перебираете «users_to_add», а не группы. Измените свой вопрос именно тем, какие имена групп вы хотите создать, содержащие имена пользователей. –

+0

Я хочу итерации users_to_add dict и собирать все имена групп и логинов пользователей в новом dict, где: {group: [все пользователи, у которых есть эта группа], группа: ...} – Mizeraj

ответ

0

Попробуйте это:

- name: Create needed groups 
    ipa_group: 
     state: present 
     name: "{{ item }}" 
     description: "{{ users_to_add | selectattr('group','equalto',item) | map(attribute='group_desc') | list | first }}" 
     ipa_host: "{{ global_host }}" 
     ipa_user: "{{ global_user }}" 
     ipa_pass: "{{ global_pass }}" 
     validate_certs: no 
     user: "{{ users_to_add | selectattr('group','equalto',item) | map(attribute='username') | list }}" 
    with_items: "{{ users_to_add | map(attribute='group') | list | unique }}" 
+0

Большое вам спасибо - это работает по назначению) – Mizeraj

Смежные вопросы