lorj 0.2.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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