Sha256: 967fb85a0f58ca6f4abcab3254eebdb05c7995bb46ae49275b8d7ea04de34416

Contents?: true

Size: 1.29 KB

Versions: 7

Compression:

Stored size: 1.29 KB

Contents

module CloudstackClient
  require "yaml"

  module Configuration

    def self.load(configuration)
      file = configuration[:config_file] || Configuration.locate_config_file
      unless File.exists?(file)
        raise ConfigurationError, "Configuration file '#{file}' not found."
      end

      begin
        config = YAML::load(IO.read file)
      rescue => e
        message = "Can't load configuration from file '#{file}'."
        if configuration[:debug]
          message += "\nMessage: #{e.message}"
          message += "\nBacktrace:\n\t#{e.backtrace.join("\n\t")}"
        end
        raise ConfigurationError, message
      end

      if env = configuration[:env] || config[:default]
        unless config = config[env]
          raise ConfigurationError, "Can't find environment #{env}."
        end
      end

      unless config.key?(:url) && config.key?(:api_key) && config.key?(:secret_key)
        message = "The environment #{env || '\'-\''} does not contain all required keys."
        raise ConfigurationError, message
      end

      config.merge(environment: env)
    end

    def self.locate_config_file
      %w(.cloudstack .cloudstack-cli).each do |file|
        file = File.join(Dir.home, "#{file}.yml")
        return file if File.exists?(file)
      end
      nil
    end

  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
cloudstack_client-1.5.9 lib/cloudstack_client/configuration.rb
cloudstack_client-1.5.8 lib/cloudstack_client/configuration.rb
cloudstack_client-1.5.7 lib/cloudstack_client/configuration.rb
cloudstack_client-1.5.6 lib/cloudstack_client/configuration.rb
cloudstack_client-1.5.5 lib/cloudstack_client/configuration.rb
cloudstack_client-1.5.4 lib/cloudstack_client/configuration.rb
cloudstack_client-1.5.3 lib/cloudstack_client/configuration.rb