lorj 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 585c6c4b0aa26950efa49b136783616c2beb4f9b
4
- data.tar.gz: abab8d4bf4bbf1fdb4c20c91138e6581945e66b5
3
+ metadata.gz: c3ea57c85015a879c6ae4a17ae32cc568d7c1559
4
+ data.tar.gz: 88617061e04fc13f17454c770dc41ad87a19c2b5
5
5
  SHA512:
6
- metadata.gz: 1c1cd5afda8dd06b00b51416e59fd0e9bf1d380037a39a9b20430dc3288328843a653e73668be6f44a0d0e04df27a637c4974979081c81d0ba0f6a72b8b8323d
7
- data.tar.gz: 525fcd57165a83dc6100b60dabba0be2b3b2753bab245468e7f7b223b2b1fae4e9c9222e5e7c4442f14cb393a7278c5ad2d2ea44bb7e778fb1e4a9df53819905
6
+ metadata.gz: 8d8214f417ae51f763015aa0836d30365ca34b3313c0bafd002cbae137e8a75478261aeb80d9d2d6ccc3575dfc13483501a5fb80aefb11e4ec6d1da2369958d3
7
+ data.tar.gz: 4262c71516afea78b39dc03482e972d4465347bec1062d9198648c0dfd7c934b3957c48f46c2b61bcac2e68477433efc9359737143f8b0dfd92962b8a3b1cf67
data/Gemfile.lock CHANGED
@@ -1,15 +1,18 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lorj (0.1.0)
4
+ lorj (0.2.0)
5
5
  ansi (>= 1.4.3)
6
- bundler
6
+ encryptor (= 1.3.0)
7
+ highline (~> 1.6.21)
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
10
11
  specs:
11
12
  ansi (1.4.3)
12
13
  diff-lcs (1.2.5)
14
+ encryptor (1.3.0)
15
+ highline (1.6.21)
13
16
  rake (10.4.2)
14
17
  rspec (3.1.0)
15
18
  rspec-core (~> 3.1.0)
@@ -28,7 +31,7 @@ PLATFORMS
28
31
  ruby
29
32
 
30
33
  DEPENDENCIES
31
- bundler (~> 1.7)
34
+ bundler
32
35
  lorj!
33
36
  rake (~> 10.0)
34
37
  rspec (~> 3.1.0)
data/lib/core/core.rb CHANGED
@@ -142,8 +142,6 @@ module Lorj
142
142
  # Loading ProcessClass
143
143
  # Create Process derived from respectively BaseProcess
144
144
 
145
- # TODO: Replace Global variables by equivalent to PrcLib.<var>
146
-
147
145
  PrcLib.core_level = 0 if PrcLib.core_level.nil?
148
146
 
149
147
  if oForjConfig.nil?
@@ -172,8 +170,9 @@ module Lorj
172
170
  # And load the content from the <sProcessClass>.rb
173
171
  if sProcessClass.is_a?(Symbol)
174
172
  # Ensure file and processName is capitalized
175
- sProcessClass = sProcessClass.to_s.capitalize if (/[A-Z]/ =~ sProcessClass.to_s) != 0
176
- sFile = File.join($CORE_PROCESS_PATH, sProcessClass + '.rb')
173
+ sProcessClass = sProcessClass.to_s
174
+ sProcessClass = sProcessClass.capitalize if (/[A-Z]/ =~ sProcessClass.to_s) != 0
175
+ sFile = File.join(PrcLib.process_path, sProcessClass + '.rb')
177
176
  else
178
177
  if sProcessClass.include?('/')
179
178
  # Consider a path to the process file. File name is the name of the class.
@@ -191,7 +190,7 @@ module Lorj
191
190
  }
192
191
  end
193
192
  else
194
- sPath = $CORE_PROCESS_PATH
193
+ sPath = PrcLib.process_path
195
194
  sProcessClass = sProcessClass.capitalize if (/[A-Z]/ =~ sProcessClass) != 0
196
195
  sFile = sProcessClass + '.rb'
197
196
  end
@@ -215,7 +214,7 @@ module Lorj
215
214
  Lorj.debug(1, "Loading Controller/definition '%s'" % sControllerClass)
216
215
  # Add Provider Object -------------
217
216
  if sControllerClass.is_a?(Symbol)
218
- sPath = File.join($PROVIDERS_PATH, sControllerClass.to_s)
217
+ sPath = File.join(PrcLib.controller_path, sControllerClass.to_s)
219
218
  sControllerClass = sControllerClass.to_s.capitalize if (/[A-Z]/ =~ sControllerClass.to_s) != 0
