vagrant-nodemaster 1.1.1 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,10 @@
1
+ vagrant-nodemaster
2
+ ==================
3
+
4
+ * Insertado la descarga de la configuración de los nodos
5
+ * Insertada la adición y eliminación de máquinas virtuales a la configuración de los
6
+ nodos remotos
7
+ * Añadida la funcionalidad de hacer upload de una configuración a un nodo y machacar
8
+ el contenido existente
9
+
10
+
data/README.md CHANGED
@@ -2,11 +2,12 @@ vagrant-nodemaster
2
2
  ==================
3
3
  This plugin allows you to control centralizely remote virtual environments configured with the plugin [Vagrant-Node](https://github.com/fjsanpedro/vagrant-nodemaster/tree/master/lib/vagrant-node).
4
4
 
5
+ You can also work with Vagrant-Node through a web application called [VagrantWeb](https://github.com/catedrasaes-umu/vagrantweb/). Watch the video [VagrantWeb Overview](https://www.youtube.com/watch?v=PslrNMAl_vU) to figure out all the functionality available.
5
6
 
6
7
  This plugin has been developed in the context of the [Catedra SAES](http://www.catedrasaes.org) of the University of Murcia(Spain).
7
8
 
8
9
  ##Installation
9
- Requires Vagrant 1.2 and libsqlite3-dev
10
+ Requires Vagrant (minimum version 1.2.2) and libsqlite3-dev. The miminum version required of the plugin Vagrant-Node in each node is 1.1.3.
10
11
 
11
12
  ```bash
12
13
  $ vagrant plugin install vagrant-nodemaster
@@ -22,9 +22,20 @@ module Vagrant
22
22
 
23
23
  #dbmanager=DB::NodeDBManager.new
24
24
 
25
- DB::NodeDBManager.add_node(argv[0],argv[1],argv[2].to_i,argv[3],options[:dns])
26
-
27
- 0
25
+
26
+ begin
27
+
28
+ DB::NodeDBManager.add_node(argv[0],argv[1],argv[2].to_i,argv[3],options[:dns])
29
+
30
+ rescue Exception => e
31
+ if e.class == SQLite3::ConstraintException
32
+ @env.ui.error("Error adding node '#{argv[0]}': There is a node with the same name")
33
+ else
34
+ @env.ui.error("Error adding node '#{argv[0]}': "+e.message)
35
+ end
36
+ end
37
+
38
+ 0
28
39
  end
29
40
 
30
41
  end
@@ -1,192 +1,212 @@
1
1
  require 'sqlite3'
2
2
 
3
3
  module Vagrant
4
- module NodeMaster
5
- module DB
6
- class NodeDBManager
7
-
8
- def initialize(data_dir=nil)
9
-
10
- @@db=check_database(data_dir) if data_dir
11
-
12
- end
4
+ module NodeMaster
5
+ module DB
6
+ class NodeDBManager
7
+
8
+ def initialize(data_dir=nil)
9
+
10
+ @@db=check_database(data_dir) if data_dir
11
+
12
+ end
13
+
14
+ def self.get_reference
15
+ @@db
16
+ end
17
+
18
+
19
+ def self.import_node(node_name,node_address,node_port,node_password,raw)
20
+ if (!portvalid?(node_port))
21
+ raise "Node port must be above 1023"
22
+ end
23
+
24
+
25
+ if (!namevalid?(node_name))
26
+ raise "Node name Invalid (Special characters allowed: '_' and '-')."
27
+ end
28
+
29
+ sql="INSERT INTO #{TABLE_NAME} VALUES ( ? , ? , ?,?)"
30
+
31
+ password = node_password
32
+ password = Digest::MD5.hexdigest(password) if !raw
33
+
34
+ @@db.execute(sql,node_name,node_address,node_port,password)
35
+
36
+ end
37
+
38
+ def self.add_node(node_name,node_address,node_port,node_password,dnsformat)
39
+
40
+ if (!portvalid?(node_port))
41
+ raise "Node port must be above 1023"
42
+ end
43
+
44
+
45
+ if (!namevalid?(node_name))
46
+ raise "Node name Invalid (Special characters allowed: '_' and '-')."
47
+ end
48
+
49
+ if (dnsformat && !dnsvalid?(node_address)) ||
50
+ (!dnsformat && !ipvalid?(node_address))
51
+
52
+ raise "Invalid ip or dns address."
53
+
54
+ end
55
+
56
+
57
+ sql="INSERT INTO #{TABLE_NAME} VALUES ( ? , ? , ?,?)"
58
+ @@db.execute(sql,node_name,node_address,node_port,Digest::MD5.hexdigest(node_password))
59
+
60
+ end
61
+
62
+ def self.update_node(node_name,node_address,node_port,dnsformat)
63
+
64
+ if (!portvalid?(node_port))
65
+
66
+ raise "Node port must be above 1023"
67
+
68
+ end
69
+
70
+ if (dnsformat && !dnsvalid?(node_address)) ||
71
+ (!dnsformat && !ipvalid?(node_address))
72
+
73
+ raise "Invalid ip or dns address."
74
+
75
+ end
76
+
77
+ sql="UPDATE #{TABLE_NAME} SET #{NODE_ADDRESS_COLUMN} = ?,#{NODE_PORT_COLUMN} = ? WHERE #{NODE_NAME_COLUMN}= ?"
78
+ @@db.execute(sql,node_address,node_port,node_name)
79
+
80
+ end
81
+
82
+
83
+ def self.update_node_password(node_name,password)
84
+ sql="UPDATE #{TABLE_NAME} SET #{NODE_PASSWORD_COLUMN} = ? WHERE #{NODE_NAME_COLUMN}= ?"
85
+ @@db.execute(sql,Digest::MD5.hexdigest(password),node_name)
86
+ end
87
+
88
+
89
+ def self.remove_node(node_name)
90
+ sql="DELETE FROM #{TABLE_NAME} WHERE #{NODE_NAME_COLUMN}=?"
91
+ @@db.execute(sql,node_name)
92
+ end
93
+
94
+ def self.remove_nodes
95
+ sql="DELETE FROM #{TABLE_NAME}"
96
+ @@db.execute(sql)
97
+ end
98
+
99
+
100
+ def self.get_node_names
101
+ sql="SELECT #{NODE_NAME_COLUMN} FROM #{TABLE_NAME}"
102
+ @@db.execute(sql);
103
+ end
104
+
105
+ def self.get_nodes
106
+ sql="SELECT * FROM #{TABLE_NAME}"
107
+ rows=@@db.execute(sql);
108
+ nodes = []
109
+ rows.each do |row|
110
+ node = {}
111
+ node[:name]=row[0]
112
+ node[:address]=row[1]
113
+ node[:port]=row[2]
114
+ node[:password]=row[3]
115
+ nodes << node
116
+ end
117
+
118
+ nodes
119
+
120
+ end
121
+
122
+ def self.get_node(node_name)
123
+ sql="SELECT * FROM #{TABLE_NAME} WHERE #{NODE_NAME_COLUMN}=?"
124
+ raise "Node not found" if (nodear=@@db.execute(sql,node_name)).empty?
125
+ node = {}
126
+ node[:name]=nodear[0][0]
127
+ node[:address]=nodear[0][1]
128
+ node[:port]=nodear[0][2]
129
+ node[:password]=nodear[0][3]
130
+ node
131
+
132
+ end
133
+
134
+ private
135
+
136
+ TABLE_NAME='node_table'
137
+ NODE_NAME_COLUMN = 'node_name'
138
+ NODE_ADDRESS_COLUMN = 'node_address'
139
+ NODE_PORT_COLUMN = 'node_port'
140
+ NODE_PASSWORD_COLUMN = 'node_password'
141
+
142
+ def check_database(data_dir)
143
+ #Creates and/or open the database
144
+ db = SQLite3::Database.new( data_dir.to_s + "/nodemaster.db" )
145
+
146
+ if db.execute("SELECT name FROM sqlite_master
147
+ WHERE type='table' AND name='#{TABLE_NAME}';").length==0
148
+ # db.execute( "create table '#{TABLE_NAME}' (id INTEGER PRIMARY KEY AUTOINCREMENT,
149
+ # {NODE_NAME_COLUMN} TEXT, #{NODE_ADDRESS_COLUMN} TEXT);" )
150
+ db.execute( "create table '#{TABLE_NAME}' (#{NODE_NAME_COLUMN} TEXT PRIMARY KEY,#{NODE_ADDRESS_COLUMN} TEXT NOT NULL,#{NODE_PORT_COLUMN} INTEGER NOT NULL,#{NODE_PASSWORD_COLUMN} VARCHAR(64) NOT NULL);" )
151
+ end
152
+
153
+ db
154
+
155
+ end
156
+
157
+ def self.ipvalid?(node_address)
13
158
 
14
- def self.get_reference
15
- @@db
16
- end
159
+ ipreg= '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$'
17
160
 
18
- def self.add_node(node_name,node_address,node_port,node_password,dnsformat)
19
-
20
- if (!portvalid?(node_port))
21
- raise "Node port must be above 1023"
22
- end
23
-
24
-
25
- if (!namevalid?(node_name))
26
- raise "Node name Invalid (Spectial characters allowed: '_' and '-')."
27
- end
28
-
29
- if (dnsformat && !dnsvalid?(node_address)) ||
30
- (!dnsformat && !ipvalid?(node_address))
31
-
32
- raise "Invalid ip or dns address."
33
-
34
- end
35
-
36
-
37
- sql="INSERT INTO #{TABLE_NAME} VALUES ( ? , ? , ?,?)"
38
- @@db.execute(sql,node_name,node_address,node_port,Digest::MD5.hexdigest(node_password))
39
-
40
- end
41
161
 
42
- def self.update_node(node_name,node_address,node_port,dnsformat)
43
-
44
- if (!portvalid?(node_port))
45
-
46
- raise "Node port must be above 1023"
47
-
48
- end
49
-
50
- if (dnsformat && !dnsvalid?(node_address)) ||
51
- (!dnsformat && !ipvalid?(node_address))
52
-
53
- raise "Invalid ip or dns address."
54
-
55
- end
56
-
57
- sql="UPDATE #{TABLE_NAME} SET #{NODE_ADDRESS_COLUMN} = ?,#{NODE_PORT_COLUMN} = ? WHERE #{NODE_NAME_COLUMN}= ?"
58
- @@db.execute(sql,node_address,node_port,node_name)
59
-
60
- end
162
+ ipregex = Regexp.new(ipreg)
61
163
 
62
164
 
63
- def self.update_node_password(node_name,password)
64
- sql="UPDATE #{TABLE_NAME} SET #{NODE_PASSWORD_COLUMN} = ? WHERE #{NODE_NAME_COLUMN}= ?"
65
- @@db.execute(sql,Digest::MD5.hexdigest(password),node_name)
66
- end
165
+ if (node_address =~ ipregex)
166
+ return true
167
+ end
67
168
 
169
+ false
68
170
 
69
- def self.remove_node(node_name)
70
- sql="DELETE FROM #{TABLE_NAME} WHERE #{NODE_NAME_COLUMN}=?"
71
- @@db.execute(sql,node_name)
72
- end
171
+ end
172
+
173
+ def self.dnsvalid?(node_address)
73
174
 
74
- def self.remove_nodes
75
- sql="DELETE FROM #{TABLE_NAME}"
76
- @@db.execute(sql)
77
- end
78
-
79
175
 
80
- def self.get_node_names
81
- sql="SELECT #{NODE_NAME_COLUMN} FROM #{TABLE_NAME}"
82
- @@db.execute(sql);
83
- end
176
+ hostreg='^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$'
84
177
 
85
- def self.get_nodes
86
- sql="SELECT * FROM #{TABLE_NAME}"
87
- rows=@@db.execute(sql);
88
- nodes = []
89
- rows.each do |row|
90
- node = {}
91
- node[:name]=row[0]
92
- node[:address]=row[1]
93
- node[:port]=row[2]
94
- node[:password]=row[3]
95
- nodes << node
96
- end
97
-
98
- nodes
99
-
100
- end
101
178
 
102
- def self.get_node(node_name)
103
- sql="SELECT * FROM #{TABLE_NAME} WHERE #{NODE_NAME_COLUMN}=?"
104
- raise "Node not found" if (nodear=@@db.execute(sql,node_name)).empty?
105
- node = {}
106
- node[:name]=nodear[0][0]
107
- node[:address]=nodear[0][1]
108
- node[:port]=nodear[0][2]
109
- node[:password]=nodear[0][3]
110
- node
179
+ hregex = Regexp.new(hostreg)
111
180
 
181
+ if (node_address =~ hregex)
182
+ return true
112
183
  end
113
184
 
114
- private
115
-
116
- TABLE_NAME='node_table'
117
- NODE_NAME_COLUMN = 'node_name'
118
- NODE_ADDRESS_COLUMN = 'node_address'
119
- NODE_PORT_COLUMN = 'node_port'
120
- NODE_PASSWORD_COLUMN = 'node_password'
185
+ false
121
186
 
122
- def check_database(data_dir)
123
- #Creates and/or open the database
124
- db = SQLite3::Database.new( data_dir.to_s + "/nodemaster.db" )
125
-
126
- if db.execute("SELECT name FROM sqlite_master
127
- WHERE type='table' AND name='#{TABLE_NAME}';").length==0
128
- # db.execute( "create table '#{TABLE_NAME}' (id INTEGER PRIMARY KEY AUTOINCREMENT,
129
- # {NODE_NAME_COLUMN} TEXT, #{NODE_ADDRESS_COLUMN} TEXT);" )
130
- db.execute( "create table '#{TABLE_NAME}' (#{NODE_NAME_COLUMN} TEXT PRIMARY KEY,#{NODE_ADDRESS_COLUMN} TEXT NOT NULL,#{NODE_PORT_COLUMN} INTEGER NOT NULL,#{NODE_PASSWORD_COLUMN} VARCHAR(64) NOT NULL);" )
131
- end
132
-
133
- db
134
-
135
- end
187
+ end
136
188
 
137
- def self.ipvalid?(node_address)
138
-
139
- ipreg= '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$'
140
-
141
-
142
- ipregex = Regexp.new(ipreg)
143
-
144
-
145
- if (node_address =~ ipregex)
146
- return true
147
- end
148
-
149
- false
150
-
151
- end
152
189
 
153
- def self.dnsvalid?(node_address)
154
-
155
-
156
- hostreg='^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$'
157
-
158
-
159
- hregex = Regexp.new(hostreg)
160
-
161
- if (node_address =~ hregex)
162
- return true
163
- end
164
-
165
- false
166
-
167
- end
168
-
169
-
170
- def self.namevalid?(node_name)
171
- #only allowing '_' and '-'
172
- namereg = '^[a-z0-9_-]*$'
173
- nameregex = Regexp.new(namereg)
174
- if (node_name =~nameregex)
175
- return true
176
- end
177
-
178
- false
179
-
180
- end
190
+ def self.namevalid?(node_name)
191
+ #only allowing '_' and '-'
192
+ namereg = '^[a-zA-Z0-9_-]*$'
193
+ nameregex = Regexp.new(namereg)
194
+ if (node_name =~nameregex)
195
+ return true
196
+ end
197
+
198
+ false
181
199
 
182
- def self.portvalid?(node_port)
183
- if (node_port>=1024)
184
- return true
185
- end
186
- false
187
- end
188
-
200
+ end
201
+
202
+ def self.portvalid?(node_port)
203
+ if (node_port>=1024)
204
+ return true
189
205
  end
206
+ false
190
207
  end
208
+
191
209
  end
192
210
  end
211
+ end
212
+ end
@@ -0,0 +1,92 @@
1
+ require 'vagrant-nodemaster/node/nodedbmanager'
2
+ require 'pp'
3
+
4
+ module Vagrant
5
+ module NodeMaster
6
+
7
+ class NodeImport < Vagrant.plugin(2, :command)
8
+
9
+ def execute
10
+
11
+ options = {}
12
+
13
+ options[:raw] = false
14
+ options[:sample] = false
15
+
16
+ opts = OptionParser.new do |opts|
17
+ opts.banner = "Usage: vagrant node import <file>"
18
+ opts.separator ""
19
+ opts.on("-r", "--raw", "Import file exactly. Used when file has encoded md5 passwords ") do |f|
20
+ options[:raw] = true
21
+ end
22
+ opts.on("-s", "--sample", "Writes a sample export file") do |f|
23
+ options[:sample] = true
24
+ end
25
+ end
26
+
27
+ argv = parse_options(opts)
28
+ return if !argv
29
+ raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length != 1
30
+
31
+ if (!options[:sample])
32
+ if !File.exist?(argv[0])
33
+ @env.ui.error("The file does not exist")
34
+ else
35
+ #FILE IMPORT
36
+ #CHECK IF RAW IMPORT OR NOT
37
+ File.foreach(argv[0]).with_index { |line, line_num|
38
+ if (line_num>0)
39
+
40
+ line = line.gsub("\n",'')
41
+ parts=line.split(",")
42
+ #0 => node name
43
+ #1 => node address
44
+ #2 => node port
45
+ #3 => node password
46
+
47
+ begin
48
+
49
+ DB::NodeDBManager.import_node(parts[0],parts[1],parts[2].to_i,parts[3],options[:raw])
50
+
51
+ rescue Exception => e
52
+ if e.class == SQLite3::ConstraintException
53
+ @env.ui.error("Error importing node '#{parts[0]}': There is a node with the same name")
54
+ else
55
+ @env.ui.error("Error importing node '#{parts[0]}': "+e.message)
56
+ end
57
+ end
58
+ end
59
+ }
60
+ end
61
+ else
62
+ #USER WANTS TO WRITE A SAMPLE FILE
63
+
64
+ #CHECK IF THE FILE EXISTS, SHOWING OVERWRITE QUESTION
65
+ if File.exist?(argv[0])
66
+ choice = @env.ui.ask("The file already exists, Do you really want to overwrite [N/Y]? ")
67
+
68
+ if (!choice || choice.upcase != "Y" )
69
+ return 0
70
+ end
71
+ end
72
+
73
+
74
+
75
+ $samplecontent = "\"Node Name\",\"Node Address\",\"Node Port\",\"Node Password\"\n"
76
+ $samplecontent << "examplenode,127.0.0.1,3333,examplepassword\n";
77
+
78
+
79
+ File.write(argv[0], $samplecontent)
80
+
81
+ end
82
+
83
+
84
+
85
+
86
+ 0
87
+ end
88
+
89
+ end
90
+
91
+ end
92
+ end
@@ -37,8 +37,14 @@ module Vagrant
37
37
  end
38
38
 
39
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")
40
+ @env.ui.info("#{"Memory Size:".ljust(25)} #{result[:memorysize]} GB (#{result[:memoryfree]} GB Free)")
41
+ #@env.ui.info("#{"Disk Used:".ljust(25)}#{result[:diskusage]} GB")
42
+ @env.ui.info("Disk usage:")
43
+
44
+ result[:diskusage].each do |partition|
45
+ @env.ui.info("\tPartition #{partition[:partition]} => Free: #{partition[:free]} Total: #{partition[:total]} (Used: #{partition[:freepercent]})")
46
+ end
47
+
42
48
 
43
49
  interfaces = result[:interfaces].split(",")
44
50
 
@@ -47,6 +53,8 @@ module Vagrant
47
53
  puts "Interface #{i} => "+result[interface] if result[interface]
48
54
  end
49
55
 
56
+ @env.ui.info("#{"Vagrant Version:".ljust(25)} #{result[:vagrant_version]}")
57
+
50
58
  end
51
59
 
52
60
  0
@@ -0,0 +1,39 @@
1
+ require 'vagrant-nodemaster/node/nodedbmanager'
2
+ require 'vagrant-nodemaster/requestcontroller'
3
+
4
+ module Vagrant
5
+ module NodeMaster
6
+
7
+ class NodeOperation < Vagrant.plugin(2, :command)
8
+
9
+ def execute
10
+
11
+ options = {}
12
+
13
+ opts = OptionParser.new do |opts|
14
+ opts.banner = "Usage: vagrant node operation <node-name> <operation-id>"
15
+ end
16
+
17
+ argv = parse_options(opts)
18
+ return if !argv
19
+ raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length != 2
20
+
21
+ result = RequestController.node_operation_queued(argv[0],argv[1])
22
+
23
+
24
+ case result[0]
25
+ when "IN PROGRESS"
26
+ @env.ui.info("The operation #{argv[1]} is \"IN PROGRESS\"")
27
+ when "SUCCESS"
28
+ @env.ui.success("The operation #{argv[1]} succeeded.")
29
+ else
30
+ @env.ui.error("The operation #{argv[1]} failed. The result is:\n#{result[1]}")
31
+ end
32
+
33
+ 0
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+ end
@@ -18,7 +18,13 @@ module Vagrant
18
18
  return if !argv
19
19
  raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length != 1
20
20
 
21
+
22
+
21
23
  result = RequestController.node_operation_queued_last(argv[0])
24
+
25
+
26
+
27
+
22
28
 
23
29
 
24
30
  if (result.empty?)
@@ -26,11 +32,15 @@ module Vagrant
26
32
 
27
33
  else
28
34
  @env.ui.info("-------------------------------------------------------------------------------------")
29
- @env.ui.info("| RESULT CODE | RESUL T INFO |")
35
+ @env.ui.info("| RESULT CODE | VIRTUAL MACHINE | RESULT INFO |")
30
36
  @env.ui.info("-------------------------------------------------------------------------------------")
31
37
 
32
38
  result.each do |operation|
33
- @env.ui.info("| #{operation[0]} |#{operation[1].ljust(5)}")
39
+ code= operation[0]
40
+ rparams=JSON.parse(operation[1],{:quirks_mode => true,:symbolize_names => true})
41
+ vm = rparams[0].has_key?(:vmname) ? rparams[0][:vmname]: "--"
42
+ result = rparams[0][:status]
43
+ @env.ui.info("| #{code} | #{vm.ljust(5)} | #{result.ljust(5)} ")
34
44
  @env.ui.info("-------------------------------------------------------------------------------------")
35
45
  end
36
46
  end
@@ -8,27 +8,41 @@ module Vagrant
8
8
 
9
9
  def execute
10
10
 
11
- options = {}
12
-
13
- opts = OptionParser.new do |opts|
14
- opts.banner = "Usage: vagrant node operation show <node-name> <operation-id>"
15
- end
16
-
17
- argv = parse_options(opts)
18
- return if !argv
11
+ options = {}
12
+
13
+ opts = OptionParser.new do |opts|
14
+ opts.banner = "Usage: vagrant node operation show <node-name> <operation-id>"
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 != 2
20
20
 
21
- result = RequestController.node_operation_queued(argv[0],argv[1])
22
-
23
-
24
- case result[0]
25
- when 100
26
- @env.ui.info("The operation #{argv[1]} is \"IN PROGRESS\"")
27
- when 200
28
- @env.ui.success("The operation #{argv[1]} succeeded.")
21
+ if (argv[1].to_i==0)
22
+ @env.ui.error("Invalid operation ID")
29
23
  else
30
- @env.ui.error("The operation #{argv[1]} failed. The result is:\n#{result[1]}")
31
- end
24
+
25
+
26
+
27
+ result = RequestController.node_operation_queued(argv[0],argv[1])
28
+
29
+
30
+
31
+
32
+ case result[0]
33
+ when 100
34
+ @env.ui.info("The operation #{argv[1]} is \"IN PROGRESS\"")
35
+ when 200
36
+ @env.ui.success("The operation #{argv[1]} succeeded.")
37
+ else
38
+ rparams=JSON.parse(result[1],{:quirks_mode => true,:symbolize_names => true})
39
+ rparams=rparams[0]
40
+
41
+
42
+ @env.ui.error("The operation #{argv[1]} in Virtual Machine '#{rparams[:vmname]}' failed. The result is:\n#{rparams[:status]}")
43
+ end
44
+
45
+ end
32
46
 
33
47
  0
34
48
  end
@@ -22,7 +22,7 @@ module Vagrant
22
22
  #dbmanager=DB::NodeDBManager.new
23
23
 
24
24
  status = {}
25
-
25
+
26
26
 
27
27
 
28
28
  DB::NodeDBManager.get_nodes.each do |entry|
@@ -13,11 +13,8 @@ module Vagrant
13
13
  @main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
14
14
 
15
15
  #Initializing db structure
16
- DB::NodeDBManager.new(@env.data_dir)
16
+ DB::NodeDBManager.new(@env.data_dir)
17
17
 
18
- # puts "MAIN ARGS #{@main_args}"
19
- # puts "SUB COMMAND #{@sub_command}"
20
- # puts "SUB ARGS #{@sub_args}"
21
18
 
22
19
  @subcommands = Vagrant::Registry.new
23
20
 
@@ -47,9 +44,9 @@ module Vagrant
47
44
  end
48
45
 
49
46
  @subcommands.register(:updatepw) do
50
- require File.expand_path("../node/nodeupdatepw", __FILE__)
51
- NodeUpdatePw
52
- end
47
+ require File.expand_path("../node/nodeupdatepw", __FILE__)
48
+ NodeUpdatePw
49
+ end
53
50
 
54
51
  @subcommands.register(:status) do
55
52
  require File.expand_path("../node/nodestatus", __FILE__)
@@ -57,9 +54,15 @@ module Vagrant
57
54
  end
58
55
 
59
56
  @subcommands.register(:operation) do
60
- require File.expand_path("../node/nodeoperationcommand", __FILE__)
61
- NodeOperationCommand
62
- end
57
+ require File.expand_path("../node/nodeoperationcommand", __FILE__)
58
+ NodeOperationCommand
59
+ end
60
+
61
+
62
+ @subcommands.register(:import) do
63
+ require File.expand_path("../node/nodeimport", __FILE__)
64
+ NodeImport
65
+ end
63
66
 
64
67
  end
65
68
 
@@ -75,18 +78,31 @@ module Vagrant
75
78
 
76
79
 
77
80
 
78
- # If we reached this far then we must have a subcommand. If not,
81
+ # If we reached this far then we must have a subcommand. If not,
79
82
  # then we also just print the help and exit.
80
83
  command_class = @subcommands.get(@sub_command.to_sym) if @sub_command
81
84
  return help if !command_class || !@sub_command
82
85
  @logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}")
83
86
 
84
- begin
87
+ begin
85
88
  # Initialize and execute the command class
86
89
  command_class.new(@sub_args, @env).execute
87
90
  rescue Exception => e
88
91
  @env.ui.error(e.message)
89
92
  end
93
+
94
+ # begin
95
+ # # Initialize and execute the command class
96
+ # command_class.new(@sub_args, @env).execute
97
+ # rescue RestClient::ExceptionWithResponse=> e
98
+ # @env.ui.error(e.response)
99
+ # rescue RestClient::RequestFailed => e
100
+ # @env.ui.error("Remote Client \"#{@sub_args[0]}\": Request Failed")
101
+ # rescue RestClient::ResourceNotFound => e
102
+ # @env.ui.error("Remote Client \"#{@sub_args[0]}\": Virtual Machine \"#{@sub_args[1]}\" could not be found")
103
+ # rescue Exception => e
104
+ # @env.ui.error(e.message)
105
+ # end
90
106
 
91
107
 
92
108
  0
@@ -15,12 +15,12 @@ module Vagrant
15
15
  opts = OptionParser.new do |opts|
16
16
  opts.banner = "Usage: vagrant remote backup take [node-name] [vmname] [--download target_directory][--background] [-h]"
17
17
  opts.separator ""
18
- opts.on("-b", "--background", "Take backup in background") do |b|
19
- options[:background] = b
20
- end
21
- opts.on("--download target_directory", String,"Download backup to target directory") do |d|
22
- options[:download] = d
23
- end
18
+ opts.on("-b", "--background", "Take backup in background") do |b|
19
+ options[:background] = b
20
+ end
21
+ opts.on("--download target_directory", String,"Download backup to target directory") do |d|
22
+ options[:download] = d
23
+ end
24
24
 
25
25
  end
26
26
 
@@ -11,9 +11,6 @@ module Vagrant
11
11
 
12
12
  @main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
13
13
 
14
- # puts "MAIN ARGS #{@main_args}"
15
- # puts "SUB COMMAND #{@sub_command}"
16
- # puts "SUB ARGS #{@sub_args}"
17
14
 
18
15
  @subcommands = Vagrant::Registry.new
19
16
 
@@ -29,10 +29,12 @@ module Vagrant
29
29
 
30
30
  machines=RequestController.vm_halt(argv[0],argv[1],options[:force],options[:async])
31
31
 
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
32
+
33
+
34
+ if options[:async] == false
35
+ machines.each do |machine|
36
+ @env.ui.success("Remote Client \"#{argv[0]}\": Virtual Machine \"#{machine["vmname"]}\" halted")
37
+ end
36
38
  else
37
39
  @env.ui.info("Remote Client \"#{argv[0]}\": The operation ID is \"#{machines.gsub!(/\D/, "")}\"")
38
40
  end
@@ -11,9 +11,6 @@ module Vagrant
11
11
 
12
12
  @main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
13
13
 
14
- # puts "MAIN ARGS #{@main_args}"
15
- # puts "SUB COMMAND #{@sub_command}"
16
- # puts "SUB ARGS #{@sub_args}"
17
14
 
18
15
  @subcommands = Vagrant::Registry.new
19
16
 
@@ -12,8 +12,8 @@ module Vagrant
12
12
  opts.banner = "Usage: vagrant remote snapshot restore <node-name> <vmname> <snapshot-uuid|snapshot-name] [--synchronous]>"
13
13
  opts.separator ""
14
14
  opts.on("-s", "--synchronous", "Wait until the operation finishes") do |f|
15
- options[:async] = false
16
- end
15
+ options[:async] = false
16
+ end
17
17
  end
18
18
 
19
19
 
@@ -27,9 +27,9 @@ module Vagrant
27
27
 
28
28
  if options[:async] == false
29
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
30
+ else
31
+ @env.ui.info("Remote Client \"#{argv[0]}\": The operation ID is \"#{snapshot.gsub!(/\D/, "")}\"")
32
+ end
33
33
 
34
34
 
35
35
 
@@ -10,9 +10,9 @@ module Vagrant
10
10
  opts = OptionParser.new do |opts|
11
11
  opts.banner = "Usage: vagrant remote snapshot take <node-name> <vmname> <name> [description] [--synchronous]"
12
12
  opts.separator ""
13
- opts.on("-s", "--synchronous", "Wait until the operation finishes") do |f|
14
- options[:async] = false
15
- end
13
+ opts.on("-s", "--synchronous", "Wait until the operation finishes") do |f|
14
+ options[:async] = false
15
+ end
16
16
  end
17
17
 
18
18
 
@@ -25,11 +25,11 @@ module Vagrant
25
25
  snapshot = RequestController.vm_snapshot_take(argv[0],argv[1],argv[2],argv[3],options[:async])
26
26
 
27
27
  if options[:async] == false
28
- @env.ui.info("Remote Client: #{argv[0]}", :prefix => false)
29
- @env.ui.info("Snapshot \"#{snapshot[:name]}\" with UUID #{snapshot[:id]} succesfully created.")
30
- else
31
- @env.ui.info("Remote Client \"#{argv[0]}\": The operation ID is \"#{snapshot.gsub!(/\D/, "")}\"")
32
- end
28
+ @env.ui.info("Remote Client: #{argv[0]}", :prefix => false)
29
+ @env.ui.info("Snapshot \"#{snapshot[:name]}\" with UUID #{snapshot[:id]} succesfully created.")
30
+ else
31
+ @env.ui.info("Remote Client \"#{argv[0]}\": The operation ID is \"#{snapshot.gsub!(/\D/, "")}\"")
32
+ end
33
33
 
34
34
 
35
35
  0
@@ -11,9 +11,9 @@ module Vagrant
11
11
  opts = OptionParser.new do |opts|
12
12
  opts.banner = "Usage: vagrant remote suspend <node-name> [vm_name] [--synchronous]"
13
13
  opts.separator ""
14
- opts.on("-s", "--synchronous", "Wait until the operation finishes") do |f|
15
- options[:async] = false
16
- end
14
+ opts.on("-s", "--synchronous", "Wait until the operation finishes") do |f|
15
+ options[:async] = false
16
+ end
17
17
  end
18
18
 
19
19
  argv = parse_options(opts)
@@ -21,6 +21,7 @@ module Vagrant
21
21
 
22
22
 
23
23
  machines=RequestController.vm_up(argv[0],argv[1],options[:async])
24
+
24
25
 
25
26
  if options[:async] == false
26
27
  machines.each do |machine|
@@ -19,7 +19,7 @@ module Vagrant
19
19
 
20
20
  @env.ui.info("Remote Client: #{argv[0]}", :prefix => false)
21
21
 
22
- #pp vmstatus
22
+
23
23
 
24
24
 
25
25
 
@@ -11,23 +11,11 @@ module Vagrant
11
11
 
12
12
  @main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
13
13
 
14
- #Initializing db structure
15
- DB::NodeDBManager.new(@env.data_dir)
14
+ #Initializing db structure
15
+ DB::NodeDBManager.new(@env.data_dir)
16
16
 
17
- # puts "MAIN ARGS #{@main_args}"
18
- # puts "SUB COMMAND #{@sub_command}"
19
- # puts "SUB ARGS #{@sub_args}"
20
17
 
21
- @subcommands = Vagrant::Registry.new
22
- # @subcommands.register(:add) do
23
- # require File.expand_path("../add", __FILE__)
24
- # Add
25
- # end
26
- #
27
- # @subcommands.register(:boxlist) do
28
- # require File.expand_path("../remoteboxlist", __FILE__)
29
- # BoxList
30
- # end
18
+ @subcommands = Vagrant::Registry.new
31
19
 
32
20
  @subcommands.register(:box) do
33
21
  require File.expand_path("../remote/remoteboxcommand", __FILE__)
@@ -118,7 +106,7 @@ module Vagrant
118
106
  # Initialize and execute the command class
119
107
  command_class.new(@sub_args, @env).execute
120
108
  rescue RestClient::ExceptionWithResponse=> e
121
- @env.ui.error(e.response)
109
+ @env.ui.error(e.response)
122
110
  rescue RestClient::RequestFailed => e
123
111
  @env.ui.error("Remote Client \"#{@sub_args[0]}\": Request Failed")
124
112
  rescue RestClient::ResourceNotFound => e
@@ -19,6 +19,7 @@ module NodeMaster
19
19
  DELETE_VERB = :delete
20
20
  PUT_VERB = :put
21
21
  SYNC_TIME = 10
22
+ OPERATION_IN_PROGRESS = 100
22
23
 
23
24
  def self.box_downloads(host)
24
25
  client=get_host_parameters(host)
@@ -61,7 +62,7 @@ module NodeMaster
61
62
 
62
63
  resource = RestClient::Resource.new(
63
64
  RouteManager.box_add_url(client[:address],client[:port]),
64
- :timeout => -1
65
+ :timeout => nil
65
66
  )
66
67
 
67
68
 
@@ -80,12 +81,12 @@ module NodeMaster
80
81
  #setting the request not to expire
81
82
  resource = RestClient::Resource.new(
82
83
  RouteManager.vm_up_url(client[:address],client[:port]),
83
- :timeout => -1
84
+ :timeout => nil
84
85
  )
85
86
 
86
87
 
87
- response = execute(client,POST_VERB,resource,{:vmname => vmname},async);
88
-
88
+ response = execute(client,POST_VERB,resource,{:vmname => vmname},async);
89
+
89
90
  return JSON.parse(response.to_str) if async ==false
90
91
  response
91
92
 
@@ -97,10 +98,11 @@ module NodeMaster
97
98
  #setting the request not to expire
98
99
  resource = RestClient::Resource.new(
99
100
  RouteManager.vm_halt_url(client[:address],client[:port]),
100
- :timeout => -1
101
+ :timeout => nil
101
102
  )
102
103
 
103
104
  response = execute(client,POST_VERB,resource,{:vmname => vmname,:force=>force},async);
105
+
104
106
  return JSON.parse(response.to_str) if async ==false
105
107
  response
106
108
 
@@ -111,7 +113,7 @@ module NodeMaster
111
113
 
112
114
  resource = RestClient::Resource.new(
113
115
  RouteManager.vm_destroy_url(client[:address],client[:port]),
114
- :timeout => -1
116
+ :timeout => nil
115
117
  )
116
118
 
117
119
 
@@ -141,7 +143,7 @@ module NodeMaster
141
143
 
142
144
  resource = RestClient::Resource.new(
143
145
  RouteManager.vm_add_url(client[:address],client[:port]),
144
- :timeout => -1 ,
146
+ :timeout => nil ,
145
147
  # :payload => {
146
148
  # :content_type => 'text/plain',
147
149
  # :file => File.new(config, 'rb')
@@ -202,7 +204,7 @@ module NodeMaster
202
204
  #setting the request not to expire
203
205
  resource = RestClient::Resource.new(
204
206
  RouteManager.vm_suspend_url(client[:address],client[:port]),
205
- :timeout => -1
207
+ :timeout => nil
206
208
  )
207
209
 
208
210
 
@@ -219,7 +221,7 @@ module NodeMaster
219
221
  #setting the request not to expire
220
222
  resource = RestClient::Resource.new(
221
223
  RouteManager.vm_resume_url(client[:address],client[:port]),
222
- :timeout => -1
224
+ :timeout => nil
223
225
  )
224
226
 
225
227
  response = execute(client,POST_VERB,resource,{:vmname => vmname},async);
@@ -236,7 +238,7 @@ module NodeMaster
236
238
  #setting the request not to expire
237
239
  resource = RestClient::Resource.new(
238
240
  RouteManager.vm_provision_url(client[:address],client[:port]),
239
- :timeout => -1
241
+ :timeout => nil
240
242
  )
241
243
 
242
244
 
@@ -272,7 +274,7 @@ module NodeMaster
272
274
 
273
275
  resource = RestClient::Resource.new(
274
276
  RouteManager.vm_snapshot_take_url(client[:address],client[:port],vmname),
275
- :timeout => -1,
277
+ :timeout => nil,
276
278
  )
277
279
 
278
280
 
@@ -291,7 +293,7 @@ module NodeMaster
291
293
  #setting the request not to expire
292
294
  resource = RestClient::Resource.new(
293
295
  RouteManager.vm_snapshot_delete_url(client[:address],client[:port],vmname,snapid),
294
- :timeout => -1,
296
+ :timeout => nil,
295
297
  )
296
298
 
297
299
 
@@ -308,7 +310,7 @@ module NodeMaster
308
310
 
309
311
  resource = RestClient::Resource.new(
310
312
  RouteManager.vm_snapshot_restore_url(client[:address],client[:port],vmname),
311
- :timeout => -1
313
+ :timeout => nil
312
314
  )
313
315
 
314
316
  response = execute(client,POST_VERB,resource,{:vmname => vmname,:snapid => snapid},async);
@@ -326,8 +328,8 @@ module NodeMaster
326
328
  RouteManager.node_queue_url(client[:address],client[:port],id)
327
329
  )
328
330
 
329
- response = execute(client,GET_VERB,resource);
330
-
331
+ response = execute(client,GET_VERB,resource);
332
+
331
333
  JSON.parse(response.to_str,{:symbolize_names => true})
332
334
  end
333
335
 
@@ -338,6 +340,8 @@ module NodeMaster
338
340
  )
339
341
 
340
342
  response = execute(client,GET_VERB,resource);
343
+
344
+
341
345
 
342
346
  JSON.parse(response.to_str,{:symbolize_names => true})
343
347
  end
@@ -383,7 +387,7 @@ module NodeMaster
383
387
  resource = RestClient::Resource.new(
384
388
  RouteManager.vm_snapshot_take_url(client[:address],client[:port],vm["name"]),
385
389
  :download => download_backup,
386
- :timeout => -1
390
+ :timeout => nil
387
391
  )
388
392
 
389
393
  #OLD. FIXME REMOVE
@@ -440,7 +444,7 @@ module NodeMaster
440
444
 
441
445
  resource = RestClient::Resource.new(
442
446
  RouteManager.backup_log_url(client[:address],client[:port],vmname),
443
- :timeout => -1
447
+ :timeout => nil
444
448
  )
445
449
 
446
450
 
@@ -456,7 +460,7 @@ module NodeMaster
456
460
  client=get_host_parameters(node)
457
461
 
458
462
  resource = RestClient::Resource.new(
459
- RouteManager.node_info_url(client[:address],client[:port]),:timeout => -1
463
+ RouteManager.node_info_url(client[:address],client[:port]),:timeout => nil
460
464
  )
461
465
 
462
466
  response=execute(client,GET_VERB,resource);
@@ -474,7 +478,7 @@ module NodeMaster
474
478
 
475
479
 
476
480
  resource = RestClient::Resource.new(
477
- RouteManager.config_show_url(client[:address],client[:port]),:timeout => -1
481
+ RouteManager.config_show_url(client[:address],client[:port]),:timeout => nil
478
482
  )
479
483
 
480
484
 
@@ -490,7 +494,7 @@ module NodeMaster
490
494
 
491
495
  resource = RestClient::Resource.new(
492
496
  RouteManager.config_upload_url(client[:address],client[:port]),
493
- :timeout => -1
497
+ :timeout => nil
494
498
  )
495
499
 
496
500
  execute(client,POST_VERB,resource,{:file => File.read(config_path), :content_type => 'text/plain'})
@@ -503,7 +507,7 @@ module NodeMaster
503
507
 
504
508
 
505
509
  resource = RestClient::Resource.new(
506
- RouteManager.node_password_change_url(client[:address],client[:port]),:timeout => -1
510
+ RouteManager.node_password_change_url(client[:address],client[:port]),:timeout => nil
507
511
  )
508
512
 
509
513
  execute(client,POST_VERB,resource,{:password => Digest::MD5.hexdigest(password)});
@@ -552,11 +556,9 @@ module NodeMaster
552
556
 
553
557
  responseop = resourceop.send GET_VERB
554
558
 
555
- res = JSON.parse(responseop.to_str)
556
-
557
-
558
-
559
- end while (res[0].eql? "IN PROGRESS") #While operation code is IN PROGRESS iterate
559
+ res = JSON.parse(responseop.to_str)
560
+
561
+ end while (res[0] == OPERATION_IN_PROGRESS) #While operation code is IN PROGRESS iterate
560
562
 
561
563
  res[1]
562
564
 
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
2
  module NodeMaster
3
- VERSION = "1.1.1"
3
+ VERSION = "1.1.3"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-nodemaster
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-12-12 00:00:00.000000000 Z
12
+ date: 2015-02-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -84,6 +84,7 @@ extensions: []
84
84
  extra_rdoc_files: []
85
85
  files:
86
86
  - .gitignore
87
+ - CHANGELOG.md
87
88
  - Gemfile
88
89
  - LICENSE
89
90
  - README.md
@@ -92,8 +93,10 @@ files:
92
93
  - lib/vagrant-nodemaster/apidesc.rb
93
94
  - lib/vagrant-nodemaster/node/nodeadd.rb
94
95
  - lib/vagrant-nodemaster/node/nodedbmanager.rb
96
+ - lib/vagrant-nodemaster/node/nodeimport.rb
95
97
  - lib/vagrant-nodemaster/node/nodeinfo.rb
96
98
  - lib/vagrant-nodemaster/node/nodelist.rb
99
+ - lib/vagrant-nodemaster/node/nodeoperation.rb
97
100
  - lib/vagrant-nodemaster/node/nodeoperationcommand.rb
98
101
  - lib/vagrant-nodemaster/node/nodeoperationlast.rb
99
102
  - lib/vagrant-nodemaster/node/nodeoperationshow.rb