Использование Vagrant's ansible_local
Provider, как я могу убедиться, что роли, используемые в моем playbook, установлены до того, как Ansible попытается их выполнить?
Я пытался установить роль с помощью shell: ansible-galaxy ...
как в предыдущем блоке задачи, так и как часть pre_tasks
, но Ansible (v2.1.2.0 в Ubuntu 16.04), похоже, смотрит на roles:
раздел сценария перед чем-либо еще и завершается с ошибкой, если он не найден в пути ролей.
Бродяга ansible_local
вероятно, не лучший выбор, так как он не очень гибкий.
Я добиваюсь аналогичной настройки, используя shell
Provider и встроенный скрипт в Vagrantfile
:
Vagrant.configure(2) do |config|
config.vm.synced_folder ".", "/vagrant"
config.vm.box = "deb/wheezy-amd64"
config.ssh.forward_agent = true
$script = <<SCRIPT
sudo apt-get update
sudo apt-get install python2.7-dev -qq
sudo apt-get install python-pip -qq
sudo easy_install pip
sudo pip install markupsafe ansible
sudo rm -rf /etc/ansible
sudo mkdir -p /etc/ansible/roles
cd /vagrant
sudo ansible-galaxy install -r requirements.yml -p roles/ --force
# Add ansible.cfg to pick up roles path.
echo '[defaults]' >> /etc/ansible/ansible.cfg
echo 'roles_path = /etc/ansible/roles/' >> /etc/ansible/ansible.cfg
sudo -E -s ansible-playbook -vv -i /vagrant/local-test/inventory /vagrant/local-test/site.yml --connection=local
SCRIPT
# Vagrant.configure("2") do |config|
config.vm.provision "shell", run: "always", inline: $script, privileged: "false"
end
старый ответ
Если вы запустите задачу
shell: ansible-galaxy install ...
Ansible установит роль в целевой системе, а не в системе, выполняющей ansible-playbook
. Но Ansible будет искать roles
люфта в системе управления.
Лучший способ справиться с этим - ИМХО:
requirements.yml
содержащие роли, которые нужны вашей игреansible-galaxy install -r requirements.yml
Взгляните на документация для параметров requirements.yml