rudy 0.8.5 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.txt +110 -18
- data/README.rdoc +40 -44
- data/Rudyfile +35 -50
- data/bin/rudy +88 -57
- data/bin/rudy-ec2 +2 -16
- data/bin/rudy-s3 +0 -10
- data/bin/rudy-sdb +11 -12
- data/lib/rudy.rb +59 -91
- data/lib/rudy/aws.rb +4 -45
- data/lib/rudy/aws/ec2.rb +57 -20
- data/lib/rudy/aws/ec2/address.rb +10 -11
- data/lib/rudy/aws/ec2/group.rb +10 -9
- data/lib/rudy/aws/ec2/image.rb +8 -8
- data/lib/rudy/aws/ec2/instance.rb +18 -19
- data/lib/rudy/aws/ec2/keypair.rb +14 -19
- data/lib/rudy/aws/ec2/snapshot.rb +16 -9
- data/lib/rudy/aws/ec2/volume.rb +39 -26
- data/lib/rudy/aws/ec2/zone.rb +5 -4
- data/lib/rudy/aws/s3.rb +2 -1
- data/lib/rudy/aws/sdb.rb +35 -86
- data/lib/rudy/backups.rb +24 -0
- data/lib/rudy/cli.rb +5 -131
- data/lib/rudy/cli/aws/ec2/addresses.rb +19 -27
- data/lib/rudy/cli/aws/ec2/candy.rb +45 -20
- data/lib/rudy/cli/aws/ec2/groups.rb +9 -13
- data/lib/rudy/cli/aws/ec2/images.rb +5 -133
- data/lib/rudy/cli/aws/ec2/instances.rb +25 -25
- data/lib/rudy/cli/aws/ec2/keypairs.rb +7 -11
- data/lib/rudy/cli/aws/ec2/snapshots.rb +5 -9
- data/lib/rudy/cli/aws/ec2/volumes.rb +22 -23
- data/lib/rudy/cli/aws/ec2/zones.rb +2 -3
- data/lib/rudy/cli/aws/sdb/domains.rb +5 -6
- data/lib/rudy/cli/aws/sdb/objects.rb +33 -0
- data/lib/rudy/cli/aws/sdb/select.rb +23 -0
- data/lib/rudy/cli/backups.rb +38 -0
- data/lib/rudy/cli/base.rb +104 -0
- data/lib/rudy/cli/candy.rb +1 -2
- data/lib/rudy/cli/config.rb +20 -7
- data/lib/rudy/cli/disks.rb +7 -9
- data/lib/rudy/cli/execbase.rb +56 -0
- data/lib/rudy/cli/machines.rb +242 -45
- data/lib/rudy/cli/metadata.rb +24 -10
- data/lib/rudy/cli/networks.rb +34 -0
- data/lib/rudy/cli/routines.rb +32 -6
- data/lib/rudy/cli/status.rb +60 -0
- data/lib/rudy/config.rb +55 -32
- data/lib/rudy/config/objects.rb +44 -30
- data/lib/rudy/disks.rb +25 -0
- data/lib/rudy/exceptions.rb +99 -0
- data/lib/rudy/global.rb +67 -28
- data/lib/rudy/guidelines.rb +3 -2
- data/lib/rudy/huxtable.rb +67 -58
- data/lib/rudy/machines.rb +41 -263
- data/lib/rudy/metadata.rb +212 -38
- data/lib/rudy/metadata/backup.rb +123 -78
- data/lib/rudy/metadata/disk.rb +153 -170
- data/lib/rudy/metadata/machine.rb +179 -0
- data/lib/rudy/mixins.rb +2 -1
- data/lib/rudy/mixins/hash.rb +3 -1
- data/lib/rudy/mixins/symbol.rb +8 -0
- data/lib/rudy/routines.rb +127 -344
- data/lib/rudy/routines/base.rb +229 -0
- data/lib/rudy/routines/handlers/base.rb +48 -0
- data/lib/rudy/routines/handlers/depends.rb +49 -0
- data/lib/rudy/routines/handlers/disks.rb +249 -0
- data/lib/rudy/routines/handlers/group.rb +44 -0
- data/lib/rudy/routines/handlers/host.rb +70 -0
- data/lib/rudy/routines/handlers/keypair.rb +70 -0
- data/lib/rudy/routines/handlers/machines.rb +15 -0
- data/lib/rudy/routines/handlers/script.rb +85 -0
- data/lib/rudy/routines/handlers/user.rb +45 -0
- data/lib/rudy/routines/passthrough.rb +19 -23
- data/lib/rudy/routines/reboot.rb +98 -50
- data/lib/rudy/routines/shutdown.rb +65 -14
- data/lib/rudy/routines/startup.rb +112 -17
- data/lib/rudy/utils.rb +35 -68
- data/rudy.gemspec +82 -25
- data/tryouts/01_mixins/01_hash_tryouts.rb +20 -0
- data/tryouts/10_require_time/10_rudy_tryouts.rb +33 -0
- data/tryouts/10_require_time/15_global_tryouts.rb +58 -0
- data/tryouts/12_config/10_load_config_tryouts.rb +43 -0
- data/tryouts/12_config/20_defaults_tryouts.rb +16 -0
- data/tryouts/12_config/30_accounts_tryouts.rb +17 -0
- data/tryouts/12_config/40_machines_tryouts.rb +53 -0
- data/tryouts/12_config/50_commands_tryouts.rb +17 -0
- data/tryouts/12_config/60_routines_tryouts.rb +16 -0
- data/tryouts/15_huxtable/10_huxtable_tryouts.rb +47 -0
- data/tryouts/15_huxtable/20_user_tryouts.rb +47 -0
- data/tryouts/20_simpledb/10_domains_tryouts.rb +36 -0
- data/tryouts/20_simpledb/20_objects_tryouts.rb +56 -0
- data/tryouts/25_ec2/10_keypairs_tryouts.rb +54 -0
- data/tryouts/25_ec2/20_groups_tryouts.rb +56 -0
- data/tryouts/25_ec2/21_groups_authorize_address_tryouts.rb +53 -0
- data/tryouts/25_ec2/22_groups_authorize_account_tryouts.rb +54 -0
- data/tryouts/25_ec2/30_addresses_tryouts.rb +42 -0
- data/tryouts/25_ec2/40_volumes_tryouts.rb +53 -0
- data/tryouts/25_ec2/50_snapshots_tryouts.rb +75 -0
- data/tryouts/26_ec2_instances/10_instance_tryouts.rb +107 -0
- data/tryouts/26_ec2_instances/50_images_tryouts.rb +7 -0
- data/tryouts/30_metadata/10_include_tryouts.rb +45 -0
- data/tryouts/30_metadata/13_object_tryouts.rb +19 -0
- data/tryouts/30_metadata/50_disk_tryouts.rb +115 -0
- data/tryouts/30_metadata/51_disk_digest_tryouts.rb +24 -0
- data/tryouts/30_metadata/53_disk_list_tryouts.rb +35 -0
- data/tryouts/30_metadata/56_disk_volume_tryouts.rb +68 -0
- data/tryouts/30_metadata/60_backup_tryouts.rb +101 -0
- data/tryouts/30_metadata/63_backup_list_tryouts.rb +38 -0
- data/tryouts/30_metadata/64_backup_disk_tryouts.rb +65 -0
- data/tryouts/30_metadata/66_backup_snapshot_tryouts.rb +76 -0
- data/tryouts/30_metadata/70_machine_tryouts.rb +85 -0
- data/tryouts/30_metadata/73_machine_list_tryouts.rb +58 -0
- data/tryouts/30_metadata/76_machine_instance_tryouts.rb +64 -0
- data/tryouts/30_metadata/77_machines_tryouts.rb +45 -0
- data/tryouts/40_routines/10_keypair_handler_tryouts.rb +52 -0
- data/tryouts/40_routines/11_group_handler_tryouts.rb +36 -0
- data/tryouts/80_cli/10_rudyec2_tryouts.rb +8 -0
- data/tryouts/80_cli/60_rudy_tryouts.rb +41 -0
- data/tryouts/exploration/console.rb +91 -0
- data/tryouts/exploration/machine.rb +23 -0
- data/tryouts/failer +6 -0
- metadata +116 -32
- data/bin/ird +0 -153
- data/lib/rudy/metadata/backups.rb +0 -67
- data/lib/rudy/metadata/debug.rb +0 -38
- data/lib/rudy/metadata/disks.rb +0 -67
- data/lib/rudy/metadata/objectbase.rb +0 -108
- data/lib/rudy/routines/helper.rb +0 -76
- data/lib/rudy/routines/helpers/dependshelper.rb +0 -34
- data/lib/rudy/routines/helpers/diskhelper.rb +0 -403
- data/lib/rudy/routines/helpers/scripthelper.rb +0 -197
- data/lib/rudy/routines/helpers/userhelper.rb +0 -37
- data/support/rudy-ec2-startup +0 -200
@@ -5,11 +5,6 @@ module AWS; module EC2;
|
|
5
5
|
|
6
6
|
class Images < Rudy::CLI::CommandBase
|
7
7
|
|
8
|
-
#def print_header
|
9
|
-
# puts @global.print_header, @@global.print_header
|
10
|
-
#end
|
11
|
-
|
12
|
-
|
13
8
|
def images_valid?
|
14
9
|
if @option.owner == 'self'
|
15
10
|
raise "AWS_ACCOUNT_NUMBER not set" unless @@global.accountnum
|
@@ -20,159 +15,36 @@ module AWS; module EC2;
|
|
20
15
|
end
|
21
16
|
def images
|
22
17
|
|
23
|
-
rimages = Rudy::AWS::EC2::Images.new(@@global.accesskey, @@global.secretkey, @@global.region)
|
24
18
|
unless @option.all
|
25
19
|
@option.owner ||= 'amazon'
|
26
20
|
puts "Images owned by #{@option.owner.bright}" unless @argv.awsid
|
27
21
|
end
|
28
22
|
|
29
|
-
images =
|
23
|
+
images = Rudy::AWS::EC2::Images.list(@option.owner, @argv) || []
|
30
24
|
images.each do |img|
|
31
25
|
puts @@global.verbose > 0 ? img.inspect : img.dump(@@global.format)
|
32
26
|
end
|
33
27
|
puts "No images" if images.empty?
|
34
28
|
end
|
35
|
-
|
36
|
-
##def prepare_images_valid?
|
37
|
-
## true
|
38
|
-
##end
|
39
|
-
##def prepare_images
|
40
|
-
## opts = {}
|
41
|
-
## opts[:id] = @option.instid if @option.instid
|
42
|
-
##
|
43
|
-
## puts "This will do the following:"
|
44
|
-
## puts "- Clear bash history"
|
45
|
-
## # NOTE: We can't delete the host keys here. Otherwise we can't create the image.
|
46
|
-
## #puts "- Delete host SSH keys (this is permanent!)"
|
47
|
-
## puts ""
|
48
|
-
##
|
49
|
-
## ## TODO:
|
50
|
-
## ## ~/.rudy, /etc/motd, history -c, /etc/hosts, /var/log/rudy*
|
51
|
-
##
|
52
|
-
## execute_check(:medium)
|
53
|
-
##
|
54
|
-
##
|
55
|
-
## # Options to be sent to Net::SSH
|
56
|
-
## ssh_opts = { :user => @global.user || Rudy.sysinfo.user, :debug => STDERR }
|
57
|
-
## if @@global.pkey
|
58
|
-
## raise "Cannot find file #{@@global.pkey}" unless File.exists?(@@global.pkey)
|
59
|
-
## raise InsecureKeyPermissions, @@global.pkey unless File.stat(@@global.pkey).mode == 33152
|
60
|
-
## ssh_opts[:keys] = @@global.pkey
|
61
|
-
## end
|
62
|
-
##
|
63
|
-
##
|
64
|
-
## rudy = Rudy::AWS::EC2::Instances.new(@@global.accesskey, @@global.secretkey, @@global.region)
|
65
|
-
## lt = rudy.list_group(nil, :running, opts[:id]) do |inst|
|
66
|
-
##
|
67
|
-
## puts "Preparing #{inst.dns_public}..."
|
68
|
-
##
|
69
|
-
## # Open the connection and run the command
|
70
|
-
## rbox = Rye::Box.new(inst.dns_public, ssh_opts)
|
71
|
-
##
|
72
|
-
## # We need to explicitly add the rm command for rbox so we
|
73
|
-
## # can delete the SSH host keys. This is will force the instance
|
74
|
-
## # to re-create it's SSH keys on first boot.
|
75
|
-
## def rbox.rm(*args); cmd('rm', args); end
|
76
|
-
## p ret = rbox.history(:c)
|
77
|
-
## p ret.exit_code
|
78
|
-
## p ret.stderr
|
79
|
-
## p ret.stdout
|
80
|
-
##
|
81
|
-
## end
|
82
|
-
##
|
83
|
-
## puts "done"
|
84
|
-
##end
|
85
|
-
|
86
|
-
def create_images_valid?
|
87
|
-
raise "No account number" unless @@global.accountnum
|
88
|
-
raise "No Amazon cert-***.pem" unless @@global.cert
|
89
|
-
raise "No Amazon pk-***.pem" unless @@global.privatekey
|
90
|
-
raise "You must supply a root keypair path" unless @@global.pkey
|
91
|
-
|
92
|
-
@rinst = Rudy::AWS::EC2::Instances.new(@@global.accesskey, @@global.secretkey, @@global.region)
|
93
|
-
@rimages = Rudy::AWS::EC2::Images.new(@@global.accesskey, @@global.secretkey, @@global.region)
|
94
|
-
@s3 = Rudy::AWS::S3.new(@@global.accesskey, @@global.secretkey, @@global.region)
|
95
|
-
raise "No instances" unless @rinst.any?
|
96
|
-
raise "You must supply an S3 bucket name. See: 'rudy-s3 buckets'" unless @option.bucket
|
97
|
-
raise "You must supply an image name" unless @option.name
|
98
|
-
raise "The bucket '#{@option.bucket}' does not exist" unless @s3.bucket_exists?(@option.bucket)
|
99
|
-
true
|
100
|
-
end
|
101
|
-
|
102
|
-
def create_images
|
103
|
-
opts = {}
|
104
|
-
opts[:id] = @option.instid if @option.instid
|
105
|
-
|
106
|
-
@@global.user = 'root'
|
107
|
-
|
108
|
-
puts "You may want to run rudy-ec2 #{@alias} --prepare first".bright
|
109
|
-
puts "NOTE 1: This process is currently Linux-only"
|
110
|
-
puts "NOTE 2: If you plan to create a public machine image, there are "
|
111
|
-
puts "additional steps to take to remove any sensitive information"
|
112
|
-
puts "before creating the image. See:"
|
113
|
-
puts "http://docs.amazonwebservices.com/AWSEC2/latest/DeveloperGuide/AESDG-chapter-sharingamis.html"
|
114
|
-
exit unless Annoy.pose_question(" Continue?\a ", /yes|y|ya|sure|you bet!/i, STDERR)
|
115
|
-
|
116
|
-
# Options to be sent to Net::SSH
|
117
|
-
ssh_opts = { :user => @@global.user || Rudy.sysinfo.user, :debug => nil }
|
118
|
-
if @@global.pkey
|
119
|
-
raise "Cannot find file #{@@global.pkey}" unless File.exists?(@@global.pkey)
|
120
|
-
raise InsecureKeyPermissions, @@global.pkey unless File.stat(@@global.pkey).mode == 33152
|
121
|
-
ssh_opts[:keys] = @@global.pkey
|
122
|
-
end
|
123
|
-
|
124
|
-
lt = @rinst.list_group(nil, :running, opts[:id]) do |inst|
|
125
|
-
|
126
|
-
puts inst.to_s
|
127
|
-
|
128
|
-
# Open the connection and run the command
|
129
|
-
rbox = Rye::Box.new(inst.dns_public, ssh_opts)
|
130
|
-
def rbox.bundle_vol(*args); cmd('ec2-bundle-vol', args); end
|
131
|
-
def rbox.upload_vol(*args); cmd('ec2-upload-bundle', args); end
|
132
|
-
|
133
|
-
rbox.upload(@@global.cert, @@global.privatekey, "/mnt")
|
134
|
-
rbox.touch("/root/firstrun")
|
135
|
-
|
136
|
-
## TODO:
|
137
|
-
## We have to delete the host keys just before we run the bundle command.
|
138
|
-
## The problem is that if we lose the connection we won't be able to connect
|
139
|
-
## to the instance again. A better solution is to add the keys to the ignore
|
140
|
-
## list for the bundle command.
|
141
|
-
##ret = rbox.rm('/etc/ssh/ssh_host_*_key*')
|
142
|
-
|
143
|
-
puts "Starting bundling process..."
|
144
|
-
|
145
|
-
pkeyfile = File.basename(@@global.privatekey)
|
146
|
-
certfile = File.basename(@@global.cert)
|
147
|
-
|
148
|
-
rbox.bundle_vol(:r, "i386", :p, @option.name, :k, "/mnt/#{pkeyfile}", :c, "/mnt/#{certfile}", :u, @@global.accountnum)
|
149
|
-
rbox.upload_vol(:b, @option.bucket, :m, "/tmp/#{@option.name}.manifest.xml", :a, @@global.accesskey, :s, @@global.secretkey)
|
150
|
-
|
151
|
-
@rimages.register("#{@option.bucket}/#{@option.name}.manifest.xml")
|
152
|
-
|
153
|
-
break
|
154
|
-
end
|
155
|
-
|
156
|
-
end
|
157
29
|
|
158
30
|
def destroy_images_valid?
|
159
31
|
unless @argv.ami && Rudy::Utils.is_id?(:image, @argv.ami)
|
160
32
|
raise "Must supply an AMI ID (ami-XXXXXXX)"
|
161
33
|
end
|
162
|
-
|
34
|
+
true
|
163
35
|
end
|
164
36
|
def destroy_images
|
165
|
-
puts
|
37
|
+
puts Rudy::AWS::EC2::Images.deregister(@argv.ami) ? "Done" : "Unknown error"
|
166
38
|
end
|
167
39
|
|
168
40
|
def register_images_valid?
|
169
41
|
unless @argv.first
|
170
42
|
raise "Must supply a valid manifest path (bucket/ami-name.manifest.xml)"
|
171
43
|
end
|
172
|
-
|
44
|
+
true
|
173
45
|
end
|
174
46
|
def register_images
|
175
|
-
puts
|
47
|
+
puts Rudy::AWS::EC2::Images.register(@argv.first)
|
176
48
|
end
|
177
49
|
|
178
50
|
|
@@ -16,8 +16,9 @@ module AWS; module EC2;
|
|
16
16
|
raise "Cannot supply an instance ID" if @option.instid
|
17
17
|
|
18
18
|
if @option.group
|
19
|
-
|
20
|
-
|
19
|
+
unless Rudy::AWS::EC2::Groups.exists?(@option.group)
|
20
|
+
raise "Group #{@option.group} does not exist"
|
21
|
+
end
|
21
22
|
end
|
22
23
|
|
23
24
|
true
|
@@ -30,14 +31,15 @@ module AWS; module EC2;
|
|
30
31
|
:size => 'm1.small',
|
31
32
|
:zone => @@global.zone
|
32
33
|
}
|
33
|
-
|
34
|
-
radd = Rudy::AWS::EC2::Addresses.new(@@global.accesskey, @@global.secretkey, @@global.region)
|
35
|
-
rinst = Rudy::AWS::EC2::Instances.new(@@global.accesskey, @@global.secretkey, @@global.region)
|
36
|
-
|
34
|
+
|
37
35
|
if @option.address
|
38
36
|
raise "Cannot specify both -a and -n" if @option.newaddress
|
39
|
-
|
40
|
-
|
37
|
+
unless Rudy::AWS::EC2::Addresses.exists?(@option.address)
|
38
|
+
raise "#{@option.address} is not allocated to you"
|
39
|
+
end
|
40
|
+
if Rudy::AWS::EC2::Addresses.associated?(@option.address)
|
41
|
+
raise "#{@option.address} is already associated!"
|
42
|
+
end
|
41
43
|
end
|
42
44
|
|
43
45
|
# These can be sent directly to EC2 class
|
@@ -53,7 +55,7 @@ module AWS; module EC2;
|
|
53
55
|
exit unless Annoy.proceed?(:low)
|
54
56
|
end
|
55
57
|
|
56
|
-
instances =
|
58
|
+
instances = Rudy::AWS::EC2::Instances.list_group(opts[:group], :running)
|
57
59
|
|
58
60
|
if instances && instances.size > 0
|
59
61
|
instance_count = (instances.size == 1) ? 'is 1 instance' : "are #{instances.size} instances"
|
@@ -63,19 +65,19 @@ module AWS; module EC2;
|
|
63
65
|
|
64
66
|
if @option.newaddress
|
65
67
|
print "Creating address... "
|
66
|
-
address =
|
68
|
+
address = Rudy::AWS::EC2::Addresses.create
|
67
69
|
puts "#{address.ipaddress}"
|
68
70
|
@option.address = address.ipaddress
|
69
71
|
end
|
70
72
|
|
71
73
|
execute_action do
|
72
74
|
first_instance = true
|
73
|
-
|
75
|
+
Rudy::AWS::EC2::Instances.create(opts) do |inst| # Rudy::AWS::EC2::Instance objects
|
74
76
|
|
75
77
|
# Assign IP address to only the first instance
|
76
78
|
if first_instance && @option.address
|
77
79
|
puts "Associating #{@option.address} to #{inst.awsid}"
|
78
|
-
|
80
|
+
Rudy::AWS::EC2::Addresses.associate(@option.address, inst.awsid)
|
79
81
|
first_instance = false
|
80
82
|
end
|
81
83
|
|
@@ -89,16 +91,16 @@ module AWS; module EC2;
|
|
89
91
|
raise NoInstanceError.new(nil, @alias) if !@option.group && !@argv.instid
|
90
92
|
|
91
93
|
if @option.group
|
92
|
-
|
93
|
-
|
94
|
+
unless Rudy::AWS::EC2::Groups.exists?(@option.group)
|
95
|
+
raise "Group #{@option.group} does not exist"
|
96
|
+
end
|
94
97
|
end
|
95
98
|
|
96
99
|
if @option.private
|
97
100
|
raise Drydock::OptsError.new(nil, @alias, "Cannot allocate public IP for private instance") if @option.address || @option.newadress
|
98
101
|
end
|
99
102
|
|
100
|
-
|
101
|
-
raise "No instances" unless @rinst.any?
|
103
|
+
raise "No instances" unless Rudy::AWS::EC2::Instances.any?
|
102
104
|
true
|
103
105
|
end
|
104
106
|
alias :instances_destroy_valid? :instances_restart_valid?
|
@@ -112,12 +114,11 @@ module AWS; module EC2;
|
|
112
114
|
end
|
113
115
|
|
114
116
|
def consoles_valid?
|
115
|
-
@rinst = Rudy::AWS::EC2::Instances.new(@@global.accesskey, @@global.secretkey, @@global.region)
|
116
117
|
if @@global.pkey
|
117
118
|
raise "Cannot find file #{@@global.pkey}" unless File.exists?(@@global.pkey)
|
118
119
|
raise "Insecure permissions for #{@@global.pkey}" unless (File.stat(@@global.pkey).mode & 600) == 0
|
119
120
|
end
|
120
|
-
raise "No instances" unless
|
121
|
+
raise "No instances" unless Rudy::AWS::EC2::Instances.any?
|
121
122
|
true
|
122
123
|
end
|
123
124
|
def consoles
|
@@ -126,9 +127,9 @@ module AWS; module EC2;
|
|
126
127
|
opts[:id] = @argv.instid if @argv.instid
|
127
128
|
opts[:id] &&= [opts[:id]].flatten
|
128
129
|
|
129
|
-
lt =
|
130
|
+
lt = Rudy::AWS::EC2::Instances.list_group(opts[:group], :any, opts[:id]) do |inst|
|
130
131
|
puts instance_separator(inst.dns_public || inst.state, inst.awsid)
|
131
|
-
console =
|
132
|
+
console = Rudy::AWS::EC2::Instances.console(inst.awsid)
|
132
133
|
output = console ? Base64.decode64(console) : "Unavailable"
|
133
134
|
|
134
135
|
# The linux console can include ANSI escape codes for color,
|
@@ -163,7 +164,7 @@ module AWS; module EC2;
|
|
163
164
|
opts[:group] = @option.group if @option.group
|
164
165
|
opts[:state] = @option.state if @option.state
|
165
166
|
|
166
|
-
# A nil value forces the
|
167
|
+
# A nil value forces the @@ec2.instances.list to return all instances
|
167
168
|
if @option.all
|
168
169
|
opts[:state] = :any
|
169
170
|
opts[:group] = :any
|
@@ -172,8 +173,7 @@ module AWS; module EC2;
|
|
172
173
|
opts[:id] = @argv.instid if @argv.instid
|
173
174
|
opts[:id] &&= [opts[:id]].flatten
|
174
175
|
|
175
|
-
|
176
|
-
lt = rudy.list_group(opts[:group], opts[:state], opts[:id]) do |inst|
|
176
|
+
lt = Rudy::AWS::EC2::Instances.list_group(opts[:group], opts[:state], opts[:id]) do |inst|
|
177
177
|
puts @@global.verbose > 0 ? inst.inspect : inst.dump(@@global.format)
|
178
178
|
end
|
179
179
|
puts "No instances running" if !lt || lt.empty?
|
@@ -190,7 +190,7 @@ module AWS; module EC2;
|
|
190
190
|
opts[:id] = @argv.instid if @argv.instid
|
191
191
|
opts[:id] &&= [opts[:id]].flatten
|
192
192
|
|
193
|
-
instances =
|
193
|
+
instances = Rudy::AWS::EC2::Instances.list_group(opts[:group], :running, opts[:id])
|
194
194
|
raise "No matching instances running" if instances.nil?
|
195
195
|
|
196
196
|
inst_names = instances.collect { |inst| inst.dns_public || inst.awsid }
|
@@ -204,7 +204,7 @@ module AWS; module EC2;
|
|
204
204
|
execute_check(:medium)
|
205
205
|
|
206
206
|
execute_action("#{action.to_s.capitalize} Failed") {
|
207
|
-
|
207
|
+
Rudy::AWS::EC2::Instances.send(action, inst_ids)
|
208
208
|
}
|
209
209
|
status
|
210
210
|
end
|
@@ -3,15 +3,14 @@
|
|
3
3
|
module Rudy; module CLI;
|
4
4
|
module AWS; module EC2;
|
5
5
|
|
6
|
-
class
|
6
|
+
class EC2::Keypairs < Rudy::CLI::CommandBase
|
7
7
|
|
8
8
|
def create_keypairs_valid?
|
9
9
|
raise Drydock::ArgError.new('name', @alias) unless @argv.name
|
10
10
|
true
|
11
11
|
end
|
12
12
|
def create_keypairs
|
13
|
-
|
14
|
-
kp = execute_action { rkey.create(@argv.name) }
|
13
|
+
kp = execute_action { Rudy::AWS::EC2::Keypairs.create(@argv.name) }
|
15
14
|
if [:s, :string].member?(@@global.format)
|
16
15
|
puts "Name: #{kp.name}"
|
17
16
|
puts "Fingerprint: #{kp.fingerprint}", $/
|
@@ -28,21 +27,18 @@ module AWS; module EC2;
|
|
28
27
|
true
|
29
28
|
end
|
30
29
|
def destroy_keypairs
|
31
|
-
|
32
|
-
|
33
|
-
kp = rkey.get(@argv.name)
|
30
|
+
raise "Keypair #{@argv.name} does not exist" unless Rudy::AWS::EC2::Keypairs.exists?(@argv.name)
|
31
|
+
kp = Rudy::AWS::EC2::Keypairs.get(@argv.name)
|
34
32
|
puts "Destroying: #{kp.name}"
|
35
33
|
execute_check(:medium)
|
36
|
-
execute_action {
|
37
|
-
keypairs
|
34
|
+
execute_action { Rudy::AWS::EC2::Keypairs.destroy(kp.name) }
|
38
35
|
end
|
39
36
|
|
40
37
|
def keypairs
|
41
|
-
|
42
|
-
(rkey.list || []).each do |kp|
|
38
|
+
(Rudy::AWS::EC2::Keypairs.list || []).each do |kp|
|
43
39
|
puts @@global.verbose > 0 ? kp.inspect : kp.dump(@@global.format)
|
44
40
|
end
|
45
|
-
puts "No keypairs" unless
|
41
|
+
puts "No keypairs" unless Rudy::AWS::EC2::Keypairs.any?
|
46
42
|
end
|
47
43
|
|
48
44
|
|
@@ -7,34 +7,30 @@ module AWS; module EC2;
|
|
7
7
|
|
8
8
|
def create_snapshots_valid?
|
9
9
|
raise Drydock::ArgError.new('volume ID', @alias) unless @option.volume
|
10
|
-
@
|
11
|
-
@volume = @rvol.get(@argv.volid)
|
10
|
+
@volume = Rudy::AWS::EC2::Volumes.get(@argv.volid)
|
12
11
|
raise "Volume #{@volume.awsid} does not exist" unless @volume
|
13
12
|
true
|
14
13
|
end
|
15
14
|
def create_snapshots
|
16
|
-
|
17
|
-
snap = execute_action { rsnap.create(@volume.awsid) }
|
15
|
+
snap = execute_action { Rudy::AWS::EC2::Snapshots.create(@volume.awsid) }
|
18
16
|
puts @@global.verbose > 0 ? snap.inspect : snap.dump(@@global.format)
|
19
17
|
end
|
20
18
|
|
21
19
|
def destroy_snapshots_valid?
|
22
20
|
raise Drydock::ArgError.new('snapshot ID', @alias) unless @argv.snapid
|
23
|
-
@
|
24
|
-
@snap = @rsnap.get(@argv.snapid)
|
21
|
+
@snap = Rudy::AWS::EC2::Snapshots.get(@argv.snapid)
|
25
22
|
raise "Snapshot #{@snap.awsid} does not exist" unless @snap
|
26
23
|
true
|
27
24
|
end
|
28
25
|
def destroy_snapshots
|
29
26
|
puts "Destroying: #{@snap.awsid}"
|
30
27
|
execute_check(:medium)
|
31
|
-
execute_action {
|
28
|
+
execute_action { Rudy::AWS::EC2::Snapshots.destroy(@snap.awsid) }
|
32
29
|
snapshots
|
33
30
|
end
|
34
31
|
|
35
32
|
def snapshots
|
36
|
-
|
37
|
-
snaps = rsnap.list || []
|
33
|
+
snaps = Rudy::AWS::EC2::Snapshots.list || []
|
38
34
|
snaps.each do |snap|
|
39
35
|
puts @@global.verbose > 0 ? snap.inspect : snap.dump(@@global.format)
|
40
36
|
end
|
@@ -13,23 +13,27 @@ module AWS; module EC2;
|
|
13
13
|
end
|
14
14
|
def volumes_create
|
15
15
|
puts "Creating #{@option.size}GB volume in #{@@global.zone}"
|
16
|
-
rvol = Rudy::AWS::EC2::Volumes.new(@@global.accesskey, @@global.secretkey, @@global.region)
|
17
16
|
execute_check(:low)
|
18
17
|
vol = execute_action("Create Failed") {
|
19
|
-
|
18
|
+
Rudy::AWS::EC2::Volumes.create(@option.size, @@global.zone, @option.snapshot)
|
20
19
|
}
|
21
20
|
puts @global.verbose > 1 ? vol.inspect : vol.dump(@@global.format)
|
22
21
|
end
|
23
22
|
|
24
23
|
|
25
24
|
def destroy_volumes_valid?
|
26
|
-
raise "You must supply a volume ID. See rudy volume -h" unless @argv.volid
|
25
|
+
raise "You must supply a volume ID. See rudy volume -h" unless @argv.volid
|
26
|
+
|
27
|
+
unless Rudy::AWS::EC2::Volumes.exists? @argv.volid
|
28
|
+
raise Rudy::AWS::EC2::UnknownVolume, @argv.volid
|
29
|
+
end
|
27
30
|
true
|
28
31
|
end
|
29
32
|
|
30
33
|
def destroy_volumes
|
31
|
-
|
32
|
-
@volume =
|
34
|
+
|
35
|
+
@volume = Rudy::AWS::EC2::Volumes.get(@argv.volid)
|
36
|
+
|
33
37
|
raise "Volume #{@volume.awsid} does not exist" unless @volume
|
34
38
|
raise "Volume #{@volume.awsid} is still in-use" if @volume.in_use?
|
35
39
|
raise "Volume #{@volume.awsid} is still attached" if @volume.attached?
|
@@ -37,9 +41,10 @@ module AWS; module EC2;
|
|
37
41
|
|
38
42
|
puts "Destroying #{@volume.awsid}"
|
39
43
|
execute_check(:medium)
|
40
|
-
execute_action("Destroy Failed") {
|
44
|
+
execute_action("Destroy Failed") { Rudy::AWS::EC2::Volumes.destroy(@volume.awsid) }
|
41
45
|
|
42
|
-
vol =
|
46
|
+
vol = Rudy::AWS::EC2::Volumes.get(@volume.awsid)
|
47
|
+
|
43
48
|
puts @global.verbose > 1 ? vol.inspect : vol.dump(@@global.format)
|
44
49
|
end
|
45
50
|
|
@@ -51,20 +56,17 @@ module AWS; module EC2;
|
|
51
56
|
end
|
52
57
|
def volumes_attach
|
53
58
|
@option.device ||= "/dev/sdh"
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
raise "Volume #{@argv.volid} does not exist" unless rvol.exists?(@argv.volid)
|
58
|
-
raise "Volume #{@argv.volid} is already attached" if rvol.attached?(@argv.volid)
|
59
|
-
raise "Instance #{@option.instance} does not exist" unless rinst.exists?(@option.instance)
|
59
|
+
raise "Volume #{@argv.volid} does not exist" unless Rudy::AWS::EC2::Volumes.exists?(@argv.volid)
|
60
|
+
raise "Volume #{@argv.volid} is already attached" if Rudy::AWS::EC2::Volumes.attached?(@argv.volid)
|
61
|
+
raise "Instance #{@option.instance} does not exist" unless Rudy::AWS::EC2::Instances.exists?(@option.instance)
|
60
62
|
|
61
63
|
puts "Attaching #{@argv.volid} to #{@option.instance} on #{@option.device}"
|
62
64
|
execute_check(:low)
|
63
65
|
execute_action("Attach Failed") {
|
64
|
-
|
66
|
+
Rudy::AWS::EC2::Volumes.attach(@argv.volid, @option.instance, @option.device)
|
65
67
|
}
|
66
68
|
|
67
|
-
vol =
|
69
|
+
vol = Rudy::AWS::EC2::Volumes.get(@argv.volid)
|
68
70
|
puts @global.verbose > 1 ? vol.inspect : vol.dump(@@global.format)
|
69
71
|
end
|
70
72
|
|
@@ -74,24 +76,21 @@ module AWS; module EC2;
|
|
74
76
|
end
|
75
77
|
|
76
78
|
def volumes_detach
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
vol = rvol.get(@argv.volid)
|
79
|
+
raise "Volume #{@argv.volid} does not exist" unless Rudy::AWS::EC2::Volumes.exists?(@argv.volid)
|
80
|
+
vol = Rudy::AWS::EC2::Volumes.get(@argv.volid)
|
81
81
|
raise "Volume #{vol.awsid} is not attached" unless vol.attached?
|
82
82
|
|
83
83
|
puts "Detaching #{vol.awsid} from #{vol.instid}"
|
84
84
|
execute_check(:medium)
|
85
|
-
execute_action("Detach Failed") {
|
85
|
+
execute_action("Detach Failed") { Rudy::AWS::EC2::Volumes.detach(vol.awsid) }
|
86
86
|
|
87
|
-
vol =
|
87
|
+
vol = Rudy::AWS::EC2::Volumes.get(vol.awsid)
|
88
88
|
puts @global.verbose > 1 ? vol.inspect : vol.dump(@@global.format)
|
89
89
|
end
|
90
90
|
|
91
91
|
|
92
92
|
def volumes
|
93
|
-
|
94
|
-
volumes = rvol.list || []
|
93
|
+
volumes = Rudy::AWS::EC2::Volumes.list || []
|
95
94
|
volumes.each do |vol|
|
96
95
|
puts @global.verbose > 1 ? vol.inspect : vol.dump(@@global.format)
|
97
96
|
end
|