lorj 0.2.0 → 1.0.0
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/.rubocop.yml +46 -0
- data/Gemfile +15 -15
- data/README.md +22 -17
- data/Rakefile +12 -2
- data/bin/cloud_test.rb +13 -65
- data/example/students_1/process/students.rb +39 -0
- data/example/students_1/students.rb +22 -5
- data/example/students_2/process/students.rb +48 -0
- data/example/students_2/students.rb +39 -16
- data/example/students_3/controller/yaml_students.rb +50 -43
- data/example/students_3/controller/yaml_students_controller.rb +100 -87
- data/example/students_3/process/students.rb +161 -97
- data/example/students_3/students.rb +85 -56
- data/example/yaml_students/students.rb +40 -40
- data/example/yaml_students/yaml_students.rb +103 -90
- data/lib/core/core.rb +356 -696
- data/lib/core/core_controller.rb +227 -0
- data/lib/core/core_internal.rb +339 -0
- data/lib/core/core_model.rb +328 -0
- data/lib/core/core_object_data.rb +330 -0
- data/lib/core/core_object_params.rb +230 -0
- data/lib/core/core_process.rb +391 -0
- data/lib/core/core_process_setup.rb +353 -0
- data/lib/core/core_setup_ask.rb +241 -0
- data/lib/core/core_setup_encrypt.rb +146 -0
- data/lib/core/core_setup_init.rb +229 -0
- data/lib/core/core_setup_list.rb +160 -0
- data/lib/core/definition.rb +647 -469
- data/lib/core/definition_internal.rb +264 -308
- data/lib/core/lorj_basecontroller.rb +95 -0
- data/lib/core/lorj_basedefinition.rb +307 -0
- data/lib/core/lorj_baseprocess.rb +265 -0
- data/lib/core/lorj_data.rb +583 -0
- data/lib/core/lorj_keypath.rb +119 -0
- data/lib/core_process/cloud/process/common.rb +63 -0
- data/lib/core_process/cloud/process/connection.rb +93 -0
- data/lib/core_process/cloud/process/external_network.rb +94 -0
- data/lib/core_process/cloud/process/flavor.rb +99 -0
- data/lib/core_process/cloud/process/images.rb +87 -0
- data/lib/core_process/cloud/process/internet_network.rb +34 -0
- data/lib/core_process/cloud/process/internet_server.rb +30 -0
- data/lib/core_process/cloud/process/keypairs.rb +276 -0
- data/lib/core_process/cloud/process/network.rb +108 -0
- data/lib/core_process/cloud/process/public_ip.rb +100 -0
- data/lib/core_process/cloud/process/router.rb +260 -0
- data/lib/core_process/cloud/process/rules.rb +120 -0
- data/lib/core_process/cloud/process/security_groups.rb +121 -0
- data/lib/core_process/cloud/process/server.rb +127 -0
- data/lib/core_process/cloud/process/server_log.rb +35 -0
- data/lib/core_process/cloud/process/subnetwork.rb +108 -0
- data/lib/core_process/cloud_process.rb +30 -0
- data/lib/logging.rb +298 -0
- data/lib/lorj/version.rb +18 -1
- data/lib/lorj.rb +58 -18
- data/lib/lorj_account.rb +556 -0
- data/lib/lorj_config.rb +468 -0
- data/lib/lorj_defaults.rb +278 -0
- data/lib/prc.rb +136 -104
- data/lib/prc_base_config.rb +285 -0
- data/lib/prc_core_config.rb +878 -0
- data/lib/prc_section_config.rb +57 -0
- data/lib/providers/hpcloud/compute.rb +81 -93
- data/lib/providers/hpcloud/hpcloud.rb +462 -0
- data/lib/providers/hpcloud/network.rb +96 -98
- data/lib/providers/hpcloud/security_groups.rb +41 -40
- data/lib/providers/mock/mock.rb +144 -0
- data/lib/providers/openstack/openstack.rb +45 -0
- data/lib/providers/templates/compute.rb +21 -23
- data/lib/providers/templates/mycloud.rb +72 -0
- data/lib/providers/templates/network.rb +11 -12
- data/lib/rh.rb +339 -0
- data/lorj-spec/defaults.yaml +4 -0
- data/lorj.gemspec +6 -0
- data/spec/00_lorj_log_spec.rb +53 -0
- data/spec/01_hash_rh_spec.rb +243 -0
- data/spec/02_prc_base_config_spec.rb +216 -0
- data/spec/04_prc_core_config_spec.rb +83 -0
- data/spec/11_lorj_config_spec.rb +263 -0
- data/spec/12_lorj_account_spec.rb +181 -0
- metadata +76 -28
- data/Gemfile.lock +0 -37
- data/example/students_1/process/Students.rb +0 -20
- data/example/students_2/process/Students.rb +0 -27
- data/example/students_4/controller/yaml_students.rb +0 -82
- data/example/students_4/controller/yaml_students_controller.rb +0 -141
- data/example/students_4/process/students.rb +0 -112
- data/example/students_4/students.rb +0 -103
- data/lib/core/lorj-basecontroller.rb +0 -90
- data/lib/core/lorj-basedefinition.rb +0 -1139
- data/lib/core/lorj-baseprocess.rb +0 -236
- data/lib/core/lorj-data.rb +0 -567
- data/lib/core/lorj-keypath.rb +0 -115
- data/lib/core_process/CloudProcess.rb +0 -337
- data/lib/core_process/global_process.rb +0 -502
- data/lib/core_process/network_process.rb +0 -605
- data/lib/prc-account.rb +0 -339
- data/lib/prc-config.rb +0 -1030
- data/lib/prc-logging.rb +0 -261
- data/lib/providers/hpcloud/Hpcloud.rb +0 -426
- data/lib/providers/mock/Mock.rb +0 -141
- data/lib/providers/openstack/Openstack.rb +0 -47
- data/lib/providers/templates/core.rb +0 -61
- data/spec/forj-account_spec.rb +0 -75
- data/spec/forj-config_spec.rb +0 -196
data/lib/lorj_account.rb
ADDED
|
@@ -0,0 +1,556 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# encoding: UTF-8
|
|
3
|
+
|
|
4
|
+
# (c) Copyright 2014 Hewlett-Packard Development Company, L.P.
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
|
|
18
|
+
require 'rubygems'
|
|
19
|
+
|
|
20
|
+
module Lorj
|
|
21
|
+
# Simple List of accounts class.
|
|
22
|
+
class Accounts
|
|
23
|
+
# Class to query FORJ Accounts list.
|
|
24
|
+
def initialize
|
|
25
|
+
@account_path = File.join(PrcLib.data_path, 'accounts')
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def dump
|
|
29
|
+
accounts = []
|
|
30
|
+
Dir.foreach(@account_path) do |x|
|
|
31
|
+
accounts << x unless x.match(/^\..?$/)
|
|
32
|
+
end
|
|
33
|
+
accounts
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
module Lorj
|
|
39
|
+
# AccountConfig class layer
|
|
40
|
+
class AccountConfig < PRC::SectionConfig
|
|
41
|
+
# Function to initialize read only account attribute.
|
|
42
|
+
def ac_new(account_name, provider = 'lorj')
|
|
43
|
+
@data = {}
|
|
44
|
+
data_options :section => :account
|
|
45
|
+
self[:name] = account_name
|
|
46
|
+
self[:provider] = provider
|
|
47
|
+
true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def data_options(options = { :section => :default })
|
|
51
|
+
_data_options(options)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
module Lorj
|
|
57
|
+
# Lorj::Account manage a list of key/value grouped by section.
|
|
58
|
+
# The intent of Lorj::Account is to attach some keys/values to
|
|
59
|
+
# an account to help end users to switch between accounts.
|
|
60
|
+
#
|
|
61
|
+
# Lorj::Account is based on Lorj::Config (see lorj-config.rb)
|
|
62
|
+
# This ensure ForjConfig and Lorj::Account defines following common functions
|
|
63
|
+
# - set or []= (key, value)
|
|
64
|
+
# - get or [] (key)
|
|
65
|
+
#
|
|
66
|
+
# Those function do not expose any section name.
|
|
67
|
+
# It means, that keys have to be unique across sections.
|
|
68
|
+
# Sections are defined in the application defaults.yaml, under sections
|
|
69
|
+
# :sections.
|
|
70
|
+
#
|
|
71
|
+
# defaults.yaml structure is:
|
|
72
|
+
# sections:
|
|
73
|
+
# default: => defines key/values recognized by Lorj::Account to be only
|
|
74
|
+
# managed by ForjConfig.
|
|
75
|
+
# <key> :
|
|
76
|
+
# :desc : <value> => defines the ForjConfig key description.
|
|
77
|
+
# <section>: Define a section name. For each keys on this section, the
|
|
78
|
+
# account file will kept those data under this section.
|
|
79
|
+
# <key>:
|
|
80
|
+
# :desc: defines the key description.
|
|
81
|
+
# :readonly: true if this key cannot be updated by
|
|
82
|
+
# Lorj::Account.set
|
|
83
|
+
# :account_exclusive: true if this key cannot be predefined on
|
|
84
|
+
# ForjConfig keys list
|
|
85
|
+
# :default: *OBSOLETE*. It will be removed soon
|
|
86
|
+
# default values have to be defined as
|
|
87
|
+
# :default_value instead of /:default/<key>
|
|
88
|
+
# <ForjConfig real key name> Used to map the
|
|
89
|
+
# Lorj::Account key to a different ForjConfig key
|
|
90
|
+
# name.
|
|
91
|
+
# :default_value: default application value for this key.
|
|
92
|
+
# ':default_value' superseed /:default/<key>/<value>
|
|
93
|
+
# name.
|
|
94
|
+
#
|
|
95
|
+
# Currently, this class derived from Lorj::Config
|
|
96
|
+
# defines the following functions:
|
|
97
|
+
# where? exist?, get or [], set or []=, save and load.
|
|
98
|
+
#
|
|
99
|
+
# exist?, get uses the config layers to get data. By default, the order is:
|
|
100
|
+
# - runtime : get the data from runtime (runtimeSet/runtime_get)
|
|
101
|
+
# - Account : otherwise, get data from account file under section
|
|
102
|
+
# described in defaults.yaml (:account_section_mapping), as
|
|
103
|
+
# soon as this mapping exists.
|
|
104
|
+
# - local : otherwise, get the data from the local configuration file.
|
|
105
|
+
# Usually ~/.forj/config.yaml
|
|
106
|
+
# - application: otherwise, get the data from defaults.yaml (class Default)
|
|
107
|
+
class Account < Lorj::Config
|
|
108
|
+
attr_reader :account_name
|
|
109
|
+
|
|
110
|
+
# This object manage data located in oConfig[:hpc_accounts/AccountName]
|
|
111
|
+
|
|
112
|
+
# The class new accept to provide a local config file different than
|
|
113
|
+
# standard one configured by PrcLib.app_path/.config.yaml
|
|
114
|
+
def initialize(config_name = nil)
|
|
115
|
+
config_layers = []
|
|
116
|
+
|
|
117
|
+
# Application layer
|
|
118
|
+
config_layers << define_default_layer
|
|
119
|
+
|
|
120
|
+
# Local Config layer
|
|
121
|
+
config_layers << define_local_layer
|
|
122
|
+
|
|
123
|
+
# Account config layer
|
|
124
|
+
config_layers << define_account_layer
|
|
125
|
+
|
|
126
|
+
# runtime Config layer
|
|
127
|
+
config_layers << define_runtime_layer
|
|
128
|
+
|
|
129
|
+
Lorj.defaults.load # Loading global application defaults
|
|
130
|
+
|
|
131
|
+
if PrcLib.data_path.nil?
|
|
132
|
+
PrcLib.fatal(1, 'Internal PrcLib.data_path was not set.')
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
initialize_local(config_layers[1][:config], config_name)
|
|
136
|
+
|
|
137
|
+
initialize_account
|
|
138
|
+
|
|
139
|
+
initialize_layers(config_layers)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# get function.
|
|
143
|
+
# If the Application meta data option of the key is set with
|
|
144
|
+
# :account_exclusive => true, get will limit to runtime then account.
|
|
145
|
+
# otherwise, search in all layers.
|
|
146
|
+
#
|
|
147
|
+
# * *Args* :
|
|
148
|
+
# - +key+ : key name. It do not support it to be a key tree (Arrays of
|
|
149
|
+
# keys).
|
|
150
|
+
# - +default+ : default value, if not found.
|
|
151
|
+
# - +options+ : Options for get:
|
|
152
|
+
# - +:section+ : Get will use this section name instead of searching it.
|
|
153
|
+
# - +:name+ : layer to exclusively get data.
|
|
154
|
+
# - +:indexes+ : layer index to exclusively get data.
|
|
155
|
+
# If neither :name or :index is set, get will search
|
|
156
|
+
# data on all predefined layers, first found.
|
|
157
|
+
# * *Returns* :
|
|
158
|
+
# - key value.
|
|
159
|
+
# * *Raises* :
|
|
160
|
+
# Nothing
|
|
161
|
+
def get(key, default = nil, options = {})
|
|
162
|
+
key = key.to_sym if key.class == String
|
|
163
|
+
options = {} unless options.is_a?(Hash)
|
|
164
|
+
|
|
165
|
+
section = options[:section]
|
|
166
|
+
section = Lorj.defaults.get_meta_section(key) if section.nil?
|
|
167
|
+
|
|
168
|
+
options = { :keys => [key], :section => section }
|
|
169
|
+
|
|
170
|
+
indexes = _identify_indexes(options, exclusive?(key, section))
|
|
171
|
+
|
|
172
|
+
options[:data_options] = _set_data_options_per_indexes(indexes)
|
|
173
|
+
|
|
174
|
+
return _get(options) if _exist?(options)
|
|
175
|
+
|
|
176
|
+
default
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def [](key, default = nil)
|
|
180
|
+
get(key, default)
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# where? function.
|
|
184
|
+
# If the Application meta data option of the key is set with
|
|
185
|
+
# :account_exclusive => true, get will limit to runtime then account.
|
|
186
|
+
# otherwise, search in all layers.
|
|
187
|
+
#
|
|
188
|
+
# * *Args* :
|
|
189
|
+
# - +key+ : key name. It do not support it to be a key tree (Arrays of
|
|
190
|
+
# keys).
|
|
191
|
+
# - +default+ : default value, if not found.
|
|
192
|
+
# * *Returns* :
|
|
193
|
+
# - key value.
|
|
194
|
+
# * *Raises* :
|
|
195
|
+
# Nothing
|
|
196
|
+
def where?(key, section = nil)
|
|
197
|
+
key = key.to_sym if key.class == String
|
|
198
|
+
|
|
199
|
+
section = Lorj.defaults.get_meta_section(key) if section.nil?
|
|
200
|
+
|
|
201
|
+
options = { :keys => [key], :section => section }
|
|
202
|
+
|
|
203
|
+
account_exclusive = exclusive?(key, section)
|
|
204
|
+
if account_exclusive
|
|
205
|
+
indexes = [0, 1]
|
|
206
|
+
options[:indexes] = indexes
|
|
207
|
+
else
|
|
208
|
+
indexes = [0, 1, 2, 3]
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
options[:data_options] = _set_data_options_per_indexes(indexes)
|
|
212
|
+
|
|
213
|
+
_where?(options)
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# check key/value existence in config layers
|
|
217
|
+
#
|
|
218
|
+
# * *Args* :
|
|
219
|
+
# - +key+ : key name. It do not support it to be a key tree (Arrays of
|
|
220
|
+
# keys).
|
|
221
|
+
# - +options+ : possible options:
|
|
222
|
+
# - +:section+ : Force to use a specific section name.
|
|
223
|
+
# - +:name+ : layer to exclusively get data.
|
|
224
|
+
# - +:indexes+ : layer index to exclusively get data.
|
|
225
|
+
# If neither :name or :index is set, get will search
|
|
226
|
+
# data on all predefined layers, first found.
|
|
227
|
+
#
|
|
228
|
+
# * *Returns* :
|
|
229
|
+
# - 'runtime' : if found in runtime.
|
|
230
|
+
# - '<AccountName>' : if found in the Account data structure.
|
|
231
|
+
# - 'local' : if found in the local configuration file.
|
|
232
|
+
# Usually ~/.forj/config.yaml
|
|
233
|
+
# - 'default' : if found in the Application default
|
|
234
|
+
# (File 'defaults.yaml') (class Default)
|
|
235
|
+
# * *Raises* :
|
|
236
|
+
# Nothing
|
|
237
|
+
def exist?(key, options = nil)
|
|
238
|
+
key = key.to_sym if key.class == String
|
|
239
|
+
options = {} unless options.is_a?(Hash)
|
|
240
|
+
|
|
241
|
+
section = options[:section]
|
|
242
|
+
section = Lorj.defaults.get_meta_section(key) if section.nil?
|
|
243
|
+
options = { :keys => [key], :section => section }
|
|
244
|
+
|
|
245
|
+
indexes = _identify_indexes(options, exclusive?(key, section))
|
|
246
|
+
|
|
247
|
+
options[:data_options] = _set_data_options_per_indexes(indexes)
|
|
248
|
+
|
|
249
|
+
_exist?(options)
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
# Return true if readonly. set won't be able to update this value.
|
|
253
|
+
# Only _set (private function) is able.
|
|
254
|
+
#
|
|
255
|
+
# * *Args* :
|
|
256
|
+
# - +key+ : key name. It can support it to be a key tree (Arrays of
|
|
257
|
+
# keys).
|
|
258
|
+
# - +section+ : optionnal. If missing the section name is determined by
|
|
259
|
+
# the data name associated
|
|
260
|
+
# * *Returns* :
|
|
261
|
+
# - true/false : readonly value
|
|
262
|
+
# OR
|
|
263
|
+
# - nil if:
|
|
264
|
+
# - section was not found
|
|
265
|
+
def readonly?(key, section = nil)
|
|
266
|
+
return nil unless key
|
|
267
|
+
|
|
268
|
+
key = key.to_sym if key.class == String
|
|
269
|
+
section = Lorj.defaults.get_meta_section(key) if section.nil?
|
|
270
|
+
|
|
271
|
+
return nil if section.nil?
|
|
272
|
+
|
|
273
|
+
result = Lorj.defaults.get_meta(section, key, :readonly)
|
|
274
|
+
return result if result.boolean?
|
|
275
|
+
false
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
# Return true if exclusive
|
|
279
|
+
# set won't be able to update this value.
|
|
280
|
+
# Only _set (private function) is able.
|
|
281
|
+
#
|
|
282
|
+
# * *Args* :
|
|
283
|
+
# - +key+ : key name. It can support it to be a key tree (Arrays of
|
|
284
|
+
# keys).
|
|
285
|
+
# - +section+ : optionnal. If missing the section name is determined by
|
|
286
|
+
# the data name associated
|
|
287
|
+
# * *Returns* :
|
|
288
|
+
# - true/false : readonly value
|
|
289
|
+
# OR
|
|
290
|
+
# - nil if:
|
|
291
|
+
# - section was not found
|
|
292
|
+
def exclusive?(key, section = nil)
|
|
293
|
+
return nil unless key
|
|
294
|
+
|
|
295
|
+
key = key.to_sym if key.class == String
|
|
296
|
+
section = Lorj.defaults.get_meta_section(key) if section.nil?
|
|
297
|
+
|
|
298
|
+
return nil if section.nil?
|
|
299
|
+
result = Lorj.defaults.get_meta(section, key,
|
|
300
|
+
:account_exclusive)
|
|
301
|
+
return result if result.boolean?
|
|
302
|
+
result
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
# This function update a section/key=value if the account structure is
|
|
306
|
+
# defined.
|
|
307
|
+
# If no section is defined, set it in runtime config.
|
|
308
|
+
#
|
|
309
|
+
# * *Args* :
|
|
310
|
+
# - +key+ : key name. It do not support it to be a key tree (Arrays of
|
|
311
|
+
# keys).
|
|
312
|
+
# - +value+ : value to set
|
|
313
|
+
# - +options+ : possible options:
|
|
314
|
+
# - +:section+ : Force to use a specific section name.
|
|
315
|
+
# - +:name+ : layer to exclusively get data.
|
|
316
|
+
# - +:indexes+ : layer index to exclusively get data.
|
|
317
|
+
# If neither :name or :index is set, set will use the
|
|
318
|
+
# 'runtime' layer.
|
|
319
|
+
#
|
|
320
|
+
# * *Returns* :
|
|
321
|
+
# - the value set
|
|
322
|
+
# OR
|
|
323
|
+
# - nil if:
|
|
324
|
+
# - lorj data model set this key as readonly.
|
|
325
|
+
# - value is nil. The value is set to nil, then.
|
|
326
|
+
# - key is nil. No update is done.
|
|
327
|
+
#
|
|
328
|
+
# * *Raises* :
|
|
329
|
+
# Nothing
|
|
330
|
+
def set(key, value, options = {})
|
|
331
|
+
parameters = validate_key_and_options(key, options)
|
|
332
|
+
return nil if parameters.nil?
|
|
333
|
+
|
|
334
|
+
key = parameters[0][0]
|
|
335
|
+
layer_name, section = parameters[1]
|
|
336
|
+
|
|
337
|
+
section = Lorj.defaults.get_meta_section(key) if section.nil?
|
|
338
|
+
section = :default if section.nil?
|
|
339
|
+
|
|
340
|
+
return nil if readonly?(key, section)
|
|
341
|
+
|
|
342
|
+
options = { :keys => [key], :section => section, :value => value }
|
|
343
|
+
|
|
344
|
+
options[:indexes] = index_to_update(layer_name, key, section)
|
|
345
|
+
|
|
346
|
+
_set(options)
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
def []=(key, value)
|
|
350
|
+
set(key, value)
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
def del(key, options = {})
|
|
354
|
+
parameters = validate_key_and_options(key, options)
|
|
355
|
+
return nil if parameters.nil?
|
|
356
|
+
|
|
357
|
+
key = parameters[0][0]
|
|
358
|
+
layer_name, section = parameters[1]
|
|
359
|
+
|
|
360
|
+
section = Lorj.defaults.get_meta_section(key) if section.nil?
|
|
361
|
+
section = :default if section.nil?
|
|
362
|
+
|
|
363
|
+
return nil if readonly?(key, section)
|
|
364
|
+
|
|
365
|
+
options = { :keys => [key], :section => section }
|
|
366
|
+
|
|
367
|
+
options[:indexes] = index_to_update(layer_name, key, section)
|
|
368
|
+
|
|
369
|
+
_del(options)
|
|
370
|
+
end
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
# Defines Account exclusive functions
|
|
374
|
+
class Account
|
|
375
|
+
def ac_new(sAccountName, provider_name = nil)
|
|
376
|
+
return nil if sAccountName.nil?
|
|
377
|
+
@account_name = sAccountName
|
|
378
|
+
|
|
379
|
+
account = @config_layers[1][:config]
|
|
380
|
+
account.erase
|
|
381
|
+
account.ac_new sAccountName, provider_name
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
# Load Account Information
|
|
385
|
+
def ac_load(sAccountName = @account_name)
|
|
386
|
+
@account_name = sAccountName unless !sAccountName.nil? &&
|
|
387
|
+
sAccountName == @account_name
|
|
388
|
+
return false if @account_name.nil?
|
|
389
|
+
|
|
390
|
+
account_file = File.join(@account_path, @account_name)
|
|
391
|
+
return false unless File.exist?(account_file)
|
|
392
|
+
|
|
393
|
+
_do_load(@config_layers[1][:config], account_file)
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
# Account save function.
|
|
397
|
+
# Use set/get to manage those data that you will be able to save in an
|
|
398
|
+
# account file.
|
|
399
|
+
# * *Args* :
|
|
400
|
+
#
|
|
401
|
+
# * *Returns* :
|
|
402
|
+
# - true if saved
|
|
403
|
+
# OR
|
|
404
|
+
# - false if:
|
|
405
|
+
# - the account do not set the :provider name.
|
|
406
|
+
# - value is nil. The value is set to nil, then.
|
|
407
|
+
# OR
|
|
408
|
+
# - nil if:
|
|
409
|
+
# - account_name is not set
|
|
410
|
+
#
|
|
411
|
+
# * *Raises* :
|
|
412
|
+
# Nothing
|
|
413
|
+
def ac_save
|
|
414
|
+
return nil if @account_name.nil?
|
|
415
|
+
|
|
416
|
+
account_file = File.join(@account_path, @account_name)
|
|
417
|
+
|
|
418
|
+
account = @config_layers[1][:config]
|
|
419
|
+
local = @config_layers[2][:config]
|
|
420
|
+
|
|
421
|
+
account.data_options(:section => :account)
|
|
422
|
+
if account[:provider].nil?
|
|
423
|
+
PrcLib.error "Provider name is not set. Unable to save the account '"\
|
|
424
|
+
"%s' to '%s'", @account_name, account_file
|
|
425
|
+
return false
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
account.filename = account_file
|
|
429
|
+
result = account.save
|
|
430
|
+
|
|
431
|
+
return result unless result
|
|
432
|
+
|
|
433
|
+
return true if local.exist?(:account_name)
|
|
434
|
+
|
|
435
|
+
local[:account_name] = @account_name
|
|
436
|
+
local.save
|
|
437
|
+
|
|
438
|
+
true
|
|
439
|
+
end
|
|
440
|
+
end
|
|
441
|
+
|
|
442
|
+
# Defines internal functions
|
|
443
|
+
class Account
|
|
444
|
+
# TODO: Strange function!!! To revisit
|
|
445
|
+
|
|
446
|
+
def meta_type?(key)
|
|
447
|
+
return nil unless key
|
|
448
|
+
|
|
449
|
+
section = Lorj.defaults.get_meta_section(key)
|
|
450
|
+
|
|
451
|
+
return section if section == :default
|
|
452
|
+
@account_name
|
|
453
|
+
end
|
|
454
|
+
|
|
455
|
+
# private functions
|
|
456
|
+
|
|
457
|
+
private
|
|
458
|
+
|
|
459
|
+
def _identify_indexes(options, account_exclusive)
|
|
460
|
+
index = options[:index] if options.key?(:index)
|
|
461
|
+
index = layer_index(options[:name]) if options.key?(:name)
|
|
462
|
+
|
|
463
|
+
if account_exclusive
|
|
464
|
+
indexes = [0, 1]
|
|
465
|
+
options[:indexes] = indexes
|
|
466
|
+
else
|
|
467
|
+
indexes = [0, 1, 2, 3]
|
|
468
|
+
end
|
|
469
|
+
|
|
470
|
+
indexes = [index] if !index.nil? && indexes.include?(index)
|
|
471
|
+
indexes
|
|
472
|
+
end
|
|
473
|
+
|
|
474
|
+
def _set_data_options_per_indexes(indexes)
|
|
475
|
+
data_options = []
|
|
476
|
+
|
|
477
|
+
indexes.each { |index| data_options << _data_options_per_layer(index) }
|
|
478
|
+
|
|
479
|
+
data_options
|
|
480
|
+
end
|
|
481
|
+
|
|
482
|
+
# This internal function defines default section name per config index.
|
|
483
|
+
# TODO: Change local and default way to get default values, not in /:default
|
|
484
|
+
def _data_options_per_layer(layer_index)
|
|
485
|
+
# runtime and local and default uses :default section
|
|
486
|
+
case layer_index
|
|
487
|
+
when 2, 3
|
|
488
|
+
# local & default are SectionConfig and is forced to use :default as
|
|
489
|
+
# section name for each data.
|
|
490
|
+
{ :section => :default }
|
|
491
|
+
end
|
|
492
|
+
# nil: layer_index = 0 => runtime. runtime is not a SectionConfig.
|
|
493
|
+
|
|
494
|
+
# nil: layer_index = 1 => account
|
|
495
|
+
# account is a SectionConfig and use section value defined by the
|
|
496
|
+
# lorj data model. So the section name is not forced.
|
|
497
|
+
end
|
|
498
|
+
|
|
499
|
+
def _do_load(config, account_file)
|
|
500
|
+
result = config.load account_file
|
|
501
|
+
return result unless result == true
|
|
502
|
+
|
|
503
|
+
config.data_options :section => :account
|
|
504
|
+
config[:name] = @account_name unless config[:name]
|
|
505
|
+
unless config.exist?(:provider)
|
|
506
|
+
config[:provider] = nil
|
|
507
|
+
PrcLib.warning "'%s' defines an empty provider name.", account_file
|
|
508
|
+
end
|
|
509
|
+
|
|
510
|
+
if config.rh_key_to_symbol?(2)
|
|
511
|
+
config.rh_key_to_symbol(2)
|
|
512
|
+
config.save
|
|
513
|
+
end
|
|
514
|
+
true
|
|
515
|
+
end
|
|
516
|
+
|
|
517
|
+
def index_to_update(layer_name, key, section)
|
|
518
|
+
indexes = [0] # choose runtime by default.
|
|
519
|
+
indexes = _layer_indexes([layer_name]) unless layer_name.nil?
|
|
520
|
+
|
|
521
|
+
if layer_name.nil?
|
|
522
|
+
# Return runtime layer, if layer requested is not updatable.
|
|
523
|
+
return [0] if indexes[0] <= (exclusive?(key, section) ? 1 : 3)
|
|
524
|
+
end
|
|
525
|
+
indexes
|
|
526
|
+
end
|
|
527
|
+
|
|
528
|
+
def define_account_layer
|
|
529
|
+
PRC::CoreConfig.define_layer(:name => 'account',
|
|
530
|
+
:config => Lorj::AccountConfig.new,
|
|
531
|
+
:file_set => true,
|
|
532
|
+
:load => true, :save => true)
|
|
533
|
+
end
|
|
534
|
+
|
|
535
|
+
def initialize_account
|
|
536
|
+
@account_path = File.join(PrcLib.data_path, 'accounts')
|
|
537
|
+
|
|
538
|
+
PrcLib.ensure_dir_exists(@account_path)
|
|
539
|
+
end
|
|
540
|
+
|
|
541
|
+
def validate_key_and_options(key, options = {})
|
|
542
|
+
return nil unless key
|
|
543
|
+
|
|
544
|
+
key = key.to_sym if key.class == String
|
|
545
|
+
|
|
546
|
+
options = {} unless options.is_a?(Hash)
|
|
547
|
+
|
|
548
|
+
parameters = _valid_options(options, [], [:name, :section])
|
|
549
|
+
|
|
550
|
+
return nil if parameters.nil?
|
|
551
|
+
|
|
552
|
+
parameters[0] << key
|
|
553
|
+
parameters
|
|
554
|
+
end
|
|
555
|
+
end
|
|
556
|
+
end
|