在 Vagrant box 上安装后,未在 PATH 中找到 Ansible

在 Vagrant box 上安装后,未在 PATH 中找到 Ansible

问题

为了测试,我设置了一个非常简单的流浪汉文件。这只是为了测试如何使用Ansible是。遗憾的是,我卡在第 2 步,并出现以下错误vagrant up --provision(我可以在 上重复reload):

在 PATH 变量中未找到 Vagrant 尝试运行的可执行文件'ansible-playbook'。这是一个错误。请验证此软件是否已安装并位于路径上。


迄今为止的调试工作

作为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已安装,我vagrant ssh进入盒子并调用which ansible-playbookwhich ansible。两者都可用:

$ which ansible
# /usr/bin/ansible

查看,我发现和dpkg -L ansible中有很多内容。还给了我所需的最低版本是 2.4。/etc/usr/binpython --versionPython 2.7.6

给出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

我在这里没有主意了。

答案1

我认为你在这里有一个误解。没有必要在 Vagrant 框内安装 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 可执行文件。

相关内容