Ich versuche, ein Wörterbuch durch eine ansible Vorlage Schleife jinja2 unter Verwendung einer Anzahl von Datenquellen zu erstellen, aber diesen Fehler [{'msg': "AnsibleUndefinedVariable: One or more undefined variables: 'dict object' has no attribute 'value'", 'failed': True}]}
Loop-Wörterbuch in ansible Vorlage
erhalten, wenn eine Debug-Task ausgeführt es die richtigen Werte tut wieder so Ich habe das Gefühl, dass mein Problem in der Vorlage selbst liegt, aber ich konnte nicht herausfinden, was ich falsch mache.
ansible Aufgabe
- name: debug dictionary
debug: msg="{{ item.value.db_url }}"
with_dict: databases
- name: copy tomcat config files
template: src="{{ item.src }}" dest="{{ item.dest }}"
with_items:
- { src: 'context.xml.j2', dest: '/opt/tomcat/conf/context.xml'}
notify: restart tomcat
with_dict: databases
ansible Wörterbuch
databases:
db1:
db_resource: jdbc/db1
db_maxidle: 50
db_maxconn: 350
db_maxwait: 10000
db_user: dbuser
db_pass: "{{ dbpass }}"
db_url: jdbc:postgresql://server:5432/dbname
db_driver: org.postgresql.Driver
Jinja2 Vorlage
{% for items in databases %}
<resource name="{{ item.value.db_resource }}" auth="container" type="javax.sql.datasource" maxtotal="{{ item.value.db_maxconn }}" maxidle="{{ item.value.db_maxidle }}" maxwaitmillis="{{ item.value.db_maxwait }}" username="{{ item.value.db_user }}" password="{{ item.value.db_pass }}" driverclassname="{{ item.value.db_driver }}" url="{{ item.value.db_url }}" />
{% endfor %}
Debug Output
ok: [IP] => (item={'key': 'db1', 'value': {'db_maxwait': 10000, 'db_maxconn': 350, 'db_maxidle': 50, 'db_driver': 'org.postgresql.Driver', 'db_pass': u'REDACTED', 'db_resource': 'jdbc/db1', 'db_user': 'dbuser', 'db_url': 'jdbc:postgresql://server:5432/dbname'}}) => {
"item": {
"key": "db1",
"value": {
"db_driver": "org.postgresql.Driver",
"db_maxconn": 350,
"db_maxidle": 50,
"db_maxwait": 10000,
"db_pass": "REDACTED",
"db_resource": "jdbc/db1",
"db_url": "jdbc:postgresql://server:5432/db",
"db_user": "dbuser"
}
},
"msg": "jdbc:postgresql://server:5432/dbname"
}
Warum benutzt Ihre zweite Aufgabe sowohl 'with_items' als auch' with_dict', vor allem, wenn letzteres nicht verwendet wird? Ich wäre sehr überrascht, wenn das tatsächlich funktioniert hätte. – jwodder
Hmm ursprünglich hatte ich mehrere Dateien in dieser Aufgabe mit den with_items. Ich habe es entfernt, aber immer noch in demselben Problem. Es macht Sinn, sie zu trennen, danke. – tweeks200