# -*- mode: ruby -*-
# vi: set ft=ruby :

BOX_NAME = "docker-ci"
BOX_URI = "http://cloud-images.ubuntu.com/vagrant/raring/current/raring-server-cloudimg-amd64-vagrant-disk1.box"
AWS_AMI = "ami-10314d79"
DOCKER_PATH = "/data/docker"
CFG_PATH = "#{DOCKER_PATH}/testing/buildbot"
on_vbox = File.file?("#{File.dirname(__FILE__)}/.vagrant/machines/default/virtualbox/id") | \
  Dir.glob("#{File.dirname(__FILE__)}/.vagrant/machines/default/*/id").empty? & \
  (on_vbox=true; ARGV.each do |arg| on_vbox &&= !arg.downcase.start_with?("--provider") end; on_vbox)
USER = on_vbox ? "vagrant": "ubuntu"

Vagrant::Config.run do |config|
  # Setup virtual machine box. This VM configuration code is always executed.
  config.vm.box = BOX_NAME
  config.vm.box_url = BOX_URI
  config.vm.forward_port 8010, 8010
  config.vm.share_folder "v-data", DOCKER_PATH, "#{File.dirname(__FILE__)}/.."


  # Deploy buildbot and its dependencies if it was not done
  if Dir.glob("#{File.dirname(__FILE__)}/.vagrant/machines/default/*/id").empty?
    # Add memory limitation capabilities
    pkg_cmd = 'sed -Ei \'s/^(GRUB_CMDLINE_LINUX_DEFAULT)=.+/\\1="cgroup_enable=memory swapaccount=1 quiet"/\' /etc/default/grub; '
    # Adjust kernel
    pkg_cmd << "apt-get update -qq; "
    if on_vbox
      pkg_cmd << "apt-get install -q -y linux-image-extra-`uname -r`; "
    else
      pkg_cmd << "apt-get install -q -y linux-image-generic; "
    end

    # Deploy buildbot CI
    pkg_cmd << "apt-get install -q -y python-dev python-pip supervisor; " \
      "pip install -r #{CFG_PATH}/requirements.txt; " \
      "chown #{USER}.#{USER} /data; cd /data; " \
      "#{CFG_PATH}/setup.sh #{USER} #{CFG_PATH} #{ENV['BUILDBOT_PWD']} " \
        "#{ENV['IRC_PWD']} #{ENV['IRC_CHANNEL']} #{ENV['SMTP_USER']} " \
        "#{ENV['SMTP_PWD']} #{ENV['EMAIL_RCP']}; " \
      "#{CFG_PATH}/setup_credentials.sh #{USER} " \
        "#{ENV['REGISTRY_USER']} #{ENV['REGISTRY_PWD']}; "
    # Install docker and testing dependencies
    pkg_cmd << "curl -s https://go.googlecode.com/files/go1.1.2.linux-amd64.tar.gz | " \
      "  tar -v -C /usr/local -xz; ln -s /usr/local/go/bin/go /usr/bin/go; " \
      "curl -s https://phantomjs.googlecode.com/files/phantomjs-1.9.1-linux-x86_64.tar.bz2 | " \
      "  tar jx -C /usr/bin --strip-components=2 phantomjs-1.9.1-linux-x86_64/bin/phantomjs; " \
      "DEBIAN_FRONTEND=noninteractive apt-get install -q -y lxc git mercurial aufs-tools make libfontconfig; " \
      "export GOPATH=/data/docker-dependencies; go get -d github.com/dotcloud/docker; " \
      "rm -rf ${GOPATH}/src/github.com/dotcloud/docker; "
    # Activate new kernel options
    pkg_cmd << "shutdown -r +1; "
    config.vm.provision :shell, :inline => pkg_cmd
  end
end

# Providers were added on Vagrant >= 1.1.0
Vagrant::VERSION >= "1.1.0" and Vagrant.configure("2") do |config|
  config.vm.provider :aws do |aws, override|
    aws.tags = { 'Name' => 'docker-ci' }
    aws.access_key_id = ENV["AWS_ACCESS_KEY_ID"]
    aws.secret_access_key = ENV["AWS_SECRET_ACCESS_KEY"]
    aws.keypair_name = ENV["AWS_KEYPAIR_NAME"]
    override.ssh.private_key_path = ENV["AWS_SSH_PRIVKEY"]
    override.ssh.username = USER
    aws.ami = AWS_AMI
    aws.region = "us-east-1"
    aws.instance_type = "m1.small"
    aws.security_groups = "gateway"
  end

  config.vm.provider :virtualbox do |vb|
  end
end
