问题
为了测试,我设置了一个非常简单的流浪汉文件。这只是为了测试如何使用Ansible是。遗憾的是,我卡在第 2 步,并出现以下错误vagrant up --provision
(我可以在 上重复reload
):
在 PATH 变量中未找到 Vagrant 尝试运行的可执行文件
'ansible-playbook'
。这是一个错误。请验证此软件是否已安装并位于路径上。
迄今为止的调试工作
作为Ubuntu 14“Trusty” 64 位盒子不带Ansible安装后,我添加了一个快速 shell 脚本,在实际之前作为配置程序运行Ansible剧本。以下是Vagrantfile
Vagrant.require_version ">= 1.7.0"
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty64"
config.ssh.insert_key = false
# Synced folders
config.vm.synced_folder "./public", "/var/www",
disabled: false
# Install Ansible
config.vm.provision :shell,
path: "provisioners/shell/install-ansible.sh"
# Run Ansible Playbooks
config.vm.provision "ansible" do |ansible|
ansible.verbose = "vvv"
ansible.playbook = "provisioners/ansible/playbook.yml"
end
end
bash 脚本install-ansible.sh
非常简单:
sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get -y update
sudo apt-get install ansible
为了确认ansible-playbook
和ansible
已安装,我vagrant ssh
进入盒子并调用which ansible-playbook
和which ansible
。两者都可用:
$ which ansible
# /usr/bin/ansible
查看,我发现和dpkg -L ansible
中有很多内容。还给了我所需的最低版本是 2.4。/etc
/usr/bin
python --version
Python 2.7.6
给出echo $PATH
以下默认输出:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
我可以确认,用户是正确的:whoami
导致vagrant
错误发生之前执行的最后一个命令是:
PYTHONUNBUFFERED=1
ANSIBLE_HOST_KEY_CHECKING=false
ANSIBLE_FORCE_COLOR=true
ANSIBLE_SSH_ARGS='-o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -o ControlMaster=auto -o ControlPersist=60s'
ansible-playbook
--user=vagrant
--connection=ssh
--timeout=30
--limit='default'
--inventory-file=/Users/*****/projects/*****/.vagrant/provisioners/ansible/inventory
-vvv
provisioners/ansible/playbook.yml
我在这里没有主意了。
答案1
我认为你在这里有一个误解。没有必要在 Vagrant 框内安装 Ansible。Ansible 是无代理的。Ansible 使用 SSH(或其他协议)连接到其他主机。因此,主机内不需要有 Ansible 可执行文件。
您只需要在运行 vagrant 的主机上安装 Ansible。
如果您想在 Vagrant 框内运行 Ansible(恕我直言,这不是 Vagrant 和 Ansible 应该协同工作的方式),您还需要更改vm.provision
Vagrant 文件的步骤。由于vm.provision "ansible"
会在您运行的主机上查找 Ansible 可执行文件vagrant
,因此您应该更改为vm.provision "shell"
并将ansible-playbook
命令放入 shell 脚本中,该脚本应该在 Vagrant 框上查找 Ansible 可执行文件。