220
219
  sFile = sControllerClass.to_s + '.rb'
221
220
  else
@@ -235,7 +234,7 @@ module Lorj
235
234
  }
236
235
  end
237
236
  else
238
- sPath = File.join($PROVIDERS_PATH, sControllerClass)
237
+ sPath = File.join(PrcLib.controller_path, sControllerClass)
239
238
  sControllerClass = sControllerClass.capitalize if (/[A-Z]/ =~ sControllerClass) != 0
240
239
  sFile = sControllerClass + '.rb'
241
240
  end
@@ -487,7 +486,7 @@ module Lorj
487
486
  class CloudCore < Core
488
487
  def initialize(oConfig, sAccount = nil, aProcesses = [])
489
488
 
490
- unless oConfig.is_a?(ForjAccount)
489
+ unless oConfig.is_a?(Lorj::Account)
491
490
  oForjAccount = Lorj::Account.new(oConfig)
492
491
  unless sAccount.nil?
493
492
  oForjAccount.ac_load(sAccount)
@@ -500,7 +499,7 @@ module Lorj
500
499
  sControllerMod = oForjAccount.get(:provider_name)
501
500
  raise Lorj::PrcError.new(), "Provider_name not set. Unable to create instance CloudCore." if sControllerMod.nil?
502
501
 
503
- sControllerProcessMod = File.join($PROVIDERS_PATH, sControllerMod, sControllerMod.capitalize + "Process.rb")
502
+ sControllerProcessMod = File.join(PrcLib.controller_path, sControllerMod, sControllerMod.capitalize + "Process.rb")
504
503
  if File.exist?(sControllerProcessMod)
505
504
  aProcessList << sControllerProcessMod
506
505
  else
@@ -662,7 +661,7 @@ module Lorj
662
661
  # * *Raises* :
663
662
  # nothing
664
663
  def << (hHash)
665
- @hParams.merge!(hHash)
664
+ @hParams.merge!(hHash) unless hHash.nil?
666
665
  end
667
666
 
668
667
  # check Lorj::Data attributes or object exists. Or check key/value pair existence.
@@ -67,6 +67,8 @@ module Lorj
67
67
  # => Data name. This symbol must be unique, across sections.
68
68
  # :desc: Required. String. default: nil
69
69
  # => Description
70
+ # :explanation: |- Print a multiline explanation before ask the key value.
71
+ # ERB template enable. To get config data, type <%= config[...] %>
70
72
  # :readonly: Optional. true/false. Default: false
71
73
  # => oForjConfig.set() will fail if readonly is true.
72
74
  # Can be set, only thanks to oForjConfig.setup()
@@ -105,8 +107,9 @@ module Lorj
105
107
  #
106
108
  # :setup: This section describes group of fields to ask, step by step.
107
109
  # :ask_step: Define an Array of setup steps to ask to the end user. The step order is respected, and start at 0
108
- # - :desc: Define the step description
110
+ # - :desc: Define the step description. ERB template enable. To get config data, type config[...]
109
111
  # :explanation: |- Define a multiline explanation. This is printed out in brown color.
112
+ # ERB template enable. To get config data, type <%= config[...] %>
110
113
  # :add: Define a list of additionnal fields to ask.
111
114
  # - <Data> Data to ask.
112
115
  #
@@ -500,6 +503,10 @@ module Lorj
500
503
  Lorj::rhSet(@@predefine_data_value, value, oKeyPath.sFullPath, :values)
501
504
  end
502
505
 
503
-
506
+ # function to interpret a template data, and use ERBConfig as data context.
507
+ # ERBConfig contains config object only.
508
+ def erb(str)
509
+ ERB.new(str).result(@oERBConfig.get_binding())
510
+ end
504
511
  end
505
512
  end
@@ -22,7 +22,24 @@
22
22
  # - definition(BaseDefinition): Functions to declare objects, query/data mapping and setup
23
23
  # this task to make it to work.
24
24
 
25
+ require 'highline/import'
26
+ require 'erb'
27
+
25
28
  module Lorj
29
+ # This class limits ERC template to access only to config object data.
30
+ class ERBConfig
31
+ attr_reader :config
32
+
33
+ def initialize(config)
34
+ @config = config
35
+ end
36
+
37
+ # Bind this limited class with ERB templates
38
+ def get_binding()
39
+ binding()
40
+ end
41
+ end
42
+
26
43
  # Following class defines class levels function to
27
44
  # declare framework objects.
28
45
  # As each process needs to define new object to deal with
@@ -229,7 +246,7 @@ module Lorj
229
246
 
230
247
  return nil if not sCloudObj
