summaryrefslogtreecommitdiff
path: root/lib/leap_cli/commands/deploy.rb
diff options
context:
space:
mode:
authorelijah <elijah@riseup.net>2013-01-13 20:27:29 -0800
committerelijah <elijah@riseup.net>2013-01-13 20:27:29 -0800
commitba301b0c8d77ae2f455d3a2d736968c981b8c757 (patch)
treefac1c2f483732d158f106d8ad7917bfc7e07c239 /lib/leap_cli/commands/deploy.rb
parentbea336480bf90f7c24737809e27b0bd224f42233 (diff)
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.
Diffstat (limited to 'lib/leap_cli/commands/deploy.rb')
-rw-r--r--lib/leap_cli/commands/deploy.rb65
1 files changed, 58 insertions, 7 deletions
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