summaryrefslogtreecommitdiff
path: root/lib/leap_cli/config
diff options
context:
space:
mode:
Diffstat (limited to 'lib/leap_cli/config')
-rw-r--r--lib/leap_cli/config/manager.rb9
-rw-r--r--lib/leap_cli/config/object.rb43
-rw-r--r--lib/leap_cli/config/object_list.rb2
-rw-r--r--lib/leap_cli/config/secrets.rb25
4 files changed, 66 insertions, 13 deletions
diff --git a/lib/leap_cli/config/manager.rb b/lib/leap_cli/config/manager.rb
index be95831..33b7f05 100644
--- a/lib/leap_cli/config/manager.rb
+++ b/lib/leap_cli/config/manager.rb
@@ -133,9 +133,9 @@ module LeapCli
next unless ename
log 3, :loading, '%s environment...' % ename
env(ename) do |e|
- e.services = load_all_json(Path.named_path([:service_env_config, '*', ename], @provider_dir), Config::Tag)
- e.tags = load_all_json(Path.named_path([:tag_env_config, '*', ename], @provider_dir), Config::Tag)
- e.provider = load_json( Path.named_path([:provider_env_config, ename], @provider_dir), Config::Provider)
+ e.services = load_all_json(Path.named_path([:service_env_config, '*', ename], @provider_dir), Config::Tag, :env => ename)
+ e.tags = load_all_json(Path.named_path([:tag_env_config, '*', ename], @provider_dir), Config::Tag, :env => ename)
+ e.provider = load_json( Path.named_path([:provider_env_config, ename], @provider_dir), Config::Provider, :env => ename)
e.services.inherit_from! env('default').services
e.tags.inherit_from! env('default').tags
e.provider.inherit_from! env('default').provider
@@ -315,6 +315,9 @@ module LeapCli
if obj
name = File.basename(filename).force_encoding('utf-8').sub(/^([^\.]+).*\.json$/,'\1')
obj['name'] ||= name
+ if options[:env]
+ obj.environment = options[:env]
+ end
results[name] = obj
end
end
diff --git a/lib/leap_cli/config/object.rb b/lib/leap_cli/config/object.rb
index a0d402b..6f71a08 100644
--- a/lib/leap_cli/config/object.rb
+++ b/lib/leap_cli/config/object.rb
@@ -10,6 +10,34 @@ require 'ya2yaml' # pure ruby yaml
module LeapCli
module Config
+
+ #
+ # A proxy for Manager that binds to a particular object
+ # (so that we can bind to a particular environment)
+ #
+ class ManagerBinding
+ def initialize(manager, object)
+ @manager = manager
+ @object = object
+ end
+
+ def services
+ @manager.env(@object.environment).services
+ end
+
+ def tags
+ @manager.env(@object.environment).tags
+ end
+
+ def provider
+ @manager.env(@object.environment).provider
+ end
+
+ def method_missing(*args)
+ @manager.send(*args)
+ end
+ end
+
#
# This class represents the configuration for a single node, service, or tag.
# Also, all the nested hashes are also of this type.
@@ -19,8 +47,6 @@ module LeapCli
class Object < Hash
attr_reader :node
- attr_reader :manager
- alias :global :manager
def initialize(manager=nil, node=nil)
# keep a global pointer around to the config manager. used a lot in the eval strings and templates
@@ -31,6 +57,19 @@ module LeapCli
@node = node || self
end
+ def manager
+ ManagerBinding.new(@manager, self)
+ end
+ alias :global :manager
+
+ def environment=(e)
+ self.store('environment', e)
+ end
+
+ def environment
+ self['environment']
+ end
+
#
# export YAML
#
diff --git a/lib/leap_cli/config/object_list.rb b/lib/leap_cli/config/object_list.rb
index 33ca4dd..afcc6a6 100644
--- a/lib/leap_cli/config/object_list.rb
+++ b/lib/leap_cli/config/object_list.rb
@@ -174,7 +174,7 @@ module LeapCli
if self[name]
self[name].inherit_from!(object)
else
- self[name] = object.dup
+ self[name] = object.deep_dup
end
end
end
diff --git a/lib/leap_cli/config/secrets.rb b/lib/leap_cli/config/secrets.rb
index 366ffd3..184d11d 100644
--- a/lib/leap_cli/config/secrets.rb
+++ b/lib/leap_cli/config/secrets.rb
@@ -13,18 +13,29 @@ module LeapCli; module Config
@discovered_keys = {}
end
- # we can't use fetch() or get(), since those already have special meanings
- def retrieve(key, environment=nil)
- self.fetch(environment||'default', {})[key.to_s]
- end
+ # we can't use fetch() or get(), since those already have special meanings
+ def retrieve(key, environment)
+ self.fetch(environment, {})[key.to_s]
+ end
+
+ def set(*args, &block)
+ if block_given?
+ set_with_block(*args, &block)
+ else
+ set_without_block(*args)
+ end
+ end
+
+ def set_without_block(key, value, environment)
+ set_with_block(key, environment) {value}
+ end
- def set(key, value, environment=nil)
- environment ||= 'default'
+ def set_with_block(key, environment, &block)
key = key.to_s
@discovered_keys[environment] ||= {}
@discovered_keys[environment][key] = true
self[environment] ||= {}
- self[environment][key] ||= value
+ self[environment][key] ||= yield
end
#