
Ich verwende also eine Rolle, um meinen PostgreSQL-Server zu konfigurieren. Diese Rolle bietet eine Möglichkeit, Serverbenutzer und Datenbanken anzugeben, und zwar wie folgt:
postgresql_users:
- name: baz
Meine hosts.yaml:
all:
hosts:
children:
django:
hosts:
django_1:
username: django1
userpass: django1_pass
django_2:
username: django2
userpass: django2_pass
db:
hosts:
db1:
Und mein playbook.yaml:
- hosts: db
become: true
roles:
- role: anxs.postgresql
Mit diesen Informationen möchte ich alle Django-Hosts sowie deren Benutzernamen- und Benutzerpassvariablen abrufen.
Erstellen Sie dann aus diesen Informationen die Variable postgresql_users, als ob sie von Hand geschrieben worden wäre (relevant (erwünschtes Ergebnis) Abschnitt von hosts.yaml unten):
db:
hosts:
db1:
postgresql_users:
- name: django1
password: django1_pass
encrypted: true
- name: django2
password: django2_pass
encrypted: true
ich habe gefundendiese Fragebeschäftige mich mit meinem Problem, aber leider bin ich bei Ansible zu neu, um wirklich zu verstehen, was dort vorgeschlagen wird.
Wie kann ich also eine geeignete Iteration erstellen, die meine Variable „postgresql_users“ nach meinen Wünschen zusammensetzt?
Antwort1
Q:„Holen Sie sich alle Django-Hosts und deren Benutzernamen- und Benutzerpasswortvariablen.“
A: Es ist möglich, die Variable im ersten Spiel zu erstellen und sie später zu verwenden. Zum Beispiel
- hosts: all
tasks:
- set_fact:
psql_users: "{{ groups['django']|
map('extract', hostvars)|
list|
json_query('[].{name: username,
password: userpass,
encrypted: `true`}') }}"
delegate_to: localhost
run_once: true
- hosts: db
tasks:
- debug:
var: psql_users
gibt
ok: [db1] => {
"psql_users": [
{
"encrypted": true,
"name": "django1",
"password": "django1_pass"
},
{
"encrypted": true,
"name": "django2",
"password": "django2_pass"
}
]
}
Es ist auch möglich, template
eine Inventardatei zu verwenden und zu erstellen. Zum Beispiel mit der Vorlage
$ cat hosts.j2
db:
hosts:
db1:
postgresql_users:
{{ psql_users|to_nice_yaml|indent(8,true) }}
die Aufgabe
- template:
src: hosts.j2
dest: hosts2
erstellt Inventar
$ cat hosts2
db:
hosts:
db1:
postgresql_users:
- encrypted: true
name: django1
password: django1_pass
- encrypted: true
name: django2
password: django2_pass