eb_deployer 0.4.4.beta4 → 0.4.4.beta5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/eb_deployer.rb +3 -1
 - data/lib/eb_deployer/eb_environment.rb +3 -1
 - data/lib/eb_deployer/event_poller.rb +1 -3
 - data/lib/eb_deployer/throttling_handling.rb +17 -0
 - data/lib/eb_deployer/version.rb +1 -1
 - data/test/aws_driver_stubs.rb +28 -3
 - data/test/deploy_test.rb +1 -0
 - data/test/inplace_update_deploy_test.rb +11 -1
 - data/test/test_helper.rb +1 -1
 - metadata +3 -2
 
    
        data/lib/eb_deployer.rb
    CHANGED
    
    | 
         @@ -15,6 +15,7 @@ require 'eb_deployer/deployment_strategy' 
     | 
|
| 
       15 
15 
     | 
    
         
             
            require 'eb_deployer/cloud_formation_provisioner'
         
     | 
| 
       16 
16 
     | 
    
         
             
            require 'eb_deployer/application'
         
     | 
| 
       17 
17 
     | 
    
         
             
            require 'eb_deployer/resource_stacks'
         
     | 
| 
      
 18 
     | 
    
         
            +
            require 'eb_deployer/throttling_handling'
         
     | 
| 
       18 
19 
     | 
    
         
             
            require 'eb_deployer/eb_environment'
         
     | 
| 
       19 
20 
     | 
    
         
             
            require 'eb_deployer/environment'
         
     | 
| 
       20 
21 
     | 
    
         
             
            require 'eb_deployer/default_component'
         
     | 
| 
         @@ -175,6 +176,7 @@ module EbDeployer 
     | 
|
| 
       175 
176 
     | 
    
         
             
                bs = opts[:bs_driver] || AWSDriver::Beanstalk.new
         
     | 
| 
       176 
177 
     | 
    
         
             
                s3 = opts[:s3_driver] || AWSDriver::S3Driver.new
         
     | 
| 
       177 
178 
     | 
    
         
             
                cf = opts[:cf_driver] || AWSDriver::CloudFormationDriver.new
         
     | 
| 
      
 179 
     | 
    
         
            +
             
     | 
| 
       178 
180 
     | 
    
         
             
                app_name = opts[:application]
         
     | 
| 
       179 
181 
     | 
    
         
             
                version_prefix = opts[:version_prefix].to_s.strip
         
     | 
| 
       180 
182 
     | 
    
         
             
                version_label = "#{version_prefix}#{opts[:version_label].to_s.strip}"
         
     | 
| 
         @@ -183,7 +185,7 @@ module EbDeployer 
     | 
|
| 
       183 
185 
     | 
    
         
             
                resource_stacks = ResourceStacks.new(opts[:resources],
         
     | 
| 
       184 
186 
     | 
    
         
             
                                                     cf,
         
     | 
| 
       185 
187 
     | 
    
         
             
                                                     opts[:skip_resource_stack_update])
         
     | 
| 
       186 
     | 
    
         
            -
             
     | 
| 
      
 188 
     | 
    
         
            +
                bs = ThrottlingHandling.new(bs, AWS::ElasticBeanstalk::Errors::Throttling)
         
     | 
| 
       187 
189 
     | 
    
         
             
                environment = Environment.new(application, opts[:environment], bs) do |env|
         
     | 
| 
       188 
190 
     | 
    
         
             
                  env.resource_stacks = resource_stacks
         
     | 
| 
       189 
191 
     | 
    
         
             
                  env.settings = opts[:option_settings] || opts[:settings] || []
         
     | 
| 
         @@ -41,7 +41,9 @@ module EbDeployer 
     | 
|
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
                def swap_cname_with(another)
         
     | 
| 
       43 
43 
     | 
    
         
             
                  log("Swap CNAME with env #{another.name}")
         
     | 
| 
       44 
     | 
    
         
            -
                   
     | 
| 
      
 44 
     | 
    
         
            +
                  with_polling_events(/Completed swapping CNAMEs for environments/i) do
         
     | 
