capistrano3-aws 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f09aa01e2aacf40469f000e703fb64518134815b
4
- data.tar.gz: 227693480a5a0b915fb54f8d31c73442f7b77899
3
+ metadata.gz: d5d2e79e3d594070f7d145c2129bc4b80e54e255
4
+ data.tar.gz: 2680ffd01e2607a11c6b3e9b8a715264a0aac2f3
5
5
  SHA512:
6
- metadata.gz: 52dc2ac0d5a80e6384257f476a3682b1c71cda59e94de5d9ff2f2757ed8c730dde8d49a676bbd4f61c8456459655fbbf04cb2df87316a083c15c14a2b70efc53
7
- data.tar.gz: 7249810b0ed3bb6e9e2340edae6f940318c6a785bbaa75331349c6fa09e5f86a9f689188af42ecb72c7be1a3a226584b326e96b32d909453a83a466baf6d0730
6
+ metadata.gz: 98d3c19c8a360b39b3d4b10d893ae7929299134387d95f1ed0ee22bf6c07b6c467b4b7d39af113d725cb22bb60a4c70c8982ee88f826e007a67cc3febf141fb8
7
+ data.tar.gz: 0a8ded0a58672196f6330cbef2d00effa1c20d23b0d462aeb565b4df4c02d239db18a2d45e8493d2fb268ce58262a1d8ab136d81666fb11acf70f62e3ba43ebd
data/README.md CHANGED
@@ -46,6 +46,21 @@ task :set_instances do
46
46
  role :db, hosts.first
47
47
  end
48
48
 
49
+ ## Blue-Green Deploy
50
+ # deregister half of instances from ELB, then apply block, and register.
51
+ task :restart do
52
+ bluegreen(:web, 'elb-arn') do
53
+ execute :sudo, "restart rails"
54
+ loop do
55
+ begin
56
+ execute :curl, "-s http://localhost:3000/"
57
+ break
58
+ rescue
59
+ end
60
+ end
61
+ end
62
+ end
63
+
49
64
  after :staging, :set_instances
50
65
  ```
51
66
 
@@ -8,6 +8,45 @@ module Capistrano
8
8
  def instances(options = {})
9
9
  ec2.describe_instances(filters: fetch(:ec2_filters)).reservations.instances
10
10
  end
11
+
12
+ def bluegreen(role, target_arn, &block)
13
+ servers = roles(role)
14
+ servers.each_slice(servers.length / 2).each do |cluster|
15
+ begin
16
+ instance_ids = cluster.map{|x| x.properties.instance_id }
17
+ deregister(target_arn, instance_ids)
18
+ on(cluster, &block)
19
+ ensure
20
+ register(target_arn, instance_ids)
21
+ end
22
+ end
23
+ end
24
+
25
+ def register(target_arn, instance_ids)
26
+ params = {
27
+ target_group_arn: target_arn,
28
+ targets: instance_ids.map{|id| { id: id }}
29
+ }
30
+
31
+ elb.register_targets(params)
32
+ loop do
33
+ return if elb.describe_target_health(params).target_health_descriptions.all? { |t| t.target_health.state == 'healthy' }
34
+ sleep 5
35
+ end
36
+ end
37
+
38
+ def deregister(target_arn, instance_ids)
39
+ params = {
40
+ target_group_arn: target_arn,
41
+ targets: instance_ids.map{|id| { id: id }}
42
+ }
43
+
44
+ elb.deregister_targets(params)
45
+ loop do
46
+ return if elb.describe_target_health(params).target_health_descriptions.all? { |t| t.target_health.state == 'unused' }
47
+ sleep 5
48
+ end
49
+ end
11
50
  end
12
51
  end
13
52
 
@@ -15,9 +15,15 @@ module Capistrano
15
15
  def ec2
16
16
  @ec2 ||= AutoMapping.new(
17
17
  fetch(:aws_regions).map do |region|
18
- ::Aws::EC2::Client.new(access_key_id: credentials.access_key_id,
19
- secret_access_key: credentials.secret_access_key,
20
- region: region)
18
+ ::Aws::EC2::Client.new(credentials: credentials, region: region)
19
+ end
20
+ )
21
+ end
22
+
23
+ def elb
24
+ @elb ||= AutoMapping.new(
25
+ fetch(:aws_regions).map do |region|
26
+ ::Aws::ElasticLoadBalancingV2::Client.new(credentials: credentials, region: region)
21
27
  end
22
28
  )
23
29
  end
@@ -1,5 +1,5 @@
1
1
  module Capistrano
2
2
  module Aws
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano3-aws
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - masarakki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-16 00:00:00.000000000 Z
11
+ date: 2017-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk