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 +4 -4
- data/Gemfile.lock +6 -3
- data/lib/core/core.rb +9 -10
- data/lib/core/definition.rb +9 -2
- data/lib/core/lorj-basedefinition.rb +69 -9
- data/lib/core/lorj-baseprocess.rb +6 -1
- data/lib/core_process/CloudProcess.rb +9 -6
- data/lib/core_process/global_process.rb +184 -88
- data/lib/core_process/network_process.rb +96 -94
- data/lib/lorj/version.rb +1 -1
- data/lib/lorj.rb +2 -5
- data/lib/prc-config.rb +12 -5
- data/lib/prc-logging.rb +80 -2
- data/lib/prc.rb +23 -0
- data/lib/providers/hpcloud/Hpcloud.rb +28 -21
- data/lib/providers/hpcloud/compute.rb +5 -0
- data/lorj.gemspec +29 -26
- metadata +36 -7
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: c3ea57c85015a879c6ae4a17ae32cc568d7c1559
         | 
| 4 | 
            +
              data.tar.gz: 88617061e04fc13f17454c770dc41ad87a19c2b5
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 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. | 
| 4 | 
            +
                lorj (0.2.0)
         | 
| 5 5 | 
             
                  ansi (>= 1.4.3)
         | 
| 6 | 
            -
                   | 
| 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 | 
| 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 | 
| 176 | 
            -
                            | 
| 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 =  | 
| 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( | 
| 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( | 
| 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?( | 
| 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( | 
| 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.
         | 
    
        data/lib/core/definition.rb
    CHANGED
    
    | @@ -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(), " | 
| 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 | 
            -
                         | 
| 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 | 
            -
                               | 
| 606 | 
            -
             | 
| 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 | 
| 652 | 
            -
             | 
| 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 | 
            -
                                              | 
| 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 | 
            -
                                     | 
| 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 =  | 
| 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( | 
| 21 | 
            -
            require File.join( | 
| 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 | 
            -
             | 
| 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,
         |