Multi-machine definition not honoured in embedded Vagrantfile

26 views
Skip to first unread message

Frits Hoogland

unread,
Mar 24, 2021, 7:03:23 AM3/24/21
to Vagrant

I am trying to create a vagrant box that launches a cluster of 3 VMs. The Vagrantfile to accomplish this works when this definition is in the Vagrantfile in the CWD. However, when I move this multi-machine definition to the embedded Vagrantfile, vagrant ignores it and creates a default VM, ignoring the named machine definitions.

I read the documentation, which doesn’t say anything concrete about this, only that multiple Vagrantfiles are merged before starting a vagrant box, and that some definitions in the Vagrantfile are added, and some do overwrite, which is not very descriptive.

My first question is if this is intended behaviour.
My second question is if there’s way to make vagrant execute a multi-machine setup with the definition in the embedded Vagrantfile, so that a user can use a simple default generated Vagrantfile.

Alvaro Miranda Aguilera

unread,
Mar 27, 2021, 1:44:33 PM3/27/21
to vagra...@googlegroups.com
Hello

Can you share a zip file with code and instructions ?

Thanks
Alvaro

--
This mailing list is governed under the HashiCorp Community Guidelines - https://www.hashicorp.com/community-guidelines.html. Behavior in violation of those guidelines may result in your removal from this mailing list.
 
GitHub Issues: https://github.com/hashicorp/vagrant/issues
Discuss: https://discuss.hashicorp.com/c/vagrant/24
---
You received this message because you are subscribed to the Google Groups "Vagrant" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vagrant-up+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/vagrant-up/2f2ecef8-a895-4b80-80a1-65aa6dc29f23n%40googlegroups.com.


--
Alvaro

Frits Hoogland

unread,
Mar 28, 2021, 6:43:58 AM3/28/21
to vagra...@googlegroups.com
Hi Alvaro! Thank you for taking the time and effort to look into this.
This box is meant to start up 3 virtual machines using vagrant.

The Vagrantfile that is created as part of init in the user current working directory essentially just points to the vagrant box, I don't believe there is a way to add content to that Vagrantfile automatically.
The embedded Vagrantfile is attached. 
The essence of the embedded Vagrantfile is to set variables, which can be modified by setting environment variables, after which there is a loop based on the variable replication_factor, which I put below:

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

  # all the nodes use an identical image.
  config.vm.box = "FritsHoogland/centos8-yb-rf3"

  # we use the same number of nodes as the replication factor.
  # for RF=3, we need 3 yb-master processes, for which we create a VM each.
  # each VM runs a yb-tserver process too, for which the number can be higher.
  (1..replication_factor.to_i).each do |vm_nr|
    config.vm.define "centos83-yb-#{vm_nr}" do |subconfig|
      subconfig.vm.hostname = "centos83-yb-#{vm_nr}.local"
      if ip_address[vm_nr] != 'no'
        subconfig.vm.network :private_network, ip: ip_address[vm_nr]
      end
      subconfig.vm.provider :virtualbox do |vb|
        vb.memory = memory_size
        vb.cpus = nr_cpus
        if add_disk == 'yes'
          data1_disk = "data1_vm#{vm_nr}.vdi"
          if !File.exist?(data1_disk)
            vb.customize [ 'createhd', '--filename', data1_disk, '--size', disk_size ]
          end
          vb.customize [ 'storageattach', :id, '--storagectl', 'SATA Controller', '--port', 2, '--device', 0, '--type', 'hdd', '--medium', data1_disk ]
        end
      end
      if replication_factor == "3"
        subconfig.vm.provision "master.conf:master_addresses", type: "shell", privileged: true, inline: "sed -i 's/\\(--master_addresses=\\)127.0.0.1:7100/\\1centos83-yb-1.local:7100,centos83-yb-2.local:7100,centos83-yb-3.local:7100/' /home/yb/master.conf"
        subconfig.vm.provision "master.conf:replication_factor", type: "shell", privileged: true, inline: "sed -i 's/\\(--replication_factor=\\)1/\\13/' /home/yb/master.conf"
        subconfig.vm.provision "tserver.conf:tserver_master_addrs", type: "shell", privileged: true, inline: "sed -i 's/\\(--tserver_master_addrs=\\)127.0.0.1:7100/\\1centos83-yb-1.local:7100,centos83-yb-2.local:7100,centos83-yb-3.local:7100/' /home/yb/tserver.conf"
        subconfig.vm.provision "etc_hosts", type: "shell", privileged: true, inline: add_hostnames_to_etc_hosts
      end
      # provisioning
      # if we find a blockdevice /dev/sdb, a disk is attached.
      subconfig.vm.provision "setup /dev/sdb", type: "shell", privileged: true, inline: partition_and_format
      if start_services == 'yes'
        subconfig.vm.provision "enable yb-master service", type: "shell", privileged: true, inline: "systemctl enable yb-master"
        subconfig.vm.provision "start yb-master service", type: "shell", privileged: true, inline: "systemctl start yb-master"
        subconfig.vm.provision "enable yb-tserver service", type: "shell", privileged: true, inline: "systemctl enable yb-tserver"
        subconfig.vm.provision "start yb-tserver service", type: "shell", privileged: true, inline: "systemctl start yb-tserver"
      end
    end
  end
