lorj 0.2.0 → 1.0.0

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.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +46 -0
  4. data/Gemfile +15 -15
  5. data/README.md +22 -17
  6. data/Rakefile +12 -2
  7. data/bin/cloud_test.rb +13 -65
  8. data/example/students_1/process/students.rb +39 -0
  9. data/example/students_1/students.rb +22 -5
  10. data/example/students_2/process/students.rb +48 -0
  11. data/example/students_2/students.rb +39 -16
  12. data/example/students_3/controller/yaml_students.rb +50 -43
  13. data/example/students_3/controller/yaml_students_controller.rb +100 -87
  14. data/example/students_3/process/students.rb +161 -97
  15. data/example/students_3/students.rb +85 -56
  16. data/example/yaml_students/students.rb +40 -40
  17. data/example/yaml_students/yaml_students.rb +103 -90
  18. data/lib/core/core.rb +356 -696
  19. data/lib/core/core_controller.rb +227 -0
  20. data/lib/core/core_internal.rb +339 -0
  21. data/lib/core/core_model.rb +328 -0
  22. data/lib/core/core_object_data.rb +330 -0
  23. data/lib/core/core_object_params.rb +230 -0
  24. data/lib/core/core_process.rb +391 -0
  25. data/lib/core/core_process_setup.rb +353 -0
  26. data/lib/core/core_setup_ask.rb +241 -0
  27. data/lib/core/core_setup_encrypt.rb +146 -0
  28. data/lib/core/core_setup_init.rb +229 -0
  29. data/lib/core/core_setup_list.rb +160 -0
  30. data/lib/core/definition.rb +647 -469
  31. data/lib/core/definition_internal.rb +264 -308
  32. data/lib/core/lorj_basecontroller.rb +95 -0
  33. data/lib/core/lorj_basedefinition.rb +307 -0
  34. data/lib/core/lorj_baseprocess.rb +265 -0
  35. data/lib/core/lorj_data.rb +583 -0
  36. data/lib/core/lorj_keypath.rb +119 -0
  37. data/lib/core_process/cloud/process/common.rb +63 -0
  38. data/lib/core_process/cloud/process/connection.rb +93 -0
  39. data/lib/core_process/cloud/process/external_network.rb +94 -0
  40. data/lib/core_process/cloud/process/flavor.rb +99 -0
  41. data/lib/core_process/cloud/process/images.rb +87 -0
  42. data/lib/core_process/cloud/process/internet_network.rb +34 -0
  43. data/lib/core_process/cloud/process/internet_server.rb +30 -0
  44. data/lib/core_process/cloud/process/keypairs.rb +276 -0
  45. data/lib/core_process/cloud/process/network.rb +108 -0
  46. data/lib/core_process/cloud/process/public_ip.rb +100 -0
  47. data/lib/core_process/cloud/process/router.rb +260 -0
  48. data/lib/core_process/cloud/process/rules.rb +120 -0
  49. data/lib/core_process/cloud/process/security_groups.rb +121 -0
  50. data/lib/core_process/cloud/process/server.rb +127 -0
  51. data/lib/core_process/cloud/process/server_log.rb +35 -0
  52. data/lib/core_process/cloud/process/subnetwork.rb +108 -0
  53. data/lib/core_process/cloud_process.rb +30 -0
  54. data/lib/logging.rb +298 -0
  55. data/lib/lorj/version.rb +18 -1
  56. data/lib/lorj.rb +58 -18
  57. data/lib/lorj_account.rb +556 -0
  58. data/lib/lorj_config.rb +468 -0
  59. data/lib/lorj_defaults.rb +278 -0
  60. data/lib/prc.rb +136 -104
  61. data/lib/prc_base_config.rb +285 -0
  62. data/lib/prc_core_config.rb +878 -0
  63. data/lib/prc_section_config.rb +57 -0
  64. data/lib/providers/hpcloud/compute.rb +81 -93
  65. data/lib/providers/hpcloud/hpcloud.rb +462 -0
  66. data/lib/providers/hpcloud/network.rb +96 -98
  67. data/lib/providers/hpcloud/security_groups.rb +41 -40
  68. data/lib/providers/mock/mock.rb +144 -0
  69. data/lib/providers/openstack/openstack.rb +45 -0
  70. data/lib/providers/templates/compute.rb +21 -23
  71. data/lib/providers/templates/mycloud.rb +72 -0
  72. data/lib/providers/templates/network.rb +11 -12
  73. data/lib/rh.rb +339 -0
  74. data/lorj-spec/defaults.yaml +4 -0
  75. data/lorj.gemspec +6 -0
  76. data/spec/00_lorj_log_spec.rb +53 -0
  77. data/spec/01_hash_rh_spec.rb +243 -0
  78. data/spec/02_prc_base_config_spec.rb +216 -0
  79. data/spec/04_prc_core_config_spec.rb +83 -0
  80. data/spec/11_lorj_config_spec.rb +263 -0
  81. data/spec/12_lorj_account_spec.rb +181 -0
  82. metadata +76 -28
  83. data/Gemfile.lock +0 -37
  84. data/example/students_1/process/Students.rb +0 -20
  85. data/example/students_2/process/Students.rb +0 -27
  86. data/example/students_4/controller/yaml_students.rb +0 -82
  87. data/example/students_4/controller/yaml_students_controller.rb +0 -141
  88. data/example/students_4/process/students.rb +0 -112
  89. data/example/students_4/students.rb +0 -103
  90. data/lib/core/lorj-basecontroller.rb +0 -90
  91. data/lib/core/lorj-basedefinition.rb +0 -1139
  92. data/lib/core/lorj-baseprocess.rb +0 -236
  93. data/lib/core/lorj-data.rb +0 -567
  94. data/lib/core/lorj-keypath.rb +0 -115
  95. data/lib/core_process/CloudProcess.rb +0 -337
  96. data/lib/core_process/global_process.rb +0 -502
  97. data/lib/core_process/network_process.rb +0 -605
  98. data/lib/prc-account.rb +0 -339
  99. data/lib/prc-config.rb +0 -1030
  100. data/lib/prc-logging.rb +0 -261
  101. data/lib/providers/hpcloud/Hpcloud.rb +0 -426
  102. data/lib/providers/mock/Mock.rb +0 -141
  103. data/lib/providers/openstack/Openstack.rb +0 -47
  104. data/lib/providers/templates/core.rb +0 -61
  105. data/spec/forj-account_spec.rb +0 -75
  106. data/spec/forj-config_spec.rb +0 -196
