lorj 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/example/students_1/students.rb +5 -6
- data/example/students_2/students.rb +4 -5
- data/example/students_3/students.rb +4 -5
- data/example/students_4/students.rb +4 -5
- data/example/students_5/students.rb +5 -5
- data/lib/core/core.rb +6 -1
- data/lib/core/core_controller.rb +1 -9
- data/lib/core/core_internal.rb +2 -1
- data/lib/core/core_model.rb +2 -10
- data/lib/core/core_object_data.rb +18 -0
- data/lib/core/core_object_params.rb +43 -4
- data/lib/core/core_process.rb +1 -9
- data/lib/core/core_process_setup.rb +32 -6
- data/lib/core/core_setup_ask.rb +41 -33
- data/lib/core/core_setup_encrypt.rb +29 -6
- data/lib/core/core_setup_init.rb +2 -2
- data/lib/core/definition.rb +33 -10
- data/lib/core/definition_internal.rb +10 -14
- data/lib/core/lorj_basedefinition.rb +16 -24
- data/lib/core/lorj_baseprocess.rb +113 -44
- data/lib/core/lorj_data.rb +2 -9
- data/lib/core/lorj_keypath.rb +5 -2
- data/lib/core_process/cloud/process/common.rb +4 -7
- data/lib/core_process/cloud/process/connection.rb +44 -45
- data/lib/core_process/cloud/process/external_network.rb +24 -28
- data/lib/core_process/cloud/process/flavor.rb +31 -34
- data/lib/core_process/cloud/process/images.rb +12 -15
- data/lib/core_process/cloud/process/internet_network.rb +13 -14
- data/lib/core_process/cloud/process/internet_server.rb +9 -10
- data/lib/core_process/cloud/process/keypairs.rb +34 -27
- data/lib/core_process/cloud/process/network.rb +21 -23
- data/lib/core_process/cloud/process/public_ip.rb +17 -18
- data/lib/core_process/cloud/process/router.rb +86 -92
- data/lib/core_process/cloud/process/rules.rb +30 -31
- data/lib/core_process/cloud/process/security_groups.rb +21 -22
- data/lib/core_process/cloud/process/server.rb +30 -31
- data/lib/core_process/cloud/process/server_log.rb +13 -14
- data/lib/core_process/cloud/process/subnetwork.rb +25 -40
- data/lib/logging.rb +4 -17
- data/lib/lorj/version.rb +1 -1
- data/lib/lorj.rb +2 -1
- data/lib/lorj_account.rb +137 -90
- data/lib/lorj_config.rb +13 -19
- data/lib/lorj_defaults.rb +46 -292
- data/lib/lorj_meta.rb +729 -0
- data/lib/prc.rb +119 -30
- data/lib/prc_base_config.rb +53 -47
- data/lib/prc_core_config.rb +837 -565
- data/lib/prc_section_config.rb +44 -16
- data/lib/providers/hpcloud/hpcloud.rb +1 -1
- data/lib/providers/openstack/openstack.rb +278 -21
- data/lib/providers/openstack/openstack_create.rb +205 -0
- data/lib/providers/openstack/openstack_delete.rb +28 -0
- data/lib/providers/openstack/openstack_get.rb +39 -0
- data/lib/providers/openstack/openstack_process.rb +26 -0
- data/lib/providers/openstack/openstack_query.rb +96 -0
- data/lib/providers/openstack/openstack_update.rb +35 -0
- data/lib/rh.rb +91 -6
- data/lorj-spec/defaults.yaml +18 -12
- data/lorj.gemspec +1 -0
- data/spec/01_hash_rh_spec.rb +41 -2
- data/spec/02_prc_base_config_spec.rb +1 -1
- data/spec/03_prc_section_config_spec.rb +1 -1
- data/spec/04_prc_core_config_spec.rb +148 -4
- data/spec/09_prc_spec.rb +104 -0
- data/spec/{00_lorj_log_spec.rb → 10_lorj_log_spec.rb} +23 -2
- data/spec/11_lorj_config_spec.rb +9 -27
- data/spec/12_lorj_account_spec.rb +36 -20
- data/spec/20_lorj_meta_spec.rb +271 -0
- data/spec/21_lorj_defaults_spec.rb +85 -0
- metadata +31 -4
data/lib/core/definition.rb
CHANGED
@@ -116,6 +116,17 @@ module Lorj
|
|
116
116
|
# - def_attr_mapping : Define object attribute mapping.
|
117
117
|
# - data_value_mapping: Define Data model values mapping.
|
118
118
|
#
|
119
|
+
# * *Args*
|
120
|
+
# - type : Symbol. Object type to declare.
|
121
|
+
# - handlers : Hash. List of Process handler to call for
|
122
|
+
# create/query/get/delete/update/get_attr.
|
123
|
+
# Handlers supported:
|
124
|
+
# - :create_e : Process function to call with create
|
125
|
+
# - :delete_e : Process function to call with delete
|
126
|
+
# - :update_e : Process function to call with update
|
127
|
+
# - :get_e : Process function to call with get
|
128
|
+
# - :query_e : Process function to call with query
|
129
|
+
# - :get_attr_e : Process function to call with get_attr
|
119
130
|
def self.define_obj(obj_type_name, handlers = nil)
|
120
131
|
return nil unless [NilClass, String, Symbol].include?(obj_type_name.class)
|
121
132
|
PrcLib.model.heap true
|
@@ -142,6 +153,16 @@ module Lorj
|
|
142
153
|
end
|
143
154
|
|
144
155
|
# Application process to defines query attributes.
|
156
|
+
#
|
157
|
+
# This function is depreciated.
|
158
|
+
#
|
159
|
+
# def_attribute or def_attr_mapping already set the attribute as
|
160
|
+
# queriable. If the controller needs to redefine how the attribute is
|
161
|
+
# queried, use it will needs to call query_mapping.
|
162
|
+
#
|
163
|
+
# But from process point of view, all attribute must be queriable.
|
164
|
+
#
|
165
|
+
# So, use def_attribute(process), then query_mapping(controller)
|
145
166
|
def self.def_query_attribute(key)
|
146
167
|
PrcLib.model.heap true
|
147
168
|
query_mapping(key, key)
|
@@ -261,17 +282,16 @@ module Lorj
|
|
261
282
|
return nil if options.class != Hash
|
262
283
|
PrcLib.model.heap true
|
263
284
|
|
264
|
-
data =
|
285
|
+
data = KeyPath.new data, 2
|
265
286
|
PrcLib.dcl_fail("%s: Config data '%s' unknown",
|
266
|
-
self.class,
|
287
|
+
self.class,
|
288
|
+
data) unless Lorj.data.auto_meta_exist?(data.key)
|
267
289
|
|
268
290
|
PrcLib.model.data_context data
|
269
291
|
|
270
|
-
section =
|
292
|
+
section = Lorj.data.first_section(data.key)
|
271
293
|
|
272
|
-
|
273
|
-
return cur_options.merge!(options) if cur_options
|
274
|
-
PrcLib.model.meta_data.rh_set(options, section, data)
|
294
|
+
Lorj.data.define_controller_data(section, data.key, options)
|
275
295
|
end
|
276
296
|
|
277
297
|
# Controller to declare a model Data value mapping
|
@@ -288,7 +308,7 @@ module Lorj
|
|
288
308
|
section = _section_from(data)
|
289
309
|
|
290
310
|
Lorj.debug(2, format("%s/%s: Define config data value mapping: '%s' => "\
|
291
|
-
"'%s'", section, data, value, map))
|
311
|
+
"'%s'", section, data.fpath, value, map))
|
292
312
|
PrcLib.model.meta_data.rh_set(map, section, data,
|
293
313
|
:value_mapping, :controller, value)
|
294
314
|
PrcLib.model.meta_data.rh_set(value, section, data,
|
@@ -333,6 +353,8 @@ module Lorj
|
|
333
353
|
# Controller declaration to map an query attribute
|
334
354
|
# By default, def_attribute configure those attributes as queriable.
|
335
355
|
# The controller can redefine the query part.
|
356
|
+
# Use def_attribute or def_attr_mapping
|
357
|
+
# All attributes are considered as queriable.
|
336
358
|
def self.query_mapping(key, map)
|
337
359
|
PrcLib.model.heap true
|
338
360
|
_query_mapping(key, map)
|
@@ -495,9 +517,10 @@ module Lorj
|
|
495
517
|
[key_path_obj.fpath, map_path_obj.fpath]
|
496
518
|
end
|
497
519
|
|
498
|
-
# Internal section detection
|
520
|
+
# Internal section detection based on a keyPath Object
|
499
521
|
def self._section_from(data)
|
500
|
-
|
522
|
+
return data.key[0] if data.length == 2
|
523
|
+
section = Lorj.defaults.get_meta_section(data.key)
|
501
524
|
section = :runtime if section.nil?
|
502
525
|
|
503
526
|
section
|
@@ -575,7 +598,7 @@ module Lorj
|
|
575
598
|
# Internal function
|
576
599
|
def self._obj_needs_data(object_attr, msg_action, new_params)
|
577
600
|
attr_name = PrcLib.model.attribute_context
|
578
|
-
if Lorj.
|
601
|
+
if Lorj.data.auto_meta_exist?(attr_name)
|
579
602
|
Lorj.debug(2, "%-28s: %s predefined config '%s'.",
|
580
603
|
_object_name(PrcLib.model.object_context),
|
581
604
|
msg_action, attr_name)
|
@@ -22,26 +22,22 @@ module Lorj
|
|
22
22
|
|
23
23
|
# return Object data meta data.
|
24
24
|
def _get_meta_data(key)
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
Lorj.data.auto_section_data(key)
|
26
|
+
# meta_default = Lorj.defaults.get_meta_auto(key)
|
27
|
+
# return nil if meta_default.nil?
|
28
|
+
# meta_default = meta_default.clone
|
28
29
|
|
29
|
-
section = Lorj.defaults.get_meta_section(key)
|
30
|
-
return meta_default if section.nil?
|
31
|
-
meta = PrcLib.model.meta_data.rh_get(section, key)
|
32
|
-
return meta_default if meta.nil?
|
30
|
+
# section = Lorj.defaults.get_meta_section(key)
|
31
|
+
# return meta_default if section.nil?
|
32
|
+
# meta = PrcLib.model.meta_data.rh_get(section, key)
|
33
|
+
# return meta_default if meta.nil?
|
33
34
|
|
34
|
-
meta_default.merge!(meta)
|
35
|
-
end
|
36
|
-
|
37
|
-
def _get_meta_data_auto(key)
|
38
|
-
return nil if key.nil?
|
39
|
-
Lorj.defaults.get_meta_auto(key)
|
35
|
+
# meta_default.merge!(meta)
|
40
36
|
end
|
41
37
|
|
42
38
|
def _get_account_section(key)
|
43
39
|
return nil if key.nil?
|
44
|
-
Lorj.
|
40
|
+
Lorj.data.first_section(key)
|
45
41
|
end
|
46
42
|
|
47
43
|
# internal runtime function for process call
|
@@ -14,16 +14,9 @@
|
|
14
14
|
# See the License for the specific language governing permissions and
|
15
15
|
# limitations under the License.
|
16
16
|
|
17
|
-
# Module Lorj
|
17
|
+
# Module Lorj implements ERBConfig, and initialization functions for
|
18
|
+
# Lorj::BaseDefinition
|
18
19
|
#
|
19
|
-
# Those classes describes :
|
20
|
-
# - processes (BaseProcess) : How to create/delete/edit/query object.
|
21
|
-
# - controler (BaseControler) : If a provider is defined, define how will do
|
22
|
-
# object creation/etc...
|
23
|
-
# - definition(BaseDefinition): Functions to declare objects, query/data mapping
|
24
|
-
# and setup
|
25
|
-
# this task to make it to work.
|
26
|
-
|
27
20
|
module Lorj
|
28
21
|
# This class limits ERC template to access only to config object data.
|
29
22
|
class ERBConfig
|
@@ -80,21 +73,9 @@ module Lorj
|
|
80
73
|
# Ex: object.set_data(...)
|
81
74
|
# config
|
82
75
|
|
83
|
-
#
|
84
|
-
# 2 kind of functions:
|
85
|
-
# - set (key, value) and []=(key, value)
|
86
|
-
# From processes, you can set a runtime data with:
|
87
|
-
# config.set(key, value)
|
88
|
-
# OR
|
89
|
-
# config[key] = value
|
76
|
+
# Reference to the config object.
|
90
77
|
#
|
91
|
-
#
|
92
|
-
# default is an optional value.
|
93
|
-
# From processes, you can get a data (runtime/account/config.yaml or
|
94
|
-
# defaults.yaml) with:
|
95
|
-
# config.get(key)
|
96
|
-
# OR
|
97
|
-
# config[key]
|
78
|
+
# See Lorj::Config or Lorj::Account for details
|
98
79
|
def config
|
99
80
|
PrcLib.runtime_fail 'No config object loaded.' unless @config
|
100
81
|
@config
|
@@ -187,7 +168,7 @@ module Lorj
|
|
187
168
|
@object_data.add data_objects
|
188
169
|
end
|
189
170
|
|
190
|
-
# Function to get Lorj core data cache.
|
171
|
+
# Function to get attributes of objects stored in the Lorj core data cache.
|
191
172
|
#
|
192
173
|
# *Args*
|
193
174
|
# - object_type : Object type to get
|
@@ -201,6 +182,17 @@ module Lorj
|
|
201
182
|
@object_data[sObjectType, *key]
|
202
183
|
end
|
203
184
|
|
185
|
+
# Function to get Lorj core data cache keys.
|
186
|
+
#
|
187
|
+
# *Args*
|
188
|
+
#
|
189
|
+
# *Return*
|
190
|
+
# - List of objects in cache.
|
191
|
+
#
|
192
|
+
def cache_objects_keys
|
193
|
+
@object_data[].keys
|
194
|
+
end
|
195
|
+
|
204
196
|
# get an attribute/object/... from an object.
|
205
197
|
def get_data(oObj, *key)
|
206
198
|
if oObj.is_a?(Hash) && oObj.key?(:object_type)
|
@@ -15,16 +15,8 @@
|
|
15
15
|
# See the License for the specific language governing permissions and
|
16
16
|
# limitations under the License.
|
17
17
|
|
18
|
-
#
|
19
|
-
#
|
20
|
-
# Those classes describes :
|
21
|
-
# - processes (BaseProcess) : How to create/delete/edit/query object.
|
22
|
-
# - controler (BaseControler) : If a provider is defined, define how will do
|
23
|
-
# object creation/etc...
|
24
|
-
# - definition(BaseDefinition): Functions to declare objects, query/data mapping
|
25
|
-
# and setup
|
26
|
-
# this task to make it to work.
|
27
|
-
|
18
|
+
# - Lorj::BaseProcess : Process functions to call create/delete/edit/query
|
19
|
+
# processes on other objects.
|
28
20
|
module Lorj
|
29
21
|
# class describing generic Object Process
|
30
22
|
# with controller calls
|
@@ -48,37 +40,37 @@ module Lorj
|
|
48
40
|
|
49
41
|
attr_writer :base_object
|
50
42
|
|
51
|
-
def controller_connect(sObjectType, params = nil)
|
43
|
+
def controller_connect(sObjectType, params = nil) #:doc:
|
52
44
|
process_error 'No Controler object loaded.' unless @base_object
|
53
45
|
params = nil unless params.is_a?(Hash)
|
54
46
|
@base_object.controller_connect(sObjectType, params)
|
55
47
|
end
|
56
48
|
|
57
|
-
def controller_create(sObjectType, params = nil)
|
49
|
+
def controller_create(sObjectType, params = nil) #:doc:
|
58
50
|
process_error 'No Controler object loaded.' unless @base_object
|
59
51
|
params = nil unless params.is_a?(Hash)
|
60
52
|
@base_object.controller_create(sObjectType, params)
|
61
53
|
end
|
62
54
|
|
63
|
-
def controller_query(sObjectType, sQuery, params = nil)
|
55
|
+
def controller_query(sObjectType, sQuery, params = nil) #:doc:
|
64
56
|
process_error 'No Controler object loaded.' unless @base_object
|
65
57
|
params = nil unless params.is_a?(Hash)
|
66
58
|
@base_object.controller_query(sObjectType, sQuery, params)
|
67
59
|
end
|
68
60
|
|
69
|
-
def controller_update(sObjectType, params = nil)
|
61
|
+
def controller_update(sObjectType, params = nil) #:doc:
|
70
62
|
process_error 'No Controler object loaded.' unless @base_object
|
71
63
|
params = nil unless params.is_a?(Hash)
|
72
64
|
@base_object.controller_update(sObjectType, params)
|
73
65
|
end
|
74
66
|
|
75
|
-
def controller_delete(sObjectType, params = nil)
|
67
|
+
def controller_delete(sObjectType, params = nil) #:doc:
|
76
68
|
process_error 'No Controler object loaded.' unless @base_object
|
77
69
|
params = nil unless params.is_a?(Hash)
|
78
70
|
@base_object.controller_delete(sObjectType, params)
|
79
71
|
end
|
80
72
|
|
81
|
-
def controller_get(sObjectType, sId, params = nil)
|
73
|
+
def controller_get(sObjectType, sId, params = nil) #:doc:
|
82
74
|
process_error 'No Controler object loaded.' unless @base_object
|
83
75
|
params = nil unless params.is_a?(Hash)
|
84
76
|
@base_object.controller_get(sObjectType, sId, params)
|
@@ -88,29 +80,29 @@ module Lorj
|
|
88
80
|
# class describing generic Object Process
|
89
81
|
# with process calls
|
90
82
|
class BaseProcess
|
91
|
-
def process_create(sObjectType)
|
83
|
+
def process_create(sObjectType, hConfig = nil) #:doc:
|
92
84
|
process_error 'No Base object loaded.' unless @base_object
|
93
|
-
@base_object.process_create(sObjectType)
|
85
|
+
@base_object.process_create(sObjectType, hConfig)
|
94
86
|
end
|
95
87
|
|
96
|
-
def process_query(sObjectType, sQuery)
|
88
|
+
def process_query(sObjectType, sQuery, hConfig = nil) #:doc:
|
97
89
|
process_error 'No Base object loaded.' unless @base_object
|
98
|
-
@base_object.process_query(sObjectType, sQuery)
|
90
|
+
@base_object.process_query(sObjectType, sQuery, hConfig)
|
99
91
|
end
|
100
92
|
|
101
|
-
def process_update(sObjectType)
|
93
|
+
def process_update(sObjectType, hConfig = nil) #:doc:
|
102
94
|
process_error 'No Base object loaded.' unless @base_object
|
103
|
-
@base_object.process_update(sObjectType)
|
95
|
+
@base_object.process_update(sObjectType, hConfig)
|
104
96
|
end
|
105
97
|
|
106
|
-
def process_get(sObjectType, sId)
|
98
|
+
def process_get(sObjectType, sId, hConfig = nil) #:doc:
|
107
99
|
process_error 'No Base object loaded.' unless @base_object
|
108
|
-
@base_object.process_get(sObjectType, sId)
|
100
|
+
@base_object.process_get(sObjectType, sId, hConfig)
|
109
101
|
end
|
110
102
|
|
111
|
-
def process_delete(sObjectType)
|
103
|
+
def process_delete(sObjectType, hConfig = nil) #:doc:
|
112
104
|
process_error 'No Base object loaded.' unless @base_object
|
113
|
-
@base_object.process_delete(sObjectType)
|
105
|
+
@base_object.process_delete(sObjectType, hConfig)
|
114
106
|
end
|
115
107
|
end
|
116
108
|
|
@@ -119,12 +111,12 @@ module Lorj
|
|
119
111
|
class BaseProcess
|
120
112
|
private
|
121
113
|
|
122
|
-
def query_cache_cleanup(sObjectType)
|
114
|
+
def query_cache_cleanup(sObjectType) #:doc:
|
123
115
|
fail Lorj::PrcError.new, 'No Base object loaded.' unless @base_object
|
124
116
|
@base_object.query_cleanup(sObjectType)
|
125
117
|
end
|
126
118
|
|
127
|
-
def object_cache_cleanup(sObjectType)
|
119
|
+
def object_cache_cleanup(sObjectType) #:doc:
|
128
120
|
fail Lorj::PrcError.new, 'No Base object loaded.' unless @base_object
|
129
121
|
@base_object.object_cleanup(sObjectType)
|
130
122
|
end
|
@@ -143,21 +135,45 @@ module Lorj
|
|
143
135
|
@base_object
|
144
136
|
end
|
145
137
|
|
146
|
-
def format_object(sObjectType, oMiscObj)
|
138
|
+
def format_object(sObjectType, oMiscObj) #:doc:
|
147
139
|
PrcLib.runtime_fail 'No Base object loaded.' unless @base_object
|
148
140
|
@base_object.format_object(sObjectType, oMiscObj)
|
149
141
|
end
|
150
142
|
|
151
|
-
def format_query(sObjectType, oMiscObj, hQuery)
|
143
|
+
def format_query(sObjectType, oMiscObj, hQuery) #:doc:
|
152
144
|
PrcLib.runtime_fail 'No Base object loaded.' unless @base_object
|
153
145
|
@base_object.format_list(sObjectType, oMiscObj, hQuery)
|
154
146
|
end
|
155
147
|
|
156
|
-
|
148
|
+
# Function to provides Lorj Core data cache access.
|
149
|
+
#
|
150
|
+
# See BaseDefinition#data_objects for details.
|
151
|
+
#
|
152
|
+
# AVOID CALLING THIS FUNCTION, except in debug case.
|
153
|
+
# Usually, if you are using this function to access some data,
|
154
|
+
# it means you need to declare those data in your object model.
|
155
|
+
#
|
156
|
+
# As normally this data should be accessible to the function parameter
|
157
|
+
# call. Please review.
|
158
|
+
#
|
159
|
+
def data_objects(sObjectType, *key) #:doc:
|
160
|
+
PrcLib.debug('data_objects is depreciated. To access "%s", you should '\
|
161
|
+
'declare it with obj_needs of "%s" and if needed, refresh '\
|
162
|
+
'hParams with hParams.refresh. Please update your code'\
|
163
|
+
"\nSee %s", sObjectType, sObjectType, caller[0])
|
157
164
|
PrcLib.runtime_fail 'No Base object loaded.' unless @base_object
|
158
165
|
@base_object.data_objects(sObjectType, *key)
|
159
166
|
end
|
160
167
|
|
168
|
+
# Function to provides Lorj Core data cache access.
|
169
|
+
#
|
170
|
+
# See BaseDefinition#cache_objects_keys for details.
|
171
|
+
#
|
172
|
+
def cache_objects_keys #:doc:
|
173
|
+
PrcLib.runtime_fail 'No Base object loaded.' unless @base_object
|
174
|
+
@base_object.cache_objects_keys
|
175
|
+
end
|
176
|
+
|
161
177
|
def get_data(oObj, *key)
|
162
178
|
PrcLib.warning('get_data call is obsolete. Please update your code. '\
|
163
179
|
"Use [] instead.\n%s", caller)
|
@@ -165,17 +181,78 @@ module Lorj
|
|
165
181
|
@base_object.get_data(oObj, :attrs, key)
|
166
182
|
end
|
167
183
|
|
168
|
-
def register(oObject, sObjectType = nil)
|
184
|
+
def register(oObject, sObjectType = nil) #:doc:
|
169
185
|
PrcLib.runtime_fail 'No Base object loaded.' unless @base_object
|
170
186
|
@base_object.register(oObject, sObjectType)
|
171
187
|
end
|
172
188
|
|
173
|
-
def config
|
189
|
+
def config #:doc:
|
174
190
|
PrcLib.runtime_fail 'No Base object loaded.' unless @base_object
|
175
191
|
@base_object.config
|
176
192
|
end
|
177
193
|
|
178
|
-
|
194
|
+
# Function to execute a query and return one or no record.
|
195
|
+
#
|
196
|
+
# * *Args*
|
197
|
+
# - +type+ : Symbol. meta object type to query.
|
198
|
+
# - +sQuery+ : Hash. Represents the query to execute
|
199
|
+
# - +name+ : String. Human name of the object to search.
|
200
|
+
# - +info+ : List of message to format. This string is printed out
|
201
|
+
# thanks to #Lorj.debug or #PrcLib.info
|
202
|
+
# - :notfound : not found string formated with: type, name
|
203
|
+
# - :checkmatch : checking match string formated with: type, name
|
204
|
+
# - :nomatch : No match string formated with: type, name
|
205
|
+
# - :found : Found string formated with: type, item
|
206
|
+
# item string built from :items and :items_form
|
207
|
+
# - :more : Found several string formated with: type, name
|
208
|
+
# - :items_form : Combined with :items. Represent a valid format string
|
209
|
+
# for Ruby format function
|
210
|
+
# - :items : Symbol or Array of Symbol.
|
211
|
+
# List of elements extracted from the first element of the query
|
212
|
+
# result.
|
213
|
+
# It is used to format the `item` string with :items_form format
|
214
|
+
# string.
|
215
|
+
# by default, the element extracted is :name and :items_form is '%s'.
|
216
|
+
#
|
217
|
+
# * *returns*
|
218
|
+
# - Lorj::Data of type :list. It represents the query result.
|
219
|
+
# It contains 0 or more Lorj::Data of type :data
|
220
|
+
#
|
221
|
+
# Example: following info is the default setting. If this setting is what
|
222
|
+
# want, then info can be missed. Otherwise, set one or all of this setting
|
223
|
+
# to change the default query_single print out.
|
224
|
+
#
|
225
|
+
# info = {
|
226
|
+
# :notfound => "No %s '%s' found",
|
227
|
+
# :checkmatch => "Found 1 %s. checking exact match for '%s'.",
|
228
|
+
# :nomatch => "No %s '%s' match",
|
229
|
+
# :found => "Found %s '%s'.",
|
230
|
+
# :more => "Found several %s. Searching for '%s'.",
|
231
|
+
# :items_form => '%s',
|
232
|
+
# :items => [:name]
|
233
|
+
# }
|
234
|
+
# item_searched = 'forj'
|
235
|
+
# query = { :name => item_searched }
|
236
|
+
# query_single(:network, query, item_searched, info)
|
237
|
+
# # if no record is found
|
238
|
+
# # => Will print "No network 'forj' found"
|
239
|
+
#
|
240
|
+
# # If found one record.
|
241
|
+
# # => Will print "Found 1 network. checking exact match for 'forj'."
|
242
|
+
#
|
243
|
+
# # if found but no match the query.
|
244
|
+
# # => Will print "No network 'forj' match"
|
245
|
+
#
|
246
|
+
# # if several record is returned:
|
247
|
+
# # => Will print "Found several network. Searching for 'forj'."
|
248
|
+
#
|
249
|
+
# # Considering query should return records with at least the attribute
|
250
|
+
# # :name, if the query return the wanted record, :name should be 'forj'.
|
251
|
+
# #
|
252
|
+
# # As defined by :items and :items_form, an item string will be set
|
253
|
+
# # with format('%s', record[:name]). ie 'forj'
|
254
|
+
# # So, in this case, query_single will print "Found network 'forj'."
|
255
|
+
def query_single(sCloudObj, sQuery, name, sInfoMsg = {}) #:doc:
|
179
256
|
list = controller_query(sCloudObj, sQuery)
|
180
257
|
|
181
258
|
info = _qs_info_init(sInfoMsg)
|
@@ -263,9 +340,6 @@ module Lorj
|
|
263
340
|
end
|
264
341
|
end
|
265
342
|
|
266
|
-
# qs_info_init is not omplex as well described. Disabling rubocop
|
267
|
-
# rubocop: disable PerceivedComplexity, CyclomaticComplexity
|
268
|
-
|
269
343
|
def _qs_info_init(sInfoMsg)
|
270
344
|
info = {
|
271
345
|
:notfound => "No %s '%s' found",
|
@@ -276,13 +350,8 @@ module Lorj
|
|
276
350
|
:items_form => '%s',
|
277
351
|
:items => [:name]
|
278
352
|
}
|
279
|
-
|
280
|
-
info[
|
281
|
-
info[:nomatch] = sInfoMsg[:nomatch] if sInfoMsg.key?(:nomatch)
|
282
|
-
info[:found] = sInfoMsg[:found] if sInfoMsg.key?(:found)
|
283
|
-
info[:more] = sInfoMsg[:more] if sInfoMsg.key?(:more)
|
284
|
-
info[:items] = sInfoMsg[:items] if sInfoMsg.key?(:items)
|
285
|
-
info[:items_form] = sInfoMsg[:items_form] if sInfoMsg.key?(:items_form)
|
353
|
+
|
354
|
+
info.each { |key, _| info[key] = sInfoMsg[key] if sInfoMsg.key?(key) }
|
286
355
|
info
|
287
356
|
end
|
288
357
|
end
|
data/lib/core/lorj_data.rb
CHANGED
@@ -12,15 +12,8 @@
|
|
12
12
|
# See the License for the specific language governing permissions and
|
13
13
|
# limitations under the License.
|
14
14
|
|
15
|
-
#
|
16
|
-
#
|
17
|
-
# Those classes describes :
|
18
|
-
# - processes (BaseProcess) : How to create/delete/edit/query object.
|
19
|
-
# - controler (BaseControler) : If a provider is defined, define how will do
|
20
|
-
# object creation/etc...
|
21
|
-
# - definition(BaseDefinition): Functions to declare objects, query/data mapping
|
22
|
-
# and setup
|
23
|
-
# this task to make it to work.
|
15
|
+
# - Lorj::Data : Defines how to manage Objects data between processes,
|
16
|
+
# controllers and internally in the core of Lorj.
|
24
17
|
module Lorj
|
25
18
|
# This class is the Data object used by lorj object!
|
26
19
|
# This is a key component of lorj
|
data/lib/core/lorj_keypath.rb
CHANGED
@@ -48,9 +48,10 @@ module Lorj
|
|
48
48
|
# puts oKey.tree # => [:test,:test2,:test3]
|
49
49
|
#
|
50
50
|
class KeyPath
|
51
|
-
def initialize(sKeyPath = nil)
|
51
|
+
def initialize(sKeyPath = nil, max_level = -1)
|
52
52
|
@keypath = []
|
53
|
-
|
53
|
+
@max_level = max_level
|
54
|
+
set sKeyPath unless sKeyPath.nil?
|
54
55
|
end
|
55
56
|
|
56
57
|
def key=(sKeyPath)
|
@@ -65,6 +66,8 @@ module Lorj
|
|
65
66
|
elsif sKeyPath.is_a?(String)
|
66
67
|
@keypath = string_to_sarray(sKeyPath)
|
67
68
|
end
|
69
|
+
PrcLib.error 'key path size limit (%s) reached',
|
70
|
+
@max_level if @max_level > 0 && @keypath.length > @max_level
|
68
71
|
end
|
69
72
|
|
70
73
|
def tree # rubocop: disable TrivialAccessors
|
@@ -17,13 +17,10 @@
|
|
17
17
|
|
18
18
|
# It requires Core objects to be defined + default ForjProcess functions.
|
19
19
|
|
20
|
-
#
|
21
|
-
|
22
|
-
#
|
23
|
-
|
24
|
-
# All objects used by this process are built from a Controller
|
25
|
-
process_default :use_controller => true
|
26
|
-
end
|
20
|
+
# Common definition
|
21
|
+
class Lorj::BaseDefinition # rubocop: disable Style/ClassAndModuleChildren
|
22
|
+
# All objects used by this process are built from a Controller
|
23
|
+
process_default :use_controller => true
|
27
24
|
end
|
28
25
|
|
29
26
|
# Class to manage retry on errors before failing
|
@@ -17,6 +17,8 @@
|
|
17
17
|
|
18
18
|
# It requires Core objects to be defined + default ForjProcess functions.
|
19
19
|
|
20
|
+
# rubocop: disable Style/ClassAndModuleChildren
|
21
|
+
|
20
22
|
# Connection process code
|
21
23
|
class CloudProcess
|
22
24
|
def connect(sCloudObj, hParams)
|
@@ -36,58 +38,55 @@ class CloudProcess
|
|
36
38
|
end
|
37
39
|
end
|
38
40
|
|
39
|
-
# Define
|
40
|
-
|
41
|
-
#
|
42
|
-
|
43
|
-
|
44
|
-
# Links between objects is not predefined. To do it, use needs declaration
|
45
|
-
# in your provider class.
|
41
|
+
# Define services model
|
42
|
+
class Lorj::BaseDefinition
|
43
|
+
# predefined list of objects.
|
44
|
+
# Links between objects is not predefined. To do it, use needs declaration
|
45
|
+
# in your provider class.
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
47
|
+
# object to get list of services
|
48
|
+
# Defines Process handler to call
|
49
|
+
define_obj(:services,
|
50
50
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
51
|
+
:create_e => :connect
|
52
|
+
)
|
53
|
+
obj_needs :data, :auth_uri
|
54
|
+
obj_needs :data, :account_id
|
55
|
+
obj_needs :data, :account_key
|
56
|
+
obj_needs :data, :tenant
|
57
57
|
|
58
|
-
|
59
|
-
|
60
|
-
|
58
|
+
undefine_attribute :id # Do not return any predefined ID
|
59
|
+
undefine_attribute :name # Do not return any predefined NAME
|
60
|
+
end
|
61
61
|
|
62
|
-
|
63
|
-
|
64
|
-
|
62
|
+
# compute_connection
|
63
|
+
class Lorj::BaseDefinition
|
64
|
+
define_obj(:compute_connection,
|
65
65
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
66
|
+
:create_e => :connect # Will call ForjProcess connect
|
67
|
+
)
|
68
|
+
obj_needs :data, :account_id
|
69
|
+
obj_needs :data, :account_key
|
70
|
+
obj_needs :data, :auth_uri
|
71
|
+
obj_needs :data, :tenant
|
72
|
+
obj_needs :data, :compute
|
73
73
|
|
74
|
-
|
75
|
-
|
76
|
-
|
74
|
+
undefine_attribute :id # Do not return any predefined ID
|
75
|
+
undefine_attribute :name # Do not return any predefined NAME
|
76
|
+
end
|
77
77
|
|
78
|
-
|
79
|
-
|
80
|
-
|
78
|
+
# network_connection
|
79
|
+
class Lorj::BaseDefinition
|
80
|
+
define_obj(:network_connection,
|
81
81
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
82
|
+
:create_e => :connect
|
83
|
+
)
|
84
|
+
obj_needs :data, :account_id
|
85
|
+
obj_needs :data, :account_key
|
86
|
+
obj_needs :data, :auth_uri
|
87
|
+
obj_needs :data, :tenant
|
88
|
+
obj_needs :data, :network
|
89
89
|
|
90
|
-
|
91
|
-
|
92
|
-
end
|
90
|
+
undefine_attribute :id # Do not return any predefined ID
|
91
|
+
undefine_attribute :name # Do not return any predefined NAME
|
93
92
|
end
|