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/prc.rb CHANGED
@@ -26,7 +26,16 @@ require 'logger'
26
26
  # List of possible library settings:
27
27
  # - PrcLib.log
28
28
  #
29
- # PrcLib::Logging object. Used internally by PrcLib logging system.
29
+ # Set a logger object.
30
+ # By default, Lorj creates a Lorj::Logging object which enhance a double
31
+ # logging system (output and file at the same time)
32
+ #
33
+ # You can set your own logger system.
34
+ # This logger instance requires to have following features:
35
+ # * functions : unknown/warn/fatal/error/debug/info(message)
36
+ # * Is level functions: info?/debug?/warn?/error?/fatal?
37
+ # NOTE: Those functions are currently not used but may be used in the future
38
+ # * attribute : level
30
39
  #
31
40
  # This object is automatically created as soon as a message is printed out
32
41
  # - PrcLib.core_level
@@ -49,6 +58,8 @@ require 'logger'
49
58
  # - PrcLib.data_path
50
59
  #
51
60
  # Define the data local directory.
61
+ # This setting influences default settings for:
62
+ # PrcLib.log_file
52
63
  #
53
64
  # By default: ~/.<app_name>
54
65
  #
@@ -59,8 +70,8 @@ require 'logger'
59
70
  # - PrcLib.app_name
60
71
  #
61
72
  # Define the application name. By default 'lorj'.
62
- # By default, this setting configure PrcLib.data_path and PrcLib.pdata_path
63
- # automatically, except if you set it before.
73
+ # This setting influences default settings for:
74
+ # PrcLib.data_path, PrcLib.pdata_path and PrcLib.log_file
64
75
  #
65
76
  # ex:
66
77
  #
@@ -74,28 +85,28 @@ require 'logger'
74
85
  # Ex:
75
86
  #
76
87
  # puts PrcLib.app_defaults[:data] # To get value of the predefined :data key.
77
- # - PrcLib.log_file
78
88
  #
79
- # Define the log file name used.
80
- #
81
- # By default, defined as ~/.<app_name>/<app_name>.log
82
89
  # - PrcLib.level
83
90
  # logger level used. It can be updated at runtime.
84
91
  #
85
92
  # Ex:
86
93
  #
87
94
  # PrcLib.level = Logger::FATAL
95
+ #
88
96
  # - PrcLib.model
89
97
  #
90
98
  # Model loaded.
91
99
  #
92
100
  # - PrcLib.log_file
93
101
  #
94
- # Initialize a log file name instead of default one.
102
+ # Initialize a log file name (relative or absolute path) instead of default
103
+ # one.
104
+ # By default, defined as #{data_path}/#{app_name}.log
105
+ #
95
106
  #
96
107
  # Ex:
97
108
  #
98
- # PrcLib.log_file = "mylog.file.log"
109
+ # PrcLib.log_file = "mylog.file.log" # Relative path to the file
99
110
  #
100
111
  # - PrcLib.controller_path
101
112
  #
@@ -141,54 +152,95 @@ module PrcLib
141
152
  # Define module data for lorj library configuration
142
153
  class << self
143
154
  attr_accessor :log, :core_level
144
- attr_reader :pdata_path, :data_path, :app_defaults, :log_file, :level
155
+ attr_reader :app_defaults, :level, :lib_path
145
156
  end
146
157
 
147
158
  module_function
148
159
 
149
- def pdata_path
150
- return @pdata_path unless @pdata_path.nil?
151
- @pdata_path = File.expand_path(File.join('~', '.config', app_name))
152
- end
153
-
160
+ # Attribute app_name
161
+ #
162
+ # app_name is set to 'lorj' if not set.
163
+ #
154
164
  def app_name
155
- self.app_name = 'Lorj' unless @app_name
165
+ self.app_name = 'lorj' unless @app_name
156
166
  @app_name
157
167
  end
158
168
 
169
+ # Attribute app_name setting
170
+ #
171
+ # You can set the application name only one time
172
+ #
173
+ def app_name=(v)
174
+ @app_name = v unless @app_name
175
+ end
176
+
177
+ # Attribute pdata_path
178
+ #
179
+ # Path to a private data, like encrypted keys.
180
+ #
181
+ # It uses pdata_path= to set the default path if not set
182
+ # ~/.config/#{app_name}
183
+ def pdata_path
184
+ return @pdata_path unless @pdata_path.nil?
185
+ self.pdata_path = File.join('~', '.config', app_name)
186
+ @pdata_path
187
+ end
188
+
189
+ # Attribute pdata_path setting
190
+ #
191
+ # If path doesn't exist, it will be created with 700 rights (Unix).
192
+ #
159
193
  def pdata_path=(v)
160
194
  @pdata_path = File.expand_path(v) unless @pdata_path
161
- PrcLib.ensure_dir_exists(@pdata_path)
162
195
  begin
196
+ ensure_dir_exists(@pdata_path)
163
197
  FileUtils.chmod(0700, @pdata_path) # no-op on windows
164
198
  rescue => e
165
199
  fatal_error(1, e.message)
166
200
  end
167
201
  end
168
202
 
203
+ # Attribute data_path
204
+ #
205
+ # Path to the application data.
206
+ #
207
+ # It uses data_path= to set the default path if not set
208
+ # ~/.#{app_name}
169
209
  def data_path
170
210
  return @data_path unless @data_path.nil?
171
211
 
172
- default_path = File.join('~', '.' + app_name)
173
- @data_path = File.expand_path(default_path)
212
+ self.data_path = File.join('~', '.' + app_name)
213
+ @data_path
174
214
  end
175
215
 
216
+ # Attribute data_path setting
217
+ #
218
+ # If path doesn't exist, it will be created.
219
+ #
176
220
  def data_path=(v)
177
221
  @data_path = File.expand_path(v) unless @data_path
178
- PrcLib.ensure_dir_exists(@data_path)
179
- end
180
-
181
- def app_name=(v)
182
- @app_name = v unless @app_name
222
+ begin
223
+ ensure_dir_exists(@data_path)
224
+ rescue => e
225
+ fatal_error(1, e.message)
226
+ end
183
227
  end
184
228
 
185
229
  # TODO: Low. Be able to support multiple model.
230
+
231
+ # Lorj::Model object access.
232
+ # If the object doesn't exist, it will be created
186
233
  def model
187
234
  @model = Lorj::Model.new if @model.nil?
188
235
  @model
189
236
  end
190
237
 
191
238
  # TODO: Support for several defaults, depending on controllers loaded.
239
+
240
+ # Attribute app_defaults
241
+ #
242
+ # Used to define where the application defaults.yaml is located.
243
+ #
192
244
  def app_defaults=(v)
193
245
  return if @app_defaults
194
246
 
@@ -197,33 +249,70 @@ module PrcLib
197
249
  @app_defaults = File.expand_path(v)
198
250
  end
199
251
 
252
+ # log_file module attribute
253
+ #
254
+ # by default, log_file is nil.
255
+ # The user can define a log_file name or path
256
+ # The path is created (if possible) as soon a
257
+ # log_file is set.
258
+ # The file name is created by the logging class.
259
+ #
260
+ # *args*
261
+ # - +log file+ : absolute or relative path to a log file.
262
+ #
263
+ def log_file
264
+ return @log_file unless @log_file.nil?
265
+
266
+ self.log_file = File.join(data_path, app_name + '.log')
267
+ @log_file
268
+ end
269
+
270
+ # Attribute log_file setting
271
+ #
272
+ # It ensures that the path to the log file is created.
273
+ #
200
274
  def log_file=(v)
201
275
  file = File.basename(v)
202
276
  dir = File.dirname(File.expand_path(v))
203
- unless File.exist?(dir)
204
- fail format("'%s' doesn't exist. Unable to create file '%s'", dir, file)
205
- end
277
+ ensure_dir_exists(dir)
278
+
206
279
  @log_file = File.join(dir, file)
207
280
  end
208
281
 
282
+ # Attribute level setting
283
+ #
284
+ # Set the new output logging level
285
+ #
209
286
  def level=(v)
210
287
  @level = v
211
288
 
212
- PrcLib.level = v unless PrcLib.log.nil?
289
+ log.level = v unless log.nil?
213
290
  end
214
291
 
292
+ # Attribute lib_path setting
293
+ #
294
+ # initialize the Lorj library path
295
+ # Used by Lorj module declaration
296
+ # See lib/lorj.rb
297
+ #
298
+ # This setting cannot be updated later.
299
+ #
215
300
  def lib_path=(v)
216
301
  @lib_path = v if @lib_path.nil?
217
302
  end
218
303
 
219
- attr_reader :lib_path
304
+ # TODO: Support for updating the default controller path
305
+ # OR:
306
+ # TODO: Support for path search of controllers.
220
307
 
