class Gantree::DeployVersion

Attributes

dockerrun_file[R]
packaged_version[R]

Public Class Methods

new(options, env) click to toggle source
# File lib/gantree/deploy_version.rb, line 10
def initialize options, env
  @options = options
  @ext = @options[:ext]
  @ext_role = @options[:ext_role]
  @project_root = @options[:project_root]
  @dockerrun_file = "#{@project_root}Dockerrun.aws.json"
  @env = env
end

Public Instance Methods

clean_up() click to toggle source
# File lib/gantree/deploy_version.rb, line 138
def clean_up
  puts "Cleaning up tmp files".yellow
  FileUtils.rm_rf @packaged_version if @packaged_version
  FileUtils.rm_rf("/tmp/#{@ext.split('/').last}") if File.directory?("/tmp/#{@ext.split('/').last}")
  FileUtils.rm_rf("/tmp/#{@ext_role.split('/').last}:#{get_role_type}") if @ext_role
  FileUtils.rm_rf("/tmp/merged_extensions/") if File.directory? "/tmp/merged_extensions/"
  puts "All tmp files removed".green
end
clone_repo(repo) click to toggle source
# File lib/gantree/deploy_version.rb, line 127
def clone_repo repo
  repo_name = repo.split('/').last
  FileUtils.mkdir("/tmp/#{repo_name}")
  if ext_branch? repo
    `git clone -b #{get_ext_branch repo} #{get_ext_repo repo} /tmp/#{repo_name}/`
  else
    `git clone #{get_ext_repo repo} /tmp/#{repo_name}/`
  end
  FileUtils.cp_r "/tmp/#{repo_name}/.", "/tmp/merged_extensions/.ebextensions/"
end
create_version_files() click to toggle source
# File lib/gantree/deploy_version.rb, line 64
def create_version_files
  clean_up
  version = "#{version_tag}-#{Time.now.strftime("%m-%d-%Y-%H-%M-%S")}"
  puts "version: #{version}"
  set_auth if @options[:auth]
  set_image_path if @options[:image_path]
  set_tag_to_deploy
  if File.directory?(".ebextensions/") || @ext || @ext_role
    zip = "#{@project_root}#{version}.zip"
    merge_extensions
    puts "The following files are being zipped".yellow
    system('ls -l /tmp/merged_extensions/.ebextensions/')
    Archive::Zip.archive(zip, ['/tmp/merged_extensions/.ebextensions/', "/tmp/#{@dockerrun_file}"])
    zip
  else
    new_dockerrun = "/tmp/#{version}-Dockerrun.aws.json"
    FileUtils.cp("/tmp/Dockerrun.aws.json", new_dockerrun)
    new_dockerrun
  end
end
docker() click to toggle source
# File lib/gantree/deploy_version.rb, line 23
def docker
  @docker ||= JSON.parse(IO.read(@dockerrun_file))  
end
ext?() click to toggle source
# File lib/gantree/deploy_version.rb, line 85
def ext?
  if @ext
    true
  else
    false
  end
end
ext_branch?(repo) click to toggle source
# File lib/gantree/deploy_version.rb, line 114
def ext_branch? repo
  if repo.count(":") == 2
    true
  else
    false
  end
end
get_ext_branch(repo) click to toggle source
# File lib/gantree/deploy_version.rb, line 122
def get_ext_branch repo
  branch = repo.match(/:.*(:.*)$/)[1]
  branch.tr(':','')
end
get_ext_repo(repo) click to toggle source
# File lib/gantree/deploy_version.rb, line 106
def get_ext_repo repo
  if ext_branch? repo
    repo.sub(":#{get_ext_branch repo}", '')
  else
    repo
  end
end
get_role_type() click to toggle source
# File lib/gantree/deploy_version.rb, line 154
def get_role_type
  @env.split('-')[2]
end
local_extensions?() click to toggle source
# File lib/gantree/deploy_version.rb, line 102
def local_extensions?
  File.directory?(".ebextensions/")
end
merge_extensions() click to toggle source
# File lib/gantree/deploy_version.rb, line 147
def merge_extensions
  FileUtils.mkdir("/tmp/merged_extensions/")
  FileUtils.mkdir("/tmp/merged_extensions/.ebextensions/")
  clone_repo @ext if @ext
  clone_repo "#{@ext_role}:#{get_role_type}" if @ext_role
  FileUtils.cp_r('.ebextensions/.','/tmp/merged_extensions/.ebextensions') if File.directory? ".ebextensions/"
end
repo?() click to toggle source
# File lib/gantree/deploy_version.rb, line 93
def repo?
  if @ext.include? "github"
    puts "Cloning: #{@ext}..."
    true
  else
    false
  end
end
run() click to toggle source
# File lib/gantree/deploy_version.rb, line 19
def run
  @packaged_version = create_version_files
end
set_auth() click to toggle source
# File lib/gantree/deploy_version.rb, line 27
def set_auth
  docker["Authentication"] = {}
  items = @options[:auth].split("/")
  bucket = items.shift
  key = items.join("/")
  docker["Authentication"]["Bucket"] = bucket
  docker["Authentication"]["Key"] = key
  IO.write("/tmp/#{@dockerrun_file}", JSON.pretty_generate(docker))
end
set_image_path() click to toggle source
# File lib/gantree/deploy_version.rb, line 51
def set_image_path
  image = docker["Image"]["Name"]
  image.gsub!(/(.*):/, "#{@options[:image_path]}:")
  path = "/tmp/#{@dockerrun_file}"
  FileUtils.mkdir_p(File.dirname(path)) unless File.exist?(path)
  IO.write(path, JSON.pretty_generate(docker))
  image
end
set_tag_to_deploy() click to toggle source
# File lib/gantree/deploy_version.rb, line 37
def set_tag_to_deploy
  image = docker["Image"]["Name"]
  token = image.split(":")
  if token.length == 3
    image = token[0] + (":") + token[1] + ":#{@options[:tag]}"
    docker["Image"]["Name"] = image
  elsif token.length == 2
    image.gsub!(/:(.*)$/, ":#{@options[:tag]}")
  else
    puts "Too many ':'".yellow
  end
  IO.write("/tmp/#{@dockerrun_file}", JSON.pretty_generate(docker))
end
version_tag() click to toggle source
# File lib/gantree/deploy_version.rb, line 60
def version_tag
  @options[:tag] || tag
end