foreman_proxmox 0.0.12 → 1.0.0
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.
- checksums.yaml +4 -4
- data/Rakefile +10 -20
- data/app/controllers/foreman_proxmox/proxmoxservers_controller.rb +62 -0
- data/app/controllers/foreman_proxmox/virtualmachines_controller.rb +76 -0
- data/app/helpers/concerns/foreman_proxmox/hosts_helper_extensions.rb +13 -3
- data/app/helpers/foreman_proxmox/proxmoxservers_helper.rb +26 -0
- data/app/helpers/foreman_proxmox/virtualmachines_helper.rb +9 -0
- data/app/models/concerns/foreman_proxmox/host_extensions.rb +43 -0
- data/app/models/foreman_proxmox/proxmoxserver.rb +204 -0
- data/app/models/foreman_proxmox/virtualmachine.rb +42 -0
- data/app/views/foreman_proxmox/{hosts/proxmox.html.erb → proxmoxservers/_form.html.erb} +1 -4
- data/app/views/foreman_proxmox/proxmoxservers/edit.html.erb +12 -0
- data/app/views/foreman_proxmox/proxmoxservers/index.html.erb +36 -0
- data/app/views/foreman_proxmox/proxmoxservers/new.html.erb +12 -0
- data/app/views/foreman_proxmox/proxmoxservers/show.html.erb +50 -0
- data/app/views/foreman_proxmox/virtualmachines/show.html.erb +33 -0
- data/app/views/layouts/foreman_proxmox/application.html.erb +14 -0
- data/config/routes.rb +16 -8
- data/db/migrate/20151021104305_create_foreman_proxmox_proxmoxservers.rb +12 -0
- data/db/migrate/20151030104550_create_foreman_proxmox_virtualmachines.rb +15 -0
- data/lib/foreman_proxmox/engine.rb +6 -3
- data/lib/foreman_proxmox/version.rb +1 -1
- data/test/controllers/foreman_proxmox/{creations_controller_test.rb → proxmoxservers_controller_test.rb} +1 -1
- data/test/controllers/foreman_proxmox/{hosts_controller_test.rb → virtualmachines_controller_test.rb} +1 -1
- data/test/dummy/config/secrets.yml +2 -2
- data/test/fixtures/foreman_proxmox/{proxmox_connections.yml → proxmoxservers.yml} +0 -0
- data/test/fixtures/foreman_proxmox/virtualmachines.yml +17 -0
- data/test/models/foreman_proxmox/{proxmox_connection_test.rb → proxmoxserver_test.rb} +1 -1
- data/test/models/foreman_proxmox/virtualmachine_test.rb +9 -0
- metadata +71 -42
- data/app/controllers/foreman_proxmox/creations_controller.rb +0 -17
- data/app/controllers/foreman_proxmox/hosts_controller.rb +0 -18
- data/app/models/foreman_proxmox/proxmox_connection.rb +0 -4
- data/db/migrate/20151006132039_create_foreman_proxmox_proxmox_connections.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95bfb36adea1b34da0acc5a573e321bd3811e729
|
4
|
+
data.tar.gz: 4d32901d852bc5be08e39d40ed91be52c73947d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b27a1001c580c4a6db22132eb2d9e347528c7bd1c377fb8563f4556bcbd6402ebe57bd531be0f196d91484d6b47afbe22e87f956f130df2f631de9b3e2613b3
|
7
|
+
data.tar.gz: 64aad54ca6b7485becfc312451019a0a8b4f856971172e7c5619b9465a769c0640f9f219b34aedeb4fc07a841eaa74c22554d92e5b634718cffe57b04fe9e4a0
|
data/Rakefile
CHANGED
@@ -1,16 +1,10 @@
|
|
1
|
-
#!/usr/bin/env rake
|
2
1
|
begin
|
3
2
|
require 'bundler/setup'
|
4
3
|
rescue LoadError
|
5
4
|
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
5
|
end
|
7
|
-
|
8
|
-
|
9
|
-
rescue LoadError
|
10
|
-
require 'rdoc/rdoc'
|
11
|
-
require 'rake/rdoctask'
|
12
|
-
RDoc::Task = Rake::RDocTask
|
13
|
-
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
14
8
|
|
15
9
|
RDoc::Task.new(:rdoc) do |rdoc|
|
16
10
|
rdoc.rdoc_dir = 'rdoc'
|
@@ -20,7 +14,13 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
20
14
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
15
|
end
|
22
16
|
|
23
|
-
APP_RAKEFILE = File.expand_path(
|
17
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
18
|
+
load 'rails/tasks/engine.rake'
|
19
|
+
|
20
|
+
|
21
|
+
load 'rails/tasks/statistics.rake'
|
22
|
+
|
23
|
+
|
24
24
|
|
25
25
|
Bundler::GemHelper.install_tasks
|
26
26
|
|
@@ -33,15 +33,5 @@ Rake::TestTask.new(:test) do |t|
|
|
33
33
|
t.verbose = false
|
34
34
|
end
|
35
35
|
|
36
|
-
task default: :test
|
37
36
|
|
38
|
-
|
39
|
-
require 'rubocop/rake_task'
|
40
|
-
RuboCop::RakeTask.new
|
41
|
-
rescue => _
|
42
|
-
puts 'Rubocop not loaded.'
|
43
|
-
end
|
44
|
-
|
45
|
-
task :default do
|
46
|
-
Rake::Task['rubocop'].execute
|
47
|
-
end
|
37
|
+
task default: :test
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module ForemanProxmox
|
2
|
+
class ProxmoxserversController < ApplicationController
|
3
|
+
|
4
|
+
def index
|
5
|
+
@proxmoxservers = Proxmoxserver.all
|
6
|
+
end
|
7
|
+
|
8
|
+
def show
|
9
|
+
@proxmox = Proxmoxserver.find(params[:id])
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def new
|
14
|
+
@proxmox = Proxmoxserver.new
|
15
|
+
end
|
16
|
+
|
17
|
+
def create
|
18
|
+
Proxmoxserver.create(params[:proxmoxserver])
|
19
|
+
redirect_to '/proxmox'
|
20
|
+
end
|
21
|
+
|
22
|
+
def edit
|
23
|
+
@proxmox = Proxmoxserver.find(params[:id])
|
24
|
+
end
|
25
|
+
|
26
|
+
def update
|
27
|
+
end
|
28
|
+
|
29
|
+
def destroy
|
30
|
+
end
|
31
|
+
|
32
|
+
def setcurrent
|
33
|
+
oldcurrent = Proxmoxserver.where("current = 'true'").first
|
34
|
+
if oldcurrent != nil then
|
35
|
+
oldcurrent.current = false
|
36
|
+
end
|
37
|
+
newcurrent = Proxmoxserver.find(params[:id])
|
38
|
+
newcurrent.current= true
|
39
|
+
if newcurrent.save then
|
40
|
+
flash[:notice] = newcurrent.current
|
41
|
+
end
|
42
|
+
redirect_to :back
|
43
|
+
end
|
44
|
+
|
45
|
+
def start_all_vms
|
46
|
+
redirect_to :back
|
47
|
+
end
|
48
|
+
|
49
|
+
def stop_all_vms
|
50
|
+
redirect_to :back
|
51
|
+
end
|
52
|
+
|
53
|
+
def reboot_node
|
54
|
+
redirect_to :back
|
55
|
+
end
|
56
|
+
|
57
|
+
def shutdown_node
|
58
|
+
redirect_to :back
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'logger'
|
2
|
+
module ForemanProxmox
|
3
|
+
class VirtualmachinesController < ApplicationController
|
4
|
+
|
5
|
+
def create_vm
|
6
|
+
host = Host.find(params[:id])
|
7
|
+
$LOG= Logger.new("/tmp/proxmox_debug.log")
|
8
|
+
|
9
|
+
if Virtualmachine.where("host_id = '#{host.id}'").first == nil then
|
10
|
+
new_vm = Virtualmachine.new
|
11
|
+
|
12
|
+
$LOG.error("creating vm")
|
13
|
+
|
14
|
+
if host.params['vmid'] == nil then
|
15
|
+
$LOG.error("searching vmid")
|
16
|
+
new_vm.get_free_vmid
|
17
|
+
else
|
18
|
+
new_vm.vmid = host.params['vmid']
|
19
|
+
end
|
20
|
+
|
21
|
+
$LOG.error(new_vm.vmid)
|
22
|
+
new_vm.sockets = host.params['sockets']
|
23
|
+
new_vm.cores = host.params['cores']
|
24
|
+
new_vm.memory = host.params['memory']
|
25
|
+
new_vm.size = host.params['size']
|
26
|
+
new_vm.mac = host.mac
|
27
|
+
new_vm.host_id = host.id
|
28
|
+
|
29
|
+
if new_vm.save then
|
30
|
+
flash[:notice] = "VM saved in DB"
|
31
|
+
else
|
32
|
+
flash[:error] = _('Fail')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
new_vm = Virtualmachine.where("host_id = '#{host.id}'").first
|
37
|
+
|
38
|
+
new_vm.create_harddisk
|
39
|
+
new_vm.create_virtualmachine
|
40
|
+
new_vm.start
|
41
|
+
|
42
|
+
redirect_to :back
|
43
|
+
end
|
44
|
+
|
45
|
+
def start_vm
|
46
|
+
vm = Virtualmachine.where("host_id = '#{params[:id]}'").first
|
47
|
+
vm.start
|
48
|
+
redirect_to :back
|
49
|
+
end
|
50
|
+
|
51
|
+
def stop_vm
|
52
|
+
vm = Virtualmachine.where("host_id = '#{params[:id]}'").first
|
53
|
+
vm.stop
|
54
|
+
redirect_to :back
|
55
|
+
end
|
56
|
+
|
57
|
+
def reboot_vm
|
58
|
+
vm = Virtualmachine.where("host_id = '#{params[:id]}'").first
|
59
|
+
vm.reboot
|
60
|
+
redirect_to :back
|
61
|
+
end
|
62
|
+
|
63
|
+
def delete_vm
|
64
|
+
vm = Virtualmachine.where("host_id = '#{params[:id]}'").first
|
65
|
+
vm.delete_virtualmachine
|
66
|
+
redirect_to :back
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
def show
|
72
|
+
@vm = Virtualmachine.where("host_id = '#{params[:id]}'").first
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
@@ -10,10 +10,19 @@ module ForemanProxmox
|
|
10
10
|
|
11
11
|
def host_title_actions_with_proxmox(*args)
|
12
12
|
title_actions(
|
13
|
-
|
14
|
-
|
13
|
+
if Virtualmachine.where("host_id = '#{@host.id}'").first != nil
|
14
|
+
button_group(
|
15
|
+
display_proxmox_if_authorized(_("VM details"), {:controller => 'foreman_proxmox/virtualmachines', :action => 'show', :id => @host.id}, :class => 'btn')
|
15
16
|
)
|
16
|
-
|
17
|
+
end,
|
18
|
+
button_group(
|
19
|
+
select_action_button(_('Power Control'),{},
|
20
|
+
display_proxmox_if_authorized(_('Start VM'), {:controller => 'foreman_proxmox/virtualmachines', :action => 'start_vm', :id => @host.id}, :class => 'btn'),
|
21
|
+
display_proxmox_if_authorized(_('Stop VM'), {:controller => 'foreman_proxmox/virtualmachines', :action => 'stop_vm', :id => @host.id}, :class => 'btn'),
|
22
|
+
display_proxmox_if_authorized(_('Reboot VM'), {:controller => 'foreman_proxmox/virtualmachines', :action => 'reboot_vm', :id => @host.id}, :class => 'btn')
|
23
|
+
)
|
24
|
+
)
|
25
|
+
)
|
17
26
|
host_title_actions_without_proxmox(*args)
|
18
27
|
end
|
19
28
|
|
@@ -34,3 +43,4 @@ module ForemanProxmox
|
|
34
43
|
end
|
35
44
|
end
|
36
45
|
end
|
46
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module ForemanProxmox
|
2
|
+
module ProxmoxserversHelper
|
3
|
+
|
4
|
+
def show_appropriate_connection_button(proxmox)
|
5
|
+
if proxmox == nil then
|
6
|
+
link_to(_("New"), new_proxmoxserver_path, :class => 'btn')
|
7
|
+
else
|
8
|
+
link_to(_("Edit"), edit_proxmoxserver_path, :class => 'btn')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
def show_node_controlls(proxmox)
|
15
|
+
[ link_to(_("Start all VMs"), startall_path, :class => 'btn'),
|
16
|
+
link_to(_("Stop all VMs"), stopall_path, :class => 'btn'),
|
17
|
+
link_to(_("Reboot"), reboot_path, :class => 'btn'),
|
18
|
+
link_to(_("Shutdown"), shutdown_path, :class => 'btn')
|
19
|
+
].compact
|
20
|
+
end
|
21
|
+
|
22
|
+
# def set_options(options={})
|
23
|
+
# ForemanProxmox::Engine.routes.url_for(options.merge(:only_path => true, :controller => 'proxmoxserver'))
|
24
|
+
# end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module ForemanProxmox
|
2
|
+
module HostExtensions
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
# execute callbacks
|
7
|
+
end
|
8
|
+
|
9
|
+
# create or overwrite instance methods...
|
10
|
+
def destroy
|
11
|
+
vm = Virtualmachine.where("host_id = #{self.id}").first
|
12
|
+
vm.delete_virtualmachine
|
13
|
+
super
|
14
|
+
end
|
15
|
+
|
16
|
+
def create
|
17
|
+
super
|
18
|
+
new_vm = Virtualmachine.new
|
19
|
+
if self.params['vmid'] == nil then
|
20
|
+
new_vm.get_free_vmid
|
21
|
+
else
|
22
|
+
new_vm.vmid = self.params['vmid']
|
23
|
+
end
|
24
|
+
new_vm.sockets = self.params['sockets']
|
25
|
+
new_vm.cores = self.params['cores']
|
26
|
+
new_vm.memory = self.params['memory']
|
27
|
+
new_vm.size = self.params['size']
|
28
|
+
new_vm.mac = self.mac
|
29
|
+
new_vm.host_id = self.id
|
30
|
+
new_vm.save
|
31
|
+
|
32
|
+
new_vm.create_harddisk
|
33
|
+
new_vm.create_virtualmachine
|
34
|
+
new_vm.start
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
module ClassMethods
|
39
|
+
# create or overwrite class methods...
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,204 @@
|
|
1
|
+
require 'httpclient'
|
2
|
+
require 'json'
|
3
|
+
require 'logger'
|
4
|
+
module ForemanProxmox
|
5
|
+
class Proxmoxserver < ActiveRecord::Base
|
6
|
+
$LOG= Logger.new("/tmp/proxmox_debug.log")
|
7
|
+
|
8
|
+
def setup_httpclient
|
9
|
+
@client= HTTPClient.new
|
10
|
+
@client.ssl_config.verify_mode= OpenSSL::SSL::VERIFY_NONE
|
11
|
+
@node = get_first_node_in_cluster
|
12
|
+
|
13
|
+
$LOG.error("Created HttpClient")
|
14
|
+
end
|
15
|
+
|
16
|
+
def check_ip_connectivity
|
17
|
+
$LOG.error("checking connect")
|
18
|
+
if @client == nil then setup_httpclient end
|
19
|
+
code_response = @client.get("https://#{self.ip}:8006/api2/json/access/ticket")
|
20
|
+
$LOG.error(code_response)
|
21
|
+
if code_response.code != 200 then
|
22
|
+
$LOG.error("connection fail")
|
23
|
+
flash[:error] = "Proxmoxserver seems down, try again or change Server"
|
24
|
+
return false
|
25
|
+
else
|
26
|
+
$LOG.error("connection there")
|
27
|
+
return true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def authenticate_client
|
32
|
+
if !check_ip_connectivity then
|
33
|
+
return nil
|
34
|
+
end
|
35
|
+
$LOG.error("authenticating")
|
36
|
+
domain= "https://#{self.ip}:8006/"
|
37
|
+
url= URI.parse(domain)
|
38
|
+
credentials= {:username => "#{self.username}@pam", :password => self.password}
|
39
|
+
auth_response= @client.post("https://#{self.ip}:8006/api2/json/access/ticket", credentials)
|
40
|
+
$LOG.error(auth_response.body)
|
41
|
+
auth= JSON.parse(auth_response.body)
|
42
|
+
ticket= auth["data"]["ticket"]
|
43
|
+
token= auth["data"]["CSRFPreventionToken"]
|
44
|
+
@header= {:CSRFPreventionToken => token}
|
45
|
+
$LOG.error("#{ticket} #{token}")
|
46
|
+
cookie_ticket= WebAgent::Cookie.new
|
47
|
+
cookie_ticket.name= 'PVEAuthCookie'
|
48
|
+
cookie_ticket.value= ticket
|
49
|
+
cookie_ticket.url= url
|
50
|
+
@client.cookie_manager.add(cookie_ticket)
|
51
|
+
$LOG.error("authenticated")
|
52
|
+
end
|
53
|
+
|
54
|
+
def get_first_node_in_cluster
|
55
|
+
if !check_ip_connectivity then
|
56
|
+
return nil
|
57
|
+
end
|
58
|
+
authenticate_client
|
59
|
+
nodes_response = @client.get("https://#{self.ip}:8006/api2/json/nodes")
|
60
|
+
nodes = JSON.parse(nodes_response.body)
|
61
|
+
return nodes["data"][0]["node"]
|
62
|
+
end
|
63
|
+
|
64
|
+
def find_node_for_vmid(vmid)
|
65
|
+
authenticate_client
|
66
|
+
nodes_response = @client.get("https://#{self.ip}:8006/api2/json/nodes")
|
67
|
+
nodes = JSON.parse(nodes_response.body)
|
68
|
+
current_node_id = 0
|
69
|
+
current_node = nodes["data"][current_node_id]
|
70
|
+
while current_node != nil
|
71
|
+
node_name = nodes["data"][current_node_id]["node"]
|
72
|
+
current_vm_id = 0
|
73
|
+
vms_response = @client.get("https://#{self.ip}:8006/api2/json/nodes/#{node_name}/qemu")
|
74
|
+
vms = JSON.parse(vms_response.body)
|
75
|
+
current_vm = vms["data"][current_vm_id]
|
76
|
+
while current_vm != nil do
|
77
|
+
if vms["data"][current_vm_id]["vmid"] == vmid
|
78
|
+
@node = node_name
|
79
|
+
end
|
80
|
+
current_vm_id+=1
|
81
|
+
current_vm = vms["data"][current_vm_id]
|
82
|
+
end
|
83
|
+
current_node_id+=1
|
84
|
+
current_node = nodes["data"][current_node_id]
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def get_next_free_vmid
|
89
|
+
$LOG= Logger.new("/tmp/proxmox_debug.log")
|
90
|
+
$LOG.error("start here")
|
91
|
+
authenticate_client
|
92
|
+
nodes_response = @client.get("https://#{self.ip}:8006/api2/json/nodes")
|
93
|
+
nodes = JSON.parse(nodes_response.body)
|
94
|
+
$LOG.error(nodes)
|
95
|
+
current_node_id = 0
|
96
|
+
highest_vmid = 0
|
97
|
+
current_node = nodes["data"][current_node_id]
|
98
|
+
$LOG.error(current_node)
|
99
|
+
while current_node != nil
|
100
|
+
node_name = nodes["data"][current_node_id]["node"]
|
101
|
+
$LOG.error(node_name)
|
102
|
+
current_vm_id = 0
|
103
|
+
vms_response = @client.get("https://#{self.ip}:8006/api2/json/nodes/#{node_name}/qemu")
|
104
|
+
vms = JSON.parse(vms_response.body)
|
105
|
+
$LOG.error(vms)
|
106
|
+
current_vm = vms["data"][current_vm_id]
|
107
|
+
while current_vm != nil do
|
108
|
+
if vms["data"][current_vm_id]["vmid"].to_i > highest_vmid
|
109
|
+
highest_vmid = vms["data"][current_vm_id]["vmid"].to_i
|
110
|
+
$LOG.error(highest_vmid)
|
111
|
+
end
|
112
|
+
current_vm_id+=1
|
113
|
+
current_vm = vms["data"][current_vm_id]
|
114
|
+
end
|
115
|
+
current_node_id+=1
|
116
|
+
current_node = nodes["data"][current_node_id]
|
117
|
+
end
|
118
|
+
$LOG.error(highest_vmid+1).to_s
|
119
|
+
return highest_vmid+1
|
120
|
+
end
|
121
|
+
|
122
|
+
|
123
|
+
#manage kvms
|
124
|
+
def create_ide(vmid, size)
|
125
|
+
if !check_ip_connectivity then
|
126
|
+
return nil
|
127
|
+
end
|
128
|
+
authenticate_client
|
129
|
+
body= { :filename => "vm-#{vmid}-disk-0.qcow2", :format => "qcow2", :size => size, :vmid => vmid}
|
130
|
+
testres= @client.post("https://#{self.ip}:8006/api2/json/nodes/#{@node}/storage/local/content",body,@header)
|
131
|
+
$LOG.error("Body: #{testres.body}")
|
132
|
+
$LOG.error("Header: #{testres.header}")
|
133
|
+
end
|
134
|
+
|
135
|
+
def create_kvm(vmid, sockets, cores ,memory,mac)
|
136
|
+
if !check_ip_connectivity then
|
137
|
+
return nil
|
138
|
+
end
|
139
|
+
authenticate_client
|
140
|
+
body= { :vmid => vmid, :sockets => sockets, :cores => cores, :memory => memory, :net0 => "e1000=#{mac},bridge=vmbr1", :ide0 => "volume=local:#{vmid}/vm-#{vmid}-disk-0.qcow2,media=disk"}
|
141
|
+
testres= @client.post("https://#{self.ip}:8006/api2/json/nodes/#{@node}/qemu",body,@header)
|
142
|
+
$LOG.error("Body: #{testres.body}")
|
143
|
+
$LOG.error("Header: #{testres.header}")
|
144
|
+
end
|
145
|
+
|
146
|
+
def edit_kvm(vmid)
|
147
|
+
end
|
148
|
+
|
149
|
+
def delete_kvm(vmid)
|
150
|
+
if !check_ip_connectivity then
|
151
|
+
return nil
|
152
|
+
end
|
153
|
+
find_node_for_vmid(vmid)
|
154
|
+
testres= @client.delete("https://#{self.ip}:8006/api2/json/nodes/proxmox/qemu/#{vmid}",{},@header)
|
155
|
+
$LOG.error("Body: #{testres.body}")
|
156
|
+
$LOG.error("Header: #{testres.header}")
|
157
|
+
end
|
158
|
+
|
159
|
+
def start_kvm(vmid)
|
160
|
+
if !check_ip_connectivity then
|
161
|
+
return nil
|
162
|
+
end
|
163
|
+
find_node_for_vmid(vmid)
|
164
|
+
testres= @client.post("https://#{self.ip}:8006/api2/json/nodes/proxmox/qemu/#{vmid}/status/start",{},@header)
|
165
|
+
$LOG.error("Body: #{testres.body}")
|
166
|
+
$LOG.error("Header: #{testres.header}")
|
167
|
+
end
|
168
|
+
|
169
|
+
def stop_kvm(vmid)
|
170
|
+
if !check_ip_connectivity then
|
171
|
+
return nil
|
172
|
+
end
|
173
|
+
find_node_for_vmid(vmid)
|
174
|
+
testres= @client.post("https://#{self.ip}:8006/api2/json/nodes/proxmox/qemu/#{vmid}/status/stop",{},@header)
|
175
|
+
$LOG.error("Body: #{testres.body}")
|
176
|
+
$LOG.error("Header: #{testres.header}")
|
177
|
+
end
|
178
|
+
|
179
|
+
def reboot_kvm(vmid)
|
180
|
+
if !check_ip_connectivity then
|
181
|
+
return nil
|
182
|
+
end
|
183
|
+
find_node_for_vmid(vmid)
|
184
|
+
testres= @client.post("https://#{self.ip}:8006/api2/json/nodes/proxmox/qemu/#{vmid}/status/reset",{},@header)
|
185
|
+
$LOG.error("Body: #{testres.body}")
|
186
|
+
$LOG.error("Header: #{testres.header}")
|
187
|
+
end
|
188
|
+
|
189
|
+
|
190
|
+
#manage node
|
191
|
+
def reboot
|
192
|
+
end
|
193
|
+
|
194
|
+
def shutdown
|
195
|
+
end
|
196
|
+
|
197
|
+
def start_all_vms
|
198
|
+
end
|
199
|
+
|
200
|
+
def stop_all_vms
|
201
|
+
end
|
202
|
+
|
203
|
+
end
|
204
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module ForemanProxmox
|
2
|
+
class Virtualmachine < ActiveRecord::Base
|
3
|
+
belongs_to :host
|
4
|
+
|
5
|
+
def create_harddisk
|
6
|
+
proxmoxserver = Proxmoxserver.where("current = 'true'").first
|
7
|
+
proxmoxserver.create_ide(self.vmid,self.size)
|
8
|
+
end
|
9
|
+
|
10
|
+
def create_virtualmachine
|
11
|
+
proxmoxserver = Proxmoxserver.where("current = 'true'").first
|
12
|
+
proxmoxserver.create_kvm(self.vmid,self.sockets,self.cores,self.memory,self.mac)
|
13
|
+
end
|
14
|
+
|
15
|
+
def start
|
16
|
+
proxmoxserver = Proxmoxserver.where("current = 'true'").first
|
17
|
+
proxmoxserver.start_kvm(self.vmid)
|
18
|
+
end
|
19
|
+
|
20
|
+
def stop
|
21
|
+
proxmoxserver = Proxmoxserver.where("current = 'true'").first
|
22
|
+
proxmoxserver.stop_kvm(self.vmid)
|
23
|
+
end
|
24
|
+
|
25
|
+
def reboot
|
26
|
+
proxmoxserver = Proxmoxserver.where("current = 'true'").first
|
27
|
+
proxmoxserver.reboot_kvm(self.vmid)
|
28
|
+
end
|
29
|
+
|
30
|
+
def delete_virtualmachine
|
31
|
+
proxmoxserver = Proxmoxserver.where("current = 'true'").first
|
32
|
+
self.stop
|
33
|
+
proxmoxserver.delete_kvm(self.vmid)
|
34
|
+
self.destroy
|
35
|
+
end
|
36
|
+
|
37
|
+
def get_free_vmid
|
38
|
+
proxmoxserver = Proxmoxserver.where("current = 'true'").first
|
39
|
+
self.vmid = proxmoxserver.get_next_free_vmid
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<%= form_for @
|
1
|
+
<%= form_for @proxmox, url: proxmoxserver_path do |f| %>
|
2
2
|
<%= f.label :ip %>
|
3
3
|
<%= f.text_field :ip %>
|
4
4
|
<br>
|
@@ -10,6 +10,3 @@
|
|
10
10
|
<br>
|
11
11
|
<%= f.submit 'Create' %>
|
12
12
|
<% end %>
|
13
|
-
<%= @proxmoxconnection.ip %>
|
14
|
-
<%= @proxmoxconnection.username %>
|
15
|
-
<%= @proxmoxconnection.password %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%= form_for @proxmox do |f| %>
|
2
|
+
<%= f.label :ip %>
|
3
|
+
<%= f.text_field :ip %>
|
4
|
+
<br>
|
5
|
+
<%= f.label :username %>
|
6
|
+
<%= f.text_field :username %>
|
7
|
+
<br>
|
8
|
+
<%= f.label :password %>
|
9
|
+
<%= f.text_field :password %>
|
10
|
+
<br>
|
11
|
+
<%= f.submit 'Submit' %>
|
12
|
+
<% end %>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<table id="proxmoxservers_overview" class="table table-bordered table-striped">
|
2
|
+
<thead>
|
3
|
+
<tr>
|
4
|
+
<th>Proxmox Servers</th>
|
5
|
+
</tr>
|
6
|
+
</thead>
|
7
|
+
<tbody>
|
8
|
+
<tr>
|
9
|
+
<td>Server ID</td>
|
10
|
+
<td>Server IP</td>
|
11
|
+
<td>Username</td>
|
12
|
+
<td>Is Current?</td>
|
13
|
+
</tr>
|
14
|
+
<% @proxmoxservers.each do |server| %>
|
15
|
+
<tr>
|
16
|
+
<td><%= server.id%></td>
|
17
|
+
<td><%= server.ip%></td>
|
18
|
+
<td><%= server.username%></td>
|
19
|
+
<td>
|
20
|
+
<% if server.current == true then%>
|
21
|
+
<%= _('Yes') %>
|
22
|
+
<% end %>
|
23
|
+
</td>
|
24
|
+
<td>
|
25
|
+
<%= action_buttons(
|
26
|
+
link_to(_('Edit'),edit_proxmoxserver_path(:id => server.id)),
|
27
|
+
link_to(_('Show'),proxmoxserver_path(:id => server.id)),
|
28
|
+
link_to(_('Set Current'),setcurrent_path(:id => server.id)),
|
29
|
+
link_to(_('Delete'),{:controller => 'proxmoxservers', :action => 'destroy', :id => server.id})
|
30
|
+
) %>
|
31
|
+
</td>
|
32
|
+
</tr>
|
33
|
+
<% end %>
|
34
|
+
</tbody>
|
35
|
+
</table>
|
36
|
+
<%= link_to(_('New Server'),new_proxmoxserver_path) %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<%= form_for @proxmox do |f| %>
|
2
|
+
<%= f.label :ip %>
|
3
|
+
<%= f.text_field :ip %>
|
4
|
+
<br>
|
5
|
+
<%= f.label :username %>
|
6
|
+
<%= f.text_field :username %>
|
7
|
+
<br>
|
8
|
+
<%= f.label :password %>
|
9
|
+
<%= f.text_field :password %>
|
10
|
+
<br>
|
11
|
+
<%= f.submit 'Create' %>
|
12
|
+
<% end %>
|
@@ -0,0 +1,50 @@
|
|
1
|
+
<div class="col-md-6">
|
2
|
+
<table id="nodecontrolls" class="table table-bordered table-striped">
|
3
|
+
<thead>
|
4
|
+
<tr>
|
5
|
+
<th><%= _('Node Controlls') %></th>
|
6
|
+
</tr>
|
7
|
+
</thead>
|
8
|
+
<tbody>
|
9
|
+
<tr>
|
10
|
+
<td>
|
11
|
+
<% show_node_controlls(@proxmox).each do |btn| %>
|
12
|
+
<%= btn %>
|
13
|
+
<% end %>
|
14
|
+
</td>
|
15
|
+
</tr>
|
16
|
+
</tbody>
|
17
|
+
</table>
|
18
|
+
</div>
|
19
|
+
<div class="col-md-6">
|
20
|
+
<table id="connectioncontrolls" class="table table-bordered table-striped">
|
21
|
+
<thead>
|
22
|
+
<tr>
|
23
|
+
<th><%= _('Connection Controlls') %></th>
|
24
|
+
</tr>
|
25
|
+
</thead>
|
26
|
+
<tbody>
|
27
|
+
<tr>
|
28
|
+
<td>IP-adress</td>
|
29
|
+
<td>Username</td>
|
30
|
+
<td>Password</td>
|
31
|
+
</tr>
|
32
|
+
<% if @proxmox == nil then %>
|
33
|
+
<tr>
|
34
|
+
<td><%= 'nil' %></td>
|
35
|
+
<td><%= 'nil' %></td>
|
36
|
+
<td><%= 'nil' %></td>
|
37
|
+
</tr>
|
38
|
+
<% else %>
|
39
|
+
<tr>
|
40
|
+
<td><%= @proxmox.ip %></td>
|
41
|
+
<td><%= @proxmox.username %></td>
|
42
|
+
<td><%= @proxmox.password %></td>
|
43
|
+
</tr>
|
44
|
+
<% end %>
|
45
|
+
<tr>
|
46
|
+
<td><%= show_appropriate_connection_button(@proxmox) %></td>
|
47
|
+
</tr>
|
48
|
+
</tbody>
|
49
|
+
</table>
|
50
|
+
</div>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<div>
|
2
|
+
<table id="properties" class="table table-bordered table-striped">
|
3
|
+
<thead>
|
4
|
+
<tr>
|
5
|
+
<th>VMID</th>
|
6
|
+
<th>Sockets</th>
|
7
|
+
<th>Cores</th>
|
8
|
+
<th>Memory</th>
|
9
|
+
<th>Size</th>
|
10
|
+
<th>Host ID</th>
|
11
|
+
</tr>
|
12
|
+
</thead>
|
13
|
+
<tbody>
|
14
|
+
<tr>
|
15
|
+
<td><%= @vm.vmid %></td>
|
16
|
+
<td><%= @vm.sockets %></td>
|
17
|
+
<td><%= @vm.cores %></td>
|
18
|
+
<td><%= @vm.memory %></td>
|
19
|
+
<th><%= @vm.size %></th>
|
20
|
+
<td><%= @vm.host_id %></td>
|
21
|
+
</tr>
|
22
|
+
</tbody>
|
23
|
+
</table>
|
24
|
+
</div>
|
25
|
+
<div>
|
26
|
+
<table id="harddrives" class="table table-bordered table-striped">
|
27
|
+
<thead>
|
28
|
+
<tr>
|
29
|
+
|
30
|
+
</tr>
|
31
|
+
</thead>
|
32
|
+
</table>
|
33
|
+
</div>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>ForemanProxmox</title>
|
5
|
+
<%= stylesheet_link_tag "foreman_proxmox/application", media: "all" %>
|
6
|
+
<%= javascript_include_tag "foreman_proxmox/application" %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<%= yield %>
|
12
|
+
|
13
|
+
</body>
|
14
|
+
</html>
|
data/config/routes.rb
CHANGED
@@ -1,17 +1,25 @@
|
|
1
1
|
Rails.application.routes.draw do
|
2
|
-
match 'proxmox', to: 'foreman_proxmox/
|
3
|
-
|
4
|
-
resource :hosts
|
2
|
+
match 'proxmox', to: 'foreman_proxmox/proxmoxservers#index'
|
5
3
|
|
6
4
|
end
|
7
5
|
|
8
6
|
ForemanProxmox::Engine.routes.draw do
|
9
7
|
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
get 'proxmoxservers/:id/start_all_vms' => 'proxmoxservers#start_all_vms', as: 'startall'
|
9
|
+
get 'proxmoxservers/:id/stop_all_vms' => 'proxmoxservers#stop_all_vms', as: 'stopall'
|
10
|
+
get 'proxmoxservers/:id/reboot' => 'proxmoxservers#reboot', as: 'reboot'
|
11
|
+
get 'proxmoxservers/:id/shutdown' => 'proxmoxservers#shutdown', as: 'shutdown'
|
12
|
+
get 'proxmoxservers/:id/setcurrent' => 'proxmoxservers#setcurrent', as: 'setcurrent'
|
13
|
+
|
14
|
+
resources :proxmoxservers
|
15
|
+
|
16
|
+
resources :virtualmachines, :only => [:show] do
|
13
17
|
constraints(:id => /[^\/]+/) do
|
14
|
-
get '
|
18
|
+
get 'create_vm/:id', :on => :collection, :to => 'virtualmachines#create_vm'
|
19
|
+
get 'delete_vm/:id', :on => :collection, :to => 'virtualmachines#delete_vm'
|
20
|
+
get 'start/:id', :on => :collection, :to => 'virtualmachines#start_vm'
|
21
|
+
get 'stop/:id', :on => :collection, :to => 'virtualmachines#stop_vm'
|
22
|
+
get 'reboot/:id', :on => :collection, :to => 'virtualmachines#reboot_vm'
|
15
23
|
end
|
16
24
|
end
|
17
|
-
end
|
25
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class CreateForemanProxmoxProxmoxservers < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :foreman_proxmox_proxmoxservers do |t|
|
4
|
+
t.string :ip
|
5
|
+
t.string :username
|
6
|
+
t.string :password
|
7
|
+
t.boolean :current
|
8
|
+
|
9
|
+
t.timestamps null: false
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateForemanProxmoxVirtualmachines < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :foreman_proxmox_virtualmachines, id: false do |t|
|
4
|
+
t.primary_key :vmid
|
5
|
+
t.string :sockets
|
6
|
+
t.string :cores
|
7
|
+
t.string :memory
|
8
|
+
t.string :size
|
9
|
+
t.string :mac
|
10
|
+
t.belongs_to :host
|
11
|
+
|
12
|
+
t.timestamps null: false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -24,15 +24,18 @@ module ForemanProxmox
|
|
24
24
|
|
25
25
|
# Add permissions
|
26
26
|
security_block :foreman_proxmox do
|
27
|
-
permission :view_foreman_proxmox, :'foreman_proxmox/
|
27
|
+
permission :view_foreman_proxmox, {:'foreman_proxmox/proxmoxservers' => [:index]}
|
28
|
+
permission :manage_proxmoxserver, {:'foreman_proxmox/proxmoxservers' => [:new, :create, :stop_all_vms, :start_all_vms, :reboot_node, :shutdown_node]}
|
29
|
+
permission :proxmoxservers_crud, {:'foreman_proxmox/proxmoxservers' => [:edit, :update, :show, :delete, :setcurrent]}
|
30
|
+
permission :manage_vm, {:'foreman_proxmox/virtualmachines' => [:create_vm, :start_vm, :stop_vm, :reboot_vm, :delete_vm, :show]}
|
28
31
|
end
|
29
32
|
|
30
33
|
# Add a new role called 'Discovery' if it doesn't exist
|
31
|
-
role 'ForemanProxmox', [:view_foreman_proxmox]
|
34
|
+
role 'ForemanProxmox', [:view_foreman_proxmox, :manage_proxmoxserver, :proxmoxservers_crud, :manage_vm]
|
32
35
|
|
33
36
|
#add menu entry
|
34
37
|
menu :top_menu, :template,
|
35
|
-
url_hash: { controller: :'foreman_proxmox/
|
38
|
+
url_hash: { controller: :'foreman_proxmox/proxmoxservers', action: :index },
|
36
39
|
caption: 'ForemanProxmox',
|
37
40
|
parent: :hosts_menu,
|
38
41
|
after: :hosts
|
@@ -11,10 +11,10 @@
|
|
11
11
|
# if you're sharing your code publicly.
|
12
12
|
|
13
13
|
development:
|
14
|
-
secret_key_base:
|
14
|
+
secret_key_base: f95bc37aefe825f29c4f142e610a6020820a49f1291978045986f2d67314e9a36f6cebfbc7b8d83b65cca2c7323c4c9fbee10e22c085d66fcce438a3a3f93fea
|
15
15
|
|
16
16
|
test:
|
17
|
-
secret_key_base:
|
17
|
+
secret_key_base: e0f2e06c080e1e9a7f985a8f5fcd95bc53a0171414b48e9cf9d4b7692abff0f75ac8699d0c0d9d8cdc0e8935e4f66cacdc2ceffdc6fd6c04a38088f5ba6a49ca
|
18
18
|
|
19
19
|
# Do not keep production secrets in the repository,
|
20
20
|
# instead read values from the environment.
|
File without changes
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
2
|
+
|
3
|
+
one:
|
4
|
+
vmid: MyString
|
5
|
+
sockets: MyString
|
6
|
+
cores: MyString
|
7
|
+
size: MyString
|
8
|
+
memory: MyString
|
9
|
+
proxmoxserver_id: 1
|
10
|
+
|
11
|
+
two:
|
12
|
+
vmid: MyString
|
13
|
+
sockets: MyString
|
14
|
+
cores: MyString
|
15
|
+
size: MyString
|
16
|
+
memory: MyString
|
17
|
+
proxmoxserver_id: 1
|
metadata
CHANGED
@@ -1,17 +1,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_proxmox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Isensee
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: httpclient
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: json
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - ">="
|
@@ -62,14 +76,25 @@ files:
|
|
62
76
|
- LICENSE
|
63
77
|
- README.md
|
64
78
|
- Rakefile
|
65
|
-
- app/controllers/foreman_proxmox/
|
66
|
-
- app/controllers/foreman_proxmox/
|
79
|
+
- app/controllers/foreman_proxmox/proxmoxservers_controller.rb
|
80
|
+
- app/controllers/foreman_proxmox/virtualmachines_controller.rb
|
67
81
|
- app/helpers/concerns/foreman_proxmox/hosts_helper_extensions.rb
|
68
|
-
- app/
|
69
|
-
- app/
|
82
|
+
- app/helpers/foreman_proxmox/proxmoxservers_helper.rb
|
83
|
+
- app/helpers/foreman_proxmox/virtualmachines_helper.rb
|
84
|
+
- app/models/concerns/foreman_proxmox/host_extensions.rb
|
85
|
+
- app/models/foreman_proxmox/proxmoxserver.rb
|
86
|
+
- app/models/foreman_proxmox/virtualmachine.rb
|
87
|
+
- app/views/foreman_proxmox/proxmoxservers/_form.html.erb
|
88
|
+
- app/views/foreman_proxmox/proxmoxservers/edit.html.erb
|
89
|
+
- app/views/foreman_proxmox/proxmoxservers/index.html.erb
|
90
|
+
- app/views/foreman_proxmox/proxmoxservers/new.html.erb
|
91
|
+
- app/views/foreman_proxmox/proxmoxservers/show.html.erb
|
92
|
+
- app/views/foreman_proxmox/virtualmachines/show.html.erb
|
93
|
+
- app/views/layouts/foreman_proxmox/application.html.erb
|
70
94
|
- config/routes.rb
|
71
95
|
- config/routes/mount_engine.rb
|
72
|
-
- db/migrate/
|
96
|
+
- db/migrate/20151021104305_create_foreman_proxmox_proxmoxservers.rb
|
97
|
+
- db/migrate/20151030104550_create_foreman_proxmox_virtualmachines.rb
|
73
98
|
- lib/foreman_proxmox.rb
|
74
99
|
- lib/foreman_proxmox/engine.rb
|
75
100
|
- lib/foreman_proxmox/version.rb
|
@@ -78,8 +103,8 @@ files:
|
|
78
103
|
- locale/en/foreman_proxmox.po
|
79
104
|
- locale/foreman_proxmox.pot
|
80
105
|
- locale/gemspec.rb
|
81
|
-
- test/controllers/foreman_proxmox/
|
82
|
-
- test/controllers/foreman_proxmox/
|
106
|
+
- test/controllers/foreman_proxmox/proxmoxservers_controller_test.rb
|
107
|
+
- test/controllers/foreman_proxmox/virtualmachines_controller_test.rb
|
83
108
|
- test/dummy/README.rdoc
|
84
109
|
- test/dummy/Rakefile
|
85
110
|
- test/dummy/app/assets/javascripts/application.js
|
@@ -114,10 +139,12 @@ files:
|
|
114
139
|
- test/dummy/public/422.html
|
115
140
|
- test/dummy/public/500.html
|
116
141
|
- test/dummy/public/favicon.ico
|
117
|
-
- test/fixtures/foreman_proxmox/
|
142
|
+
- test/fixtures/foreman_proxmox/proxmoxservers.yml
|
143
|
+
- test/fixtures/foreman_proxmox/virtualmachines.yml
|
118
144
|
- test/foreman_proxmox_test.rb
|
119
145
|
- test/integration/navigation_test.rb
|
120
|
-
- test/models/foreman_proxmox/
|
146
|
+
- test/models/foreman_proxmox/proxmoxserver_test.rb
|
147
|
+
- test/models/foreman_proxmox/virtualmachine_test.rb
|
121
148
|
- test/test_helper.rb
|
122
149
|
homepage: http://github.com/fiesensee/foreman_proxmox
|
123
150
|
licenses: []
|
@@ -138,49 +165,51 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
165
|
version: '0'
|
139
166
|
requirements: []
|
140
167
|
rubyforge_project:
|
141
|
-
rubygems_version: 2.4.
|
168
|
+
rubygems_version: 2.4.6
|
142
169
|
signing_key:
|
143
170
|
specification_version: 4
|
144
171
|
summary: Proxmox support for foreman
|
145
172
|
test_files:
|
146
173
|
- test/integration/navigation_test.rb
|
147
|
-
- test/fixtures/foreman_proxmox/proxmox_connections.yml
|
148
|
-
- test/models/foreman_proxmox/proxmox_connection_test.rb
|
149
|
-
- test/dummy/app/assets/stylesheets/application.css
|
150
|
-
- test/dummy/app/assets/javascripts/application.js
|
151
|
-
- test/dummy/app/controllers/application_controller.rb
|
152
|
-
- test/dummy/app/views/layouts/application.html.erb
|
153
|
-
- test/dummy/app/helpers/application_helper.rb
|
154
|
-
- test/dummy/bin/bundle
|
155
|
-
- test/dummy/bin/setup
|
156
|
-
- test/dummy/bin/rails
|
157
|
-
- test/dummy/bin/rake
|
158
|
-
- test/dummy/config.ru
|
159
174
|
- test/dummy/README.rdoc
|
160
|
-
- test/dummy/public/422.html
|
161
175
|
- test/dummy/public/500.html
|
176
|
+
- test/dummy/public/422.html
|
162
177
|
- test/dummy/public/favicon.ico
|
163
178
|
- test/dummy/public/404.html
|
164
|
-
- test/dummy/config
|
165
|
-
- test/dummy/config/
|
166
|
-
- test/dummy/config/
|
179
|
+
- test/dummy/config.ru
|
180
|
+
- test/dummy/config/initializers/backtrace_silencers.rb
|
181
|
+
- test/dummy/config/initializers/assets.rb
|
182
|
+
- test/dummy/config/initializers/filter_parameter_logging.rb
|
183
|
+
- test/dummy/config/initializers/mime_types.rb
|
184
|
+
- test/dummy/config/initializers/wrap_parameters.rb
|
185
|
+
- test/dummy/config/initializers/cookies_serializer.rb
|
186
|
+
- test/dummy/config/initializers/inflections.rb
|
187
|
+
- test/dummy/config/initializers/session_store.rb
|
167
188
|
- test/dummy/config/environments/test.rb
|
189
|
+
- test/dummy/config/environments/development.rb
|
168
190
|
- test/dummy/config/environments/production.rb
|
169
|
-
- test/dummy/config/
|
191
|
+
- test/dummy/config/secrets.yml
|
170
192
|
- test/dummy/config/database.yml
|
171
|
-
- test/dummy/config/
|
193
|
+
- test/dummy/config/routes.rb
|
172
194
|
- test/dummy/config/boot.rb
|
173
195
|
- test/dummy/config/environment.rb
|
174
|
-
- test/dummy/config/
|
175
|
-
- test/dummy/config/
|
176
|
-
- test/dummy/config/initializers/wrap_parameters.rb
|
177
|
-
- test/dummy/config/initializers/assets.rb
|
178
|
-
- test/dummy/config/initializers/mime_types.rb
|
179
|
-
- test/dummy/config/initializers/backtrace_silencers.rb
|
180
|
-
- test/dummy/config/initializers/cookies_serializer.rb
|
181
|
-
- test/dummy/config/initializers/session_store.rb
|
196
|
+
- test/dummy/config/application.rb
|
197
|
+
- test/dummy/config/locales/en.yml
|
182
198
|
- test/dummy/Rakefile
|
183
|
-
- test/
|
184
|
-
- test/
|
185
|
-
- test/
|
199
|
+
- test/dummy/bin/bundle
|
200
|
+
- test/dummy/bin/setup
|
201
|
+
- test/dummy/bin/rails
|
202
|
+
- test/dummy/bin/rake
|
203
|
+
- test/dummy/app/helpers/application_helper.rb
|
204
|
+
- test/dummy/app/views/layouts/application.html.erb
|
205
|
+
- test/dummy/app/controllers/application_controller.rb
|
206
|
+
- test/dummy/app/assets/javascripts/application.js
|
207
|
+
- test/dummy/app/assets/stylesheets/application.css
|
208
|
+
- test/models/foreman_proxmox/virtualmachine_test.rb
|
209
|
+
- test/models/foreman_proxmox/proxmoxserver_test.rb
|
210
|
+
- test/controllers/foreman_proxmox/proxmoxservers_controller_test.rb
|
211
|
+
- test/controllers/foreman_proxmox/virtualmachines_controller_test.rb
|
186
212
|
- test/foreman_proxmox_test.rb
|
213
|
+
- test/fixtures/foreman_proxmox/proxmoxservers.yml
|
214
|
+
- test/fixtures/foreman_proxmox/virtualmachines.yml
|
215
|
+
- test/test_helper.rb
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'rest-client'
|
2
|
-
module ForemanProxmox
|
3
|
-
class CreationsController < ::ApplicationController
|
4
|
-
before_filter :find_resource, :only => %w[host]
|
5
|
-
|
6
|
-
def create_vm
|
7
|
-
|
8
|
-
redirect_to :back
|
9
|
-
end
|
10
|
-
|
11
|
-
private
|
12
|
-
|
13
|
-
def resource_scope(controller = controller_name)
|
14
|
-
Host::Managed.authorized(:view_hosts)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module ForemanProxmox
|
2
|
-
# Example: Plugin's HostsController inherits from Foreman's HostsController
|
3
|
-
class HostsController < ::HostsController
|
4
|
-
# change layout if needed
|
5
|
-
# layout 'foreman_proxmox/layouts/new_layout'
|
6
|
-
|
7
|
-
def proxmox
|
8
|
-
@proxmoxconnection = ProxmoxConnection.new
|
9
|
-
end
|
10
|
-
|
11
|
-
def create
|
12
|
-
@proxmoxconnection.ip = params[:ip]
|
13
|
-
@proxmoxconnection.username = params[:username]
|
14
|
-
@proxmoxconnection.password = params[:username]
|
15
|
-
redirect_to :back
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|