vagrant-node 1.0.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -24,70 +24,107 @@ module Vagrant
24
24
 
25
25
 
26
26
  def extract_vms_sexp
27
- raise RestException.new(406,"Config File has no virtual machine configured") if (@config_sexp.nil? ||
28
- @config_sexp.empty? ||
29
- @config_sexp[VM_INDEX_START].nil?)
30
-
31
-
32
- if @config_sexp[VM_INDEX_START].node_type==:block
27
+
28
+
29
+ index=VM_INDEX_START
30
+
31
+ if (@config_sexp[0]==:iter)
32
+ block=@config_sexp
33
+ else
34
+
35
+ gindex=0
36
+ block=nil
37
+ @config_sexp.each_sexp do |conf|
38
+ gindex=gindex+1
39
+ if (conf.node_type == :iter)
40
+ block = @config_sexp[gindex]
41
+ end
42
+ end
33
43
 
34
- if (@config_sexp[VM_INDEX_START].find_nodes(:iter).empty?)
44
+ end
45
+
46
+
47
+
48
+
49
+ raise RestException.new(406,
50
+ "Config File has no virtual machine configured") if (block.nil? ||
51
+ block.empty? ||
52
+ block[index].nil?)
53
+
54
+
55
+
56
+
57
+ if block[index].node_type==:block
58
+
59
+ if (block[index].find_nodes(:iter).empty?)
35
60
  #One machine with default style
36
61
  return default_to_block
37
62
 
38
63
  else
39
64
  #Several machines configured
40
- return @config_sexp[VM_INDEX_START].find_nodes(:iter)
65
+ return block[index].find_nodes(:iter)
41
66
  end
42
67
 
43
- else
44
- #Only one machine configured
45
- return [@config_sexp[VM_INDEX_START]]
68
+ else
69
+
70
+ return [block[index]]
46
71
  end
47
72
 
48
73
  end
49
74
 
50
- def delete_vm (vm_name)
75
+ def delete_vm (vm_name)
76
+ index=get_start_index
77
+
51
78
 
52
79
 
53
- if !@config_sexp[VM_INDEX_START].nil?
54
- #Este caso se presenta cuando existe más de una máquina virtual
55
- #O bien cuando la máquina es de tipo default
56
- if @config_sexp[VM_INDEX_START].node_type==:block
80
+
57
81
 
58
- if (@config_sexp[VM_INDEX_START].find_nodes(:iter).empty? && vm_name.to_sym==:default)
59
- #Una única máquina configurada y no como bloque
60
- @config_sexp.delete_at(VM_INDEX_START)
61
- save
62
- return true
63
- else
64
- #Entorno multi vm
65
- @config_sexp[VM_INDEX_START].each_sexp do |vm|
66
- vm.find_nodes(:call).first.find_nodes(:lit).each do |node|
67
- if node.value === vm_name.to_sym
68
- @config_sexp[VM_INDEX_START].delete(vm)
69
- save
70
- return true
71
- end
72
- end
73
- end
74
- end
82
+ if (@config_sexp[0]==:iter)
83
+ nodo=@config_sexp
84
+ else
85
+ nodo=@config_sexp.find_nodes(:iter).first
86
+ end
87
+
88
+
89
+ if (!nodo[VM_INDEX_START].nil?)
75
90
 
76
- else
77
- #Este caso se produce cuando hay unicamente
78
- #una maquina virtual configurada. En este caso
79
- #@config_sexp[VM_INDEX_START] contiene la definicion
80
- #de la maquina directamente
81
- node=@config_sexp[VM_INDEX_START].find_nodes(:call).first.find_node(:lit)
82
- if node.value === vm_name.to_sym
83
- @config_sexp.delete_at(VM_INDEX_START)
84
- save
85
- return true
91
+ if (nodo[VM_INDEX_START].node_type == :iter)
92
+ vm = nodo[VM_INDEX_START].find_nodes(:call)
93
+
94
+ if (!vm.empty?)
95
+ leaf= vm.first.find_nodes(:lit)
96
+
97
+ if (!leaf.empty? && leaf.first.value === vm_name.to_sym)
98
+ nodo.delete_at(VM_INDEX_START)
99
+
100
+ save
101
+ return true
102
+ end
86
103
  end
104
+ elsif (nodo[VM_INDEX_START].node_type == :block)
105
+ nodo[VM_INDEX_START].each_sexp do |vm|
87
106
 
