From ba301b0c8d77ae2f455d3a2d736968c981b8c757 Mon Sep 17 00:00:00 2001 From: elijah Date: Sun, 13 Jan 2013 20:27:29 -0800 Subject: added ability to sync support files along with hiera.yml. this way, files don't need to be embedded in hiera.yml. this is especially useful for binary files. --- lib/leap_cli/commands/deploy.rb | 65 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 7 deletions(-) (limited to 'lib/leap_cli/commands') diff --git a/lib/leap_cli/commands/deploy.rb b/lib/leap_cli/commands/deploy.rb index cc2ea96..a7f6bc3 100644 --- a/lib/leap_cli/commands/deploy.rb +++ b/lib/leap_cli/commands/deploy.rb @@ -1,3 +1,4 @@ + module LeapCli module Commands @@ -23,13 +24,9 @@ module LeapCli ssh.leap.assert_initialized end - # sync hiera conf - ssh.leap.log :syching, "hiera.yaml" do - ssh.leap.rsync_update do |server| - node = manager.node(server.host) - ssh.leap.log Path.relative_path([:hiera, node.name]) + ' -> ' + node.name + ':/etc/leap/hiera.yaml' - {:source => Path.named_path([:hiera, node.name]), :dest => "/etc/leap/hiera.yaml"} - end + ssh.leap.log :syching, "configuration files" do + sync_hiera_config(ssh) + sync_support_files(ssh) end # sync puppet manifests and apply them @@ -46,6 +43,37 @@ module LeapCli private + def sync_hiera_config(ssh) + dest_dir = manager.provider.hiera_sync_destination + ssh.leap.rsync_update do |server| + node = manager.node(server.host) + hiera_file = Path.relative_path([:hiera, node.name]) + ssh.leap.log hiera_file + ' -> ' + node.name + ':' + dest_dir + '/hiera.yaml' + {:source => hiera_file, :dest => dest_dir + '/hiera.yaml'} + end + end + + def sync_support_files(ssh) + dest_dir = manager.provider.hiera_sync_destination + ssh.leap.rsync_update do |server| + node = manager.node(server.host) + files_to_sync = node.file_paths.collect {|path| Path.relative_path(path, Path.provider) } + if files_to_sync.any? + ssh.leap.log(files_to_sync.join(', ') + ' -> ' + node.name + ':' + dest_dir) + { + :chdir => Path.provider, + :source => ".", + :dest => dest_dir, + :excludes => "*", + :includes => calculate_includes_from_files(files_to_sync), + :flags => "--relative --dirs --delete --delete-excluded --filter='protect hiera.yaml' --copy-links" + } + else + nil + end + end + end + def init_submodules Dir.chdir Path.platform do statuses = assert_run! "git submodule status" @@ -59,5 +87,28 @@ module LeapCli end end + def calculate_includes_from_files(files) + # prepend '/' (kind of like ^ for rsync) + includes = files.collect {|file| '/' + file} + + # include all sub files of specified directories + includes.size.times do |i| + if includes[i] =~ /\/$/ + includes << includes[i] + '**' + end + end + + # include all parent directories + includes.size.times do |i| + path = File.dirname(includes[i]) + while(path != '/') + includes << path unless includes.include?(path) + path = File.dirname(path) + end + end + + return includes + end + end end \ No newline at end of file -- cgit v1.2.3