You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@deltacloud.apache.org by mf...@redhat.com on 2013/01/09 12:22:43 UTC
[PATCH core] Core: Added possibility to configure database location
From: Michal Fojtik <mf...@redhat.com>
This patch introduce system/user config file support
for Deltacloud instance. The configuration file is a YAML
format file with following structure:
:deltacloud:
:your_option: Option value
:cimi:
:database_location: /tmp/cimi.database
The primary 'key' is the Deltacloud frontend the option will
be valid for. Deltacloud will then look for the file in following
locations (in exact order):
$HOME/.deltacloud/config.yaml
/etc/deltacloud/config.yaml
Signed-off-by: Michal fojtik <mf...@redhat.com>
---
server/lib/db.rb | 2 +-
server/lib/deltacloud_rack.rb | 63 ++++++++++++++++++++++++-------------------
2 files changed, 36 insertions(+), 29 deletions(-)
diff --git a/server/lib/db.rb b/server/lib/db.rb
index 9564b79..b401329 100644
--- a/server/lib/db.rb
+++ b/server/lib/db.rb
@@ -12,7 +12,7 @@ module Deltacloud
require_relative './db/address_template'
end
- DATABASE_LOCATION = ENV['DATABASE_LOCATION'] || File.join('/', 'var', 'tmp', "deltacloud-mock-#{ENV['USER']}", 'db.sqlite')
+ DATABASE_LOCATION = ENV['DATABASE_LOCATION'] || config[:cimi][:database_location] || File.join('/', 'var', 'tmp', "deltacloud-mock-#{ENV['USER']}", 'db.sqlite')
def self.initialize_database
DataMapper::Logger.new($stdout, :debug) if ENV['API_VERBOSE']
diff --git a/server/lib/deltacloud_rack.rb b/server/lib/deltacloud_rack.rb
index 8ddcb41..296b689 100644
--- a/server/lib/deltacloud_rack.rb
+++ b/server/lib/deltacloud_rack.rb
@@ -22,13 +22,27 @@ require_relative './deltacloud/version'
module Deltacloud
+ def self.system_config
+ return @system_config if !@system_config.nil?
+ config_path = File.join(ENV['HOME'], '.deltacloud', 'config.yaml')
+ if File.exists?(config_path)
+ @system_config = YAML.load_file(config_path)
+ end
+ config_path = File.join('/', 'etc', '.deltacloud', 'config.yaml')
+ if File.exists?(config_path)
+ @system_config = YAML.load_file(config_path)
+ end
+ @system_config || {}
+ end
+
def self.config
@config ||= {}
end
def self.configure(frontend=:deltacloud, &block)
frontend = frontend.to_sym
- config[frontend] ||= Server.new(frontend, &block)
+ system_options = system_config[frontend] || {}
+ config[frontend] ||= Server.new(frontend, system_options, &block)
self
end
@@ -78,20 +92,17 @@ module Deltacloud
class Server
- attr_reader :name
- attr_reader :root_url
- attr_reader :version
- attr_reader :klass
- attr_reader :logger
- attr_reader :default_driver
+ attr_accessor :config
def initialize(frontend, opts={}, &block)
- @name=frontend.to_sym
- @root_url = opts[:root_url]
- @version = opts[:version]
- @klass = opts[:klass]
- @logger = opts[:logger] || Rack::DeltacloudLogger.setup(ENV['API_LOG'], ENV['API_VERBOSE'])
- @default_driver = opts[:default_driver] || ENV['API_DRIVER'] || :mock
+ @config = {}
+ root_url(opts.delete(:root_url))
+ version(opts.delete(:version))
+ klass(opts.delete(:klass))
+ logger(opts.delete(:logger) || Rack::DeltacloudLogger.setup(ENV['API_LOG'], ENV['API_VERBOSE']))
+ default_driver(opts.delete(:default_driver) || ENV['API_DRIVER'] || :mock)
+ @config.merge!(:name => frontend.to_sym)
+ @config.merge!(opts)
instance_eval(&block)
end
@@ -101,28 +112,24 @@ module Deltacloud
@root_url = url
end
- def version(version=nil)
- return @version if version.nil?
- @version = version
- end
-
- def klass(k=nil)
- return @klass if k.nil?
- @klass = k
+ [:version, :klass, :default_driver, :logger].each do |option|
+ define_method option do |value=nil|
+ @config[option] = value if !value.nil?
+ @config[option]
+ end
end
- def default_driver(drv=nil)
- return @default_driver if drv.nil?
- @default_driver = drv
+ def method_missing(name, *args)
+ return config[name.to_sym] if config.has_key?(name.to_sym)
+ super
end
- def logger(logger=nil)
- return @logger if logger.nil?
- @logger = logger
+ def [](value)
+ config[value]
end
def require!
- Deltacloud.require_frontend!(@name)
+ Deltacloud.require_frontend!(name)
end
def default_frontend!
--
1.8.0.2