rig 0.4.5 → 0.5.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.
- data/Gemfile +1 -0
- data/conf/accounts/default.yml +3 -3
- data/conf/config.yml +33 -6
- data/conf/plugins/chef.rb +105 -0
- data/conf/plugins/mongo.rb +135 -0
- data/{lib/rig/command/database.rb → conf/plugins/mysql.rb} +12 -8
- data/conf/plugins/scout.rb +81 -0
- data/conf/userdata/chef/userdata.sh.erb +7 -1
- data/lib/rig.rb +11 -1
- data/lib/rig/account.rb +43 -0
- data/lib/rig/command.rb +92 -41
- data/lib/rig/command/abstract.rb +1 -2
- data/lib/rig/command/balancer.rb +102 -0
- data/lib/rig/command/dns.rb +47 -0
- data/lib/rig/command/environment.rb +67 -0
- data/lib/rig/command/keypair.rb +15 -0
- data/lib/rig/command/server.rb +181 -0
- data/lib/rig/config.rb +35 -105
- data/lib/rig/log.rb +66 -0
- data/lib/rig/model/account.rb +1 -1
- data/lib/rig/model/connection.rb +13 -6
- data/lib/rig/model/environment.rb +12 -8
- data/lib/rig/model/instance.rb +3 -8
- data/lib/rig/model/template.rb +1 -1
- data/lib/rig/model/userdata.rb +1 -1
- data/lib/rig/plugin.rb +61 -0
- data/lib/rig/version.rb +2 -2
- metadata +15 -35
- data/lib/rig/chef.rb +0 -59
- data/lib/rig/command/balancer/destroy.rb +0 -16
- data/lib/rig/command/balancer/list.rb +0 -30
- data/lib/rig/command/balancer/listener.rb +0 -31
- data/lib/rig/command/balancer/main.rb +0 -40
- data/lib/rig/command/balancer/view.rb +0 -19
- data/lib/rig/command/dns/create.rb +0 -19
- data/lib/rig/command/dns/destroy.rb +0 -16
- data/lib/rig/command/dns/edit.rb +0 -20
- data/lib/rig/command/dns/list.rb +0 -21
- data/lib/rig/command/dns/main.rb +0 -13
- data/lib/rig/command/environment/create.rb +0 -21
- data/lib/rig/command/environment/destroy.rb +0 -18
- data/lib/rig/command/environment/list.rb +0 -31
- data/lib/rig/command/environment/main.rb +0 -15
- data/lib/rig/command/environment/protect.rb +0 -22
- data/lib/rig/command/instance/create.rb +0 -60
- data/lib/rig/command/instance/destroy.rb +0 -19
- data/lib/rig/command/instance/list.rb +0 -26
- data/lib/rig/command/instance/main.rb +0 -16
- data/lib/rig/command/instance/tag/get.rb +0 -20
- data/lib/rig/command/instance/tag/main.rb +0 -14
- data/lib/rig/command/instance/tag/remove.rb +0 -44
- data/lib/rig/command/instance/tag/set.rb +0 -46
- data/lib/rig/command/instance/view.rb +0 -20
- data/lib/rig/command/keypair/list.rb +0 -14
- data/lib/rig/command/keypair/main.rb +0 -11
- data/lib/rig/command/main.rb +0 -90
- data/lib/rig/model/database.rb +0 -23
- data/lib/rig/model/database/base.rb +0 -11
- data/lib/rig/model/database/mongodb.rb +0 -70
- data/lib/rig/model/database/mysql.rb +0 -12
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'rig'
|
2
|
-
|
3
|
-
module Rig
|
4
|
-
module Command
|
5
|
-
module Instance
|
6
|
-
class Destroy < Abstract
|
7
|
-
|
8
|
-
parameter "NAME", "the name of the instance to connect to"
|
9
|
-
|
10
|
-
def execute
|
11
|
-
list = Rig::Model::Instance.find(name)
|
12
|
-
Rig::Model::Instance.destroy(list)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
Rig::Command::Instance::Main.subcommand 'destroy', 'destroy (terminate) instance', Rig::Command::Instance::Destroy
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'rig'
|
2
|
-
|
3
|
-
module Rig
|
4
|
-
module Command
|
5
|
-
module Instance
|
6
|
-
class List < Abstract
|
7
|
-
include Options::ShowAll
|
8
|
-
|
9
|
-
option %w{-l --long}, :flag, "show more information in table"
|
10
|
-
parameter "[ENV]", "environment"
|
11
|
-
|
12
|
-
def execute
|
13
|
-
connection = Rig::Connection.compute
|
14
|
-
filters = {}
|
15
|
-
filters["instance-state-name"] = "running" unless showall?
|
16
|
-
filters["tag:Environment"] = env if env
|
17
|
-
|
18
|
-
list = connection.servers.all(filters)
|
19
|
-
instance_list(list, long?)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
Rig::Command::Instance::Main.subcommand 'list', 'List instances', Rig::Command::Instance::List
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module Rig
|
2
|
-
module Command
|
3
|
-
module Instance
|
4
|
-
class Main < Abstract
|
5
|
-
#subcommand 'list', 'List instances', InstanceList
|
6
|
-
#subcommand 'create', 'Create an instance', InstanceCreate
|
7
|
-
#subcommand 'ssh', 'Connect to instance', InstanceSsh
|
8
|
-
#subcommand 'tag', 'Manage tags on instance', InstanceTag
|
9
|
-
self.default_subcommand = "list"
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
Rig::Command::Main.subcommand 'instance', 'Commands related to instances', Rig::Command::Instance::Main
|
16
|
-
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module Rig
|
2
|
-
module Command
|
3
|
-
module Instance
|
4
|
-
module Tag
|
5
|
-
class Get < Abstract
|
6
|
-
|
7
|
-
parameter "NAME", "the name of the instance to get tags for"
|
8
|
-
|
9
|
-
def execute
|
10
|
-
instance = Rig::Model::Instance.find(name)
|
11
|
-
raise "instance not found #{name}" unless instance
|
12
|
-
puts "#{instance.tags.inspect}"
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
Rig::Command::Instance::Tag::Main.subcommand 'get', 'get tag(s) for this instance', Rig::Command::Instance::Tag::Get
|
@@ -1,44 +0,0 @@
|
|
1
|
-
|
2
|
-
module Rig
|
3
|
-
module Command
|
4
|
-
module Instance
|
5
|
-
module Tag
|
6
|
-
class Remove < Abstract
|
7
|
-
include Options::Instance
|
8
|
-
include Options::InstanceName
|
9
|
-
|
10
|
-
parameter "TAG", "tag key to remove", :attribute_name => :raw_tag
|
11
|
-
|
12
|
-
# TODO: fix this to use Model instead
|
13
|
-
def execute
|
14
|
-
unless iname || iid
|
15
|
-
raise "Must set either instance name or instance id (-iname or -iid)"
|
16
|
-
end
|
17
|
-
|
18
|
-
connection = Rig::Connection.compute
|
19
|
-
if iid
|
20
|
-
instance = connection.servers.get(iid)
|
21
|
-
else
|
22
|
-
list = connection.servers.all({"tag:Name" => iname})
|
23
|
-
if list.count > 1
|
24
|
-
puts "there is more than one instance that matches:"
|
25
|
-
instance_list(list)
|
26
|
-
return
|
27
|
-
end
|
28
|
-
instance = list.first
|
29
|
-
end
|
30
|
-
|
31
|
-
unless instance
|
32
|
-
puts "could not find instance"
|
33
|
-
return
|
34
|
-
end
|
35
|
-
|
36
|
-
ap connection.delete_tags(instance.id, raw_tag => instance.tags[raw_tag])
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
Rig::Command::Instance::Tag::Main.subcommand 'rm', 'remove tag(s) for this instance', Rig::Command::Instance::Tag::Remove
|
@@ -1,46 +0,0 @@
|
|
1
|
-
module Rig
|
2
|
-
module Command
|
3
|
-
module Instance
|
4
|
-
module Tag
|
5
|
-
class Set < Abstract
|
6
|
-
include Options::Instance
|
7
|
-
include Options::InstanceName
|
8
|
-
|
9
|
-
parameter "TAGS ...", "tags of the form key:value", :attribute_name => :raw_tags
|
10
|
-
|
11
|
-
def execute
|
12
|
-
unless iname || iid
|
13
|
-
raise "Must set either instance name or instance id (-iname or -iid)"
|
14
|
-
end
|
15
|
-
|
16
|
-
connection = Rig::Connection.compute
|
17
|
-
if iid
|
18
|
-
instance = connection.servers.get(iid)
|
19
|
-
else
|
20
|
-
list = connection.servers.all({"tag:Name" => iname})
|
21
|
-
if list.count > 1
|
22
|
-
puts "there is more than one instance that matches:"
|
23
|
-
instance_list(list)
|
24
|
-
return
|
25
|
-
end
|
26
|
-
instance = list.first
|
27
|
-
end
|
28
|
-
|
29
|
-
unless instance
|
30
|
-
puts "could not find instance"
|
31
|
-
return
|
32
|
-
end
|
33
|
-
|
34
|
-
raw_tags.each do |s|
|
35
|
-
(k,v) = s.split(':',2)
|
36
|
-
#tags[k] = v if k && v
|
37
|
-
connection.create_tags(instance.id, k => v)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
Rig::Command::Instance::Tag::Main.subcommand 'set', 'set tag(s) for this instance', Rig::Command::Instance::Tag::Set
|
@@ -1,20 +0,0 @@
|
|
1
|
-
module Rig
|
2
|
-
module Command
|
3
|
-
module Instance
|
4
|
-
class View < Abstract
|
5
|
-
include Options::ShowAll
|
6
|
-
|
7
|
-
# TODO: something wrong here, view is showing all instances
|
8
|
-
parameter "NAME", "name of instance"
|
9
|
-
|
10
|
-
def execute
|
11
|
-
list = Rig::Model::Instance.find(name)
|
12
|
-
list.each do |item|
|
13
|
-
ap item.attributes
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
Rig::Command::Instance::Main.subcommand 'view', 'view instances', Rig::Command::Instance::View
|
@@ -1,14 +0,0 @@
|
|
1
|
-
module Rig
|
2
|
-
module Command
|
3
|
-
module Keypair
|
4
|
-
class List < Abstract
|
5
|
-
def execute
|
6
|
-
connection = Rig::Connection.compute
|
7
|
-
list = connection.key_pairs.all
|
8
|
-
puts list.inspect
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
Rig::Command::Keypair::Main.subcommand 'list', 'list keypairs', Rig::Command::Keypair::List
|
data/lib/rig/command/main.rb
DELETED
@@ -1,90 +0,0 @@
|
|
1
|
-
require 'awesome_print'
|
2
|
-
|
3
|
-
module Rig
|
4
|
-
module Command
|
5
|
-
class Main < Abstract
|
6
|
-
|
7
|
-
subcommand "chef", "test chef configuration" do
|
8
|
-
def execute
|
9
|
-
raise "chef not configured" unless Rig.config[:chef]
|
10
|
-
|
11
|
-
list = Rig::Chef.client_list
|
12
|
-
rows = []
|
13
|
-
list.each do |c|
|
14
|
-
rows << c
|
15
|
-
end
|
16
|
-
print_table(%w{Name Location}, rows)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def merge_file(src, dest)
|
21
|
-
old = YAML.load_file(dest)
|
22
|
-
FileUtils.mv(dest, "#{dest}.bak.#{Time.now.to_i}")
|
23
|
-
new = YAML.load_file(src)
|
24
|
-
new.merge!(old)
|
25
|
-
File.open(dest, "w") {|f| f.write(new.to_yaml)}
|
26
|
-
end
|
27
|
-
|
28
|
-
subcommand "userdata", "test userdata" do
|
29
|
-
parameter "NAME", "name of server"
|
30
|
-
parameter "ROLE", "role of server"
|
31
|
-
parameter "ENVIRONMENT", "environment of server"
|
32
|
-
|
33
|
-
def execute
|
34
|
-
userdata = Rig::Model::Userdata.create(name, role, environment)
|
35
|
-
puts "USERDATA:\n#{userdata}"
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
subcommand "init", "initialize configuration directory" do
|
40
|
-
option %w{-f --force}, :flag, "force creation of files", :default => false
|
41
|
-
option %w{-d --directory}, "DIRECTORY", "configuration directory", :default => "~/.rig"
|
42
|
-
|
43
|
-
def execute
|
44
|
-
dir = File.expand_path(ENV['RIG_CONFIG'] ? ENV['RIG_CONFIG'] : directory)
|
45
|
-
back = "#{dir}.bak.#{Time.now.to_i}"
|
46
|
-
conf = File.expand_path("../../../../conf", __FILE__)
|
47
|
-
|
48
|
-
files = %w{
|
49
|
-
config.yml
|
50
|
-
accounts/default.yml
|
51
|
-
templates/solo.yml
|
52
|
-
templates/multi.yml
|
53
|
-
userdata/default/userdata.sh.erb
|
54
|
-
userdata/default/userdata.yml
|
55
|
-
userdata/chef/userdata.sh.erb
|
56
|
-
userdata/chef/userdata.yml
|
57
|
-
userdata/chef/validation.pem
|
58
|
-
}
|
59
|
-
|
60
|
-
unless dir
|
61
|
-
puts "directory could not be found: tried environment variables RIG_CONFIG (#{ENV['RIG_CONFIG']}) and HOME (#{ENV['HOME']}"
|
62
|
-
exit(1)
|
63
|
-
end
|
64
|
-
|
65
|
-
if File.exists?(dir)
|
66
|
-
unless File.directory?(dir)
|
67
|
-
puts "moving old config #{dir} to #{back}"
|
68
|
-
FileUtils.mv(dir, new)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
puts "[create] #{dir}/"
|
73
|
-
FileUtils.mkdir_p(dir)
|
74
|
-
|
75
|
-
files.each do |file|
|
76
|
-
src = "#{conf}/#{file}"
|
77
|
-
dest = "#{dir}/#{file}"
|
78
|
-
FileUtils.mkdir_p(File.dirname(dest))
|
79
|
-
if File.exists?(dest) && !force?
|
80
|
-
puts "[skip] #{dest}"
|
81
|
-
else
|
82
|
-
puts "[create] #{dest}"
|
83
|
-
FileUtils.copy(src, dest)
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
data/lib/rig/model/database.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'rig/model/database/base'
|
2
|
-
require 'rig/model/database/mongodb'
|
3
|
-
require 'rig/model/database/mysql'
|
4
|
-
|
5
|
-
module Rig
|
6
|
-
module Model
|
7
|
-
module Database
|
8
|
-
class << self
|
9
|
-
def new(opts)
|
10
|
-
provider = opts.delete(:provider)
|
11
|
-
case provider.downcase
|
12
|
-
when 'mongodb'
|
13
|
-
Rig::Model::Database::MongoDB.new(opts)
|
14
|
-
when 'mysql'
|
15
|
-
Rig::Model::Database::MySQL.new(opts)
|
16
|
-
else
|
17
|
-
raise "unknown database #{provider.inspect}"
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'mongo'
|
3
|
-
require 'bson'
|
4
|
-
|
5
|
-
module Rig
|
6
|
-
module Model
|
7
|
-
module Database
|
8
|
-
class MongoDB
|
9
|
-
|
10
|
-
def initialize(opts)
|
11
|
-
@options = {
|
12
|
-
:host => "localhost",
|
13
|
-
:port => 27017,
|
14
|
-
:user => nil,
|
15
|
-
:pass => nil,
|
16
|
-
:admin_user => nil,
|
17
|
-
:admin_pass => nil
|
18
|
-
}.merge(opts)
|
19
|
-
connect
|
20
|
-
end
|
21
|
-
|
22
|
-
# accessors
|
23
|
-
def user; @options[:user]; end
|
24
|
-
def host; @options[:host]; end
|
25
|
-
def port; @options[:port]; end
|
26
|
-
def pass; @options[:pass]; end
|
27
|
-
def password; @options[:pass]; end
|
28
|
-
def admin_user; @options[:admin_user]; end
|
29
|
-
def admin_pass; @options[:admin_pass]; end
|
30
|
-
def admin_password; @options[:admin_pass]; end
|
31
|
-
|
32
|
-
def connect
|
33
|
-
@cxn ||= begin
|
34
|
-
Mongo::Connection.new(@options[:host], @options[:port])
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def auth_admin
|
39
|
-
db = @cxn.db("admin")
|
40
|
-
db.authenticate(@options[:admin_user], @options[:admin_pass])
|
41
|
-
end
|
42
|
-
|
43
|
-
def all
|
44
|
-
begin
|
45
|
-
connect.database_info
|
46
|
-
rescue Mongo::OperationFailure => e
|
47
|
-
raise unless e.message =~ /need to login/
|
48
|
-
raise unless auth_admin
|
49
|
-
connect.database_info
|
50
|
-
rescue => e
|
51
|
-
puts "exception: <#{e.class}> #{e.message} at #{e.backtrace.first}"
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def create_database(name, user, pass)
|
56
|
-
db = connect.db("admin")
|
57
|
-
raise "failed to authenticate" unless db.authenticate(@options[:admin_user], @options[:admin_pass])
|
58
|
-
newdb = connect.db(name)
|
59
|
-
newdb.add_user(user, pass)
|
60
|
-
end
|
61
|
-
|
62
|
-
def destroy_database(name)
|
63
|
-
db = connect.db("admin")
|
64
|
-
raise "failed to authenticate" unless db.authenticate(@options[:admin_user], @options[:admin_pass])
|
65
|
-
connect.drop_database(name)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|