Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Instalação do Ansible

Bom dia a todos.

A aula 06 do curso Vagrant: Gerenciando máquinas virtuais ensina a instalar o ansible em uma máquina virtual, entretanto durante a instalação da máquina ansible recebi em várias tentativas o seguinte erro:

 ansible: Error: retrieving gpg key timed out.
The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.

Revisei todas as configurações do Vagrantfile que escrevi enquanto acompanhava as aulas e, no final, acabei usando a configuração disponível para download na própria plataforma, mas não obtive sucesso. Segui também todas as recomendações de um tópico deste fórum no qual se apresenta a mesma dificuldade. Enfim, eis o arquivo Vagrantfile que estou usando (como disse é aquele que baixei das aulas):

$script_mysql = <<-SCRIPT
  apt-get update && \
  apt-get install -y mysql-server-5.7 && \
  mysql -e "create user 'phpuser'@'%' identified by 'pass';"
SCRIPT

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"

  config.vm.provider "virtualbox" do |vb|
    vb.memory = 512
    vb.cpus = 1
  end

  # config.vm.define "mysqldb" do |mysql|
  #   mysql.vm.network "public_network", ip: "192.168.1.24"
  #
  #   mysql.vm.provision "shell",
  #     inline: "cat /configs/id_bionic.pub >> .ssh/authorized_keys"
  #   mysql.vm.provision "shell", inline: $script_mysql
  #   mysql.vm.provision "shell",
  #     inline: "cat /configs/mysqld.cnf > /etc/mysql/mysql.conf.d/mysqld.cnf"
  #   mysql.vm.provision "shell", inline: "service mysql restart"
  #
  #   mysql.vm.synced_folder "./configs", "/configs"
  #   mysql.vm.synced_folder ".", "/vagrant", disabled: true
  # end

  config.vm.define "phpweb" do |phpweb|
    phpweb.vm.network "forwarded_port", guest: 8888, host: 8888
    phpweb.vm.network "public_network", ip: "192.168.1.25"

    phpweb.vm.provider "virtualbox" do |vb|
      vb.memory = 1024
      vb.cpus = 2
      vb.name = "ubuntu_bionic_php7"
    end

    phpweb.vm.provision "shell",
      inline: "apt-get update && apt-get install -y puppet"

    phpweb.vm.provision "puppet" do |puppet|
      puppet.manifests_path = "./configs/manifests"
      puppet.manifest_file = "phpweb.pp"
    end
  end

  config.vm.define "mysqlserver" do |mysqlserver|
    mysqlserver.vm.network "public_network", ip: "192.168.1.22"

    mysqlserver.vm.provision "shell",
      inline: "cat /vagrant/configs/id_bionic.pub >> .ssh/authorized_keys"
  end

  config.vm.define "ansible" do |ansible|
    ansible.vm.network "public_network", ip: "192.168.1.26"

    ansible.vm.provision "shell",
      inline: "cp /vagrant/id_bionic  /home/vagrant && \
              chmod 600 /home/vagrant/id_bionic && \
              chown vagrant:vagrant /home/vagrant/id_bionic"

    ansible.vm.provision "shell",
      inline: "apt-get update && \
               apt-get install -y software-properties-common && \
               apt-add-repository --yes --update ppa:ansible/ansible && \
               apt-get install -y ansible"

     ansible.vm.provision "shell",
       inline: "ansible-playbook -i /vagrant/configs/ansible/hosts \
                  /vagrant/configs/ansible/playbook.yml"
  end

end

Tentei usar os comandos em apenas uma linha no shell provision da máquina ansible. Sem sucesso.

Alguém passou pela mesma situação e conseguiu superá-la?

4 respostas

Olá Jullyano, tudo bem? Você poderia tentar usando o seguinte código:

$script_mysql = <<-SCRIPT
  apt-get update && \
  apt-get install -y mysql-server-5.7 && \
  mysql -e "create user 'phpuser'@'%' identified by 'pass';"
