lorj 1.0.3 → 1.0.4

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