# -*- mode: ruby -*-
# vi: set ft=ruby :

domain = 'demo.example42.com'
puppetserver = 'puppet' + '.' + domain
codedir = '/etc/puppetlabs/code/environments/production/'

puppet_nodes = [
  {:hostname => 'puppet', :ip => '192.168.33.10', :memory => '4096', :cpus => '2', :provision_script => 'setup_puppetserver.sh', :sync_folders => { :manifests => 'manifests', :modules => 'modules'} },
  {:hostname => 'mysql', :ip => '192.168.33.20', :memory => '512', :cpus => '1', :provision_script => 'setup_puppetagent.sh' },
  {:hostname => 'web01', :ip => '192.168.33.31', :memory => '512', :cpus => '1', :provision_script => 'setup_puppetagent.sh' },
  {:hostname => 'proxy', :ip => '192.168.33.40', :memory => '128', :cpus => '1', :provision_script => 'setup_puppetagent.sh', :port_fwd => { :guest => '80', :host => '8080'} },
]

Vagrant.configure(2) do |config|
  config.vm.box = "puppetlabs/debian-8.2-64-nocm"
  config.vm.provision :hosts, :sync_hosts => true

  puppet_nodes.each do |node|
    config.vm.define node[:hostname] do |node_config|
      node_config.vm.hostname = node[:hostname] + '.' + domain
      node_config.vm.network :private_network, ip: node[:ip]
      node_config.vm.provider :virtualbox do |vb|
        vb.memory = node[:memory]
        vb.cpus = node[:cpus]
      end
      if node[:sync_folders]
        node[:sync_folders].each do |key, value|
          node_config.vm.synced_folder key.to_s, codedir + value
        end
      end
      if node[:port_fwd]
        node_config.vm.network :forwarded_port, guest: node[:port_fwd][:guest], host: node[:port_fwd][:host]
      end
      node_config.vm.provision :shell do |ps|
        ps.path = node[:provision_script]
      end
      node_config.vm.provision :puppet_server do |puppet|
        puppet.puppet_server = puppetserver
      end

    end
  end
end
