vagrant-nodemaster 0.0.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +95 -0
- data/lib/vagrant-nodemaster.rb +4 -2
- data/lib/vagrant-nodemaster/apidesc.rb +105 -1
- data/lib/vagrant-nodemaster/node/nodeadd.rb +4 -4
- data/lib/vagrant-nodemaster/node/nodedbmanager.rb +49 -33
- data/lib/vagrant-nodemaster/node/nodelist.rb +2 -2
- data/lib/vagrant-nodemaster/node/nodeoperationcommand.rb +85 -0
- data/lib/vagrant-nodemaster/node/nodeoperationlast.rb +47 -0
- data/lib/vagrant-nodemaster/node/nodeoperationshow.rb +39 -0
- data/lib/vagrant-nodemaster/node/noderemove.rb +3 -3
- data/lib/vagrant-nodemaster/node/nodestatus.rb +2 -2
- data/lib/vagrant-nodemaster/node/nodeupdate.rb +2 -2
- data/lib/vagrant-nodemaster/node/nodeupdatepw.rb +72 -0
- data/lib/vagrant-nodemaster/nodecommand.rb +14 -0
- data/lib/vagrant-nodemaster/remote/configmanager.rb +16 -0
- data/lib/vagrant-nodemaster/remote/remoteboxadd.rb +11 -8
- data/lib/vagrant-nodemaster/remote/remoteconfigaddvm.rb +46 -0
- data/lib/vagrant-nodemaster/remote/remoteconfigcommand.rb +110 -0
- data/lib/vagrant-nodemaster/remote/remoteconfigdeletevm.rb +37 -0
- data/lib/vagrant-nodemaster/remote/remoteconfigshow.rb +31 -0
- data/lib/vagrant-nodemaster/remote/remoteconfigupload.rb +34 -0
- data/lib/vagrant-nodemaster/remote/remotehalt.rb +14 -5
- data/lib/vagrant-nodemaster/remote/remoteprovision.rb +31 -23
- data/lib/vagrant-nodemaster/remote/remoteresume.rb +16 -9
- data/lib/vagrant-nodemaster/remote/remotesnapshotcommand.rb +8 -3
- data/lib/vagrant-nodemaster/remote/remotesnapshotdelete.rb +31 -0
- data/lib/vagrant-nodemaster/remote/remotesnapshotlist.rb +1 -0
- data/lib/vagrant-nodemaster/remote/remotesnapshotrestore.rb +17 -9
- data/lib/vagrant-nodemaster/remote/remotesnapshottake.rb +16 -6
- data/lib/vagrant-nodemaster/remote/remotesuspend.rb +15 -7
- data/lib/vagrant-nodemaster/remote/remoteup.rb +18 -22
- data/lib/vagrant-nodemaster/remote/remotevmstatus.rb +1 -1
- data/lib/vagrant-nodemaster/remotecommand.rb +18 -5
- data/lib/vagrant-nodemaster/requestcontroller.rb +321 -69
- data/lib/vagrant-nodemaster/version.rb +1 -1
- data/vagrant-nodemaster.gemspec +7 -2
- metadata +18 -7
- data/Readme.md +0 -0
| @@ -0,0 +1,110 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            require 'vagrant/plugin'
         | 
| 3 | 
            +
             
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Vagrant
         | 
| 6 | 
            +
              module NodeMaster
         | 
| 7 | 
            +
             
         | 
| 8 | 
            +
            	class ConfigCommand < Vagrant.plugin(2, :command)
         | 
| 9 | 
            +
            		def initialize(argv, env)
         | 
| 10 | 
            +
            			super
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            			@main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            #			puts "MAIN ARGS #{@main_args}"
         | 
| 15 | 
            +
            #			puts "SUB COMMAND #{@sub_command}"
         | 
| 16 | 
            +
            #			puts "SUB ARGS #{@sub_args}"
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            			@subcommands = Vagrant::Registry.new
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            			@subcommands.register(:show) do
         | 
| 21 | 
            +
            				require File.expand_path("../remoteconfigshow", __FILE__)
         | 
| 22 | 
            +
            				ConfigShow
         | 
| 23 | 
            +
            			end
         | 
| 24 | 
            +
            			
         | 
| 25 | 
            +
            			# @subcommands.register(:load) do
         | 
| 26 | 
            +
                    # require File.expand_path("../remoteconfigload", __FILE__)
         | 
| 27 | 
            +
                    # ConfigShow
         | 
| 28 | 
            +
                  # end
         | 
| 29 | 
            +
                  
         | 
| 30 | 
            +
                    @subcommands.register(:addvm) do
         | 
| 31 | 
            +
                      require File.expand_path("../remoteconfigaddvm", __FILE__)
         | 
| 32 | 
            +
                      AddVM
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
                    
         | 
| 35 | 
            +
                    @subcommands.register(:deletevm) do
         | 
| 36 | 
            +
                      require File.expand_path("../remoteconfigdeletevm", __FILE__)
         | 
| 37 | 
            +
                      DeleteVM
         | 
| 38 | 
            +
                    end
         | 
| 39 | 
            +
                    
         | 
| 40 | 
            +
                    @subcommands.register(:upload) do
         | 
| 41 | 
            +
                      require File.expand_path("../remoteconfigupload", __FILE__)
         | 
| 42 | 
            +
                      ConfigUpload
         | 
| 43 | 
            +
                    end
         | 
| 44 | 
            +
            			
         | 
| 45 | 
            +
            			# @subcommands.register(:log) do
         | 
| 46 | 
            +
            				# require File.expand_path("../remotebackuplog", __FILE__)
         | 
| 47 | 
            +
            				# BackupLog
         | 
| 48 | 
            +
            			# end
         | 
| 49 | 
            +
            							
         | 
| 50 | 
            +
             | 
| 51 | 
            +
            		end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            		def execute
         | 
| 54 | 
            +
            #			if @main_args.include?("-h") || @main_args.include?("--help")
         | 
| 55 | 
            +
            #				 Print the help for all the box commands.
         | 
| 56 | 
            +
            #				return help
         | 
| 57 | 
            +
            #			end
         | 
| 58 | 
            +
            			
         | 
| 59 | 
            +
            			# If we reached this far then we must have a subcommand. If not,
         | 
| 60 | 
            +
            			# then we also just print the help and exit.
         | 
| 61 | 
            +
            			command_class = @subcommands.get(@sub_command.to_sym) if @sub_command
         | 
| 62 | 
            +
            			return help if !command_class || !@sub_command
         | 
| 63 | 
            +
            			
         | 
| 64 | 
            +
            			@logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}")
         | 
| 65 | 
            +
            			
         | 
| 66 | 
            +
            				
         | 
| 67 | 
            +
            			begin	
         | 
| 68 | 
            +
            				# Initialize and execute the command class
         | 
| 69 | 
            +
            				command_class.new(@sub_args, @env).execute
         | 
| 70 | 
            +
            			rescue RestClient::ExceptionWithResponse=> e          
         | 
| 71 | 
            +
                    @env.ui.error(e.response)
         | 
| 72 | 
            +
            			rescue RestClient::RequestFailed => e
         | 
| 73 | 
            +
            				@env.ui.error("Remote Client \"#{@sub_args[0]}\": Request Failed")
         | 
| 74 | 
            +
            			rescue RestClient::ResourceNotFound => e          
         | 
| 75 | 
            +
            				@env.ui.error("Remote Client \"#{@sub_args[0]}\": Box \"#{@sub_args[1]}\" could not be found")			
         | 
| 76 | 
            +
            			rescue Exception => e
         | 
| 77 | 
            +
            				@env.ui.error(e.message)
         | 
| 78 | 
            +
            			end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
            			
         | 
| 81 | 
            +
            		end
         | 
| 82 | 
            +
            		
         | 
| 83 | 
            +
            		def help
         | 
| 84 | 
            +
            			opts = OptionParser.new do |opts|
         | 
| 85 | 
            +
            				opts.banner = "Usage: vagrant remote config <command> [<args>]"
         | 
| 86 | 
            +
            				opts.separator ""
         | 
| 87 | 
            +
            				opts.separator "Available subcommands:"
         | 
| 88 | 
            +
            	
         | 
| 89 | 
            +
            				# Add the available subcommands as separators in order to print them
         | 
| 90 | 
            +
            				# out as well.
         | 
| 91 | 
            +
            				keys = []
         | 
| 92 | 
            +
            				@subcommands.each { |key, value| keys << key.to_s }
         | 
| 93 | 
            +
            	
         | 
| 94 | 
            +
            				keys.sort.each do |key|
         | 
| 95 | 
            +
            					opts.separator "     #{key}"
         | 
| 96 | 
            +
            				end
         | 
| 97 | 
            +
            	
         | 
| 98 | 
            +
            				opts.separator ""
         | 
| 99 | 
            +
            				opts.separator "For help on any individual command run `vagrant remote COMMAND -h`"
         | 
| 100 | 
            +
            			end
         | 
| 101 | 
            +
            	
         | 
| 102 | 
            +
            			@env.ui.info(opts.help, :prefix => false)
         | 
| 103 | 
            +
            		end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
             | 
| 106 | 
            +
             | 
| 107 | 
            +
            		
         | 
| 108 | 
            +
            	end
         | 
| 109 | 
            +
              end
         | 
| 110 | 
            +
            end
         | 
| @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            require 'optparse'
         | 
| 2 | 
            +
            require 'vagrant-nodemaster/requestcontroller'
         | 
| 3 | 
            +
            module Vagrant
         | 
| 4 | 
            +
            	module NodeMaster
         | 
| 5 | 
            +
            		class DeleteVM < Vagrant.plugin(2, :command)
         | 
| 6 | 
            +
            			
         | 
| 7 | 
            +
            			def execute
         | 
| 8 | 
            +
            				options = {}
         | 
| 9 | 
            +
            				options[:remove] = false
         | 
| 10 | 
            +
            				
         | 
| 11 | 
            +
            				opts = OptionParser.new do |opts|
         | 
| 12 | 
            +
            				
         | 
| 13 | 
            +
            					opts.banner = "Usage: vagrant remote config deletevm <node-name> <vm_name> [--remove]"
         | 
| 14 | 
            +
            					opts.separator ""
         | 
| 15 | 
            +
            					opts.on("-r", "--remove", "Deletes all information of the VM in the remote node") do |r|
         | 
| 16 | 
            +
            						options[:remove] = r
         | 
| 17 | 
            +
            					end
         | 
| 18 | 
            +
            				
         | 
| 19 | 
            +
            				end
         | 
| 20 | 
            +
            				
         | 
| 21 | 
            +
            				
         | 
| 22 | 
            +
            				
         | 
| 23 | 
            +
            				argv = parse_options(opts)
         | 
| 24 | 
            +
            				      
         | 
| 25 | 
            +
            				return if !argv
         | 
| 26 | 
            +
            						
         | 
| 27 | 
            +
            				raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if (argv.length != 2)
         | 
| 28 | 
            +
            				
         | 
| 29 | 
            +
            				#Destroy machines 
         | 
| 30 | 
            +
            				result=RequestController.vm_delete(argv[0],argv[1],options[:remove])
         | 
| 31 | 
            +
            				
         | 
| 32 | 
            +
            				@env.ui.success("Operation successfully performed") if result
         | 
| 33 | 
            +
            				
         | 
| 34 | 
            +
            			end
         | 
| 35 | 
            +
            		end
         | 
| 36 | 
            +
            	end
         | 
| 37 | 
            +
            end
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            require 'optparse'
         | 
| 2 | 
            +
            require 'vagrant-nodemaster/requestcontroller'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Vagrant
         | 
| 6 | 
            +
              module NodeMaster
         | 
| 7 | 
            +
              	
         | 
| 8 | 
            +
            		class ConfigShow < Vagrant.plugin(2, :command)
         | 
| 9 | 
            +
            			def execute
         | 
| 10 | 
            +
            				options = {}	
         | 
| 11 | 
            +
            								
         | 
| 12 | 
            +
            				opts = OptionParser.new do |opts|
         | 
| 13 | 
            +
            					opts.banner = "Usage: vagrant remote config show <node-name> [-h]"
         | 
| 14 | 
            +
            				end
         | 
| 15 | 
            +
            				
         | 
| 16 | 
            +
            				
         | 
| 17 | 
            +
            				argv = parse_options(opts)          
         | 
| 18 | 
            +
            									
         | 
| 19 | 
            +
            				return if !argv 
         | 
| 20 | 
            +
            				raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length != 1
         | 
| 21 | 
            +
            									
         | 
| 22 | 
            +
            				config_file=RequestController.node_config_show(argv[0])
         | 
| 23 | 
            +
            				@env.ui.info(config_file)
         | 
| 24 | 
            +
            										
         | 
| 25 | 
            +
            				0
         | 
| 26 | 
            +
            			end
         | 
| 27 | 
            +
            			
         | 
| 28 | 
            +
            			
         | 
| 29 | 
            +
            		end
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
            end
         | 
| @@ -0,0 +1,34 @@ | |
| 1 | 
            +
            require 'optparse'
         | 
| 2 | 
            +
            require 'vagrant-nodemaster/requestcontroller'
         | 
| 3 | 
            +
            module Vagrant
         | 
| 4 | 
            +
            	module NodeMaster
         | 
| 5 | 
            +
            		class ConfigUpload < Vagrant.plugin(2, :command)
         | 
| 6 | 
            +
            			
         | 
| 7 | 
            +
            			def execute
         | 
| 8 | 
            +
            				
         | 
| 9 | 
            +
            				
         | 
| 10 | 
            +
            				opts = OptionParser.new do |opts|
         | 
| 11 | 
            +
            				
         | 
| 12 | 
            +
            					opts.banner = "Usage: vagrant remote config upload <node-name> <config_file>"
         | 
| 13 | 
            +
            					opts.separator ""				
         | 
| 14 | 
            +
            				
         | 
| 15 | 
            +
            				end
         | 
| 16 | 
            +
            				
         | 
| 17 | 
            +
            				
         | 
| 18 | 
            +
            				
         | 
| 19 | 
            +
            				argv = parse_options(opts)
         | 
| 20 | 
            +
            				       
         | 
| 21 | 
            +
            				return if !argv
         | 
| 22 | 
            +
            						
         | 
| 23 | 
            +
            				raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if (argv.length != 2)
         | 
| 24 | 
            +
            				
         | 
| 25 | 
            +
            				#Add machines 
         | 
| 26 | 
            +
            				result=RequestController.node_config_upload(argv[0],argv[1])				
         | 
| 27 | 
            +
            				
         | 
| 28 | 
            +
             			  @env.ui.success("Operation successfully performed") if result
         | 
| 29 | 
            +
            				
         | 
| 30 | 
            +
            				
         | 
| 31 | 
            +
            			end
         | 
| 32 | 
            +
            		end
         | 
| 33 | 
            +
            	end
         | 
| 34 | 
            +
            end
         | 
| @@ -6,13 +6,17 @@ module Vagrant | |
| 6 6 | 
             
            			def execute
         | 
| 7 7 | 
             
            				options = {}
         | 
| 8 8 | 
             
            				options[:force] = false
         | 
| 9 | 
            +
            				options[:async] = true
         | 
| 9 10 |  | 
| 10 11 | 
             
            				opts = OptionParser.new do |opts|
         | 
| 11 | 
            -
            					opts.banner = "Usage: vagrant remote halt <node-name> [vm_name] [--force] [-h]"
         | 
| 12 | 
            +
            					opts.banner = "Usage: vagrant remote halt <node-name> [vm_name] [--force] [--synchronous] [-h]"
         | 
| 12 13 | 
             
            					opts.separator ""
         | 
| 13 14 | 
             
            					opts.on("-f", "--force", "Force shut down") do |f|
         | 
| 14 15 | 
             
            						options[:force] = f
         | 
| 15 16 | 
             
            					end
         | 
| 17 | 
            +
            					opts.on("-s", "--synchronous", "Wait until the operation finishes") do |f|
         | 
| 18 | 
            +
                        options[:async] = false
         | 
| 19 | 
            +
                      end
         | 
| 16 20 | 
             
            				end
         | 
| 17 21 |  | 
| 18 22 |  | 
| @@ -23,11 +27,16 @@ module Vagrant | |
| 23 27 |  | 
| 24 28 | 
             
            #				begin          		          		
         | 
| 25 29 |  | 
| 26 | 
            -
            					machines=RequestController.vm_halt(argv[0],argv[1],options[:force])
         | 
| 30 | 
            +
            					machines=RequestController.vm_halt(argv[0],argv[1],options[:force],options[:async])
         | 
| 27 31 |  | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 32 | 
            +
                      if options[:async] == false   
         | 
| 33 | 
            +
              					machines.each do |machine|
         | 
| 34 | 
            +
              					 @env.ui.success("Remote Client \"#{argv[0]}\": Virtual Machine \"#{machine["vmname"]}\" halted")
         | 
| 35 | 
            +
              					end          				
         | 
| 36 | 
            +
            					else
         | 
| 37 | 
            +
            					  @env.ui.info("Remote Client \"#{argv[0]}\": The operation ID is \"#{machines.gsub!(/\D/, "")}\"")
         | 
| 38 | 
            +
            					end
         | 
| 39 | 
            +
              					  
         | 
| 31 40 |  | 
| 32 41 |  | 
| 33 42 | 
             
            #				rescue RestClient::RequestFailed => e
         | 
| @@ -4,28 +4,36 @@ module Vagrant | |
| 4 4 | 
             
              module NodeMaster
         | 
| 5 5 | 
             
            	class ProvisionVM < Vagrant.plugin(2, :command)
         | 
| 6 6 | 
             
            		def execute
         | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 7 | 
            +
            	    options = {}
         | 
| 8 | 
            +
                  options[:async] = true
         | 
| 9 | 
            +
                  
         | 
| 10 | 
            +
                  opts = OptionParser.new do |opts|
         | 
| 11 | 
            +
                    opts.banner = "Usage: vagrant remote provision <node-name> [vm_name] [--synchronous]"
         | 
| 12 | 
            +
                    opts.separator ""
         | 
| 13 | 
            +
                    opts.on("-s", "--synchronous", "Wait until the operation finishes") do |f|
         | 
| 14 | 
            +
                        options[:async] = false
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
                  
         | 
| 18 | 
            +
                  argv = parse_options(opts)
         | 
| 19 | 
            +
                  return if !argv  
         | 
| 20 | 
            +
                  raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if (argv.length < 1 || argv.length > 2)
         | 
| 21 | 
            +
                  
         | 
| 17 22 | 
             
            #          begin          		          		
         | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 23 | 
            +
                  		
         | 
| 24 | 
            +
                  		
         | 
| 25 | 
            +
            			machines=RequestController.vm_provision(argv[0],argv[1],options[:async])
         | 
| 26 | 
            +
            			
         | 
| 27 | 
            +
            			if options[:async] == false
         | 
| 28 | 
            +
                    machines.each do |machine|
         | 
| 29 | 
            +
                      @env.ui.info("Remote Client \"#{argv[0]}\": Virtual Machine \"#{machine}\" provisioned")
         | 
| 30 | 
            +
                    end
         | 
| 31 | 
            +
                    @env.ui.info(" ")           
         | 
| 32 | 
            +
                  else
         | 
| 33 | 
            +
                    @env.ui.info("Remote Client \"#{argv[0]}\": The operation ID is \"#{machines.gsub!(/\D/, "")}\"")
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
            			
         | 
| 36 | 
            +
                    		         		
         | 
| 29 37 | 
             
            #          rescue RestClient::RequestFailed => e
         | 
| 30 38 | 
             
            #          		@env.ui.error("Remote Client \"#{argv[0]}\": Request Failed")
         | 
| 31 39 | 
             
            #          rescue RestClient::ResourceNotFound => e          
         | 
| @@ -35,8 +43,8 @@ module Vagrant | |
| 35 43 | 
             
            #          rescue Exception => e
         | 
| 36 44 | 
             
            #          		@env.ui.error(e.message)
         | 
| 37 45 | 
             
            #          end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 46 | 
            +
                    
         | 
| 47 | 
            +
                  end
         | 
| 40 48 |  | 
| 41 49 | 
             
            	end
         | 
| 42 50 | 
             
              end
         | 
| @@ -5,9 +5,14 @@ module Vagrant | |
| 5 5 | 
             
            	class ResumeVM < Vagrant.plugin(2, :command)
         | 
| 6 6 | 
             
             	def execute
         | 
| 7 7 | 
             
                      options = {}
         | 
| 8 | 
            +
                      options[:async] = true
         | 
| 8 9 |  | 
| 9 10 | 
             
                      opts = OptionParser.new do |opts|
         | 
| 10 | 
            -
                        opts.banner = "Usage: vagrant remote resume <node-name> [vm_name]"
         | 
