vagrant-nodemaster 1.0.0 → 1.1.1

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.
@@ -8,382 +8,403 @@ require 'vagrant-nodemaster/node/nodedbmanager'
8
8
 
9
9
 
10
10
  module Vagrant
11
- module NodeMaster
11
+ module NodeMaster
12
12
 
13
13
 
14
14
 
15
- class RequestController
16
- include RestRoutes
17
- GET_VERB = :get
18
- POST_VERB = :post
19
- DELETE_VERB = :delete
20
- PUT_VERB = :put
21
- SYNC_TIME = 10
22
-
23
- def self.get_remote_boxes(host)
24
- client=get_host_parameters(host)
15
+ class RequestController
16
+ include RestRoutes
17
+ GET_VERB = :get
18
+ POST_VERB = :post
19
+ DELETE_VERB = :delete
20
+ PUT_VERB = :put
21
+ SYNC_TIME = 10
22
+
23
+ def self.box_downloads(host)
24
+ client=get_host_parameters(host)
25
+ resource = RestClient::Resource.new(
26
+ RouteManager.box_download_url(client[:address],client[:port])
27
+ )
25
28
 
26
- resource = RestClient::Resource.new(
27
- RouteManager.box_list_url(client[:address],client[:port])
28
- )
29
-
30
- response = execute(client,GET_VERB,resource);
31
-
32
- JSON.parse(response.to_str)
33
- end
29
+ response = execute(client,GET_VERB,resource);
30
+ JSON.parse(response.to_str,{:symbolize_names => true})
31
+ end
32
+
33
+ def self.get_remote_boxes(host)
34
+ client=get_host_parameters(host)
35
+
36
+ resource = RestClient::Resource.new(
37
+ RouteManager.box_list_url(client[:address],client[:port])
38
+ )
39
+
40
+ response = execute(client,GET_VERB,resource);
34
41
 
35
- def self.box_delete(host,box,provider)
36
- client=get_host_parameters(host)
37
-
38
-
39
- resource = RestClient::Resource.new(
40
- RouteManager.box_delete_url(client[:address],client[:port],box,provider)
41
- )
42
-
43
- response = execute(client,DELETE_VERB,resource);
42
+ JSON.parse(response.to_str)
43
+ end
44
+
45
+ def self.box_delete(host,box,provider)
46
+ client=get_host_parameters(host)
47
+
48
+
49
+ resource = RestClient::Resource.new(
50
+ RouteManager.box_delete_url(client[:address],client[:port],box,provider)
51
+ )
52
+
53
+ response = execute(client,DELETE_VERB,resource);
44
54
 
45
- JSON.parse(response.to_str)
46
-
47
- end
55
+ JSON.parse(response.to_str)
48
56
 
49
- def self.box_add(host,box,url,async=true)
50
- client=get_host_parameters(host)
51
-
52
- resource = RestClient::Resource.new(
53
- RouteManager.box_add_url(client[:address],client[:port]),
54
- :timeout => -1
55
- )
56
-
57
-
58
- response = execute(client,POST_VERB,resource,{:box => box,:url => url},async);
59
-
60
- return JSON.parse(response.to_str) if async ==false
61
-
62
- response
63
-
64
-
65
- end
57
+ end
58
+
59
+ def self.box_add(host,box,url,async=true)
60
+ client=get_host_parameters(host)
66
61
 
67
- def self.vm_up(host,vmname,async=true)
68
- client=get_host_parameters(host)
69
- #Due to the fact that starting the machines can take long,
70
- #setting the request not to expire
71
- resource = RestClient::Resource.new(
72
- RouteManager.vm_up_url(client[:address],client[:port]),
73
- :timeout => -1
74
- )
75
-
76
-
77
- response = execute(client,POST_VERB,resource,{:vmname => vmname},async);
78
-
79
- return JSON.parse(response.to_str) if async ==false
80
- response
81
-
82
- end
62
+ resource = RestClient::Resource.new(
63
+ RouteManager.box_add_url(client[:address],client[:port]),
64
+ :timeout => -1
65
+ )
83
66
 
84
- def self.vm_halt(host,vmname,force,async=true)
85
- client=get_host_parameters(host)
86
- #Due to the fact that halting the machines can take long,
87
- #setting the request not to expire
88
- resource = RestClient::Resource.new(
89
- RouteManager.vm_halt_url(client[:address],client[:port]),
90
- :timeout => -1
91
- )
92
-
93
- response = execute(client,POST_VERB,resource,{:vmname => vmname,:force=>force},async);
94
- return JSON.parse(response.to_str) if async ==false
95
- response
96
-
97
- end
98
67
 
