Class: EbDeployer::Application

Inherits:
Object
  • Object
show all
Defined in:
lib/eb_deployer/application.rb

Instance Method Summary collapse

Constructor Details

#initialize(name, eb_driver, s3_driver, bucket = nil) ⇒ Application

Returns a new instance of Application.



3
4
5
6
7
8
9
# File 'lib/eb_deployer/application.rb', line 3

def initialize(name, eb_driver, s3_driver, bucket = nil)
  @name = name
  @eb_driver = eb_driver
  @s3_driver = s3_driver
  @bucket = bucket
  raise "application name can only contain any combination of uppercase letters, lowercase letters, numbers, dashes (-)" unless @name =~ /^[a-zA-Z0-9.-]+$/
end

Instance Method Details

#create_version(version_label, package) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/eb_deployer/application.rb', line 11

def create_version(version_label, package)
  create_application_if_not_exists

  source_bundle = if File.exists?(package)
                    if File.extname(package) == '.yml'
                      YAML.load(File.read(package))
                    else
                      package = Package.new(package, @bucket + ".packages", @s3_driver)
                      package.upload
                      package.source_bundle
                    end
                  elsif package =~ /:/
                    bucket, obj_key = package.split(':')
                    {'s3_bucket' => bucket, 's3_key' => obj_key}
                  else
                    raise "Unknown package file/format: #{package.inspect}"
                  end

  unless @eb_driver.application_version_labels(@name).include?(version_label)
    log("Create application version with label #{version_label}")
    @eb_driver.create_application_version(@name, version_label, source_bundle)
  end
end

#delete(env_name = nil) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/eb_deployer/application.rb', line 35

def delete(env_name=nil)
  if @eb_driver.application_exists?(@name)
    env_name = Environment.unique_ebenv_name(@name, env_name) unless env_name.nil?
    available_envs = @eb_driver.environment_names_for_application(@name)

    unless env_name.nil? || available_envs.include?(env_name)
      log("Environment #{env_name.inspect} does not exist in application #{@name.inspect}. Skipping delete.")
      return
    end

    available_envs.select { |e| env_name.nil? || e == env_name }.each do |env|
      log("Terminating environment #{env}")
      @eb_driver.delete_environment(@name, env)
    end

    if env_name.nil?
      log("Deleting application")
      @eb_driver.delete_application(@name)
    end
  end
end

#remove(versions, delete_from_s3) ⇒ Object



67
68
69
70
71
72
73
74
75
76
# File 'lib/eb_deployer/application.rb', line 67

def remove(versions, delete_from_s3)
  versions.each do |version|
    begin
      log("Removing #{version}")
      @eb_driver.delete_application_version(@name, version, delete_from_s3)
    rescue AWS::ElasticBeanstalk::Errors::SourceBundleDeletionFailure => e
      log(e.message)
    end
  end
end

#versions ⇒ Object



57
58
59
60
61
62
63
64
65
# File 'lib/eb_deployer/application.rb', line 57

def versions
  @eb_driver.application_versions(@name).map do |apv|
    {
      :version => apv[:version_label],
      :date_created => apv[:date_created],
      :date_updated => apv[:date_updated]
    }
  end
end