capistrano3-aws 0.1.0 → 0.2.0
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.
- checksums.yaml +4 -4
- data/README.md +15 -0
- data/lib/capistrano/aws.rb +39 -0
- data/lib/capistrano/aws/client.rb +9 -3
- data/lib/capistrano/aws/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d5d2e79e3d594070f7d145c2129bc4b80e54e255
|
4
|
+
data.tar.gz: 2680ffd01e2607a11c6b3e9b8a715264a0aac2f3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
|
data/lib/capistrano/aws.rb
CHANGED
@@ -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(
|
19
|
-
|
20
|
-
|
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
|
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.
|
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-
|
11
|
+
date: 2017-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|