lorj 1.0.3 → 1.0.4

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 (72) hide show
  1. checksums.yaml +4 -4
  2. data/example/students_1/students.rb +5 -6
  3. data/example/students_2/students.rb +4 -5
  4. data/example/students_3/students.rb +4 -5
  5. data/example/students_4/students.rb +4 -5
  6. data/example/students_5/students.rb +5 -5
  7. data/lib/core/core.rb +6 -1
  8. data/lib/core/core_controller.rb +1 -9
  9. data/lib/core/core_internal.rb +2 -1
  10. data/lib/core/core_model.rb +2 -10
  11. data/lib/core/core_object_data.rb +18 -0
  12. data/lib/core/core_object_params.rb +43 -4
  13. data/lib/core/core_process.rb +1 -9
  14. data/lib/core/core_process_setup.rb +32 -6
  15. data/lib/core/core_setup_ask.rb +41 -33
  16. data/lib/core/core_setup_encrypt.rb +29 -6
  17. data/lib/core/core_setup_init.rb +2 -2
  18. data/lib/core/definition.rb +33 -10
  19. data/lib/core/definition_internal.rb +10 -14
  20. data/lib/core/lorj_basedefinition.rb +16 -24
  21. data/lib/core/lorj_baseprocess.rb +113 -44
  22. data/lib/core/lorj_data.rb +2 -9
  23. data/lib/core/lorj_keypath.rb +5 -2
  24. data/lib/core_process/cloud/process/common.rb +4 -7
  25. data/lib/core_process/cloud/process/connection.rb +44 -45
  26. data/lib/core_process/cloud/process/external_network.rb +24 -28
  27. data/lib/core_process/cloud/process/flavor.rb +31 -34
  28. data/lib/core_process/cloud/process/images.rb +12 -15
  29. data/lib/core_process/cloud/process/internet_network.rb +13 -14
  30. data/lib/core_process/cloud/process/internet_server.rb +9 -10
  31. data/lib/core_process/cloud/process/keypairs.rb +34 -27
  32. data/lib/core_process/cloud/process/network.rb +21 -23
  33. data/lib/core_process/cloud/process/public_ip.rb +17 -18
  34. data/lib/core_process/cloud/process/router.rb +86 -92
  35. data/lib/core_process/cloud/process/rules.rb +30 -31
  36. data/lib/core_process/cloud/process/security_groups.rb +21 -22
  37. data/lib/core_process/cloud/process/server.rb +30 -31
  38. data/lib/core_process/cloud/process/server_log.rb +13 -14
  39. data/lib/core_process/cloud/process/subnetwork.rb +25 -40
  40. data/lib/logging.rb +4 -17
  41. data/lib/lorj/version.rb +1 -1
  42. data/lib/lorj.rb +2 -1
  43. data/lib/lorj_account.rb +137 -90
  44. data/lib/lorj_config.rb +13 -19
  45. data/lib/lorj_defaults.rb +46 -292
  46. data/lib/lorj_meta.rb +729 -0
  47. data/lib/prc.rb +119 -30
  48. data/lib/prc_base_config.rb +53 -47
  49. data/lib/prc_core_config.rb +837 -565
  50. data/lib/prc_section_config.rb +44 -16
  51. data/lib/providers/hpcloud/hpcloud.rb +1 -1
  52. data/lib/providers/openstack/openstack.rb +278 -21
  53. data/lib/providers/openstack/openstack_create.rb +205 -0
  54. data/lib/providers/openstack/openstack_delete.rb +28 -0
  55. data/lib/providers/openstack/openstack_get.rb +39 -0
  56. data/lib/providers/openstack/openstack_process.rb +26 -0
  57. data/lib/providers/openstack/openstack_query.rb +96 -0
  58. data/lib/providers/openstack/openstack_update.rb +35 -0
  59. data/lib/rh.rb +91 -6
  60. data/lorj-spec/defaults.yaml +18 -12
  61. data/lorj.gemspec +1 -0
  62. data/spec/01_hash_rh_spec.rb +41 -2
  63. data/spec/02_prc_base_config_spec.rb +1 -1
  64. data/spec/03_prc_section_config_spec.rb +1 -1
  65. data/spec/04_prc_core_config_spec.rb +148 -4
  66. data/spec/09_prc_spec.rb +104 -0
  67. data/spec/{00_lorj_log_spec.rb → 10_lorj_log_spec.rb} +23 -2
  68. data/spec/11_lorj_config_spec.rb +9 -27
  69. data/spec/12_lorj_account_spec.rb +36 -20
  70. data/spec/20_lorj_meta_spec.rb +271 -0
  71. data/spec/21_lorj_defaults_spec.rb +85 -0
  72. metadata +31 -4