end

This loop seems to be totally ignored when it's in the embedded Vagrantfile.
Currently, I am letting the users of this box copy the embedded Vagrantfile over the 'user vagrant file', after which it does get executed, and creates 3 nodes (the default value of replication_factor).
However, it would be great if I can do the heavy lifting like above in the embedded Vagrantfile, so the user is not bothered by all these details, and can just init a simple Vagrantfile and start it.

So the question is how to make constructions like above actually be executed in the embedded Vagrantfile?

Thank you,

Frits
Vagrantfile

Alvaro Miranda Aguilera

unread,
Apr 3, 2021, 6:03:34 AM4/3/21
to vagra...@googlegroups.com
Hello

I dont think this is posible.

If you create a vagrant file

and add these 3 lines

config.vm.define "box1"
config.vm.define "box2"
config.vm.define "box3"

on the local vagrantfile, the next time you run vagrant status it will show 3 box

but if you move those same 3 lines and a config block to the Vagrantfile of the box
~/.vagrant.d/boxes/<etc>

it wont work

So you could create a github issue with the feature request and see if development would give hints how to implement this

Thanks
Alvaro


--
This mailing list is governed under the HashiCorp Community Guidelines - https://www.hashicorp.com/community-guidelines.html. Behavior in violation of those guidelines may result in your removal from this mailing list.
 
GitHub Issues: https://github.com/hashicorp/vagrant/issues
Discuss: https://discuss.hashicorp.com/c/vagrant/24
---
You received this message because you are subscribed to the Google Groups "Vagrant" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vagrant-up+...@googlegroups.com.

--
This mailing list is governed under the HashiCorp Community Guidelines - https://www.hashicorp.com/community-guidelines.html. Behavior in violation of those guidelines may result in your removal from this mailing list.
 
GitHub Issues: https://github.com/hashicorp/vagrant/issues
Discuss: https://discuss.hashicorp.com/c/vagrant/24
---
You received this message because you are subscribed to the Google Groups "Vagrant" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vagrant-up+...@googlegroups.com.


--
Alvaro

Frits Hoogland

unread,
Apr 7, 2021, 7:09:49 AM4/7/21
to vagra...@googlegroups.com
Thank you Avaro. I created: Make vagrant honor a multi-machine definition in the embedded vagrantfile
I am really interested to hear the perspective of development on this.

Frits

-- 
This mailing list is governed under the HashiCorp Community Guidelines - https://www.hashicorp.com/community-guidelines.html. Behavior in violation of those guidelines may result in your removal from this mailing list.
 
GitHub Issues: https://github.com/hashicorp/vagrant/issues
Discuss: https://discuss.hashicorp.com/c/vagrant/24
--- 
You received this message because you are subscribed to the Google Groups "Vagrant" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vagrant-up+...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages