Sha256: 4ff11b436302fe1d043a2a99a514d875ca5c85429eb5c8e561b31d48e2e08499

Contents?: true

Size: 1.92 KB

Versions: 3

Compression:

Stored size: 1.92 KB

Contents

module VagrantPlugins
  module ShellCommander
    # Main plugin command
    class Command < Vagrant.plugin("2", "command")
      attr_accessor :env
      
      # Main entry point of this command
      #
      def execute
        cli_options = OptionManager.new.execute
        argv = parse_options(cli_options[:parser])
        
        return unless argv
        
        if [nil, ''].include? cli_options[:values][:cmd]
        env.ui.info cli_options[:parser]
        else
          with_target_vms(argv) do |machine|
            manage_machine(machine, cli_options) 
          end
        end
        0
      end
      
      private
      
      # Executes actions for a given machine
      #
      # @param [Vagrant::Machine] subject vm 
      # @param [Hash] Parser (:parser key) and parsed options (:values key)
      # @return nil
      #
      def manage_machine(machine, cli_options)
        if machine.state.id != :running
          env.ui.warn("Machine #{machine.name} is not running.")
          return
        end
        
        env.ui.success("#{machine.name}::")
        machine.action(:ssh_run, 
                       ssh_run_command: add_options_to_command(cli_options[:values][:cmd], 
                                                               cli_options[:values][:dir],
                                                               cli_options[:values][:user]),
                      ssh_opts: {extra_args: []})
      end
      
      # Adds the options to the given command
      #
      # @param cmd [String] Shell command
      # @param cwd [String] Optional working directory
      # @param user [String] Optional executing user
      # @return [String] Command with directory change if cwd is present and optional executing user
      #
      def add_options_to_command(cmd, cwd=nil, user=nil)
        cmd = "cd #{cwd} && #{cmd}" if cwd
        cmd = "sudo su - #{user} -c \"#{cmd}\"" if user
        cmd
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
vagrant-shell-commander-0.3.2 lib/vagrant-shell-commander/command.rb
vagrant-shell-commander-0.3.1 lib/vagrant-shell-commander/command.rb
vagrant-shell-commander-0.3.0 lib/vagrant-shell-commander/command.rb