vagrant-node 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.
@@ -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