@@ -0,0 +1,462 @@
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 class describes how to process some actions, and will do everything prior
18
+ # this task to make it to work.
19
+
20
+ require 'fog' # We use fog to access HPCloud
21
+
22
+ hpcloud_path = File.expand_path(File.dirname(__FILE__))
23
+
24
+ require File.join(hpcloud_path, 'compute.rb')
25
+ require File.join(hpcloud_path, 'network.rb')
26
+ require File.join(hpcloud_path, 'security_groups.rb')
27
+
28
+ # Defines Meta HPCloud object
29
+ class Hpcloud
30
+ define_obj :services
31
+ obj_needs :data, :account_id, :mapping => :hp_access_key
32
+ obj_needs :data, :account_key, :mapping => :hp_secret_key
33
+ obj_needs :data, :auth_uri, :mapping => :hp_auth_uri
34
+ obj_needs :data, :tenant, :mapping => :hp_tenant_id
35
+ obj_needs :data, ':excon_opts/:connect_timeout', :default_value => 30
36
+ obj_needs :data, ':excon_opts/:read_timeout', :default_value => 240
37
+ obj_needs :data, ':excon_opts/:write_timeout', :default_value => 240
38
+
39
+ # Defines Object structure and function stored on the Hpcloud class object.
40
+ # Compute Object
41
+ define_obj :compute_connection
42
+ # Defines Data used by compute.
43
+
44
+ obj_needs :data, :account_id, :mapping => :hp_access_key
45
+ obj_needs :data, :account_key, :mapping => :hp_secret_key
46
+ obj_needs :data, :auth_uri, :mapping => :hp_auth_uri
47
+ obj_needs :data, :tenant, :mapping => :hp_tenant_id
48
+ obj_needs :data, :compute, :mapping => :hp_avl_zone
49
+
50
+ define_obj :network_connection
51
+ obj_needs :data, :account_id, :mapping => :hp_access_key
52
+ obj_needs :data, :account_key, :mapping => :hp_secret_key
53
+ obj_needs :data, :auth_uri, :mapping => :hp_auth_uri
54
+ obj_needs :data, :tenant, :mapping => :hp_tenant_id
55
+ obj_needs :data, :network, :mapping => :hp_avl_zone
56
+
57
+ # Forj predefine following query mapping, used by ForjProcess
58
+ # id => id, name => name
59
+ # If we need to add another mapping, add
60
+ # query_mapping :id => :MyID
61
+ # If the query is not push through and Hash object, the Provider
62
+ # will needs to create his own mapping function.
63
+ define_obj :network
64
+ query_mapping :external, :router_external
65
+
66
+ define_obj :rule
67
+ obj_needs :data, :dir, :mapping => :direction
68
+ attr_value_mapping :IN, 'ingress'
69
+ attr_value_mapping :OUT, 'egress'
70
+
71
+ obj_needs :data, :proto, :mapping => :protocol
72
+ obj_needs :data, :port_min, :mapping => :port_range_min
73
+ obj_needs :data, :port_max, :mapping => :port_range_max
74
+ obj_needs :data, :addr_map, :mapping => :remote_ip_prefix
75
+ obj_needs :data, :sg_id, :mapping => :security_group_id
76
+
77
+ get_attr_mapping :dir, :direction
78
+ get_attr_mapping :proto, :protocol
79
+ get_attr_mapping :port_min, :port_range_min
80
+ get_attr_mapping :port_max, :port_range_max
81
+ get_attr_mapping :addr_map, :remote_ip_prefix
82
+ get_attr_mapping :sg_id, :security_group_id
83
+
84
+ define_obj :keypairs
85
+
86
+ undefine_attribute :id # Do not return any predefined ID
87
+
88
+ # ************************************ Router Object
89
+ define_obj :router
90
+
91
+ obj_needs_optional
92
+ obj_needs :data, :router_name, :mapping => :name
93
+ # The FORJ gateway_network_id is extracted from
94
+ # Fog::HP::Network::Router[:external_gateway_info][:network_id]
95
+ obj_needs :data, :external_gateway_id, :mapping => [:external_gateway_info,
96
+ 'network_id']
97
+
98
+ get_attr_mapping :gateway_network_id, [:external_gateway_info, 'network_id']
99
+
100
+ # ************************************ SERVER Object
101
+ define_obj :server
102
+ get_attr_mapping :status, :state
103
+ attr_value_mapping :create, 'BUILD'
104
+ attr_value_mapping :boot, :boot
105
+ attr_value_mapping :active, 'ACTIVE'
106
+
107
+ # ************************************ SERVER log Object
108
+ define_obj :server_log
109
+
110
+ # Excon::Response object type
111
+ get_attr_mapping :output, 'output'
112
+
113
+ # ************************************* Public IP Object
114
+ define_obj :public_ip
115
+ get_attr_mapping :server_id, :instance_id
116
+ get_attr_mapping :public_ip, :ip
117
+
118
+ # defines setup Cloud data (:account => true for setup)
119
+ define_data(:account_id,
120
+ :account => true,
121
+ :desc => 'HPCloud Access Key (From horizon, user drop down, '\
122
+ 'manage keys)',
123
+ :validate => /^[A-Z0-9]*$/
124
+ )
125
+ define_data(:account_key,
126
+ :account => true,
127
+ :desc => 'HPCloud secret Key (From horizon, user drop down, '\
128
+ 'manage keys)',
129
+ :encrypted => false,
130
+ :validate => /^.+/
131
+ )
132
+ define_data(:auth_uri,
133
+ :account => true,
134
+ :desc => 'HPCloud Authentication service URL (default is HP '\
135
+ 'Public cloud)',
136
+ :validate => %r{^http(s)?://.*$},
137
+ :default_value => 'https://region-a.geo-1.identity.hpcloudsvc'\
138
+ '.com:35357/v2.0/'
139
+ )
140
+ define_data(:tenant,
141
+ :account => true,
142
+ :desc => 'HPCloud Tenant ID (from horizon, identity, projecs,'\
143
+ ' Project ID)',
144
+ :validate => /^[0-9]+$/
145
+ )
146
+
147
+ define_data(:compute,
148
+ :account => true,
149
+ :desc => 'HPCloud Compute service zone (Ex: region-a.geo-1)',
150
+ :depends_on => [:account_id, :account_key, :auth_uri, :tenant],
151
+ :list_values => {
152
+ :query_type => :controller_call,
153
+ :object => :services,
154
+ :query_call => :get_services,
155
+ :query_params => { :list_services => [:Compute, :compute] },
156
+ :validate => :list_strict
157
+ }
158
+ )
159
+
160
+ define_data(:network,
161
+ :account => true,
162
+ :desc => 'HPCloud Network service zone (Ex: region-a.geo-1)',
163
+ :depends_on => [:account_id, :account_key, :auth_uri, :tenant],
164
+ :list_values => {
165
+ :query_type => :controller_call,
166
+ :object => :services,
167
+ :query_call => :get_services,
168
+ :query_params => { :list_services => [:Networking, :network] },
169
+ :validate => :list_strict
170
+ }
171
+ )
172
+
173
+ data_value_mapping 'xsmall', 'standard.xsmall'
174
+ data_value_mapping 'small', 'standard.small'
175
+ data_value_mapping 'medium', 'standard.medium'
176
+ data_value_mapping 'large', 'standard.large'
177
+ data_value_mapping 'xlarge', 'standard.xlarge'
178
+ end
179
+
180
+ # Following class describe how FORJ should handle HP Cloud objects.
181
+ # Except Cloud connection, all HPCloud objects management are described/called
182
+ # in HP* modules.
183
+ class HpcloudController # rubocop: disable Metrics/ClassLength
184
+ def connect(sObjectType, hParams)
185
+ case sObjectType
186
+ when :services
187
+ Fog::HP.authenticate_v2(hParams[:hdata], hParams[:excon_opts])
188
+ when :compute_connection
189
+ Fog::Compute.new hParams[:hdata].merge(:provider => :hp, :version => 'v2')
190
+ when :network_connection
191
+ Fog::HP::Network.new(hParams[:hdata])
192
+ else
193
+ controller_error "'%s' is not a valid object for 'connect'", sObjectType
194
+ end
195
+ end
196
+
197
+ # rubocop: disable MethodLength, CyclomaticComplexity, AbcSize
198
+
199
+ # Create controller for Hpcloud
200
+ def create(sObjectType, hParams)
201
+ case sObjectType
202
+ when :public_ip
203
+ required?(hParams, :compute_connection)
204
+ required?(hParams, :server)
205
+ HPCompute.server_assign_address(hParams[:compute_connection],
206
+ hParams[:server])
207
+ when :server
208
+ required?(hParams, :compute_connection)
209
+ required?(hParams, :image)
210
+ required?(hParams, :network)
211
+ required?(hParams, :flavor)
212
+ required?(hParams, :keypairs)
213
+ required?(hParams, :security_groups)
214
+ required?(hParams, :server_name)
215
+
216
+ options = {
217
+ :name => hParams[:server_name],
218
+ :flavor_id => hParams[:flavor].id,
219
+ :image_id => hParams[:image].id,
220
+ :key_name => hParams[:keypairs].name,
221
+ :security_groups => [hParams[:security_groups].name],
222
+ :networks => [hParams[:network].id]
223
+ }
224
+
225
+ HPCompute.create_server(hParams[:compute_connection], options,
226
+ hParams[:user_data], hParams[:meta_data])
227
+ when :image
228
+ required?(hParams, :compute_connection)
229
+ required?(hParams, :image_name)
230
+
231
+ HPCompute.get_image(hParams[:compute_connection], hParams[:image_name])
232
+ when :network
233
+ required?(hParams, :network_connection)
234
+ required?(hParams, :network_name)
235
+
236
+ HPNetwork.create_network(hParams[:network_connection],
237
+ hParams[:network_name])
238
+ when :subnetwork
239
+ required?(hParams, :network_connection)
240
+ required?(hParams, :network)
241
+ required?(hParams, :subnetwork_name)
242
+
243
+ HPNetwork.create_subnetwork(hParams[:network_connection],
244
+ hParams[:network],
245
+ hParams[:subnetwork_name])
246
+ when :security_groups
247
+ required?(hParams, :network_connection)
248
+ required?(hParams, :security_group)
249
+
250
+ HPSecurityGroups.create_sg(hParams[:network_connection],
251
+ hParams[:security_group], hParams[:sg_desc])
252
+ when :keypairs
253
+ required?(hParams, :compute_connection)
254
+ required?(hParams, :keypair_name)
255
+ required?(hParams, :public_key)
256
+
257
+ HPKeyPairs.create_keypair(hParams[:compute_connection],
258
+ hParams[:keypair_name], hParams[:public_key])
259
+ when :router
260
+ required?(hParams, :network_connection)
261
+ required?(hParams, :router_name)
262
+
263
+ # Forcelly used admin_status_up to true.
264
+ hParams[:hdata] = hParams[:hdata].merge(:admin_state_up => true)
265
+
266
+ HPNetwork.create_router(hParams[:network_connection], hParams[:hdata])
267
+ when :rule
268
+ required?(hParams, :network_connection)
269
+ required?(hParams, :security_groups)
270
+ HPSecurityGroups.create_rule(hParams[:network_connection],
271
+ hParams[:hdata])
272
+ when :router_interface
273
+ required?(hParams, :router)
274
+ required?(hParams, :subnetwork)
275
+ HPNetwork.add_interface(hParams[:router], hParams[:subnetwork])
276
+ else
277
+ controller_error "'%s' is not a valid object for 'create'", sObjectType
278
+ end
279
+ end
280
+
281
+ # This function return a collection which have to provide:
282
+ # functions: [], length, each
283
+ # Used by network process.
284
+ def query(sObjectType, sQuery, hParams)
285
+ case sObjectType
286
+ when :public_ip
287
+ required?(hParams, :compute_connection)
288
+ required?(hParams, :server)
289
+ HPCompute.query_server_assigned_addresses(hParams[:compute_connection],
290
+ hParams[:server], sQuery)
291
+ when :server
292
+ required?(hParams, :compute_connection)
293
+ HPCompute.query_server(hParams[:compute_connection], sQuery)
294
+ when :image
295
+ required?(hParams, :compute_connection)
296
+ HPCompute.query_image(hParams[:compute_connection], sQuery)
297
+ when :network
298
+ required?(hParams, :network_connection)
299
+ HPNetwork.query_network(hParams[:network_connection], sQuery)
300
+ when :subnetwork
301
+ required?(hParams, :network_connection)
302
+ HPNetwork.query_subnetwork(hParams[:network_connection], sQuery)
303
+ when :router
304
+ required?(hParams, :network_connection)
305
+ HPNetwork.query_router(hParams[:network_connection], sQuery)
306
+ when :port
307
+ required?(hParams, :network_connection)
308
+ HPNetwork.query_port(hParams[:network_connection], sQuery)
309
+ when :security_groups
310
+ required?(hParams, :network_connection)
311
+ HPSecurityGroups.query_sg(hParams[:network_connection], sQuery)
312
+ when :rule
313
+ required?(hParams, :network_connection)
314
+ HPSecurityGroups.query_rule(hParams[:network_connection], sQuery)
315
+ when :keypairs
316
+ required?(hParams, :compute_connection)
317
+ HPKeyPairs.query_keypair(hParams[:compute_connection], sQuery)
318
+ when :flavor
319
+ required?(hParams, :compute_connection)
320
+ HPCompute.query_flavor(hParams[:compute_connection], sQuery)
321
+ else
322
+ controller_error "'%s' is not a valid object for 'query'", sObjectType
323
+ end
324
+ end
325
+ # rubocop: enable CyclomaticComplexity, MethodLength
326
+
327
+ def delete(sObjectType, hParams)
328
+ case sObjectType
329
+ when :network
330
+ HPNetwork.delete_network(hParams[:network_connection],
331
+ hParams[:network])
332
+ when :rule
333
+ HPSecurityGroups.delete_rule(hParams[:network_connection],
334
+ hParams[:id])
335
+ obj = hParams[:network_connection]
336
+ obj.security_group_rules.get(hParams[:id]).destroy
337
+ when :server
338
+ required?(hParams, :compute_connection)
339
+ required?(hParams, :server)
340
+ HPCompute.delete_server(hParams[:compute_connection],
341
+ hParams[:server])
342
+ end
343
+ end
344
+
345
+ def get(sObjectType, sUniqId, hParams)
346
+ case sObjectType
347
+ when :server_log
348
+ required?(hParams, :server)
349
+
350
+ hParams[:server].console_output(sUniqId)
351
+ when :server
352
+ required?(hParams, :compute_connection)
353
+ HPCompute.get_server(hParams[:compute_connection], sUniqId)
354
+ when :image
355
+ required?(hParams, :compute_connection)
356
+ HPCompute.get_image(hParams[:compute_connection], sUniqId)
357
+ when :network
358
+ required?(hParams, :network_connection)
359
+ HPNetwork.get_network(hParams[:network_connection], sUniqId)
360
+ when :keypairs
361
+ required?(hParams, :compute_connection)
362
+ HPKeyPairs.get_keypair(hParams[:compute_connection], sUniqId)
363
+ else
364
+ forjError "'%s' is not a valid object for 'get'", sObjectType
365
+ end
366
+ end
367
+
368
+ def query_each(oFogObject)
369
+ case oFogObject.class.to_s
370
+ when 'Fog::HP::Network::Networks'
371
+ oFogObject.each { | value | yield(value) }
372
+ else
373
+ controller_error "'%s' is not a valid list for 'each'",
374
+ oFogObject.class
375
+ end
376
+ end
377
+
378
+ def get_attr(oControlerObject, key)
379
+ if oControlerObject.is_a?(Excon::Response)
380
+ oControlerObject.data.rh_get(:body, key)
381
+ else
382
+ attributes = oControlerObject.attributes
383
+ def_attributes = oControlerObject.class.attributes
384
+ controller_error "attribute '%s' is unknown in '%s'. "\
385
+ "Valid one are : '%s'",
386
+ key[0], oControlerObject.class,
387
+ def_attributes unless def_attributes.include?(key[0])
388
+ attributes.rh_get(key)
389
+ end
390
+ rescue => e
391
+ controller_error "Unable to map '%s'. %s", key, e.message
392
+ end
393
+
394
+ def set_attr(oControlerObject, key, value)
395
+ controller_class = oControlerObject.class
396
+
397
+ controller_error "No set feature for '%s'",
398
+ controller_class if oControlerObject.is_a?(Excon::Response)
399
+
400
+ attributes = oControlerObject.attributes
401
+ def_attributes = oControlerObject.class.attributes
402
+ controller_error "attribute '%s' is unknown in '%s'. Valid one are : '%s'",
403
+ key[0], oControlerObject.class,
404
+ def_attributes unless def_attributes.include?(key[0])
405
+ attributes.rh_set(value, key)
406
+ rescue => e
407
+ controller_error "Unable to map '%s' on '%s'\n%s",
408
+ key, sObjectType, e.message
409
+ end
410
+
411
+ def update(sObjectType, oObject, _hParams)
412
+ case sObjectType
413
+ when :router
414
+ controller_error 'Object to update is nil' if oObject.nil?
415
+
416
+ HPNetwork.update_router(oObject[:object])
417
+ else
418
+ controller_error "'%s' is not a valid list for 'update'",
419
+ oFogObject.class
420
+ end
421
+ end
422
+
423
+ # This function requires to return an Array of values or nil.
424
+ def get_services(sObjectType, oParams)
425
+ case sObjectType
426
+ when :services
427
+ # oParams[sObjectType] will provide the controller object.
428
+ # This one can be interpreted only by controller code,
429
+ # except if controller declares how to map with this object.
430
+ # Processes can deal only process mapped data.
431
+ # Currently there is no services process function. No need to map.
432
+ services = oParams[:services]
433
+ if !oParams[:list_services].is_a?(Array)
434
+ service_to_find = [oParams[:list_services]]
435
+ else
436
+ service_to_find = oParams[:list_services]
437
+ end
438
+ # Search for service. Ex: Can be :Networking or network. I currently do
439
+ # not know why...
440
+ search_services = services.rh_get(:service_catalog)
441
+ service = nil
442
+ service_to_find.each do | sServiceElem |
443
+ if search_services.key?(sServiceElem)
444
+ service = sServiceElem
445
+ break
446
+ end
447
+ end
448
+
449
+ controller_error 'Unable to find services %s',
450
+ service_to_find if service.nil?
451
+ result = services.rh_get(:service_catalog, service).keys
452
+ result.delete('name')
453
+ result.each_index do | iIndex |
454
+ result[iIndex] = result[iIndex].to_s if result[iIndex].is_a?(Symbol)
455
+ end
456
+ return result
457
+ else
458
+ controller_error "'%s' is not a valid object for 'get_services'",
459
+ sObjectType
460
+ end
461
+ end
462
+ end
@@ -14,104 +14,102 @@
14
14
  # See the License for the specific language governing permissions and
15
15
  # limitations under the License.
16
16
 
17
-
17
+ # HPcloud network class
18
18
  module HPNetwork
19
- # Network driver
20
- def HPNetwork.query_network(oNetworkConnect, sQuery)
21
- oNetworkConnect.networks.all(sQuery)
22
- end
23
-
24
- def HPNetwork.create_network(oNetworkConnect, name)
25
- oNetworkConnect.networks.create(:name => name)
26
- end
27
-
28
- def HPNetwork.delete_network(oNetworkConnect, oNetwork)
29
- oNetworkConnect.networks.get(oNetwork.id).destroy
30
- end
31
-
32
- # SubNetwork driver
33
- def HPNetwork.query_subnetwork(oNetworkConnect, sQuery)
34
- oNetworkConnect.subnets.all(sQuery)
35
- end
36
-
37
- def HPNetwork.create_subnetwork(oNetworkConnect, oNetwork, name)
38
- oNetworkConnect.subnets.create(
39
- :network_id => oNetwork.id,
40
- :name => name,
41
- :cidr => get_next_subnet(oNetworkConnect),
42
- :ip_version => '4'
43
- )
44
- end
45
-
46
- def HPNetwork.delete_subnetwork(oNetworkConnect, oSubNetwork)
47
- oNetworkConnect.subnets.get(oSubNetwork.id).destroy
48
- end
49
-
50
- def HPNetwork.get_next_subnet(oNetworkConnect)
51
- begin
52
- subnet_values = Array.new
53
- subnets = oNetworkConnect.subnets.all
54
-
55
- subnets.each do|s|
56
- subnet_values.push(s.cidr)
57
- end
58
-
59
- gap = false
60
- count = 0
61
- range_used = Array.new
62
- new_subnet = 0
63
- new_cidr = ''
64
-
65
- subnet_values = subnet_values.sort!
66
-
67
- subnet_values.each do|value|
68
- range_used.push(value[5])
69
- end
70
-
71
- range_used.each do |n|
72
- if count.to_i == n.to_i
73
- else
74
- new_subnet = count
75
- gap = true
76
- break
77
- end
78
- count += 1
79
- end
80
-
81
- if gap
82
- new_cidr = '10.0.%s.0/24' % [count]
83
- else
84
- max_value = range_used.max
85
- new_subnet = max_value.to_i + 1
86
- new_cidr = '10.0.%s.0/24' % [new_subnet]
87
- end
88
- new_cidr
89
- rescue => e
90
- Logging.error("%s\n%s" % [e.message, e.backtrace.join("\n")])
19
+ # Network driver
20
+ def self.query_network(oNetworkConnect, sQuery)
21
+ oNetworkConnect.networks.all(sQuery)
22
+ end
23
+
24
+ def self.create_network(oNetworkConnect, name)
25
+ oNetworkConnect.networks.create(:name => name)
26
+ end
27
+
28
+ def self.delete_network(oNetworkConnect, oNetwork)
29
+ oNetworkConnect.networks.get(oNetwork.id).destroy
30
+ end
31
+
32
+ # SubNetwork driver
33
+ def self.query_subnetwork(oNetworkConnect, sQuery)
34
+ oNetworkConnect.subnets.all(sQuery)
35
+ end
36
+
37
+ def self.create_subnetwork(oNetworkConnect, oNetwork, name)
38
+ oNetworkConnect.subnets.create(
39
+ :network_id => oNetwork.id,
40
+ :name => name,
41
+ :cidr => get_next_subnet(oNetworkConnect),
42
+ :ip_version => '4'
43
+ )
44
+ end
45
+
46
+ def self.delete_subnetwork(oNetworkConnect, oSubNetwork)
47
+ oNetworkConnect.subnets.get(oSubNetwork.id).destroy
48
+ end
49
+
50
+ def self.get_next_subnet(oNetworkConnect)
51
+ subnet_values = []
52
+ subnets = oNetworkConnect.subnets.all
53
+
54
+ subnets.each do|s|
55
+ subnet_values.push(s.cidr)
56
+ end
57
+
58
+ gap = false
59
+ count = 0
60
+ range_used = []
61
+ new_subnet = 0
62
+ new_cidr = ''
63
+
64
+ subnet_values = subnet_values.sort!
65
+
66
+ subnet_values.each do|value|
67
+ range_used.push(value[5])
68
+ end
69
+
70
+ range_used.each do |n|
71
+ if count.to_i == n.to_i
72
+ else
73
+ new_subnet = count
74
+ gap = true
75
+ break
91
76
  end
92
- end
93
-
94
- # router driver
95
- def HPNetwork.query_router(oNetworkConnect, sQuery)
96
- oNetworkConnect.routers.all(sQuery)
97
- end
98
-
99
- def HPNetwork.update_router(oRouters)
100
- oRouters.save
101
- end
102
-
103
- def HPNetwork.create_router(oNetwork, hOptions)
104
- oNetwork.routers.create(hOptions)
105
- end
106
-
107
- # router interface
108
-
109
- def HPNetwork.add_interface(oRouter, oSubNetwork)
110
- oRouter.add_interface(oSubNetwork.id, nil)
111
- end
112
-
113
- # Port driver
114
- def HPNetwork.query_port(oNetworkConnect, sQuery)
115
- oNetworkConnect.ports.all(sQuery)
116
- end
77
+ count += 1
78
+ end
79
+
80
+ if gap
81
+ new_cidr = format('10.0.%s.0/24', count)
82
+ else
83
+ max_value = range_used.max
84
+ new_subnet = max_value.to_i + 1
85
+ new_cidr = format('10.0.%s.0/24', new_subnet)
86
+ end
87
+ new_cidr
88
+ rescue => e
89
+ Logging.error("%s\n%s", e.message, e.backtrace.join("\n"))
90
+ end
91
+
92
+ # router driver
93
+ def self.query_router(oNetworkConnect, sQuery)
94
+ oNetworkConnect.routers.all(sQuery)
95
+ end
96
+
97
+ def self.update_router(oRouters)
98
+ oRouters.save
99
+ end
100
+
101
+ def self.create_router(oNetwork, hOptions)
102
+ oNetwork.routers.create(hOptions)
103
+ end
104
+
105
+ # router interface
106
+
107
+ def self.add_interface(oRouter, oSubNetwork)
108
+ oRouter.add_interface(oSubNetwork.id, nil)
109
+ end
110
+
111
+ # Port driver
112
+ def self.query_port(oNetworkConnect, sQuery)
113
+ oNetworkConnect.ports.all(sQuery)
114
+ end
117
115
  end