
Ich versuche, Dateien aus verschiedenen Schlüsseln in einem Array zu erstellen, basierend darauf, ob ein Schlüssel im Array festgelegt ist oder nicht:
##################################################
#main site, same ftp user
- name: copy deploy keys private
template: src=deploy_key dest=/root/.ssh/id_rsa-{{item.user}} owner=root group=root mode=0600
with_items:
- "{{joomla_websites + joomla_tls_websites + wordpress_websites + wordpress_h2_websites + phpbb_sites + symfony_websites + phpbb_sites}}"
ignore_errors: true
when: item.ftp_user is not defined
tags:
- sshd
- newsite
#staging site, different ftp user, use same key
- name: copy deploy keys private
template: src=deploy_key dest=/root/.ssh/id_rsa-{{item.ftp_user}} owner=root group=root mode=0600
with_items:
- "{{joomla_websites + joomla_tls_websites + wordpress_websites + wordpress_h2_websites + phpbb_sites + symfony_websites + phpbb_sites}}"
ignore_errors: true
when: item.ftp_user is defined
tags:
- sshd
- newsite
##################################################
Ich erhalte jedoch eine Fehlermeldung
fatal: [1.2.3.4]: FAILED! => {"failed": true, "msg": "The conditional check 'item.ftp_user is not defined' failed. The error was: error while evaluating conditional (item.ftp_user is not defined): 'item' is undefined\n\nThe error appears to have been in '/home/jochen/projects/automatem/ansible/roles/accounts/tasks/main.yml': line 14, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: copy deploy keys private, main site\n ^ here\n"}
Basierend auf den Protokollmeldungen des Playbooks übergibt Ansible das gesamte Array an „when“. Ich möchte jedes Element durchlaufen und etwas tun, wenn eine Bedingung erfüllt ist.
Wie kann ich das erreichen?
Antwort1
with_items:
- "{{joomla_web...}}”
Sie haben ein Array mit einem einzelnen Element erstellt. Stattdessen müssen Sie die Ergebnisse Ihrer Variablen übergeben. Versuchen Sie stattdessen Folgendes:
with_items: |
"{{joomla_web...}}”