107
+
108
+ subnode=vm.find_nodes(:call)
109
+ if (!subnode.empty?)
110
+ leaf=subnode.first.find_nodes(:lit)
111
+ if (!leaf.empty? && leaf.first.value === vm_name.to_sym)
112
+
113
+ nodo[VM_INDEX_START].delete(vm)
114
+ save
115
+
116
+ return true
117
+ end
118
+ end
119
+
120
+ end
88
121
  end
122
+
123
+
89
124
  end
90
125
 
126
+
127
+
91
128
  raise RestException.new(404,"Virtual Machine #{vm_name} not found")
92
129
 
93
130
 
@@ -95,17 +132,18 @@ module Vagrant
95
132
 
96
133
 
97
134
  def get_vm_names
98
-
99
- raise RestException.new(406,"No virtual machine configured") if @config_sexp[VM_INDEX_START].nil?
135
+
136
+ index=get_start_index
137
+ raise RestException.new(406,"No virtual machine configured") if @config_sexp[index].nil?
100
138
 
101
139
  names = []
102
- if @config_sexp[VM_INDEX_START].node_type==:block
140
+ if @config_sexp[index].node_type==:block
103
141
  #Entorno con una maquina configurada fuera de bloque
104
- if (@config_sexp[VM_INDEX_START].find_nodes(:iter).empty?)
142
+ if (@config_sexp[index].find_nodes(:iter).empty?)
105
143
  names.push(:default)
106
144
  else
107
145
  #Entorno multi vm
108
- @config_sexp[VM_INDEX_START].each_sexp do |vm|
146
+ @config_sexp[index].each_sexp do |vm|
109
147
  vm.find_nodes(:call).first.find_nodes(:lit).each do |node|
110
148
  names.push(node.value)
111
149
  end
@@ -117,7 +155,7 @@ module Vagrant
117
155
  #una maquina virtual configurada. En este caso
118
156
  #@config_sexp[VM_INDEX_START] contiene la definicion
119
157
  #de la maquina directamente
120
- node=@config_sexp[VM_INDEX_START].find_nodes(:call).first.find_node(:lit)
158
+ node=@config_sexp[index].find_nodes(:call).first.find_node(:lit)
121
159
  names.push(node.value)
122
160
 
123
161
  end
@@ -129,6 +167,7 @@ module Vagrant
129
167
  #FIXME REVISAR PORQUE CUANDO QUEDA UNA ÚNICA máquina en un entorno
130
168
  #multi vm el fichero cambia
131
169
  def rename_vm(old_name,new_name)
170
+
132
171
  machines = extract_vms_sexp
133
172
 
134
173
  machines.each do |machine|
@@ -139,18 +178,40 @@ module Vagrant
139
178
 
140
179
  end
141
180
 
142
- def insert_vms_sexp(vms_sexp)
181
+ def insert_vms_sexp(vms_sexp)
182
+
143
183
  raise RestException.new(406,"Invalid configuration file supplied") if vms_sexp.nil? || vms_sexp.empty?
184
+ index=VM_INDEX_START
144
185
 
145
- if !@config_sexp[VM_INDEX_START].nil?
186
+
187
+
188
+ if @config_sexp[0]==:iter
189
+ block=@config_sexp
190
+ else
191
+ gindex=0
192
+ block=nil
193
+ @config_sexp.each_sexp do |conf|
194
+ gindex=gindex+1
195
+ if (!conf.nil? && conf.node_type == :iter)
196
+ block = @config_sexp[gindex]
197
+ end
198
+
199
+ end
200
+ end
201
+
202
+
203
+
204
+
205
+
206
+ if !block[VM_INDEX_START].nil?
146
207
  # If @config_sexp[VM_INDEX_START] isn't nil could mean three things:
147
- # -- There is machine configure in with a default style
208
+ # -- There is a machine configured with a default style
148
209
  # -- There are some machines inserted inside a block
149
- # -- There is only one machine and it is stored at @config_sexp[VM_INDEX_START]
150
- if @config_sexp[VM_INDEX_START].node_type==:block
151
- # If node is a block we could have the first two options
152
- if (@config_sexp[VM_INDEX_START].find_nodes(:iter).empty?)
153
- # This case match the first option, so the steps to perdorm are the following:
210
+ # -- There is only one machine and it is stored at block[VM_INDEX_START]
211
+ if block[VM_INDEX_START].node_type==:block
212
+ # If node is a block it could be the first two options
213
+ if (block[VM_INDEX_START].find_nodes(:iter).empty?)
214
+ # This case match the first option, so the steps to perform are the following:
154
215
  # -- Create a block node
155
216
  new_block = s(:block)
156
217
  # -- Convert the current machine to a block style and insert into the block
