lorj 1.0.1 → 1.0.2
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +39 -579
- data/Rakefile +7 -0
- data/example/students_1/student_v1.md +115 -0
- data/example/students_1/students.rb +8 -2
- data/example/students_2/process/students.rb +5 -5
- data/example/students_2/student_v2.md +90 -0
- data/example/students_2/students.rb +6 -6
- data/example/students_3/controller/yaml_students.rb +23 -73
- data/example/students_3/controller/yaml_students_code.rb +106 -0
- data/example/students_3/controller/yaml_students_def.rb +69 -0
- data/example/students_3/process/students.rb +23 -157
- data/example/students_3/student_v3.md +283 -0
- data/example/students_3/students.rb +26 -83
- data/example/students_4/controller/yaml_students.rb +51 -0
- data/example/students_4/controller/yaml_students_code.rb +109 -0
- data/example/students_4/controller/yaml_students_def.rb +72 -0
- data/example/students_4/process/students/code/students.rb +103 -0
- data/example/students_4/process/students/definition/students.rb +60 -0
- data/example/students_4/process/students.rb +29 -0
- data/example/students_4/student_v4.md +191 -0
- data/example/students_4/students.rb +65 -0
- data/example/students_5/controller/yaml_students.rb +106 -0
- data/example/{students_3 → students_5}/controller/yaml_students_controller.rb +5 -3
- data/example/students_5/process/students.rb +182 -0
- data/example/students_5/student_v5.md +382 -0
- data/example/students_5/students.rb +119 -0
- data/example/yaml_students/students.rb +1 -1
- data/example/yaml_students/yaml_students.rb +102 -23
- data/lib/concept.md +3 -3
- data/lib/core/core.rb +15 -15
- data/lib/core/core_controller.rb +49 -24
- data/lib/core/core_internal.rb +2 -2
- data/lib/core/core_model.rb +13 -7
- data/lib/core/core_object_data.rb +18 -18
- data/lib/core/core_object_params.rb +75 -34
- data/lib/core/core_process.rb +104 -59
- data/lib/core/core_process_setup.rb +11 -11
- data/lib/core/core_setup_ask.rb +24 -14
- data/lib/core/core_setup_encrypt.rb +17 -15
- data/lib/core/core_setup_init.rb +19 -15
- data/lib/core/core_setup_list.rb +12 -12
- data/lib/core/definition.rb +20 -20
- data/lib/core/definition_internal.rb +20 -10
- data/lib/core/lorj_basecontroller.rb +8 -8
- data/lib/core/lorj_basedefinition.rb +47 -126
- data/lib/core/lorj_baseprocess.rb +81 -57
- data/lib/core/lorj_data.rb +28 -27
- data/lib/core/lorj_keypath.rb +1 -1
- data/lib/core_process/cloud/process/flavor.rb +3 -2
- data/lib/core_process/cloud/process/keypairs.rb +5 -4
- data/lib/core_process/cloud/process/network.rb +4 -3
- data/lib/core_process/cloud/process/public_ip.rb +3 -2
- data/lib/core_process/cloud/process/rules.rb +7 -6
- data/lib/core_process/cloud/process/security_groups.rb +1 -1
- data/lib/core_process/cloud/process/server.rb +1 -1
- data/lib/core_process/cloud/process/server_log.rb +1 -1
- data/lib/core_process/cloud/process/subnetwork.rb +4 -1
- data/lib/core_process/cloud_process.rb +1 -1
- data/lib/logging.rb +41 -48
- data/lib/lorj/version.rb +1 -1
- data/lib/lorj.rb +7 -0
- data/lib/lorj_account.rb +3 -3
- data/lib/lorj_config.rb +1 -1
- data/lib/lorj_defaults.rb +222 -26
- data/lib/overview.md +120 -0
- data/lib/prc.rb +97 -24
- data/lib/prc_core_config.rb +134 -52
- data/lib/providers/hpcloud/compute.rb +3 -3
- data/lib/providers/hpcloud/hpcloud.rb +14 -14
- data/lib/providers/hpcloud/network.rb +4 -4
- data/lib/providers/hpcloud/security_groups.rb +1 -1
- data/lib/providers/mock/mock.rb +3 -3
- data/lib/providers/openstack/openstack.rb +12 -12
- data/lib/providers/templates/compute.rb +6 -6
- data/lib/rh.rb +7 -5
- data/spec/04_prc_core_config_spec.rb +52 -0
- data/spec/11_lorj_config_spec.rb +1 -1
- metadata +21 -3
@@ -44,8 +44,9 @@ class CloudProcess
|
|
44
44
|
:more => "Found several %s. Searching for '%s'.",
|
45
45
|
:items => :public_ip
|
46
46
|
}
|
47
|
-
list = controller_query(sCloudObj, sQuery)
|
48
|
-
query_single(sCloudObj, list, sQuery, server_name, info)
|
47
|
+
# list = controller_query(sCloudObj, sQuery)
|
48
|
+
# query_single(sCloudObj, list, sQuery, server_name, info)
|
49
|
+
query_single(sCloudObj, sQuery, server_name, info)
|
49
50
|
rescue => e
|
50
51
|
retry unless ssl_error_obj.error_detected(e.message, e.backtrace, e)
|
51
52
|
end
|
@@ -30,18 +30,19 @@ class CloudProcess
|
|
30
30
|
|
31
31
|
# Process Query handler
|
32
32
|
def forj_query_rule(sCloudObj, sQuery, hParams)
|
33
|
-
rule = '%s %s:%s - %s to %s', hParams[:dir], hParams[:rule_proto],
|
34
|
-
|
35
|
-
|
33
|
+
rule = format('%s %s:%s - %s to %s', hParams[:dir], hParams[:rule_proto],
|
34
|
+
hParams[:port_min], hParams[:port_max],
|
35
|
+
hParams[:addr_map])
|
36
36
|
PrcLib.state("Searching for rule '%s'", rule)
|
37
37
|
ssl_error_obj = SSLErrorMgt.new
|
38
38
|
begin
|
39
39
|
info = {
|
40
|
-
:items => [:dir, :
|
40
|
+
:items => [:dir, :proto, :port_min, :port_max, :addr_map],
|
41
41
|
:items_form => '%s %s:%s - %s to %s'
|
42
42
|
}
|
43
|
-
list = controller_query(sCloudObj, sQuery)
|
44
|
-
query_single(sCloudObj, list, sQuery, rule, info)
|
43
|
+
# list = controller_query(sCloudObj, sQuery)
|
44
|
+
# query_single(sCloudObj, list, sQuery, rule, info)
|
45
|
+
query_single(sCloudObj, sQuery, rule, info)
|
45
46
|
rescue => e
|
46
47
|
retry unless ssl_error_obj.error_detected(e.message, e.backtrace, e)
|
47
48
|
end
|
@@ -17,7 +17,7 @@
|
|
17
17
|
# It requires Core objects to be defined + default ForjProcess functions.
|
18
18
|
|
19
19
|
# Define framework object on BaseDefinition
|
20
|
-
|
20
|
+
module Lorj
|
21
21
|
# ************************************ SERVER Console Object
|
22
22
|
# Object representing the console log attached to a server
|
23
23
|
class BaseDefinition
|
@@ -20,7 +20,10 @@
|
|
20
20
|
class CloudProcess
|
21
21
|
def forj_get_or_create_subnetwork(sCloudObj, hParams)
|
22
22
|
subnet = query_subnet_one(sCloudObj, hParams)
|
23
|
-
|
23
|
+
unless subnet.empty?
|
24
|
+
register(subnet)
|
25
|
+
return subnet
|
26
|
+
end
|
24
27
|
|
25
28
|
# Create the subnet
|
26
29
|
subnet = create_subnet(sCloudObj, hParams)
|
@@ -25,6 +25,6 @@ lorj_objects = %w(common connection network subnetwork router
|
|
25
25
|
keypairs images flavor internet_network server public_ip
|
26
26
|
server_log internet_server)
|
27
27
|
|
28
|
-
lorj_objects.each do |
|
28
|
+
lorj_objects.each do |name|
|
29
29
|
require File.join(cloud_path, 'cloud', 'process', name + '.rb')
|
30
30
|
end
|
data/lib/logging.rb
CHANGED
@@ -23,51 +23,6 @@ require 'ansi'
|
|
23
23
|
require 'ansi/logger'
|
24
24
|
|
25
25
|
#
|
26
|
-
# PrcLib module
|
27
|
-
#
|
28
|
-
# PrcLib Implements a Logging class based on logger.
|
29
|
-
#
|
30
|
-
# For details about this class capabilities, see PrcLib::Logging
|
31
|
-
#
|
32
|
-
# # To use the Prc::Logging system, do the following:
|
33
|
-
# require 'PrcLib'
|
34
|
-
#
|
35
|
-
# # To configure logging system:
|
36
|
-
# PrcLib.app_name = 'config/app' # Define application data path as
|
37
|
-
# # ~/.<app_name>.
|
38
|
-
# # Ex: 'config/app' will use ~/.config/app
|
39
|
-
# PrcLib.log_file = 'app.log' # Relative path to the log file name
|
40
|
-
# # stored in the Application data path.
|
41
|
-
# # Here, ~/.config/app/app.log
|
42
|
-
# PrcLib.level = Logger::FATAL # Define printout debug level. Can be any
|
43
|
-
# # Logger predefined value.
|
44
|
-
#
|
45
|
-
# # To log some information:
|
46
|
-
# PrcLib.debug('My debug message')
|
47
|
-
# PrcLib.info('My info message')
|
48
|
-
# PrcLib.warning('my warning')
|
49
|
-
# PrcLib.error('my error')
|
50
|
-
# PrcLib.fatal(2, "Fatal error, with return code = 2)
|
51
|
-
# PrcLib.message('Only printout message')
|
52
|
-
#
|
53
|
-
# # You can printout some instant message to the terminal, not logged.
|
54
|
-
# # This is useful before any action that will take time to be executed.
|
55
|
-
# # It is inform the end user that something is still running, which means
|
56
|
-
# # the application is not frozen
|
57
|
-
# PrcLib.state("Running a long task")
|
58
|
-
# # The next message will replace the previous state message.
|
59
|
-
# sleep(10)
|
60
|
-
# PrcLib.info("The long task has been executed successfully.")
|
61
|
-
#
|
62
|
-
# # You can change the logger level with PrcLib.level
|
63
|
-
# PrcLib.level = Logger::DEBUG
|
64
|
-
#
|
65
|
-
# # You can just print high level message (print without \n) if PrcLib.level
|
66
|
-
# is not DEBUG or INFO.
|
67
|
-
# PrcLib.high_level_msg("Print a message, not logged, if level is not DEBUG
|
68
|
-
# or INFO")
|
69
|
-
#
|
70
|
-
# Enjoy!
|
71
26
|
module PrcLib
|
72
27
|
# Class used to create 2 logger object, in order to keep track of error in a
|
73
28
|
# log file and change log output to OUTPUT on needs (option flags).
|
@@ -86,7 +41,45 @@ module PrcLib
|
|
86
41
|
# set.
|
87
42
|
# In several cases, messages are printed out, but not stored in the log file.
|
88
43
|
#
|
89
|
-
#
|
44
|
+
# To use the Prc::Logging system, do the following:
|
45
|
+
# require 'PrcLib'
|
46
|
+
#
|
47
|
+
# # To configure logging system:
|
48
|
+
# PrcLib.app_name = 'config/app' # Define application data path as
|
49
|
+
# # ~/.<app_name>.
|
50
|
+
# # Ex: 'config/app' will use ~/.config/app
|
51
|
+
# PrcLib.log_file = 'app.log' # Relative path to the log file name
|
52
|
+
# # stored in the Application data path.
|
53
|
+
# # Here, ~/.config/app/app.log
|
54
|
+
# PrcLib.level = Logger::FATAL # Define printout debug level. Can be any
|
55
|
+
# # Logger predefined value.
|
56
|
+
#
|
57
|
+
# # To log some information:
|
58
|
+
# PrcLib.debug('My %s debug message', 'test')
|
59
|
+
# PrcLib.info('My info message')
|
60
|
+
# PrcLib.warning('my warning')
|
61
|
+
# PrcLib.error('my error')
|
62
|
+
# PrcLib.fatal(2, "Fatal error, with return code = 2)
|
63
|
+
# PrcLib.message('Only printout message')
|
64
|
+
#
|
65
|
+
# # You can printout some instant message to the terminal, not logged.
|
66
|
+
# # This is useful before any action that will take time to be executed.
|
67
|
+
# # It is inform the end user that something is still running, which means
|
68
|
+
# # the application is not frozen
|
69
|
+
# PrcLib.state("Running a long task")
|
70
|
+
# # The next message will replace the previous state message.
|
71
|
+
# sleep(10)
|
72
|
+
# PrcLib.info("The long task has been executed successfully.")
|
73
|
+
#
|
74
|
+
# # You can change the logger level with PrcLib.level
|
75
|
+
# PrcLib.level = Logger::DEBUG
|
76
|
+
#
|
77
|
+
# # You can just print high level message (print without \n)
|
78
|
+
# # if PrcLib.level is not DEBUG or INFO.
|
79
|
+
# PrcLib.high_level_msg("Print a message, not logged, if level is not DEBUG
|
80
|
+
# # or INFO")
|
81
|
+
#
|
82
|
+
# For details, see Logging functions
|
90
83
|
#
|
91
84
|
class Logging
|
92
85
|
attr_reader :level
|
@@ -155,7 +148,7 @@ module PrcLib
|
|
155
148
|
# Log to STDOUT and Log file and ERROR class message
|
156
149
|
def error(message)
|
157
150
|
@out_logger.error(message + ANSI.clear_eol)
|
158
|
-
@file_logger.error(message)
|
151
|
+
@file_logger.error(message + "\n" + caller.join("\n"))
|
159
152
|
end
|
160
153
|
|
161
154
|
# Log to STDOUT and Log file and FATAL class message
|
@@ -250,7 +243,7 @@ module PrcLib
|
|
250
243
|
|
251
244
|
# Internal heap management to help controller developper to identify issue.
|
252
245
|
def dcl_fail(msg, *p)
|
253
|
-
msg = "Declaration error:\n
|
246
|
+
msg = "Declaration error:\n" + msg
|
254
247
|
msg += format("\nSee at %s",
|
255
248
|
PrcLib.model.heap[0]) if PrcLib.model.heap.is_a?(Array)
|
256
249
|
runtime_fail(msg, *p)
|
data/lib/lorj/version.rb
CHANGED
data/lib/lorj.rb
CHANGED
@@ -35,9 +35,16 @@ require 'lorj_account.rb' # Lorj::Account class - account config
|
|
35
35
|
|
36
36
|
require 'core/core_internal' # Lorj Core class private init. functions
|
37
37
|
require 'core/core' # Lorj Core class
|
38
|
+
require 'core/core_object_params' # Lorj Internal core class
|
38
39
|
require 'core/core_model' # Lorj Model class
|
39
40
|
require 'core/core_process' # Lorj core process functions
|
41
|
+
require 'core/core_process_setup' # Lorj core process setup
|
42
|
+
require 'core/core_setup_ask' # Lorj core setup ask functions
|
43
|
+
require 'core/core_setup_encrypt' # Lorj core setup encrypt functions
|
44
|
+
require 'core/core_setup_init' # Lorj core setup init functions
|
45
|
+
require 'core/core_setup_list' # Lorj core setup list functions
|
40
46
|
require 'core/core_controller' # Lorj core controller functions
|
47
|
+
|
41
48
|
require 'core/core_object_data' # Lorj ObjectData class
|
42
49
|
require 'core/lorj_data' # Lorj Lorj::Data object
|
43
50
|
require 'core/lorj_basedefinition' # Lorj Lorj::BaseDefinition object
|
data/lib/lorj_account.rb
CHANGED
@@ -502,9 +502,9 @@ module Lorj
|
|
502
502
|
index = layer_index(options[:name]) if options.key?(:name)
|
503
503
|
|
504
504
|
indexes = exclusive_indexes(account_exclusive)
|
505
|
-
options[:indexes] = indexes
|
506
|
-
|
507
505
|
indexes = [index] if !index.nil? && indexes.include?(index)
|
506
|
+
|
507
|
+
options[:indexes] = indexes
|
508
508
|
indexes
|
509
509
|
end
|
510
510
|
|
@@ -553,7 +553,7 @@ module Lorj
|
|
553
553
|
|
554
554
|
def index_to_update(layer_name, key, section)
|
555
555
|
indexes = [0] # choose runtime by default.
|
556
|
-
indexes =
|
556
|
+
indexes = layer_indexes([layer_name]) unless layer_name.nil?
|
557
557
|
|
558
558
|
if layer_name.nil?
|
559
559
|
# Return runtime layer, if layer requested is not updatable.
|
data/lib/lorj_config.rb
CHANGED
data/lib/lorj_defaults.rb
CHANGED
@@ -23,29 +23,107 @@ require 'yaml'
|
|
23
23
|
module Lorj
|
24
24
|
# This class is the Application configuration class used by Lorj::Config
|
25
25
|
#
|
26
|
-
# It
|
26
|
+
# It loads a defaults.yaml file (path defined by PrcLib::app_defaults)
|
27
|
+
#
|
28
|
+
# The defaults.yaml data is accessible through Lorj.defaults.data
|
29
|
+
# Use this capability with caution, as it contents is R/W.
|
30
|
+
#
|
31
|
+
# For getting Application defaults, use Lorj::Config[]
|
32
|
+
# or Lorj::Account[], Lorj::Account.get(key, nil, :names => ['default'])
|
33
|
+
# For setup meta data, use Lorj.defaults.get_meta,
|
34
|
+
# Lorj.defaults.get_meta_auto or Lorj.defaults.get_meta_section
|
27
35
|
#
|
28
36
|
# defaults.yaml is divided in 3 sections:
|
29
37
|
#
|
30
|
-
# * :default: Contains a list of key = value
|
38
|
+
# * :default: Contains a list of key = value representing the application
|
39
|
+
# default configuration.
|
40
|
+
#
|
41
|
+
# Data stored in this section are accessible through Lorj::Config[]
|
42
|
+
# or Lorj::Account[], Lorj::Account.get(key, nil, :names => ['default'])
|
43
|
+
#
|
44
|
+
# Ex:
|
45
|
+
# # Use Lorj.defaults.data exceptionnaly
|
46
|
+
# Lorj.defaults.data.merge(:default => { data: 'test'}})
|
47
|
+
#
|
48
|
+
# config = Lorj::Account.new
|
49
|
+
# puts config.get(:data, nil, :names => ['default'])
|
50
|
+
# # => test
|
51
|
+
# puts Lorj.defaults[:data]
|
52
|
+
# # => test
|
53
|
+
#
|
31
54
|
# * :setup: Contains :ask_step array
|
32
|
-
# - :ask_step:
|
33
|
-
#
|
34
|
-
#
|
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:
|
35
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
|
+
#
|
36
65
|
# - :explanation: longer string to display after :desc:
|
37
|
-
#
|
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
|
+
# [...]
|
38
96
|
#
|
39
97
|
# By default, thanks to data model dependency, the group is
|
40
|
-
# automatically populated.
|
98
|
+
# automatically populated. So, you need update this part only for
|
99
|
+
# data that are not found from the dependency.
|
100
|
+
# * :section: Contains a list of sections with several keys and attributes
|
101
|
+
# and eventually :default:
|
41
102
|
#
|
42
|
-
# * :section: Contains a list of sections contains several key and attributes
|
43
|
-
# and eventually :default:
|
44
103
|
# This list of sections and keys will be used to build the account files
|
45
|
-
# with the lorj Lorj::Core
|
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' }
|
46
123
|
#
|
47
124
|
# - :default: This section define updatable data available from config.yaml.
|
48
|
-
#
|
125
|
+
# But will never be added in an account file.
|
126
|
+
#
|
49
127
|
# It contains a list of key and options.
|
50
128
|
#
|
51
129
|
# - :<aKey>: Possible options
|
@@ -53,20 +131,31 @@ module Lorj
|
|
53
131
|
#
|
54
132
|
# - :<aSectionName>: Name of the section which should contains a list
|
55
133
|
# - :<aKeyName>: Name of the key to setup.
|
56
|
-
# - :desc:
|
57
|
-
#
|
134
|
+
# - :desc:
|
135
|
+
#
|
136
|
+
# Description of that key, printed out at setup time.
|
137
|
+
#
|
58
138
|
# - :readonly: true if this key is not modifiable by a simple
|
59
|
-
#
|
139
|
+
#
|
140
|
+
# Lorj::Account::set function. false otherwise.
|
141
|
+
#
|
60
142
|
# - :account_exclusive: true if the key cannot be set as default from
|
61
|
-
#
|
143
|
+
# config.yaml or defaults.yaml.
|
144
|
+
#
|
62
145
|
# - :account: true to ask setup to ask this key to the user.
|
146
|
+
#
|
63
147
|
# - :validate: Ruby Regex to validate the end user input.
|
64
|
-
#
|
148
|
+
#
|
149
|
+
# Ex: !ruby/regexp /^\w?\w*$/
|
150
|
+
#
|
65
151
|
# - :default_value: default value proposed to the user.
|
152
|
+
#
|
66
153
|
# - :ask_step: Define the group number to attach the key to be
|
67
|
-
#
|
154
|
+
# asked. ex: 2
|
155
|
+
#
|
68
156
|
# - :list_values: Provide capabililities to get a list and choose
|
69
|
-
#
|
157
|
+
# from.
|
158
|
+
#
|
70
159
|
# - :query_type: Can be:
|
71
160
|
#
|
72
161
|
# ':query_call' to execute a query on flavor, query_params is empty
|
@@ -99,10 +188,112 @@ module Lorj
|
|
99
188
|
# Used with :query_type=:process_call. hParams data passed to the
|
100
189
|
# process function.
|
101
190
|
#
|
102
|
-
# - :value:
|
103
|
-
#
|
104
|
-
#
|
105
|
-
#
|
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.
|
282
|
+
#
|
283
|
+
# :setup: This section describes group of fields to ask,
|
284
|
+
# step by step.
|
285
|
+
# :ask_step: Define an Array of setup steps to ask to the
|
286
|
+
# end user. The step order is respected, and
|
287
|
+
# start at 0
|
288
|
+
# - :desc: Define the step description. ERB template
|
289
|
+
# enable. To get config data, type config[...]
|
290
|
+
# :explanation: |- Define a multiline explanation. This is printed
|
291
|
+
# out in brown color.
|
292
|
+
# ERB template enable. To get config data, type
|
293
|
+
# <%= config[...] %>
|
294
|
+
# :add: Define a list of additionnal fields to ask.
|
295
|
+
# - <Data> Data to ask.
|
296
|
+
#
|
106
297
|
class Defaults < PRC::SectionConfig
|
107
298
|
# Remove inherited method []=
|
108
299
|
def []=(*_keys, _value)
|
@@ -123,8 +314,8 @@ module Lorj
|
|
123
314
|
def meta_each
|
124
315
|
return nil if @data.rh_get(:sections).nil?
|
125
316
|
|
126
|
-
@data.rh_get(:sections).each do |
|
127
|
-
hValue.each do |
|
317
|
+
@data.rh_get(:sections).each do |section, hValue|
|
318
|
+
hValue.each do |key, value|
|
128
319
|
yield section, key, value
|
129
320
|
end
|
130
321
|
end
|
@@ -168,6 +359,11 @@ module Lorj
|
|
168
359
|
@data.rh_get(:sections, section, keys)
|
169
360
|
end
|
170
361
|
|
362
|
+
# def get_meta_section(*keys)
|
363
|
+
# return nil unless keys.length > 0
|
364
|
+
# @account_section_mapping.rh_get(keys[0])
|
365
|
+
# end
|
366
|
+
|
171
367
|
# Get model section/data options.
|
172
368
|
#
|
173
369
|
# * *Args* :
|
@@ -204,9 +400,9 @@ module Lorj
|
|
204
400
|
|
205
401
|
# TODO: Support multiple identical key name on distinct sections
|
206
402
|
# The primary data key should change from key to section & key.
|
207
|
-
@data.rh_get(:sections).each do |
|
403
|
+
@data.rh_get(:sections).each do |section, hValue|
|
208
404
|
next if section == :default
|
209
|
-
hValue.each_key do |
|
405
|
+
hValue.each_key do |map_key|
|
210
406
|
if @account_section_mapping.rh_exist?(map_key)
|
211
407
|
PrcLib.fatal(1, 'defaults.yaml: Duplicate entry between sections. '\
|
212
408
|
"'%s' defined in section '%s' already exists in"\
|