capify-ec2 1.1.5 → 1.1.6.pre
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/capify-ec2.gemspec +1 -0
- data/lib/capify-ec2.rb +17 -4
- data/lib/capify-ec2/capistrano.rb +36 -14
- data/lib/capify-ec2/version.rb +1 -1
- data/readme.md +23 -7
- metadata +26 -9
data/capify-ec2.gemspec
CHANGED
data/lib/capify-ec2.rb
CHANGED
@@ -12,7 +12,8 @@ class CapifyEc2
|
|
12
12
|
|
13
13
|
def self.running_instances
|
14
14
|
ec2 = Fog::Compute.new(:provider => 'AWS', :aws_access_key_id => ec2_config[:aws_access_key_id], :aws_secret_access_key => ec2_config[:aws_secret_access_key], :region => ec2_config[:aws_params][:region])
|
15
|
-
|
15
|
+
project_tag = ec2_config[:project_tag]
|
16
|
+
running_instances = ec2.servers.select {|instance| instance.state == "running" && (project_tag.nil? || instance.tags["Project"] == project_tag) }
|
16
17
|
running_instances.each do |instance|
|
17
18
|
instance.instance_eval do
|
18
19
|
def case_insensitive_tag(key)
|
@@ -22,6 +23,15 @@ class CapifyEc2
|
|
22
23
|
def name
|
23
24
|
case_insensitive_tag("Name").split('-').reject {|portion| portion.include?(".")}.join("-")
|
24
25
|
end
|
26
|
+
|
27
|
+
def roles
|
28
|
+
role = case_insensitive_tag("Role")
|
29
|
+
roles = role.nil? ? [] : [role]
|
30
|
+
if (roles_tag = case_insensitive_tag("Roles"))
|
31
|
+
roles += case_insensitive_tag("Roles").split(/\s*,\s*/)
|
32
|
+
end
|
33
|
+
roles
|
34
|
+
end
|
25
35
|
end
|
26
36
|
end
|
27
37
|
end
|
@@ -31,9 +41,12 @@ class CapifyEc2
|
|
31
41
|
end
|
32
42
|
|
33
43
|
def self.get_instances_by_role(role)
|
34
|
-
selected_instances = running_instances.select do |instance|
|
35
|
-
|
36
|
-
|
44
|
+
selected_instances = running_instances.select do |instance|
|
45
|
+
server_roles = [instance.case_insensitive_tag("Role")] || []
|
46
|
+
if (roles_tag = instance.case_insensitive_tag("Roles"))
|
47
|
+
server_roles += roles_tag.split(/\s*,\s*/)
|
48
|
+
end
|
49
|
+
server_roles.member?(role.to_s)
|
37
50
|
end
|
38
51
|
end
|
39
52
|
|
@@ -4,28 +4,42 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
4
4
|
def ec2_role(role_to_define)
|
5
5
|
defined_role = role_to_define.is_a?(Hash) ? role_to_define[:name] : role_to_define
|
6
6
|
instances = CapifyEc2.get_instances_by_role(defined_role)
|
7
|
-
subroles = role_to_define.is_a?(Hash) ? role_to_define[:options] : {}
|
8
7
|
|
8
|
+
define_instance_roles(defined_role, instances)
|
9
|
+
define_role_roles(defined_role, instances)
|
10
|
+
end
|
11
|
+
|
12
|
+
def define_instance_roles(role_to_define, instances)
|
9
13
|
instances.each do |instance|
|
10
14
|
task instance.name.to_sym do
|
11
15
|
set :server_address, instance.dns_name
|
12
|
-
|
13
|
-
role :app, *server_address
|
16
|
+
server instance.dns_name, role_to_define.to_sym
|
14
17
|
end
|
15
18
|
end
|
16
|
-
|
17
|
-
|
19
|
+
end
|
20
|
+
|
21
|
+
def define_role_roles(role_to_define, instances)
|
22
|
+
task role_to_define.to_sym do
|
18
23
|
instances.each do |instance|
|
19
|
-
|
20
|
-
|
21
|
-
if new_options
|
22
|
-
role defined_role.to_sym, instance.dns_name, new_options
|
23
|
-
else
|
24
|
-
role defined_role.to_sym, instance.dns_name
|
25
|
-
end
|
26
|
-
end
|
24
|
+
define_role(role_to_define, instance.dns_name)
|
25
|
+
end
|
27
26
|
end
|
28
|
-
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def define_role(role_to_define, dns_names)
|
30
|
+
dns_names = [dns_names] if dns_names.is_a?(String)
|
31
|
+
subroles = role_to_define.is_a?(Hash) ? role_to_define[:options] : {}
|
32
|
+
new_options = {}
|
33
|
+
subroles.each {|key, value| new_options[key] = true if value.to_s == instance.name}
|
34
|
+
|
35
|
+
dns_names.each do |dns_name|
|
36
|
+
if new_options
|
37
|
+
role role_to_define.to_sym, dns_name, new_options
|
38
|
+
else
|
39
|
+
role role_to_define.to_sym, dns_name
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
29
43
|
|
30
44
|
def ec2_roles(*roles)
|
31
45
|
roles.each {|role| ec2_role(role)}
|
@@ -50,6 +64,14 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
50
64
|
puts CapifyEc2.server_names.sort
|
51
65
|
end
|
52
66
|
|
67
|
+
task :ec2_status do
|
68
|
+
CapifyEc2.running_instances.each_with_index do |instance, i|
|
69
|
+
puts sprintf "%-11s: %-40s %-20s %-20s %-62s %-20s (%s)",
|
70
|
+
i.to_s.magenta, instance.name, instance.id.red, instance.flavor_id.cyan,
|
71
|
+
instance.dns_name.blue, instance.availability_zone.green, instance.roles.join(", ").yellow
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
53
75
|
namespace :deploy do
|
54
76
|
before "deploy", "deregister_instance"
|
55
77
|
after "deploy", "register_instance"
|
data/lib/capify-ec2/version.rb
CHANGED
data/readme.md
CHANGED
@@ -7,7 +7,7 @@ eg: If you have three servers on amazon's ec2.
|
|
7
7
|
|
8
8
|
server-1 Tag: Role => "web"
|
9
9
|
server-2 Tag: Role => "db"
|
10
|
-
server-3 Tag:
|
10
|
+
server-3 Tag: Roles => "web, db"
|
11
11
|
|
12
12
|
Installing
|
13
13
|
|
@@ -41,12 +41,17 @@ Additionally
|
|
41
41
|
Will generate
|
42
42
|
|
43
43
|
task :server-2 do
|
44
|
-
role :
|
44
|
+
role :db, {server-2 public dns fetched from Amazon}
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
|
+
task :server-3 do
|
48
|
+
role :db, {server-3 public dns fetched from Amazon}
|
49
|
+
end
|
50
|
+
|
47
51
|
task :db do
|
48
52
|
role :db, {server-2 public dns fetched from Amazon}
|
49
|
-
|
53
|
+
role :db, {server-3 public dns fetched from Amazon}
|
54
|
+
end
|
50
55
|
|
51
56
|
Running
|
52
57
|
|
@@ -67,6 +72,13 @@ Running
|
|
67
72
|
will remove server-1 from whatever instance it is currently
|
68
73
|
registered against.
|
69
74
|
|
75
|
+
Running
|
76
|
+
|
77
|
+
cap ec2_status
|
78
|
+
|
79
|
+
will list the currently running servers and their associated details
|
80
|
+
(public dns, instance id, roles etc)
|
81
|
+
|
70
82
|
More options
|
71
83
|
====================================================
|
72
84
|
|
@@ -104,11 +116,15 @@ The yml file needs to look something like this:
|
|
104
116
|
:aws_params:
|
105
117
|
:region: 'eu-west-1'
|
106
118
|
:load_balanced: true
|
119
|
+
:project_name: "YOUR APP NAME"
|
107
120
|
|
108
121
|
The :aws_params are optional.
|
109
122
|
If :load_balanced is set to true, the gem uses pre and post-deploy
|
110
123
|
hooks to deregister the instance, reregister it, and validate its
|
111
124
|
health.
|
112
|
-
:load_balanced only works for individual instances, not
|
113
|
-
|
114
|
-
|
125
|
+
:load_balanced only works for individual instances, not for roles.
|
126
|
+
|
127
|
+
The :project_name parameter is optional. It will limit any commands to
|
128
|
+
running against those instances with a "Project" tag set to the value
|
129
|
+
"YOUR APP NAME".
|
130
|
+
|
metadata
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capify-ec2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 961915972
|
5
|
+
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
|
9
|
+
- 6
|
10
|
+
- pre
|
11
|
+
version: 1.1.6.pre
|
11
12
|
platform: ruby
|
12
13
|
authors:
|
13
14
|
- Noah Cantor
|
@@ -16,7 +17,7 @@ autorequire:
|
|
16
17
|
bindir: bin
|
17
18
|
cert_chain: []
|
18
19
|
|
19
|
-
date: 2011-
|
20
|
+
date: 2011-06-09 00:00:00 +01:00
|
20
21
|
default_executable:
|
21
22
|
dependencies:
|
22
23
|
- !ruby/object:Gem::Dependency
|
@@ -49,6 +50,20 @@ dependencies:
|
|
49
50
|
version: "0"
|
50
51
|
type: :runtime
|
51
52
|
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: colored
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 3
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
version: "0"
|
65
|
+
type: :runtime
|
66
|
+
version_requirements: *id003
|
52
67
|
description: Grabs roles from ec2's tags and autogenerates capistrano tasks
|
53
68
|
email:
|
54
69
|
- noah.cantor@forward.co.uk
|
@@ -89,12 +104,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
89
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
105
|
none: false
|
91
106
|
requirements:
|
92
|
-
- - "
|
107
|
+
- - ">"
|
93
108
|
- !ruby/object:Gem::Version
|
94
|
-
hash:
|
109
|
+
hash: 25
|
95
110
|
segments:
|
96
|
-
-
|
97
|
-
|
111
|
+
- 1
|
112
|
+
- 3
|
113
|
+
- 1
|
114
|
+
version: 1.3.1
|
98
115
|
requirements: []
|
99
116
|
|
100
117
|
rubyforge_project: capify-ec2
|