Ansible with_items, wenn nicht jedes Element ausgewertet wird

Ansible with_items, wenn nicht jedes Element ausgewertet wird

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...}}”

verwandte Informationen