diff --git a/src/oneprovision/lib/provider/provider.rb b/src/oneprovision/lib/provider/provider.rb index 44c22f9820..749149016e 100644 --- a/src/oneprovision/lib/provider/provider.rb +++ b/src/oneprovision/lib/provider/provider.rb @@ -105,6 +105,14 @@ module OneProvision conn end + # Gets inputs information + def inputs + # Dummy case + return unless @body + + @body['inputs'] || [] + end + # Gets provider type def type # Dummy case @@ -148,12 +156,19 @@ module OneProvision # @return [JSON] Document information in JSON format def to_json(template) document = {} + skip = %w[provider connection registration_time plain] # Create document JSON document['provider'] = template['provider'] document['connection'] = template['connection'] document['registration_time'] = Time.now.to_i + template.each do |key, value| + next if skip.include?(key) + + document[key] = value + end + document.to_json end diff --git a/src/oneprovision/lib/provision/provision.rb b/src/oneprovision/lib/provision/provision.rb index 0a79f18c26..d85941d051 100644 --- a/src/oneprovision/lib/provision/provision.rb +++ b/src/oneprovision/lib/provision/provision.rb @@ -206,27 +206,27 @@ module OneProvision config = config[:config] cfg = ProvisionConfig.new(config, inputs) - cfg.validate + + cfg.load + + # read provider information + unless provider + provider = Provision.read_provider(cfg) + provider = Provider.by_name(@client, provider) + end + + return provider if OpenNebula.is_error?(provider) + + unless provider + return OpenNebula::Error.new('No provider found') + end + + @provider = provider + cfg['inputs'] = cfg['inputs'] | provider.inputs + + cfg.validate(false) begin - # Create configuration object - cfg = ProvisionConfig.new(config, inputs) - cfg.load - - # read provider information - unless provider - provider = Provision.read_provider(cfg) - provider = Provider.by_name(@client, provider) - end - - return provider if OpenNebula.is_error?(provider) - - unless provider - return OpenNebula::Error.new('No provider found') - end - - @provider = provider - allocate(cfg, provider) info diff --git a/src/oneprovision/lib/provision/provision_config.rb b/src/oneprovision/lib/provision/provision_config.rb index da203285ba..361bfcc063 100644 --- a/src/oneprovision/lib/provision/provision_config.rb +++ b/src/oneprovision/lib/provision/provision_config.rb @@ -282,8 +282,10 @@ module OneProvision # Parse it to merge different sections # Check specific attributes # Check all evaluation rules - def validate - self.load + # + # @param check_load [Boolean] True to check yaml load operacion + def validate(check_load = true) + self.load if check_load @config.delete_if {|_k, v| v.nil? }