Назад | Перейти на главную страницу

Ansible не найден в PATH после установки на Vagrant box

Эта проблема

Для теста я установил очень просто Бродяга файл. Это просто проверить, как работать с Ansible является. К сожалению, я застрял на шаге 2 из-за следующей ошибки во время vagrant up --provision (что я могу повторить на reload):

Исполняемый файл 'ansible-playbook' Vagrant, который пытается запустить, не найден в переменной PATH. Это ошибка. Убедитесь, что это программное обеспечение установлено и находится в пути.


Усилия по отладке на данный момент

Как Ubuntu 14 "Trusty", 64-разрядная версия коробка поставляется без Ansible установлен, я добавил сценарий быстрой оболочки для запуска в качестве инициатора перед фактическим 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 установлены, я vagrant sshЕд в коробку и позвонил which ansible-playbook и which 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

У меня здесь нет идей.

Я думаю, у вас здесь неправильное представление. Нет необходимости устанавливать Ansible внутри коробки Vagrant. Ansible не имеет агентов. Ansible использует SSH (или другие протоколы) для подключения к другим хостам. Таким образом, нет необходимости иметь исполняемый файл Ansible внутри хоста.

Вам просто нужно установить Ansible на хосте, на котором запущен vagrant.

Если вы хотите запустить Ansible внутри поля Vagrant (что, IMHO, не так, как Vagrant и Ansible должны работать вместе), вам нужно будет изменить vm.provision шаг файла Vagrant. Так как vm.provision "ansible" будет искать исполняемый файл Ansible на хосте, который вы запускаете vagrant вы должны изменить на vm.provision "shell" и поставить ansible-playbook внутри сценария оболочки, который должен искать исполняемый файл Ansible в поле Vagrant.