vagrant-nodemaster 0.0.1

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 (36) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +4 -0
  3. data/Rakefile +1 -0
  4. data/lib/vagrant-nodemaster.rb +26 -0
  5. data/lib/vagrant-nodemaster/apidesc.rb +220 -0
  6. data/lib/vagrant-nodemaster/node/nodeadd.rb +33 -0
  7. data/lib/vagrant-nodemaster/node/nodedbmanager.rb +176 -0
  8. data/lib/vagrant-nodemaster/node/nodelist.rb +34 -0
  9. data/lib/vagrant-nodemaster/node/noderemove.rb +43 -0
  10. data/lib/vagrant-nodemaster/node/nodestatus.rb +73 -0
  11. data/lib/vagrant-nodemaster/node/nodeupdate.rb +43 -0
  12. data/lib/vagrant-nodemaster/nodecommand.rb +102 -0
  13. data/lib/vagrant-nodemaster/remote/remotebackupcommand.rb +90 -0
  14. data/lib/vagrant-nodemaster/remote/remotebackuplog.rb +62 -0
  15. data/lib/vagrant-nodemaster/remote/remotebackuptake.rb +50 -0
  16. data/lib/vagrant-nodemaster/remote/remoteboxadd.rb +35 -0
  17. data/lib/vagrant-nodemaster/remote/remoteboxcommand.rb +98 -0
  18. data/lib/vagrant-nodemaster/remote/remoteboxdelete.rb +40 -0
  19. data/lib/vagrant-nodemaster/remote/remoteboxlist.rb +32 -0
  20. data/lib/vagrant-nodemaster/remote/remotedestroy.rb +66 -0
  21. data/lib/vagrant-nodemaster/remote/remotehalt.rb +48 -0
  22. data/lib/vagrant-nodemaster/remote/remoteprovision.rb +43 -0
  23. data/lib/vagrant-nodemaster/remote/remoteresume.rb +32 -0
  24. data/lib/vagrant-nodemaster/remote/remotesnapshotcommand.rb +93 -0
  25. data/lib/vagrant-nodemaster/remote/remotesnapshotlist.rb +60 -0
  26. data/lib/vagrant-nodemaster/remote/remotesnapshotrestore.rb +34 -0
  27. data/lib/vagrant-nodemaster/remote/remotesnapshottake.rb +31 -0
  28. data/lib/vagrant-nodemaster/remote/remotessh.rb +55 -0
  29. data/lib/vagrant-nodemaster/remote/remotesuspend.rb +32 -0
  30. data/lib/vagrant-nodemaster/remote/remoteup.rb +43 -0
  31. data/lib/vagrant-nodemaster/remote/remotevmstatus.rb +43 -0
  32. data/lib/vagrant-nodemaster/remotecommand.rb +155 -0
  33. data/lib/vagrant-nodemaster/requestcontroller.rb +344 -0
  34. data/lib/vagrant-nodemaster/version.rb +5 -0
  35. data/vagrant-nodemaster.gemspec +29 -0
  36. metadata +157 -0
