github.com/maier/nomad@v0.4.1-0.20161110003312-a9e3d0b8549d/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 liblxc1 lxc-dev 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_rkt_vagrant.sh 64 bash scripts/install_consul.sh 65 bash scripts/install_vault.sh 66 67 # CD into the nomad working directory when we login to the VM 68 grep "cd /opt/gopath/src/github.com/hashicorp/nomad" ~/.profile || echo "cd /opt/gopath/src/github.com/hashicorp/nomad" >> ~/.profile 69 SCRIPT 70 71 def configureVM(vmCfg, vmParams={ 72 numCPUs: DEFAULT_CPU_COUNT, 73 } 74 ) 75 vmCfg.vm.box = "cbednarski/ubuntu-1404" 76 77 vmCfg.vm.provision "shell", inline: $script, privileged: false 78 vmCfg.vm.synced_folder '.', '/opt/gopath/src/github.com/hashicorp/nomad' 79 80 # We're going to compile go and run a concurrent system, so give ourselves 81 # some extra resources. Nomad will have trouble working correctly with <2 82 # CPUs so we should use at least that many. 83 cpus = vmParams.fetch(:numCPUs, DEFAULT_CPU_COUNT) 84 memory = 2048 85 86 vmCfg.vm.provider "parallels" do |p, o| 87 o.vm.box = "parallels/ubuntu-14.04" 88 p.memory = memory 89 p.cpus = cpus 90 end 91 92 vmCfg.vm.provider "virtualbox" do |v| 93 v.memory = memory 94 v.cpus = cpus 95 end 96 97 ["vmware_fusion", "vmware_workstation"].each do |p| 98 vmCfg.vm.provider p do |v| 99 v.gui = false 100 v.memory = memory 101 v.cpus = cpus 102 end 103 end 104 return vmCfg 105 end 106 107 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 108 1.upto(3) do |n| 109 vmName = "nomad-server%02d" % [n] 110 isFirstBox = (n == 1) 111 112 numCPUs = DEFAULT_CPU_COUNT 113 if isFirstBox and Object::RUBY_PLATFORM =~ /darwin/i 114 # Override the max CPUs for the first VM 115 numCPUs = [numCPUs, (`/usr/sbin/sysctl -n hw.ncpu`.to_i - 1)].max 116 end 117 118 config.vm.define vmName, autostart: isFirstBox, primary: isFirstBox do |vmCfg| 119 vmCfg.vm.hostname = vmName 120 vmCfg = configureVM(vmCfg, {:numCPUs => numCPUs}) 121 end 122 end 123 124 1.upto(3) do |n| 125 vmName = "nomad-client%02d" % [n] 126 config.vm.define vmName, autostart: false, primary: false do |vmCfg| 127 vmCfg.vm.hostname = vmName 128 vmCfg = configureVM(vmCfg) 129 end 130 end 131 end