O problema
Para um teste, configurei um arquivo Vagrant muito simples . Isso é apenas para testar como é trabalhar com o Ansible . Infelizmente, estou preso na etapa número 2 com o seguinte erro durante (que posso repetir em ):vagrant up --provision
reload
O executável que o
'ansible-playbook'
Vagrant está tentando executar não foi encontrado na variável PATH. Isso é um erro. Verifique se este software está instalado e no caminho.
Os esforços de depuração até agora
Como a caixa Ubuntu 14 "Trusty" de 64 bits vem sem o Ansible instalado, adicionei um script de shell rápido para executar como provisionador antes dos playbooks reais do Ansible . Aqui está oVagrantfile
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
O script bash install-ansible.sh
é tão simples quanto isto:
sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get -y update
sudo apt-get install ansible
Para confirmar isso ansible-playbook
e ansible
está instalado, entrei vagrant ssh
na caixa e liguei which ansible-playbook
e which ansible
. Ambos estão disponíveis:
$ which ansible
# /usr/bin/ansible
Olhando para dpkg -L ansible
, encontro muitas coisas acontecendo em /etc
e /usr/bin
. Também python --version
me dá Python 2.7.6
enquanto a versão mínima exigida é 2.4.
O echo $PATH
fornece a seguinte saída padrão:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Posso confirmar que o usuário é o correto: whoami
resulta vagrant
e o último comando executado antes do erro é:
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
Estou sem ideias aqui.
Acho que você tem um equívoco aqui. Não há necessidade de instalar o Ansible dentro da caixa do Vagrant. Ansible é sem agente. Ansible usa SSH (ou outros protocolos) para se conectar a outros hosts. Portanto, não há necessidade de ter um executável Ansible dentro do host.
Você só precisa ter o Ansible instalado no host executando o vagrant.
Se você deseja executar o Ansible dentro da caixa do Vagrant (o que é IMHO, não é assim que o Vagrant e o Ansible devem funcionar juntos), você também precisará alterar a
vm.provision
etapa do arquivo Vagrant. Comovm.provision "ansible"
irá procurar o executável Ansible no hostvagrant
em que você está executando, você deve alterarvm.provision "shell"
e colocar oansible-playbook
comando dentro do script de shell, que deve procurar o executável Ansible na caixa do Vagrant.