【问题标题】:Vagrant can't run ansible when provisioningVagrant 在配置时无法运行 ansible
【发布时间】:2015-01-26 06:31:13
【问题描述】:

我创建了一个 Vagrantfile 来使用 Ansible 配置一个新盒子。 Vagrantfile 和 Ansible 剧本都是我以前使用过的,在升级到 OS X Yosemite 之前。我可以成功vagrant up,但是当我尝试vagrant provision 时,出现以下错误:

➜  NNL  vagrant provision
==> default: Running provisioner: ansible...
The executable 'ansible-playbook' Vagrant is trying to run was not
found in the PATH variable. This is an error. Please verify
this software is installed and on the path.    

更新 2:这是上述命令的详细 (vvvv) 输出:

➜  ta  vagrant provision
==> default: Running provisioner: ansible...
ANSIBLE_FORCE_COLOR=true ANSIBLE_HOST_KEY_CHECKING=false PYTHONUNBUFFERED=1 ANSIBLE_SSH_ARGS='-o  
ForwardAgent=yes -o ControlMaster=auto -o ControlPersist=60s' ansible-playbook --private-
key=/Users/mike/.vagrant.d/insecure_private_key --user=vagrant --connection=ssh --
limit='default' --inventory-file=/Users/mike/Desktop/ta/.vagrant/provisioners/ansible/inventory 
-vvvv vagrant.yml
The executable 'ansible-playbook' Vagrant is trying to run was not
found in the PATH variable. This is an error. Please verify
this software is installed and on the path.

作为故障排除的一部分,我已经更新了 ansible 和 vagrant:

➜  NNL  ansible --version
ansible 1.8.1
  configured module search path = None
➜  NNL  ansible-playbook --version
ansible-playbook 1.8.1
  configured module search path = None
➜  NNL  vagrant --version
Vagrant 1.6.5

Ansible 肯定已安装,并且 /usr/local/bin 位于 PATH 环境变量中。

➜  NNL  which ansible
/usr/local/bin/ansible
➜  NNL  echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

更新 1:这是我的 Vagrantfile,我已将其缩减到最低限度:

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

    config.vm.box = "precise64"
    config.vm.hostname = "NNL"
    config.vm.box_url = "http://files.vagrantup.com/precise64.box"
    config.vm.network :forwarded_port, guest: 80, host: 8080
    config.vm.network :forwarded_port, guest: 3000, host: 3000
    config.vm.network :forwarded_port, guest: 9200, host: 9200
    config.ssh.forward_agent = true
    config.vm.provision "ansible" do |ansible|
      ansible.playbook = "vagrant.yml"
    end
end

我的另一个想法是我正在使用 zsh,也许 vagrant 正在通过 bash 或其他一些 shell 执行命令,所以我还尝试添加一个 .bashrc 文件以确保 /usr/local/bin 在路径上那个壳也是。似乎是,但我仍然得到同样的错误:

➜  NNL  bash
bash-3.2$ echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
bash-3.2$ which ansible
/usr/local/bin/ansible

我现在不知道如何进行。作为脚注,当我尝试重新配置它们时,我在 Mavericks 下成功创建的其他 vagrant box 现在也因相同的错误而失败。

【问题讨论】:

  • 我不知道它是否有帮助,但你能发布你的 Vagrantfile 吗?
  • 当然,添加到上面的问题中。
  • ansible.playbook 设置下方添加ansible.verbose = "vvvv",这样我们就可以获得vagrant 尝试运行的完整命令
  • @codeaken 按要求完成,请参阅更新 2

标签: macos vagrant ansible


【解决方案1】:

到目前为止,我还没有使用过 Yosemite,但如果我理解你的相同设置在以前版本的 OS X 上运行良好。

首先收集更多信息:当 vagrant box 启动时,您能否重新运行 vagrant 日志中显示的 ansible-playbook 命令,但直接从 shell(bash 或 zsh 无关紧要):

ANSIBLE_FORCE_COLOR=true ANSIBLE_HOST_KEY_CHECKING=false PYTHONUNBUFFERED=1 ANSIBLE_SSH_ARGS='-o ForwardAgent=yes -o ControlMaster=auto -o ControlPersist=60s' ansible-playbook --private-key=/Users/mike/.vagrant.d/insecure_private_key --user=vagrant --connection=ssh --limit='default' --inventory-file=/Users/mike/Desktop/ta/.vagrant/provisioners/ansible/inventory -vvvv vagrant.yml

结果如何?

如果它运行良好(我期望,根据您的问题描述),那么我们确信我们必须在 Vagrant 内部实现一些东西(可能与优胜美地环境相结合)。

【讨论】:

  • 如果我从命令行运行 playbook 命令(使用非常简单的 playbook 来通过 apt 安装 git),那么一切正常,没有报告错误。我认为 Vagrant 正在运行的 shell 或类似的东西存在问题,但我的知识在那里失败......
  • 感谢您的确认。 Vagrant 1.7.0 今天刚刚发布。您能否尝试一下这个新版本的 Vagrant 是否仍然存在此问题?谢谢:)
  • 谢谢@gilles,我会试一试
【解决方案2】:

所以最后我解决了这个问题。原来需要升级 iTerm(到 iTerm 2,2014 年 6 月)。我不完全了解导致问题的来龙去脉,但这里有更多信息:https://github.com/Homebrew/homebrew/issues/29843

【讨论】:

    【解决方案3】:

    无需在 Vagrant box 中安装 Ansible。 Ansible 是无代理的。 Ansible 使用 SSH(或其他协议)连接到其他主机。所以没有必要在来宾内部有 Ansible 可执行文件。您只需要在运行 vagrant 的主机上安装 Ansible。

    【讨论】:

      猜你喜欢
      • 2022-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      相关资源
      最近更新 更多