13996: Add rake config:diff
authorPeter Amstutz <pamstutz@veritasgenetics.com>
Tue, 26 Mar 2019 21:10:00 +0000 (17:10 -0400)
committerPeter Amstutz <pamstutz@veritasgenetics.com>
Mon, 8 Apr 2019 15:09:53 +0000 (11:09 -0400)
Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz@veritasgenetics.com>

services/api/config/initializers/load_config.rb
services/api/lib/config_loader.rb
services/api/lib/tasks/config_diff.rake [new file with mode: 0644]

index 79cf5bd0f3e24efad96d7cc505b7105df7065962..51b2bec0dd9718606fbef93bce579efdfc9810cc 100644 (file)
@@ -41,6 +41,8 @@ $arvados_config = {}
   end
 end
 
+$base_arvados_config = $arvados_config.deep_dup
+
 declare_config "ClusterID", NonemptyString, :uuid_prefix
 declare_config "ManagementToken", String, :ManagementToken
 declare_config "Git.Repositories", Pathname, :git_repositories_dir
index 3e3c82a360310291ef437d7d29ff9db23c9e4472..8b31a62c4056382fe7bb7ba9cd3d152b8ac2517c 100644 (file)
@@ -24,6 +24,18 @@ module Psych
         end
         @emitter.scalar outstr, nil, nil, true, false, Nodes::Scalar::ANY
       end
+
+      def visit_URI_Generic o
+        @emitter.scalar o.to_s, nil, nil, true, false, Nodes::Scalar::ANY
+      end
+
+      def visit_URI_HTTP o
+        @emitter.scalar o.to_s, nil, nil, true, false, Nodes::Scalar::ANY
+      end
+
+      def visit_Pathname o
+        @emitter.scalar o.to_s, nil, nil, true, false, Nodes::Scalar::ANY
+      end
     end
   end
 end
diff --git a/services/api/lib/tasks/config_diff.rake b/services/api/lib/tasks/config_diff.rake
new file mode 100644 (file)
index 0000000..a9249df
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
+def diff_hash base, final
+  diffed = {}
+  base.each do |k,v|
+    bk = base[k]
+    fk = final[k]
+    if bk.is_a? Hash
+      d = diff_hash bk, fk
+      if d.length > 0
+        diffed[k] = d
+      end
+    else
+      if bk.to_s != fk.to_s
+        diffed[k] = fk
+      end
+    end
+  end
+  diffed
+end
+
+namespace :config do
+  desc 'Diff site configuration'
+  task diff: :environment do
+    diffed = diff_hash $base_arvados_config, $arvados_config
+    cfg = { "Clusters" => {}}
+    cfg["Clusters"][$arvados_config["ClusterID"]] = diffed.select {|k,v| k != "ClusterID"}
+    puts cfg.to_yaml
+  end
+end