| 11 | 
            +
                        opts.banner = "Usage: vagrant remote resume <node-name> [vm_name] [--synchronous]"
         | 
| 12 | 
            +
                        opts.separator ""
         | 
| 13 | 
            +
                        opts.on("-s", "--synchronous", "Wait until the operation finishes") do |f|
         | 
| 14 | 
            +
                          options[:async] = false
         | 
| 15 | 
            +
                        end
         | 
| 11 16 | 
             
                      end
         | 
| 12 17 |  | 
| 13 18 | 
             
                      argv = parse_options(opts)
         | 
| @@ -15,14 +20,16 @@ module Vagrant | |
| 15 20 | 
             
                      raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if (argv.length < 1 || argv.length > 2)
         | 
| 16 21 |  | 
| 17 22 |  | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 23 | 
            +
                  	  machines=RequestController.vm_resume(argv[0],argv[1],options[:async])
         | 
| 24 | 
            +
                            			  	
         | 
| 25 | 
            +
                      if options[:async] == false      		
         | 
| 26 | 
            +
                    	  machines.each do |machine|
         | 
| 27 | 
            +
                    	  	@env.ui.info("Remote Client \"#{argv[0]}\":Virtual Machine \"#{machine["vmname"]}\" resumed")
         | 
| 28 | 
            +
                    	  end          				
         | 
| 29 | 
            +
                  	  else
         | 
| 30 | 
            +
                  	    @env.ui.info("Remote Client \"#{argv[0]}\": The operation ID is \"#{machines.gsub!(/\D/, "")}\"")
         | 
| 31 | 
            +
                  	  end     										
         | 
| 32 | 
            +
                  	  
         | 
| 26 33 |  | 
| 27 34 | 
             
                      0
         | 
| 28 35 | 
             
                    end
         | 
| @@ -33,6 +33,11 @@ module Vagrant | |
| 33 33 | 
             
                        SnapshotRestore
         | 
| 34 34 | 
             
                      end
         | 
| 35 35 |  | 
| 36 | 
            +
                      @subcommands.register(:delete) do
         | 
| 37 | 
            +
                        require File.expand_path("../remotesnapshotdelete", __FILE__)
         | 
| 38 | 
            +
                        SnapshotDelete
         | 
| 39 | 
            +
                      end
         | 
| 40 | 
            +
                      
         | 
| 36 41 |  | 
| 37 42 | 
             
                    end
         | 
| 38 43 |  | 
| @@ -52,12 +57,12 @@ module Vagrant | |
| 52 57 | 
             
            			begin	
         | 
| 53 58 | 
             
            				# Initialize and execute the command class
         | 
| 54 59 | 
             
            				command_class.new(@sub_args, @env).execute
         | 
| 60 | 
            +
            			rescue RestClient::ExceptionWithResponse=> e          
         | 
| 61 | 
            +
                    @env.ui.error(e.response)
         | 
| 55 62 | 
             
            			rescue RestClient::RequestFailed => e
         | 
| 56 63 | 
             
            				@env.ui.error("Remote Client \"#{@sub_args[0]}\": Request Failed")
         | 
| 57 64 | 
             
            			rescue RestClient::ResourceNotFound => e          
         | 
| 58 | 
            -
            				@env.ui.error("Remote Client \"#{@sub_args[0]}\": Virtual Machine \"#{@sub_args[1]}\" could not be found")
         | 
| 59 | 
            -
            			rescue RestClient::ExceptionWithResponse=> e          
         | 
| 60 | 
            -
            				@env.ui.error(e.response)
         | 
| 65 | 
            +
            				@env.ui.error("Remote Client \"#{@sub_args[0]}\": Virtual Machine \"#{@sub_args[1]}\" could not be found")			
         | 
| 61 66 | 
             
            			rescue Exception => e
         | 
| 62 67 | 
             
            				@env.ui.error(e.message)
         | 
| 63 68 | 
             
            			end
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            require 'optparse'
         | 
| 2 | 
            +
            require 'vagrant-nodemaster/requestcontroller'
         | 
| 3 | 
            +
            module Vagrant
         | 
| 4 | 
            +
              module NodeMaster
         | 
| 5 | 
            +
              	
         | 
| 6 | 
            +
            		class SnapshotDelete < Vagrant.plugin(2, :command)
         | 
| 7 | 
            +
            			def execute
         | 