308
+ # Read Attribute setting for default library controller path
221
309
  def controller_path
222
310
  File.expand_path(File.join(@lib_path, 'providers'))
223
311
  end
224
312
 
313
+ # Read Attribute setting for default library model/process path
225
314
  def process_path
226
- File.join(@lib_path, 'core_process')
315
+ File.expand_path(File.join(@lib_path, 'core_process'))
227
316
  end
228
317
  end
229
318
 
@@ -20,21 +20,27 @@ module PRC
20
20
  # This class is Base config system of lorj.
21
21
  #
22
22
  # It implements basic config features:
23
- # * erase - To cleanup all data in self config
24
- # * [] - To get a value for a key or tree of keys
25
- # * []= - To set a value for a key in the tree.
26
- # * exist? - To check the existence of a value from a key
27
- # * del - To delete a key tree.
28
- # * save - To save all data in a yaml file
29
- # * load - To load data from a yaml file
30
- # * data_options - To influence on how exist?, [], []=, load and save will
31
- # behave
23
+ # * #erase - To cleanup all data in self config
24
+ # * #[] - To get a value for a key or tree of keys
25
+ # * #[]= - To set a value for a key in the tree.
26
+ # * #exist? - To check the existence of a value from a key
27
+ # * #del - To delete a key tree.
28
+ # * #save - To save all data in a yaml file
29
+ # * #load - To load data from a yaml file
30
+ # * #data_options - To influence on how exist?, [], []=, load and save will
31
+ # behave
32
32
  #
33
33
  # Config Data are managed as Hash of Hashes.
34
34
  # It uses actively Hash.rh_* functions. See rh.rb.
35
35
  class BaseConfig
36
+ # internal Hash data of this config.
37
+ # Do not use it except if you know what you are doing.
36
38
  attr_reader :data
37
- attr_reader :filename
39
+
40
+ # * *set*: set the config file name. It accepts relative or absolute path to
41
+ # the file.
42
+ # * *get*: get the config file name used by #load and #save.
43
+ attr_accessor :filename
38
44
 
39
45
  # initialize BaseConfig
40
46
  #
@@ -61,39 +67,37 @@ module PRC
61
67
  #
62
68
  # Currently, data_options implements:
63
69
  # - :data_readonly : The data cannot be updated. set will not update
64
- # the value.
70
+ # the value.
65
71
  # - :file_readonly : The file used to load data cannot be updated.
66
- # save will not update the file.
72
+ # save will not update the file.
67
73
  #
68
74
  # The child class can superseed or replace data options with their own
69
75
  # options.
70
76
  # Ex: If your child class want to introduce notion of sections,
71
77
  # you can define the following with get:
72
- # # by default, section name to use by get/set is :default
73
- # def data_options(options = {:section => :default})
74
- # _data_options(options)
75
- # end
76
78
  #
77
- # def [](*keys)
78
- # _get(@data_options[:section], *keys)
79
- # end
79
+ # class MySection < PRC::BaseConfig
80
+ # # by default, section name to use by get/set is :default
81
+ # def data_options(options = {:section => :default})
82
+ # p_data_options(options)
83
+ # end
80
84
  #
81
- # def []=(*keys, value)
82
- # _set(@data_options[:section], *keys, value)
83
- # end
85
+ # def [](*keys)
86
+ # p_get(@data_options[:section], *keys)
87
+ # end
84
88
  #
85
- # end
89
+ # def []=(*keys, value)
90
+ # p_set(@data_options[:section], *keys, value)
91
+ # end
92
+ # end
86
93
  #
87
94
  # * *Args*
88
95
  # - +keys+ : Array of key path to found
89
96
  #
90
97
  # * *Returns*
91
98
  # - boolean : true if the key path was found
92
- #
93
- # ex:
94
- # { :test => {:titi => 'found'}}
95
99
  def data_options(options = nil)
96
- _data_options options
100
+ p_data_options options
97
101
  end
98
102
 
99
103
  # exist?
@@ -107,7 +111,7 @@ module PRC
107
111
  # ex:
108
112
  # { :test => {:titi => 'found'}}
109
113
  def exist?(*keys)
110
- _exist?(*keys)
114
+ p_exist?(*keys)
111
115
  end
112
116
 
113
117
  # Erase function
@@ -130,7 +134,7 @@ module PRC
130
134
  # -