SCRIPT

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"

  config.vm.provider "virtualbox" do |vb|
    vb.memory = 1024
    vb.cpus = 1
  end

  # config.vm.define "mysqldb" do |mysql|
  #   mysql.vm.network "public_network", ip: "192.168.1.24"
  #
  #   mysql.vm.provision "shell",
  #     inline: "cat /configs/id_bionic.pub >> .ssh/authorized_keys"
  #   mysql.vm.provision "shell", inline: $script_mysql
  #   mysql.vm.provision "shell",
  #     inline: "cat /configs/mysqld.cnf > /etc/mysql/mysql.conf.d/mysqld.cnf"
  #   mysql.vm.provision "shell", inline: "service mysql restart"
  #
  #   mysql.vm.synced_folder "./configs", "/configs"
  #   mysql.vm.synced_folder ".", "/vagrant", disabled: true
  # end

  config.vm.define "phpweb" do |phpweb|
    phpweb.vm.network "forwarded_port", guest: 8888, host: 8888
    phpweb.vm.network "public_network", ip: "192.168.1.25"

    phpweb.vm.provider "virtualbox" do |vb|
      vb.memory = 1024
      vb.cpus = 2
      vb.name = "ubuntu_bionic_php7"
    end

    phpweb.vm.provision "shell",
      inline: "apt-get update && apt-get install -y puppet"

    phpweb.vm.provision "puppet" do |puppet|
      puppet.manifests_path = "./configs/manifests"
      puppet.manifest_file = "phpweb.pp"
    end
  end

  config.vm.define "mysqlserver" do |mysqlserver|
    mysqlserver.vm.network "public_network", ip: "192.168.1.22"

    mysqlserver.vm.provision "shell",
      inline: "cat /vagrant/configs/id_bionic.pub >> .ssh/authorized_keys"
  end

  config.vm.define "ansible" do |ansible|
    ansible.vm.network "public_network", ip: "192.168.1.26"

    ansible.vm.provision "shell",
      inline: "cp /vagrant/id_bionic /home/vagrant && chmod 600 /home/vagrant/id_bionic && chown vagrant:vagrant /home/vagrant/id_bionic"

    ansible.vm.provision "shell",
      inline: "apt-get update && apt-get install -y software-properties-common && apt-add-repository --yes --update ppa:ansible/ansible && apt-get install -y ansible"

     ansible.vm.provision "shell",
      inline: "ansible-playbook -i /vagrant/configs/ansible/hosts /vagrant/configs/ansible/playbook.yml"
  end

end

E fala pra gente o resultado!

Olá, Jonilson. Agradeço pela resposta.

Tentei usar o Vagrantfile recomendado e recebi a mesma mensagem:

 ...
    ansible: Fetched 19.2 MB in 60s (321 kB/s)
    ansible: Reading package lists...
    ansible: Reading package lists...
    ansible: Building dependency tree...
    ansible: Reading state information...
    ansible: software-properties-common is already the newest version (0.96.24.32.14).
    ansible: software-properties-common set to manually installed.
    ansible: 0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.
    ansible: Error: retrieving gpg key timed out.
The SSH command responded with a non-zero exit status. Vagrant

Como mais uma vez não deu certo. Eu entrei na máquina criada e instalei o ansible manualmente com:

$sudo apt install ansible
$ ansible --version
ansible 2.5.1
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/vagrant/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.17 (default, Jul 20 2020, 15:37:01) [GCC 7.5.0]

Há mesmo a necessidade de usar no Vagrantfile os comandos apt-get install -y software-properties-common && apt-add-repository --yes --update ppa:ansible/ansible?

Fico no aguardo. Abraços.

Na verdade Jullyano, os comandos são apenas pra automatizar ainda mais o processo de criação da máquina virtual, já que usando os comandos pelo Vagrantfile, quando a máquina for totalmente criada ela já vai está no jeito, pronta para o uso sem a necessidade de você executar o comando sudo apt install ansible, essa é o grande ponto. Dá forma que você fez é totalmente funcional, porém se precisar de 50 ou 100 máquinas com o Ansible instalado? Essa é a questão, assim acho que você também poderia tentar a solução proposta pelo Renan nesse outro tópico.

solução!

Olá, Jonilson.

Sim, compreendo e concordo com a sua posição. Eu apenas quis dizer que, pelo menos, manualmente consegui instalar sem precisar adicionar o ppa.. Acabei de ler a mensagem no outro tópico. Tentei seguir os passos ali descritos e recebi o seguinte resultado:

...
 ansible: Reading package lists...
    ansible: Warning: apt-key output should not be parsed (stdout is not a terminal)
    ansible: Executing: /tmp/apt-key-gpghome.mRZvrZS2qP/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv 93C4A3FD7BB9C367
    ansible: gpg: key 93C4A3FD7BB9C367: public key "Launchpad PPA for Ansible, Inc.
    ansible: " imported
    ansible: gpg: Total number processed: 1
    ansible: gpg:               imported: 1

Aparentemente, funcionou com o esperado.

Agradeço pelo auxílio e suporte.

Até mais.