lorj 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.gitreview +4 -0
  4. data/Gemfile +25 -0
  5. data/Gemfile.lock +34 -0
  6. data/LICENSE.txt +14 -0
  7. data/README.md +652 -0
  8. data/Rakefile +24 -0
  9. data/bin/cloud_test.rb +81 -0
  10. data/example/students_1/process/Students.rb +20 -0
  11. data/example/students_1/students.rb +16 -0
  12. data/example/students_2/process/Students.rb +27 -0
  13. data/example/students_2/students.rb +36 -0
  14. data/example/students_3/controller/yaml_students.rb +94 -0
  15. data/example/students_3/controller/yaml_students_controller.rb +123 -0
  16. data/example/students_3/process/students.rb +118 -0
  17. data/example/students_3/students.rb +93 -0
  18. data/example/students_4/controller/yaml_students.rb +82 -0
  19. data/example/students_4/controller/yaml_students_controller.rb +141 -0
  20. data/example/students_4/process/students.rb +112 -0
  21. data/example/students_4/students.rb +103 -0
  22. data/example/yaml_students/students.rb +78 -0
  23. data/example/yaml_students/yaml_students.rb +115 -0
  24. data/lib/concept.md +111 -0
  25. data/lib/core/core.rb +723 -0
  26. data/lib/core/definition.rb +505 -0
  27. data/lib/core/definition_internal.rb +338 -0
  28. data/lib/core/lorj-basecontroller.rb +90 -0
  29. data/lib/core/lorj-basedefinition.rb +1079 -0
  30. data/lib/core/lorj-baseprocess.rb +231 -0
  31. data/lib/core/lorj-data.rb +567 -0
  32. data/lib/core/lorj-keypath.rb +115 -0
  33. data/lib/core_process/CloudProcess.rb +334 -0
  34. data/lib/core_process/global_process.rb +406 -0
  35. data/lib/core_process/network_process.rb +603 -0
  36. data/lib/img/.directory +4 -0
  37. data/lib/img/account_data_access.png +0 -0
  38. data/lib/img/config_data_access.png +0 -0
  39. data/lib/img/forj-lib-concept.png +0 -0
  40. data/lib/lorj/version.rb +3 -0
  41. data/lib/lorj.rb +51 -0
  42. data/lib/prc-account.rb +339 -0
  43. data/lib/prc-config.rb +1023 -0
  44. data/lib/prc-logging.rb +183 -0
  45. data/lib/prc.rb +108 -0
  46. data/lib/providers/hpcloud/Hpcloud.rb +419 -0
  47. data/lib/providers/hpcloud/compute.rb +108 -0
  48. data/lib/providers/hpcloud/network.rb +117 -0
  49. data/lib/providers/hpcloud/security_groups.rb +67 -0
  50. data/lib/providers/mock/Mock.rb +141 -0
  51. data/lib/providers/openstack/Openstack.rb +47 -0
  52. data/lib/providers/templates/compute.rb +42 -0
  53. data/lib/providers/templates/core.rb +61 -0
  54. data/lib/providers/templates/network.rb +33 -0
  55. data/lorj-spec/defaults.yaml +26 -0
  56. data/lorj.gemspec +39 -0
  57. data/spec/forj-account_spec.rb +75 -0
  58. data/spec/forj-config_spec.rb +196 -0
  59. metadata +164 -0
