num_workers = 3 nodes = [ { hostname: 'swarm-master', ip: '192.168.56.10', ram: 1024, cpus: 1, groups: ['swarm_master'] }, { hostname: 'swarm-worker-storage', ip: '192.168.56.11', ram: 512, cpus: 1, groups: ['swarm_workers','storage'] } ] (1..num_workers).each do |i| nodes << { hostname: "swarm-worker-#{i}", ip: "192.168.56.#{11 + i}", ram: 256, cpus: 1, groups: ['swarm_workers'] } end Vagrant.configure('2') do |config| # config.vbguest.auto_update = true groups = {} nodes.each do |node| node[:groups].each do |group| groups[group] ||= [] groups[group] << node[:hostname] end end config.vm.provision 'ansible' do |ansible| ansible.playbook = 'setup.yml' ansible.config_file = 'ansible.cfg' ansible.groups = groups # ansible.verbose = true # ansible.limit = "all" # ansible.raw_arguments = ["--timeout=60"] end nodes.each do |node| puts "Provisioning node: #{node[:hostname]}" config.vm.define node[:hostname] do |node_config| node_config.vm.hostname = node[:hostname] node_config.vm.box = 'debian/bullseye64' # node_config.vm.box = 'generic/archlinux64' # node_config.vm.box_version = "20250415.336224" node_config.vm.network 'private_network', ip: node[:ip] node_config.vm.provider 'virtualbox' do |vb| vb.name = node[:hostname] vb.memory = node[:ram] vb.cpus = node[:cpus] end end end end