4
respostas

Vagrant não segue ordem de execução dos steps

Boa tarde pessoal,

Eu gostaria de saber se podem me ajudar com uma dúvida. Hoje coloquei meu Vagrantfile para subir com alguns steps, como podem ver abaixo:

VAGRANT FILE

# criando VMs MySql server e PHP, com box Linux bionic
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"

  # define servidor PHP
  config.vm.define "phpweb" do |phpweb|
    phpweb.vm.network "forwarded_port", guest:8888, host:8888
    phpweb.vm.network "public_network", ip: "10.0.0.72"

    # instala puppet no servidor php
    phpweb.vm.provision "shell", inline: "apt-get update && apt-get install puppet -y"

    # configura puppet no servidor php e chama manifest_file
    phpweb.vm.provision "puppet" do |puppet|
      puppet.manifests_path = "./configs/manifests"
      puppet.manifest_file = "phpweb.pp"
    end
  end

  # define MySQL server
  config.vm.define "mysqlserver" do |mysqlserver|
    mysqlserver.vm.network "public_network", ip: "10.0.0.73"
    mysqlserver.vm.provision "shell", inline: "cat /vagrant/configs/id_bionic.pub >> .ssh/authorized_keys"
  end

    # Run Ansible playbook from the Vagrant Host
    config.vm.provision "ansible" do |ansible|
      ansible.playbook = "./configs/ansible/playbook.yml"
    end
end

O Vagrant segue os steps normalmente até a criação da phpweb VM, quando deveria chamar o step que instala o puppet;

# instala puppet no servidor php
phpweb.vm.provision "shell", inline: "apt-get update && apt-get install puppet -y"

O step do Ansible é chamado;

# Run Ansible playbook from the Vagrant Host
config.vm.provision "ansible" do |ansible|
  ansible.playbook = "./configs/ansible/playbook.yml"
end

O playbook roda sem errors e tudo funciona, porém a ordem de execução correta seria somente chamar o playbook depois de todos os outros step anteriores serem concluídos, saberiam dizer qual o problema ?

* Playbook.yml *

---
- hosts: mysqlserver
  handlers:
    - name: restart mysql
      service:
        name: mysql
        state: restarted
      become: yes

  tasks:
    - name: 'Instalar MySQL Server'
      apt:
        update_cache: yes
        cache_valid_time: 3600 #1 hora
        name: ["mysql-server-5.7", "python3-mysqldb"]
        state: latest
      become: yes

    - name: 'Criar usuario no MySQL'
      mysql_user:
        login_user: root
        name: phpuser
        password: pass
        priv: '*.*:ALL'
        host: '%'
        state: present
      become: yes

    - name: 'Copiar arquivo mysqld.cnf'
      copy:
        src: /home/eddie/devops/ambient_dev/bionic/configs/mysqld.cnf
        dest: /etc/mysql/mysql.conf.d/mysqld.cnf
        owner: root
        group: root
        mode: 0644
      become: yes
      notify:
        - restart mysql

** hosts file **

[mysqlserver]
10.0.0.73

[mysqlserver:vars]
ansible_user=vagrant
ansible_ssh_private_key_file=/home/vagrant/id_bionic
ansible_python_interpreter=/usr/bin/python3
ansible_ssh_common_args='-o StrictHostKeyChecking=no'

obrigado, Edvaldo

4 respostas

Olá, Edvaldo. Tudo bem?

Desculpe pela demora em obter um retorno.

Você tem certeza de que o passo de instalar o puppet não está sendo executado no momento correto? Se tudo funcionou corretamente, deve ter sido feito na ordem, já que não teria como usar o puppet posteriormente se ele não tivesse sido instalado. Talvez apenas o output do passo não tenha sido mostrado.

Obrigado pelo retorno Vitor,

Mas realmente quando chamo o vagrant up roda tudo sem errors porém oplaybook é chamado e só depois da execução dele terminar é que o output to puppet são exibidos.

Por nada, Edvaldo.

Segue um print de quando executo o vagrant up aqui na minha máquina:

vagrant

Como pode ver, o puppet é executado na ordem correta aqui, antes mesmo da vm do mysqlserver

Você pode ver meu Vagrantfile neste link do github.

A única coisa que vejo diferente estruturalmente no seu é que o seu bloco referente ao ansible está com uma indentação a mais. Acharia estranho o problema ser esse, mas você pode tentar colocar alinhado com os outros e ver o resultado.

Opa valeu Vitor,

Acabei de rodar o vagrant up na minha máquina e olha só:

    phpweb: your host and reload your VM.
    phpweb: 
    phpweb: Guest Additions Version: 5.2.42
    phpweb: VirtualBox Version: 6.1
==> phpweb: Configuring and enabling network interfaces...
==> phpweb: Mounting shared folders...
    phpweb: /vagrant => /home/eddie/devops/ambient_dev/bionic
    phpweb: /tmp/vagrant-puppet/manifests-1987fd5f72c17d54c08031a1c4913b39 => /home/eddie/devops/ambient_dev/bionic/configs/manifests
==> phpweb: Running provisioner: ansible...
    phpweb: Running ansible-playbook...
[WARNING]: Could not match supplied host pattern, ignoring: mysqlserver

PLAY [mysqlserver] *************************************************************
skipping: no hosts matched

PLAY RECAP *********************************************************************

==> phpweb: Running provisioner: shell...
    phpweb: Running: inline script
    phpweb: Hit:1 http://archive.ubuntu.com/ubuntu bionic InRelease
    phpweb: Get:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
    phpweb: Get:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
    phpweb: Get:4 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
    phpweb: Get:5 http://archive.ubuntu.com/ubuntu bionic/universe amd64 Packages [8570 kB]
    phpweb: Get:6 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [1544 kB]

Como pode ver após a criação da vm phpweb ele já chama o ansible playbook e depois segue com a instalação e do puppet.

   phpweb: Setting up ruby-json (2.1.0+dfsg-2) ...
    phpweb: Setting up ruby-shadow (2.5.0-1build1) ...
    phpweb: Setting up ruby-selinux (2.7-2build2) ...
    phpweb: Setting up ruby-deep-merge (1.1.1-1) ...
    phpweb: Setting up hiera (3.2.0-2) ...
    phpweb: Setting up puppet (5.4.0-2ubuntu3) ...
    phpweb: Processing triggers for mime-support (3.60ubuntu1) ...
    phpweb: Processing triggers for ureadahead (0.100.0-21) ...
    phpweb: Processing triggers for libc-bin (2.27-3ubuntu1.4) ...
    phpweb: Processing triggers for systemd (237-3ubuntu10.43) ...
    phpweb: Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
==> phpweb: Running provisioner: puppet...
==> phpweb: Running Puppet with phpweb.pp...
==> phpweb: Notice: Compiled catalog for ubuntu-bionic.hsd1.mi.comcast.net in environment production in 0.35 seconds
==> phpweb: Notice: /Stage[main]/Main/Exec[apt-update]/returns: executed successfully
==> phpweb: Notice: /Stage[main]/Main/Package[php7.2]/ensure: created
==> phpweb: Notice: /Stage[main]/Main/Package[php7.2-mysql]/ensure: created
==> phpweb: Notice: /Stage[main]/Main/Exec[run-php7]/returns: executed successfully
==> phpweb: Notice: Applied catalog in 28.72 seconds

Não sei com o inserir o screenshot aqui como voc fez mas acho que dá pra entender.

Sinceramente não sei o que pode ser mas vou continuar pesquisando :)

Att,Edvaldo

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software