99
- def self.vm_destroy (host,vmname)
100
- client=get_host_parameters(host)
101
-
102
- resource = RestClient::Resource.new(
103
- RouteManager.vm_destroy_url(client[:address],client[:port]),
104
- :timeout => -1
105
- )
106
-
107
-
108
- response = execute(client,POST_VERB,resource,{:vmname => vmname});
109
-
110
- JSON.parse(response.to_str)
111
-
112
- end
68
+ response = execute(client,POST_VERB,resource,{:box => box,:url => url},async);
69
+
70
+ return JSON.parse(response.to_str) if async ==false
113
71
 
114
- #Deletes from the remote node config the machine with name 'vmname'
115
- def self.vm_delete(host,vmname,remove=false)
116
- client=get_host_parameters(host)
117
-
118
-
119
-
120
- resource = RestClient::Resource.new(
121
- RouteManager.vm_delete_url(client[:address],client[:port],vmname),
122
- :payload => { :remove => remove }
123
- )
124
-
125
- execute(client,DELETE_VERB,resource);
126
-
127
-
128
-
129
- # JSON.parse(response.to_str)
130
-
131
- end
72
+ response
132
73
 
133
74
 
134
- def self.vm_add(host,config,rename=false)
135
- client=get_host_parameters(host)
136
-
137
- resource = RestClient::Resource.new(
138
- RouteManager.vm_add_url(client[:address],client[:port]),
139
- :timeout => -1 ,
140
- # :payload => {
141
- # :content_type => 'text/plain',
142
- # :file => File.new(config, 'rb')
143
- # }
144
- )
145
-
146
- execute(client,PUT_VERB,resource,{:file => File.read(config), :content_type => 'text/plain',:rename => rename})
147
- # JSON.parse(response.to_str)
148
-
149
- end
150
-
151
- def self.vm_status(host,vmname)
152
- client=get_host_parameters(host)
153
-
154
- #get_vm_status(client[:address],client[:port],vmname)
155
- get_vm_status(client,vmname)
156
-
157
- end
75
+ end
76
+
77
+ def self.vm_up(host,vmname,async=true)
78
+ client=get_host_parameters(host)
79
+ #Due to the fact that starting the machines can take long,
80
+ #setting the request not to expire
81
+ resource = RestClient::Resource.new(
82
+ RouteManager.vm_up_url(client[:address],client[:port]),
83
+ :timeout => -1
84
+ )
158
85
 
159
- def self.vm_ssh_config(host,vmname)
160
- client=get_host_parameters(host)
161
-
162
86
 
163
- resource = RestClient::Resource.new(
164
- RouteManager.vm_sshconfig_url(client[:address],client[:port],vmname)
165
- )
166
-
167
- response = execute(client,GET_VERB,resource);
168
- result=JSON.parse(response.to_str, {:symbolize_names => true})
169
-
170
-
171
- #Change the target machine
172
- result[:host]=client[:address]
173
-
174
- result
175
- end
87
+ response = execute(client,POST_VERB,resource,{:vmname => vmname},async);
88
+
89
+ return JSON.parse(response.to_str) if async ==false
90
+ response
176
91
 
92
+ end
93
+
94
+ def self.vm_halt(host,vmname,force,async=true)
95
+ client=get_host_parameters(host)
96
+ #Due to the fact that halting the machines can take long,
97
+ #setting the request not to expire
98
+ resource = RestClient::Resource.new(
99
+ RouteManager.vm_halt_url(client[:address],client[:port]),
100
+ :timeout => -1
101
+ )
102
+
103
+ response = execute(client,POST_VERB,resource,{:vmname => vmname,:force=>force},async);
104
+ return JSON.parse(response.to_str) if async ==false
105
+ response
177
106
 
178
- def self.vm_suspend(host,vmname,async=true)
179
- client=get_host_parameters(host)
180
- #Due to the fact that suspending the machines can take long,
181
- #setting the request not to expire
182
- resource = RestClient::Resource.new(
183
- RouteManager.vm_suspend_url(client[:address],client[:port]),
184
- :timeout => -1
185
- )
186
-
187
-
188
- response = execute(client,POST_VERB,resource,{:vmname => vmname},async);
189
-
190
- return JSON.parse(response.to_str) if async ==false
191
- response
192
-
193
- end
107
+ end
108
+
109
+ def self.vm_destroy (host,vmname)
110
+ client=get_host_parameters(host)
194
111
 
195
- def self.vm_resume(host,vmname,async=true)
196
- client=get_host_parameters(host)
197
- #Due to the fact that resuming the machines can take long,
198
- #setting the request not to expire
199
- resource = RestClient::Resource.new(
200
- RouteManager.vm_resume_url(client[:address],client[:port]),
201
- :timeout => -1
202
- )
203
-
204
- response = execute(client,POST_VERB,resource,{:vmname => vmname},async);
205
-
206
- return JSON.parse(response.to_str) if async ==false
207
- response
208
-
209
- end
112
+ resource = RestClient::Resource.new(
113
+ RouteManager.vm_destroy_url(client[:address],client[:port]),
114
+ :timeout => -1
115
+ )
210
116
 
