我可以在运行剧本时安装依赖角色吗?

我可以在运行剧本时安装依赖角色吗?

使用 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

我认为处理此问题的最佳方法是:

  1. 创建一个requirements.yml包含你的游戏需要的角色
  2. 使用以下方式安装角色ansible-galaxy install -r requirements.yml

看看文档对于参数requirements.yml

相关内容