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.
Files changed (38) hide show
  1. data/README.md +95 -0
  2. data/lib/vagrant-nodemaster.rb +4 -2
  3. data/lib/vagrant-nodemaster/apidesc.rb +105 -1
  4. data/lib/vagrant-nodemaster/node/nodeadd.rb +4 -4
  5. data/lib/vagrant-nodemaster/node/nodedbmanager.rb +49 -33
  6. data/lib/vagrant-nodemaster/node/nodelist.rb +2 -2
  7. data/lib/vagrant-nodemaster/node/nodeoperationcommand.rb +85 -0
  8. data/lib/vagrant-nodemaster/node/nodeoperationlast.rb +47 -0
  9. data/lib/vagrant-nodemaster/node/nodeoperationshow.rb +39 -0
  10. data/lib/vagrant-nodemaster/node/noderemove.rb +3 -3
  11. data/lib/vagrant-nodemaster/node/nodestatus.rb +2 -2
  12. data/lib/vagrant-nodemaster/node/nodeupdate.rb +2 -2
  13. data/lib/vagrant-nodemaster/node/nodeupdatepw.rb +72 -0
  14. data/lib/vagrant-nodemaster/nodecommand.rb +14 -0
  15. data/lib/vagrant-nodemaster/remote/configmanager.rb +16 -0
  16. data/lib/vagrant-nodemaster/remote/remoteboxadd.rb +11 -8
  17. data/lib/vagrant-nodemaster/remote/remoteconfigaddvm.rb +46 -0
  18. data/lib/vagrant-nodemaster/remote/remoteconfigcommand.rb +110 -0
  19. data/lib/vagrant-nodemaster/remote/remoteconfigdeletevm.rb +37 -0
  20. data/lib/vagrant-nodemaster/remote/remoteconfigshow.rb +31 -0
  21. data/lib/vagrant-nodemaster/remote/remoteconfigupload.rb +34 -0
  22. data/lib/vagrant-nodemaster/remote/remotehalt.rb +14 -5
  23. data/lib/vagrant-nodemaster/remote/remoteprovision.rb +31 -23
  24. data/lib/vagrant-nodemaster/remote/remoteresume.rb +16 -9
  25. data/lib/vagrant-nodemaster/remote/remotesnapshotcommand.rb +8 -3
  26. data/lib/vagrant-nodemaster/remote/remotesnapshotdelete.rb +31 -0
  27. data/lib/vagrant-nodemaster/remote/remotesnapshotlist.rb +1 -0
  28. data/lib/vagrant-nodemaster/remote/remotesnapshotrestore.rb +17 -9
  29. data/lib/vagrant-nodemaster/remote/remotesnapshottake.rb +16 -6
  30. data/lib/vagrant-nodemaster/remote/remotesuspend.rb +15 -7
  31. data/lib/vagrant-nodemaster/remote/remoteup.rb +18 -22
  32. data/lib/vagrant-nodemaster/remote/remotevmstatus.rb +1 -1
  33. data/lib/vagrant-nodemaster/remotecommand.rb +18 -5
  34. data/lib/vagrant-nodemaster/requestcontroller.rb +321 -69
  35. data/lib/vagrant-nodemaster/version.rb +1 -1
  36. data/vagrant-nodemaster.gemspec +7 -2
  37. metadata +18 -7
  38. 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
- machines.each do |machine|
29
- @env.ui.info("Remote Client \"#{argv[0]}\": Virtual Machine \"#{machine}\" halted")
30
- end
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
- options = {}
8
-
9
- opts = OptionParser.new do |opts|
10
- opts.banner = "Usage: vagrant remote provision <node-name> [vm_name]"
11
- end
12
-
13
- argv = parse_options(opts)
14
- return if !argv
15
- raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if (argv.length < 1 || argv.length > 2)
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
- machines=RequestController.vm_provision(argv[0],argv[1])
21
-
22
-
23
- machines.each do |machine|
24
- @env.ui.info("Remote Client \"#{argv[0]}\": Virtual Machine \"#{machine}\" provisioned")
25
- end
26
-
27
- @env.ui.info(" ")
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
- end
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
- machines=RequestController.vm_resume(argv[0],argv[1])
19
-
20
-
21
- machines.each do |machine|
22
- @env.ui.info("Remote Client \"#{argv[0]}\":Virtual Machine \"#{machine}\" resumed")
23
- end
24
-
25
- @env.ui.info(" ")
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
@@ -21,6 +21,7 @@ module Vagrant
21
21
  snapshots = RequestController.get_remote_snapshots(argv[0],argv[1])
22
22
 
23
23
  @env.ui.info("Remote Client \"#{argv[0]}\":", :prefix => false)
24
+
24
25
  snapshots.each do |vmname,snapshots|
25
26
 
26
27
  if (!snapshots || snapshots.empty?)
@@ -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
- @env.ui.info("Remote Client \"#{argv[0]}\": Virtual Machine \"#{argv[1]}\" => Restoring snapshot \"#{argv[2]}\"", :prefix => false)
24
- #@env.ui.info("Snapshot \"#{snapshot[:name]}\" with UUID #{snapshot[:id]} succesfully created.")
25
- rescue RestClient::ResourceNotFound => e
26
- @env.ui.error("Remote Client \"#{@argv[0]}\": Virtual Machine \"#{argv[1]}\" => Snapshot \"#{argv[2]}\" could not be found")
27
- end
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