# -*- mode: ruby -*- # vi: set ft=ruby : # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! VAGRANTFILE_API_VERSION = "2" # Require a recent version of vagrant otherwise some have reported errors setting host names on boxes Vagrant.require_version ">= 1.6.2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| if File.exist?('.vagrant-openshift.json') json = File.read('.vagrant-openshift.json') vagrant_openshift_config = JSON.parse(json) else vagrant_openshift_config = { "instance_name" => "origin-dev", "os" => "fedora", "dev_cluster" => false, "num_minions" => 2, "rebuild_yum_cache" => false, "virtualbox" => { "box_name" => "fedora_inst", "box_url" => "https://mirror.openshift.com/pub/vagrant/boxes/openshift3/fedora_20_virtualbox_inst.box" }, "vmware" => { "box_name" => "fedora_inst", "box_url" => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/vmware/opscode_fedora-20_chef-provisionerless.box" }, "aws" => { "ami" => "<AMI>", "ami_region" => "<AMI_REGION>", "ssh_user" => "<SSH_USER>", "machine_name" => "<AMI_NAME>" } } end if vagrant_openshift_config['dev_cluster'] || ENV['OPENSHIFT_DEV_CLUSTER'] # Start an OpenShift cluster # The number of minions to provision num_minion = (vagrant_openshift_config['num_minions'] || ENV['OPENSHIFT_NUM_MINIONS'] || 2).to_i # IP configuration master_ip = "10.245.1.2" minion_ip_base = "10.245.2." minion_ips = num_minion.times.collect { |n| minion_ip_base + "#{n+2}" } minion_ips_str = minion_ips.join(",") # Determine the OS platform to use kube_os = vagrant_openshift_config['os'] || "fedora" # OS platform to box information kube_box = { "fedora" => { "name" => "fedora20", "box_url" => "http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_fedora-20_chef-provisionerless.box" } } # OpenShift master config.vm.define "master" do |config| config.vm.box = kube_box[kube_os]["name"] config.vm.box_url = kube_box[kube_os]["box_url"] config.vm.provision "shell", inline: "/vagrant/vagrant/provision-master.sh #{master_ip} #{num_minion} #{minion_ips_str}" config.vm.network "private_network", ip: "#{master_ip}" config.vm.hostname = "openshift-master" end # OpenShift minion num_minion.times do |n| config.vm.define "minion-#{n+1}" do |minion| minion_index = n+1 minion_ip = minion_ips[n] minion.vm.box = kube_box[kube_os]["name"] minion.vm.box_url = kube_box[kube_os]["box_url"] minion.vm.provision "shell", inline: "/vagrant/vagrant/provision-minion.sh #{master_ip} #{num_minion} #{minion_ips_str} #{minion_ip} #{minion_index}" minion.vm.network "private_network", ip: "#{minion_ip}" minion.vm.hostname = "openshift-minion-#{minion_index}" end end else sync_from = vagrant_openshift_config['sync_from'] || ENV["VAGRANT_SYNC_FROM"] || '.' sync_to = vagrant_openshift_config['sync_to'] || ENV["VAGRANT_SYNC_TO"] || "/data/src/github.com/openshift/origin" # Single VM dev environment # Set VirtualBox provider settings config.vm.provider "virtualbox" do |v, override| override.vm.box = vagrant_openshift_config['virtualbox']['box_name'] override.vm.box_url = vagrant_openshift_config['virtualbox']['box_url'] v.memory = 1024 v.cpus = 2 v.customize ["modifyvm", :id, "--cpus", "2"] end # Set VMware Fusion provider settings config.vm.provider "vmware_fusion" do |v, override| override.vm.box = vagrant_openshift_config['vmware']['box_name'] override.vm.box_url = vagrant_openshift_config['vmware']['box_url'] override.vm.provision "shell", path: "hack/vm-provision-vmware.sh", id: "setup" v.vmx["memsize"] = "1024" v.vmx["numvcpus"] = "2" v.gui = false end # Set AWS provider settings config.vm.provider :aws do |aws, override| creds_file_path = ENV['AWS_CREDS'].nil? || ENV['AWS_CREDS'] == '' ? "~/.awscred" : ENV['AWS_CREDS'] if File.exist?(File.expand_path(creds_file_path)) aws_creds_file = Pathname.new(File.expand_path(creds_file_path)) aws_creds = aws_creds_file.exist? ? Hash[*(File.open(aws_creds_file.to_s).readlines.map{ |l| l.split('=') }.flatten.map{ |i| i.strip })] : {} override.vm.box = "dummy" override.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box" override.vm.synced_folder sync_from, sync_to, disabled: true override.ssh.username = vagrant_openshift_config['aws']['ssh_user'] override.ssh.private_key_path = aws_creds["AWSPrivateKeyPath"] || "PATH TO AWS KEYPAIR PRIVATE KEY" aws.access_key_id = aws_creds["AWSAccessKeyId"] || "AWS ACCESS KEY" aws.secret_access_key = aws_creds["AWSSecretKey"] || "AWS SECRET KEY" aws.keypair_name = aws_creds["AWSKeyPairName"] || "AWS KEYPAIR NAME" aws.ami = vagrant_openshift_config['aws']['ami'] aws.region = vagrant_openshift_config['aws']['ami_region'] aws.instance_type = "m3.large" aws.instance_ready_timeout = 240 aws.tags = { "Name" => vagrant_openshift_config['instance_name'] } aws.user_data = %{ #cloud-config growpart: mode: auto devices: ['/'] runcmd: - [ sh, -xc, "echo 'Defaults:#{vagrant_openshift_config['aws']['ssh_user']} \!requiretty' >> /etc/sudoers"] } aws.block_device_mapping = [ { "DeviceName" => "/dev/sda1", "Ebs.VolumeSize" => 25, "Ebs.VolumeType" => "standard" } ] end end config.vm.define "openshiftdev", primary: true do |config| config.vm.hostname = "openshiftdev.local" if vagrant_openshift_config['rebuild_yum_cache'] config.vm.provision "shell", inline: "yum clean all && yum makecache" end config.vm.provision "shell", path: "hack/vm-provision.sh", id: "setup" config.vm.synced_folder ".", "/vagrant", disabled: true config.vm.synced_folder sync_from, sync_to end end end