| 
      
 45 
     | 
    
         
            +
                    @bs.environment_swap_cname(self.app, self.name, another.name)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
       45 
47 
     | 
    
         
             
                end
         
     | 
| 
       46 
48 
     | 
    
         | 
| 
       47 
49 
     | 
    
         
             
                def log(msg)
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module EbDeployer
         
     | 
| 
      
 2 
     | 
    
         
            +
              class ThrottlingHandling
         
     | 
| 
      
 3 
     | 
    
         
            +
                include Utils
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                def initialize(delegatee, throttling_error)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  @delegatee = delegatee
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @throttling_error = throttling_error
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                def method_missing(method, *args, &block)
         
     | 
| 
      
 11 
     | 
    
         
            +
                  super unless @delegatee.respond_to?(method)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  backoff(@throttling_error) do
         
     | 
| 
      
 13 
     | 
    
         
            +
                    @delegatee.send(method, *args, &block)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/eb_deployer/version.rb
    CHANGED
    
    
    
        data/test/aws_driver_stubs.rb
    CHANGED
    
    | 
         @@ -33,7 +33,8 @@ class EBStub 
     | 
|
| 
       33 
33 
     | 
    
         
             
                  :version => version,
         
     | 
| 
       34 
34 
     | 
    
         
             
                  :cname_prefix => cname_prefix,
         
     | 
| 
       35 
35 
     | 
    
         
             
                  :tier => tier,
         
     | 
| 
       36 
     | 
    
         
            -
                  :settings => settings}
         
     | 
| 
      
 36 
     | 
    
         
            +
                  :settings => settings }
         
     | 
| 
      
 37 
     | 
    
         
            +
                set_env_ready(app, env, false)
         
     | 
| 
       37 
38 
     | 
    
         
             
              end
         
     | 
| 
       38 
39 
     | 
    
         | 
| 
       39 
40 
     | 
    
         
             
              def delete_environment(app, env)
         
     | 
| 
         @@ -43,7 +44,9 @@ class EBStub 
     | 
|
| 
       43 
44 
     | 
    
         
             
              end
         
     | 
| 
       44 
45 
     | 
    
         | 
| 
       45 
46 
     | 
    
         
             
              def update_environment(app, env, version, tier, settings)
         
     | 
| 
      
 47 
     | 
    
         
            +
                raise "not in ready state, consider waiting for previous action finish by pulling envents" unless env_ready?(app, env)
         
     | 
| 
       46 
48 
     | 
    
         
             
                @envs[env_key(app, env)].merge!(:version => version, :settings => settings, :tier => tier)
         
     | 
| 
      
 49 
     | 
    
         
            +
                set_env_ready(app, env, false)
         
     | 
| 
       47 
50 
     | 
    
         
             
              end
         
     | 
| 
       48 
51 
     | 
    
         | 
| 
       49 
52 
     | 
    
         
             
              def environment_exists?(app_name, env_name)
         
     | 
| 
         @@ -79,13 +82,18 @@ class EBStub 
     | 
|
| 
       79 
82 
     | 
    
         
             
              end
         
     | 
| 
       80 
83 
     | 
    
         | 
| 
       81 
84 
     | 
    
         
             
              def fetch_events(app_name, env_name, options={})
         
     | 
| 
      
 85 
     | 
    
         
            +
                set_env_ready(app_name, env_name, true)
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
       82 
87 
     | 
    
         
             
                unless @events # unrestricted mode for testing if no explicit events set
         
     | 
| 
       83 
88 
     | 
    
         
             
                  return generate_event_from_messages(['Environment update completed successfully',
         
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
      
 89 
     | 
    
         
            +
                                                       'terminateEnvironment completed successfully',
         
     | 
| 
      
 90 
     | 
    
         
            +
                                                       'Successfully launched environment',
         
     | 
| 
      
 91 
     | 
    
         
            +
                                                       'Completed swapping CNAMEs for environments'
         
     | 
| 
      
 92 
     | 
    
         
            +
                                                      ])
         
     | 
| 
       86 
