vagrant-nodemaster 1.0.0 → 1.1.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.
- data/lib/vagrant-nodemaster/apidesc.rb +47 -21
- data/lib/vagrant-nodemaster/node/nodeinfo.rb +58 -0
- data/lib/vagrant-nodemaster/node/nodeoperationlast.rb +15 -15
- data/lib/vagrant-nodemaster/node/nodeupdate.rb +3 -3
- data/lib/vagrant-nodemaster/nodecommand.rb +5 -0
- data/lib/vagrant-nodemaster/remote/remoteboxcommand.rb +5 -0
- data/lib/vagrant-nodemaster/remote/remoteboxdownload.rb +44 -0
- data/lib/vagrant-nodemaster/remote/remotevminfo.rb +54 -0
- data/lib/vagrant-nodemaster/remotecommand.rb +60 -55
- data/lib/vagrant-nodemaster/requestcontroller.rb +550 -510
- data/lib/vagrant-nodemaster/version.rb +1 -1
- metadata +81 -86
@@ -4,9 +4,17 @@ module RestRoutes
|
|
4
4
|
|
5
5
|
class RouteManager
|
6
6
|
|
7
|
+
def self.node_info_route
|
8
|
+
NODE_INFO
|
9
|
+
end
|
10
|
+
|
7
11
|
def self.box_list_route
|
8
12
|
BOX_LIST_ROUTE
|
9
13
|
end
|
14
|
+
|
15
|
+
def self.box_download_route
|
16
|
+
BOX_DOWNLOAD_ROUTE
|
17
|
+
end
|
10
18
|
|
11
19
|
def self.box_delete_route
|
12
20
|
BOX_DELETE_ROUTE
|
@@ -37,8 +45,8 @@ module RestRoutes
|
|
37
45
|
end
|
38
46
|
|
39
47
|
def self.vm_add_route
|
40
|
-
|
41
|
-
|
48
|
+
VM_ADD_ROUTE
|
49
|
+
end
|
42
50
|
|
43
51
|
def self.vm_status_route
|
44
52
|
VM_STATUS_ROUTE
|
@@ -69,12 +77,12 @@ module RestRoutes
|
|
69
77
|
end
|
70
78
|
|
71
79
|
def self.vm_snapshot_delete_route
|
72
|
-
|
73
|
-
|
80
|
+
VM_SNAPSHOT_DELETE_ROUTE
|
81
|
+
end
|
74
82
|
|
75
83
|
def self.vm_delete_route
|
76
|
-
|
77
|
-
|
84
|
+
VM_DELETE_ROUTE
|
85
|
+
end
|
78
86
|
|
79
87
|
def self.vm_snapshot_restore_route
|
80
88
|
VM_SNAPSHOT_RESTORE_ROUTE
|
@@ -85,10 +93,12 @@ module RestRoutes
|
|
85
93
|
end
|
86
94
|
|
87
95
|
def self.node_password_change_route
|
88
|
-
|
89
|
-
|
90
|
-
|
96
|
+
NODE_PASSWORD_CHANGE
|
97
|
+
end
|
91
98
|
|
99
|
+
def self.vm_info_route
|
100
|
+
VM_INFO_ROUTE
|
101
|
+
end
|
92
102
|
|
93
103
|
def self.vm_backup_log_route
|
94
104
|
VM_BACKUP_LOG_ROUTE
|
@@ -96,12 +106,12 @@ module RestRoutes
|
|
96
106
|
|
97
107
|
|
98
108
|
def self.config_show_route
|
99
|
-
|
100
|
-
|
109
|
+
NODE_CONFIG_SHOW_ROUTE
|
110
|
+
end
|
101
111
|
|
102
|
-
|
103
|
-
|
104
|
-
|
112
|
+
def self.config_upload_route
|
113
|
+
NODE_CONFIG_UPLOAD_ROUTE
|
114
|
+
end
|
105
115
|
|
106
116
|
|
107
117
|
def self.login_route
|
@@ -113,12 +123,18 @@ module RestRoutes
|
|
113
123
|
end
|
114
124
|
|
115
125
|
def self.node_queue_last_route
|
116
|
-
|
117
|
-
|
118
|
-
|
126
|
+
NODE_QUEUE_LAST_ROUTE
|
127
|
+
end
|
119
128
|
|
120
129
|
|
130
|
+
|
131
|
+
def self.node_info_url(host,port)
|
132
|
+
"http://#{host}:#{port}#{node_info_route}"
|
133
|
+
end
|
121
134
|
|
135
|
+
def self.box_download_url(host,port)
|
136
|
+
"http://#{host}:#{port}#{box_download_route}"
|
137
|
+
end
|
122
138
|
|
123
139
|
def self.box_list_url(host,port)
|
124
140
|
"http://#{host}:#{port}#{box_list_route}"
|
@@ -145,11 +161,12 @@ module RestRoutes
|
|
145
161
|
url="http://#{host}:#{port}#{url}"
|
146
162
|
end
|
147
163
|
|
148
|
-
|
149
|
-
|
150
|
-
|
164
|
+
def self.node_queue_last_url(host,port)
|
165
|
+
"http://#{host}:#{port}#{node_queue_last_route}"
|
166
|
+
end
|
151
167
|
|
152
168
|
def self.login_url(host,port)
|
169
|
+
|
153
170
|
"http://#{host}:#{port}#{login_route}"
|
154
171
|
end
|
155
172
|
|
@@ -182,7 +199,12 @@ module RestRoutes
|
|
182
199
|
end
|
183
200
|
|
184
201
|
|
185
|
-
|
202
|
+
def self.vm_info_url(host,port,vmname)
|
203
|
+
url="http://#{host}:#{port}#{vm_info_route}"
|
204
|
+
url=String.new(vm_info_route)
|
205
|
+
url[":vm"]=vmname
|
206
|
+
url="http://#{host}:#{port}#{url}"
|
207
|
+
end
|
186
208
|
|
187
209
|
def self.vm_status_url(host,port,vmname=nil)
|
188
210
|
url="http://#{host}:#{port}#{vm_status_all_route}"
|
@@ -285,8 +307,11 @@ module RestRoutes
|
|
285
307
|
|
286
308
|
private
|
287
309
|
BOX_LIST_ROUTE = "/api/box/list"
|
310
|
+
BOX_DOWNLOAD_ROUTE = "/api/box/download"
|
288
311
|
BOX_DELETE_ROUTE = "/api/box/:box/:provider/delete"
|
289
312
|
BOX_ADD_ROUTE = "/api/box/add"
|
313
|
+
|
314
|
+
NODE_INFO = "/api/info"
|
290
315
|
|
291
316
|
VM_UP_ROUTE = "/api/vm/up"
|
292
317
|
VM_HALT_ROUTE = "/api/vm/halt"
|
@@ -298,6 +323,7 @@ module RestRoutes
|
|
298
323
|
VM_PROVISION_ROUTE = "/api/vm/provision"
|
299
324
|
VM_STATUS_ALL_ROUTE = "/api/vm/status"
|
300
325
|
VM_STATUS_ROUTE = "/api/vm/:vm/status"
|
326
|
+
VM_INFO_ROUTE = "/api/vm/:vm/info"
|
301
327
|
SSH_CONFIG_ROUTE = "/api/vm/:vm/sshconfig"
|
302
328
|
|
303
329
|
SNAPSHOTS_ALL_ROUTE = "/api/vm/snapshots"
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'vagrant-nodemaster/node/nodedbmanager'
|
2
|
+
require 'vagrant-nodemaster/requestcontroller'
|
3
|
+
|
4
|
+
module Vagrant
|
5
|
+
module NodeMaster
|
6
|
+
|
7
|
+
class NodeInfo < Vagrant.plugin(2, :command)
|
8
|
+
|
9
|
+
def execute
|
10
|
+
|
11
|
+
options = {}
|
12
|
+
|
13
|
+
opts = OptionParser.new do |opts|
|
14
|
+
opts.banner = "Usage: vagrant node info <node-name>"
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
argv = parse_options(opts)
|
19
|
+
|
20
|
+
|
21
|
+
return if !argv
|
22
|
+
raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length != 1
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
begin
|
27
|
+
result=RequestController.node_info(argv[0])
|
28
|
+
#@env.ui.info(result)
|
29
|
+
@env.ui.info("Node '#{argv[0]}' Information:")
|
30
|
+
@env.ui.info("#{"Operating System:".ljust(25)} #{result[:lsbdistdescription]}")
|
31
|
+
@env.ui.info("#{"Processor Count:".ljust(25)} #{result[:physicalprocessorcount]}")
|
32
|
+
@env.ui.info("#{"Architecture:".ljust(25)} #{result[:architecture]}")
|
33
|
+
@env.ui.info("#{"Core Count:".ljust(25)} #{result[:processorcount]}")
|
34
|
+
|
35
|
+
for i in 0..(result[:processorcount].to_i-1)
|
36
|
+
puts "processor #{i} => "+result[("processor"+i.to_s).to_sym]
|
37
|
+
end
|
38
|
+
|
39
|
+
@env.ui.info("#{"CPU Average:".ljust(25)} #{result[:cpuaverage][0]}% (1 Minute) #{result[:cpuaverage][1]}% (5 Minutes) #{result[:cpuaverage][2]}% (15 Minutes)")
|
40
|
+
@env.ui.info("#{"Memory Size:".ljust(25)} #{result[:memorysize]} (#{result[:memoryfree]} Free)")
|
41
|
+
@env.ui.info("#{"Disk Used:".ljust(25)}#{result[:diskusage]} GB")
|
42
|
+
|
43
|
+
interfaces = result[:interfaces].split(",")
|
44
|
+
|
45
|
+
interfaces.each do |i|
|
46
|
+
interface=("ipaddress_"+i).to_sym
|
47
|
+
puts "Interface #{i} => "+result[interface] if result[interface]
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
0
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
@@ -8,14 +8,14 @@ module Vagrant
|
|
8
8
|
|
9
9
|
def execute
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
11
|
+
options = {}
|
12
|
+
|
13
|
+
opts = OptionParser.new do |opts|
|
14
|
+
opts.banner = "Usage: vagrant node operation last <node-name>"
|
15
|
+
end
|
16
|
+
|
17
|
+
argv = parse_options(opts)
|
18
|
+
return if !argv
|
19
19
|
raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length != 1
|
20
20
|
|
21
21
|
result = RequestController.node_operation_queued_last(argv[0])
|
@@ -25,14 +25,14 @@ module Vagrant
|
|
25
25
|
@env.ui.info("Operation queue is empty");
|
26
26
|
|
27
27
|
else
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
@env.ui.info("-------------------------------------------------------------------------------------")
|
29
|
+
@env.ui.info("| RESULT CODE | RESUL T INFO |")
|
30
|
+
@env.ui.info("-------------------------------------------------------------------------------------")
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
result.each do |operation|
|
33
|
+
@env.ui.info("| #{operation[0]} |#{operation[1].ljust(5)}")
|
34
|
+
@env.ui.info("-------------------------------------------------------------------------------------")
|
35
|
+
end
|
36
36
|
end
|
37
37
|
|
38
38
|
|
@@ -25,12 +25,12 @@ module Vagrant
|
|
25
25
|
|
26
26
|
argv = parse_options(opts)
|
27
27
|
return if !argv
|
28
|
-
|
28
|
+
raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length != 3
|
29
|
+
|
29
30
|
|
30
|
-
#dbmanager=DB::NodeDBManager.new
|
31
31
|
|
32
32
|
|
33
|
-
|
33
|
+
DB::NodeDBManager.update_node(argv[0],argv[1],argv[2].to_i,options[:dns])
|
34
34
|
|
35
35
|
0
|
36
36
|
end
|
@@ -40,6 +40,11 @@ module Vagrant
|
|
40
40
|
require File.expand_path("../node/nodeupdate", __FILE__)
|
41
41
|
NodeUpdate
|
42
42
|
end
|
43
|
+
|
44
|
+
@subcommands.register(:info) do
|
45
|
+
require File.expand_path("../node/nodeinfo", __FILE__)
|
46
|
+
NodeInfo
|
47
|
+
end
|
43
48
|
|
44
49
|
@subcommands.register(:updatepw) do
|
45
50
|
require File.expand_path("../node/nodeupdatepw", __FILE__)
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
require 'vagrant-nodemaster/requestcontroller'
|
3
|
+
module Vagrant
|
4
|
+
module NodeMaster
|
5
|
+
class BoxDownload < Vagrant.plugin(2, :command)
|
6
|
+
def execute
|
7
|
+
options = {}
|
8
|
+
options[:async] = false
|
9
|
+
|
10
|
+
opts = OptionParser.new do |opts|
|
11
|
+
opts.banner = "Usage: vagrant remote box downloads <node-name>"
|
12
|
+
opts.separator ""
|
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
|
20
|
+
|
21
|
+
|
22
|
+
res = RequestController.box_downloads(argv[0])
|
23
|
+
|
24
|
+
|
25
|
+
#@env.ui.info("Remote Client \"#{argv[0]}\": Box \"#{argv[1]}\" added") if options[:async]==false
|
26
|
+
@env.ui.info("----------------------------------------------------------------------------------------------")
|
27
|
+
@env.ui.info("| BOX NAME | BOX URL | PROGRESS | TIME REMAINING |")
|
28
|
+
@env.ui.info("----------------------------------------------------------------------------------------------")
|
29
|
+
|
30
|
+
res.each do |operation|
|
31
|
+
@env.ui.info("| #{operation[:box_name].rjust(5)} | #{operation[:box_url]} | #{operation[:box_progress]} |#{operation[:box_remaining]}")
|
32
|
+
@env.ui.info("--------------------------------------------------------------------------------------------")
|
33
|
+
end
|
34
|
+
|
35
|
+
#@env.ui.info("Remote Client \"#{argv[0]}\": The operation ID is \"#{res.gsub!(/\D/, "")}\"") if options[:async]==true
|
36
|
+
|
37
|
+
|
38
|
+
0
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
require 'vagrant-nodemaster/requestcontroller'
|
3
|
+
module Vagrant
|
4
|
+
module NodeMaster
|
5
|
+
class InfoVM < Vagrant.plugin(2, :command)
|
6
|
+
def execute
|
7
|
+
options = {}
|
8
|
+
|
9
|
+
opts = OptionParser.new do |opts|
|
10
|
+
opts.banner = "Usage: vagrant remote info <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 != 2)
|
16
|
+
|
17
|
+
|
18
|
+
vmstatus=RequestController.vm_info(argv[0],argv[1])
|
19
|
+
|
20
|
+
@env.ui.info("Remote Client: #{argv[0]}", :prefix => false)
|
21
|
+
|
22
|
+
#pp vmstatus
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
@env.ui.info(" #{"Operating System:".ljust(25)} #{vmstatus["ostype"].ljust(25)}", :prefix => false)
|
27
|
+
@env.ui.info(" #{"Num. CPUS:".ljust(25)} #{vmstatus["cpus"]}", :prefix => false)
|
28
|
+
@env.ui.info(" #{"CPU Limit:".ljust(25)} #{vmstatus["cpuexecutioncap"]}%", :prefix => false)
|
29
|
+
@env.ui.info(" #{"PAE:".ljust(25)} #{vmstatus["pae"]}", :prefix => false)
|
30
|
+
@env.ui.info(" #{"3D acceleration:".ljust(25)} #{vmstatus["accelerate3d"]}", :prefix => false)
|
31
|
+
@env.ui.info(" #{"2D acceleration:".ljust(25)} #{vmstatus["accelerate2dvideo"]}", :prefix => false)
|
32
|
+
@env.ui.info(" #{"Memory:".ljust(25)} #{vmstatus["memory"]} MB", :prefix => false)
|
33
|
+
@env.ui.info(" #{"Boot Order:".ljust(25)} #{vmstatus["boot1"]}, #{vmstatus["boot2"]}, #{vmstatus["boot3"]}, #{vmstatus["boot4"]}", :prefix => false)
|
34
|
+
@env.ui.info(" #{"Clipboard:".ljust(25)} #{vmstatus["clipboard"]}", :prefix => false)
|
35
|
+
@env.ui.info(" #{"Remote Desktop:".ljust(25)} #{vmstatus["vrde"]}", :prefix => false)
|
36
|
+
@env.ui.info(" #{"USB:".ljust(25)} #{vmstatus["usb"]}", :prefix => false)
|
37
|
+
(1..8).each {|key|
|
38
|
+
#If interface exists
|
39
|
+
if vmstatus.has_key?("nic#{key}") && !vmstatus["nic#{key}"].eql?("none")
|
40
|
+
@env.ui.info(" ")
|
41
|
+
@env.ui.info(" #{"Interface:".ljust(25)} nic#{key}", :prefix => false)
|
42
|
+
@env.ui.info(" #{"Network Type:".ljust(25)} #{vmstatus["nic#{key}"]}", :prefix => false)
|
43
|
+
@env.ui.info(" #{"MAC Address:".ljust(25)} #{vmstatus["macaddress#{key}"]}", :prefix => false)
|
44
|
+
@env.ui.info(" #{"Cable connected:".ljust(25)} #{vmstatus["cableconnected#{key}"]}", :prefix => false)
|
45
|
+
end
|
46
|
+
}
|
47
|
+
|
48
|
+
@env.ui.info(" ")
|
49
|
+
|
50
|
+
0
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -29,69 +29,74 @@ module Vagrant
|
|
29
29
|
# BoxList
|
30
30
|
# end
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
32
|
+
@subcommands.register(:box) do
|
33
|
+
require File.expand_path("../remote/remoteboxcommand", __FILE__)
|
34
|
+
BoxCommand
|
35
|
+
end
|
36
|
+
|
37
|
+
@subcommands.register(:up) do
|
38
|
+
require File.expand_path("../remote/remoteup", __FILE__)
|
39
|
+
UpVM
|
40
|
+
end
|
41
|
+
|
42
|
+
@subcommands.register(:halt) do
|
43
|
+
require File.expand_path("../remote/remotehalt", __FILE__)
|
44
|
+
HaltVM
|
45
|
+
end
|
46
46
|
|
47
47
|
# @subcommands.register(:add) do
|
48
48
|
# require File.expand_path("../remote/remoteadd", __FILE__)
|
49
49
|
# AddVM
|
50
50
|
# end
|
51
51
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
52
|
+
@subcommands.register(:suspend) do
|
53
|
+
require File.expand_path("../remote/remotesuspend", __FILE__)
|
54
|
+
SuspendVM
|
55
|
+
end
|
56
|
+
|
57
|
+
@subcommands.register(:resume) do
|
58
|
+
require File.expand_path("../remote/remoteresume", __FILE__)
|
59
|
+
ResumeVM
|
60
|
+
end
|
61
|
+
|
62
|
+
@subcommands.register(:status) do
|
63
|
+
require File.expand_path("../remote/remotevmstatus", __FILE__)
|
64
|
+
StatusVM
|
65
|
+
end
|
66
|
+
|
67
|
+
@subcommands.register(:destroy) do
|
68
|
+
require File.expand_path("../remote/remotedestroy", __FILE__)
|
69
|
+
DestroyVM
|
70
|
+
end
|
71
|
+
|
72
|
+
@subcommands.register(:provision) do
|
73
|
+
require File.expand_path("../remote/remoteprovision", __FILE__)
|
74
|
+
ProvisionVM
|
75
|
+
end
|
76
76
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
77
|
+
@subcommands.register(:info) do
|
78
|
+
require File.expand_path("../remote/remotevminfo", __FILE__)
|
79
|
+
InfoVM
|
80
|
+
end
|
81
81
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
82
|
+
@subcommands.register(:ssh) do
|
83
|
+
require File.expand_path("../remote/remotessh", __FILE__)
|
84
|
+
SSHVM
|
85
|
+
end
|
86
|
+
|
87
|
+
@subcommands.register(:snapshot) do
|
88
|
+
require File.expand_path("../remote/remotesnapshotcommand", __FILE__)
|
89
|
+
SnapshotCommand
|
90
|
+
end
|
91
|
+
|
92
|
+
@subcommands.register(:backup) do
|
93
|
+
require File.expand_path("../remote/remotebackupcommand", __FILE__)
|
94
|
+
BackupCommand
|
95
|
+
end
|
96
|
+
|
97
|
+
@subcommands.register(:config) do
|
98
|
+
require File.expand_path("../remote/remoteconfigcommand", __FILE__)
|
99
|
+
ConfigCommand
|
95
100
|
end
|
96
101
|
|
97
102
|
end
|