@@ -159,26 +220,50 @@ module Vagrant
159
220
  new_block.add(vms_sexp)
160
221
 
161
222
 
162
- @config_sexp.delete_at(VM_INDEX_START)
223
+ @config_sexp.delete_at(index)
163
224
 
164
- @config_sexp[VM_INDEX_START] = new_block
225
+ @config_sexp[index] = new_block
165
226
 
166
227
 
167
- else
228
+ else
168
229
  # This case means that there are some machines inserted inside a block
169
230
  # we only have to add thems
170
231
  #FIXME FALTA COMPREOBAR SI HACE FALTA RENOMBRAR
171
- @config_sexp[VM_INDEX_START].add(vms_sexp)
232
+ if @config_sexp[0]==:iter
233
+ @config_sexp[VM_INDEX_START].add(vms_sexp)
234
+ elsif @config_sexp[0]==:block
235
+ @config_sexp[gindex][VM_INDEX_START].add(vms_sexp)
236
+ end
237
+
172
238
  end
173
239
 
174
- else
175
- #There is only one machine stored, we can store it at @config_sexp[VM_INDEX_START]
240
+ else
241
+
242
+
243
+ #There is only one machine stored, we can store it at @config_sexp[index]
176
244
  new_block = s(:block)
177
- new_block.add(extract_vms_sexp)
178
- new_block.add(vms_sexp)
179
- @config_sexp.delete_at(VM_INDEX_START)
180
- @config_sexp[VM_INDEX_START] = new_block
245
+
246
+ result = extract_vms_sexp
181
247
 
248
+
249
+ if (@config_sexp[0]==:block)
250
+ #SI el elemento 0 es un bloque
251
+
252
+ new_block.add(result)
253
+ new_block.add(vms_sexp)
254
+
255
+
256
+ block.delete_at(VM_INDEX_START)
257
+ @config_sexp[gindex][VM_INDEX_START]=new_block
258
+
259
+ else
260
+ new_block.add(extract_vms_sexp)
261
+ new_block.add(vms_sexp)
262
+ @config_sexp.delete_at(index)
263
+
264
+
265
+ @config_sexp[index] = new_block
266
+ end
182
267
 
183
268
  end
184
269
  else
@@ -195,9 +280,9 @@ module Vagrant
195
280
  if (vms_sexp.length>1)
196
281
  new_block = s(:block)
197
282
  new_block.add(vms_sexp)
198
- @config_sexp[VM_INDEX_START] = new_block
283
+ @config_sexp[index] = new_block
199
284
  else
200
- @config_sexp[VM_INDEX_START] = vms_sexp.first
285
+ @config_sexp[index] = vms_sexp.first
201
286
  end
202
287
 
203
288
  end
@@ -210,7 +295,7 @@ module Vagrant
210
295
  end
211
296
 
212
297
  #Ruby2Ruby modify the parameter, so a deep cloned copy is passed
213
- def config_content
298
+ def config_content
214
299
  begin
215
300
  Ruby2Ruby.new.process(@config_sexp.dclone)
216
301
  rescue => e
@@ -218,7 +303,7 @@ module Vagrant
218
303
  end
219
304
  end
220
305
 
221
- def save
306
+ def save
222
307
  #Processing the content first. If there is any error
223
308
  #the file wont'be modified
224
309
  content= config_content
@@ -231,24 +316,31 @@ module Vagrant
231
316
  private
232
317
  VM_INDEX_START = 3
233
318
  DEFAULT_BLOCK_NAME = :default_config
319
+ DEFAULT_MACHINE = "default"
234
320
 
235
321
 
236
322
 
237
- def rename_block_to_default(exp)
323
+ def rename_block_to_default(exp)
238
324
  exp.each_sexp do |node|
239
- rename_block_to_default(node)
240
- # pp node.node_type
325
+ rename_block_to_default(node)
241
326
  if (node.node_type == :lvar)
242
327
  node[1]=DEFAULT_BLOCK_NAME
243
328
  end
244
329
  end
245
330
  end
246
331
 
332
+ def get_start_index
333
+
334
+ if (@config_sexp[0]==:iter)
335
+ return VM_INDEX_START
336
+ else
337
+ return VM_INDEX_START-1
338
+ end
339
+ end
340
+
247
341
  #Process a default virtual machine and produces
248
342
  #a block with the vm configuration
249
- def default_to_block
250
-
251
-
343
+ def default_to_block
252
344
  #Getting the main block name
253
345
  mblock_name = @config_sexp[2].value.to_s
254
346
 
@@ -256,7 +348,7 @@ module Vagrant
256
348
 