@@ -0,0 +1,93 @@
1
+
2
+ require 'vagrant/plugin'
3
+
4
+
5
+ module Vagrant
6
+ module NodeMaster
7
+
8
+ class SnapshotCommand < 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
+
21
+ @subcommands.register(:list) do
22
+ require File.expand_path("../remotesnapshotlist", __FILE__)
23
+ SnapshotList
24
+ end
25
+
26
+ @subcommands.register(:take) do
27
+ require File.expand_path("../remotesnapshottake", __FILE__)
28
+ SnapshotTake
29
+ end
30
+
31
+ @subcommands.register(:restore) do
32
+ require File.expand_path("../remotesnapshotrestore", __FILE__)
33
+ SnapshotRestore
34
+ end
35
+
36
+
37
+ end
38
+
39
+ def execute
40
+ # if @main_args.include?("-h") || @main_args.include?("--help")
41
+ # Print the help for all the box commands.
42
+ # return help
43
+ # end
44
+
45
+ # If we reached this far then we must have a subcommand. If not,
46
+ # then we also just print the help and exit.
47
+ command_class = @subcommands.get(@sub_command.to_sym) if @sub_command
48
+ return help if !command_class || !@sub_command
49
+
50
+ @logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}")
51
+
52
+ begin
53
+ # Initialize and execute the command class
54
+ command_class.new(@sub_args, @env).execute
55
+ rescue RestClient::RequestFailed => e
56
+ @env.ui.error("Remote Client \"#{@sub_args[0]}\": Request Failed")
57
+ 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)
61
+ rescue Exception => e
62
+ @env.ui.error(e.message)
63
+ end
64
+
65
+
66
+
67
+ end
68
+
69
+ def help
70
+ opts = OptionParser.new do |opts|
71
+ opts.banner = "Usage: vagrant remote snapshot <command> [<args>]"
72
+ opts.separator ""
73
+ opts.separator "Available subcommands:"
74
+
75
+ # Add the available subcommands as separators in order to print them
76
+ # out as well.
77
+ keys = []
78
+ @subcommands.each { |key, value| keys << key.to_s }
79
+
80
+ keys.sort.each do |key|
81
+ opts.separator " #{key}"
82
+ end
83
+
84
+ opts.separator ""
85
+ opts.separator "For help on any individual command run `vagrant remote COMMAND -h`"
86
+ end
87
+
88
+ @env.ui.info(opts.help, :prefix => false)
89
+ end
90
+
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,60 @@
1
+ require 'optparse'
2
+ require 'vagrant-nodemaster/requestcontroller'
3
+ module Vagrant
4
+ module NodeMaster
5
+ #FIXME Mejorar tema de pintado, añadir opciones para una salida
6
+ #más reducidad y otra más extensa
7
+ class SnapshotList < Vagrant.plugin(2, :command)
8
+ def execute
9
+ options = {}
10
+
11
+ opts = OptionParser.new do |opts|
12
+ opts.banner = "Usage: vagrant remote snapshot list <node-name> [vmname]"
13
+ end
14
+
15
+
16
+ argv = parse_options(opts)
17
+
18
+ return if !argv
19
+ raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length < 1 && argv.length > 2
20
+
21
+ snapshots = RequestController.get_remote_snapshots(argv[0],argv[1])
22
+
23
+ @env.ui.info("Remote Client \"#{argv[0]}\":", :prefix => false)
24
+ snapshots.each do |vmname,snapshots|
25
+
26
+ if (!snapshots || snapshots.empty?)
27
+ @env.ui.info("\nMachine \"#{vmname}\" #{NO_SNAPSHOT_MESSAGE}", :prefix => false)
28
+ else
29
+ @env.ui.info("\n--------------------------------------------------------------")
30
+ @env.ui.info("Machine \"#{vmname}\" Snapshots: ", :prefix => false)
31
+ @env.ui.info("--------------------------------------------------------------")
32
+ print_snapshots(snapshots)
33
+ @env.ui.info("\n")
34
+ end
35
+ end
36
+
37
+ 0
38
+ end
39
+ private
40
+ NO_SNAPSHOT_MESSAGE = "does not have any snapshots"
41
+
42
+ def print_snapshots(snapshots,level=1)
43
+ return if snapshots.empty?
44
+
45
+ snapshots.each { |snapshot|
46
+ space = " " * level
47
+ space = space + "* " if (snapshot[:current_state])
48
+
49
+ @env.ui.info("#{space}Date: #{snapshot[:timestamp].ljust(3)}")
50
+ @env.ui.info("#{space}Name: #{snapshot[:name]}")
51
+ @env.ui.info("#{space}UUID: #{snapshot[:uuid]}")
52
+ @env.ui.info("#{space}Description: #{snapshot[:description]}")
53
+ @env.ui.info("#{space}-----------------------------------------------------")
54
+ print_snapshots(snapshot[:snapshots],level+1)
55
+ }
56
+ end
57
+
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,34 @@
1
+ require 'optparse'
2
+ require 'vagrant-nodemaster/requestcontroller'
3
+ module Vagrant
4
+ module NodeMaster
5
+
6
+ class SnapshotRestore < Vagrant.plugin(2, :command)
7
+ def execute
8
+ options = {}
9
+
10
+ opts = OptionParser.new do |opts|
11
+ opts.banner = "Usage: vagrant remote snapshot restore <node-name> <vmname> <snapshot-uuid|snapshot-name]>"
12
+ end
13
+
14
+
15
+ argv = parse_options(opts)
16
+
17
+ return if !argv
18
+ raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length != 3
19
+
20
+ begin
21
+ snapshot = RequestController.vm_snapshot_restore(argv[0],argv[1],argv[2])
22
+
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
28
+ 0
29
+ end
30
+
31
+
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,31 @@
1
+ require 'optparse'
2
+ require 'vagrant-nodemaster/requestcontroller'
3
+ module Vagrant
4
+ module NodeMaster
5
+
6
+ class SnapshotTake < Vagrant.plugin(2, :command)
7
+ def execute
8
+ options = {}
9
+
10
+ opts = OptionParser.new do |opts|
11
+ opts.banner = "Usage: vagrant remote snapshot take <node-name> <vmname> <name> [description]"
12
+ end
13
+
14
+
15
+ argv = parse_options(opts)
16
+
17
+ return if !argv
18
+ raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length < 3 || argv.length > 4
19
+
20
+ snapshot = RequestController.vm_snapshot_take(argv[0],argv[1],argv[2],argv[3])
21
+
22
+ @env.ui.info("Remote Client: #{argv[0]}", :prefix => false)
23
+ @env.ui.info("Snapshot \"#{snapshot[:name]}\" with UUID #{snapshot[:id]} succesfully created.")
24
+
25
+ 0
26
+ end
27
+
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,55 @@
1
+ require 'optparse'
2
+ require 'vagrant-nodemaster/requestcontroller'
3
+
4
+ require "vagrant/util/ssh"
5
+
6
+ module Vagrant
7
+ module NodeMaster
8
+ class SSHVM < Vagrant.plugin(2, :command)
9
+ include Vagrant::Util
10
+ def execute
11
+ options = {}
12
+ options[:force] = false
13
+
14
+ opts = OptionParser.new do |opts|
15
+ opts.banner = "Usage: vagrant remote ssh <node-name> <vm_name> [-h]"
16
+
17
+ end
18
+
19
+
20
+ argv = parse_options(opts)
21
+ return if !argv
22
+
23
+ raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if (argv.length != 2)
24
+
25
+
26
+ #begin
27
+
28
+ #Gettting SSH Config for vm. Inside this machine, the parameter
29
+ #port is one that will be used at the client to make the redirection
30
+ #to the virtual machine
31
+ vminfo=RequestController.vm_ssh_config(argv[0],argv[1])
32
+
33
+ raise Errors::SSHNotReady if vminfo.nil?
34
+
35
+ SSH.exec(vminfo)
36
+
37
+
38
+ # rescue RestClient::RequestFailed => e
39
+ # @env.ui.error("Remote Client \"#{argv[0]}\": Request Failed")
40
+ # rescue RestClient::ResourceNotFound => e
41
+ # @env.ui.error("Remote Client \"#{argv[0]}\": Virtual Machine \"#{argv[1]}\" could not be found")
42
+ # rescue RestClient::ExceptionWithResponse=> e
43
+ # @env.ui.error(e.response)
44
+ # rescue Exception => e
45
+ # @env.ui.error(e.message)
46
+ # end
47
+
48
+ 0
49
+
50
+
51
+
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,32 @@
1
+ require 'optparse'
2
+ require 'vagrant-nodemaster/requestcontroller'
3
+ module Vagrant
4
+ module NodeMaster
5
+ class SuspendVM < Vagrant.plugin(2, :command)
6
+ def execute
7
+
8
+ options = {}
9
+
10
+ opts = OptionParser.new do |opts|
11
+ opts.banner = "Usage: vagrant remote suspend <node-name> [vm_name]"
12
+ end
13
+
14
+ argv = parse_options(opts)
15
+ return if !argv
16
+ raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if (argv.length < 1 || argv.length > 2)
17
+
18
+
19
+ machines=RequestController.vm_suspend(argv[0],argv[1])
20
+
21
+
22
+ machines.each do |machine|
23
+ @env.ui.info("Remote Client \"#{argv[0]}\":Virtual Machine \"#{machine}\" suspended")
24
+ end
25
+
26
+ @env.ui.info(" ")
27
+ 0
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,43 @@
1
+ require 'optparse'
2
+ require 'vagrant-nodemaster/requestcontroller'
3
+ module Vagrant
4
+ module NodeMaster
5
+ class UpVM < Vagrant.plugin(2, :command)
6
+ def execute
7
+ options = {}
8
+
9
+ opts = OptionParser.new do |opts|
10
+ opts.banner = "Usage: vagrant remote up <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
+
17
+ # begin
18
+
19
+
20
+ machines=RequestController.vm_up(argv[0],argv[1])
21
+
22
+
23
+ machines.each do |machine|
24
+ @env.ui.info("Remote Client \"#{argv[0]}\": Virtual Machine \"#{machine}\" launched")
25
+ end
26
+
27
+ @env.ui.info(" ")
28
+
29
+ # rescue RestClient::RequestFailed => e
30
+ # @env.ui.error("Remote Client \"#{argv[0]}\": Request Failed")
31
+ # rescue RestClient::ResourceNotFound => e
32
+ # @env.ui.error("Remote Client \"#{argv[0]}\": Virtual Machine \"#{argv[1]}\" could not be found")
33
+ # rescue RestClient::ExceptionWithResponse=> e
34
+ # @env.ui.error(e.response)
35
+ # rescue Exception => e
36
+ # @env.ui.error(e.message)
37
+ # end
38
+
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,43 @@
1
+ require 'optparse'
2
+ require 'vagrant-nodemaster/requestcontroller'
3
+ module Vagrant
4
+ module NodeMaster
5
+ class StatusVM < Vagrant.plugin(2, :command)
6
+ def execute
7
+ options = {}
8
+
9
+ opts = OptionParser.new do |opts|
10
+ opts.banner = "Usage: vagrant remote status <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
+
17
+ # begin
18
+ machine_status=RequestController.vm_status(argv[0],argv[1])
19
+
20
+ @env.ui.info("Remote Client: #{argv[0]}", :prefix => false)
21
+
22
+ machine_status.each do |machine|
23
+ @env.ui.info(" * #{machine["name"].ljust(25)} #{machine["status"]} (#{machine["provider"]})", :prefix => false)
24
+ end
25
+
26
+ @env.ui.info(" ")
27
+
28
+ # rescue RestClient::RequestFailed => e
29
+ # @env.ui.error("Remote Client \"#{argv[0]}\": Request Failed")
30
+ # rescue RestClient::ResourceNotFound => e
31
+ # @env.ui.error("Remote Client \"#{argv[0]}\": Virtual Machine \"#{argv[1]}\" could not be found")
32
+ # rescue RestClient::ExceptionWithResponse=> e
33
+ # @env.ui.error(e.response)
34
+ # rescue Exception => e
35
+ # @env.ui.error(e.message)
36
+ # end
37
+
38
+
39
+ 0
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,155 @@
1
+
2
+ require 'vagrant/plugin'
3
+
4
+
5
+ module Vagrant
6
+ module NodeMaster
7
+
8
+ class Command < 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
+ # @subcommands.register(:add) do
20
+ # require File.expand_path("../add", __FILE__)
21
+ # Add
22
+ # end
23
+ #
24
+ # @subcommands.register(:boxlist) do
25
+ # require File.expand_path("../remoteboxlist", __FILE__)
26
+ # BoxList
27
+ # end
28
+
29
+ @subcommands.register(:box) do
30
+ require File.expand_path("../remote/remoteboxcommand", __FILE__)
31
+ BoxCommand
32
+ end
33
+
34
+ @subcommands.register(:up) do
35
+ require File.expand_path("../remote/remoteup", __FILE__)
36
+ UpVM
37
+ end
38
+
39
+ @subcommands.register(:halt) do
40
+ require File.expand_path("../remote/remotehalt", __FILE__)
41
+ HaltVM
42
+ end
43
+
44
+ @subcommands.register(:suspend) do
45
+ require File.expand_path("../remote/remotesuspend", __FILE__)
46
+ SuspendVM
47
+ end
48
+
49
+ @subcommands.register(:resume) do
50
+ require File.expand_path("../remote/remoteresume", __FILE__)
51
+ ResumeVM
52
+ end
53
+
54
+ @subcommands.register(:status) do
55
+ require File.expand_path("../remote/remotevmstatus", __FILE__)
56
+ StatusVM
57
+ end
58
+
59
+ @subcommands.register(:destroy) do
60
+ require File.expand_path("../remote/remotedestroy", __FILE__)
61
+ DestroyVM
62
+ end
63
+
64
+ @subcommands.register(:provision) do
65
+ require File.expand_path("../remote/remoteprovision", __FILE__)
66
+ ProvisionVM
67
+ end
68
+
69
+ @subcommands.register(:ssh) do
70
+ require File.expand_path("../remote/remotessh", __FILE__)
71
+ SSHVM
72
+ end
73
+
74
+ @subcommands.register(:snapshot) do
75
+ require File.expand_path("../remote/remotesnapshotcommand", __FILE__)
76
+ SnapshotCommand
77
+ end
78
+
79
+ @subcommands.register(:backup) do
80
+ require File.expand_path("../remote/remotebackupcommand", __FILE__)
81
+ BackupCommand
82
+ end
83
+
84
+ end
85
+
86
+ def execute
87
+ if @main_args.include?("-h") || @main_args.include?("--help")
88
+ # Print the help for all the box commands.
89
+ return help
90
+ end
91
+
92
+ # If we reached this far then we must have a subcommand. If not,
93
+ # then we also just print the help and exit.
94
+ command_class = @subcommands.get(@sub_command.to_sym) if @sub_command
95
+ return help if !command_class || !@sub_command
96
+
97
+ @logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}")
98
+
99
+ begin
100
+ # Initialize and execute the command class
101
+ command_class.new(@sub_args, @env).execute
102
+ rescue RestClient::RequestFailed => e
103
+ @env.ui.error("Remote Client \"#{@sub_args[0]}\": Request Failed")
104
+ rescue RestClient::ResourceNotFound => e
105
+ @env.ui.error("Remote Client \"#{@sub_args[0]}\": Virtual Machine \"#{@sub_args[1]}\" could not be found")
106
+ rescue RestClient::ExceptionWithResponse=> e
107
+ @env.ui.error(e.response)
108
+ rescue Exception => e
109
+ @env.ui.error(e.message)
110
+ end
111
+
112
+ end
113
+
114
+ def help
115
+ opts = OptionParser.new do |opts|
116
+ opts.banner = "Usage: vagrant remote <command> [<args>]"
117
+ opts.separator ""
118
+ opts.separator "Available subcommands:"
119
+
120
+ # Add the available subcommands as separators in order to print them
121
+ # out as well.
122
+ keys = []
123
+ @subcommands.each { |key, value| keys << key.to_s }
124
+
125
+ keys.sort.each do |key|
126
+ opts.separator " #{key}"
127
+ end
128
+
129
+ opts.separator ""
130
+ opts.separator "For help on any individual command run `vagrant remote COMMAND -h`"
131
+ end
132
+
133
+ @env.ui.info(opts.help, :prefix => false)
134
+ end
135
+
136
+
137
+
138
+ private
139
+ def echoEnv
140
+ puts "DEFAULT LOCAL DATA #{::Vagrant::Environment::DEFAULT_LOCAL_DATA}"
141
+ puts "VAGRANT FILE_NAME #{@env.vagrantfile_name}"
142
+ puts "VAGRANT CONFIG GLOBAL #{@env.config_global}"
143
+ puts "VAGRANT GEMS_PATH #{@env.gems_path}"
144
+ puts "VAGRANT HOME_PATH #{@env.home_path}"
145
+ puts "VAGRANT LOCAL_DATA_PATH #{@env.local_data_path}"
146
+ puts "VAGRANT TMP_PATH #{@env.tmp_path}"
147
+ puts "VAGRANT UI_OBJ #{@env.ui}"
148
+ puts "VAGRANT HOST_OBJ #{@env.host}"
149
+ puts "VAGRANT CWD #{@env.cwd}"
150
+ puts "VAGRANT LOCK_PATH #{@env.lock_path}"
151
+
152
+ end
153
+ end
154
+ end
155
+ end