211
117
 
212
- def self.vm_provision(host,vmname,async=true)
213
- client=get_host_parameters(host)
214
- #Due to the fact that provisioning the machines can take long,
215
- #setting the request not to expire
216
- resource = RestClient::Resource.new(
217
- RouteManager.vm_provision_url(client[:address],client[:port]),
218
- :timeout => -1
219
- )
220
-
221
-
222
- response = execute(client,POST_VERB,resource,{:vmname => vmname},async);
223
-
224
- return JSON.parse(response.to_str) if async ==false
225
- response
226
-
227
- end
118
+ response = execute(client,POST_VERB,resource,{:vmname => vmname});
119
+
120
+ JSON.parse(response.to_str)
228
121
 
229
- def self.get_remote_snapshots(host,vmname)
230
-
231
- client=get_host_parameters(host)
232
-
233
- resource = RestClient::Resource.new(
234
- RouteManager.snapshot_list_url(client[:address],client[:port],vmname)
235
- )
236
-
237
-
238
- response = execute(client,GET_VERB,resource);
239
-
240
- JSON.parse(response.to_str,{:symbolize_names => true})
241
- # return JSON.parse(response.to_str,{:symbolize_names => true}) if async ==false
242
- # response
243
-
244
- end
122
+ end
123
+
124
+ #Deletes from the remote node config the machine with name 'vmname'
125
+ def self.vm_delete(host,vmname,remove=false)
126
+ client=get_host_parameters(host)
127
+
128
+
129
+
130
+ resource = RestClient::Resource.new(
131
+ RouteManager.vm_delete_url(client[:address],client[:port],vmname),:payload => { :remove => remove }
132
+ )
133
+
134
+ execute(client,DELETE_VERB,resource);
135
+
136
+ end
137
+
138
+
139
+ def self.vm_add(host,config,rename=false)
140
+ client=get_host_parameters(host)
141
+
142
+ resource = RestClient::Resource.new(
143
+ RouteManager.vm_add_url(client[:address],client[:port]),
144
+ :timeout => -1 ,
145
+ # :payload => {
146
+ # :content_type => 'text/plain',
147
+ # :file => File.new(config, 'rb')
148
+ # }
149
+ )
150
+
151
+ execute(client,PUT_VERB,resource,{:file => File.read(config), :content_type => 'text/plain',:rename => rename})
152
+
153
+ end
154
+
155
+
156
+ def self.vm_status(host,vmname)
157
+ client=get_host_parameters(host)
245
158
 
246
- def self.vm_snapshot_take(host,vmname,sname,sdesc,async=true)
247
- client=get_host_parameters(host)
248
-
249
- #Due to the fact that taking the snapshot can take long,
250
- #setting the request not to expire
251
-
252
- resource = RestClient::Resource.new(
253
- RouteManager.vm_snapshot_take_url(client[:address],client[:port],vmname),
254
- :timeout => -1,
255
- )
159
+ #get_vm_status(client[:address],client[:port],vmname)
160
+ get_vm_status(client,vmname)
161
+
162
+ end
256
163
 
257
-
258
- response = execute(client,POST_VERB,resource,{:vmname => vmname,:name => sname,:desc => sdesc},async);
259
-
260
- #JSON.parse(response.to_str,{:symbolize_names => true})
261
- return JSON.parse(response.to_str,{:symbolize_names => true}) if async ==false
262
- response
263
-
264
- end
164
+ def self.vm_info(host,vmname)
165
+ client=get_host_parameters(host)
265
166
 
266
- def self.vm_snapshot_delete(host,vmname,snapid)
267
- client=get_host_parameters(host)
268
-
269
- #Due to the fact that deleting the snapshot can take long,
270
- #setting the request not to expire
271
- resource = RestClient::Resource.new(
272
- RouteManager.vm_snapshot_delete_url(client[:address],client[:port],vmname,snapid),
273
- :timeout => -1,
274
- )
275
167
 
276
-
277
- response = execute(client,DELETE_VERB,resource);
278
-
279
- # JSON.parse(response.to_str,{:symbolize_names => true})
280
-
281
- end
168
+ resource = RestClient::Resource.new(
169
+ RouteManager.vm_info_url(client[:address],client[:port],vmname)
170
+ )
171
+
172
+ response = execute(client,GET_VERB,resource);
173
+
174
+ JSON.parse(response.to_str)
282
175
 
176
+ end
177
+
178
+
179
+
180
+ def self.vm_ssh_config(host,vmname)
181
+ client=get_host_parameters(host)
283
182
 
284
- def self.vm_snapshot_restore(host,vmname,snapid,async=true)
285
-
286
- client=get_host_parameters(host)
287
183
 
