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