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
data/lib/rig.rb
CHANGED
data/lib/rig/account.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
module Rig
|
2
|
+
module Account
|
3
|
+
class << self
|
4
|
+
attr_reader :name
|
5
|
+
attr_reader :loaded
|
6
|
+
|
7
|
+
def data(name = get)
|
8
|
+
if @name != name
|
9
|
+
@data = nil
|
10
|
+
@loaded = false
|
11
|
+
@name = nil
|
12
|
+
end
|
13
|
+
|
14
|
+
@data ||= begin
|
15
|
+
Rig::Log.debug "loading account"
|
16
|
+
a = Rig::Model::Account.load(name)
|
17
|
+
a[:name] = name
|
18
|
+
|
19
|
+
Rig::Log.debug "loading plugins from account"
|
20
|
+
Rig::Plugin.load(a[:plugins]) if a[:plugins]
|
21
|
+
|
22
|
+
a
|
23
|
+
end
|
24
|
+
@name = @data[:name]
|
25
|
+
@loaded = true
|
26
|
+
@data
|
27
|
+
end
|
28
|
+
|
29
|
+
def get
|
30
|
+
return ENV['RIG_ACCOUNT'] if ENV['RIG_ACCOUNT']
|
31
|
+
return Rig.config[:account] if Rig.config[:account]
|
32
|
+
return Rig.config[:default_account] if Rig.config[:default_account]
|
33
|
+
return Rig.config[:accounts].first if Rig.config[:accounts] && Rig.config[:accounts].count > 0
|
34
|
+
"default"
|
35
|
+
end
|
36
|
+
|
37
|
+
def save
|
38
|
+
name = Rig.account[:name]
|
39
|
+
Rig::Model::Account.save(name, Rig.account)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/rig/command.rb
CHANGED
@@ -1,47 +1,98 @@
|
|
1
1
|
require 'rig'
|
2
|
-
require 'clamp'
|
3
|
-
require 'fog'
|
4
|
-
require 'yaml'
|
5
|
-
|
6
2
|
require 'rig/model'
|
7
3
|
|
8
4
|
require 'rig/command/abstract'
|
9
5
|
require 'rig/command/options'
|
10
6
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
7
|
+
module Rig
|
8
|
+
module Command
|
9
|
+
class Main < Abstract
|
10
|
+
def merge_file(src, dest)
|
11
|
+
old = YAML.load_file(dest)
|
12
|
+
FileUtils.mv(dest, "#{dest}.bak.#{Time.now.to_i}")
|
13
|
+
new = YAML.load_file(src)
|
14
|
+
new.merge!(old)
|
15
|
+
File.open(dest, "w") {|f| f.write(new.to_yaml)}
|
16
|
+
end
|
17
|
+
|
18
|
+
subcommand "userdata", "test userdata" do
|
19
|
+
parameter "NAME", "name of server"
|
20
|
+
parameter "ROLE", "role of server"
|
21
|
+
parameter "ENVIRONMENT", "environment of server"
|
22
|
+
|
23
|
+
def execute
|
24
|
+
userdata = Rig::Model::Userdata.create(name, role, environment)
|
25
|
+
puts "USERDATA:\n#{userdata}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
subcommand "init", "initialize configuration directory" do
|
30
|
+
option %w{-f --force}, :flag, "force creation of files", :default => false
|
31
|
+
option %w{-d --directory}, "DIRECTORY", "configuration directory", :default => "~/.rig"
|
32
|
+
|
33
|
+
def execute
|
34
|
+
dir = File.expand_path(ENV['RIG_CONFIG'] ? ENV['RIG_CONFIG'] : directory)
|
35
|
+
back = "#{dir}.bak.#{Time.now.to_i}"
|
36
|
+
conf = File.expand_path("../../../../conf", __FILE__)
|
37
|
+
|
38
|
+
files = %w{
|
39
|
+
config.yml
|
40
|
+
|
41
|
+
accounts/default.yml
|
42
|
+
|
43
|
+
templates/solo.yml
|
44
|
+
templates/multi.yml
|
45
|
+
|
46
|
+
userdata/default/userdata.sh.erb
|
47
|
+
userdata/default/userdata.yml
|
48
|
+
userdata/chef/userdata.sh.erb
|
49
|
+
userdata/chef/userdata.yml
|
50
|
+
userdata/chef/validation.pem
|
51
|
+
|
52
|
+
plugins/chef.rb
|
53
|
+
plugins/scout.rb
|
54
|
+
}
|
55
|
+
|
56
|
+
unless dir
|
57
|
+
puts "directory could not be found: tried environment variables RIG_CONFIG (#{ENV['RIG_CONFIG']}) and HOME (#{ENV['HOME']}"
|
58
|
+
exit(1)
|
59
|
+
end
|
60
|
+
|
61
|
+
if File.exists?(dir)
|
62
|
+
unless File.directory?(dir)
|
63
|
+
puts "moving old config #{dir} to #{back}"
|
64
|
+
FileUtils.mv(dir, new)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
puts "[create] #{dir}/"
|
69
|
+
FileUtils.mkdir_p(dir)
|
70
|
+
|
71
|
+
files.each do |file|
|
72
|
+
src = "#{conf}/#{file}"
|
73
|
+
dest = "#{dir}/#{file}"
|
74
|
+
FileUtils.mkdir_p(File.dirname(dest))
|
75
|
+
if File.exists?(dest) && !force?
|
76
|
+
puts "[skip] #{dest}"
|
77
|
+
else
|
78
|
+
puts "[create] #{dest}"
|
79
|
+
FileUtils.copy(src, dest)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
class << self
|
87
|
+
def load
|
88
|
+
Rig::Plugin.run "commands:before"
|
89
|
+
|
90
|
+
Dir["#{File.dirname(__FILE__)}/model/*.rb"].each {|file| require file.gsub(/\.rb/,'')}
|
91
|
+
|
92
|
+
Rig::Plugin.run "commands:loaded", Rig::Command::Main
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
Rig::Command.load
|
data/lib/rig/command/abstract.rb
CHANGED
@@ -9,8 +9,7 @@ module Rig
|
|
9
9
|
end
|
10
10
|
|
11
11
|
option ["-a", "--account"], "ACCOUNT", "set the rig account to use", :default => "default" do |a|
|
12
|
-
Rig.
|
13
|
-
a
|
12
|
+
Rig::Account.data(a)
|
14
13
|
end
|
15
14
|
|
16
15
|
option ["-v", "--version"], :flag, "print version number and exit" do |v|
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'rig'
|
2
|
+
require 'rest-client'
|
3
|
+
|
4
|
+
module Rig
|
5
|
+
module Command
|
6
|
+
class Balancer < Abstract
|
7
|
+
self.default_subcommand = 'list'
|
8
|
+
|
9
|
+
subcommand "list", "list load balancers" do
|
10
|
+
def execute
|
11
|
+
list = Rig::Model::Balancer.all
|
12
|
+
list.each do |lb|
|
13
|
+
puts lb.id
|
14
|
+
puts "- listeners"
|
15
|
+
lb.listeners.each do |l|
|
16
|
+
puts " - #{l.protocol}:#{l.lb_port} => #{l.instance_protocol}:#{l.instance_port}"
|
17
|
+
end
|
18
|
+
puts "- instances"
|
19
|
+
lb.instances.each do |inst|
|
20
|
+
puts " - #{inst}"
|
21
|
+
end
|
22
|
+
puts "- zones"
|
23
|
+
lb.availability_zones.each do |z|
|
24
|
+
puts " - #{z}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
subcommand "destroy", "destroy load balancer" do
|
31
|
+
parameter "NAME", "name of load balancer"
|
32
|
+
|
33
|
+
def execute
|
34
|
+
Rig::Model::Balancer.destroy(name)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
subcommand "listener", "manage listeners for load balancer" do
|
39
|
+
subcommand "add", "add a listener to a balancer" do
|
40
|
+
parameter "BALANCER", "balancer name"
|
41
|
+
parameter "LISTENER", "listener data PROTO:PORT/PROTO:PORT"
|
42
|
+
parameter "[CERT]", "arn for server certificate"
|
43
|
+
parameter "[POLICY] ...", "policy names"
|
44
|
+
|
45
|
+
def execute
|
46
|
+
(from, to) = listener.split('/')
|
47
|
+
#newlist = elb.listeners.create()
|
48
|
+
Rig::Model::Balancer.add_listener(balancer, from, to, cert, policy_list)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
subcommand "rm", "remove a listener from a balancer" do
|
53
|
+
parameter "BALANCER", "balancer name"
|
54
|
+
parameter "LISTENER", "listener data PROTO:PORT (just the elb side)"
|
55
|
+
|
56
|
+
def execute
|
57
|
+
Rig::Model::Balancer.destroy_listener(balancer, listener)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
subcommand 'test', 'test a load balancer' do
|
63
|
+
option %w{-c --count}, "COUNT", "number of times to loop", :default => 100
|
64
|
+
option %w{-p --poll}, "POLL", "poll time", :default => 10
|
65
|
+
parameter "NAME", "name of the load balancer to test"
|
66
|
+
|
67
|
+
def execute
|
68
|
+
elb = Rig::Model::Balancer.find(name)
|
69
|
+
raise "elb #{name} not found" unless elb
|
70
|
+
|
71
|
+
dns = elb.dns_name
|
72
|
+
count.times do |i|
|
73
|
+
puts "### loop #{i}"
|
74
|
+
ips = `host #{dns}`.split(/\n/).collect { |e| e.split.last }
|
75
|
+
ips.each do |ip|
|
76
|
+
val = begin
|
77
|
+
RestClient.get("http://#{ip}")
|
78
|
+
rescue => e
|
79
|
+
e.message
|
80
|
+
end
|
81
|
+
print ".. #{ip} - #{val}"
|
82
|
+
puts
|
83
|
+
end
|
84
|
+
sleep poll
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
subcommand "view", "view load balancer information" do
|
90
|
+
include Options::ShowAll
|
91
|
+
|
92
|
+
parameter "NAME", "name of instance"
|
93
|
+
|
94
|
+
def execute
|
95
|
+
item = Rig::Model::Balancer.find(name)
|
96
|
+
puts item.attributes.to_yaml
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
Rig::Command::Main.subcommand "balancer", "manage load balancers", Rig::Command::Balancer
|
@@ -0,0 +1,47 @@
|
|
1
|
+
|
2
|
+
module Rig
|
3
|
+
module Command
|
4
|
+
class Dns < Abstract
|
5
|
+
self.default_subcommand = 'list'
|
6
|
+
|
7
|
+
subcommand "create", "create dns entry" do
|
8
|
+
parameter 'NAME', 'the name to create'
|
9
|
+
parameter 'VALUE', 'where the name points to'
|
10
|
+
|
11
|
+
def execute
|
12
|
+
Rig::Model::Dns.create(name, value)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
subcommand "destroy", "destroy dns entry" do
|
17
|
+
parameter "NAME", "name of dns entry"
|
18
|
+
def execute
|
19
|
+
Rig::Model::Dns.destroy(name)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
subcommand "change", "change dns entry" do
|
24
|
+
parameter 'NAME', 'the name to change'
|
25
|
+
parameter 'VALUE', 'where the name points to'
|
26
|
+
|
27
|
+
def execute
|
28
|
+
Rig::Model::Dns.destroy(name)
|
29
|
+
Rig::Model::Dns.create(name, value)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
subcommand "list", "list dns entries" do
|
34
|
+
def execute
|
35
|
+
zone = Rig.get_config(:dns_zone)
|
36
|
+
records = Rig::Model::Dns.records("#{zone}")
|
37
|
+
rows = []
|
38
|
+
records.each do |record|
|
39
|
+
rows << [zone, record.type, record.ttl, record.name, [*record.value].join(",")]
|
40
|
+
end
|
41
|
+
print_table(%w{Domain Type TTL Name Value}, rows)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
Rig::Command::Main.subcommand "dns", "manage dns", Rig::Command::Dns
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'rig'
|
2
|
+
require 'fog'
|
3
|
+
|
4
|
+
module Rig
|
5
|
+
module Command
|
6
|
+
class Environment < Abstract
|
7
|
+
self.default_subcommand = "list"
|
8
|
+
|
9
|
+
subcommand "create", "create environment" do
|
10
|
+
parameter "NAME", "the name of the environment"
|
11
|
+
parameter "TEMPLATE", "the template to use (solo, multi, etc)", :default => "solo"
|
12
|
+
|
13
|
+
def execute
|
14
|
+
#connection = Rig::Connection.compute
|
15
|
+
env = Rig::Model::Environment.create(name, template.to_sym)
|
16
|
+
#ap env.servers
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
subcommand "destroy", "destroy environment" do
|
21
|
+
parameter "NAME", "name of the environment to destroy"
|
22
|
+
|
23
|
+
def execute
|
24
|
+
Rig::Model::Environment.destroy(name)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
subcommand "list", "list environments" do
|
29
|
+
option %w{-s --simple}, :flag, "just show list of names"
|
30
|
+
|
31
|
+
def execute
|
32
|
+
envs = Rig::Model::Environment.list
|
33
|
+
|
34
|
+
if simple?
|
35
|
+
print_table(%w{Name}, envs)
|
36
|
+
else
|
37
|
+
rows = []
|
38
|
+
envs.each do |e|
|
39
|
+
env = Rig::Model::Environment.find(e)
|
40
|
+
zones = env.servers.collect { |e| e.availability_zone }
|
41
|
+
rows << [env.name, env.template, env.region, env.servers.count, env.balancers.count, env.protected?, zones]
|
42
|
+
end
|
43
|
+
print_table(%w{Name Template Region Servers# Balancers# Protected? AZs}, rows)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
subcommand "protect", "set (or disable) protection on environment" do
|
49
|
+
option ["-u", "--undo"], :flag, "disable protection instead of enabling"
|
50
|
+
parameter "NAME", "the environment to protect"
|
51
|
+
|
52
|
+
def execute
|
53
|
+
env = Rig::Model::Environment.find(name)
|
54
|
+
raise "Environment #{name} not found" if env.nil?
|
55
|
+
connection = Rig::Connection.compute
|
56
|
+
val = undo? ? "false" : "true"
|
57
|
+
|
58
|
+
env.servers.each do |s|
|
59
|
+
connection.create_tags(s.id, "Protected" => val)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
Rig::Command::Main.subcommand "environment", "manage environments", Rig::Command::Environment
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Rig
|
2
|
+
module Command
|
3
|
+
class Keypair < Abstract
|
4
|
+
self.default_subcommand = "list"
|
5
|
+
subcommand "list", "list key pairs" do
|
6
|
+
def execute
|
7
|
+
connection = Rig::Connection.compute
|
8
|
+
list = connection.key_pairs.all
|
9
|
+
puts list.inspect
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
Rig::Command::Main.subcommand "keypair", "manage key pairs", Rig::Command::Keypair
|
@@ -0,0 +1,181 @@
|
|
1
|
+
require 'rig'
|
2
|
+
require 'awesome_print'
|
3
|
+
|
4
|
+
module Rig
|
5
|
+
module Command
|
6
|
+
class Server < Abstract
|
7
|
+
self.default_subcommand = "list"
|
8
|
+
subcommand "create", "create an server" do
|
9
|
+
option %w{-i --image}, "IMAGE", "the image / ami to use, default: your account image"
|
10
|
+
option %w{-f --flavor}, "FLAVOR", "the flavor / size to use"
|
11
|
+
option %w{-k --keypair}, "KEYPAIR", "the key pair / name to use, default: your account keypair"
|
12
|
+
option %w{-g --groups}, "GROUPS", "comma separated list of groups, default: your account groups"
|
13
|
+
option %w{-r --region}, "GROUPS", "the region, default: your account region"
|
14
|
+
option %w{--add}, :flag, "add this to the existing servers of this role and environment"
|
15
|
+
option "--[no-]chef", :flag, "use chef to bootstrap", :default => true
|
16
|
+
|
17
|
+
parameter "ENVIRONMENT", "the environment this server should belong to"
|
18
|
+
parameter "ROLE", "the server role", :default => 'solo'
|
19
|
+
|
20
|
+
def execute
|
21
|
+
name = role
|
22
|
+
# figure out if there are others of this role, if there are add a number to name to distinguish.
|
23
|
+
n = "#{name}.#{environment}.env"
|
24
|
+
chef = Rig.config[:chef] ? true : false
|
25
|
+
|
26
|
+
unless flavor
|
27
|
+
raise "must specify flavor"
|
28
|
+
end
|
29
|
+
|
30
|
+
o = {
|
31
|
+
:image_id => image,
|
32
|
+
:flavor_id => flavor,
|
33
|
+
:key_name => keypair,
|
34
|
+
:groups => groups.split(','),
|
35
|
+
:user_data => Rig::Model::Userdata.create(n, role, environment, :chef => chef)
|
36
|
+
}
|
37
|
+
tags = { 'Name' => n, 'Environment' => environment, 'Role' => role }
|
38
|
+
server = Rig::Model::Instance.create(o, tags)
|
39
|
+
puts "created: #{server.id}"
|
40
|
+
rescue => e
|
41
|
+
puts "error: #{e.message}"
|
42
|
+
raise Clamp::HelpWanted, self
|
43
|
+
end
|
44
|
+
|
45
|
+
def default_image
|
46
|
+
Rig.account[:image].is_a?(Hash) ? Rig.account[:image].first.last : Rig.account[:image]
|
47
|
+
end
|
48
|
+
|
49
|
+
def default_keypair
|
50
|
+
Rig.account[:keypair]
|
51
|
+
end
|
52
|
+
|
53
|
+
def default_groups
|
54
|
+
Rig.account[:groups].join(",")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
subcommand "destroy", "destroy (terminate) server" do
|
59
|
+
parameter "NAME", "the name of the server to connect to"
|
60
|
+
|
61
|
+
def execute
|
62
|
+
list = Rig::Model::Instance.find(name)
|
63
|
+
Rig::Model::Instance.destroy(list)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
subcommand "list", "list servers" do
|
67
|
+
include Options::ShowAll
|
68
|
+
|
69
|
+
option %w{-l --long}, :flag, "show more information in table"
|
70
|
+
parameter "[ENV]", "environment"
|
71
|
+
|
72
|
+
def execute
|
73
|
+
connection = Rig::Connection.compute
|
74
|
+
filters = { }
|
75
|
+
filters["instance-state-name"] = "running" unless showall?
|
76
|
+
filters["tag:Environment"] = env if env
|
77
|
+
|
78
|
+
list = connection.servers.all(filters)
|
79
|
+
instance_list(list, long?)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
subcommand "tag", "manage server tags" do
|
83
|
+
subcommand "get", "get tag(s) for this server" do
|
84
|
+
parameter "NAME", "the name of the server to get tags for"
|
85
|
+
|
86
|
+
def execute
|
87
|
+
instance = Rig::Model::Instance.find(name)
|
88
|
+
raise "server not found #{name}" unless instance
|
89
|
+
puts "#{instance.tags.inspect}"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
subcommand "rm", "remove tag(s) for this server" do
|
94
|
+
include Options::Instance
|
95
|
+
include Options::InstanceName
|
96
|
+
|
97
|
+
parameter "TAG", "tag key to remove", :attribute_name => :raw_tag
|
98
|
+
|
99
|
+
# TODO: fix this to use Model instead
|
100
|
+
def execute
|
101
|
+
unless iname || iid
|
102
|
+
raise "Must set either server name or server id (-iname or -iid)"
|
103
|
+
end
|
104
|
+
|
105
|
+
connection = Rig::Connection.compute
|
106
|
+
if iid
|
107
|
+
instance = connection.servers.get(iid)
|
108
|
+
else
|
109
|
+
list = connection.servers.all({ "tag:Name" => iname })
|
110
|
+
if list.count > 1
|
111
|
+
puts "there is more than one server that matches:"
|
112
|
+
instance_list(list)
|
113
|
+
return
|
114
|
+
end
|
115
|
+
instance = list.first
|
116
|
+
end
|
117
|
+
|
118
|
+
unless instance
|
119
|
+
puts "could not find server"
|
120
|
+
return
|
121
|
+
end
|
122
|
+
|
123
|
+
ap connection.delete_tags(instance.id, raw_tag => instance.tags[raw_tag])
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
subcommand "set", "set tag(s) for this server" do
|
128
|
+
include Options::Instance
|
129
|
+
include Options::InstanceName
|
130
|
+
|
131
|
+
parameter "TAGS ...", "tags of the form key:value", :attribute_name => :raw_tags
|
132
|
+
|
133
|
+
def execute
|
134
|
+
unless iname || iid
|
135
|
+
raise "Must set either server name or server id (-iname or -iid)"
|
136
|
+
end
|
137
|
+
|
138
|
+
connection = Rig::Connection.compute
|
139
|
+
if iid
|
140
|
+
instance = connection.servers.get(iid)
|
141
|
+
else
|
142
|
+
list = connection.servers.all({ "tag:Name" => iname })
|
143
|
+
if list.count > 1
|
144
|
+
puts "there is more than one server that matches:"
|
145
|
+
instance_list(list)
|
146
|
+
return
|
147
|
+
end
|
148
|
+
instance = list.first
|
149
|
+
end
|
150
|
+
|
151
|
+
unless instance
|
152
|
+
puts "could not find server"
|
153
|
+
return
|
154
|
+
end
|
155
|
+
|
156
|
+
raw_tags.each do |s|
|
157
|
+
(k, v) = s.split(':', 2)
|
158
|
+
#tags[k] = v if k && v
|
159
|
+
connection.create_tags(instance.id, k => v)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
subcommand "view", "view server information" do
|
165
|
+
include Options::ShowAll
|
166
|
+
|
167
|
+
# TODO: something wrong here, view is showing all servers
|
168
|
+
parameter "NAME", "name of server"
|
169
|
+
|
170
|
+
def execute
|
171
|
+
list = Rig::Model::Instance.find(name)
|
172
|
+
list.each do |item|
|
173
|
+
ap item.attributes
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
Rig::Command::Main.subcommand "server", "manage servers", Rig::Command::Server
|