class Deployer
Attributes
account[RW]
artifact[RW]
config[RW]
deploy_all[RW]
environments[RW]
lambda[RW]
project[RW]
project_path[RW]
Public Class Methods
new(deploy_all, project_path, account, artifact=nil, lambda=nil)
click to toggle source
# File lib/deployer.rb, line 14 def initialize(deploy_all, project_path, account, artifact=nil, lambda=nil) @deploy_all = deploy_all @project_path = project_path @account = account @project = Project.new("#{project_path}") @config = set_config @artifact = artifact @lambda = lambda end
Public Instance Methods
archive_project(environment)
click to toggle source
# File lib/deployer.rb, line 99 def archive_project(environment) FileUtils.mkpath("#{project_path}/.history/") FileUtils.copy_entry("#{project_path}/config","#{project_path}/.history/config") FileUtils.copy_entry("#{project_path}/environments/#{environment}.yaml","#{project_path}/.history/environments/#{environment}.yaml") end
construct_s3_key(properties, env)
click to toggle source
# File lib/deployer.rb, line 91 def construct_s3_key(properties, env) if properties['s3_key'] return properties['s3_key'] else return "#{config['environments'][env]['base_path']}/#{properties['artifact_name']}-#{properties['version']}.#{properties['extension']}" end end
deploy(environments)
click to toggle source
# File lib/deployer.rb, line 48 def deploy(environments) account_env_map = project.account_env_map[account] env_region_map = project.env_region_map #Filter by account as the primary owner of envs lambda_env_map = project.get_lambdas unless deploy_all lambda_env_map = diff_projects(lambda_env_map) if lambda_env_map.empty? puts "No lambdas have been changed, skipping deploy" return end end lambda_env_map = get_deployable_lambdas(lambda_env_map) environments ||= project.environments account_env_map.each do |env| #IF users has specified environments, skip if the environment is not a user specified one next unless !environments.nil? && environments.include?(env) && !lambda_env_map[env].nil? lambda_env_map[env].each do |lambda_name, properties| client = Client.new(env_region_map[env]) s3_bucket = get_s3_bucket(properties, env) s3_key = construct_s3_key(properties, env) puts "ENV: #{env}" puts "Lambda Name: #{lambda_name}" puts "S3 Bucket: #{s3_bucket}" puts "S3 Key: #{s3_key}" client.update_function_code(lambda_name,s3_bucket,s3_key) end archive_project(env) end end
diff_projects(new_project)
click to toggle source
# File lib/deployer.rb, line 110 def diff_projects(new_project) historic = parse_archive historic.each do |environment, lambdas| lambdas.each do |lambda, configs| next if new_project[environment][lambda].nil? if new_project[environment][lambda].has_key?('sha1') if configs.has_key?('sha1') && (configs['sha1'] == new_project[environment][lambda]['sha1']) new_project[environment].delete(lambda) end elsif new_project[environment][lambda].eql?(configs) new_project[environment].delete(lambda) end end #Delete empty environments as no lambdas changed so they all removed from bing deployable new_project.delete(environment) if new_project[environment].empty? end new_project end
get_deployable_lambdas(lambda_env_map)
click to toggle source
# File lib/deployer.rb, line 28 def get_deployable_lambdas(lambda_env_map) if artifact lambda_env_map.each do |env, lambdas| lambdas.each do |lambda_name, properties| lambdas.delete(lambda_name) unless properties['artifact_name'] == artifact end end end if lambda lambda_env_map.each do |env, lambdas| lambdas.each do |lambda_name, properties| lambdas.delete(lambda_name) unless lambda_name == lambda end end end lambda_env_map end
get_s3_bucket(properties, env)
click to toggle source
# File lib/deployer.rb, line 82 def get_s3_bucket(properties, env) if properties['s3_bucket'] return properties['s3_bucket'] else return config['environments'][env]['s3_bucket'] end end
parse_archive()
click to toggle source
# File lib/deployer.rb, line 105 def parse_archive archived_project = Project.new("#{project_path}/.history/") archived_project.get_lambdas end
set_config()
click to toggle source
# File lib/deployer.rb, line 24 def set_config @project.config end