288
- resource = RestClient::Resource.new(
289
- RouteManager.vm_snapshot_restore_url(client[:address],client[:port],vmname),
290
- :timeout => -1
291
- )
292
-
293
- response = execute(client,POST_VERB,resource,{:vmname => vmname,:snapid => snapid},async);
184
+ resource = RestClient::Resource.new(
185
+ RouteManager.vm_sshconfig_url(client[:address],client[:port],vmname)
186
+ )
187
+
188
+ response = execute(client,GET_VERB,resource);
189
+ result=JSON.parse(response.to_str, {:symbolize_names => true})
190
+
191
+
192
+ #Change the target machine
193
+ result[:host]=client[:address]
194
+
195
+ result
196
+ end
197
+
198
+
199
+ def self.vm_suspend(host,vmname,async=true)
200
+ client=get_host_parameters(host)
201
+ #Due to the fact that suspending the machines can take long,
202
+ #setting the request not to expire
203
+ resource = RestClient::Resource.new(
204
+ RouteManager.vm_suspend_url(client[:address],client[:port]),
205
+ :timeout => -1
206
+ )
207
+
208
+
209
+ response = execute(client,POST_VERB,resource,{:vmname => vmname},async);
210
+
211
+ return JSON.parse(response.to_str) if async ==false
212
+ response
213
+
214
+ end
215
+
216
+ def self.vm_resume(host,vmname,async=true)
217
+ client=get_host_parameters(host)
218
+ #Due to the fact that resuming the machines can take long,
219
+ #setting the request not to expire
220
+ resource = RestClient::Resource.new(
221
+ RouteManager.vm_resume_url(client[:address],client[:port]),
222
+ :timeout => -1
223
+ )
224
+
225
+ response = execute(client,POST_VERB,resource,{:vmname => vmname},async);
226
+
227
+ return JSON.parse(response.to_str) if async ==false
228
+ response
229
+
230
+ end
231
+
232
+
233
+ def self.vm_provision(host,vmname,async=true)
234
+ client=get_host_parameters(host)
235
+ #Due to the fact that provisioning the machines can take long,
236
+ #setting the request not to expire
237
+ resource = RestClient::Resource.new(
238
+ RouteManager.vm_provision_url(client[:address],client[:port]),
239
+ :timeout => -1
240
+ )
241
+
242
+
243
+ response = execute(client,POST_VERB,resource,{:vmname => vmname},async);
244
+
245
+ return JSON.parse(response.to_str) if async ==false
246
+ response
247
+
248
+ end
249
+
250
+ def self.get_remote_snapshots(host,vmname)
251
+
252
+ client=get_host_parameters(host)
253
+
254
+ resource = RestClient::Resource.new(
255
+ RouteManager.snapshot_list_url(client[:address],client[:port],vmname)
256
+ )
257
+
258
+
259
+ response = execute(client,GET_VERB,resource);
260
+
261
+ JSON.parse(response.to_str,{:symbolize_names => true})
262
+ # return JSON.parse(response.to_str,{:symbolize_names => true}) if async ==false
263
+ # response
264
+
265
+ end
266
+
267
+ def self.vm_snapshot_take(host,vmname,sname,sdesc,async=true)
268
+ client=get_host_parameters(host)
294
269
 
270
+ #Due to the fact that taking the snapshot can take long,
271
+ #setting the request not to expire
295
272
 
296
- #JSON.parse(response.to_str,{:symbolize_names => true})
297
- return JSON.parse(response.to_str,{:symbolize_names => true}) if async ==false
298
- response
299
- end
273
+ resource = RestClient::Resource.new(
274
+ RouteManager.vm_snapshot_take_url(client[:address],client[:port],vmname),
275
+ :timeout => -1,
276
+ )
277
+
278
+
279
+ response = execute(client,POST_VERB,resource,{:vmname => vmname,:name => sname,:desc => sdesc},async);
300
280
 
281
+ #JSON.parse(response.to_str,{:symbolize_names => true})
282
+ return JSON.parse(response.to_str,{:symbolize_names => true}) if async ==false
283
+ response
301
284
 
302
- def self.node_operation_queued(host,id)
303
- client=get_host_parameters(host)
304
- resource = RestClient::Resource.new(
305
- RouteManager.node_queue_url(client[:address],client[:port],id)
306
- )
307
-
308
- response = execute(client,GET_VERB,resource);
309
-
310
- JSON.parse(response.to_str,{:symbolize_names => true})
311
- end
285
+ end
286
+
287
+ def self.vm_snapshot_delete(host,vmname,snapid)
288
+ client=get_host_parameters(host)
289
+
290
+ #Due to the fact that deleting the snapshot can take long,
291
+ #setting the request not to expire
292
+ resource = RestClient::Resource.new(
293
+ RouteManager.vm_snapshot_delete_url(client[:address],client[:port],vmname,snapid),
294
+ :timeout => -1,
295
+ )
296
+
297
+
298
+ response = execute(client,DELETE_VERB,resource);
299
+
300
+ # JSON.parse(response.to_str,{:symbolize_names => true})
301
+
302
+ end
303
+
304
+
305
+ def self.vm_snapshot_restore(host,vmname,snapid,async=true)
306
+
307
+ client=get_host_parameters(host)
308
+
309
+ resource = RestClient::Resource.new(
310
+ RouteManager.vm_snapshot_restore_url(client[:address],client[:port],vmname),
311
+ :timeout => -1
312
+ )
312
313
 
