在 Vagrant box 上安裝後在 PATH 中找不到 Ansible
問題
為了進行測試,我設置了一個非常簡單的Vagrant文件。這只是為了測試如何使用Ansible。可悲的是,我被困在第 2 步,期間出現以下錯誤
vagrant up --provision
(我可以重複reload
):
'ansible-playbook'
在 PATH 變數中找不到可執行的Vagrant 嘗試執行。這是一個錯誤。請驗證此軟體是否已安裝並位於路徑上。到目前為止的調試工作
由於Ubuntu 14 “Trusty” 64 位機器沒有安裝Ansible ,我在實際的**Ansible劇本之前添加了一個快速 shell 腳本作為配置程序執行。這是
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
andansible
已安裝,我vagrant ssh
進入盒子並呼叫which ansible-playbook
andwhich ansible
。兩者都可用:$ 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 box 內安裝 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 執行檔。