| 8 | 
            +
            				options = {}
         | 
| 9 | 
            +
            	
         | 
| 10 | 
            +
            				opts = OptionParser.new do |opts|
         | 
| 11 | 
            +
            					opts.banner = "Usage: vagrant remote snapshot delete <node-name> <vmname> <uuid>"
         | 
| 12 | 
            +
            				end
         | 
| 13 | 
            +
            				
         | 
| 14 | 
            +
            				
         | 
| 15 | 
            +
            				argv = parse_options(opts)
         | 
| 16 | 
            +
                    
         | 
| 17 | 
            +
            				raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length < 3 
         | 
| 18 | 
            +
                     					
         | 
| 19 | 
            +
            				RequestController.vm_snapshot_delete(argv[0],argv[1],argv[2])
         | 
| 20 | 
            +
               				
         | 
| 21 | 
            +
                    
         | 
| 22 | 
            +
            				@env.ui.success("Remote Client: #{argv[0]}: Snapshot with UUID #{argv[2]} succesfully deleted.", :prefix => false)
         | 
| 23 | 
            +
            				# @env.ui.success("Snapshot with UUID #{argv[2]} succesfully deleted.")
         | 
| 24 | 
            +
            						
         | 
| 25 | 
            +
            				0
         | 
| 26 | 
            +
            			end
         | 
| 27 | 
            +
            			
         | 
| 28 | 
            +
            			
         | 
| 29 | 
            +
            		end
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
            end
         | 
| @@ -6,9 +6,14 @@ module Vagrant | |
| 6 6 | 
             
            		class SnapshotRestore < Vagrant.plugin(2, :command)
         | 
| 7 7 | 
             
            			def execute
         | 
| 8 8 | 
             
            				options = {}
         | 
| 9 | 
            -
             | 
| 9 | 
            +
            	      options[:async] = true
         | 
| 10 | 
            +
            	     
         | 
| 10 11 | 
             
            				opts = OptionParser.new do |opts|
         | 
| 11 | 
            -
            					opts.banner = "Usage: vagrant remote snapshot restore <node-name> <vmname> <snapshot-uuid|snapshot-name]>"
         | 
| 12 | 
            +
            					opts.banner = "Usage: vagrant remote snapshot restore <node-name> <vmname> <snapshot-uuid|snapshot-name] [--synchronous]>"
         | 
| 13 | 
            +
            					opts.separator ""
         | 
| 14 | 
            +
            					opts.on("-s", "--synchronous", "Wait until the operation finishes") do |f|
         | 
| 15 | 
            +
                          options[:async] = false
         | 
| 16 | 
            +
                       end
         | 
| 12 17 | 
             
            				end
         | 
| 13 18 |  | 
| 14 19 |  | 
| @@ -17,14 +22,17 @@ module Vagrant | |
| 17 22 | 
             
            				return if !argv
         | 
| 18 23 | 
             
            				raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length != 3  
         | 
| 19 24 |  | 
| 20 | 
            -
            				begin
         | 
| 21 | 
            -
            					snapshot = RequestController.vm_snapshot_restore(argv[0],argv[1],argv[2])			
         | 
| 22 25 |  | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
            				 | 
| 26 | 
            -
            					@env.ui. | 
| 27 | 
            -
             | 
| 26 | 
            +
            				snapshot = RequestController.vm_snapshot_restore(argv[0],argv[1],argv[2],options[:async])			
         | 
| 27 | 
            +
            				
         | 
| 28 | 
            +
            				if options[:async] == false
         | 
| 29 | 
            +
            					@env.ui.info("Remote Client \"#{argv[0]}\": Virtual Machine \"#{argv[1]}\" => Restoring snapshot \"#{argv[2]}\"", :prefix => false)					
         | 
| 30 | 
            +
                    else
         | 
| 31 | 
            +
                      @env.ui.info("Remote Client \"#{argv[0]}\": The operation ID is \"#{snapshot.gsub!(/\D/, "")}\"")
         | 
| 32 | 
            +
                    end 
         | 
| 33 | 
            +
            				
         | 
| 34 | 
            +
            				
         | 
| 35 | 
            +
            				
         | 
| 28 36 | 
             
            				0
         | 
| 29 37 | 
             
            			end
         | 
| 30 38 |  |