data/lib/lorj_defaults.rb CHANGED
@@ -33,7 +33,10 @@ module Lorj
33
33
  # For setup meta data, use Lorj.defaults.get_meta,
34
34
  # Lorj.defaults.get_meta_auto or Lorj.defaults.get_meta_section
35
35
  #
36
- # defaults.yaml is divided in 3 sections:
36
+ # defaults.yaml is divided in 3 sections.
37
+ # But only defaults section is loaded in Defaults instance.
38
+ # Defaults implements a AppConfig class, which provides meta data access
39
+ # Accessible through PrcLib.appdata
37
40
  #
38
41
  # * :default: Contains a list of key = value representing the application
39
42
  # default configuration.
@@ -52,233 +55,10 @@ module Lorj
52
55
  # # => test
53
56
  #
54
57
  # * :setup: Contains :ask_step array
55
- # - :ask_step:
56
- #
57
- # Array of group of keys/values to setup. Each group will be
58
- # internally identified by a index starting at 0. parameters are as
59
- # follow:
60
- # - :desc: string to print out before group setup
61
- #
62
- # ERB template enable: To get config data in ERB context, use
63
- # config[...]
64
- #
65
- # - :explanation: longer string to display after :desc:
66
- #
67
- # It is printed out in brown color.
68
- #
69
- # It supports ERB template. To get config data, type
70
- # <%= config[...] %>
71
- #
72
- # In your defaults.yaml file, write multiline with |- after the key.
73
- #
74
- # Ex: if config['text'] returns 'text', defaults.yaml can have the
75
- # following explanation.
76
- #
77
- # [...]
78
- # :explanation: |-
79
- # My complete explanation is in
80
- # multiline <%= config['text'] %>
81
- # [...]
82
- #
83
- #
84
- # - :add: array of keys to add manually in the group. The Array can be
85
- # written with [] or list of dash elements
86
- #
87
- # Example of a defaults.yaml content:
88
- #
89
- # [...]
90
- # :ports: [22, 25]
91
- #
92
- # :ports:
93
- # - 22
94
- # - 25
95
- # [...]
96
- #
97
- # By default, thanks to data model dependency, the group is
98
- # automatically populated. So, you need update this part only for
99
- # data that are not found from the dependency.
58
+ # For details, see Lorj::MetaAppConfig
100
59
  # * :section: Contains a list of sections with several keys and attributes
101
60
  # and eventually :default:
102
- #
103
- # This list of sections and keys will be used to build the account files
104
- # with the lorj Lorj::Core.setup function.
105
- # Those data is accessible through the Lorj.defaults.get_meta,
106
- # Lorj.defaults.get_meta_auto or Lorj.defaults.get_meta_section
107
- #
108
- # Ex:
109
- # # Use Lorj.defaults.data exceptionnaly
110
- # Lorj.defaults.data.merge({sections: {:mysection: {key: {
111
- # data1: 'test1',
112
- # data2: 'test2'
113
- # }}}})
114
- #
115
- # puts Lorj.defaults.get_meta(:mysection, :key)
116
- # # => { data1: 'test1', data2: 'test2' }
117
- # puts Lorj.defaults.get_meta(:mysection)
118
- # # => {:key => { data1: 'test1', data2: 'test2' }}
119
- # puts Lorj.defaults.get_meta_section(:key)
120
- # # => :mysection
121
- # puts Lorj.defaults.get_meta_auto(:key)
122
- # # => { data1: 'test1', data2: 'test2' }
123
- #
124
- # - :default: This section define updatable data available from config.yaml.
125
- # But will never be added in an account file.
126
- #
127
- # It contains a list of key and options.
128
- #
129
- # - :<aKey>: Possible options
130
- # - :desc: default description for that <aKey>
131
- #
132
- # - :<aSectionName>: Name of the section which should contains a list
133
- # - :<aKeyName>: Name of the key to setup.
134
- # - :desc:
135
- #
136
- # Description of that key, printed out at setup time.
137
- #
138
- # - :readonly: true if this key is not modifiable by a simple
139
- #
140
- # Lorj::Account::set function. false otherwise.
141
- #
142
- # - :account_exclusive: true if the key cannot be set as default from
143
- # config.yaml or defaults.yaml.
144
- #
145
- # - :account: true to ask setup to ask this key to the user.
146
- #
147
- # - :validate: Ruby Regex to validate the end user input.
148
- #
149
- # Ex: !ruby/regexp /^\w?\w*$/
150
- #
151
- # - :default_value: default value proposed to the user.
152
- #
153
- # - :ask_step: Define the group number to attach the key to be
154
- # asked. ex: 2
155
- #
156
- # - :list_values: Provide capabililities to get a list and choose
157
- # from.
158
- #
159
- # - :query_type: Can be:
160
- #
161
- # ':query_call' to execute a query on flavor, query_params is empty
162
- # for all.
163
- #
164
- # ':process_call' to execute a process function to get the values.
165
- #
166
- # ':controller_call' to execute a controller query.
167
- #
168
- # - :object:
169
- #
170
- # Used with :query_type=:query_call. object type symbol to query.
171
- #
172
- # - :query
173
- #
174
- # Used with :query_type=:process_call. process function name to call
175
- #
176
- # - :query_call:
177
- #
178
- # Used with :query_type=:controller_call. Handler function to use.
179
- # (query_e, create_e, ...)
180
- #
181
- # Used with :query_type=:process_call. Function name to call
182
- #
183
- # - :query_params:
184
- #
185
- # Used with :query_type=:query_call. Query hash defining filtering
186
- # capabilities.
187
- #
188
- # Used with :query_type=:process_call. hParams data passed to the
189
- # process function.
190
- #
191
- # - :value:
192
- #
193
- # fields to extract for the list of objects displayed.
194
- #
195
- # - :validate:
196
- #
197
- # if :list_strict, the value is limited to the possible values from
198
- # the list
199
-
200
- # meta data are defined in defaults.yaml and loaded in Lorj::Default class
201
- # definition.
202
- # Cloud provider can redefine ForjData defaults and add some extra
203
- # parameters.
204
- # To get Application defaults, read defaults.yaml, under :sections:
205
- # Those values can be updated by the controller with define_data
206
- # <Section>:
207
- # <Data>: Required. Symbol/String. default: nil
208
- # => Data name. This symbol must be unique, across
209
- # sections.
210
- # :desc: Required. String. default: nil
211
- # => Description
212
- # :explanation: |- Print a multiline explanation before ask the key
213
- # value.
214
- # ERB template enable. To get config data,
215
- # type <%= config[...] %>
216
- # :readonly: Optional. true/false. Default: false
217
- # => oForjConfig.set() will fail if readonly is
218
- # true. It can be set, only thanks to:
219
- # - oForjConfig.setup()
220
- # or using private
221
- # - oForjConfig._set()
222
- # :account_exclusive: Optional. true/false. Default: false
223
- # => Only oConfig.account_get/set() can handle the
224
- # value
225
- # oConfig.set/get cannot.
226
- # :account: Optional. default: False
227
- # => setup will configure the account with this
228
- # <Data>
229
- # :ask_sort: Number which represents the ask order in the
230
- # step group. (See /:setup/:ask_step for details)
231
- # :after: <Data> Name of the previous <Data> to ask before the
232
- # current one.
233
- # :depends_on:
234
- # => Identify :data type required to be set before
235
- # the current one.
236
- # :default_value: Default value at setup time. This is not
237
- # necessarily the Application default value
238
- # (See /:default)
239
- # :validate: Regular expression to validate end user input
240
- # during setup.
241
- # :value_mapping: list of values to map as defined by the
242
- # controller
243
- # :controller: mapping for get controller value from process
244
- # values
245
- # <value> : <map> value map equivalence. See data_value_mapping
246
- # function
247
- # :process: mapping for get process value from controller
248
- # values
249
- # <value> : <map> value map equivalence. See data_value_mapping
250
- # function
251
- # :default: Default value. Replace /:default/<data>
252
- # :list_values: Defines a list of valid values for the current
253
- # data.
254
- # :query_type :controller_call to execute a function defined
255
- # in the controller object.
256
- # :process_call to execute a function defined in
257
- # the process object.
258
- # :values to get list of values from :values.
259
- # :object Object to load before calling the function.
260
- # Only :query_type = :*_call
261
- # :query_call Symbol. function name to call.
262
- # Only :query_type = :*_call
263
- # function must return an Array.
264
- # :query_params Hash. Controler function parameters.
265
- # Only :query_type = :*_call
266
- # :validate :list_strict. valid only if value is one of
267
- # thoselisted.
268
- # :values: to retrieve from.
269
- # otherwise define simply a list of possible
270
- # values.
271
- # :ask_step: Step number. By default, setup will determine
272
- # the step, thanks to meta lorj object
273
- # dependencies tree.
274
- # This number start at 0. Each step can be defined
275
- # by /:setup/:ask_step/<steps> list.
276
- # :pre_step_function: Process called before asking the data.
277
- # if it returns true, user interaction is
278
- # cancelled.
279
- # :post_step_function:Process called after asking the data.
280
- # if it returns false, the user is requested to
281
- # re-enter a new value.
61
+ # For details, see Lorj::MetaAppConfig
282
62
  #
