rig 0.3.4 → 0.3.5
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/capistrano.rb +3 -2
- data/lib/rig/chef.rb +6 -0
- data/lib/rig/command.rb +1 -0
- data/lib/rig/command/abstract.rb +13 -2
- data/lib/rig/command/environment/list.rb +2 -2
- data/lib/rig/command/environment/protect.rb +22 -0
- data/lib/rig/command/instance/tag/get.rb +4 -24
- data/lib/rig/command/instance/view.rb +2 -2
- data/lib/rig/command/main.rb +16 -1
- data/lib/rig/config.rb +13 -5
- data/lib/rig/model/environment.rb +28 -22
- data/lib/rig/model/instance.rb +5 -2
- data/lib/rig/version.rb +1 -1
- metadata +6 -4
data/lib/rig/capistrano.rb
CHANGED
@@ -12,7 +12,7 @@ module Rig
|
|
12
12
|
env = ENV['ENVIRONMENT'] || Rig.config.environment
|
13
13
|
role = ENV['ROLE'] || Rig.config.role
|
14
14
|
servers = Rig::Model::Environment.find(env).servers
|
15
|
-
list = servers.select { |s| s.tags['Role'] == role }
|
15
|
+
list = role == 'all' ? servers : servers.select { |s| s.tags['Role'] == role }
|
16
16
|
|
17
17
|
raise "Rig could not find any servers matching environment=#{env} and role=#{role}" unless list && list.count > 0
|
18
18
|
list.each do |s|
|
@@ -41,8 +41,9 @@ configuration.load do
|
|
41
41
|
Rig.config.environment = ARGV[0]
|
42
42
|
Rig.config.role = ARGV[1]
|
43
43
|
|
44
|
+
# create dummy tasks for environment and role
|
44
45
|
begin
|
45
|
-
|
46
|
+
ARGV.first(2).each do |arg|
|
46
47
|
task arg do
|
47
48
|
nil
|
48
49
|
end
|
data/lib/rig/chef.rb
CHANGED
data/lib/rig/command.rb
CHANGED
@@ -15,6 +15,7 @@ require 'rig/command/environment/main'
|
|
15
15
|
require 'rig/command/environment/list'
|
16
16
|
require 'rig/command/environment/create'
|
17
17
|
require 'rig/command/environment/destroy'
|
18
|
+
require 'rig/command/environment/protect'
|
18
19
|
|
19
20
|
require 'rig/command/balancer/main'
|
20
21
|
require 'rig/command/balancer/list'
|
data/lib/rig/command/abstract.rb
CHANGED
@@ -4,9 +4,19 @@ module Rig
|
|
4
4
|
module Command
|
5
5
|
class Abstract < Clamp::Command
|
6
6
|
option ["-n", "--test"], :flag, "use Fog.mock! to test command without creating / destroying cloud resources" do |o|
|
7
|
+
Rig.config.mock = true
|
7
8
|
Fog.mock!
|
8
9
|
end
|
9
|
-
|
10
|
+
|
11
|
+
option ["-a", "--account"], "ACCOUNT", "set the rig account to use", :default => "default" do |a|
|
12
|
+
Rig.config.account = a
|
13
|
+
a
|
14
|
+
end
|
15
|
+
|
16
|
+
option ["-v", "--version"], :flag, "print version number and exit" do |v|
|
17
|
+
puts "Rig Version: #{Rig::Version::STRING}"
|
18
|
+
exit(0)
|
19
|
+
end
|
10
20
|
|
11
21
|
def print_table(columns, rows)
|
12
22
|
puts table(columns, *rows)
|
@@ -19,6 +29,7 @@ module Rig
|
|
19
29
|
r << server.tags['Name']
|
20
30
|
r << server.tags['Environment']
|
21
31
|
r << server.tags['Role']
|
32
|
+
r << (server.tags['Protected'] ? '*' : '')
|
22
33
|
r << server.public_ip_address.to_s
|
23
34
|
r << server.private_ip_address.to_s
|
24
35
|
r << server.flavor_id.to_s
|
@@ -27,7 +38,7 @@ module Rig
|
|
27
38
|
rows << r
|
28
39
|
end
|
29
40
|
|
30
|
-
print_table(%w{Name Environment Role PublicIP PrivateIP Size InstanceID State}, rows)
|
41
|
+
print_table(%w{Name Environment Role Pr PublicIP PrivateIP Size InstanceID State}, rows)
|
31
42
|
end
|
32
43
|
|
33
44
|
def execute
|
@@ -17,9 +17,9 @@ module Rig
|
|
17
17
|
rows = []
|
18
18
|
envs.each do |e|
|
19
19
|
env = Rig::Model::Environment.find(e)
|
20
|
-
rows << [env.name, env.template, env.region, env.servers.count, env.balancers.count]
|
20
|
+
rows << [env.name, env.template, env.region, env.servers.count, env.balancers.count, env.protected?]
|
21
21
|
end
|
22
|
-
print_table(%w{Name Template Region Servers# Balancers#}, rows)
|
22
|
+
print_table(%w{Name Template Region Servers# Balancers# Protected?}, rows)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Rig
|
2
|
+
module Command
|
3
|
+
module Environment
|
4
|
+
class Protect < Abstract
|
5
|
+
option ["-u","--undo"], :flag, "disable protection instead of enabling"
|
6
|
+
parameter "NAME", "the environment to protect"
|
7
|
+
|
8
|
+
def execute
|
9
|
+
env = Rig::Model::Environment.find(name)
|
10
|
+
raise "Environment #{name} not found" if env.nil?
|
11
|
+
connection = Rig::Connection.compute
|
12
|
+
val = undo? ? "false" : "true"
|
13
|
+
|
14
|
+
env.servers.each do |s|
|
15
|
+
connection.create_tags(s.id, "Protected" => val)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
Rig::Command::Environment::Main.subcommand "protect", "[un]set protection on environment, preventing termination", Rig::Command::Environment::Protect
|
@@ -4,32 +4,12 @@ module Rig
|
|
4
4
|
module Tag
|
5
5
|
class Get < Abstract
|
6
6
|
include Options::Config
|
7
|
-
include Options::Instance
|
8
|
-
include Options::InstanceName
|
9
7
|
|
10
|
-
|
11
|
-
unless iname || iid
|
12
|
-
raise "Must set either instance name or instance id (-iname or -iid)"
|
13
|
-
end
|
14
|
-
|
15
|
-
connection = Rig::Connection.compute
|
16
|
-
if iid
|
17
|
-
instance = connection.servers.get(iid)
|
18
|
-
else
|
19
|
-
list = connection.servers.all({"tag:Name" => iname})
|
20
|
-
if list.count > 1
|
21
|
-
puts "there is more than one instance that matches:"
|
22
|
-
instance_list(list)
|
23
|
-
return
|
24
|
-
end
|
25
|
-
instance = list.first
|
26
|
-
end
|
27
|
-
|
28
|
-
unless instance
|
29
|
-
puts "could not find instance"
|
30
|
-
return
|
31
|
-
end
|
8
|
+
parameter "NAME", "the name of the instance to get tags for"
|
32
9
|
|
10
|
+
def execute
|
11
|
+
instance = Rig::Model::Instance.find(name)
|
12
|
+
raise "instance not found #{name}" unless instance
|
33
13
|
puts "#{instance.tags.inspect}"
|
34
14
|
end
|
35
15
|
end
|
@@ -4,13 +4,13 @@ module Rig
|
|
4
4
|
class View < Abstract
|
5
5
|
include Options::ShowAll
|
6
6
|
|
7
|
+
# TODO: something wrong here, view is showing all instances
|
7
8
|
parameter "NAME", "name of instance"
|
8
9
|
|
9
10
|
def execute
|
10
11
|
list = Rig::Model::Instance.find(name)
|
11
12
|
list.each do |item|
|
12
|
-
|
13
|
-
puts
|
13
|
+
ap item.attributes
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
data/lib/rig/command/main.rb
CHANGED
@@ -12,9 +12,24 @@ module Rig
|
|
12
12
|
subcommand "accounts", "show account list" do
|
13
13
|
def execute
|
14
14
|
list = Rig::Model::Account.list
|
15
|
+
rows = []
|
15
16
|
list.each do |n, f|
|
16
|
-
|
17
|
+
rows << [(Rig.config.default_account == n.to_s), (Rig.account.name == n.to_s), n, f]
|
17
18
|
end
|
19
|
+
print_table(%w{Default Current Name Location}, rows)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
subcommand "chef", "test chef configuration" do
|
24
|
+
def execute
|
25
|
+
raise "chef not configured" unless Rig.config.chef
|
26
|
+
|
27
|
+
list = Rig::Chef.client_list
|
28
|
+
rows = []
|
29
|
+
list.each do |c|
|
30
|
+
rows << c
|
31
|
+
end
|
32
|
+
print_table(%w{Name Location}, rows)
|
18
33
|
end
|
19
34
|
end
|
20
35
|
|
data/lib/rig/config.rb
CHANGED
@@ -1,9 +1,6 @@
|
|
1
1
|
|
2
2
|
module Rig
|
3
3
|
class << self
|
4
|
-
@templates = []
|
5
|
-
@accounts = []
|
6
|
-
@cache_config = []
|
7
4
|
|
8
5
|
def configdir
|
9
6
|
@configdir ||= File.expand_path(ENV["RIG_CONFIG"] || "~/.rig")
|
@@ -12,15 +9,24 @@ module Rig
|
|
12
9
|
def config
|
13
10
|
@configuration ||= begin
|
14
11
|
c = Rig::Oconfig.load_yaml_file("#{configdir}/config.yml")
|
15
|
-
|
12
|
+
|
13
|
+
# prevent Chef and Capistrano being loaded at the same time
|
14
|
+
# requirements on net-ssh conflict (chef ~> 2.1.4)
|
15
|
+
#
|
16
|
+
# this makes it so we don't have to use bundler to run
|
17
|
+
# rig and cap together.
|
18
|
+
if c.chef && !defined?(Rig::Capistrano)
|
16
19
|
require 'rig/chef'
|
17
20
|
end
|
21
|
+
|
18
22
|
c
|
19
23
|
end
|
20
24
|
end
|
21
25
|
|
22
26
|
def account(name=get_account)
|
23
|
-
Rig::Model::Account.load(name)
|
27
|
+
a = Rig::Model::Account.load(name)
|
28
|
+
a.name = name
|
29
|
+
a
|
24
30
|
end
|
25
31
|
|
26
32
|
def get_config(name)
|
@@ -33,10 +39,12 @@ module Rig
|
|
33
39
|
|
34
40
|
def get_account
|
35
41
|
return ENV['RIG_ACCOUNT'] if ENV['RIG_ACCOUNT']
|
42
|
+
return Rig.config.account if Rig.config.account
|
36
43
|
return Rig.config.default_account if Rig.config.default_account
|
37
44
|
return Rig.config.accounts.first if Rig.config.accounts.count > 0
|
38
45
|
"default"
|
39
46
|
end
|
47
|
+
|
40
48
|
end
|
41
49
|
|
42
50
|
class Oconfig
|
@@ -10,28 +10,28 @@ module Rig
|
|
10
10
|
attr_reader :region
|
11
11
|
attr_reader :flavor
|
12
12
|
|
13
|
-
TEMPLATES = {
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
}
|
13
|
+
#TEMPLATES = {
|
14
|
+
# :solo => {
|
15
|
+
# :groups => %w{app-server db-inqcloud-dev},
|
16
|
+
# :instances => [
|
17
|
+
# :solo => {
|
18
|
+
# :flavor => 'c1.medium',
|
19
|
+
# :count => 1,
|
20
|
+
# :balance => true,
|
21
|
+
# :primary => true
|
22
|
+
# }
|
23
|
+
# ]
|
24
|
+
# },
|
25
|
+
# :multi => {
|
26
|
+
# :groups => %w{app-server db-inqcloud-dev},
|
27
|
+
# :instances => [
|
28
|
+
# :harvester => { :flavor => 'c1.large', :count => 3, :image => "ami-faketest" },
|
29
|
+
# :queue => { :flavor => 'c1.medium', :count => 3 },
|
30
|
+
# :cache => { :flavor => 'm1.medium', :count => 3 },
|
31
|
+
# :app => { :flavor => 'c1.large', :count => 3, :balance => true, :primary => true }
|
32
|
+
# ]
|
33
|
+
# }
|
34
|
+
#}
|
35
35
|
|
36
36
|
class << self
|
37
37
|
def list
|
@@ -55,6 +55,7 @@ module Rig
|
|
55
55
|
|
56
56
|
def destroy(name, template=nil, opts={ })
|
57
57
|
env = self.find(name, template, opts)
|
58
|
+
raise "environment has protected instances" if env.protected?
|
58
59
|
puts "destroying: #{name}"
|
59
60
|
env.destroy
|
60
61
|
true
|
@@ -205,6 +206,11 @@ module Rig
|
|
205
206
|
def reload
|
206
207
|
find_servers
|
207
208
|
find_balancers
|
209
|
+
@protected = @servers.any? {|s| s.tags["Protected"] == "true" }
|
210
|
+
end
|
211
|
+
|
212
|
+
def protected?
|
213
|
+
@protected
|
208
214
|
end
|
209
215
|
|
210
216
|
private
|
data/lib/rig/model/instance.rb
CHANGED
@@ -5,7 +5,7 @@ module Rig
|
|
5
5
|
class Instance
|
6
6
|
class << self
|
7
7
|
def all(filters={})
|
8
|
-
Rig::Connection.compute.servers.all(filters)
|
8
|
+
@all ||= Rig::Connection.compute.servers.all(filters)
|
9
9
|
end
|
10
10
|
|
11
11
|
def running
|
@@ -14,9 +14,11 @@ module Rig
|
|
14
14
|
|
15
15
|
def find(id)
|
16
16
|
if id =~ /^i-/
|
17
|
-
|
17
|
+
puts "find #{id}"
|
18
|
+
Rig::Connection.compute.servers.get(id)
|
18
19
|
else
|
19
20
|
# must be tag:Name
|
21
|
+
puts "all tag:Name => #{id}"
|
20
22
|
Rig::Connection.compute.servers.all({"tag:Name"=>id})
|
21
23
|
end
|
22
24
|
end
|
@@ -24,6 +26,7 @@ module Rig
|
|
24
26
|
def find_by_environment(env)
|
25
27
|
Rig::Connection.compute.servers.all({"tag:Environment"=>env})
|
26
28
|
end
|
29
|
+
|
27
30
|
def find_by_role_and_environment(role, env)
|
28
31
|
Rig::Connection.compute.servers.all({"tag:Environment"=> env, "tag:Role" => role})
|
29
32
|
end
|
data/lib/rig/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rig
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 3
|
9
|
-
-
|
10
|
-
version: 0.3.
|
9
|
+
- 5
|
10
|
+
version: 0.3.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Shawn Catanzarite
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-04-
|
18
|
+
date: 2012-04-30 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: clamp
|
@@ -139,6 +139,7 @@ files:
|
|
139
139
|
- lib/rig/command/environment/destroy.rb
|
140
140
|
- lib/rig/command/environment/list.rb
|
141
141
|
- lib/rig/command/environment/main.rb
|
142
|
+
- lib/rig/command/environment/protect.rb
|
142
143
|
- lib/rig/command/instance/create.rb
|
143
144
|
- lib/rig/command/instance/destroy.rb
|
144
145
|
- lib/rig/command/instance/list.rb
|
@@ -200,3 +201,4 @@ specification_version: 3
|
|
200
201
|
summary: Cloud provisioning tool built on ruby fog
|
201
202
|
test_files: []
|
202
203
|
|
204
|
+
has_rdoc:
|