2
respostas

erro no Vagrantfile

Pessoal,

estou com erro nesse Vagrantfile, não sei o que pode estar ocorrendo, ele sobe a máquina, mas não consege executar a script da variavel, vocês podem me ajudar? Obs: O vagrantfile funciona corretamente, mas queria saber o porque do meu não tá funcionando.

# -*- mode: ruby -*-
# # vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
$script_mysql = <<-SCRIPT
  apt-get update && \
  apt-get install -y mysql-server-5.7 && \
  mysql -e "create user 'phpuser'@'%' identified by 'pass';"
SCRIPT
    config.vm.define "mysql" do |mysql|
    mysql.vm.hostname = "mysql.hacklab"
    mysql.vm.box = "ubuntu/bionic64"
    mysql.vm.network "private_network", ip: "192.168.200.30"
    mysql.vm.provider "virtualbox" do |v|
    v.memory = 512
    v.cpus = 1

    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
  end
end

O erro que dá no final da execução é:

 mysql: ERROR
    mysql:  1396 (HY000)
    mysql:  at line 1
    mysql: : Operation CREATE USER failed for 'phpuser'@'%'
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.
2 respostas

Olá PESSOA, tudo bem? Pelo pude analisar o erro no Vagrantfile é na linha:

mysql.vm.provision "shell", inline: $script_mysql

Essa linha é que é a responsável por executar o script para instalar o MySQL e também criar o usuário, aparentemente ele consegue realizar a instalação do MySQL com sucesso, porém como o próprio erro informa:

mysql: : Operation CREATE USER failed for 'phpuser'@'%'

Acontece uma falha ao criar o usuário 'phpuser'. Bom primeiro, recomendo você deixar o "script" fora do Vagrant.configure só pra deixarmos o código mais semântico e cada coisa no seu devido lugar. Ficando dessa forma:

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

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    config.vm.define "mysql" do |mysql|
    mysql.vm.hostname = "mysql.hacklab"
    mysql.vm.box = "ubuntu/bionic64"
    mysql.vm.network "private_network", ip: "192.168.200.30"
    mysql.vm.provider "virtualbox" do |v|
    v.memory = 512
    v.cpus = 1

    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
  end
end

Tenta executar dessa forma! Caso não funcione e ou retorne o mesmo erro, então podemos supor que o usuário já esteja criado por algum motivo, então vamos excluir o usuário, liberar as permissões e tentar criar novamente, e podemos fazer da seguinte forma:

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

Tenta essas duas formas, caso não funcione informa aqui pra gente poder ver outras alternativas!

Jonilson, boa tarde.

Já consegui resolver, segue o Vagrantifile, corrigido.

# -*- mode: ruby -*-
# # vi: set ft=ruby :


Vagrant.configure("2") do |config|

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

  config.vm.define "mysql" do |mysql|
  mysql.vm.box = "ubuntu/bionic64"
  mysql.vm.hostname = "mysql.hacklab"
  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
  mysql.vm.network "private_network", ip: "192.168.200.253"
end
end

Muito obrigado

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