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

shell provisioner: * One of `path` or `inline` must be set.

Olá boa noite, fiz o script conforme o do professor, alterei o IP (Que é o da minha rede) no Vagrant Status eu consigo ver as duas máquinas virtuais. Mas na hora de dar o Vagrant up ele dá esse ERRO. Vagrant STATUS OK

Já na segunda parte do comando "Vagrant UP" dá o erro que falei.

Vagrant UP ERRO

Segue a lista do Vagrant file

Configuração Vagrant

2 respostas
solução!

Pessoal, bom dia! para quem tiver o mesmo problema que eu nessa Aula, o problema estava na linha 9. Deletei a linha, Dei o "Vagrant UP" e as máquinas rodaram.

Pelo que eu estava lendo não é possível ter um provision e um scritp no mesmo bloco.

"You can review your shell provisioner form your Vagrantfile and make sure the provisioner does not have path and inline within the same block, it must be one or the other" (Removido de um texto na internet)

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:

  1. criar uma pasta scripts dentro da pasta bionic;
  2. criar um arquivo install_mysql.sh dentro da pasta scripts;
  3. 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';"
  4. 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 ofpathorinlinemust 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!"