# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
# 
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# -*- mode: ruby -*-
# vi: set ft=ruby :

SLAVES=1
NET_PREFIX="192.168.25."

NODES={"master" => NET_PREFIX + "5"}
(0..SLAVES-1).each do |i| NODES["slave#{i}"] = NET_PREFIX + (6 + i).to_s end

# create hosts
File.open('.vagrant/hosts', 'w') do |file|
  file.write("127.0.0.1\tlocalhost\n")
  file.write("\n# cluster nodes\n")
  NODES.each do |name, ip| file.write("#{ip}\t#{name}\n") end
end

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.synced_folder "../", "/vagrant"

  config.vm.define "master" do |master|
    master.vm.provider "virtualbox" do |v|
      v.memory = 4096
    end

    master.vm.hostname = "master"
    master.vm.network :private_network, ip: NODES["master"]

    master.vm.provision "shell", path: "init.sh", args: "master"
  end

  (0..SLAVES-1).each do |i|
    config.vm.define "slave#{i}" do |slave|
      slave.vm.provider "virtualbox" do |v|
        v.memory = 2048
        v.cpus = 2
      end

      slave.vm.hostname = "slave#{i}"
      slave.vm.network :private_network, ip: NODES[slave.vm.hostname]

      slave.vm.provision "shell", path: "init.sh", args: "slave"
    end
  end
end
