diff options
| author | elijah <elijah@riseup.net> | 2012-11-15 01:54:31 -0800 | 
|---|---|---|
| committer | elijah <elijah@riseup.net> | 2012-11-15 01:54:31 -0800 | 
| commit | 088b4f047f3d4b8e075e10277bfe5f94cb0b9af1 (patch) | |
| tree | ab5debbef5c47c6ec615bb5719bc62f020889e3e | |
| parent | 359c0b757f1dd52b63e08f8b67fa7fe7f1c0ba00 (diff) | |
auto remove files/nodes/x when nodes/x.json doesn't exist anymore.
| -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) | 
