Пытался добавить условное выражение с подстановочным знаком и переменной Ansible и получил сообщение об ошибке. Идея состоит в том, чтобы инициировать запрос api с именем контейнера, начинающимся с "android-", это продолжение плейбука по созданию контейнера докеров.

Моя книга:

---
- name: move agent android
  hosts: server1; server2
  vars:
    containers: "{{ containers }}" #variable in a different file

tasks:
    - name: move agent Android
      command: curl "api request to a server"
      when:  "containers.startswith('android-*')"

Ошибка:

TASK [move agent Android] ******************************************************
  fatal: [server1]: FAILED! => {"msg": "The conditional check 'containers.startswith('android-*')' failed. The error was: error while evaluating conditional (containers.startswith('android-*')): 'list object' has no attribute 'startswith'\n\nThe error appears to be in '/directory/were/the/playbook/is/move-agent-android.yml': line 13, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n    - name: move agent Android\n      ^ here\n"}

Я попытался изменить условные выражения на разные версии, и все они получили одну и ту же ошибку.

другие версии:

when:  "containers is match('android-*')"

when:  item.name.startswith('android-*')

when:  "{{ containers }}" is match('android-*')

Есть идеи, как решить ошибку?

answer

Пытаться

when: "containers is match('^android-.*$')"

Это регулярное выражение Python. Точка '.' отсутствовала перед звездой '*'. Кроме того, вам нужно начинать выражение с символа '^' и заканчивать его знаком «$» в случае совпадения.