]> gitweb.fluxo.info Git - leap/leap_cli.git/commitdiff
added ability to define environment specific provider.json (e.g. provider.production...
authorelijah <elijah@riseup.net>
Sat, 15 Mar 2014 00:45:32 +0000 (17:45 -0700)
committerelijah <elijah@riseup.net>
Sat, 15 Mar 2014 00:45:32 +0000 (17:45 -0700)
lib/leap_cli.rb
lib/leap_cli/commands/inspect.rb
lib/leap_cli/config/macros.rb
lib/leap_cli/config/manager.rb
lib/leap_cli/config/provider.rb [new file with mode: 0644]
lib/leap_cli/path.rb
lib/leap_cli/version.rb

index 2f9ffecfdc32c1fc606913dbb5b7382c948f3400..ed5932a24fbbce6a3889c4114d2fcd4b8bfd0055 100644 (file)
@@ -27,6 +27,7 @@ require 'leap_cli/ssh_key'
 require 'leap_cli/config/object'
 require 'leap_cli/config/node'
 require 'leap_cli/config/tag'
+require 'leap_cli/config/provider'
 require 'leap_cli/config/secrets'
 require 'leap_cli/config/object_list'
 require 'leap_cli/config/manager'
index 23c75bb790f91d0b9090950aaefd9f70c00b3b98..746a80c912b97ebb0258a4d8bddef3a47642d2d4 100644 (file)
@@ -39,7 +39,7 @@ module LeapCli; module Commands
           :inspect_service
         elsif path_match?(:tag_config, full_path)
           :inspect_tag
-        elsif path_match?(:provider_config, full_path)
+        elsif path_match?(:provider_config, full_path) || path_match?(:provider_env_config, full_path)
           :inspect_provider
         elsif path_match?(:common_config, full_path)
           :inspect_common
@@ -108,6 +108,8 @@ module LeapCli; module Commands
   def inspect_provider(arg, options)
     if options[:base]
       inspect_json manager.base_provider
+    elsif arg =~ /provider\.(.*)\.json/
+      inspect_json manager.providers[$1]
     else
       inspect_json manager.provider
     end
@@ -130,7 +132,9 @@ module LeapCli; module Commands
   end
 
   def inspect_json(config)
-    puts JSON.sorted_generate(config)
+    if config
+      puts JSON.sorted_generate(config)
+    end
   end
 
   def path_match?(path_symbol, path)
index 79f39725037ba404a99d66c0d1eaa795775886b2..69b3a22a71ab33b7caba022adc5a398b41e9b631 100644 (file)
@@ -18,6 +18,13 @@ module LeapCli; module Config
       global.nodes
     end
 
+    #
+    # grab an environment appropriate provider
+    #
+    def provider
+      global.providers[@node.environment] || global.provider
+    end
+
     #
     # returns a list of nodes that match the same environment
     #
index d6cb89e44252bd7ea9e9180c009d068f259d071e..46d7686d28e52fa825d61f8644ab215d49bbaff3 100644 (file)
@@ -16,7 +16,7 @@ module LeapCli
       ## ATTRIBUTES
       ##
 
-      attr_reader :services, :tags, :nodes, :provider, :common, :secrets
+      attr_reader :services, :tags, :nodes, :provider, :providers, :common, :secrets
       attr_reader :base_services, :base_tags, :base_provider, :base_common
 
       #
@@ -48,7 +48,7 @@ module LeapCli
         @base_services = load_all_json(Path.named_path([:service_config, '*'], Path.provider_base), Config::Tag)
         @base_tags     = load_all_json(Path.named_path([:tag_config, '*'], Path.provider_base), Config::Tag)
         @base_common   = load_json(Path.named_path(:common_config, Path.provider_base), Config::Object)
-        @base_provider = load_json(Path.named_path(:provider_config, Path.provider_base), Config::Object)
+        @base_provider = load_json(Path.named_path(:provider_config, Path.provider_base), Config::Provider)
 
         # load provider
         provider_path = Path.named_path(:provider_config, @provider_dir)
@@ -58,7 +58,7 @@ module LeapCli
         @tags     = load_all_json(Path.named_path([:tag_config, '*'],     @provider_dir), Config::Tag)
         @nodes    = load_all_json(Path.named_path([:node_config, '*'],    @provider_dir), Config::Node)
         @common   = load_json(common_path, Config::Object)
-        @provider = load_json(provider_path, Config::Object)
+        @provider = load_json(provider_path, Config::Provider)
         @secrets  = load_json(Path.named_path(:secrets_config,  @provider_dir), Config::Secrets)
 
         ### BEGIN HACK
@@ -83,8 +83,18 @@ module LeapCli
           remove_disabled_nodes
         end
 
-        # validate
+        # load optional environment specific providers
         validate_provider(@provider)
+        @providers = {}
+        environments.each do |env|
+          if Path.defined?(:provider_env_config)
+            provider_path = Path.named_path([:provider_env_config, env], @provider_dir)
+            providers[env] = load_json(provider_path, Config::Provider)
+            providers[env].inherit_from! @provider
+            validate_provider(providers[env])
+          end
+        end
+
       end
 
       #
diff --git a/lib/leap_cli/config/provider.rb b/lib/leap_cli/config/provider.rb
new file mode 100644 (file)
index 0000000..224e57b
--- /dev/null
@@ -0,0 +1,11 @@
+#
+# Configuration class for provider.json
+#
+
+module LeapCli; module Config
+  class Provider < Object
+    def provider
+      self
+    end
+  end
+end; end
index b7057880c2d3e5756eb5b1299973a072bd451d1a..cd0e169204520bff2877e51a105ceab4855f3346 100644 (file)
@@ -72,6 +72,10 @@ module LeapCli; module Path
     File.exists?(named_path(name, provider_dir))
   end
 
+  def self.defined?(name)
+    Leap::Platform.paths[name]
+  end
+
   def self.relative_path(path, provider_dir=Path.provider)
     if provider_dir
       path = named_path(path, provider_dir)
index 926929a063d7d52a8be983ede2d9750f62db7172..83b1c396311141c5f76dd9ab9db3fef680f95373 100644 (file)
@@ -1,6 +1,6 @@
 module LeapCli
   unless defined?(LeapCli::VERSION)
-    VERSION = '1.4.0'
+    VERSION = '1.5.0'
     COMPATIBLE_PLATFORM_VERSION = '0.3.0'..'1.99'
     SUMMARY = 'Command line interface to the LEAP platform'
     DESCRIPTION = 'The command "leap" can be used to manage a bevy of servers running the LEAP platform from the comfort of your own home.'