93 
     | 
    
         
             
                end
         
     | 
| 
       87 
94 
     | 
    
         | 
| 
       88 
95 
     | 
    
         
             
                @events[env_key(app_name, env_name)]
         
     | 
| 
      
 96 
     | 
    
         
            +
                # assume env become ready after it spit out all the events
         
     | 
| 
       89 
97 
     | 
    
         
             
              end
         
     | 
| 
       90 
98 
     | 
    
         | 
| 
       91 
99 
     | 
    
         | 
| 
         @@ -101,10 +109,14 @@ class EBStub 
     | 
|
| 
       101 
109 
     | 
    
         | 
| 
       102 
110 
     | 
    
         | 
| 
       103 
111 
     | 
    
         
             
              def environment_swap_cname(app_name, env1_name, env2_name)
         
     | 
| 
      
 112 
     | 
    
         
            +
                raise "#{env1_name} not in ready state, consider to wait for previous action finsish by pulling events" unless env_ready?(app_name, env1_name)
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
       104 
114 
     | 
    
         
             
                env1, env2 = @envs[env_key(app_name, env1_name)], @envs[env_key(app_name, env2_name)]
         
     | 
| 
       105 
115 
     | 
    
         
             
                temp = env1[:cname_prefix]
         
     | 
| 
       106 
116 
     | 
    
         
             
                env1[:cname_prefix] = env2[:cname_prefix]
         
     | 
| 
       107 
117 
     | 
    
         
             
                env2[:cname_prefix] = temp
         
     | 
| 
      
 118 
     | 
    
         
            +
                set_env_ready(app_name, env1_name, false)
         
     | 
| 
      
 119 
     | 
    
         
            +
                set_env_ready(app_name, env2_name, false)
         
     | 
| 
       108 
120 
     | 
    
         
             
              end
         
     | 
| 
       109 
121 
     | 
    
         | 
| 
       110 
122 
     | 
    
         
             
              def environment_health_state(app_name, env_name)
         
     | 
| 
         @@ -116,6 +128,9 @@ class EBStub 
     | 
|
| 
       116 
128 
     | 
    
         
             
              end
         
     | 
| 
       117 
129 
     | 
    
         | 
| 
       118 
130 
     | 
    
         
             
              #test only
         
     | 
| 
      
 131 
     | 
    
         
            +
              def mark_all_envs_ready
         
     | 
| 
      
 132 
     | 
    
         
            +
                @envs.values.each { |env| set_env_ready(env[:application], env[:name], true) }
         
     | 
| 
      
 133 
     | 
    
         
            +
              end
         
     | 
| 
       119 
134 
     | 
    
         | 
| 
       120 
135 
     | 
    
         
             
              def environment_tier(app_name, env_name)
         
     | 
| 
       121 
136 
     | 
    
         
             
                @envs[env_key(app_name, env_name)][:tier]
         
     | 
| 
         @@ -149,6 +164,16 @@ class EBStub 
     | 
|
| 
       149 
164 
     | 
    
         | 
| 
       150 
165 
     | 
    
         
             
              private
         
     | 
| 
       151 
166 
     | 
    
         | 
| 
      
 167 
     | 
    
         
            +
              def set_env_ready(app, env, ready)
         
     | 
| 
      
 168 
     | 
    
         
            +
                if record = @envs[env_key(app, env)]
         
     | 
| 
      
 169 
     | 
    
         
            +
                  record[:ready] = ready
         
     | 
| 
      
 170 
     | 
    
         
            +
                end
         
     | 
| 
      
 171 
     | 
    
         
            +
              end
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
              def env_ready?(app, env)
         
     | 
| 
      
 174 
     | 
    
         
            +
                @envs[env_key(app, env)][:ready]
         
     | 
| 
      
 175 
     | 
    
         
            +
              end
         
     | 
| 
      
 176 
     | 
    
         
            +
             
     | 
| 
       152 
177 
     | 
    
         
             
              def generate_event_from_messages(messages)
         
     | 
| 
       153 