313
- def self.node_operation_queued_last(host)
314
- client=get_host_parameters(host)
315
- resource = RestClient::Resource.new(
316
- RouteManager.node_queue_last_url(client[:address],client[:port])
317
- )
318
-
319
- response = execute(client,GET_VERB,resource);
320
-
321
- JSON.parse(response.to_str,{:symbolize_names => true})
322
- end
314
+ response = execute(client,POST_VERB,resource,{:vmname => vmname,:snapid => snapid},async);
315
+
316
+
317
+ #JSON.parse(response.to_str,{:symbolize_names => true})
318
+ return JSON.parse(response.to_str,{:symbolize_names => true}) if async ==false
319
+ response
320
+ end
321
+
322
+
323
+ def self.node_operation_queued(host,id)
324
+ client=get_host_parameters(host)
325
+ resource = RestClient::Resource.new(
326
+ RouteManager.node_queue_url(client[:address],client[:port],id)
327
+ )
328
+
329
+ response = execute(client,GET_VERB,resource);
330
+
331
+ JSON.parse(response.to_str,{:symbolize_names => true})
332
+ end
333
+
334
+ def self.node_operation_queued_last(host)
335
+ client=get_host_parameters(host)
336
+ resource = RestClient::Resource.new(
337
+ RouteManager.node_queue_last_url(client[:address],client[:port])
338
+ )
339
+
340
+ response = execute(client,GET_VERB,resource);
341
+
342
+ JSON.parse(response.to_str,{:symbolize_names => true})
343
+ end
344
+
345
+ def self.node_backup_take(ui,target_dir,host=nil,vmname=nil)
346
+
347
+ current_client=nil
348
+ current_file = nil
349
+ download_backup = false
323
350
 
324
- def self.node_backup_take(ui,target_dir,host=nil,vmname=nil)
351
+ begin
325
352
 
326
- current_client=nil
327
- current_file = nil
328
- download_backup = false
353
+ raise "Directory \"#{target_dir}\" does not exists" if target_dir && !File.directory?(target_dir)
354
+
355
+ download_backup = true if target_dir
329
356
 
330
- begin
357
+ clients = []
358
+ if (host)
359
+ clients << get_host_parameters(host)
360
+ else
361
+ #FIXME QUITAR ESTO DE AQUI
362
+ #@dbmanager=DB::NodeDBManager.new if !@dbmanager
363
+ clients = DB::NodeDBManager.get_nodes
364
+ end
365
+
366
+ clients.each do |client|
367
+ current_client=client
368
+ #Fist get remote virtual machines
369
+ vms=get_vm_status(client,vmname)
331
370
 
332
- raise "Directory \"#{target_dir}\" does not exists" if target_dir && !File.directory?(target_dir)
333
-
334
- download_backup = true if target_dir
335
371
 
336
- clients = []
337
- if (host)
338
- clients << get_host_parameters(host)
339
- else
340
- #FIXME QUITAR ESTO DE AQUI
341
- #@dbmanager=DB::NodeDBManager.new if !@dbmanager
342
- clients = DB::NodeDBManager.get_nodes
343
- end
344
-
345
- clients.each do |client|
346
- current_client=client
347
- #Fist get remote virtual machines
348
- vms=get_vm_status(client,vmname)
372
+ vms.each do |vm|
349
373
 
350
-
351
- vms.each do |vm|
352
-
353
- th = nil
354
- if (ui)
355
- th = Thread.new(ui) do |ui|
356
- draw_progress(ui,download_backup,client[:name],vm["name"])
357
- end
374
+ th = nil
375
+ if (ui)
376
+ th = Thread.new(ui) do |ui|
377
+ draw_progress(ui,download_backup,client[:name],vm["name"])
358
378
  end
359
-
379
+ end
380
+
360
381
 
361
382
 
362
- resource = RestClient::Resource.new(
363
- RouteManager.vm_snapshot_take_url(client[:address],client[:port],vm["name"]),
364
- :download => download_backup,
365
- :timeout => -1
366
- )
367
-
368
- #OLD. FIXME REMOVE
369
- #response = resource.get({:params => {'download' => download_backup}})
370
- response = execute(client,GET_VERB,resource,:params => {'download' => download_backup});
371
-
372
- th.kill if th
373
-
374
- if response.code==200
375
- if download_backup && response.headers[:content_type]=="Application/octet-stream"
383
+ resource = RestClient::Resource.new(
384
+ RouteManager.vm_snapshot_take_url(client[:address],client[:port],vm["name"]),
385
+ :download => download_backup,
386
+ :timeout => -1
387
+ )
388
+
389
+ #OLD. FIXME REMOVE
390
+ #response = resource.get({:params => {'download' => download_backup}})
391
+ response = execute(client,GET_VERB,resource,:params => {'download' => download_backup});
392
+
393
+ th.kill if th
394
+
395
+ if response.code==200
396
+ if download_backup && response.headers[:content_type]=="Application/octet-stream"
376
397
 
