blob: e3898d0202bba72b6f81c068d0abcd28fa1a42dd [file] [log] [blame]
# 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.
require 'yaml'
# Because of linked_clone. 1.9+ recommended for Ubuntu Xenial
Vagrant.require_version ">= 1.8"
module CustomProviders
@@providers = []
def register(&fn)
@@providers << fn
end
def configure(config, machine_config)
@@providers.each do |provider|
provider.call(config, machine_config)
end
end
module_function :register
module_function :configure
end
Dir[Dir.home() + '/.jclouds/vagrant/providers/*.rb'].each do |file|
require File.dirname(file) + "/" + File.basename(file, '.rb')
end
Vagrant.configure(2) do |config|
Dir.glob('machines/*.yaml') do |machine_file|
machine_config = YAML.load_file(machine_file)
name = File.basename(machine_file, ".yaml")
config.vm.define name do |config|
config.vm.box = machine_config["box"]
config.vm.box_check_update = false
config.vm.network "private_network", type: "dhcp"
config.vm.synced_folder '.', '/vagrant', disabled: true
config.ssh.username = machine_config["username"] if machine_config.key?("username")
config.ssh.password = machine_config["password"] if machine_config.key?("password")
config.ssh.private_key_path = machine_config["private_key_path"] if machine_config.key?("private_key_path")
isWindows = (machine_config["osFamily"] == "windows");
if isWindows
# That's a Powershell script.
# Go through a temporary file, otherwise getting the following error:
# out-lineoutput : The OS handle's position is not what FileStream expected. Do n
# ot use a handle simultaneously in one FileStream and in Win32 code or another F
# ileStream. This may cause data loss.
# + CategoryInfo : NotSpecified: (:) [out-lineoutput], IOException
# + FullyQualifiedErrorId : System.IO.IOException,Microsoft.PowerShell.Comma
# nds.OutLineOutputCommand
config.vm.provision "shell", inline: <<-EOF
$tmp = [System.IO.Path]::GetTempFileName()
echo "================= Networks start =================" > $tmp
ipconfig | find "IPv4 Address" >> $tmp 2>&1
echo "================= Networks end ===================" >> $tmp
echo "================= Hostname start ==========================" >> $tmp
hostname >> $tmp 2>&1
echo "================= Hostname end ============================" >> $tmp
type $tmp
EOF
else
config.vm.provision "shell", inline: <<-EOF
echo "================= Networks start ================="
ip address show | grep 'scope global' 2>&1
echo "================= Networks end ==================="
echo "================= Hostname start =========================="
hostname 2>&1
echo "================= Hostname end ============================"
EOF
end
config.vm.provider "virtualbox" do |v|
v.gui = false
v.memory = machine_config["memory"] if machine_config.key?("memory")
v.cpus = machine_config["cpus"] if machine_config.key?("cpus")
v.linked_clone = true
# Windows needs additional drivers for virtio and the default one is dreadfully slow on linux
if !isWindows
v.customize ["modifyvm", :id, "--nictype1", "virtio"]
v.customize ["modifyvm", :id, "--nictype2", "virtio"]
end
end
config.vm.provider "libvirt" do |v|
v.memory = machine_config["memory"] if machine_config.key?("memory")
v.cpus = machine_config["cpus"] if machine_config.key?("cpus")
end
CustomProviders.configure(config, machine_config)
end
end
end