rig 0.4.1 → 0.4.2
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/rig/command/abstract.rb +4 -0
- data/lib/rig/command/balancer/main.rb +27 -0
- data/lib/rig/command/dns/list.rb +1 -1
- data/lib/rig/command/environment/create.rb +0 -1
- data/lib/rig/command/instance/create.rb +42 -1
- data/lib/rig/command/instance/list.rb +2 -2
- data/lib/rig/command/ssh.rb +2 -1
- data/lib/rig/model/dns.rb +3 -4
- data/lib/rig/model/environment.rb +2 -10
- data/lib/rig/model/instance.rb +2 -2
- data/lib/rig/version.rb +1 -1
- metadata +99 -106
data/lib/rig/command/abstract.rb
CHANGED
@@ -37,6 +37,9 @@ module Rig
|
|
37
37
|
r << server.flavor_id.to_s
|
38
38
|
r << server.id.to_s
|
39
39
|
r << server.state.to_s.downcase
|
40
|
+
if detailed
|
41
|
+
r << server.dns_name
|
42
|
+
end
|
40
43
|
rows << r
|
41
44
|
end
|
42
45
|
|
@@ -50,6 +53,7 @@ module Rig
|
|
50
53
|
cols << "Size"
|
51
54
|
cols << "Instance ID"
|
52
55
|
cols << "State"
|
56
|
+
cols << "DNS" if detailed
|
53
57
|
|
54
58
|
print_table(cols, rows)
|
55
59
|
end
|
@@ -1,10 +1,37 @@
|
|
1
1
|
require 'rig'
|
2
|
+
require 'rest-client'
|
2
3
|
|
3
4
|
module Rig
|
4
5
|
module Command
|
5
6
|
module Balancer
|
6
7
|
class Main < Abstract
|
7
8
|
self.default_subcommand = 'list'
|
9
|
+
subcommand 'test', 'test a load balancer' do
|
10
|
+
option %w{-c --count}, "COUNT", "number of times to loop", :default => 100
|
11
|
+
option %w{-p --poll}, "POLL", "poll time", :default => 10
|
12
|
+
parameter "NAME", "name of the load balancer to test"
|
13
|
+
|
14
|
+
def execute
|
15
|
+
elb = Rig::Model::Balancer.find(name)
|
16
|
+
raise "elb #{name} not found" unless elb
|
17
|
+
|
18
|
+
dns = elb.dns_name
|
19
|
+
count.times do |i|
|
20
|
+
puts "### loop #{i}"
|
21
|
+
ips = `host #{dns}`.split(/\n/).collect { |e| e.split.last }
|
22
|
+
ips.each do |ip|
|
23
|
+
val = begin
|
24
|
+
RestClient.get("http://#{ip}")
|
25
|
+
rescue => e
|
26
|
+
e.message
|
27
|
+
end
|
28
|
+
print ".. #{ip} - #{val}"
|
29
|
+
puts
|
30
|
+
end
|
31
|
+
sleep poll
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
8
35
|
end
|
9
36
|
end
|
10
37
|
end
|
data/lib/rig/command/dns/list.rb
CHANGED
@@ -9,7 +9,7 @@ module Rig
|
|
9
9
|
records = Rig::Model::Dns.records("#{zone}")
|
10
10
|
rows = []
|
11
11
|
records.each do |record|
|
12
|
-
rows << [zone, record.type, record.ttl, record.name, record.value]
|
12
|
+
rows << [zone, record.type, record.ttl, record.name, [*record.value].join(",")]
|
13
13
|
end
|
14
14
|
print_table(%w{Domain Type TTL Name Value}, rows)
|
15
15
|
end
|
@@ -1,15 +1,56 @@
|
|
1
1
|
require 'rig'
|
2
|
+
require 'awesome_print'
|
2
3
|
|
3
4
|
module Rig
|
4
5
|
module Command
|
5
6
|
module Instance
|
6
7
|
class Create < Abstract
|
8
|
+
option %w{-i --image}, "IMAGE", "the image / ami to use, default: your account image"
|
9
|
+
option %w{-f --flavor}, "FLAVOR", "the flavor / size to use"
|
10
|
+
option %w{-k --keypair}, "KEYPAIR", "the key pair / name to use, default: your account keypair"
|
11
|
+
option %w{-g --groups}, "GROUPS", "comma separated list of groups, default: your account groups"
|
12
|
+
option %w{-r --region}, "GROUPS", "the region, default: your account region"
|
13
|
+
option %w{--add}, :flag, "add this to the existing instances of this role and environment"
|
14
|
+
option "--[no-]chef", :flag, "use chef to bootstrap", :default => true
|
7
15
|
|
8
16
|
parameter "ENVIRONMENT", "the environment this instance should belong to"
|
9
17
|
parameter "ROLE", "the instance role", :default => 'solo'
|
10
18
|
|
11
19
|
def execute
|
12
|
-
|
20
|
+
name = role
|
21
|
+
# figure out if there are others of this role, if there are add a number to name to distinguish.
|
22
|
+
n = "#{name}.#{environment}.env"
|
23
|
+
chef = Rig.config[:chef] ? true : false
|
24
|
+
|
25
|
+
unless flavor
|
26
|
+
raise "must specify flavor"
|
27
|
+
end
|
28
|
+
|
29
|
+
o = {
|
30
|
+
:image_id => image,
|
31
|
+
:flavor_id => flavor,
|
32
|
+
:key_name => keypair,
|
33
|
+
:groups => groups.split(','),
|
34
|
+
:user_data => Rig::Model::Userdata.create(n, role, environment, :chef => chef)
|
35
|
+
}
|
36
|
+
tags = {'Name' => n, 'Environment' => environment, 'Role' => role}
|
37
|
+
server = Rig::Model::Instance.create(o, tags)
|
38
|
+
puts "created: #{server.id}"
|
39
|
+
rescue => e
|
40
|
+
puts "error: #{e.message}"
|
41
|
+
raise Clamp::HelpWanted, self
|
42
|
+
end
|
43
|
+
|
44
|
+
def default_image
|
45
|
+
Rig.account[:image].is_a?(Hash) ? Rig.account[:image].first.last : Rig.account[:image]
|
46
|
+
end
|
47
|
+
|
48
|
+
def default_keypair
|
49
|
+
Rig.account[:keypair]
|
50
|
+
end
|
51
|
+
|
52
|
+
def default_groups
|
53
|
+
Rig.account[:groups].join(",")
|
13
54
|
end
|
14
55
|
end
|
15
56
|
end
|
@@ -6,7 +6,7 @@ module Rig
|
|
6
6
|
class List < Abstract
|
7
7
|
include Options::ShowAll
|
8
8
|
|
9
|
-
option %w{-
|
9
|
+
option %w{-l --long}, :flag, "show more information in table"
|
10
10
|
parameter "[ENV]", "environment"
|
11
11
|
|
12
12
|
def execute
|
@@ -16,7 +16,7 @@ module Rig
|
|
16
16
|
filters["tag:Environment"] = env if env
|
17
17
|
|
18
18
|
list = connection.servers.all(filters)
|
19
|
-
instance_list(list,
|
19
|
+
instance_list(list, long?)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
data/lib/rig/command/ssh.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
module Rig
|
2
2
|
module Command
|
3
3
|
class Ssh < Abstract
|
4
|
+
option %w{-u --user}, "USER", "the user to login as", :default => (Rig.config[:ssh][:user] rescue nil)
|
4
5
|
parameter "NAME", "name of the host. <role><#>.<env>, eg: solo1.stable for the first solo role in environment stable"
|
5
6
|
def execute
|
6
|
-
user = Rig.config[:ssh][:user] rescue nil
|
7
|
+
#user = Rig.config[:ssh][:user] rescue nil
|
7
8
|
unless user
|
8
9
|
puts "must set rig:ssh:user in configuration."
|
9
10
|
exit(1)
|
data/lib/rig/model/dns.rb
CHANGED
@@ -23,16 +23,15 @@ module Rig
|
|
23
23
|
)
|
24
24
|
end
|
25
25
|
|
26
|
-
def create(name, value)
|
26
|
+
def create(name, value, options={})
|
27
27
|
zone = zone(Rig.get_config(:dns_zone))
|
28
28
|
|
29
29
|
if IPAddress.valid?(value)
|
30
30
|
#A record
|
31
|
-
o = {:name => name, :value => value, :type => 'A', :ttl => 86400}
|
31
|
+
o = {:name => name, :value => value, :type => 'A', :ttl => 86400}.merge(options)
|
32
32
|
else
|
33
33
|
#CNAME record
|
34
|
-
|
35
|
-
o = {:name => name, :value => value, :type => 'CNAME', :ttl => 300}
|
34
|
+
o = {:name => name, :value => value, :type => 'CNAME', :ttl => 300}.merge(options)
|
36
35
|
end
|
37
36
|
zone.records.create(o)
|
38
37
|
end
|
@@ -96,22 +96,14 @@ module Rig
|
|
96
96
|
|
97
97
|
@balancers << balancer
|
98
98
|
|
99
|
-
# set dns for balancer for this role (<role>.<env>.env.inqlabs.com)
|
100
|
-
# example:
|
101
|
-
# if there are 3 servers with the harvester role
|
102
|
-
# in the environment test
|
103
|
-
# then the dns would be harvester.test.env.inqlabs.com
|
104
|
-
puts ".. dns: #{role}.#{name}.env.#@zone #{balancer.attributes[:dns_name]}"
|
105
|
-
Rig::Model::Dns.create("#{role}.#{name}.env.#@zone", balancer.attributes[:dns_name])
|
106
|
-
|
107
99
|
# set primary dns for environment (<name>.env.inqlabs.com)
|
108
100
|
# to point to this load balancer
|
109
101
|
if tmpl[:primary]
|
110
102
|
puts ".. primary: #{name}.env.#@zone #{balancer.attributes[:dns_name]}"
|
111
|
-
Rig::Model::Dns.create("#{name}.env.#@zone", balancer.attributes[:dns_name])
|
103
|
+
Rig::Model::Dns.create("#{name}.env.#@zone", balancer.attributes[:dns_name], :ttl => 30)
|
112
104
|
end
|
113
105
|
else
|
114
|
-
#TODO:
|
106
|
+
#TODO: need to support balancer: false, primary: true = point to server instance
|
115
107
|
#if tmpl[:primary]
|
116
108
|
# puts ".. primary #{name}.env.#@zone #{}"
|
117
109
|
#end
|
data/lib/rig/model/instance.rb
CHANGED
@@ -32,8 +32,8 @@ module Rig
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def find_by_nick(name)
|
35
|
-
(role,
|
36
|
-
find_by_role_and_environment(role, env).select {|s| s.tags['Name'] =~ /^#{role}
|
35
|
+
(role, env) = name.match(/(\w+)\.(\w+)/)[1..2]
|
36
|
+
find_by_role_and_environment(role, env).select {|s| s.tags['Name'] =~ /^#{role}/ }
|
37
37
|
end
|
38
38
|
|
39
39
|
def create(opts, tags={})
|
data/lib/rig/version.rb
CHANGED
metadata
CHANGED
@@ -1,116 +1,120 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rig
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.4.2
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 4
|
9
|
-
- 1
|
10
|
-
version: 0.4.1
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Shawn Catanzarite
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-05-14 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: clamp
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
32
22
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: fog
|
36
23
|
prerelease: false
|
37
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
25
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: fog
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
46
38
|
type: :runtime
|
47
|
-
version_requirements: *id002
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: ipaddress
|
50
39
|
prerelease: false
|
51
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
41
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: ipaddress
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
60
54
|
type: :runtime
|
61
|
-
version_requirements: *id003
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: terminal-table
|
64
55
|
prerelease: false
|
65
|
-
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: terminal-table
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
66
65
|
none: false
|
67
|
-
requirements:
|
68
|
-
- -
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
|
71
|
-
segments:
|
72
|
-
- 0
|
73
|
-
version: "0"
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
74
70
|
type: :runtime
|
75
|
-
version_requirements: *id004
|
76
|
-
- !ruby/object:Gem::Dependency
|
77
|
-
name: erubis
|
78
71
|
prerelease: false
|
79
|
-
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
73
|
none: false
|
81
|
-
requirements:
|
82
|
-
- -
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: erubis
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
88
86
|
type: :runtime
|
89
|
-
version_requirements: *id005
|
90
|
-
- !ruby/object:Gem::Dependency
|
91
|
-
name: awesome_print
|
92
87
|
prerelease: false
|
93
|
-
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
89
|
none: false
|
95
|
-
requirements:
|
96
|
-
- -
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: awesome_print
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
102
|
type: :runtime
|
103
|
-
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
104
110
|
description: Cloud provisioning tool built on ruby fog
|
105
|
-
email:
|
111
|
+
email:
|
106
112
|
- scatanzarite@gmail.com
|
107
|
-
executables:
|
113
|
+
executables:
|
108
114
|
- rig
|
109
115
|
extensions: []
|
110
|
-
|
111
116
|
extra_rdoc_files: []
|
112
|
-
|
113
|
-
files:
|
117
|
+
files:
|
114
118
|
- .gitignore
|
115
119
|
- Gemfile
|
116
120
|
- LICENSE
|
@@ -171,37 +175,26 @@ files:
|
|
171
175
|
- rig.gemspec
|
172
176
|
homepage: https://github.com/shawncatz/rig
|
173
177
|
licenses: []
|
174
|
-
|
175
178
|
post_install_message:
|
176
179
|
rdoc_options: []
|
177
|
-
|
178
|
-
require_paths:
|
180
|
+
require_paths:
|
179
181
|
- lib
|
180
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
182
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
181
183
|
none: false
|
182
|
-
requirements:
|
183
|
-
- -
|
184
|
-
- !ruby/object:Gem::Version
|
185
|
-
|
186
|
-
|
187
|
-
- 0
|
188
|
-
version: "0"
|
189
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ! '>='
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
189
|
none: false
|
191
|
-
requirements:
|
192
|
-
- -
|
193
|
-
- !ruby/object:Gem::Version
|
194
|
-
|
195
|
-
segments:
|
196
|
-
- 0
|
197
|
-
version: "0"
|
190
|
+
requirements:
|
191
|
+
- - ! '>='
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
version: '0'
|
198
194
|
requirements: []
|
199
|
-
|
200
195
|
rubyforge_project:
|
201
|
-
rubygems_version: 1.8.
|
196
|
+
rubygems_version: 1.8.21
|
202
197
|
signing_key:
|
203
198
|
specification_version: 3
|
204
199
|
summary: Cloud provisioning tool built on ruby fog
|
205
200
|
test_files: []
|
206
|
-
|
207
|
-
has_rdoc:
|