github.com/mattyr/nomad@v0.3.3-0.20160919021406-3485a065154a/Vagrantfile (about) 1 # -*- mode: ruby -*- 2 # vi: set ft=ruby : 3 4 # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! 5 VAGRANTFILE_API_VERSION = "2" 6 7 DEFAULT_CPU_COUNT = 2 8 $script = <<SCRIPT 9 GO_VERSION="1.7.1" 10 11 # Install Prereq Packages 12 sudo apt-get update 13 sudo apt-get install -y build-essential curl git-core mercurial bzr libpcre3-dev pkg-config zip default-jre qemu libc6-dev-i386 silversearcher-ag jq htop vim unzip 14 15 # Setup go, for development of Nomad 16 SRCROOT="/opt/go" 17 SRCPATH="/opt/gopath" 18 19 # Get the ARCH 20 ARCH=`uname -m | sed 's|i686|386|' | sed 's|x86_64|amd64|'` 21 22 # Install Go 23 cd /tmp 24 wget -q https://storage.googleapis.com/golang/go${GO_VERSION}.linux-${ARCH}.tar.gz 25 tar -xf go${GO_VERSION}.linux-${ARCH}.tar.gz 26 sudo mv go $SRCROOT 27 sudo chmod 775 $SRCROOT 28 sudo chown vagrant:vagrant $SRCROOT 29 30 # Setup the GOPATH; even though the shared folder spec gives the working 31 # directory the right user/group, we need to set it properly on the 32 # parent path to allow subsequent "go get" commands to work. 33 sudo mkdir -p $SRCPATH 34 sudo chown -R vagrant:vagrant $SRCPATH 2>/dev/null || true 35 # ^^ silencing errors here because we expect this to fail for the shared folder 36 37 cat <<EOF >/tmp/gopath.sh 38 export GOPATH="$SRCPATH" 39 export GOROOT="$SRCROOT" 40 export PATH="$SRCROOT/bin:$SRCPATH/bin:\$PATH" 41 EOF 42 sudo mv /tmp/gopath.sh /etc/profile.d/gopath.sh 43 sudo chmod 0755 /etc/profile.d/gopath.sh 44 source /etc/profile.d/gopath.sh 45 46 # Install Docker 47 echo deb https://apt.dockerproject.org/repo ubuntu-`lsb_release -c | awk '{print $2}'` main | sudo tee /etc/apt/sources.list.d/docker.list 48 sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D 49 sudo apt-get update 50 sudo apt-get install -y docker-engine 51 52 # Restart docker to make sure we get the latest version of the daemon if there is an upgrade 53 sudo service docker restart 54 55 # Make sure we can actually use docker as the vagrant user 56 sudo usermod -aG docker vagrant 57 58 # Setup Nomad for development 59 cd /opt/gopath/src/github.com/hashicorp/nomad && make bootstrap 60 61 # Install rkt, consul and vault 62 bash scripts/install_rkt.sh 63 bash scripts/install_consul.sh 64 bash scripts/install_vault.sh 65 66 # CD into the nomad working directory when we login to the VM 67 grep "cd /opt/gopath/src/github.com/hashicorp/nomad" ~/.profile || echo "cd /opt/gopath/src/github.com/hashicorp/nomad" >> ~/.profile 68 SCRIPT 69 70 def configureVM(vmCfg, vmParams={ 71 numCPUs: DEFAULT_CPU_COUNT, 72 } 73 ) 74 vmCfg.vm.box = "cbednarski/ubuntu-1404" 75 76 vmCfg.vm.provision "shell", inline: $script, privileged: false 77 vmCfg.vm.synced_folder '.', '/opt/gopath/src/github.com/hashicorp/nomad' 78 79 # We're going to compile go and run a concurrent system, so give ourselves 80 # some extra resources. Nomad will have trouble working correctly with <2 81 # CPUs so we should use at least that many. 82 cpus = vmParams.fetch(:numCPUs, DEFAULT_CPU_COUNT) 83 memory = 2048 84 85 vmCfg.vm.provider "parallels" do |p, o| 86 o.vm.box = "parallels/ubuntu-14.04" 87 p.memory = memory 88 p.cpus = cpus 89 end 90 91 vmCfg.vm.provider "virtualbox" do |v| 92 v.memory = memory 93 v.cpus = cpus 94 end 95 96 ["vmware_fusion", "vmware_workstation"].each do |p| 97 vmCfg.vm.provider p do |v| 98 v.gui = false 99 v.memory = memory 100 v.cpus = cpus 101 end 102 end 103 return vmCfg 104 end 105 106 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 107 1.upto(3) do |n| 108 vmName = "nomad-server%02d" % [n] 109 isFirstBox = (n == 1) 110 111 numCPUs = DEFAULT_CPU_COUNT 112 if isFirstBox and Object::RUBY_PLATFORM =~ /darwin/i 113 # Override the max CPUs for the first VM 114 numCPUs = [numCPUs, (`/usr/sbin/sysctl -n hw.ncpu`.to_i - 1)].max 115 end 116 117 config.vm.define vmName, autostart: isFirstBox, primary: isFirstBox do |vmCfg| 118 vmCfg.vm.hostname = vmName 119 vmCfg = configureVM(vmCfg, {:numCPUs => numCPUs}) 120 end 121 end 122 123 1.upto(3) do |n| 124 vmName = "nomad-client%02d" % [n] 125 config.vm.define vmName, autostart: false, primary: false do |vmCfg| 126 vmCfg.vm.hostname = vmName 127 vmCfg = configureVM(vmCfg) 128 end 129 end 130 end