Ansible включить файлы в роли - PullRequest
1 голос
/ 22 января 2020

У меня есть файлы ниже.

../roles/requests/tasks/main.yml
../roles/requests/tasks/1.yml
../roles/requests/tasks/2.yml
../roles/requests/tasks/3.yml

В main.yml я пытаюсь вызвать другие playbooks.

---

- name: Include tasks for requests
  import_tasks: "{{task_to_run}}.yml"


- name: Include tasks for adding 2
  import_tasks: 2.yml
  when: task_to_run == "2"
  tags: 2

- name: Include tasks for adding 3
  import_tasks: 3.yml
  when: task_to_run == "3"
  tags: 3

Я дал task_to_run в обзоре башни, и я получил ошибку как

При использовании импорта stati c убедитесь, что все переменные, используемые в их именах, определены в vars / vars_files или extra-vars, переданных из командной строки. Stati c при импорте нельзя использовать переменные из фактов или источников данных, таких как группы или хосты.

Так что я пропустил его через extra-var, и эта часть работает, но теги также не работают, она проверяет только условие когда.

Есть идеи, что не так? Или есть другой вариант для этого?

1 Ответ

0 голосов
/ 22 января 2020

TLDR;

Целочисленные теги следует приводить к string, либо в виде отдельного значения, либо в виде списка:

tags: "3"

# or

tags:
  - "3"

# or even

tags: "{{ 3 | string }}"

# ...

Проблема

Копание в код, необходимый для точного понимания, почему это происходит, но ... из моих непосредственных тестов (ansible 2.9.4) tags плохо воспроизводится со значениями int.

Пример тестового файла:

---
- hosts: localhost
  gather_facts: false
  tags: # <see defs below for results>
  tasks: [{debug: msg=test}]

Пометить как простое int

Определение

tags: 3

Результаты

Все вызовы PlayBook завершаются с ошибкой:

ОШИБКА! теги должны быть указаны в виде списка

Тег как int в list

Определение

tags:
  - 3

Результаты

Вышеуказанная ошибка исчезает, но таргетинг на тег невозможен. Обратите внимание, что результатом является тот же вызов с --tags 3 или --tags "3"

$ ansible-playbook /tmp/play.yml --tags 3

PLAY [localhost] **************************************************************************************************************************************************************************************************

PLAY RECAP ********************************************************************************************************************************************************************************************************

Тег как string

Определение

tags: "3"
# or
tags:
  - "3"

Результаты

Все работает как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...