From 9aa20d5d6b91bb1185a0177eac2700ef6eac6314 Mon Sep 17 00:00:00 2001 From: Andrew Mains Date: Wed, 20 Aug 2014 12:04:32 -0700 Subject: [PATCH] Added ability to run salt orchestrations to salt provisioner --- plugins/provisioners/salt/config.rb | 1 + plugins/provisioners/salt/provisioner.rb | 29 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/plugins/provisioners/salt/config.rb b/plugins/provisioners/salt/config.rb index 4d97d942c..2d325dfe0 100644 --- a/plugins/provisioners/salt/config.rb +++ b/plugins/provisioners/salt/config.rb @@ -15,6 +15,7 @@ module VagrantPlugins attr_accessor :grains_config attr_accessor :run_highstate attr_accessor :run_overstate + attr_accessor :orchestrations attr_accessor :always_install attr_accessor :bootstrap_script attr_accessor :verbose diff --git a/plugins/provisioners/salt/provisioner.rb b/plugins/provisioners/salt/provisioner.rb index 87af7cc7d..65ef63077 100644 --- a/plugins/provisioners/salt/provisioner.rb +++ b/plugins/provisioners/salt/provisioner.rb @@ -9,6 +9,7 @@ module VagrantPlugins run_bootstrap_script call_overstate call_highstate + call_orchestrate end # Return a list of accepted keys @@ -336,6 +337,34 @@ module VagrantPlugins @machine.env.ui.info "run_highstate set to false. Not running state.highstate." end end + + def call_orchestrate + if not @config.orchestrations + @machine.env.ui.info "orchestrate is nil. Not running state.orchestrate." + return + end + + if not @config.install_master + @machine.env.ui.info "orchestrate does not make sense on a minion. Not running state.orchestrate" + return + end + + log_output = lambda do |type, data| + if @config.verbose + @machine.env.ui.info(data) + end + end + + @machine.env.ui.info "Running the following orchestrations: #{@config.orchestrations}" + @machine.env.ui.info "Running saltutil.sync_all before orchestrating" + @machine.communicate.sudo("salt '*' saltutil.sync_all", &log_output) + + @config.orchestrations.each do |orchestration| + cmd = "salt-run -l info state.orchestrate #{orchestration}" + @machine.env.ui.info "Calling #{cmd}... (this may take a while)" + @machine.communicate.sudo(cmd, &log_output) + end + end end end end