solutious-rudy 0.9.1 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.txt +40 -16
- data/README.rdoc +6 -6
- data/bin/rudy +66 -10
- data/bin/rudy-ec2 +3 -1
- data/examples/authorize.rb +15 -0
- data/examples/gem-test.rb +11 -5
- data/examples/solaris.rb +35 -0
- data/examples/windows.rb +101 -0
- data/lib/rudy.rb +7 -1
- data/lib/rudy/aws.rb +2 -2
- data/lib/rudy/aws/ec2.rb +29 -22
- data/lib/rudy/aws/ec2/group.rb +1 -1
- data/lib/rudy/aws/ec2/image.rb +1 -29
- data/lib/rudy/aws/ec2/instance.rb +4 -32
- data/lib/rudy/aws/ec2/keypair.rb +1 -6
- data/lib/rudy/aws/ec2/snapshot.rb +2 -20
- data/lib/rudy/aws/ec2/volume.rb +11 -19
- data/lib/rudy/aws/ec2/zone.rb +1 -6
- data/lib/rudy/aws/sdb.rb +1 -1
- data/lib/rudy/cli/aws/ec2/addresses.rb +4 -10
- data/lib/rudy/cli/aws/ec2/groups.rb +0 -1
- data/lib/rudy/cli/aws/ec2/images.rb +1 -4
- data/lib/rudy/cli/aws/ec2/info.rb +63 -0
- data/lib/rudy/cli/aws/ec2/instances.rb +3 -5
- data/lib/rudy/cli/aws/ec2/keypairs.rb +3 -5
- data/lib/rudy/cli/aws/ec2/snapshots.rb +2 -6
- data/lib/rudy/cli/aws/ec2/zones.rb +2 -4
- data/lib/rudy/cli/backups.rb +20 -9
- data/lib/rudy/cli/base.rb +60 -3
- data/lib/rudy/cli/candy.rb +1 -1
- data/lib/rudy/cli/disks.rb +65 -7
- data/lib/rudy/cli/execbase.rb +0 -2
- data/lib/rudy/cli/images.rb +97 -0
- data/lib/rudy/cli/info.rb +48 -0
- data/lib/rudy/cli/keypairs.rb +43 -0
- data/lib/rudy/cli/machines.rb +48 -38
- data/lib/rudy/cli/networks.rb +68 -0
- data/lib/rudy/cli/routines.rb +3 -10
- data/lib/rudy/config/objects.rb +0 -1
- data/lib/rudy/disks.rb +4 -0
- data/lib/rudy/global.rb +1 -1
- data/lib/rudy/huxtable.rb +9 -3
- data/lib/rudy/machines.rb +1 -1
- data/lib/rudy/metadata.rb +4 -1
- data/lib/rudy/metadata/backup.rb +2 -2
- data/lib/rudy/metadata/disk.rb +7 -4
- data/lib/rudy/metadata/machine.rb +66 -2
- data/lib/rudy/routines.rb +2 -1
- data/lib/rudy/routines/base.rb +4 -157
- data/lib/rudy/routines/handlers/base.rb +6 -3
- data/lib/rudy/routines/handlers/disks.rb +127 -42
- data/lib/rudy/routines/handlers/group.rb +45 -10
- data/lib/rudy/routines/handlers/host.rb +16 -10
- data/lib/rudy/routines/handlers/keypair.rb +26 -10
- data/lib/rudy/routines/handlers/rye.rb +173 -0
- data/lib/rudy/routines/handlers/script.rb +2 -1
- data/lib/rudy/routines/passthrough.rb +2 -2
- data/lib/rudy/routines/reboot.rb +2 -2
- data/lib/rudy/routines/shutdown.rb +2 -2
- data/lib/rudy/routines/startup.rb +4 -2
- data/rudy.gemspec +15 -8
- data/tryouts/10_require_time/10_rudy_tryouts.rb +1 -1
- data/tryouts/12_config/20_defaults_tryouts.rb +1 -1
- data/tryouts/12_config/40_machines_tryouts.rb +1 -1
- data/tryouts/15_huxtable/20_user_tryouts.rb +1 -1
- data/tryouts/25_ec2/10_keypairs_tryouts.rb +1 -0
- data/tryouts/30_metadata/10_include_tryouts.rb +1 -1
- data/tryouts/30_metadata/13_object_tryouts.rb +4 -0
- data/tryouts/30_metadata/50_disk_tryouts.rb +4 -2
- data/tryouts/30_metadata/51_disk_digest_tryouts.rb +1 -1
- data/tryouts/30_metadata/53_disk_list_tryouts.rb +2 -1
- data/tryouts/30_metadata/56_disk_volume_tryouts.rb +1 -1
- data/tryouts/30_metadata/60_backup_tryouts.rb +4 -2
- data/tryouts/30_metadata/63_backup_list_tryouts.rb +1 -1
- data/tryouts/30_metadata/64_backup_disk_tryouts.rb +3 -1
- data/tryouts/30_metadata/66_backup_snapshot_tryouts.rb +1 -1
- data/tryouts/30_metadata/70_machine_tryouts.rb +5 -2
- data/tryouts/30_metadata/73_machine_list_tryouts.rb +1 -1
- data/tryouts/30_metadata/76_machine_instance_tryouts.rb +15 -3
- data/tryouts/30_metadata/77_machines_tryouts.rb +1 -1
- data/tryouts/40_routines/10_keypair_handler_tryouts.rb +6 -5
- data/tryouts/40_routines/11_group_handler_tryouts.rb +1 -1
- metadata +13 -6
- data/lib/rudy/cli/status.rb +0 -60
@@ -81,7 +81,7 @@ module AWS; module EC2;
|
|
81
81
|
first_instance = false
|
82
82
|
end
|
83
83
|
|
84
|
-
|
84
|
+
print_stobject(inst)
|
85
85
|
end
|
86
86
|
end
|
87
87
|
end
|
@@ -173,10 +173,8 @@ module AWS; module EC2;
|
|
173
173
|
opts[:id] = @argv.instid if @argv.instid
|
174
174
|
opts[:id] &&= [opts[:id]].flatten
|
175
175
|
|
176
|
-
|
177
|
-
|
178
|
-
end
|
179
|
-
puts "No instances running" if !lt || lt.empty?
|
176
|
+
ilist = Rudy::AWS::EC2::Instances.list_group(opts[:group], opts[:state], opts[:id])
|
177
|
+
ilist.nil? ? puts( "No instances running" ) : print_stobjects(ilist)
|
180
178
|
end
|
181
179
|
alias :instances :status
|
182
180
|
|
@@ -18,7 +18,7 @@ module AWS; module EC2;
|
|
18
18
|
puts "Set the permissions to 0600 and keep it safe.", $/
|
19
19
|
puts kp.private_key
|
20
20
|
else
|
21
|
-
|
21
|
+
print_stobject kp
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -35,10 +35,8 @@ module AWS; module EC2;
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def keypairs
|
38
|
-
|
39
|
-
|
40
|
-
end
|
41
|
-
puts "No keypairs" unless Rudy::AWS::EC2::Keypairs.any?
|
38
|
+
klist = Rudy::AWS::EC2::Keypairs.list
|
39
|
+
print_stobjects klist
|
42
40
|
end
|
43
41
|
|
44
42
|
|
@@ -13,7 +13,7 @@ module AWS; module EC2;
|
|
13
13
|
end
|
14
14
|
def create_snapshots
|
15
15
|
snap = execute_action { Rudy::AWS::EC2::Snapshots.create(@volume.awsid) }
|
16
|
-
|
16
|
+
print_stobject snap
|
17
17
|
end
|
18
18
|
|
19
19
|
def destroy_snapshots_valid?
|
@@ -26,15 +26,11 @@ module AWS; module EC2;
|
|
26
26
|
puts "Destroying: #{@snap.awsid}"
|
27
27
|
execute_check(:medium)
|
28
28
|
execute_action { Rudy::AWS::EC2::Snapshots.destroy(@snap.awsid) }
|
29
|
-
snapshots
|
30
29
|
end
|
31
30
|
|
32
31
|
def snapshots
|
33
32
|
snaps = Rudy::AWS::EC2::Snapshots.list || []
|
34
|
-
snaps
|
35
|
-
puts @@global.verbose > 0 ? snap.inspect : snap.dump(@@global.format)
|
36
|
-
end
|
37
|
-
puts "No snapshots" if snaps.empty?
|
33
|
+
print_stobjects snaps
|
38
34
|
end
|
39
35
|
|
40
36
|
|
@@ -7,10 +7,8 @@ module AWS; module EC2;
|
|
7
7
|
|
8
8
|
|
9
9
|
def zones
|
10
|
-
Rudy::AWS::EC2::Zones.
|
11
|
-
|
12
|
-
end
|
13
|
-
puts "No zones" unless Rudy::AWS::EC2::Zones.any?
|
10
|
+
zlist = Rudy::AWS::EC2::Zones.list(@argv.name)
|
11
|
+
print_stobjects zlist
|
14
12
|
end
|
15
13
|
|
16
14
|
|
data/lib/rudy/cli/backups.rb
CHANGED
@@ -6,17 +6,12 @@ module Rudy
|
|
6
6
|
|
7
7
|
|
8
8
|
def backups
|
9
|
-
|
10
|
-
|
11
|
-
# We first get the disk metadata
|
12
|
-
b_list = Rudy::Backups.list(more, less) || []
|
13
|
-
b_list.each do |back|
|
14
|
-
puts @global.verbose > 0 ? "#{back.name}: #{back.inspect}" : back.name
|
15
|
-
end
|
9
|
+
blist = get_backups
|
10
|
+
print_stobjects blist
|
16
11
|
end
|
17
12
|
|
18
13
|
def backups_wash
|
19
|
-
dirt = (
|
14
|
+
dirt = (get_backups || []).select { |b| !b.snapshot_exists? }
|
20
15
|
if dirt.empty?
|
21
16
|
puts "Nothing to wash in #{current_machine_group}"
|
22
17
|
return
|
@@ -28,11 +23,27 @@ module Rudy
|
|
28
23
|
execute_check(:medium)
|
29
24
|
|
30
25
|
dirt.each do |b|
|
31
|
-
b.destroy
|
26
|
+
b.destroy
|
32
27
|
end
|
33
28
|
|
34
29
|
end
|
35
30
|
|
31
|
+
def backups_create_valid?
|
32
|
+
@dlist = Rudy::Disks.list
|
33
|
+
raise "No disks" if @dlist.nil?
|
34
|
+
raise "No path provided" unless @argv.first
|
35
|
+
raise "Disk does not exist" unless Rudy::Disks.exists? @argv.first
|
36
|
+
true
|
37
|
+
end
|
38
|
+
|
39
|
+
def backups_create
|
40
|
+
@dlist.each do |d|
|
41
|
+
puts "Creating backup for #{d.name}"
|
42
|
+
back = d.archive
|
43
|
+
puts back
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
36
47
|
end
|
37
48
|
end
|
38
49
|
end
|
data/lib/rudy/cli/base.rb
CHANGED
@@ -35,7 +35,7 @@ module Rudy::CLI
|
|
35
35
|
@@global.auto ? Annoy.enable_skip : Annoy.disable_skip
|
36
36
|
|
37
37
|
# ANSI codes look like garbage in DOS
|
38
|
-
if Rudy.sysinfo.os.to_s == '
|
38
|
+
if Rudy.sysinfo.os.to_s == 'windows'
|
39
39
|
String.disable_color
|
40
40
|
raise Rudy::Error, 'Ruby 1.9 is not supported (yet)' if Rudy.sysinfo.ruby == [1,9,1]
|
41
41
|
end
|
@@ -95,10 +95,67 @@ module Rudy::CLI
|
|
95
95
|
end
|
96
96
|
end
|
97
97
|
end
|
98
|
-
|
98
|
+
|
99
|
+
# +stobjects+ is an Array of Storable objects
|
100
|
+
# +noverbose+ when not false, will force to print with Object#to_s
|
101
|
+
def print_stobjects(stobjects=[], noverbose=false)
|
102
|
+
stobjects.each do |m|
|
103
|
+
print_stobject m, noverbose
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def print_stobject(obj, noverbose=false)
|
108
|
+
format = @@global.format
|
109
|
+
format = :yaml if @@global.verbose > 0 && @@global.format == :string
|
110
|
+
format = :string if noverbose
|
111
|
+
puts obj.dump(format)
|
112
|
+
end
|
113
|
+
|
99
114
|
def machine_separator(name, awsid)
|
100
115
|
('%s %-50s awsid: %s ' % [$/, name, awsid]).att(:reverse)
|
101
116
|
end
|
102
|
-
|
117
|
+
|
118
|
+
|
119
|
+
private
|
120
|
+
|
121
|
+
# See get_metadata
|
122
|
+
def get_machines(fields={}, less=[])
|
123
|
+
list = get_metadata Rudy::Machines, fields, less
|
124
|
+
if list.empty?
|
125
|
+
if @@global.position.nil?
|
126
|
+
raise Rudy::MachineGroupNotRunning, (@option.all ? nil : current_machine_group)
|
127
|
+
else
|
128
|
+
raise Rudy::MachineNotRunning, current_machine_name
|
129
|
+
end
|
130
|
+
end
|
131
|
+
list
|
132
|
+
end
|
133
|
+
|
134
|
+
# See get_metadata
|
135
|
+
def get_disks(fields={}, less=[])
|
136
|
+
get_metadata Rudy::Disks, fields, less
|
137
|
+
end
|
138
|
+
|
139
|
+
# See get_metadata
|
140
|
+
def get_backups(fields={}, less=[])
|
141
|
+
get_metadata Rudy::Backups, fields, less
|
142
|
+
end
|
143
|
+
|
144
|
+
# * +klass+ a Rudy::Metadata class. e.g. Rudy::Machines
|
145
|
+
#
|
146
|
+
# This method takes two optional args for adding or
|
147
|
+
# removing metadata attributes to modify the select query.
|
148
|
+
# When all is specified we want to find disks in every env
|
149
|
+
# environment and role to we remove these attributes from
|
150
|
+
# the select.
|
151
|
+
def get_metadata(klass, fields={}, less=[])
|
152
|
+
if @option.all
|
153
|
+
# Don't remove keys specified in fields
|
154
|
+
less += (Rudy::Metadata::COMMON_FIELDS - fields.keys)
|
155
|
+
end
|
156
|
+
klass.list(fields, less) || []
|
157
|
+
end
|
158
|
+
|
159
|
+
|
103
160
|
end
|
104
161
|
end
|
data/lib/rudy/cli/candy.rb
CHANGED
data/lib/rudy/cli/disks.rb
CHANGED
@@ -3,13 +3,9 @@
|
|
3
3
|
module Rudy
|
4
4
|
module CLI
|
5
5
|
class Disks < Rudy::CLI::CommandBase
|
6
|
-
|
7
6
|
|
8
7
|
def disks
|
9
|
-
|
10
|
-
less = [:environment, :role] if @option.all
|
11
|
-
# We first get the disk metadata
|
12
|
-
disk_list = Rudy::Disks.list(more, less) || []
|
8
|
+
disk_list = get_disks
|
13
9
|
# If there are no disks currently, there could be backups
|
14
10
|
# so we grab those to create a list of disks.
|
15
11
|
if @option.backups
|
@@ -23,7 +19,7 @@ module Rudy
|
|
23
19
|
disk_list.each do |d|
|
24
20
|
next if seen.member?(d.name)
|
25
21
|
seen << d.name
|
26
|
-
|
22
|
+
print_stobject d
|
27
23
|
if @option.backups
|
28
24
|
d.backups.each_with_index do |b, index|
|
29
25
|
puts ' %s' % b.name
|
@@ -34,7 +30,7 @@ module Rudy
|
|
34
30
|
end
|
35
31
|
|
36
32
|
def disks_wash
|
37
|
-
dirt = (
|
33
|
+
dirt = (get_disks || []).select { |d| !d.volume_exists? }
|
38
34
|
if dirt.empty?
|
39
35
|
puts "Nothing to wash in #{current_machine_group}"
|
40
36
|
return
|
@@ -51,6 +47,68 @@ module Rudy
|
|
51
47
|
|
52
48
|
end
|
53
49
|
|
50
|
+
def disks_create_valid?
|
51
|
+
@mlist = Rudy::Machines.list
|
52
|
+
raise "No machines" if @mlist.nil?
|
53
|
+
|
54
|
+
raise "No path provided" unless @argv.first
|
55
|
+
if !@@global.force && Rudy::Disks.exists?( @argv.first)
|
56
|
+
raise "Disk exists" if Rudy::Disks.get(@argv.first).volume_attached?
|
57
|
+
end
|
58
|
+
raise "No size provided" unless @option.size
|
59
|
+
|
60
|
+
true
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
def disks_create
|
65
|
+
@mlist.each do |m|
|
66
|
+
puts machine_separator(m.name, m.instid)
|
67
|
+
rbox = Rudy::Routines::Handlers::RyeTools.create_box m
|
68
|
+
rbox.stash = m
|
69
|
+
disk = Rudy::Disk.new m.position, @argv.first
|
70
|
+
disk.device = @option.device if @option.device
|
71
|
+
disk.size = @option.size if @option.size
|
72
|
+
disk.refresh! if disk.exists? # We need the volume ID if available
|
73
|
+
li "Creating disk: #{disk.name}"
|
74
|
+
volumes = m.attached_volumes
|
75
|
+
# don't include the current disk in the count.
|
76
|
+
volumes.reject! { |v| v.awsid == disk.volid } if disk.volid && disk.volume_attached?
|
77
|
+
disk_index = volumes.size + 2
|
78
|
+
Rudy::Routines::Handlers::Disks.create rbox, disk, disk_index
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
def disks_destroy_valid?
|
84
|
+
@dlist = Rudy::Disks.list
|
85
|
+
raise "No disks" if @dlist.nil?
|
86
|
+
|
87
|
+
@mlist = Rudy::Machines.list
|
88
|
+
raise "No machines" if @mlist.nil? && !@@global.force
|
89
|
+
|
90
|
+
raise "No path provided" unless @argv.first
|
91
|
+
raise "Disk does not exist" unless Rudy::Disks.exists? @argv.first
|
92
|
+
true
|
93
|
+
end
|
94
|
+
|
95
|
+
def disks_destroy
|
96
|
+
execute_check(:medium)
|
97
|
+
if @mlist
|
98
|
+
@mlist.each do |m|
|
99
|
+
rbox = Rudy::Routines::Handlers::RyeTools.create_box m
|
100
|
+
rbox.stash = m
|
101
|
+
disk = Rudy::Disk.new m.position, @argv.first
|
102
|
+
li "Destroying disk: #{disk.name}"
|
103
|
+
Rudy::Routines::Handlers::Disks.destroy rbox, disk, 0
|
104
|
+
end
|
105
|
+
else
|
106
|
+
@dlist.each do |d|
|
107
|
+
li "Destroying disk: #{d.name}"
|
108
|
+
Rudy::Routines::Handlers::Disks.destroy nil, d, 0
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
54
112
|
end
|
55
113
|
end
|
56
114
|
end
|
data/lib/rudy/cli/execbase.rb
CHANGED
@@ -0,0 +1,97 @@
|
|
1
|
+
|
2
|
+
module Rudy
|
3
|
+
module CLI
|
4
|
+
class Images < Rudy::CLI::CommandBase
|
5
|
+
|
6
|
+
def bundle_valid?
|
7
|
+
raise "No S3 bucket provided. See rudy bundle -h" unless @@global.bucket
|
8
|
+
raise "No image name provided. See rudy bundle -h" unless @argv.name
|
9
|
+
|
10
|
+
@machines = Rudy::Machines.list
|
11
|
+
raise "No machines" if @machines.nil?
|
12
|
+
|
13
|
+
@machines = @machines.select { |m| m.windows? }
|
14
|
+
raise "No Windows machines" if @machines.nil?
|
15
|
+
|
16
|
+
true
|
17
|
+
end
|
18
|
+
|
19
|
+
def bundle
|
20
|
+
|
21
|
+
@machines.each do |m|
|
22
|
+
puts machine_separator(m.name, m.instid)
|
23
|
+
|
24
|
+
cmd = "ec2-bundle-instance"
|
25
|
+
args = [m.instid, "--region", @@global.region.to_s]
|
26
|
+
args += ["-b", @@global.bucket, "-p", @argv.name]
|
27
|
+
args += ["-o", @@global.accesskey, "-w", @@global.secretkey]
|
28
|
+
args += ["-K", @@global.pkey, "-C", @@global.cert]
|
29
|
+
|
30
|
+
# S3 returned 301 (Moved Permanently) for ACL on bucket [EU-BUCKET]
|
31
|
+
args += ["--no-bucket-setup"] if @@global.region.to_s == 'eu-west-1'
|
32
|
+
|
33
|
+
if @@global.verbose > 0
|
34
|
+
puts "Running: " << Rye.prepare_command(cmd, args), $/
|
35
|
+
end
|
36
|
+
|
37
|
+
unless @@global.quiet
|
38
|
+
puts "Bundling can take up to 60 minutes."
|
39
|
+
puts "Check the status with the following command:"
|
40
|
+
puts Rudy::Huxtable.generate_rudy_command('bundle-status').bright
|
41
|
+
puts $/, "When complete, register the image with the command:"
|
42
|
+
puts Rudy::Huxtable.generate_rudy_command('images', '-R', @argv.name).bright
|
43
|
+
end
|
44
|
+
|
45
|
+
execute_check(:medium)
|
46
|
+
|
47
|
+
ret = Rye.shell cmd, args
|
48
|
+
puts ret.stderr, ret.stdout
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def bundle_status
|
53
|
+
cmd = 'ec2-describe-bundle-tasks'
|
54
|
+
args = ["--region", @@global.region.to_s]
|
55
|
+
args += ["-K", @@global.pkey, "-C", @@global.cert]
|
56
|
+
|
57
|
+
if @@global.verbose > 0
|
58
|
+
puts "Running: " << Rye.prepare_command(cmd, args), $/
|
59
|
+
end
|
60
|
+
|
61
|
+
ret = Rye.shell cmd, args
|
62
|
+
puts ret.stderr, ret.stdout
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
def register_images_valid?
|
67
|
+
raise "No S3 bucket provided. See rudy bundle -h" unless @@global.bucket
|
68
|
+
raise "No image name provided. See rudy bundle -h" unless @argv.name
|
69
|
+
|
70
|
+
true
|
71
|
+
end
|
72
|
+
def register_images
|
73
|
+
name = "#{@@global.bucket}/#{@argv.name}.manifest.xml"
|
74
|
+
puts Rudy::AWS::EC2::Images.register(name)
|
75
|
+
end
|
76
|
+
|
77
|
+
def deregister_images_valid?
|
78
|
+
unless @argv.first && Rudy::Utils.is_id?(:image, @argv.first)
|
79
|
+
raise "Must supply an AMI ID. See rudy images -h"
|
80
|
+
end
|
81
|
+
true
|
82
|
+
end
|
83
|
+
def deregister_images
|
84
|
+
execute_check(:low)
|
85
|
+
puts Rudy::AWS::EC2::Images.deregister(@argv.ami) ? "Done" : "Unknown error"
|
86
|
+
end
|
87
|
+
|
88
|
+
def images
|
89
|
+
@option.owner ||= 'self'
|
90
|
+
images = Rudy::AWS::EC2::Images.list(@option.owner, @argv) || []
|
91
|
+
print_stobjects images
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module Rudy
|
4
|
+
module CLI
|
5
|
+
class Info < Rudy::CLI::CommandBase
|
6
|
+
|
7
|
+
def info
|
8
|
+
process_region @@global.region
|
9
|
+
oregions = Rudy::AWS::VALID_REGIONS - [@@global.region.to_sym]
|
10
|
+
if @option.all
|
11
|
+
oregions.each do |region|
|
12
|
+
Rudy::AWS::EC2.connect @@global.accesskey, @@global.secretkey, region
|
13
|
+
process_region region
|
14
|
+
end
|
15
|
+
else
|
16
|
+
puts $/, "Other regions: " << oregions.join(', ')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
private
|
22
|
+
def process_region(region)
|
23
|
+
puts " Region: %s %30s".att(:reverse) % [region, '']
|
24
|
+
puts " Machines".bright
|
25
|
+
|
26
|
+
(get_machines(:region => region) rescue []).collect do |m|
|
27
|
+
m.refresh!
|
28
|
+
puts " " << m.to_s.noatt
|
29
|
+
end
|
30
|
+
|
31
|
+
puts " Disks".bright
|
32
|
+
(get_disks(:region => region) || []).collect do |d|
|
33
|
+
d.refresh!
|
34
|
+
puts " " << d.to_s.noatt
|
35
|
+
end
|
36
|
+
|
37
|
+
puts " Backups".bright
|
38
|
+
(get_backups(:region => region) || []).collect do |b|
|
39
|
+
b.refresh!
|
40
|
+
puts " " << b.to_s.noatt
|
41
|
+
end
|
42
|
+
|
43
|
+
puts
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|