231
248
 
232
- raise Lorj::PrcError.new(), "$s.Get: '%s' is not a known object type." % [self.class, sCloudObj] if Lorj::rhExist?(@@meta_obj, sCloudObj) != 1
249
+ raise Lorj::PrcError.new(), "%s.Get: '%s' is not a known object type." % [self.class, sCloudObj] if Lorj::rhExist?(@@meta_obj, sCloudObj) != 1
233
250
 
234
251
  if hConfig.length > 0
235
252
  # cleanup runtime data to avoid conflicts between multiple calls
@@ -585,7 +602,11 @@ module Lorj
585
602
  aSetup.each_index { | iStep |
586
603
  Lorj.debug(2, "Ask step %s:" % iStep)
587
604
  puts "%s%s%s" % [ANSI.bold, aSetup[iStep][:desc], ANSI.clear] unless aSetup[iStep][:desc].nil?
588
- puts "%s\n\n" % ANSI.yellow(aSetup[iStep][:explanation]) unless aSetup[iStep][:explanation].nil?
605
+ begin
606
+ puts "%s\n\n" % ANSI.yellow(erb(aSetup[iStep][:explanation])) unless aSetup[iStep][:explanation].nil?
607
+ rescue => e
608
+ PrcLib.Error "setup step '%d/:explanation' : %s" % [iStep, e.message]
609
+ end
589
610
  aOrder = aSetup[iStep][:order]
590
611
  aOrder.each_index { | iIndex |
591
612
  Lorj.debug(2, "Ask order %s:" % iIndex)
@@ -602,8 +623,16 @@ module Lorj
602
623
 
603
624
 
604
625
  sDesc = "'%s' value" % sKey
605
- puts "#{sKey}: %s" % [hParam[:explanation]] unless Lorj::rhGet(hParam, :explanation).nil?
606
- sDesc = hParam[:desc] unless hParam[:desc].nil?
626
+ begin
627
+ puts "#{sKey}: %s" % [erb(hParam[:explanation])] unless hParam[:explanation].nil?
628
+ rescue => e
629
+ PrcLib.Error "setup key '%s/:explanation' : %s" % [sKey, e.message]
630
+ end
631
+ begin
632
+ sDesc = erb(hParam[:desc]) unless hParam[:desc].nil?
633
+ rescue => e
634
+ PrcLib.Error "setup key '%s/:desc' : %s" % [sKey, e.message]
635
+ end
607
636
  sDefault = @oForjConfig.get(sKey, hParam[:default_value])
608
637
  rValidate = nil
609
638
 
@@ -647,14 +676,40 @@ module Lorj
647
676
  raise Lorj::PrcError.new(), "#{sKey}: query_type => :process_call requires missing :query_call declaration (Provider function)" if hValues[:query_call].nil?
648
677
  pProc = hValues[:query_call]
649
678
  sObjectToLoad = hValues[:object]
679
+
680
+ # Building Process function hParams parameter
650
681
  oParams = ObjectData.new
651
- oParams.add(oObject)
652
- oParams << hValues[:query_params]
682
+ oParams << { default_value: sDefault }
683
+
684
+ unless hValues[:query_params].nil?
685
+ hValues[:query_params].each { | key, value |
686
+ if mRes = value.match(/lorj::config\[(.*)\]/)
687
+ aExtract = mRes[1].split(', ')
688
+ aExtract.map! { | v | v = v[1..-1].to_sym if v[0] == ':' }
689
+ oParams << { key => config[aExtract] }
690
+ else
691
+ oParams << { key => value }
692
+ end
693
+ }
694
+ end
695
+
653
696
  begin
654
- aList = @oForjProcess.method(pProc).call(sObjectToLoad, oParams)
697
+ hProcResult = @oForjProcess.method(pProc).call(sObjectToLoad, oParams)
655
698
  rescue => e
656
699
  raise Lorj::PrcError.new(), "Error during call of '%s':\n%s" % [pProc, e.message]
657
700
  end
701
+
702
+ if hProcResult.is_a?(Hash)
703
+ sDefault = hProcResult[:default_value].nil? ? sDefault : hProcResult[:default_value]
704
+ if hProcResult[:list].nil? or ! hProcResult[:list].is_a?(Array)
705
+ PrcLib.debug("Process function '%s' did not return an :list => Array of values." % [ hValues[:query_call] ])
706
+ else
707
+ aList = hProcResult[:list]
708
+ end
709
+ else
710
+ PrcLib.debug("Process function '%s' did not return an Hash with :list and :default_value")
711
+ aList = []
712
+ end
658
713
  else
659
714
  raise Lorj::PrcError.new, "'%s' invalid. %s/list_values/values_type supports %s. " % [hValues[:values_type], sKey, [:provider_function]]
660
715
  end
@@ -699,7 +754,12 @@ module Lorj
699
754
  @oForjConfig.set(sKey, value)
700
755
  if hParam[:post_step_function]
701
756
  pProc = hParam[:post_step_function]
702
- bOk = @oForjProcess.method(pProc).call()
757
+ bResult = @oForjProcess.method(pProc).call()
758
+ if bResult.boolean?
759
+ bOk = bResult
760
+ else
761
+ PrcLib.debug("Warning: '%s' did not return any boolean value. Ignored" % [pProc])
762
+ end
703
763
  end
704
764
  end
705
765
  }
@@ -719,6 +779,7 @@ module Lorj
719
779
  }
