2016-11-15 13 views
1

Тестирование основной анзибль установки ролей, но получил ошибку на первой линии роли main.yml, я уверен, что это что-то глупо, хотяанзибль роли YAML ошибок

play.yml

- hosts: myhosts 
    remote_user: myuser 
    roles: 
    - test 

Структура каталогов

play.yml 
roles/test/tasks/main.yml 

main.yml

- hosts: all 
    user: myuser 
    gather_facts: no 
    tasks: 
    - name: ping all hosts 
    ping: 

Когда я бегу ansible-playbook play.yml, я получаю ошибку

The offending line appears to be: 


- hosts: all 
^here 

Это выглядит как простая ошибка YAML синтаксического анализа, но если я бегу ansible-playbook main.yml, он отлично работает, так что не уверен, что происходит. Есть предположения?

+0

An (онлайн) YAML валидатор покажет вам, что это не имеет ничего общего с ошибками синтаксического анализа YAML, но это анзибль связанный с этим вопрос. http://yaml-online-parser.appspot.com/ – Anthon

+0

Да, я уже знаю, что это не проблема YAML, потому что 'ansible-playbook main.yml' отлично работает, я сказал, что это выглядит как простая ошибка анализа YAML, которая указывает, что проблема в другом месте. – Bob

ответ

2

270 Вы не можете создавать темы в roles/test/tasks/main.yml. Хосты указаны в файле play.yml.

roles/test/tasks/main.yml Используется для определения действий, которые вы хотите выполнить. В вашем случае пинг хостов, это может просто выглядеть следующим образом:

--- 

- ping: 

Это будет выполнять ping действие на хостах, указанных в вашем play.yml

анзибль имеет структуру набор папок, то можно использовать, чтобы сломать playbooks , Файл play.yml указывает, какие хосты должны быть нацелены и какие роли применять вместе с другими элементами верхнего уровня.

Индивидуальные роли, указанные в файле play.yml, находятся в roles/X/, существует определенная структура папок, которую ожидает Ansible. Он будет искать задачи для работы в роли test здесь roles/test/tasks/main.yml.

play.yml - всего лишь одна книжка. Вы можете создать много в одной папке и вызвать их с помощью ansible-playbook.

Официальная документация имеет более подробный пример рекомендуемого playbook directory structure

+0

Спасибо, это работает, но я должен отметить, что я не могу, в отличие от этого не нужно, указывать хосты в 'main.yml'. Я думаю, что Ansible делает что-то основное, например, объединяя 2 файла и вставляя содержимое в 'main.yml' за спецификацию YAML. Кстати, что такое '' 'для? Я новичок в Ansible. – Bob

+1

@Bob, вы правы. Я обновил ответ, чтобы быть более четким, и добавил ссылку на официальную документацию, которая имеет хороший пример расположения папок. --- это только часть синтаксиса yaml, это указывает начало документа. Это хорошая практика, чтобы использовать его, хотя это не всегда строго необходимо. Я бы также рекомендовал посмотреть на [галактическую галактику] (https://galaxy.ansible.com/), в которой есть много примеров ролей для экспериментов. –