knife-proxmox 0.0.18 → 0.0.19
Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
Author: Jorge Moratilla
|
2
2
|
Date: 2012-10-07
|
3
3
|
|
4
|
+
[2013-05-07]
|
5
|
+
Version: 0.0.19
|
6
|
+
* knife proxmox server destroy now includes option -y to avoid confirmation (used for scripting)
|
7
|
+
|
8
|
+
[2013-05-03]
|
9
|
+
Version: 0.0.18
|
10
|
+
* knife proxmox server list now sorts output by vmid (default) and by field (vmid, node, name)
|
11
|
+
|
4
12
|
[2013-04-29]
|
5
13
|
Version: 0.0.17
|
6
14
|
* knife proxmox server destroy now requests confirmation to delete a server
|
data/README.md
CHANGED
@@ -38,10 +38,10 @@ Then install your ruby language (recommended ruby-1.9.3-xxx)
|
|
38
38
|
### List servers
|
39
39
|
$ knife proxmox server list
|
40
40
|
Id Node Name Type Status
|
41
|
-
104 node-1 tetatet.example.com openvz down
|
42
|
-
470 node-2 sg-node1.example.com openvz up
|
43
41
|
102 node-1 test qemu down
|
42
|
+
104 node-1 tetatet.example.com openvz down
|
44
43
|
202 node-2 chef-client1 openvz down
|
44
|
+
470 node-2 sg-node1.example.com openvz up
|
45
45
|
|
46
46
|
### Get info for a server
|
47
47
|
$ knife proxmox server info -H tetatet.example.com -P ip
|
@@ -133,7 +133,7 @@ Then install your ruby language (recommended ruby-1.9.3-xxx)
|
|
133
133
|
|
134
134
|
|
135
135
|
### Destroy a server
|
136
|
-
$ knife proxmox server destroy -U https://localhost:8006/api2/json/ -u test -p test123 -n localhost -R pve -N vm-node1 -VV
|
136
|
+
$ knife proxmox server destroy -U https://localhost:8006/api2/json/ -u test -p test123 -n localhost -R pve -N vm-node1 -VV -P
|
137
137
|
DEBUG: Using configuration from /home/jorge/workspace/chef-repo/.chef/knife.rb
|
138
138
|
node to destroy: vm-node1 [vmid: 200]
|
139
139
|
Continue? (Y/N) y
|
@@ -141,6 +141,9 @@ Then install your ruby language (recommended ruby-1.9.3-xxx)
|
|
141
141
|
Result: 200
|
142
142
|
..............................
|
143
143
|
Result: 200
|
144
|
+
WARNING: Deleted node vm-node1
|
145
|
+
WARNING: Deleted client vm-node1
|
146
|
+
|
144
147
|
|
145
148
|
## Installation
|
146
149
|
|
@@ -173,6 +176,12 @@ If you want to alter some variable by command line then you can use the followin
|
|
173
176
|
-p --password <pass> Same for password
|
174
177
|
-r --realm <realm> Same for the realm used to authenticate
|
175
178
|
|
179
|
+
There is a script in extra/set_environment_variables.sh that creates the
|
180
|
+
set of variables needed for knife-proxmox. Just answer the questions and
|
181
|
+
paste the output into your profile file.
|
182
|
+
|
183
|
+
|
184
|
+
|
176
185
|
### ABOUT CHEF AND PROXMOX
|
177
186
|
|
178
187
|
To bootstrap a newly created VM, you should apply the patch inside the extra directory. Otherwise you must
|
@@ -167,14 +167,15 @@ class Chef
|
|
167
167
|
else
|
168
168
|
result = "NOK: error code = " + response.code.to_s
|
169
169
|
end
|
170
|
-
|
171
|
-
|
170
|
+
ui.msg(result)
|
171
|
+
taskid = JSON.parse(response.body)['data'] || nil
|
172
|
+
waitfor(taskid) unless taskid.nil?
|
172
173
|
Chef::Log.debug("Action: #{action}, Result: #{result}\n")
|
173
174
|
rescue Exception => msg
|
174
175
|
result = "An exception ocurred. Use -VV to show it"
|
175
|
-
Chef::Log.debug("
|
176
|
+
Chef::Log.debug("Task ID: " + taskid.to_s + ", Class: " + taskid.class)
|
177
|
+
Chef::Log.debug("Action: #{action}, Return code: #{response.code}, Exception: #{msg}\n")
|
176
178
|
end
|
177
|
-
ui.msg(result)
|
178
179
|
end
|
179
180
|
|
180
181
|
# waitfor end of the task, need the taskid and the timeout
|
@@ -190,6 +191,7 @@ class Chef
|
|
190
191
|
end
|
191
192
|
end
|
192
193
|
|
194
|
+
# server_start: Starts the server
|
193
195
|
def server_start(vmid)
|
194
196
|
node = vmid_to_node(vmid)
|
195
197
|
ui.msg("Starting VM #{vmid} on node #{node}....")
|
@@ -208,25 +210,55 @@ class Chef
|
|
208
210
|
# take the response and extract the taskid
|
209
211
|
action_response("server stop",response)
|
210
212
|
end
|
213
|
+
# TODO: check with server_get_data the status/current/status of the vmid to send the umount command
|
211
214
|
rescue Exception => e
|
212
215
|
ui.warn("The VMID does not match any node")
|
213
216
|
exit 1
|
214
217
|
end
|
215
218
|
|
219
|
+
# server_unmount: Unmounts the server's filesystem
|
220
|
+
def server_umount(vmid)
|
221
|
+
node = vmid_to_node(vmid)
|
222
|
+
ui.msg("Unmounting VM #{vmid} on node #{node}...")
|
223
|
+
@connection["nodes/#{node}/openvz/#{vmid}/status/umount"].post "", @auth_params do |response, request, result, &block|
|
224
|
+
# take the response and extract the taskid
|
225
|
+
action_response("server umount",response)
|
226
|
+
end
|
227
|
+
rescue Exception => e
|
228
|
+
ui.warn("The VMID does not match any node")
|
229
|
+
exit 1
|
230
|
+
end
|
231
|
+
|
232
|
+
|
233
|
+
# server_create: Sends a vm_definition to proxmox for creation
|
216
234
|
def server_create(vmid,vm_definition)
|
217
235
|
ui.msg("Creating VM #{vmid}...")
|
218
236
|
@connection["nodes/#{Chef::Config[:knife][:pve_node_name]}/openvz"].post "#{vm_definition}", @auth_params do |response, request, result, &block|
|
219
237
|
action_response("server create",response)
|
220
238
|
end
|
221
239
|
end
|
222
|
-
|
223
|
-
#
|
224
|
-
#
|
240
|
+
|
241
|
+
# server_modify: Sends a vm_definition to a running VM
|
242
|
+
# data:
|
243
|
+
# PUT /api2/json/nodes/esxi-2/openvz/170/config
|
244
|
+
# {
|
245
|
+
# memory=>2048
|
246
|
+
# swap=>512
|
247
|
+
# disk=>16
|
248
|
+
# cpus=>4
|
249
|
+
# }
|
250
|
+
# Definition must be a JSON
|
251
|
+
def server_modify(vmid,vm_definition)
|
252
|
+
ui.msg("Modifying VM #{vmid}...")
|
253
|
+
@connection["nodes/#{Chef::Config[:knife][:pve_node_name]}/openvz/#{vmid}/config"].put "#{vm_definition}", @auth_params do |response, request, result, &block|
|
254
|
+
action_response("server modify",response)
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
# server_get_data: Returns the parameter requested, or all
|
225
259
|
def server_get_data(vmid,field)
|
226
260
|
node = vmid_to_node(vmid)
|
227
261
|
@connection["nodes/#{node}/openvz/#{vmid}/status/current"].get @auth_params do |response, request, result, &block|
|
228
|
-
#action_response("server get data",response)
|
229
|
-
# (field.match('all'))?JSON.parse(response.body)['data'].to_json : JSON.parse(response.body)['data'][field]
|
230
262
|
if (field == 'all') then
|
231
263
|
JSON.parse(response.body)['data']
|
232
264
|
else
|
@@ -26,6 +26,11 @@ class Chef
|
|
26
26
|
:long => "--vmid number",
|
27
27
|
:description => "The numeric identifier of the VM"
|
28
28
|
|
29
|
+
option :force,
|
30
|
+
:short => "-y",
|
31
|
+
:long => "--yes",
|
32
|
+
:description => "Force answer to yes (useful for scripting)"
|
33
|
+
|
29
34
|
def run
|
30
35
|
# Needed
|
31
36
|
connection
|
@@ -39,7 +44,9 @@ class Chef
|
|
39
44
|
name = config[:chef_node_name]
|
40
45
|
vm_id = server_name_to_vmid(name)
|
41
46
|
puts "Server to destroy: #{name} [vmid: #{vm_id}]"
|
42
|
-
|
47
|
+
if (config[:force].nil?) then
|
48
|
+
ui.confirm("Continue")
|
49
|
+
end
|
43
50
|
else
|
44
51
|
vm_id = config[:vm_id]
|
45
52
|
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'chef/knife/proxmox_base'
|
2
|
+
|
3
|
+
class Chef
|
4
|
+
class Knife
|
5
|
+
class ProxmoxServerModify < Knife
|
6
|
+
|
7
|
+
include Knife::ProxmoxBase
|
8
|
+
|
9
|
+
banner "knife proxmox server modify (options)"
|
10
|
+
|
11
|
+
# TODO: parameters for openvz should be in other object
|
12
|
+
option :vm_hostname,
|
13
|
+
:short => "-H hostname",
|
14
|
+
:long => "--hostname hostname",
|
15
|
+
:description => "VM instance hostname"
|
16
|
+
|
17
|
+
option :vm_cpus,
|
18
|
+
:short => "-C CPUs",
|
19
|
+
:long => "--cpus number",
|
20
|
+
:description => "Number of cpus of the VM instance"
|
21
|
+
|
22
|
+
option :vm_memory,
|
23
|
+
:short => "-M MB",
|
24
|
+
:long => "--mem MB",
|
25
|
+
:description => "Memory in MB"
|
26
|
+
|
27
|
+
option :vm_swap,
|
28
|
+
:short => "-SW",
|
29
|
+
:long => "--swap MB",
|
30
|
+
:description => "Memory in MB for swap"
|
31
|
+
|
32
|
+
option :vm_vmid,
|
33
|
+
:short => "-I id",
|
34
|
+
:long => "--vmid id",
|
35
|
+
:description => "Id for the VM"
|
36
|
+
|
37
|
+
option :vm_disk,
|
38
|
+
:short => "-D disk",
|
39
|
+
:long => "--disk GB",
|
40
|
+
:description => "Disk space in GB"
|
41
|
+
|
42
|
+
def run
|
43
|
+
# Needed
|
44
|
+
connection
|
45
|
+
|
46
|
+
vm_config = Hash.new
|
47
|
+
|
48
|
+
vm_config[:id] = config[:vm_vmid] || nil
|
49
|
+
vm_config[:hostname] = config[:vm_hostname] || nil
|
50
|
+
vm_config[:cpus] = config[:vm_cpus] || nil #server_get_data(vm_id,"cpus")
|
51
|
+
vm_config[:memory] = config[:vm_memory] || nil #server_get_data(vm_id,"memory")
|
52
|
+
vm_config[:disk] = config[:vm_disk] || nil #server_get_data(vm_id,"disk")
|
53
|
+
vm_config[:swap] = config[:vm_swap] || nil #server_get_data(vm_id,"swap")
|
54
|
+
|
55
|
+
vm_mod_op = vm_config.keys.select { |v| vm_config[v] }
|
56
|
+
vm_definition = []
|
57
|
+
vm_mod_op.each do |k|
|
58
|
+
# volver a usar el inject
|
59
|
+
vm_definition << "#{k.to_s}=#{vm_config[k].to_i}" unless k == :id
|
60
|
+
end
|
61
|
+
vm_modification = vm_definition.join('&').to_s
|
62
|
+
|
63
|
+
|
64
|
+
Chef::Log.debug(vm_modification)
|
65
|
+
server_modify(vm_config[:id],vm_modification)
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-proxmox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.19
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-12-02 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: chef
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- lib/chef/knife/proxmox_server_create.rb
|
83
83
|
- lib/chef/knife/template.rb
|
84
84
|
- lib/chef/knife/proxmox_template_available.rb
|
85
|
+
- lib/chef/knife/proxmox_server_modify.rb
|
85
86
|
- lib/chef/knife/connection.rb
|
86
87
|
- lib/chef/knife/proxmox_server_list.rb
|
87
88
|
- lib/knife-proxmox/version.rb
|