安装在Vagrant盒子后,Ansible在PATH中找不到

问题

为了testing,我build立了一个非常简单的Vagrant文件。 这只是为了testing如何与Ansible合作 。 可悲的是,我卡在第二步,在vagrant up --provision (我可以重复reload )时出现以下错误:

在PATHvariables中找不到可执行的'ansible-playbook' Vagrant试图运行。 这是一个错误。 请validation此软件已安装并在path上。


debugging工作到目前为止

由于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-playbookansible-playbook ,我把which ansible-playbook带进了一个盒子里,并把which ansible-playbook叫做which ansible-playbookwhich ansible which ansible-playbook 。 两者都可用:

 $ which ansible # /usr/bin/ansible 

看着dpkg -L ansible ,我发现很多东西在/etc/usr/bin 。 另外python --version给我Python 2.7.6而最低要求的版本是2.4。

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 

我在这里没有想法。

我想你在这里有一个误解。 没有必要在Vagrant框内安装Ansible。 Ansible是无代理的。 Ansible使用SSH(或其他协议)连接到其他主机。 所以不需要在主机里面有Ansible可执行文件。

你只需要在运行stream浪汉的主机上安装Ansible。

如果你想在Vagrant框内运行Ansible,那么你需要改变Vagrant文​​件的vm.provision步骤。 由于vm.provision "ansible"将在您运行的主机上查找Ansible可执行文件,因此您应该更改为vm.provision "shell" ,并将vm.provision "shell" ansible-playbook命令放在shell脚本中,该脚本应该在stream浪者上查找Ansible可执行文件框。