Apt

在 Vagrant box 上安裝後在 PATH 中找不到 Ansible

  • December 16, 2015

問題

為了進行測試,我設置了一個非常簡單的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-playbookandansible已安裝,我vagrant ssh進入盒子並呼叫which ansible-playbookand which ansible。兩者都可用:

$ which ansible
# /usr/bin/ansible

看著dpkg -L ansible,我發現很多事情發生在/etc/usr/binpython --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.provisionVagrant 文件的步驟。在vm.provision "ansible"您執行的主機上查找 Ansible 執行檔時vagrant,您應該更改為vm.provision "shell"並將ansible-playbook命令放入 shell 腳本中,該腳本應該在 Vagrant 框上查找 Ansible 執行檔。

引用自:https://serverfault.com/questions/743040