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

Como o vagrant define qual provider em tempo de execução

Olá Guilherme, tudo bem?

Infelizmente, não consegui entender nas configurações do Vagrantfile como que a ferramenta consegue identificar em tempo de execução para qual provider as configurações do ambiente estão relacionados.

Quando digito a seguinte linha de comando

➜  aws git:(master) ✗ vagrant up aws_web               
Bringing machine 'aws_web' up with 'aws' provider...
==> aws_web: Warning! The AWS provider doesn't support any of the Vagrant
==> aws_web: high-level network configurations (`config.vm.network`). They
==> aws_web: will be silently ignored.
==> aws_web: Starting the instance...
==> aws_web: Waiting for instance to become "ready"...
==> aws_web: Waiting for SSH to become available...
==> aws_web: Machine is booted and ready for use!

com apenas o nome da máquina (aws_web) ele consegue inferir qual provider está relacionado.

A mesma coisa acontece com o comando para subir do virtualbox (web)

➜  aws git:(master) ✗ vagrant up web    
Bringing machine 'web' up with 'virtualbox' provider...
==> web: Checking if box 'ubuntu/bionic64' is up to date...
==> web: Clearing any previously set forwarded ports...
==> web: Clearing any previously set network interfaces...
==> web: Preparing network interfaces based on configuration...
    web: Adapter 1: nat
    web: Adapter 2: hostonly
==> web: Forwarding ports...
    web: 22 (guest) => 2222 (host) (adapter 1)
==> web: Running 'pre-boot' VM customizations...
==> web: Booting VM...
==> web: Waiting for machine to boot. This may take a few minutes...
    web: SSH address: 127.0.0.1:2222
    web: SSH username: vagrant
    web: SSH auth method: private key

Em que momento foram feitos os relacionamentos das configurações da máquina com os seus respectivos providers.

Segue arquivo completo do Vagrantfile

#vagrant plugin install vagrant-aws
#vagrant box add --force dummy https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box
#vagrant up aws_web --provider=aws
#vagrant destroy -f aws_web 

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

    config.vm.provider "aws"
    config.vm.provider :aws do |aws, override|
        #dados do access key
        aws.access_key_id = ""
        aws.secret_access_key = ""

        #a identificacao da AMI, abaixo é Ubuntu 18.04
        aws.ami = "ami-0ac019f4fcb7cb7e6"

        #nome do security group
        aws.security_groups = ['devops-vagrant']

        #nome do arquivo pem
        aws.keypair_name = "devops-key"

        #nome do usuario, no caso do Ubuntu é ubuntu
        override.ssh.username = "ubuntu"

        #caminho e nome do arquivo pem
        override.ssh.private_key_path = "devops-key.pem"
    end
    #novo ambiente aws_web, agora com puppet
    config.vm.define :aws_web do |aws_web_config|
        aws_web_config.vm.box = "dummy"
        aws_web_config.vm.synced_folder '.', '/vagrant', type: "rsync"
        aws_web_config.vm.provider :aws do |aws|
            aws.tags = { 'Name' => 'MusicJungle (vagrant)'}
        end

        aws_web_config.vm.provision "shell", path: "manifests/bootstrap.sh"
        aws_web_config.vm.provision "puppet" do |puppet|
            puppet.manifest_file = "web.pp"
            puppet.synced_folder_type = "rsync"
        end
    end

    config.vm.provider "virtualbox"
    config.vm.define :web do |web_config|
        #usando ubuntu 18.04
        web_config.vm.box = "ubuntu/bionic64"
        web_config.vm.network "private_network", ip: "192.168.50.10"
        web_config.vm.provisi
2 respostas
solução!

Oi Alexandre, tudo bem? Parte da minha resposta é meio que no chute, não cheguei a estudar isso a fundo, mas acredito que internamente ele deve ter um mecanismo que testa o ambiente que está executando. Então na amazon por exemplo, deve haver uma especie de variável de ambiente que ele pode checar e configurar respectivamente.

Localmente ele não vai ter nada disso então por padrão o fallback dele vai ser o virtualbox.

Faz sentido pra você?

Olá Wanderson, muito obrigado pelo retorno.

Faz sentido sim.

[]s,