2015-02-26 3 views
0

Я только начинаю изучать возможность. Я установил тестовый репозиторий here.Включая задачу с заданными переменными (Ansible)

Я пытаюсь включить задачу и передать ей сообщение как переменную, которая должна быть «напечатана» заданием. Мой сборник пьес (site.yml) структурирована следующим образом:

- name: default playbook 
    tasks: 
    - { include: tasks/timestamp.yml, themsg='starting tasks' } 

И tasks/timestamp.yml является:

--- 
- debug: msg="{{ themsg }} ' @ ' {{ ansible_date_time['time'] }}." 

Когда я бегу это с ansible-playbook site.yml я получаю ошибку:

TASK: [debug msg="{{ themsg }} 'current time:' {{  ansible_date_time['time'] }}."] *** fatal: [localhost] => One or more undefined variables: 'themsg' is undefined 

Я мы использовали official documentation в качестве справочного материала, и, похоже, это должно сработать. Какие-либо предложения?

+0

Может быть, что вам нужно добавить условие, когда это вызвано? – ryekayo

+0

Я понятия не имею. Сначала переходите к изучению. Это похоже на пример из официальных документов. – nfarrar

+0

Я просмотрел документацию, и кажется, что примеры используют что-то подобное при использовании условного выражения (не то, что решает проблему, так как кажется, что он жалуется на переменную) – ryekayo

ответ

1

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

Вы нашли правильную документацию; он дает следующее для включения файла задачи:

- include: wordpress.yml wp_user=timmy 
- { include: wordpress.yml, wp_user: timmy, ssh_keys: [ 'keys/one.txt', 'keys/two.txt' ] } 

К сожалению, вы объединены тем:

- { include: tasks/timestamp.yml, themsg='starting tasks' } 

Вот как выйти из варенья. Любой из них будет работать:

- { include: tasks/timestamp.yml, themsg: 'starting tasks' } 
- include: tasks/timestamp.yml themsg='starting tasks' 

В первом примере я изменил = в толстой кишке. Во втором примере я удалил фигурные скобки и удалил запятую.

Очень просто обновить эту «задачу» до «роли включить». Переместить tasks/timestamp.yml в roles/timestamp/tasks/main.yml, а затем включить его в качестве роли вместо задачи:

roles: 
    - { role: timestamp, themsg: "starting tasks" } 

Вы получить некоторое здравомыслие с какой-то что- портативности, крючки с предпосылками и обработчиков и т.д.

+0

Спасибо, супер полезно. :) Я все еще пытаюсь понять основы. У моего main.yml есть пара определенных ролей «homebrew» и «apt» прямо сейчас - homebrew устанавливает пакеты homebrew * если * os - Дарвин, а apt * if * это Ubuntu. Похоже, что это были правильные сущности для «ролей», но отображение отладочного сообщения с меткой времени было скорее «заданием», чем «ролью». Однако я заметил, что задачи из main.yml выполняются только в том случае, если не определены роли ... – nfarrar

+0

Источник находится здесь: https://github.com/nfarrar/crib2/tree/master/ansible – nfarrar

+0

Can вы делаете небольшой тестовый пример, который показывает, что задачи не выполняются, когда есть роли? Я просто запускал две задачи «включить» (как указано выше) и одну задачу «роль» (как указано выше), все три работы. – tedder42

Смежные вопросы