257
349
  result= RubyParser.new.parse(
258
350
  "Vagrant.configure('2') do |#{mblock_name}|"+
259
- "#{mblock_name}.vm.define(:default) do |#{DEFAULT_BLOCK_NAME.to_s}|\n"+
351
+ "#{mblock_name}.vm.define(:#{DEFAULT_MACHINE}) do |#{DEFAULT_BLOCK_NAME.to_s}|\n"+
260
352
  Ruby2Ruby.new.process(@config_sexp[VM_INDEX_START].dclone)+
261
353
  "end\nend"
262
354
  )
@@ -266,15 +358,104 @@ module Vagrant
266
358
  return [result[VM_INDEX_START]]
267
359
  end
268
360
 
269
- def convert_default_to_block
270
- if (@config_sexp[VM_INDEX_START].node_type==:block &&
271
- @config_sexp[VM_INDEX_START].find_nodes(:iter).empty?)
272
- new_block = s(:block)
273
- new_block.add(default_to_block)
361
+
362
+ def convert_default_to_block
363
+
364
+ if (@config_sexp[0]==:iter)
365
+
366
+
367
+ #Caso en el que el fichero no tiene ningún contenido, tan solo el config
368
+ if (!@config_sexp[VM_INDEX_START].nil?)
369
+ if (@config_sexp[VM_INDEX_START].node_type==:attrasgn)
370
+ #Caso en el que el fichero es por defecto y los atributos están fuera
371
+ #de un bloque
372
+ new_block = s(:block)
373
+ new_block.add(default_to_block)
374
+
375
+
376
+
377
+ @config_sexp.delete_at(VM_INDEX_START)
378
+ @config_sexp[VM_INDEX_START] = new_block
379
+
380
+ elsif (@config_sexp[VM_INDEX_START].node_type==:block &&
381
+ @config_sexp[VM_INDEX_START].find_nodes(:iter).empty?)
382
+
383
+ new_block = s(:block)
384
+ new_block.add(default_to_block)
385
+
386
+ @config_sexp.delete_at(VM_INDEX_START)
387
+ @config_sexp[VM_INDEX_START] = new_block
388
+
389
+
390
+ end
391
+ end
392
+
393
+ else
394
+ #Busco donde comienza la declaración del bloque principal
395
+
396
+ gindex=0
397
+ block=nil
398
+ @config_sexp.each_sexp do |conf|
399
+ gindex=gindex+1
400
+ if (conf.node_type == :iter)
401
+ block = @config_sexp[gindex]
402
+ end
403
+
404
+ end
405
+
406
+
407
+
408
+ if (!block.nil?)
409
+
410
+ if (block[VM_INDEX_START].nil?)
411
+ mblock_name = block[2][1].to_s
412
+ block= RubyParser.new.parse(
413
+ "Vagrant.configure('2') do |#{mblock_name}|"+
414
+ "#{mblock_name}.vm.define(:#{DEFAULT_MACHINE}) do |#{DEFAULT_BLOCK_NAME.to_s}|\n"+
415
+ "end\nend"
416
+ )
417
+
418
+ @config_sexp[gindex] = block
419
+
420
+ elsif (!block[VM_INDEX_START].nil? && block[VM_INDEX_START].node_type==:attrasgn)
421
+
422
+
423
+ mblock_name = block[2][1].to_s
274
424
 
275
- @config_sexp.delete_at(VM_INDEX_START)
276
- @config_sexp[VM_INDEX_START] = new_block
425
+
426
+ rename_block_to_default(block[VM_INDEX_START])
427
+
428
+ block= RubyParser.new.parse(
429
+ "Vagrant.configure('2') do |#{mblock_name}|"+
430
+ "#{mblock_name}.vm.define(:#{DEFAULT_MACHINE}) do |#{DEFAULT_BLOCK_NAME.to_s}|\n"+
431
+ Ruby2Ruby.new.process(block[VM_INDEX_START].dclone)+
432
+ "end\nend"
433
+ )
434
+
435
+
436
+
437
+
438
+
439
+ @config_sexp[gindex]=block
440
+
441
+
442
+ elsif (block[VM_INDEX_START].node_type==:block &&
443
+ block[VM_INDEX_START].find_nodes(:iter).empty?)
444
+
445
+
446
+ new_block = s(:block)
447
+ new_block.add(default_to_block)
448
+
449
+ block.delete_at(VM_INDEX_START)
450
+ block[VM_INDEX_START] = new_block
451
+
452
+
453
+ end
454
+
455
+ end
456
+
277
457
  end
458
+
278
459
  end
279
460
 
280
461
  end