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 +32 -17
- data/README.rdoc +74 -40
- 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 +41 -36
- 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 +171 -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 +17 -10
- 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 +14 -7
- data/lib/rudy/cli/status.rb +0 -60
@@ -5,10 +5,16 @@ module Rudy::Routines::Handlers;
|
|
5
5
|
extend self
|
6
6
|
|
7
7
|
ACTIONS = [:create, :destroy, :archive, :mount, :restore,
|
8
|
-
:attach, :detach, :mount, :umount].freeze
|
8
|
+
:attach, :detach, :mount, :umount, :fstype].freeze
|
9
9
|
|
10
10
|
Rudy::Routines.add_handler :disks, self
|
11
11
|
|
12
|
+
Rye::Cmd.add_command(:rudy_rm, 'rm')
|
13
|
+
Rye::Cmd.add_command(:rudy_mkfs, 'mkfs')
|
14
|
+
Rye::Cmd.add_command(:rudy_blkid, 'blkid')
|
15
|
+
Rye::Cmd.add_command(:rudy_format, 'C:/windows/system32/format.com')
|
16
|
+
Rye::Cmd.add_command(:rudy_diskpart, 'diskpart')
|
17
|
+
|
12
18
|
def raise_early_exceptions(type, batch, rset, lbox, argv=nil)
|
13
19
|
|
14
20
|
end
|
@@ -34,43 +40,54 @@ module Rudy::Routines::Handlers;
|
|
34
40
|
|
35
41
|
def execute(type, routine, rset, lbox, argv=nil)
|
36
42
|
original_user = rset.user
|
37
|
-
rset.add_key user_keypairpath(
|
38
|
-
rset.switch_user
|
39
|
-
|
40
|
-
# We need to add mkfs since it's not enabled by default.
|
41
|
-
# We prepend the command with rudy_ so we can delete it.
|
42
|
-
Rye::Cmd.add_command(:rudy_mkfs, 'mkfs')
|
43
|
+
rset.add_key user_keypairpath(current_machine_user)
|
44
|
+
rset.switch_user current_machine_user
|
43
45
|
|
44
46
|
routine.each_pair do |action, disks|
|
45
47
|
unless respond_to?(action.to_sym)
|
46
|
-
Rudy::Huxtable.le %Q(
|
48
|
+
Rudy::Huxtable.le %Q(DiskHandler: unknown action "#{action}")
|
47
49
|
next
|
48
50
|
end
|
49
51
|
# A quick hack to take advantage of the threading in Rye::Set.
|
50
52
|
# The action method does not run in the context of a Rye::Box
|
51
53
|
# object so we need to send rset as an argument.
|
52
54
|
rset.batch do
|
55
|
+
# Windows EC2 instances have 2 disks by default (C: and D:)
|
56
|
+
volumes = self.stash.attached_volumes
|
53
57
|
disks.each_pair do |path, props|
|
54
58
|
# self contains the current instance of Rye::Box.
|
55
59
|
disk = Rudy::Disk.new(self.stash.position, path, props)
|
56
|
-
|
60
|
+
disk.refresh! if disk.exists? # We need the volume ID if available
|
61
|
+
# don't include the current disk in the count.
|
62
|
+
volumes.reject! { |v| v.awsid == disk.volid } if disk.volid && disk.volume_attached?
|
63
|
+
disk_index = volumes.size + 2
|
64
|
+
Rudy::Routines::Handlers::Disks.send(action, self, disk, disk_index)
|
57
65
|
end
|
58
66
|
end
|
59
67
|
|
60
68
|
end
|
61
69
|
|
62
|
-
Rye::Cmd.remove_command(:rudy_mkfs)
|
63
|
-
|
64
70
|
rset.switch_user original_user
|
65
71
|
end
|
66
72
|
|
73
|
+
def fstype(rbox, disk, index)
|
74
|
+
|
75
|
+
raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists?
|
76
|
+
disk.refresh!
|
77
|
+
|
78
|
+
#p rbox.rudy_blkid :s, 'TYPE', :o, 'value', disk.device
|
79
|
+
|
80
|
+
end
|
81
|
+
|
67
82
|
|
68
|
-
def create(rbox, disk)
|
83
|
+
def create(rbox, disk, index)
|
69
84
|
if disk.exists?
|
70
85
|
puts "Disk found: #{disk.name}"
|
71
86
|
disk.refresh!
|
72
87
|
end
|
73
88
|
|
89
|
+
disk.index = index # Needed for windows
|
90
|
+
|
74
91
|
unless @@global.force
|
75
92
|
raise Rudy::Disks::AlreadyAttached, disk.name if disk.volume_attached?
|
76
93
|
end
|
@@ -83,25 +100,27 @@ module Rudy::Routines::Handlers;
|
|
83
100
|
}
|
84
101
|
end
|
85
102
|
|
86
|
-
attach rbox, disk unless disk.volume_attached?
|
87
|
-
format rbox, disk if disk.raw?
|
88
|
-
mount rbox, disk unless disk.mounted?
|
103
|
+
attach rbox, disk, index unless disk.volume_attached?
|
104
|
+
format rbox, disk, index if disk.raw?
|
105
|
+
mount rbox, disk, index unless disk.mounted?
|
89
106
|
|
90
107
|
disk.save :replace
|
91
108
|
end
|
92
109
|
|
93
110
|
|
94
111
|
|
95
|
-
def detach(rbox, disk)
|
112
|
+
def detach(rbox, disk, index)
|
96
113
|
|
97
114
|
raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists?
|
98
115
|
disk.refresh!
|
99
116
|
|
100
|
-
|
117
|
+
unless @@global.force
|
118
|
+
raise Rudy::Disks::NotAttached, disk.name unless disk.volume_attached?
|
119
|
+
end
|
101
120
|
|
102
|
-
umount rbox, disk if disk.mounted?
|
121
|
+
umount rbox, disk, index if disk.mounted?
|
103
122
|
raise Rudy::Disks::InUse, disk.name if disk.mounted?
|
104
|
-
|
123
|
+
|
105
124
|
msg = "Detaching #{disk.volid}..."
|
106
125
|
disk.volume_detach
|
107
126
|
Rudy::Utils.waiter(2, 60, STDOUT, msg) {
|
@@ -110,25 +129,48 @@ module Rudy::Routines::Handlers;
|
|
110
129
|
|
111
130
|
end
|
112
131
|
|
113
|
-
def attach(rbox, disk)
|
132
|
+
def attach(rbox, disk, index)
|
133
|
+
|
134
|
+
unless disk.volume_exists?
|
135
|
+
msg = "Creating volume... "
|
136
|
+
disk.create
|
137
|
+
Rudy::Utils.waiter(2, 60, STDOUT, msg) {
|
138
|
+
disk.volume_available?
|
139
|
+
}
|
140
|
+
end
|
114
141
|
|
115
142
|
raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists?
|
116
143
|
disk.refresh!
|
117
144
|
|
118
|
-
|
145
|
+
unless @@global.force
|
146
|
+
raise Rudy::Disks::AlreadyAttached, disk.name if disk.volume_attached?
|
147
|
+
end
|
148
|
+
|
149
|
+
devices = rbox.stash.attached_volumes.collect { |v| v.device }
|
150
|
+
if devices.member? disk.device
|
151
|
+
li "Device ID #{disk.device} is taken. Using #{devices.sort.last.succ}"
|
152
|
+
disk.device = devices.sort.last.succ
|
153
|
+
disk.save :replace
|
154
|
+
end
|
119
155
|
|
120
156
|
msg = "Attaching #{disk.volid} to #{rbox.stash.instid}... "
|
121
157
|
disk.volume_attach(rbox.stash.instid)
|
122
|
-
Rudy::Utils.waiter(
|
158
|
+
Rudy::Utils.waiter(3, 30, STDOUT, msg) {
|
123
159
|
disk.volume_attached?
|
124
160
|
}
|
125
161
|
|
126
162
|
end
|
127
163
|
|
128
|
-
def mount(rbox, disk)
|
164
|
+
def mount(rbox, disk, index)
|
129
165
|
|
130
166
|
raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists?
|
131
167
|
disk.refresh!
|
168
|
+
|
169
|
+
if rbox.stash.windows?
|
170
|
+
Rudy::Huxtable.li "Skipping for Windows"
|
171
|
+
return
|
172
|
+
end
|
173
|
+
|
132
174
|
attach rbox, disk unless disk.volume_attached?
|
133
175
|
|
134
176
|
unless @@global.force
|
@@ -137,35 +179,42 @@ module Rudy::Routines::Handlers;
|
|
137
179
|
raise Rudy::Disks::AlreadyMounted, disk.name if disk.mounted?
|
138
180
|
end
|
139
181
|
|
140
|
-
rbox.mkdir(:p, disk.path)
|
141
|
-
|
142
182
|
puts "Mounting at #{disk.path}... "
|
143
|
-
|
183
|
+
|
184
|
+
|
185
|
+
rbox.mkdir(:p, disk.path)
|
144
186
|
rbox.mount(:t, disk.fstype, disk.device, disk.path)
|
145
187
|
disk.mounted = true
|
146
188
|
disk.save :replace
|
147
189
|
sleep 1
|
190
|
+
|
148
191
|
end
|
149
192
|
|
150
193
|
|
151
|
-
def umount(rbox, disk)
|
194
|
+
def umount(rbox, disk, index)
|
195
|
+
|
152
196
|
raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists?
|
153
197
|
disk.refresh!
|
154
198
|
|
155
|
-
|
156
|
-
|
199
|
+
unless @@global.force
|
200
|
+
raise Rudy::Disks::NotAttached, disk.name if !disk.volume_attached?
|
157
201
|
raise Rudy::Disks::NotMounted, disk.name if !disk.mounted?
|
158
202
|
end
|
159
203
|
|
160
204
|
puts "Unmounting #{disk.path}... "
|
161
|
-
|
205
|
+
|
206
|
+
unless rbox.nil? || rbox.stash.windows?
|
207
|
+
rbox.umount(disk.path)
|
208
|
+
end
|
209
|
+
|
162
210
|
disk.mounted = false
|
163
211
|
disk.save :replace
|
164
212
|
sleep 2
|
213
|
+
|
165
214
|
end
|
166
215
|
alias_method :unmount, :umount
|
167
216
|
|
168
|
-
def format(rbox, disk)
|
217
|
+
def format(rbox, disk, index)
|
169
218
|
raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists?
|
170
219
|
disk.refresh!
|
171
220
|
|
@@ -177,20 +226,32 @@ module Rudy::Routines::Handlers;
|
|
177
226
|
raise Rudy::Disks::AlreadyFormatted, disk.name if !disk.raw?
|
178
227
|
end
|
179
228
|
|
180
|
-
|
229
|
+
if disk.fstype.nil? || disk.fstype.empty?
|
230
|
+
disk.fstype = rbox.stash.default_fstype
|
231
|
+
end
|
232
|
+
|
233
|
+
print "Creating #{disk.fstype} filesystem for #{disk.path}... "
|
234
|
+
if rbox.stash.windows?
|
235
|
+
puts "(index: #{index})"
|
236
|
+
windows_diskpart_partition rbox, disk, index
|
237
|
+
disk.mounted = true
|
238
|
+
else
|
239
|
+
puts $/
|
240
|
+
rbox.rudy_mkfs(:t, disk.fstype, :F, disk.device)
|
241
|
+
end
|
181
242
|
|
182
|
-
puts "Creating #{disk.fstype} filesystem for #{disk.device}... "
|
183
|
-
rbox.rudy_mkfs(:t, disk.fstype, :F, disk.device)
|
184
243
|
disk.raw = false
|
185
244
|
disk.save :replace
|
245
|
+
sleep 1
|
246
|
+
disk
|
186
247
|
end
|
187
248
|
|
188
|
-
def destroy(rbox, disk)
|
249
|
+
def destroy(rbox, disk, index)
|
189
250
|
raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists?
|
190
251
|
disk.refresh!
|
191
252
|
|
192
|
-
umount rbox,
|
193
|
-
detach rbox,
|
253
|
+
umount rbox,disk,index if disk.mounted? && !rbox.nil? && !rbox.stash.windows?
|
254
|
+
detach rbox,disk,index if disk.volume_attached?
|
194
255
|
|
195
256
|
unless @@global.force
|
196
257
|
raise Rudy::Disks::InUse, disk.name if disk.volume_attached?
|
@@ -200,7 +261,7 @@ module Rudy::Routines::Handlers;
|
|
200
261
|
disk.destroy
|
201
262
|
end
|
202
263
|
|
203
|
-
def archive(rbox, disk)
|
264
|
+
def archive(rbox, disk, index)
|
204
265
|
raise Rudy::Metadata::UnknownObject, disk.name unless disk.exists?
|
205
266
|
disk.refresh!
|
206
267
|
|
@@ -210,7 +271,7 @@ module Rudy::Routines::Handlers;
|
|
210
271
|
puts "Created backup: #{back.name}"
|
211
272
|
end
|
212
273
|
|
213
|
-
def restore(rbox, disk)
|
274
|
+
def restore(rbox, disk, index)
|
214
275
|
|
215
276
|
if disk.exists?
|
216
277
|
puts "Disk found: #{disk.name}"
|
@@ -222,7 +283,11 @@ module Rudy::Routines::Handlers;
|
|
222
283
|
end
|
223
284
|
|
224
285
|
latest_backup = disk.backups.last
|
225
|
-
|
286
|
+
|
287
|
+
if latest_backup.fstype.nil? || latest_backup.fstype.empty?
|
288
|
+
latest_backup.fstype = rbox.stash.default_fstype
|
289
|
+
end
|
290
|
+
|
226
291
|
disk.size, disk.fstype = latest_backup.size, latest_backup.fstype
|
227
292
|
|
228
293
|
puts "Backup found: #{latest_backup.name}"
|
@@ -237,13 +302,33 @@ module Rudy::Routines::Handlers;
|
|
237
302
|
disk.save :replace
|
238
303
|
end
|
239
304
|
|
240
|
-
attach rbox, disk unless disk.volume_attached?
|
241
|
-
mount rbox, disk unless disk.mounted?
|
305
|
+
attach rbox, disk, index unless disk.volume_attached?
|
306
|
+
mount rbox, disk, index unless disk.mounted?
|
242
307
|
|
243
308
|
disk.save :replace
|
244
309
|
|
245
310
|
end
|
246
311
|
|
312
|
+
private
|
313
|
+
|
314
|
+
# See:
|
315
|
+
# * http://social.technet.microsoft.com/Forums/en-US/winserversetup/thread/2cfbaae1-6e33-4197-bb71-63434a34eb3c
|
316
|
+
# * http://technet.microsoft.com/en-us/library/cc766465(WS.10).aspx
|
317
|
+
def windows_diskpart_partition(rbox, disk, disk_num)
|
318
|
+
rbox.quietly { rudy_rm :f, 'diskpart-script' }
|
319
|
+
rbox.file_append 'diskpart-script', %Q{
|
320
|
+
select disk #{disk_num}
|
321
|
+
clean
|
322
|
+
create partition primary
|
323
|
+
select partition 1
|
324
|
+
active
|
325
|
+
assign letter=#{disk.path.tr(':/', '')}
|
326
|
+
exit}
|
327
|
+
rbox.rudy_diskpart '/s', 'diskpart-script'
|
328
|
+
rbox.quietly { rudy_rm :f, 'diskpart-script' }
|
329
|
+
rbox.rudy_format disk.path, '/V:RUDY', "/FS:#{disk.fstype}", '/Q', '/Y'
|
330
|
+
end
|
331
|
+
|
247
332
|
|
248
333
|
end
|
249
334
|
end
|
@@ -4,13 +4,24 @@ module Rudy; module Routines; module Handlers;
|
|
4
4
|
include Rudy::Routines::Handlers::Base
|
5
5
|
extend self
|
6
6
|
|
7
|
-
|
7
|
+
Rudy::Routines.add_handler :network, self
|
8
8
|
|
9
9
|
|
10
|
-
def raise_early_exceptions(
|
10
|
+
def raise_early_exceptions(type, batch, rset, lbox, argv=nil)
|
11
11
|
|
12
12
|
end
|
13
13
|
|
14
|
+
def execute(type, routine, rset, lbox, argv=nil)
|
15
|
+
routine.each_pair do |action, definition|
|
16
|
+
unless respond_to?(action.to_sym)
|
17
|
+
Rudy::Huxtable.le %Q(GroupHandler: unknown action "#{action}")
|
18
|
+
next
|
19
|
+
end
|
20
|
+
Rudy::Huxtable.ld %Q(GroupHandler: "#{action}")
|
21
|
+
Rudy::Routines::Handlers::Group.send(action, definition)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
14
25
|
def create(name=nil)
|
15
26
|
name ||= current_group_name
|
16
27
|
return if exists? name
|
@@ -18,14 +29,12 @@ module Rudy; module Routines; module Handlers;
|
|
18
29
|
Rudy::AWS::EC2::Groups.create name
|
19
30
|
end
|
20
31
|
|
21
|
-
def authorize(
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
li "Authorizing ports #{ports.inspect} access for: #{addresses.join(', ')}"
|
28
|
-
Rudy::AWS::EC2::Groups.authorize(name, addresses, ports)
|
32
|
+
def authorize(ports=nil, addresses=nil, name=nil)
|
33
|
+
modify(:authorize, ports, addresses, name)
|
34
|
+
end
|
35
|
+
|
36
|
+
def revoke(ports=nil, addresses=nil, name=nil)
|
37
|
+
modify(:revoke, ports, addresses, name)
|
29
38
|
end
|
30
39
|
|
31
40
|
def exists?(name=nil)
|
@@ -40,5 +49,31 @@ module Rudy; module Routines; module Handlers;
|
|
40
49
|
Rudy::AWS::EC2::Groups.destroy name
|
41
50
|
end
|
42
51
|
|
52
|
+
def get(name=nil)
|
53
|
+
name ||= current_group_name
|
54
|
+
Rudy::AWS::EC2::Groups.get name
|
55
|
+
end
|
56
|
+
|
57
|
+
def list
|
58
|
+
Rudy::AWS::EC2::Groups.list
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
def modify(action, ports=nil, addresses=nil, name=nil)
|
63
|
+
name ||= current_group_name
|
64
|
+
addresses ||= [Rudy::Utils::external_ip_address]
|
65
|
+
|
66
|
+
if ports.nil?
|
67
|
+
ports = current_machine_os.to_s == 'windows' ? [3389,22] : [22]
|
68
|
+
else
|
69
|
+
ports = [ports].flatten.compact
|
70
|
+
end
|
71
|
+
|
72
|
+
ports.each do |port|
|
73
|
+
#li "Authorizing port #{port} access for: #{addresses.join(', ')}"
|
74
|
+
Rudy::AWS::EC2::Groups.send(action, name, addresses, [[port, port]]) rescue nil
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
43
78
|
end
|
44
79
|
end; end; end
|
@@ -10,7 +10,9 @@ module Rudy; module Routines; module Handlers;
|
|
10
10
|
raise NoMachines if rset.boxes.empty?
|
11
11
|
rset.boxes.each do |rbox|
|
12
12
|
msg = "Waiting for #{rbox.nickname} to boot..."
|
13
|
-
|
13
|
+
multi = rbox.stash.windows? ? 6 : 3
|
14
|
+
interval, max = 1*multi, 80*multi
|
15
|
+
Rudy::Utils.waiter(interval, max, Rudy::Huxtable.logger, msg, 0) {
|
14
16
|
inst = rbox.stash.get_instance
|
15
17
|
inst && inst.running?
|
16
18
|
}
|
@@ -36,17 +38,19 @@ module Rudy; module Routines; module Handlers;
|
|
36
38
|
def is_available?(rset, port=22)
|
37
39
|
raise NoMachines if rset.boxes.empty?
|
38
40
|
rset.boxes.each do |rbox|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
msg = "Waiting for port #{port} on #{rbox.nickname} ..."
|
42
|
+
port = 3389 if rbox.stash.windows?
|
43
|
+
multi = rbox.stash.windows? ? 3 : 2
|
44
|
+
interval, max = 1*multi, 30*multi
|
45
|
+
Rudy::Utils.waiter(interval, max, STDOUT, msg, 0) {
|
46
|
+
Rudy::Utils.service_available?(rbox.stash.dns_public, port)
|
47
|
+
}
|
45
48
|
end
|
46
49
|
end
|
47
50
|
|
48
51
|
def set_hostname(rset)
|
49
52
|
raise NoMachines if rset.boxes.empty?
|
53
|
+
|
50
54
|
original_user = rset.user
|
51
55
|
rset.switch_user 'root'
|
52
56
|
rset.add_key user_keypairpath('root')
|
@@ -58,9 +62,11 @@ module Rudy; module Routines; module Handlers;
|
|
58
62
|
# run so we may want to make this an explicit action.
|
59
63
|
type = current_machine_hostname || :rudy
|
60
64
|
rset.batch(type) do |hn|
|
61
|
-
|
62
|
-
|
63
|
-
|
65
|
+
unless self.stash.os == :windows
|
66
|
+
if hn != :default
|
67
|
+
hn = self.stash.name if hn == :rudy
|
68
|
+
self.quietly { hostname(hn) }
|
69
|
+
end
|
64
70
|
end
|
65
71
|
end
|
66
72
|
rset.switch_user original_user
|