283
63
  # :setup: This section describes group of fields to ask,
284
64
  # step by step.
@@ -303,39 +83,39 @@ module Lorj
303
83
  # If config doesn't exist, it will be created, empty with 'defaults:' only
304
84
 
305
85
  # Loop on Config metadata
306
- #
86
+ # This function is obsolete. Use Lorj.metadata.meta_each instead
307
87
  #
308
88
  # * *Args* :
309
- # - ++ ->
89
+ # - +code+ : Block of code on `section`, `key`, `value`
90
+ #
310
91
  # * *Returns* :
311
- # -
312
- # * *Raises* :
313
- # - ++ ->
92
+ # - nothing
314
93
  def meta_each
315
- return nil if @data.rh_get(:sections).nil?
316
-
317
- @data.rh_get(:sections).each do |section, hValue|
318
- hValue.each do |key, value|
319
- yield section, key, value
320
- end
94
+ PrcLib.debug("'Lorj.defaults.%s' is obsolete and will be removed "\
95
+ 'in Lorj 2.0. Please update your code to call '\
96
+ "'Lorj.data.%s' instead.\n%s",
97
+ __method__, 'meta_each', caller[0])
98
+ Lorj.data.meta_each do |section, key, value|
99
+ yield section, key, value
321
100
  end
322
101
  end
323
102
 
324
- #
103
+ # Check existence of the key in metadata.
104
+ # This function is obsolete. Use Lorj.metadata.auto_meta_exist? instead
105
+ # Consider also the Lorj.metadata.auto_meta_exist? which check from a
106
+ # section name, a well.
325
107
  #
326
108
  # * *Args* :
327
- # - ++ ->
109
+ # - +key+ : Key name to check.
110
+ #
328
111
  # * *Returns* :
329
- # -
330
- # * *Raises* :
331
- # - ++ ->
112
+ # - true if found, false otherwise.
332
113
  def meta_exist?(key)
333
- return nil unless key
334
-
335
- key = key.to_sym if key.class == String
336
-
337
- section = @account_section_mapping.rh_get(key)
338
- @data.rh_exist?(:sections, section, key)
114
+ PrcLib.debug("'Lorj.defaults.%s' is obsolete and will be removed "\
115
+ 'in Lorj 2.0. Please update your code to call '\
116
+ "'Lorj.data.%s' instead.\n%s",
117
+ __method__, 'auto_meta_exist?', caller[0])
118
+ Lorj.data.auto_meta_exist?(key)
339
119
  end
340
120
 
341
121
  # Get model data options. Section name is determined by the associated