377
- time = Time.now
378
-
379
- basename = "Backup.#{client[:name]}.#{vm["name"]}.#{time.year}.#{time.month}.#{time.day}.#{time.hour}.#{time.min}.#{time.sec}"
380
- current_file = "#{target_dir}/#{basename}.zip"
381
- File.open(current_file, "w") do |f|
382
- f.write(response.body)
383
- end
384
-
385
- current_file=""
386
- #FIXME DELETE If we want to use the filename of the attachment
398
+ time = Time.now
399
+
400
+ basename = "Backup.#{client[:name]}.#{vm["name"]}.#{time.year}.#{time.month}.#{time.day}.#{time.hour}.#{time.min}.#{time.sec}"
401
+ current_file = "#{target_dir}/#{basename}.zip"
402
+ File.open(current_file, "w") do |f|
403
+ f.write(response.body)
404
+ end
405
+
406
+ current_file=""
407
+ #FIXME DELETE If we want to use the filename of the attachment
387
408
  # if response.headers[:content_disposition] =~ /^attachment; filename=\"(.*?)\"$/
388
409
  # current_file = "#{target_dir}/#{$1}"
389
410
  # File.open(current_file, "w") do |f|
@@ -391,203 +412,222 @@ module Vagrant
391
412
  # end
392
413
  # current_file=""
393
414
  # end
394
- end
395
-
396
- ui.success("OK") if ui
397
-
398
415
  end
399
416
 
417
+ ui.success("OK") if ui
418
+
400
419
  end
401
420
 
402
421
  end
403
422
 
404
- rescue RestClient::ResourceNotFound => e
405
- ui.error("Remote Client \"#{current_client[:name]}\": Box \"#{vmname}\" could not be found") if ui
406
- rescue Exception => e
407
- ui.error("ERROR: "+e.message) if ui
408
- #Checking that the tmp file is removed
409
- File.delete(current_file) if current_file && File.exists?(current_file)
410
- end
423
+ end
411
424
 
412
- end
425
+ rescue RestClient::ResourceNotFound => e
426
+ ui.error("Remote Client \"#{current_client[:name]}\": Box \"#{vmname}\" could not be found") if ui
427
+ rescue Exception => e
428
+ ui.error("ERROR: "+e.message) if ui
429
+ #Checking that the tmp file is removed
430
+ File.delete(current_file) if current_file && File.exists?(current_file)
431
+ end
413
432
 
414
- def self.node_backup_log(ui,node,vmname=nil)
415
-
416
- raise "Error finding the node" if node==nil
417
-
418
- client = get_host_parameters(node)
419
-
420
- resource = RestClient::Resource.new(
421
- RouteManager.backup_log_url(client[:address],client[:port],vmname),
422
- :timeout => -1
423
- )
433
+ end
424
434
 
425
-
426
-
427
- response = execute(client,GET_VERB,resource,:vmname => vmname);
428
-
429
- JSON.parse(response.to_str)
430
-
431
- end
432
-
433
- def self.node_config_show(node)
434
- raise "Please enter a valid node" if node==nil
435
- client=get_host_parameters(node)
436
-
437
-
438
- resource = RestClient::Resource.new(
439
- RouteManager.config_show_url(client[:address],client[:port]),
440
- :timeout => -1
441
- )
442
-
443
-
444
- execute(client,GET_VERB,resource);
445
-
446
- end
447
-
435
+ def self.node_backup_log(ui,node,vmname=nil)
448
436
 
437
+ raise "Error finding the node" if node==nil
449
438
 
