rudy 0.9.1 → 0.9.2
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 +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
|