使用 Vagrant 的ansible_local
配置程序,如何确保我的剧本中使用的角色在 Ansible 尝试执行它们之前安装?
shell: ansible-galaxy ...
我尝试在前面的任务块中和作为的一部分安装角色pre_tasks
,但 Ansible(Ubuntu 16.04 上的 v2.1.2.0)似乎先查看roles:
剧本的节,如果在角色路径中找不到它,则会退出并出现错误。
答案1
Vagrantansible_local
可能不是一个好的选择,因为它不太灵活。
shell
我通过使用配置器和内联脚本实现了类似的设置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 会在控制系统上ansible-playbook
寻找角色。roles
我认为处理此问题的最佳方法是:
- 创建一个
requirements.yml
包含你的游戏需要的角色 - 使用以下方式安装角色
ansible-galaxy install -r requirements.yml
看看文档对于参数requirements.yml