Olá @Salatiel, tive o mesmo problema que você, mas tenho outras soluções.
Apenas remover a linha mencionada não chama o $script_mysql
que é responsável por instalar o mysql
na vm mysql e inserir o usuário necessário para acessar a solução.
Solução 1: voltar a escrever o código em linha
Na aula o professor move o código da linha para uma variável a ser chamada. Basta fazer o processo inverso e teremos algo do tipo substituindo a linha 9:
mysql.vm.provision "shell", inline: "apt-get update && apt-get install -y mysql-server-8.0 && mysql -e \"create user 'phpuser'@'%' identified by 'pass';\""
Solução 2: mover o script para um arquivo a parte
Para mim essa solução foi mais agradável de utilizar, pois tornei-a padrão para todos os provisionamentos.
A substituição da linha 9 para utilizar o script em um documento a parte pode ser feito da seguinte forma:
- criar uma pasta
scripts
dentro da pasta bionic
; - criar um arquivo
install_mysql.sh
dentro da pasta scripts
; - inserir o código do
$script_mysql
no arquivo install_mysql.sh
:apt-get update && \
apt-get install -y mysql-server-5.7 && \
mysql -e "create user 'phpuser'@'%' identified by 'pass';"
- alterar a linha 9 para usar
path
ao invés de inline
, ficando dessa forma:mysql.vm.provision "shell", path: "./scripts/install_mysql.sh"
O vagrant irá executar o script da mesma forma que iria executar o código em linha.
Considerações
Não consegui identificar a razão do erro levantado que nós encontramos (shell provisioner: * One of
pathor
inlinemust be set.
), porém isso nos levou a explorar outras opções na documentação do Vagrant (path).
O path
, utilizado na solução 2, nos deu uma nova ferramenta para gerenciar pequenas mudanças que são necessárias caso haja uma atualização para versões diferentes. Suponha que em uma versão futura você deseja inserir outros usuários no mysql. Não há a necessidade de alterar o Vagratfile mais, basta alterar o script install_mysql.sh
.
Depois de descobrir essa possibilidade, testar e verificar seu funcionamento, substituí todos os provision "shell"
de inline para path
. Agregando a essa solução pude inserir mensagens a serem impressas pelos scripts para acompanhar o processo de provisioning quando executava o vagrat up
.
Aqui coloco alguns exemplos de como ficaram os códigos (baseados no que você postou acima) após as alterações para path
:
./Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/bionic64"
# mysqldb
config.vm.define "mysqldb" do |mysql|
# network
mysql.vm.network "public_network", ip: "192.168.51.107"
# provision
mysql.vm.provision "shell", path: "./scripts/set_ssh_public_key.sh"
mysql.vm.provision "shell", path: "./scripts/install_mysql.sh"
mysql.vm.provision "shell", path: "./scripts/configure_mysql_server.sh"
# shared folders
mysql.vm.synced_folder "./configs", "/configs"
mysql.vm.synced_folder ".", "/vagrant", disabled: true
end
# phpweb
config.vm.define "phpweb" do |phpweb|
#network
phpweb.vm.network "forwarded_port", guest:80, host:8089
phpweb.vm.network "public_network", ip: "192.168.51.108"
end
end
./scripts/set_ssh_public_key.sh
#!/bin/bash
echo "[Message] Copying public key..."
cat /configs/id_focal.pub >> .ssh/authorized_keys && \
echo "[Message] Public key copied!"
./scripts/install_mysql.sh
#!/bin/bash
echo "[Message] Installing mysql..."
apt-get update && \
apt-get install -y mysql-server-5.7 && \
echo "[Message] Installed mysql successfully. creating user accounts..." && \
mysql -e "create user 'phpuser'@'%' identified by 'pass';" && \
echo "[Message] Created mysql user accounts!"
./scripts/configure_mysql_server.sh
#!/bin/bash
echo "[Message] Configuring mysql..."
cat /configs/mysqld.cnf > /etc/mysql/mysql.conf.d/mysqld.cnf && \
echo "[Message] mysql configured successfully. restarting mysql service..." && \
service mysql restart && \
echo "[Message] mysql service restarted!"