Ansible: complete nuevos campos en cada elemento de una lista

Ansible: complete nuevos campos en cada elemento de una lista

Soy un principiante total en Ansible y Python. Tengo una lista:

my_items:
- name: item1
  unix_user: unixuser1
  homedir: /home/unixuser2
- name: item2
  unix_user: unixuser2
  homedir: /home/unixuser2

Me gustaría crear un usuario virtual pureftpd para cada uno de "mis_elementos".

El rol espera una variable como esta:

my_items:
- name: item1
  unix_user: unixuser1
  homedir: /home/unixuser2
  uid: 1001
  guid: 1001
- name: item2
  unix_user: unixuser2
  homedir: /home/unixuser2
  uid: 1002
  guid: 1002

Sé cómo recuperar el uid/guid (usando getent). Puedo lograr agregar las nuevas claves/valores a cada elemento:

- name: "Populate UID and GID in my_items"
  set_fact:
    item: "{{ item | combine( { 'uid': getent_passwd[item.unix_user][1], 'gid': getent_passwd[item.unix_user][2] }) }}"
  with_items: "{{ my_items }}"

Pero, por supuesto, la variable "global" my_items no se actualiza.

Intenté crear un nuevo "diccionario" pero no logro entender tantos conceptos al mismo tiempo.

¡Cualquier ayuda sería apreciada!

Respuesta1

Finalmente logré hacerlo funcionar.

- name: "getent variables"
  getent:
    database: passwd
    
- name: Create Dictionary for FTP accounts
  set_fact:
    ftp_accounts: >
       {{ ftp_accounts | default([]) + [{
           'name': item.unix_user,
           'password': item.ftp_password,
           'homedir': item.path,
           'uid': getent_passwd[item.unix_user][1],
           'guid': getent_passwd[item.unix_user][2]
          } ] }}
  with_items:
    "{{ my_items }}"

Luego, puedo enviar mi nuevo dict a mi rol:

- name: gcoop-libre.pure-ftpd
  vars:
    pureftpd_virtual_users: "{{ ftp_accounts }}"

Tenga cuidado, estaba trabajando en localhost pero los usuarios de Unix (obviamente) se crean solo en el control remoto, por lo que getent_passwd[item.unix_user] no estaba definido, lo que generó un mensaje de error críptico (coaccionando a Unicode: necesita cadena o búfer, lista encontrada ).

información relacionada