diff options
-rw-r--r-- | lib/leap_cli/config/manager.rb | 20 | ||||
-rw-r--r-- | lib/leap_cli/path.rb | 1 | ||||
-rw-r--r-- | lib/leap_cli/util.rb | 12 |
3 files changed, 26 insertions, 7 deletions
diff --git a/lib/leap_cli/config/manager.rb b/lib/leap_cli/config/manager.rb index e90b589..3d09e09 100644 --- a/lib/leap_cli/config/manager.rb +++ b/lib/leap_cli/config/manager.rb @@ -53,18 +53,24 @@ module LeapCli # # save compiled hiera .yaml files # - def export_nodes(destination_directory = nil) - dir = destination_directory || Path.named_path(:hiera_dir, @provider_dir) - existing_files = Dir.glob(dir + '/*.yaml') + def export_nodes + existing_hiera = Dir.glob(Path.named_path([:hiera, '*'], @provider_dir)) + existing_files = Dir.glob(Path.named_path([:node_files_dir, '*'], @provider_dir)) + updated_hiera = [] updated_files = [] - @nodes.each do |name, node| - filepath = "#{dir}/#{name}.yaml" + self.each_node do |node| + filepath = Path.named_path([:node_files_dir, node.name], @provider_dir) updated_files << filepath - Util::write_file!(filepath, node.dump) + hierapath = Path.named_path([:hiera, node.name], @provider_dir) + updated_hiera << hierapath + Util::write_file!(hierapath, node.dump) end - (existing_files - updated_files).each do |filepath| + (existing_hiera - updated_hiera).each do |filepath| Util::remove_file!(filepath) end + (existing_files - updated_files).each do |filepath| + Util::remove_directory!(filepath) + end end def export_secrets(destination_file = nil) diff --git a/lib/leap_cli/path.rb b/lib/leap_cli/path.rb index a783a91..bf4c89f 100644 --- a/lib/leap_cli/path.rb +++ b/lib/leap_cli/path.rb @@ -9,6 +9,7 @@ module LeapCli; module Path :nodes_dir => 'nodes', :services_dir => 'services', :tags_dir => 'tags', + :node_files_dir => 'files/nodes/#{arg}', # input config files :common_config => 'common.json', diff --git a/lib/leap_cli/util.rb b/lib/leap_cli/util.rb index 6b62be5..9b04894 100644 --- a/lib/leap_cli/util.rb +++ b/lib/leap_cli/util.rb @@ -1,5 +1,6 @@ require 'digest/md5' require 'paint' +require 'fileutils' module LeapCli @@ -197,6 +198,17 @@ module LeapCli end end + def remove_directory!(filepath) + filepath = Path.named_path(filepath) + if filepath !~ /^#{Regexp.escape(Path.provider)}/ || filepath =~ /\.\./ + raise "sanity check on rm -r did not pass for #{filepath}" + end + if File.directory?(filepath) + FileUtils.rm_r(filepath) + log :removed, filepath + end + end + def write_file!(filepath, contents) filepath = Path.named_path(filepath) ensure_dir File.dirname(filepath) |