
Ich bin ein absoluter Ansible- und Python-Anfänger. Ich habe eine Liste:
my_items:
- name: item1
unix_user: unixuser1
homedir: /home/unixuser2
- name: item2
unix_user: unixuser2
homedir: /home/unixuser2
Ich möchte für jedes meiner „my_items“ einen virtuellen Pureftpd-Benutzer erstellen.
Die Rolle erwartet eine Variable wie diese:
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
Ich weiß, wie man die UID/GUID abruft (mit getent). Ich schaffe es, jedem Element die neuen Schlüssel/Werte hinzuzufügen:
- 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 }}"
Aber natürlich wird die „globale“ my_items-Variable nicht aktualisiert.
Ich habe versucht, ein neues „Wörterbuch“ zu erstellen, aber ich kann so viele Konzepte gleichzeitig nicht verstehen.
Jede Hilfe wäre willkommen!
Antwort1
Ich habe es endlich geschafft, es zum Laufen zu bringen.
- 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 }}"
Dann kann ich mein brandneues Wörterbuch an meine Rolle senden:
- name: gcoop-libre.pure-ftpd
vars:
pureftpd_virtual_users: "{{ ftp_accounts }}"
Seien Sie vorsichtig, ich habe auf dem lokalen Host gearbeitet, aber die Unix-Benutzer werden (offensichtlich) nur auf dem Remote-Computer erstellt, daher war getent_passwd[item.unix_user] nicht definiert, was zu einer kryptischen Fehlermeldung führte (Konvertierung auf Unicode: Zeichenfolge oder Puffer erforderlich, Liste gefunden).