178 
     | 
    
         
             
                [messages.reverse.map do |m|
         
     | 
| 
       154 
179 
     | 
    
         
             
                   {:event_date => Time.now.utc,
         
     | 
    
        data/test/deploy_test.rb
    CHANGED
    
    
| 
         @@ -87,7 +87,7 @@ class InplaceUpdateDeployTest < DeployTest 
     | 
|
| 
       87 
87 
     | 
    
         
             
                end
         
     | 
| 
       88 
88 
     | 
    
         
             
              end
         
     | 
| 
       89 
89 
     | 
    
         | 
| 
       90 
     | 
    
         
            -
              def  
     | 
| 
      
 90 
     | 
    
         
            +
              def test_deploy_should_retry_on_temporary_throttling_error_from_fetch_events
         
     | 
| 
       91 
91 
     | 
    
         
             
                throttling_error = AWS::ElasticBeanstalk::Errors::Throttling.new("bang!")
         
     | 
| 
       92 
92 
     | 
    
         
             
                error_seq = [throttling_error] * 5
         
     | 
| 
       93 
93 
     | 
    
         
             
                @eb.set_error_generator(:fetch_events) do
         
     | 
| 
         @@ -97,4 +97,14 @@ class InplaceUpdateDeployTest < DeployTest 
     | 
|
| 
       97 
97 
     | 
    
         
             
                assert @eb.environment_exists?('simple', t('production', 'simple'))
         
     | 
| 
       98 
98 
     | 
    
         
             
              end
         
     | 
| 
       99 
99 
     | 
    
         | 
| 
      
 100 
     | 
    
         
            +
              def test_deploy_should_retry_on_temporary_throttling_error_from_create_env
         
     | 
| 
      
 101 
     | 
    
         
            +
                throttling_error = AWS::ElasticBeanstalk::Errors::Throttling.new("bang!")
         
     | 
| 
      
 102 
     | 
    
         
            +
                error_seq = [throttling_error] * 5
         
     | 
| 
      
 103 
     | 
    
         
            +
                @eb.set_error_generator(:create_environment) do
         
     | 
| 
      
 104 
     | 
    
         
            +
                  error_seq.pop
         
     | 
| 
      
 105 
     | 
    
         
            +
                end
         
     | 
| 
      
 106 
     | 
    
         
            +
                deploy(:application => 'simple', :environment => "production")
         
     | 
| 
      
 107 
     | 
    
         
            +
                assert @eb.environment_exists?('simple', t('production', 'simple'))
         
     | 
| 
      
 108 
     | 
    
         
            +
              end
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
       100 
110 
     | 
    
         
             
            end
         
     | 
    
        data/test/test_helper.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: eb_deployer
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.4.4. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.4.4.beta5
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 6
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -10,7 +10,7 @@ authors: 
     | 
|
| 
       10 
10 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       11 
11 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       12 
12 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       13 
     | 
    
         
            -
            date: 2014-04- 
     | 
| 
      
 13 
     | 
    
         
            +
            date: 2014-04-08 00:00:00.000000000 Z
         
     | 
| 
       14 
14 
     | 
    
         
             
            dependencies:
         
     | 
| 
       15 
15 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       16 
16 
     | 
    
         
             
              name: aws-sdk
         
     | 
| 
         @@ -69,6 +69,7 @@ files: 
     | 
|
| 
       69 
69 
     | 
    
         
             
            - lib/eb_deployer/package.rb
         
     | 
| 
       70 
70 
     | 
    
         
             
            - lib/eb_deployer/resource_stacks.rb
         
     | 
| 
       71 
71 
     | 
    
         
             
            - lib/eb_deployer/smoke_test.rb
         
     | 
| 
      
 72 
     | 
    
         
            +
            - lib/eb_deployer/throttling_handling.rb
         
     | 
| 
       72 
73 
     | 
    
         
             
            - lib/eb_deployer/utils.rb
         
     | 
| 
       73 
74 
     | 
    
         
             
            - lib/eb_deployer/version.rb
         
     | 
| 
       74 
75 
     | 
    
         
             
            - lib/eb_deployer/version_cleaner.rb
         
     |