Ansible - neco jako sublist

Ansible - neco jako sublist
« kdy: 28. 01. 2020, 16:31:08 »
Ahoj,

resim tu takovou vec kolem vytvareni uzivatelu. Kdybych ty uzivatele mel definovane v host_vars/fqdn, tak je to brnkacka.  Ale nez na tu variantu prejdu (je dost komplikovana), tak hledam jinou cestu.

Predstava je treba takto definovana promenna:

Kód: [Vybrat]
users:
 - username: somename
   group: somegroup
   ssh_key: somekey
   ssh_groups:
    - server1
    - server2
    - servergroup1

Pouzivam:
Kód: [Vybrat]
- name: add ssh key
  authorized_user:
   user: "{{ item.username }}"
   state: present
   key: "{{ item.ssh_key }}"
  with_items:
   - "{{ users }}"
  when: inventory_hostname in "uzivatelovo ssh_groups"

Pro danou skupinu serveru vytvorim uzivatele. Tech skupin ci serveru, na kterych ten uzivatel je, je ale vice. Chtel bych nejak elegantne omezit, na ktere servery se i zaroven prida klic toho uzivatele. Jak rozumne na to? Nejaky priklad i s jinym typem promenne vcetne iterace?

Diky.


Re:Ansible - neco jako sublist
« Odpověď #1 kdy: 29. 01. 2020, 20:11:17 »
řešil jsem něco podobného, dá se napsat vlastní lookup plugin v pythonu

Re:Ansible - neco jako sublist
« Odpověď #2 kdy: 30. 01. 2020, 10:19:06 »
Citace
Tech skupin ci serveru, na kterych ten uzivatel je, je ale vice.
Skupinou myslis skupinu serveru - group v ansible inventari?

Pokud ne, resenim by mohlo byt:
Kód: [Vybrat]
- name: create user
  user:
    name: ...
    ssh_key_file: ...
  delegate_to: "{{ item }}"
  loop: "{{ users.ssh_groups }}"



[/code]

Re:Ansible - neco jako sublist
« Odpověď #3 kdy: 30. 01. 2020, 11:15:11 »
Uz jsem to vyresil.

Kód: [Vybrat]
users:
 - username: "neco"
   enabled: true
   ssh_key:
    - value: "nejaky"
      hosts:
       - "somehost"
      groups:
       - "somegroup"

Kód: [Vybrat]
- name: Add ssh key
  authorized_key:
   user: "{{ item.0.username }}"
   state: present
   key: "{{ item.1.value }}"
  loop: "{{ users|subelements('ssh_key') }}"
  when: (item.1.value is defined and item.1.enabled) and ((inventory_hostname in item.1.hosts) or (item.1.groups|intersect(group_names)))
[code]