720
780
 
721
781
  @oForjConfig = oForjConfig
782
+ @oERBConfig = ERBConfig.new(oForjConfig)
722
783
  raise Lorj::PrcError.new(), "'%s' is not a valid ForjAccount or ForjConfig Object." % [oForjConfig.class] if not oForjConfig.is_a?(Lorj::Account) and not oForjConfig.is_a?(Lorj::Config)
723
784
 
724
785
  @oProvider = oForjProvider
@@ -1014,7 +1075,6 @@ module Lorj
1014
1075
  bDone
1015
1076
  end
1016
1077
 
1017
-
1018
1078
  private
1019
1079
 
1020
1080
  # -------------------------------------------------------------------------
@@ -35,6 +35,11 @@ module Lorj
35
35
  @oDefinition = oDefinition
36
36
  end
37
37
 
38
+ def controller_connect(sObjectType, hParams = {})
39
+ raise Lorj::PrcError.new(), "No Controler object loaded." if not @oDefinition
40
+ @oDefinition.connect(sObjectType)
41
+ end
42
+
38
43
  def controller_create(sObjectType, hParams = {})
39
44
  raise Lorj::PrcError.new(), "No Controler object loaded." if not @oDefinition
40
45
  @oDefinition.create(sObjectType)
@@ -146,7 +151,7 @@ module Lorj
146
151
  end
147
152
 
148
153
  def query_single(sCloudObj, oList, sQuery, name, sInfoMsg = {})
149
- oList = controler.query(sCloudObj, sQuery)
154
+ oList = controller_query(sCloudObj, sQuery)
150
155
  sInfo = {
151
156
  :notfound => "No %s '%s' found",
152
157
  :checkmatch => "Found 1 %s. checking exact match for '%s'.",
@@ -17,11 +17,11 @@
17
17
 
18
18
  # It requires Core objects to be defined + default ForjProcess functions.
19
19
 
20
- require File.join($CORE_PROCESS_PATH, "global_process.rb")
21
- require File.join($CORE_PROCESS_PATH, "network_process.rb")
20
+ require File.join(PrcLib.process_path, "global_process.rb")
21
+ require File.join(PrcLib.process_path, "network_process.rb")
22
22
 
23
23
  # Define framework object on BaseDefinition
24
- class BaseDefinition
24
+ class Lorj::BaseDefinition
25
25
 
26
26
  # All objects used by this process are built from a Controller
27
27
  process_default :use_controller => true
@@ -197,7 +197,8 @@ class BaseDefinition
197
197
  define_obj(:keypairs,
198
198
  {
199
199
  :create_e => :forj_get_or_create_keypair,
200
- :query_e => :forj_query_keypair
200
+ :query_e => :forj_query_keypair,
201
+ :get_e => :forj_get_keypair
201
202
  # :delete_e => :forj_delete_keypair
202
203
  })
203
204
 
@@ -267,9 +268,9 @@ class BaseDefinition
267
268
  {
268
269
  :create_e => :forj_get_or_create_server,
269
270
  :query_e => :forj_query_server,
270
- :get_e => :forj_get_server
271
+ :get_e => :forj_get_server,
271
272
  # :update_e => :forj_update_server,
272
- # :delete_e => :forj_delete_server
273
+ :delete_e => :forj_delete_server
273
274
  })
274
275
 
275
276
  obj_needs :CloudObject, :compute_connection
@@ -291,6 +292,8 @@ class BaseDefinition
291
292
  def_attribute :private_ip_address
292
293
  def_attribute :public_ip_address
293
294
 
295
+ def_attribute :image_id
296
+ def_attribute :key_name
294
297
  # ************************************ SERVER Addresses Object
295
298
  # Object representing the list of IP addresses attached to a server.
296
299
  define_obj(:public_ip,