@@ -0,0 +1,603 @@
1
+ # encoding: UTF-8
2
+
3
+ # (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+ # This file describe generic process to create/query/get/delete Cloud objects.
18
+ # forj_* function are handler, predefined by cloud_data_pref.rb
19
+ # The process functions communicates with config, object or controler(provider controler)
20
+ #
21
+ # 'config' is the configuration system which implements:
22
+ # - get(key): Get the value to the associated key
23
+ # [key] is the 'set' equivalent
24
+ # - set(key, value): Set a value to a key.
25
+ # [key] = value Is the 'set' equivalent
26
+ #
27
+ # 'object' contains Object definition, Object manipulation. It implements:
28
+ # - query_map(sCloudObj, sQuery): transform Forj Object query request to
29
+ # a Provider controler query request
30
+ # The result of this function is usually sent to
31
+ # the controler query function.
32
+ #
33
+ # - get_attr(oObject, key): Read the object key from the object.
34
+ #
35
+ # Providers can redefine any kind of handler if needed.
36
+
37
+ # ---------------------------------------------------------------------------
38
+ # Network/Subnetwork Management
39
+ # ---------------------------------------------------------------------------
40
+ class CloudProcess < BaseProcess
41
+ # Process Query handler
42
+ def forj_query_network(sCloudObj, sQuery, hParams)
43
+
44
+
45
+ # Call Provider query function
46
+ controler.query(sObjectType, sControlerQuery)
47
+ end
48
+
49
+ # Process Create handler
50
+ def forj_get_or_create_network(sCloudObj, hParams)
51
+
52
+ Logging.state("Searching for network '%s'" % [hParams[:network_name]])
53
+ networks = find_network(sCloudObj, hParams)
54
+ if networks.length == 0
55
+ network = create_network(sCloudObj, hParams)
56
+ else
57
+ network = networks[0]
58
+ end
59
+ register(network)
60
+
61
+ # Attaching if missing the subnet.
62
+ # Creates an object subnet, attached to the network.
63
+ if not hParams[:subnetwork_name]
64
+ hParams[:subnetwork_name] = 'sub-' + hParams[:network_name]
65
+ config[:subnetwork_name] = hParams[:subnetwork_name]
66
+ end
67
+
68
+ object.Create(:subnetwork)
69
+
70
+ network
71
+
72
+ end
73
+
74
+ # Process Delete handler
75
+ def forj_delete_network(sCloudObj, hParams)
76
+ begin
77
+ oProvider.delete(sCloudObj, hParams)
78
+ rescue => e
79
+ Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")])
80
+ end
81
+ end
82
+
83
+ def forj_get_network(sCloudObj, sID, hParams)
84
+ begin
85
+ oProvider.get(sCloudObj, sID, hParams)
86
+ rescue => e
87
+ Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")])
88
+ end
89
+ end
90
+
91
+ # Network Process internal functions #
92
+ #------------------------------------#
93
+
94
+ # Network creation
95
+ # It returns:
96
+ # nil or Provider Object
97
+ def create_network(sCloudObj, hParams)
98
+ name = hParams[:network_name]
99
+ begin
100
+ Logging.state("Creating network '%s'" % [name])
101
+ network = controler.create(sCloudObj)
102
+ Logging.info("Network '%s' created" % [network[:name]])
103
+ rescue => e
104
+ Logging.fatal(1, "Unable to create network '%s'" % [name, e])
105
+ end
106
+ network
107
+ end
108
+
109
+ # Search for a network from his name.
110
+ # Name may be unique in project context, but not in the cloud system
111
+ # It returns:
112
+ # nil or Provider Object
113
+ def find_network(sCloudObj, hParams)
114
+ begin
115
+ # retrieve the Provider collection object.
116
+ sQuery = {:name => hParams[:network_name]}
117
+ oList = controler.query(sCloudObj, sQuery)
118
+ query_single(sCloudObj, oList, sQuery, hParams[:network_name])
119
+ rescue => e
120
+ Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")])
121
+ end
122
+ end
123
+
124
+ def forj_get_or_create_subnetwork(sCloudObj, hParams)
125
+
126
+ Logging.state("Searching for sub-network attached to network '%s'" % [hParams[:network, :name]])
127
+ #######################
128
+ begin
129
+ sQuery = { :network_id => hParams[:network, :id] }
130
+ subnets = controler.query(:subnetwork, sQuery)
131
+ rescue => e
132
+ Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")])
133
+ end
134
+ if subnets
135
+ case subnets.length()
136
+ when 0
137
+ Logging.info("No subnet found from '%s' network" % [hParams[:network, :name]])
138
+ subnet = ForjLib::Data.new
139
+ when 1
140
+ Logging.info("Found '%s' subnet from '%s' network" % [subnets[0, :name], hParams[:network, :name]])
141
+ subnet = subnets[0]
142
+ else
143
+ Logging.warning("Several subnet was found on '%s'. Choosing the first one = '%s'" % [hParams[:network, :name], subnets[0, :name]])
144
+ subnet = subnets[0]
145
+ end
146
+ end
147
+ if not subnet or subnets.length == 0
148
+ # Create the subnet
149
+ begin
150
+ subnet = create_subnet(sCloudObj, hParams)
151
+ rescue => e
152
+ Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")])
153
+ end
154
+ end
155
+ register(subnet)
156
+ subnet
157
+ end
158
+
159
+ def create_subnet(sCloudObj, hParams)
160
+ name = hParams[:subnetwork_name]
161
+ Logging.state("Creating subnet '%s'" % [name])
162
+ begin
163
+ subnet = controler.create(sCloudObj)
164
+ Logging.info("Subnet '%s' created." % [subnet[:name]])
165
+ rescue => e
166
+ Logging.fatal(1, "Unable to create '%s' subnet." % name, e)
167
+ end
168
+ subnet
169
+ end
170
+
171
+ def delete_subnet()
172
+
173
+ oNetworkConnect = get_cloudObj(:network_connection)
174
+ oSubNetwork = get_cloudObj(:subnetwork)
175
+
176
+ Logging.state("Deleting subnet '%s'" % [oSubNetwork.name])
177
+ begin
178
+ provider_delete_subnetwork(oNetworkConnect, oSubNetwork)
179
+ oNetworkConnect.subnets.get(oSubNetwork.id).destroy
180
+ rescue => e
181
+ Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")])
182
+ end
183
+ end
184
+ end
185
+
186
+ # ---------------------------------------------------------------------------
187
+ # Router management
188
+ # ---------------------------------------------------------------------------
189
+ class CloudProcess
190
+ # Process Create handler
191
+ def forj_get_or_create_router(sCloudObj, hParams)
192
+ oSubNetwork = hParams[:subnetwork]
193
+
194
+ if not hParams[:router_name]
195
+ config[:router_name] = 'router-%s' % hParams[:network, :name]
196
+ hParams[:router_name] = config[:router_name]
197
+ end
198
+
199
+ router_name = hParams[:router_name]
200
+ router_port = get_router_interface_attached(:port, hParams)
201
+
202
+ if not router_port or router_port.empty?
203
+ # Trying to get router
204
+ router = get_router(router_name)
205
+ router = create_router(router_name) if not router or router.empty?
206
+ create_router_interface(oSubNetwork, router) if router and not router.empty?
207
+ else
208
+ sQuery = {:id => get_data(router_port, :device_id)}
209
+ routers = controler.query(:router, sQuery)
210
+ case routers.length()
211
+ when 1
212
+ Logging.info("Found router '%s' attached to the network '%s'." % [
213
+ routers[0, :name],
214
+ get_data(:network, :name)
215
+ ])
216
+ router = routers[0]
217
+ else
218
+ Logging.warning("Unable to find the router id '%s'" % [ get_data(router_port, :device_id) ])
219
+ router = ForjLib::Data.new
220
+
221
+ end
222
+ end
223
+ router
224
+ end
225
+
226
+ def forj_update_router(sCloudObj, hParams)
227
+ controler.update(sCloudObj)
228
+ ################################
229
+ #routers[0].external_gateway_info = { 'network_id' => external_network.id }
230
+ #routers[0].save
231
+
232
+ end
233
+
234
+ # Router Process internal functions #
235
+ #------------------------------------#
236
+
237
+ def get_router(name)
238
+ Logging.state("Searching for router '%s'" % [name] )
239
+ begin
240
+ routers = controler.query(:router, {:name => name})
241
+ case routers.length()
242
+ when 1
243
+ routers[0]
244
+ else
245
+ Logging.info("Router '%s' not found." % [ name ] )
246
+ ForjLib::Data.new
247
+ end
248
+ rescue => e
249
+ Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")])
250
+ end
251
+ end
252
+
253
+ def create_router(router_name, oExternalNetwork = nil)
254
+ begin
255
+ if oExternalNetwork
256
+ sExtNet = get_data(oExternalNetwork, :name)
257
+ Logging.state("Creating router '%s' attached to the external Network '%s'" % [router_name, sExtNet])
258
+ config[:external_gateway_id] = get_data(oExternalNetwork, :id)
259
+ else
260
+ Logging.state("Creating router '%s' without external Network" % [router_name])
261
+ end
262
+
263
+ router = controler.create(:router)
264
+ if oExternalNetwork
265
+ Logging.info("Router '%s' created and attached to the external Network '%s'." % [router_name, sExtNet])
266
+ else
267
+ Logging.info("Router '%s' created without external Network." % [router_name])
268
+ end
269
+ rescue => e
270
+ raise ForjError.new(), "Unable to create '%s' router\n%s" % [router_name, e.message]
271
+ end
272
+ router
273
+ end
274
+
275
+ def delete_router(oNetworkConnect, oRouter)
276
+ Logging.state("Deleting router '%s'" % [router.name])
277
+ begin
278
+ #################
279
+ provider_delete_router(oNetworkConnect, oRouter)
280
+ # oNetworkConnect.routers.get(router.id).destroy
281
+ rescue => e
282
+ Logging.error("Unable to delete '%s' router ID" % router_id, e)
283
+ end
284
+ end
285
+
286
+ # TODO: Move router interface management to hpcloud controller.
287
+ # Router interface to connect to the network
288
+ def create_router_interface(oSubnet, oRouter)
289
+
290
+ Logging.state("Attaching subnet '%s' to router '%s'" % [oSubnet[:name], oRouter[:name]])
291
+ begin
292
+ controler.create(:router_interface)
293
+
294
+ #################
295
+ #provider_add_interface()
296
+ # oRouter.add_interface(oSubnet.id, nil)
297
+ rescue => e
298
+ Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")])
299
+ end
300
+ end
301
+
302
+ def delete_router_interface(oSubnet, oRouter)
303
+ Logging.state("Removing subnet '%s' from router '%s'" % [oSubnet.name, oRouter.name])
304
+ subnet_id = oSubnet.id
305
+ begin
306
+ #################
307
+ oRouter.remove_interface(subnet_id)
308
+ rescue => e
309
+ Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")])
310
+ end
311
+ end
312
+
313
+ def get_router_interface_attached(sCloudObj, hParams)
314
+
315
+ oNetwork = hParams[:network]
316
+ Logging.state("Searching for router port attached to the network '%s'" % [hParams[:network, :name]] )
317
+ begin
318
+ # Searching for router port attached
319
+ #################
320
+ sQuery = {:network_id => hParams[:network, :id], :device_owner => 'network:router_interface'}
321
+
322
+ ports = controler.query(sCloudObj, sQuery)
323
+ case ports.length()
324
+ when 0
325
+ Logging.info("No router port attached to the network '%s'" % [hParams[:network, :name] ])
326
+ ForjLib::Data.new
327
+ else
328
+ Logging.info("Found a router port attached to the network '%s' " % [hParams[:network, :name] ] )
329
+ ports[0]
330
+ end
331
+ rescue => e
332
+ Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")])
333
+ end
334
+ end
335
+
336
+ # Gateway management
337
+ def get_gateway(oNetworkConnect, name)
338
+
339
+ return nil if not name or not oNetworkConnect
340
+
341
+ Logging.state("Getting gateway '%s'" % [name])
342
+ networks = oNetworkConnect
343
+ begin
344
+ netty = networks.get(name)
345
+ rescue => e
346
+ Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")])
347
+ end
348
+ Logging.state("Found gateway '%s'" % [name]) if netty
349
+ Logging.state("Unable to find gateway '%s'" % [name]) if not netty
350
+ return netty
351
+ end
352
+
353
+ def query_external_network(hParams)
354
+ Logging.state("Identifying External gateway")
355
+ begin
356
+ # Searching for router port attached
357
+ #################
358
+ sQuery = { :router_external => true }
359
+ networks = controler.query(:network, sQuery)
360
+ case networks.length()
361
+ when 0
362
+ Logging.info("No external network")
363
+ ForjLib::Data.new
364
+ when 1
365
+ Logging.info("Found external network '%s'." % [networks[0, :name] ] )
366
+ networks[0]
367
+ else
368
+ Logging.warn("Found several external networks. Selecting the first one '%s'" % [networks[0, :name]] )
369
+ networks[0]
370
+ end
371
+ rescue => e
372
+ Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")])
373
+ end
374
+ end
375
+
376
+ end
377
+
378
+ # ---------------------------------------------------------------------------
379
+ # SecurityGroups management
380
+ # ---------------------------------------------------------------------------
381
+
382
+ class CloudProcess
383
+
384
+ # Process Create handler
385
+ def forj_get_or_create_sg(sCloudObj, hParams)
386
+ sSGName = hParams[:security_group]
387
+ Logging.state("Searching for security group '%s'" % [sSGName] )
388
+
389
+ security_group = forj_query_sg(sCloudObj, {:name => sSGName}, hParams)
390
+ security_group = create_security_group(sCloudObj, hParams) if not security_group
391
+ register(security_group)
392
+
393
+ Logging.info('Configuring Security Group \'%s\'' % [sSGName])
394
+ ports = config.get(:ports)
395
+
396
+ ports.each do |port|
397
+ port = port.to_s if port.class != String
398
+ if not (/^\d+(-\d+)?$/ =~ port)
399
+ Logging.error("Port '%s' is not valid. Must be <Port> or <PortMin>-<PortMax>" % [port])
400
+ else
401
+ mPortFound = /^(\d+)(-(\d+))?$/.match(port)
402
+ portmin = mPortFound[1]
403
+ portmax = (mPortFound[3]) ? (mPortFound[3]) : (portmin)
404
+ # Need to set runtime data to get or if missing create the required rule.
405
+ config[:dir] = :IN
406
+ config[:proto] = 'tcp'
407
+ config[:port_min] = portmin.to_i
408
+ config[:port_max] = portmax.to_i
409
+ config[:addr_map] = '0.0.0.0/0'
410
+
411
+ object.Create(:rule)
412
+ end
413
+ end
414
+ security_group
415
+ end
416
+
417
+ # Process Delete handler
418
+ def forj_delete_sg(oFC, security_group)
419
+ oSSLError=SSLErrorMgt.new
420
+ begin
421
+ sec_group = get_security_group(oFC, security_group)
422
+ oFC.oNetwork.security_groups.get(sec_group.id).destroy
423
+ rescue => e
424
+ if not oSSLError.ErrorDetected(e.message,e.backtrace, e)
425
+ retry
426
+ end
427
+ end
428
+ end
429
+
430
+ # Process Query handler
431
+ def forj_query_sg(sCloudObj, sQuery, hParams)
432
+ oSSLError=SSLErrorMgt.new
433
+
434
+ begin
435
+ sgroups = controler.query(sCloudObj, sQuery)
436
+ rescue => e
437
+ if not oSSLError.ErrorDetected(e.message,e.backtrace, e)
438
+ retry
439
+ end
440
+ Logging.fatal(1, "Unable to get list of security groups.", e)
441
+ end
442
+ case sgroups.length()
443
+ when 0
444
+ Logging.info("No security group '%s' found" % [ hParams[:security_group] ] )
445
+ nil
446
+ when 1
447
+ Logging.info("Found security group '%s'" % [sgroups[0, :name]])
448
+ sgroups[0]
449
+ end
450
+ end
451
+
452
+ # SecurityGroups Process internal functions #
453
+ #-------------------------------------------#
454
+ def create_security_group(sCloudObj, hParams)
455
+ Logging.state("Creating security group '%s'" % hParams[:security_group])
456
+ begin
457
+ sg = controler.create(sCloudObj)
458
+ Logging.info("Security group '%s' created." % sg[:name])
459
+ rescue => e
460
+ Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")])
461
+ end
462
+ sg
463
+ end
464
+
465
+ # Rules handler #
466
+ #---------------#
467
+
468
+ # Process Delete handler
469
+ def forj_delete_security_group_rule(sCloudObj, hParams)
470
+
471
+ oSSLError=SSLErrorMgt.new
472
+ begin
473
+ controler.delete(sCloudObj)
474
+ rescue => e
475
+ if not oSSLError.ErrorDetected(e.message,e.backtrace, e)
476
+ retry
477
+ end
478
+ end
479
+ end
480
+
481
+ # Process Query handler
482
+ def forj_query_rule(sCloudObj, sQuery, hParams)
483
+ sRule = '%s %s:%s - %s to %s' % [ hParams[:dir], hParams[:rule_proto], hParams[:port_min], hParams[:port_max], hParams[:addr_map] ]
484
+ Logging.state("Searching for rule '%s'" % [ sRule ])
485
+ oSSLError = SSLErrorMgt.new
486
+ begin
487
+ sInfo = {
488
+ :items => [:dir, :rule_proto, :port_min, :port_max, :addr_map],
489
+ :items_form => '%s %s:%s - %s to %s'
490
+ }
491
+ oList = controler.query(sCloudObj, sQuery)
492
+ query_single(sCloudObj, oList, sQuery, sRule, sInfo)
493
+ rescue => e
494
+ if not oSSLError.ErrorDetected(e.message,e.backtrace, e)
495
+ retry
496
+ end
497
+ end
498
+ end
499
+
500
+ # Process Create handler
501
+ def forj_get_or_create_rule(sCloudObj, hParams)
502
+
503
+ sQuery = {
504
+ :dir => hParams[:dir],
505
+ :proto => hParams[:proto],
506
+ :port_min => hParams[:port_min],
507
+ :port_max => hParams[:port_max],
508
+ :addr_map => hParams[:addr_map],
509
+ :sg_id => hParams[:sg_id]
510
+ }
511
+
512
+ rules = forj_query_rule(sCloudObj, sQuery, hParams)
513
+ if rules.length == 0
514
+ create_rule(sCloudObj, hParams)
515
+ else
516
+ rules[0]
517
+ end
518
+ end
519
+
520
+ # Rules internal #
521
+ #----------------#
522
+ def create_rule(sCloudObj, hParams)
523
+
524
+ sRule = '%s %s:%s - %s to %s' % [ hParams[:dir], hParams[:rule_proto], hParams[:port_min], hParams[:port_max], hParams[:addr_map] ]
525
+ Logging.state("Creating rule '%s'" % [sRule])
526
+ oSSLError=SSLErrorMgt.new
527
+ begin
528
+ rule = controler.create(sCloudObj)
529
+ Logging.info("Rule '%s' created." % [sRule])
530
+ rescue StandardError => e
531
+ if not oSSLError.ErrorDetected(e.message,e.backtrace, e)
532
+ retry
533
+ end
534
+ Logging.error 'error creating the rule for port %s' % [sRule]
535
+ end
536
+ rule
537
+ end
538
+
539
+ end
540
+
541
+ # ---------------------------------------------------------------------------
542
+ # External network process attached to a network
543
+ # ---------------------------------------------------------------------------
544
+ class CloudProcess
545
+ def forj_get_or_create_ext_net(sCloudObj, hParams)
546
+
547
+ Logging.state("Checking router '%s' gateway" % hParams[:router, :name])
548
+
549
+ oRouter = hParams[:router]
550
+ sRouterName = hParams[:router, :name]
551
+ sNetworkId = hParams[:router, :gateway_network_id]
552
+ if sNetworkId
553
+ external_network = forj_query_external_network(sCloudObj, {:id => sNetworkId}, hParams)
554
+ Logging.info("Router '%s' is attached to the external gateway '%s'." % [ sRouterName, external_network[:name] ] )
555
+ else
556
+ Logging.info("Router '%s' needs to be attached to an external gateway." % [ sRouterName ] )
557
+ Logging.state("Attaching")
558
+ external_network = forj_query_external_network(:network, {}, hParams)
559
+ if not external_network.empty?
560
+ oRouter[:gateway_network_id] = external_network[:id]
561
+ forj_update_router(:router, hParams)
562
+ Logging.info("Router '%s' attached to the external network '%s'." % [ sRouterName, external_network[:name] ])
563
+ else
564
+ Logging.fatal(1, "Unable to attach router '%s' to an external gateway. Required for boxes to get internet access. " % [ get_data(:router, :name) ] )
565
+ end
566
+ end
567
+
568
+ # Need to keep the :network object as :external_network object type.
569
+ external_network.type = sCloudObj
570
+ external_network
571
+ end
572
+
573
+ def forj_query_external_network(sCloudObj, sQuery, hParams)
574
+ Logging.state("Identifying External gateway")
575
+ begin
576
+ # Searching for external network
577
+ networks = controler.query(:network, sQuery.merge({ :external => true }))
578
+
579
+ case networks.length()
580
+ when 0
581
+ Logging.info("No external network")
582
+ nil
583
+ when 1
584
+ Logging.info("Found external network '%s'." % [networks[0, :name] ])
585
+ networks[0]
586
+ else
587
+ Logging.warning("Found several external networks. Selecting the first one '%s'" % [networks[0, :name]])
588
+ networks[0]
589
+ end
590
+ rescue => e
591
+ Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")])
592
+ end
593
+ end
594
+
595
+ end
596
+
597
+ # ---------------------------------------------------------------------------
598
+ # Internet network process
599
+ # ---------------------------------------------------------------------------
600
+ class CloudProcess
601
+
602
+
603
+ end
@@ -0,0 +1,4 @@
1
+ [Dolphin]
2
+ PreviewsShown=true
3
+ Timestamp=2014,11,13,13,19,43
4
+ Version=3
Binary file
Binary file
Binary file
@@ -0,0 +1,3 @@
1
+ module Lorj
2
+ VERSION = "0.1.0"
3
+ end
data/lib/lorj.rb ADDED
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ #--
5
+ # (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #++
19
+
20
+
21
+
22
+ require "lorj/version"
23
+
24
+ # This is the lorj base library.
25
+
26
+ # To use it, add require 'lorj'
27
+
28
+ require 'prc.rb' # Load PrcLib Base module
29
+ require 'prc-logging.rb' # Load class PrcLib::Logging
30
+ require 'prc-config.rb' # Load class Lorj::Config
31
+ require 'prc-account.rb' # Load class Lorj::Account
32
+
33
+ require "core/core" # Lorj Core classes
34
+ require "core/lorj-data" # Lorj Lorj::Data object
35
+ require "core/lorj-basedefinition" # Lorj Lorj::BaseDefinition object
36
+ require "core/lorj-baseprocess" # Lorj Lorj::BaseProcess object
37
+ require "core/lorj-basecontroller" # Lorj Lorj::BaseController object
38
+ require "core/lorj-keypath" # Lorj Lorj::BaseDefinition object
39
+ require "core/definition" # Lorj Process definition
40
+ require "core/definition_internal" # Lorj internal functions
41
+
42
+ module Lorj
43
+ slib_forj = File.dirname(__FILE__)
44
+ $FORJ_LIB = File.expand_path(File.join(File.dirname(slib_forj),'lib'))
45
+
46
+
47
+ raise "$FORJ_LIB is missing. Please set it." if not $FORJ_LIB
48
+
49
+ $PROVIDERS_PATH = File.expand_path(File.join($FORJ_LIB, "providers"))
50
+ $CORE_PROCESS_PATH = File.join($FORJ_LIB, "core_process")
51
+ end