rudy 0.8.5 → 0.9.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/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
|