@@ -352,11 +132,12 @@ module Lorj
352
132
  # - data was not found. defined in /:sections/<section>/<data
353
133
  # * *Raises* :
354
134
  # - ++ ->
355
- def get_meta_auto(*keys)
356
- return nil unless keys.length > 0
357
- section = @account_section_mapping.rh_get(keys[0])
358
- return nil if section.nil?
359
- @data.rh_get(:sections, section, keys)
135
+ def get_meta_auto(data, *options)
136
+ PrcLib.debug("'Lorj.defaults.%s' is obsolete and will be removed "\
137
+ 'in Lorj 2.0. Please update your code to call '\
138
+ "'Lorj.data.%s' instead.\n%s",
139
+ __method__, 'auto_section_data', caller[0])
140
+ Lorj.data.auto_section_data(data, *options)
360
141
  end
361
142
 
362
143
  # def get_meta_section(*keys)
@@ -379,39 +160,12 @@ module Lorj
379
160
  # - data was not found. defined in /:sections/<section>/<data
380
161
  # * *Raises* :
381
162
  # - ++ ->
382
- def get_meta(*keys)
383
- return nil unless keys.length > 1
384
- @data.rh_get(:sections, keys)
385
- end
386
-
387
- #
388
- #
389
- # * *Args* :
390
- # - ++ ->
391
- # * *Returns* :
392
- # -
393
- # * *Raises* :
394
- # - ++ ->
395
- def build_section_mapping
396
- if @data.rh_get(:sections).nil?
397
- PrcLib.warning('defaults.yaml do not defines :sections')
398
- return nil
399
- end
400
-
401
- # TODO: Support multiple identical key name on distinct sections
402
- # The primary data key should change from key to section & key.
403
- @data.rh_get(:sections).each do |section, hValue|
404
- next if section == :default
405
- hValue.each_key do |map_key|
406
- if @account_section_mapping.rh_exist?(map_key)
407
- PrcLib.fatal(1, 'defaults.yaml: Duplicate entry between sections. '\
408
- "'%s' defined in section '%s' already exists in"\
409
- " section '%s'", map_key, section,
410
- @account_section_mapping.rh_get(map_key))
411
- end
412
- @account_section_mapping.rh_set(section, map_key)
413
- end
414
- end
163
+ def get_meta(section, data, *options)
164
+ PrcLib.debug("'Lorj.defaults.%s' is obsolete and will be removed "\
165
+ 'in Lorj 2.0. Please update your code to call '\
166
+ "'Lorj.data.%s' instead.\n%s",
167
+ __method__, 'section_data', caller[0])
168
+ Lorj.data.section_data(section, data, *options)
415
169
  end
416
170
 
417
171
  #
@@ -423,8 +177,11 @@ module Lorj
423
177
  # * *Raises* :
424
178
  # - ++ ->
425
179
  def get_meta_section(key)
426
- key = key.to_sym if key.class == String
427
- @account_section_mapping.rh_get(key)
180
+ PrcLib.debug("'Lorj.defaults.%s' is obsolete and will be removed "\
181
+ 'in Lorj 2.0. Please update your code to call '\
182
+ "'Lorj.data.%s' instead.\n%s",
183
+ __method__, 'first_section', caller[0])
184
+ Lorj.data.first_section(key)
428
185
  end
429
186
 
430
187
  #
@@ -436,8 +193,6 @@ module Lorj
436
193
  # * *Raises* :
437
194
  # - ++ ->
438
195
  def load
439
- @account_section_mapping = {}
440
-
441
196
  if !PrcLib.app_defaults
442
197
  PrcLib.warning('PrcLib.app_defaults is not set. Application defaults'\
443
198
  " won't be loaded.")
@@ -447,9 +202,8 @@ module Lorj
447
202
  PrcLib.info("Reading default configuration '%s'...", @filename)
448
203
 
449
204
  if File.exist?(@filename)
450
- _load(@filename)
205
+ p_load(@filename)
451
206
 
452
- build_section_mapping
453
207
  else
454
208
  PrcLib.warning("PrcLib.app_defaults is set to '%s'. Trying to load"\
455
209
  " '%s' but not found. Application defaults won't "\