Рейтинг:0

Условный оператор Ansible с переменными и подстановочными знаками

флаг au

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

Моя книга игр:

---
- имя: перемещение агента андроида
  хосты: сервер1; сервер2
  вары:
    контейнеры: "{{ container }}" #variable в другом файле

задачи:
    - имя: агент перемещения Android
      команда: curl "запрос API к серверу"
      когда: "containers.startswith('android-*')"

Ошибка:

ЗАДАЧА [переместить агент Android] ************************************************* **********
  фатальный: [server1]: FAILED! => {"msg": "Условная проверка 'containers.startswith('android-*')' не удалась. Ошибка: ошибка при оценке условного (containers.startswith('android-*')): 'объект списка' не имеет атрибута 'startswith'\n\nПохоже, ошибка находится в '/directory/were/the/playbook/is/move-agent-android.yml': строка 13, столбец 7, но может быть\nв другом месте файла в зависимости от конкретной проблемы с синтаксисом.\n\nОшибочная строка выглядит следующим образом:\n\n\n - имя: переместить агент Android\n ^ сюда\n"}

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

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

когда: "контейнеры соответствуют ('android-*')"

когда: item.name.startswith('android-*')

когда: "{{ container }}" соответствует ('android-*')

Любая идея, как решить ошибку?

Рейтинг:1
флаг br

Пытаться

когда: "контейнеры соответствуют ('^android-.*$')"

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

flowerysong avatar
флаг th
Хотя это и не повредит, технически вам нужно только привязать конец для `match`, так как он неявно привязан к началу. В этом конкретном случае конечная привязка также не имеет смысла, так как `.*` всегда будет соответствовать концу в любом случае. Самое простое решение — убрать `*`: `is match('android-')` будет соответствовать всем строкам, начинающимся с `android-`, что и является желаемым результатом.
флаг br
См. [Для чего нужны комментарии и когда я не должен комментировать?] (https://meta.stackexchange.com/questions/19756/how-do-comments-work). Вы не просите разъяснений, информация не второстепенная и не преходящая, и я не собираюсь "улучшать" пост по поводу вашей "конструктивной" критики.Без рассуждений. Я предлагаю вам опубликовать свой ответ.
flowerysong avatar
флаг th
Это конструктивная критика того, как вы можете улучшить свой пост. Вы не обязаны его принимать.
флаг br
Что мешает вам опубликовать свой ответ?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.