class MesosDeploy

Public Class Methods

new(release, file = nil) click to toggle source
# File lib/mesos-deploy.rb, line 10
def initialize(release, file = nil)
  path = File.join(Dir.pwd, "mesos-deploy.yml")
  if !!file
    @config = YAML.load_file(file)
  elsif File.exists? (path)
    @config = YAML.load_file(path)
  else
    raise ArgumentError.new("No mesos-deploy.yml file found.")
  end

  if !valid_release?(release)
    raise ArgumentError.new("Invalid release number given.")
  end

  if !@config['repo']
    raise ArgumentError.new("YML file given has no repo defined.")
  end

  @release = release
  @repo = @config['repo']
  if @config['singularity_url']
    @singularity_url = @config['singularity_url']
  end
  if @config['marathons']
    @marathon_url = @config['marathon']['url']
    @marathon_user = @config['marathon']['user']
    @marathon_password = @config['marathon']['password']
    @marathons = @config['marathons']
  end
end

Public Instance Methods

deploy_singularity() click to toggle source
# File lib/mesos-deploy.rb, line 41
def deploy_singularity
  path = File.join(Dir.pwd, 'singularity')
  Dir["#{path}/*.json"].each do |file|
    Singularity::Deployer.new(@singularity_url, file, @release).deploy
  end
end
run() click to toggle source
# File lib/mesos-deploy.rb, line 62
def run
  # singularity deploy if necessary
  if !!@singularity_url
    deploy_singularity
  end

  # marathon deploy if necessary
  docker_image = "#{@repo}:#{@release}"
  if !!@marathons
    @marathons.each do |app_id|
      cmd = "haile -R #{@marathon_url} -U #{@marathon_user} -P #{@marathon_password} docker_deploy -i #{app_id} -d #{docker_image}"
      system(cmd)
    end
  end

  # update mescal configuration
  if File.exists?(File.join(Dir.pwd, ".mescal.json"))
    update_mescal_config(docker_image)
  end
end
update_mescal_config(image) click to toggle source
# File lib/mesos-deploy.rb, line 48
def update_mescal_config(image)
  # Update mescal config file revision
  config = JSON.parse(File.read(".mescal.json"))
  config['image'] = image
  File.open(".mescal.json", 'w') { |config_file| config_file.puts(JSON.dump(config)) }

  puts "Updating .mescal.json".yellow
  system("git add .mescal.json && git commit -m \"update .mescal.json [skip build]\" && git push origin `git rev-parse --abbrev-ref HEAD`")
end
valid_release?(release) click to toggle source
# File lib/mesos-deploy.rb, line 58
def valid_release?(release)
  !!release && release =~ /r([0-9]*)/
end