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