2016-10-30 2 views
0

Почему я не могу получить доступ к переменной I, определенной как группа var, в файле инвентаризации из playbook.yml?Ansible variable undefined

Вот содержание playbook.yml:

--- 
- name: test ansible local provisioning 
    hosts: all 
    vars: 
    playbook_var: "playbook_var" 
    tasks: 
    - name: Test ansible is working 
     debug: msg="Ansible seems to be working, this variable is from plabook {{ playbook_var }} and this variable is from hosts file {{ hosts_file_var }}" 

А вот hosts:

[all:vars] 
hosts_file_var="hosts_file_var" 

анзибль выдает следующее сообщение об ошибке:

TASK [Test ansible is working] ************************************************* 
fatal: [ansible_host]: FAILED! => {"failed": true, "msg": "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'hosts_file_var' is undefined 

The error appears to have been in '/vagrant/provisioning/ansible_host/playbook.yml': line 7, column 7, but may 
be elsewhere in the file depending on the exact syntax problem. 

The offending line appears to be: 
    tasks: 
    - name: Test ansible is working 
    ^here 
"} 

есть какой-то аспект, который я не» t понять, как переменные переменных Ansible?

Здесь также находится ansible.cfg. Я готов использовать анзибль для Vagrant предоставления: был неправильный файл инвентаризации был использован

[defaults] 
inventory = hosts 
remote_user = vagrant 
+0

Ваш сборник пьес и файл инвентаризации в порядке. Запуск их приводит к: '" msg ":« Кажется, что Ansible работает, эта переменная от plabook playbook_var, и эта переменная принадлежит хостам file hosts_file_var ". Ваше основное сообщение об ошибке: '' hosts_file_var 'undefined', поэтому кажется, что вы не используете файл инвентаря, который вы опубликовали. – techraf

+0

И ваше сообщение об ошибке является именно тем, которое я получаю при отключении аргумента '-i' в вызове' ansible-playbook'. – techraf

+0

Кроме того, если «хосты», которые вы отправили в вопросе, завершены, Ansible должен выдать ошибку, поэтому, если вы не получите ошибку, ваш Ansible использует другую. – techraf

ответ

2

Проблема, таким образом, переменные, где не определено. Вот длинное объяснение, почему это произошло в первую очередь.

Проблема в том, как бродяга выполняет команду ansible-playbook. Рабочий каталог по умолчанию для выполнения команды в гостевой системе - это не путь, заданный для конфигурации ansible.playbook, но /vagrant (который по умолчанию синхронизирован относительно Vagrantfile). Это может быть подтверждено путем изучения вывода дается следующей конфигурации:

ansible.verbose = true

Решение должно было обеспечить следующие конфигурации (обратите внимание, что ansible.playbook относительно этого каталога в гостевой, и не нужно ничего делать в хозяине расположение.

ansible.provisioning_path = "/vagrant/provisioning/ansible_host"

Vagrant также создает свой собственный файл инвентаризации и выполняет следующую команду, если никаких дополнительных настроек не дано.

Running ansible-playbook... 
cd /vagrant/provisioning/ansible_host && PYTHONUNBUFFERED=1 ANSIBLE_FORCE_COLOR=true ansible-playbook --limit="ansible-host" --inventory-file=/tmp/vagrant-ansible/inventory -v playbook.yml 
Using /vagrant/provisioning/ansible_host/ansible.cfg as config file 

Вот все необходимые настройки, чтобы получить вещи работать

ansible_host.vm.provision "ansible_local" do |ansible| 
    ansible.playbook = "playbook.yml" 
    ansible.provisioning_path = "/vagrant/provisioning/ansible_host" 
    ansible.inventory_path = "hosts" 
    ansible.limit = "all" 
    ansible.verbose = true 
end 

Обратите внимание, что это также необходимо объявить ansible_connection=local хоста/группы вар для входа LOCALHOST

+0

Связь между вашим вопросом и вашим ответом ограничивается вашим именем в нижнем колонтитуле. – techraf

+0

Простите меня, я отформатировал ответ, чтобы быть более ясным сейчас. –