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
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in vagrant-nodemaster.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,26 @@
1
+ require "vagrant-nodemaster/version"
2
+
3
+ module Vagrant
4
+ module NodeMaster
5
+ class Plugin < Vagrant.plugin("2")
6
+
7
+ name "remote"
8
+ description <<-DESC
9
+ Este es mi primer plugin y estoy probando la estructura
10
+ DESC
11
+
12
+
13
+ command ('remote') do
14
+ require_relative "vagrant-nodemaster/remotecommand"
15
+ Command
16
+ end
17
+
18
+ command ('node') do
19
+ require_relative "vagrant-nodemaster/nodecommand"
20
+ Command
21
+ end
22
+
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,220 @@
1
+ module RestRoutes
2
+ #FIXME Figure how to manage remote port
3
+ # REMOTE_PORT = 3333
4
+
5
+ class RouteManager
6
+
7
+ def self.box_list_route
8
+ BOX_LIST_ROUTE
9
+ end
10
+
11
+ def self.box_delete_route
12
+ BOX_DELETE_ROUTE
13
+ end
14
+
15
+ def self.box_add_route
16
+ BOX_ADD_ROUTE
17
+ end
18
+
19
+ def self.vm_up_route
20
+ VM_UP_ROUTE
21
+ end
22
+
23
+ def self.vm_suspend_route
24
+ VM_SUSPEND_ROUTE
25
+ end
26
+
27
+ def self.vm_resume_route
28
+ VM_RESUME_ROUTE
29
+ end
30
+
31
+ def self.vm_halt_route
32
+ VM_HALT_ROUTE
33
+ end
34
+
35
+ def self.vm_destroy_route
36
+ VM_DESTROY_ROUTE
37
+ end
38
+
39
+ def self.vm_status_route
40
+ VM_STATUS_ROUTE
41
+ end
42
+
43
+ def self.vm_provision_route
44
+ VM_PROVISION_ROUTE
45
+ end
46
+
47
+ def self.vm_status_all_route
48
+ VM_STATUS_ALL_ROUTE
49
+ end
50
+
51
+ def self.vm_sshconfig_route
52
+ SSH_CONFIG_ROUTE
53
+ end
54
+
55
+ def self.snapshots_all_route
56
+ SNAPSHOTS_ALL_ROUTE
57
+ end
58
+
59
+ def self.vm_snapshots_route
60
+ VM_SNAPSHOTS_ROUTE
61
+ end
62
+
63
+ def self.vm_snapshot_take_route
64
+ VM_SNAPSHOT_TAKE_ROUTE
65
+ end
66
+
67
+ def self.vm_snapshot_restore_route
68
+ VM_SNAPSHOT_RESTORE_ROUTE
69
+ end
70
+
71
+ def self.node_backup_log_route
72
+ NODE_BACKUP_LOG_ROUTE
73
+ end
74
+
75
+ def self.vm_backup_log_route
76
+ VM_BACKUP_LOG_ROUTE
77
+ end
78
+
79
+
80
+ def self.box_list_url(host,port)
81
+ "http://#{host}:#{port}#{box_list_route}"
82
+ end
83
+
84
+ def self.box_add_url(host,port)
85
+ "http://#{host}:#{port}#{box_add_route}"
86
+ end
87
+
88
+ def self.box_delete_url(host,port,box,provider)
89
+
90
+ url=String.new(box_delete_route)
91
+ url[":box"]=box
92
+ url[":provider"]=provider
93
+ url="http://#{host}:#{port}#{url}"
94
+
95
+ url
96
+
97
+ end
98
+
99
+
100
+
101
+ def self.vm_up_url(host,port)
102
+ "http://#{host}:#{port}#{vm_up_route}"
103
+ end
104
+
105
+ def self.vm_halt_url(host,port)
106
+ "http://#{host}:#{port}#{vm_halt_route}"
107
+ end
108
+
109
+ def self.vm_destroy_url(host,port)
110
+ "http://#{host}:#{port}#{vm_destroy_route}"
111
+ end
112
+
113
+ def self.vm_suspend_url(host,port)
114
+ "http://#{host}:#{port}#{vm_suspend_route}"
115
+ end
116
+
117
+ def self.vm_resume_url(host,port)
118
+ "http://#{host}:#{port}#{vm_resume_route}"
119
+ end
120
+
121
+ def self.vm_provision_url(host,port)
122
+ "http://#{host}:#{port}#{vm_provision_route}"
123
+ end
124
+
125
+
126
+
127
+
128
+ def self.vm_status_url(host,port,vmname=nil)
129
+ url="http://#{host}:#{port}#{vm_status_all_route}"
130
+
131
+ if (vmname!=nil)
132
+ url=String.new(vm_status_route)
133
+ url[":vm"]=vmname
134
+ url="http://#{host}:#{port}#{url}"
135
+ end
136
+
137
+ url
138
+
139
+ end
140
+
141
+ def self.vm_sshconfig_url(host,port,vmname)
142
+ url=String.new(vm_sshconfig_route)
143
+ url[":vm"]=vmname
144
+
145
+ "http://#{host}:#{port}#{url}"
146
+
147
+ end
148
+
149
+ def self.snapshot_list_url(host,port,vmname=nil)
150
+ url="http://#{host}:#{port}#{snapshots_all_route}"
151
+
152
+ if (vmname!=nil)
153
+ url=String.new(vm_snapshots_route)
154
+ url[":vm"]=vmname
155
+ url="http://#{host}:#{port}#{url}"
156
+ end
157
+
158
+ url
159
+
160
+ end
161
+
162
+ def self.vm_snapshot_take_url(host,port,vmname)
163
+ url=String.new(vm_snapshot_take_route)
164
+ url[":vm"]=vmname
165
+ url="http://#{host}:#{port}#{url}"
166
+
167
+ url
168
+
169
+ end
170
+
171
+ def self.vm_snapshot_restore_url(host,port,vmname)
172
+ url=String.new(vm_snapshot_restore_route)
173
+ url[":vm"]=vmname
174
+ url="http://#{host}:#{port}#{url}"
175
+
176
+ url
177
+
178
+ end
179
+
180
+ def self.backup_log_url(host,port,vmname=nil)
181
+ url="http://#{host}:#{port}#{node_backup_log_route}"
182
+
183
+ if (vmname!=nil)
184
+ url=String.new(vm_backup_log_route)
185
+ url[":vm"]=vmname
186
+ url="http://#{host}:#{port}#{url}"
187
+ end
188
+
189
+ url
190
+
191
+ end
192
+
193
+
194
+
195
+ private
196
+ BOX_LIST_ROUTE = "/api/box/list"
197
+ BOX_DELETE_ROUTE = "/api/box/:box/:provider/delete"
198
+ BOX_ADD_ROUTE = "/api/box/add"
199
+
200
+ VM_UP_ROUTE = "/api/vm/up"
201
+ VM_HALT_ROUTE = "/api/vm/halt"
202
+ VM_DESTROY_ROUTE = "/api/vm/destroy"
203
+ VM_SUSPEND_ROUTE = "/api/vm/suspend"
204
+ VM_RESUME_ROUTE = "/api/vm/resume"
205
+ VM_PROVISION_ROUTE = "/api/vm/provision"
206
+ VM_STATUS_ALL_ROUTE = "/api/vm/status"
207
+ VM_STATUS_ROUTE = "/api/vm/:vm/status"
208
+ SSH_CONFIG_ROUTE = "/api/vm/:vm/sshconfig"
209
+
210
+ SNAPSHOTS_ALL_ROUTE = "/api/vm/snapshots"
211
+ VM_SNAPSHOTS_ROUTE = "/api/vm/:vm/snapshots"
212
+ VM_SNAPSHOT_TAKE_ROUTE = "/api/vm/:vm/take"
213
+ VM_SNAPSHOT_RESTORE_ROUTE = "/api/vm/:vm/restore"
214
+
215
+ VM_BACKUP_LOG_ROUTE = "/api/vm/:vm/backuplog"
216
+ NODE_BACKUP_LOG_ROUTE = "/api/backuplog"
217
+
218
+ end
219
+
220
+ end
@@ -0,0 +1,33 @@
1
+ require 'vagrant-nodemaster/node/nodedbmanager'
2
+
3
+ module Vagrant
4
+ module NodeMaster
5
+
6
+ class NodeAdd < Vagrant.plugin(2, :command)
7
+
8
+ def execute
9
+
10
+ options = {}
11
+
12
+ opts = OptionParser.new do |opts|
13
+ opts.banner = "Usage: vagrant node add <node-name> <node-address> <node-port> --hostname"
14
+ opts.on("--hostname", "Address in dns format") do |d|
15
+ options[:dns] = d
16
+ end
17
+ end
18
+
19
+ argv = parse_options(opts)
20
+ return if !argv
21
+ raise Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length != 3
22
+
23
+ dbmanager=DB::NodeDBManager.new
24
+
25
+ dbmanager.add_node(argv[0],argv[1],argv[2].to_i,options[:dns])
26
+
27
+ 0
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,176 @@
1
+ require 'sqlite3'
2
+
3
+ module Vagrant
4
+ module NodeMaster
5
+ module DB
6
+ class NodeDBManager
7
+
8
+ def initialize
9
+ @db=check_database
10
+ end
11
+
12
+ def add_node(node_name,node_address,node_port,dnsformat)
13
+
14
+ if (!portvalid?(node_port))
15
+ raise "Node port must be above 1023"
16
+ end
17
+
18
+
19
+ if (!namevalid?(node_name))
20
+ raise "Node name Invalid (Spectial characters allowed: '_' and '-')."
21
+ end
22
+
23
+ if (dnsformat && !dnsvalid?(node_address)) ||
24
+ (!dnsformat && !ipvalid?(node_address))
25
+
26
+ raise "Invalid ip or dns address."
27
+
28
+ end
29
+
30
+
31
+ sql="INSERT INTO #{TABLE_NAME} VALUES ( ? , ? , ?)"
32
+ @db.execute(sql,node_name,node_address,node_port)
33
+
34
+ end
35
+
36
+ def update_node(node_name,node_address,node_port,dnsformat)
37
+
38
+ if (!portvalid?(node_port))
39
+
40
+ raise "Node port must be above 1023"
41
+
42
+ end
43
+
44
+ if (dnsformat && !dnsvalid?(node_address)) ||
45
+ (!dnsformat && !ipvalid?(node_address))
46
+
47
+ raise "Invalid ip or dns address."
48
+
49
+ end
50
+
51
+ sql="UPDATE #{TABLE_NAME} SET #{NODE_ADDRESS_COLUMN} = ?,#{NODE_PORT_COLUMN} = ? WHERE #{NODE_NAME_COLUMN}= ?"
52
+ @db.execute(sql,node_address,node_port,node_name)
53
+
54
+ end
55
+
56
+
57
+
58
+
59
+ def remove_node(node_name)
60
+ sql="DELETE FROM #{TABLE_NAME} WHERE #{NODE_NAME_COLUMN}=?"
61
+ @db.execute(sql,node_name)
62
+ end
63
+
64
+ def remove_nodes
65
+ sql="DELETE FROM #{TABLE_NAME}"
66
+ @db.execute(sql)
67
+ end
68
+
69
+
70
+ def get_node_names
71
+ sql="SELECT #{NODE_NAME_COLUMN} FROM #{TABLE_NAME}"
72
+ return @db.execute(sql);
73
+ end
74
+
75
+ def get_nodes
76
+ sql="SELECT * FROM #{TABLE_NAME}"
77
+ rows=@db.execute(sql);
78
+ nodes = []
79
+ rows.each do |row|
80
+ node = {}
81
+ node[:name]=row[0]
82
+ node[:address]=row[1]
83
+ node[:port]=row[2]
84
+ nodes << node
85
+ end
86
+
87
+ return nodes
88
+ end
89
+
90
+ def get_node(node_name)
91
+ sql="SELECT * FROM #{TABLE_NAME} WHERE #{NODE_NAME_COLUMN}=?"
92
+ raise "Node not found" if (nodear=@db.execute(sql,node_name)).empty?
93
+ node = {}
94
+ node[:name]=nodear[0][0]
95
+ node[:address]=nodear[0][1]
96
+ node[:port]=nodear[0][2]
97
+ return node
98
+ end
99
+
100
+ private
101
+
102
+ TABLE_NAME='node_table'
103
+ NODE_NAME_COLUMN = 'node_name'
104
+ NODE_ADDRESS_COLUMN = 'node_address'
105
+ NODE_PORT_COLUMN = 'node_port'
106
+
107
+ def check_database
108
+ #Creates and/or open the database
109
+ db = SQLite3::Database.new( "/tmp/test.db" )
110
+
111
+ if db.execute("SELECT name FROM sqlite_master
112
+ WHERE type='table' AND name='#{TABLE_NAME}';").length==0
113
+ # db.execute( "create table '#{TABLE_NAME}' (id INTEGER PRIMARY KEY AUTOINCREMENT,
114
+ # {NODE_NAME_COLUMN} TEXT, #{NODE_ADDRESS_COLUMN} TEXT);" )
115
+ db.execute( "create table '#{TABLE_NAME}' (#{NODE_NAME_COLUMN} TEXT PRIMARY KEY,
116
+ #{NODE_ADDRESS_COLUMN} TEXT NOT NULL,
117
+ #{NODE_PORT_COLUMN} INTEGER NOT NULL);" )
118
+ end
119
+ return db
120
+ end
121
+
122
+ def ipvalid?(node_address)
123
+
124
+ 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])$'
125
+
126
+
127
+ ipregex = Regexp.new(ipreg)
128
+
129
+
130
+ if (node_address =~ ipregex)
131
+ return true
132
+ end
133
+
134
+ return false
135
+
136
+ end
137
+
138
+ def dnsvalid?(node_address)
139
+
140
+
141
+ 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])$'
142
+
143
+
144
+ hregex = Regexp.new(hostreg)
145
+
146
+ if (node_address =~ hregex)
147
+ return true
148
+ end
149
+
150
+ return false
151
+
152
+ end
153
+
154
+
155
+ def namevalid?(node_name)
156
+ #only allowing '_' and '-'
157
+ namereg = '^[a-z0-9_-]*$'
158
+ nameregex = Regexp.new(namereg)
159
+ if (node_name =~nameregex)
160
+ return true
161
+ end
162
+ return false
163
+
164
+ end
165
+
166
+ def portvalid?(node_port)
167
+ if (node_port>=1024)
168
+ return true
169
+ end
170
+ return false
171
+ end
172
+
173
+ end
174
+ end
175
+ end
176
+ end