cap-ec2 1.0.0 → 1.1.1
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/CHANGELOG.md +13 -1
- data/README.md +13 -7
- data/cap-ec2.gemspec +1 -1
- data/lib/cap-ec2/capistrano.rb +1 -1
- data/lib/cap-ec2/ec2-handler.rb +23 -17
- data/lib/cap-ec2/status-table.rb +8 -9
- data/lib/cap-ec2/utils.rb +5 -2
- data/lib/cap-ec2/version.rb +1 -1
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5de758bdde1c4ff1f1b7976e3e9c831b399ff31
|
4
|
+
data.tar.gz: 17a252437d8183443a230c7ff64a0e83bdda0823
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d11cf987ba64b1eb66ca0cec01f70fe1141bbdc60ffcb836ec5774644cc30e2e72b06d24eb22fe1085253579ce0417f3bace43e59a64a14d96a2f1173405285c
|
7
|
+
data.tar.gz: 7376b1916b7a6e1a7a912c9a5788b8d305d53b3a5d0a506cab550704c637043090378c6171131e7da21c6b8c1680e1eb0cf1e40dc3d5f6025d244637e542f0f2
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# Cap-EC2 changelog
|
2
2
|
|
3
|
+
## 1.1.1
|
4
|
+
|
5
|
+
Require aws-sdk v2 instead of v1
|
6
|
+
|
7
|
+
* Require aws-sdk v2 instead of v1 [@hajder](https://github.com/hajder)
|
8
|
+
|
9
|
+
## 1.1.0
|
10
|
+
|
11
|
+
Upgrade to AWS's v2 SDK
|
12
|
+
|
13
|
+
* Upgrade to AWS's v2 SDK [@kylev](https://github.com/kylev)
|
14
|
+
|
3
15
|
## 1.0.0
|
4
16
|
|
5
17
|
Cap-EC2 is pretty stable, and the rate of PRs has decreased, so I've
|
@@ -28,7 +40,7 @@ decided to bump the version to 1.0.0.
|
|
28
40
|
|
29
41
|
## 0.0.15
|
30
42
|
|
31
|
-
* Add `ec2_filter_by_status_ok?` to filter out instances that aren't returning `OK`
|
43
|
+
* Add `ec2_filter_by_status_ok?` to filter out instances that aren't returning `OK`
|
32
44
|
for their EC2 status checks. [@tomconroy](https://github.com/tomconroy)
|
33
45
|
|
34
46
|
## 0.0.14
|
data/README.md
CHANGED
@@ -50,30 +50,36 @@ set :ec2_stages_tag, 'Stages'
|
|
50
50
|
|
51
51
|
set :ec2_access_key_id, nil
|
52
52
|
set :ec2_secret_access_key, nil
|
53
|
-
set :ec2_region, %w{}
|
53
|
+
set :ec2_region, %w{} # REQUIRED
|
54
54
|
set :ec2_contact_point, nil
|
55
55
|
|
56
56
|
set :ec2_filter_by_status_ok?, nil
|
57
57
|
```
|
58
58
|
|
59
59
|
#### Order of inheritance
|
60
|
+
|
60
61
|
`cap-ec2` supports multiple methods of configuration. The order of inheritance is:
|
61
62
|
YAML File > User Capistrano Config > Default Capistrano Config > ENV variables.
|
62
63
|
|
63
64
|
#### Regions
|
64
|
-
`:ec2_region` is an array of [AWS regions](http://docs.aws.amazon.com/general/latest/gr/rande.html#ec2_region), if not present all regions will be checked for matching instances - this the default behavior and can be slow, if speed is an issue consider setting your required regions.
|
65
65
|
|
66
|
-
|
67
|
-
|
68
|
-
|
66
|
+
`:ec2_region` is an array of
|
67
|
+
[AWS regions](http://docs.aws.amazon.com/general/latest/gr/rande.html#ec2_region)
|
68
|
+
and is required. Only list regions which you wish to query for
|
69
|
+
instances; extra values simply slow down queries.
|
69
70
|
|
71
|
+
If `:ec2_access_key_id` or `:ec2_secret_access_key` are not set in any
|
72
|
+
configuration the environment variables `AWS_ACCESS_KEY_ID`,
|
73
|
+
`AWS_SECRET_ACCESS_KEY` and `AWS_REGION` will be checked and the
|
74
|
+
default credential load order (including instance profiles
|
75
|
+
credentials) will be honored.
|
70
76
|
|
71
77
|
#### Misc settings
|
72
78
|
|
73
79
|
* project_tag
|
74
80
|
|
75
|
-
Cap-EC2 will look for a tag with this name when searching for instances that belong to this project.
|
76
|
-
Cap-EC2 will look for a value which matches the :application setting in your deploy.rb.
|
81
|
+
Cap-EC2 will look for a tag with this name when searching for instances that belong to this project.
|
82
|
+
Cap-EC2 will look for a value which matches the :application setting in your deploy.rb.
|
77
83
|
The tag name defaults to "Project" and must be set on your instances.
|
78
84
|
|
79
85
|
* stages_tag
|
data/cap-ec2.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
23
23
|
|
24
|
-
spec.add_dependency "aws-sdk
|
24
|
+
spec.add_dependency "aws-sdk", "~> 2.0"
|
25
25
|
spec.add_dependency "capistrano", ">= 3.0"
|
26
26
|
spec.add_dependency "terminal-table"
|
27
27
|
spec.add_dependency "colorize"
|
data/lib/cap-ec2/capistrano.rb
CHANGED
data/lib/cap-ec2/ec2-handler.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'aws-sdk'
|
2
|
+
|
1
3
|
module CapEC2
|
2
4
|
class EC2Handler
|
3
5
|
include CapEC2::Utils
|
@@ -12,8 +14,7 @@ module CapEC2
|
|
12
14
|
end
|
13
15
|
|
14
16
|
def ec2_connect(region=nil)
|
15
|
-
|
16
|
-
AWS::EC2.new(
|
17
|
+
Aws::EC2::Client.new(
|
17
18
|
access_key_id: fetch(:ec2_access_key_id),
|
18
19
|
secret_access_key: fetch(:ec2_secret_access_key),
|
19
20
|
region: region
|
@@ -30,7 +31,7 @@ module CapEC2
|
|
30
31
|
puts defined_roles.map {|r| get_servers_for_role(r)}
|
31
32
|
.flatten
|
32
33
|
.uniq {|i| i.instance_id}
|
33
|
-
.map {|i| i
|
34
|
+
.map {|i| tag_value(i, 'Name')}
|
34
35
|
.join("\n")
|
35
36
|
end
|
36
37
|
|
@@ -59,19 +60,25 @@ module CapEC2
|
|
59
60
|
end
|
60
61
|
|
61
62
|
def get_servers_for_role(role)
|
63
|
+
filters = [
|
64
|
+
{name: 'tag-key', values: [stages_tag, project_tag]},
|
65
|
+
{name: tag(project_tag), values: ["*#{application}*"]},
|
66
|
+
{name: 'instance-state-name', values: %w(running)}
|
67
|
+
]
|
68
|
+
|
62
69
|
servers = []
|
63
70
|
@ec2.each do |_, ec2|
|
64
|
-
|
65
|
-
.
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
(fetch(:ec2_filter_by_status_ok?) ? instance_status_ok?(i) : true)
|
71
|
+
ec2.describe_instances(filters: filters).reservations.each do |r|
|
72
|
+
servers += r.instances.select do |i|
|
73
|
+
instance_has_tag?(i, roles_tag, role) &&
|
74
|
+
instance_has_tag?(i, stages_tag, stage) &&
|
75
|
+
instance_has_tag?(i, project_tag, application) &&
|
76
|
+
(fetch(:ec2_filter_by_status_ok?) ? instance_status_ok?(i) : true)
|
77
|
+
end
|
72
78
|
end
|
73
79
|
end
|
74
|
-
|
80
|
+
|
81
|
+
servers.sort_by { |s| tag_value(s, 'Name') || '' }
|
75
82
|
end
|
76
83
|
|
77
84
|
def get_server(instance_id)
|
@@ -83,16 +90,15 @@ module CapEC2
|
|
83
90
|
private
|
84
91
|
|
85
92
|
def instance_has_tag?(instance, key, value)
|
86
|
-
(instance
|
93
|
+
(tag_value(instance, key) || '').split(',').map(&:strip).include?(value.to_s)
|
87
94
|
end
|
88
95
|
|
89
96
|
def instance_status_ok?(instance)
|
90
97
|
@ec2.any? do |_, ec2|
|
91
|
-
|
92
|
-
instance_ids: [instance.
|
98
|
+
ec2.describe_instance_status(
|
99
|
+
instance_ids: [instance.instance_id],
|
93
100
|
filters: [{ name: 'instance-status.status', values: %w(ok) }]
|
94
|
-
)
|
95
|
-
response.data.has_key?(:instance_status_set) && response.data[:instance_status_set].any?
|
101
|
+
).instance_statuses.length == 1
|
96
102
|
end
|
97
103
|
end
|
98
104
|
end
|
data/lib/cap-ec2/status-table.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
module CapEC2
|
2
2
|
class StatusTable
|
3
3
|
include CapEC2::Utils
|
4
|
-
|
4
|
+
|
5
5
|
def initialize(instances)
|
6
6
|
@instances = instances
|
7
7
|
output
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
def header_row
|
11
11
|
[
|
12
12
|
bold("Num"),
|
@@ -19,7 +19,7 @@ module CapEC2
|
|
19
19
|
bold("Stages")
|
20
20
|
]
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
def output
|
24
24
|
table = Terminal::Table.new(
|
25
25
|
:style => {
|
@@ -38,13 +38,13 @@ module CapEC2
|
|
38
38
|
def instance_to_row(instance, index)
|
39
39
|
[
|
40
40
|
sprintf("%02d:", index),
|
41
|
-
green(instance
|
42
|
-
red(instance.
|
41
|
+
green(tag_value(instance, 'Name') || ''),
|
42
|
+
red(instance.instance_id),
|
43
43
|
cyan(instance.instance_type),
|
44
44
|
bold(blue(CapEC2::Utils.contact_point(instance))),
|
45
|
-
magenta(instance.availability_zone),
|
46
|
-
yellow(instance
|
47
|
-
yellow(instance
|
45
|
+
magenta(instance.placement.availability_zone),
|
46
|
+
yellow(tag_value(instance, roles_tag)),
|
47
|
+
yellow(tag_value(instance, stages_tag))
|
48
48
|
]
|
49
49
|
end
|
50
50
|
|
@@ -62,4 +62,3 @@ module CapEC2
|
|
62
62
|
|
63
63
|
end
|
64
64
|
end
|
65
|
-
|
data/lib/cap-ec2/utils.rb
CHANGED
@@ -20,6 +20,10 @@ module CapEC2
|
|
20
20
|
fetch(:ec2_stages_tag)
|
21
21
|
end
|
22
22
|
|
23
|
+
def tag_value(instance, key)
|
24
|
+
instance.tags.find({}) { |t| t[:key] == key.to_s }[:value]
|
25
|
+
end
|
26
|
+
|
23
27
|
def self.contact_point_mapping
|
24
28
|
{
|
25
29
|
:public_dns => :public_dns_name,
|
@@ -57,8 +61,7 @@ module CapEC2
|
|
57
61
|
unless regions_array.nil? || regions_array.empty?
|
58
62
|
return regions_array
|
59
63
|
else
|
60
|
-
|
61
|
-
@ec2.regions.map(&:name)
|
64
|
+
fail "You must specify at least one EC2 region."
|
62
65
|
end
|
63
66
|
end
|
64
67
|
|
data/lib/cap-ec2/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cap-ec2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Sykes
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2018-02-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -40,19 +40,19 @@ dependencies:
|
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name: aws-sdk
|
43
|
+
name: aws-sdk
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - "
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '0'
|
48
|
+
version: '2.0'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - "
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: '0'
|
55
|
+
version: '2.0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: capistrano
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -139,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
139
|
version: '0'
|
140
140
|
requirements: []
|
141
141
|
rubyforge_project:
|
142
|
-
rubygems_version: 2.4.
|
142
|
+
rubygems_version: 2.4.5
|
143
143
|
signing_key:
|
144
144
|
specification_version: 4
|
145
145
|
summary: Cap-EC2 is used to generate Capistrano namespaces and tasks from Amazon EC2
|