450
- def self.node_config_upload(node,config_path)
451
- client=get_host_parameters(node)
452
-
453
-
454
- resource = RestClient::Resource.new(
455
- RouteManager.config_upload_url(client[:address],client[:port]),
456
- :timeout => -1
457
- )
458
-
459
- execute(client,POST_VERB,resource,{:file => File.read(config_path), :content_type => 'text/plain'})
460
-
461
- end
462
-
463
-
464
- def self.node_password_change(node,password)
465
- client=get_host_parameters(node)
466
-
467
-
468
- resource = RestClient::Resource.new(
469
- RouteManager.node_password_change_url(client[:address],client[:port]),
470
- :timeout => -1
471
- )
472
-
473
- execute(client,POST_VERB,resource,{:password => Digest::MD5.hexdigest(password)});
474
-
475
- end
476
-
477
-
478
- private
479
-
480
- def self.execute(host,http_method,resource,params=nil,async=true)
481
- client = login(host)
482
-
483
- #FIXME AÑADIR AQUI GESTION DE ERRORES
484
- #SI NO HAY COOKIE
485
- #SI NO HAY TOKEN
486
- #Y EnVIAR DESDE SERVeR ALGUNA EXECPCION
487
- #PARA MONITORIZAR LA FALTA DE ALGUN PARAMETRO Y REPETIR LA TRANSACCION
488
- resource.options[:headers] = { :content_md5 => CGI.escape(client[:token]),
489
- :cookies => client[:cookies]
490
- }
491
-
492
- data= {}
493
-
494
- data.merge!(params) if params!=nil
495
-
496
-
497
-
498
- #response = resource.send http_method.to_sym, :content_md5 => client[:token], :cookies => client[:cookies]
499
-
500
- response = resource.send http_method.to_sym, data
501
-
502
- if response.code == 202 && async==false
503
- #Getting the location operation id
504
- opid = response.gsub!(/\D/, "")
505
-
506
- begin
507
- sleep SYNC_TIME
508
- client1 = login(host)
509
- resourceop = RestClient::Resource.new(
510
- RouteManager.node_queue_url(client1[:address],client1[:port],opid)
511
- )
512
- resourceop.options[:headers] = { :content_md5 => CGI.escape(client1[:token]),
513
- :cookies => client1[:cookies]
514
- }
515
- responseop = resourceop.send GET_VERB
516
-
517
- res = JSON.parse(responseop.to_str)
518
- pp res[0]
519
-
520
-
521
- end while (res[0].eql? "IN PROGRESS") #While operation code is IN PROGRESS iterate
522
-
523
- res[1]
524
-
525
- else
526
- response
527
- end
528
-
529
- end
439
+ client = get_host_parameters(node)
530
440
 
441
+ resource = RestClient::Resource.new(
442
+ RouteManager.backup_log_url(client[:address],client[:port],vmname),
443
+ :timeout => -1
444
+ )
445
+
446
+
447
+
448
+ response = execute(client,GET_VERB,resource,:vmname => vmname);
449
+
450
+ JSON.parse(response.to_str)
531
451
 
452
+ end
453
+
454
+ def self.node_info(node)
455
+ raise "Please enter a valid node" if node==nil
456
+ client=get_host_parameters(node)
457
+
458
+ resource = RestClient::Resource.new(
459
+ RouteManager.node_info_url(client[:address],client[:port]),:timeout => -1
460
+ )
461
+
462
+ response=execute(client,GET_VERB,resource);
463
+
532
464
 
