Class: EbDeployer::Application

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

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

Returns a new instance of Application.



6
7
8
9
10
11
12
# File 'lib/eb_deployer/application.rb', line 6

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

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



4
5
6
# File 'lib/eb_deployer/application.rb', line 4

def name
  @name
end

Instance Method Details

#clean_versions(version_prefix, retentions) ⇒ Object



79
80
81
# File 'lib/eb_deployer/application.rb', line 79

def clean_versions(version_prefix, retentions)
  VersionCleaner.new(self, retentions).clean(version_prefix)
end

#create_version(version_label, package) ⇒ Object



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

def create_version(version_label, package)
  create_application_if_not_exists

  source_bundle = if File.exist?(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 "Neither the file exists nor it is a valid s3 url: #{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_prefix) ⇒ Object



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

def delete(env_name_prefix)
  if @eb_driver.application_exists?(@name)
    available_envs = @eb_driver.environment_names_for_application(@name).select do |name|
      name =~ /^#{env_name_prefix}-/
    end

    if available_envs.empty?
      log("Environment #{env_name_prefix.inspect} does not exist in application #{@name.inspect}. Skipping delete.")
      return
    end

    available_envs.each do |env|
      log("Terminating environment #{env}")
      @eb_driver.delete_environment(@name, env)
    end
  end
end

#remove(versions, delete_from_s3) ⇒ Object



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

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)
    rescue Aws::ElasticBeanstalk::Errors::OperationInProgressFailure => e
      log(e.message)
    end
  end
end

#versionsObject



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

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