为了testing,我build立了一个非常简单的Vagrant文件。 这只是为了testing如何与Ansible合作 。 可悲的是,我卡在第二步,在vagrant up --provision (我可以重复reload )时出现以下错误:
在PATHvariables中找不到可执行的
'ansible-playbook'Vagrant试图运行。 这是一个错误。 请validation此软件已安装并在path上。
由于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-playbook ,我把which ansible-playbook带进了一个盒子里,并把which ansible-playbook叫做which ansible-playbook和which 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可执行文件框。