131
135
  #
132
136
  def [](*keys)
133
- _get(*keys)
137
+ p_get(*keys)
134
138
  end
135
139
 
136
140
  # Set function
@@ -148,8 +152,9 @@ module PRC
148
152
  # # => {:level1 => {:level2 => 'value'}}
149
153
 
150
154
  def del(*keys)
151
- _del(*keys)
155
+ p_del(*keys)
152
156
  end
157
+
153
158
  # Set function
154
159
  #
155
160
  # * *Args*
@@ -159,25 +164,25 @@ module PRC
159
164
  # - The value set or nil
160
165
  #
161
166
  # ex:
162
- # value = CoreConfig.New
167
+ # value = CoreConfig.New
163
168
  #
164
- # value[:level1, :level2] = 'value'
165
- # # => {:level1 => {:level2 => 'value'}}
169
+ # value[:level1, :level2] = 'value'
170
+ # # => {:level1 => {:level2 => 'value'}}
166
171
  def []=(*keys, value)
167
- _set(*keys, value)
172
+ p_set(*keys, value)
168
173
  end
169
174
 
170
175
  # Load from a file
171
176
  #
172
177
  # * *Args* :
173
178
  # - +filename+ : file name to load. This file name will become the default
174
- # file name to use next time.
179
+ # file name to use next time.
175
180
  # * *Returns* :
176
181
  # - true if loaded.
177
182
  # * *Raises* :
178
183
  # - ++ ->
179
184
  def load(filename = nil)
180
- _load(filename)
185
+ p_load(filename)
181
186
  end
182
187
 
183
188
  # Save to a file
@@ -188,7 +193,7 @@ module PRC
188
193
  # * *Returns* :
189
194
  # - boolean if saved or not. true = saved.
190
195
  def save(filename = nil)
191
- _save(filename)
196
+ p_save(filename)
192
197
  end
193
198
 
194
199
  # transform keys from string to symbol until deep level. Default is 1.
@@ -215,16 +220,17 @@ module PRC
215
220
  data.rh_key_to_symbol? level
216
221
  end
217
222
 
218
- # Update default filename.
223
+ # Redefine the file name attribute set.
219
224
  #
220
225
  # * *Args* :
221
226
  # - +filename+ : default file name to use.
222
227
  # * *Returns* :
223
228
  # - filename
224
- def filename=(filename)
229
+ def filename=(filename) #:nodoc:
225
230
  @filename = File.expand_path(filename) unless filename.nil?
226
231
  end
227
232
 
233
+ # Print a representation of the Layer data
228
234
  def to_s
229
235
  msg = format("File : %s\n", @filename)
230
236
  msg += data.to_yaml
@@ -233,37 +239,37 @@ module PRC
233
239
 
234
240
  private
235
241
 
236
- def _data_options(options = nil)
242
+ def p_data_options(options = nil)
237
243
  @data_options = options unless options.nil?
238
244
  @data_options
239
245
  end
240
246
 
241
- def _exist?(*keys)
247
+ def p_exist?(*keys)
242
248
  return nil if keys.length == 0
243
249
 
244
250
  (@data.rh_exist?(*keys))
245
251
  end
246
252
 
247
- def _get(*keys)
253
+ def p_get(*keys)
248
254
  return nil if keys.length == 0
249
255
 
250
256
  @data.rh_get(*keys)
251
257
  end
252
258
 
253
- def _del(*keys)
259
+ def p_del(*keys)
254
260
  return nil if keys.length == 0
255
261
 
256
262
  @data.rh_del(*keys)
257
263
  end
258
264
 
259
- def _set(*keys, value)
265
+ def p_set(*keys, value)
260
266
  return nil if keys.length == 0
261
- return _get(*keys) if @data_options[:data_readonly]
267
+ return p_get(*keys) if @data_options[:data_readonly]
262
268
 
263
269
  @data.rh_set(value, keys)
264
270
  end
265
271
 
266
- def _load(file = nil)
272
+ def p_load(file = nil)
267
273
  self.filename = file unless file.nil?
268
274
 
269
275
  fail 'Config filename not set.' if @filename.nil?
@@ -272,7 +278,7 @@ module PRC
272
278
  true
273
279
  end
274
280
 
275
- def _save(file = nil)
281
+ def p_save(file = nil)
276
282
  return false if @data_options[:file_readonly]
277
283
  self.filename = file unless file.nil?
278
284