533
- def self.login(host)
534
-
535
- response = RestClient.get RouteManager.login_url(host[:address],host[:port])
536
-
537
- host[:token] = Digest::MD5.hexdigest(response.headers[:content_md5]+host[:password])
538
- host[:cookies] = response.cookies
539
-
540
- host
541
- end
465
+
466
+ JSON.parse(response.to_str,{:symbolize_names => true})
467
+
468
+ end
469
+
470
+
471
+ def self.node_config_show(node)
472
+ raise "Please enter a valid node" if node==nil
473
+ client=get_host_parameters(node)
474
+
475
+
476
+ resource = RestClient::Resource.new(
477
+ RouteManager.config_show_url(client[:address],client[:port]),:timeout => -1
478
+ )
479
+
480
+
481
+ execute(client,GET_VERB,resource);
482
+
483
+ end
484
+
485
+
486
+
487
+ def self.node_config_upload(node,config_path)
488
+ client=get_host_parameters(node)
489
+
490
+
491
+ resource = RestClient::Resource.new(
492
+ RouteManager.config_upload_url(client[:address],client[:port]),
493
+ :timeout => -1
494
+ )
495
+
496
+ execute(client,POST_VERB,resource,{:file => File.read(config_path), :content_type => 'text/plain'})
497
+
498
+ end
499
+
500
+
501
+ def self.node_password_change(node,password)
502
+ client=get_host_parameters(node)
503
+
504
+
505
+ resource = RestClient::Resource.new(
506
+ RouteManager.node_password_change_url(client[:address],client[:port]),:timeout => -1
507
+ )
508
+
509
+ execute(client,POST_VERB,resource,{:password => Digest::MD5.hexdigest(password)});
510
+
511
+ end
512
+
513
+
514
+ private
515
+
516
+ def self.execute(host,http_method,resource,params=nil,async=true)
517
+ client = login(host)
518
+
519
+ #FIXME AÑADIR AQUI GESTION DE ERRORES
520
+ #SI NO HAY COOKIE
521
+ #SI NO HAY TOKEN
522
+ #Y EnVIAR DESDE SERVeR ALGUNA EXECPCION
523
+ #PARA MONITORIZAR LA FALTA DE ALGUN PARAMETRO Y REPETIR LA TRANSACCION
524
+ resource.options[:headers] = { :content_md5 => CGI.escape(client[:token]),
525
+ :cookies => client[:cookies]
526
+ }
527
+
528
+ data= {}
529
+
530
+ data.merge!(params) if params!=nil
531
+
532
+
533
+
534
+ #response = resource.send http_method.to_sym, :content_md5 => client[:token], :cookies => client[:cookies]
535
+
536
+ response = resource.send http_method.to_sym, data
537
+
538
+ if response.code == 202 && async==false
539
+ #Getting the location operation id
540
+ opid = response.gsub!(/\D/, "")
541
+
542
+ begin
543
+ sleep SYNC_TIME
544
+ client1 = login(host)
545
+ resourceop = RestClient::Resource.new(
546
+ RouteManager.node_queue_url(client1[:address],client1[:port],opid)
547
+ )
548
+
549
+ resourceop.options[:headers] = { :content_md5 => CGI.escape(client1[:token]),
550
+ :cookies => client1[:cookies]
551
+ }
552
+
553
+ responseop = resourceop.send GET_VERB
554
+
555
+ res = JSON.parse(responseop.to_str)
556
+
557
+
558
+
559
+ end while (res[0].eql? "IN PROGRESS") #While operation code is IN PROGRESS iterate
560
+
561
+ res[1]
562
+
563
+ else
564
+ response
565
+ end
566
+
567
+ end
568
+
569
+
570
+
571
+ def self.login(host)
572
+
573
+ response = RestClient.get RouteManager.login_url(host[:address],host[:port])
574
+
575
+ host[:token] = Digest::MD5.hexdigest(response.headers[:content_md5]+host[:password])
576
+ host[:cookies] = response.cookies
577
+
578
+ host
579
+ end
580
+
581
+ def self.get_host_parameters(host)
582
+
583
+ #@dbmanager=DB::NodeDBManager.get_reference if !@dbmanager
584
+ DB::NodeDBManager.get_node(host)
585
+
586
+ end
587
+
588
+ def self.get_vm_status(client,vmname)
589
+
590
+ resource = RestClient::Resource.new(
591
+ RouteManager.vm_status_url(client[:address],client[:port],vmname)
592
+ )
593
+
594
+ response = execute(client,GET_VERB,resource);
595
+
596
+ JSON.parse(response.to_str)
542
597
 
543
- def self.get_host_parameters(host)
598
+ end
599
+
600
+
601
+
602
+ def self.draw_progress(ui,download,node,vmname)
603
+ return if !ui
604
+ ui.info("Downloading ",:new_line => false) if download
605
+ ui.info("Waiting for ",:new_line => false) if !download
544
606
 
545
- #@dbmanager=DB::NodeDBManager.get_reference if !@dbmanager
546
- DB::NodeDBManager.get_node(host)
547
-
548
- end
607
+ ui.info("backup of Virtual Machine \'#{vmname}\' from Node \'#{node}\' . . . ",:new_line => false)
549
608
 
550
- def self.get_vm_status(client,vmname)
551
-
552
- resource = RestClient::Resource.new(
553
- RouteManager.vm_status_url(client[:address],client[:port],vmname)
554
- )
609
+ val=0
610
+ while true
611
+ sleep(0.1)
555
612
 
556
- response = execute(client,GET_VERB,resource);
557
-
558
- JSON.parse(response.to_str)
559
-
560
- end
561
-
562
- def self.draw_progress(ui,download,node,vmname)
563
- return if !ui
564
- ui.info("Downloading ",:new_line => false) if download
565
- ui.info("Waiting for ",:new_line => false) if !download
566
-
567
- ui.info("backup of Virtual Machine \'#{vmname}\' from Node \'#{node}\' . . . ",:new_line => false)
568
-
569
- val=0
570
- while true
571
- sleep(0.1)
572
-
573
- case val
574
- when 0 then
575
- ui.info("|\b",:new_line => false)
576
- when 1 then
577
- ui.info("/\b",:new_line => false)
578
- when 2 then
579
- ui.info("-\b",:new_line => false)
580
- when 3 then
581
- ui.info("\\\b",:new_line => false)
582
- end
583
- val=val+1
584
-
585
- val=0 if val==4
613
+ case val
614
+ when 0 then
615
+ ui.info("|\b",:new_line => false)
616
+ when 1 then
617
+ ui.info("/\b",:new_line => false)
618
+ when 2 then
619
+ ui.info("-\b",:new_line => false)
620
+ when 3 then
621
+ ui.info("\\\b",:new_line => false)
586
622
  end
623
+ val=val+1
624
+
625
+ val=0 if val==4
587
626
  end
588
-
589
-
590
627
  end
591
- end
628
+
629
+
630
+ end
631
+ end
592
632
  end
593
633