Назад | Перейти на главную страницу

Могу ли я установить зависимые роли как часть работы playbook?

Использование 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 люфта в системе управления.

Лучший способ справиться с этим - ИМХО:

  1. создать requirements.yml содержащие роли, которые нужны вашей игре
  2. установить роли с ansible-galaxy install -r requirements.yml

Взгляните на документация для параметров requirements.yml