fog-proxmox 0.13.0 → 0.14.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.
Files changed (174) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -1
  3. data/docs/compute.md +23 -7
  4. data/docs/identity.md +31 -6
  5. data/examples/compute.rb +11 -11
  6. data/examples/identity.rb +28 -15
  7. data/fog-proxmox.gemspec +1 -1
  8. data/lib/fog/proxmox.rb +16 -76
  9. data/lib/fog/proxmox/auth/token.rb +88 -0
  10. data/lib/fog/proxmox/auth/token/access_ticket.rb +85 -0
  11. data/lib/fog/proxmox/auth/token/user_token.rb +94 -0
  12. data/lib/fog/{compute/proxmox.rb → proxmox/compute.rb} +31 -16
  13. data/lib/fog/{compute/proxmox → proxmox/compute}/models/disk.rb +15 -2
  14. data/lib/fog/{compute/proxmox → proxmox/compute}/models/disks.rb +5 -1
  15. data/lib/fog/{compute/proxmox → proxmox/compute}/models/interface.rb +4 -0
  16. data/lib/fog/{compute/proxmox → proxmox/compute}/models/interfaces.rb +1 -1
  17. data/lib/fog/{compute/proxmox → proxmox/compute}/models/node.rb +0 -0
  18. data/lib/fog/{compute/proxmox → proxmox/compute}/models/nodes.rb +1 -1
  19. data/lib/fog/{compute/proxmox → proxmox/compute}/models/server.rb +2 -2
  20. data/lib/fog/{compute/proxmox → proxmox/compute}/models/server_config.rb +8 -0
  21. data/lib/fog/{compute/proxmox → proxmox/compute}/models/servers.rb +1 -1
  22. data/lib/fog/{compute/proxmox → proxmox/compute}/models/snapshot.rb +0 -0
  23. data/lib/fog/{compute/proxmox → proxmox/compute}/models/snapshots.rb +1 -1
  24. data/lib/fog/{compute/proxmox → proxmox/compute}/models/storage.rb +0 -0
  25. data/lib/fog/{compute/proxmox → proxmox/compute}/models/storages.rb +1 -1
  26. data/lib/fog/{compute/proxmox → proxmox/compute}/models/task.rb +0 -0
  27. data/lib/fog/{compute/proxmox → proxmox/compute}/models/tasks.rb +1 -1
  28. data/lib/fog/{compute/proxmox → proxmox/compute}/models/volume.rb +6 -0
  29. data/lib/fog/{compute/proxmox → proxmox/compute}/models/volumes.rb +1 -1
  30. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/action_server.rb +0 -0
  31. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/clone_server.rb +0 -0
  32. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/create_backup.rb +0 -0
  33. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/create_server.rb +0 -0
  34. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/create_snapshot.rb +0 -0
  35. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/create_spice.rb +0 -0
  36. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/create_term.rb +0 -0
  37. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/create_vnc.rb +0 -0
  38. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/delete_server.rb +0 -0
  39. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/delete_snapshot.rb +0 -0
  40. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/delete_volume.rb +0 -0
  41. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/get_node_statistics.rb +0 -0
  42. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/get_server_config.rb +0 -0
  43. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/get_server_status.rb +0 -0
  44. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/get_snapshot_config.rb +0 -0
  45. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/get_task.rb +0 -0
  46. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/get_vnc.rb +0 -0
  47. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/get_volume.rb +0 -0
  48. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/list_nodes.rb +0 -0
  49. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/list_servers.rb +0 -0
  50. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/list_snapshots.rb +0 -0
  51. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/list_storages.rb +0 -0
  52. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/list_tasks.rb +0 -0
  53. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/list_volumes.rb +0 -0
  54. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/log_task.rb +0 -0
  55. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/migrate_server.rb +0 -0
  56. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/move_disk.rb +0 -0
  57. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/move_volume.rb +0 -0
  58. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/next_vmid.rb +0 -0
  59. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/resize_container.rb +0 -0
  60. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/resize_server.rb +0 -0
  61. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/rollback_snapshot.rb +0 -0
  62. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/status_task.rb +0 -0
  63. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/stop_task.rb +0 -0
  64. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/template_server.rb +0 -0
  65. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/update_server.rb +0 -0
  66. data/lib/fog/{compute/proxmox → proxmox/compute}/requests/update_snapshot.rb +0 -0
  67. data/lib/fog/proxmox/core.rb +66 -57
  68. data/lib/fog/proxmox/hash.rb +2 -2
  69. data/lib/fog/proxmox/helpers/cpu_helper.rb +48 -9
  70. data/lib/fog/proxmox/helpers/disk_helper.rb +42 -22
  71. data/lib/fog/proxmox/helpers/nic_helper.rb +28 -20
  72. data/lib/fog/{identity/proxmox.rb → proxmox/identity.rb} +31 -17
  73. data/lib/fog/{identity/proxmox → proxmox/identity}/models/domain.rb +0 -0
  74. data/lib/fog/{identity/proxmox → proxmox/identity}/models/domain_type.rb +0 -0
  75. data/lib/fog/{identity/proxmox → proxmox/identity}/models/domains.rb +1 -1
  76. data/lib/fog/{identity/proxmox → proxmox/identity}/models/group.rb +4 -2
  77. data/lib/fog/{identity/proxmox → proxmox/identity}/models/groups.rb +1 -1
  78. data/lib/fog/{identity/proxmox → proxmox/identity}/models/permission.rb +0 -0
  79. data/lib/fog/{identity/proxmox → proxmox/identity}/models/permissions.rb +1 -1
  80. data/lib/fog/{identity/proxmox → proxmox/identity}/models/pool.rb +0 -0
  81. data/lib/fog/{identity/proxmox → proxmox/identity}/models/pools.rb +1 -1
  82. data/lib/fog/{identity/proxmox → proxmox/identity}/models/principal.rb +0 -0
  83. data/lib/fog/{identity/proxmox → proxmox/identity}/models/role.rb +0 -0
  84. data/lib/fog/{identity/proxmox → proxmox/identity}/models/roles.rb +1 -1
  85. data/lib/fog/proxmox/identity/models/token.rb +71 -0
  86. data/lib/fog/proxmox/identity/models/token_info.rb +41 -0
  87. data/lib/fog/proxmox/identity/models/tokens.rb +58 -0
  88. data/lib/fog/{identity/proxmox → proxmox/identity}/models/user.rb +25 -2
  89. data/lib/fog/{identity/proxmox → proxmox/identity}/models/users.rb +1 -1
  90. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/change_password.rb +0 -0
  91. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/check_permissions.rb +0 -0
  92. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/create_domain.rb +0 -0
  93. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/create_group.rb +0 -0
  94. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/create_pool.rb +0 -0
  95. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/create_role.rb +0 -0
  96. data/lib/fog/proxmox/identity/requests/create_token.rb +40 -0
  97. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/create_user.rb +0 -0
  98. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/delete_domain.rb +0 -0
  99. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/delete_group.rb +0 -0
  100. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/delete_pool.rb +0 -0
  101. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/delete_role.rb +0 -0
  102. data/lib/fog/proxmox/identity/requests/delete_token.rb +40 -0
  103. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/delete_user.rb +0 -0
  104. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/get_domain.rb +0 -0
  105. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/get_group.rb +0 -0
  106. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/get_pool.rb +0 -0
  107. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/get_role.rb +0 -0
  108. data/lib/fog/proxmox/identity/requests/get_token_info.rb +41 -0
  109. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/get_user.rb +0 -0
  110. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/list_domains.rb +0 -0
  111. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/list_groups.rb +0 -0
  112. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/list_permissions.rb +0 -0
  113. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/list_pools.rb +0 -0
  114. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/list_roles.rb +0 -0
  115. data/lib/fog/proxmox/identity/requests/list_tokens.rb +41 -0
  116. data/lib/fog/proxmox/identity/requests/list_user_permissions.rb +44 -0
  117. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/list_users.rb +0 -0
  118. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/read_version.rb +0 -0
  119. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/update_domain.rb +0 -0
  120. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/update_group.rb +0 -0
  121. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/update_permissions.rb +0 -0
  122. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/update_pool.rb +0 -0
  123. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/update_role.rb +0 -0
  124. data/lib/fog/proxmox/identity/requests/update_token.rb +41 -0
  125. data/lib/fog/{identity/proxmox → proxmox/identity}/requests/update_user.rb +0 -0
  126. data/lib/fog/{network/proxmox.rb → proxmox/network.rb} +21 -14
  127. data/lib/fog/{network/proxmox → proxmox/network}/models/network.rb +0 -0
  128. data/lib/fog/{network/proxmox → proxmox/network}/models/networks.rb +1 -1
  129. data/lib/fog/{network/proxmox → proxmox/network}/models/node.rb +1 -1
  130. data/lib/fog/{network/proxmox → proxmox/network}/models/nodes.rb +1 -1
  131. data/lib/fog/{network/proxmox → proxmox/network}/requests/create_network.rb +0 -0
  132. data/lib/fog/{network/proxmox → proxmox/network}/requests/delete_network.rb +0 -0
  133. data/lib/fog/{network/proxmox → proxmox/network}/requests/get_network.rb +0 -0
  134. data/lib/fog/{network/proxmox → proxmox/network}/requests/get_node.rb +0 -0
  135. data/lib/fog/{network/proxmox → proxmox/network}/requests/list_networks.rb +0 -0
  136. data/lib/fog/{network/proxmox → proxmox/network}/requests/list_nodes.rb +0 -0
  137. data/lib/fog/{network/proxmox → proxmox/network}/requests/power_node.rb +0 -0
  138. data/lib/fog/{network/proxmox → proxmox/network}/requests/update_network.rb +0 -0
  139. data/lib/fog/{storage/proxmox.rb → proxmox/storage.rb} +1 -1
  140. data/lib/fog/proxmox/version.rb +1 -1
  141. data/spec/compute_spec.rb +4 -4
  142. data/spec/fixtures/proxmox/compute/common_auth.yml +40 -0
  143. data/spec/fixtures/proxmox/compute/containers.yml +1752 -7568
  144. data/spec/fixtures/proxmox/compute/nodes.yml +24 -30
  145. data/spec/fixtures/proxmox/compute/servers.yml +5015 -10683
  146. data/spec/fixtures/proxmox/compute/snapshots.yml +479 -1719
  147. data/spec/fixtures/proxmox/compute/storages.yml +32 -40
  148. data/spec/fixtures/proxmox/compute/tasks.yml +118 -338
  149. data/spec/fixtures/proxmox/identity/auth.yml +10 -12
  150. data/spec/fixtures/proxmox/identity/auth_access_ticket.yml +77 -0
  151. data/spec/fixtures/proxmox/identity/auth_user_token.yml +77 -0
  152. data/spec/fixtures/proxmox/identity/common_auth.yml +40 -0
  153. data/spec/fixtures/proxmox/identity/domains.yml +145 -181
  154. data/spec/fixtures/proxmox/identity/groups.yml +72 -90
  155. data/spec/fixtures/proxmox/identity/permissions.yml +297 -189
  156. data/spec/fixtures/proxmox/identity/pools.yml +176 -421
  157. data/spec/fixtures/proxmox/identity/read_version.yml +7 -9
  158. data/spec/fixtures/proxmox/identity/roles.yml +69 -87
  159. data/spec/fixtures/proxmox/identity/tokens.yml +494 -0
  160. data/spec/fixtures/proxmox/identity/users.yml +149 -187
  161. data/spec/fixtures/proxmox/network/common_auth.yml +40 -0
  162. data/spec/fixtures/proxmox/network/networks.yml +99 -96
  163. data/spec/helpers/cpu_helper_spec.rb +27 -20
  164. data/spec/helpers/disk_helper_spec.rb +231 -187
  165. data/spec/helpers/nic_helper_spec.rb +113 -114
  166. data/spec/identity_spec.rb +110 -28
  167. data/spec/network_spec.rb +3 -3
  168. data/spec/proxmox_vcr.rb +24 -22
  169. data/spec/spec_helper.rb +4 -3
  170. metadata +155 -139
  171. data/spec/fixtures/proxmox/compute/identity_ticket.yml +0 -40
  172. data/spec/fixtures/proxmox/identity/identity_ticket.yml +0 -40
  173. data/spec/fixtures/proxmox/identity/renew.yml +0 -40
  174. data/spec/fixtures/proxmox/network/identity_ticket.yml +0 -40
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2018 Tristan Robert
4
+
5
+ # This file is part of Fog::Proxmox.
6
+
7
+ # Fog::Proxmox is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+
12
+ # Fog::Proxmox is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with Fog::Proxmox. If not, see <http://www.gnu.org/licenses/>.
19
+
20
+ require 'fog/json'
21
+ require 'fog/proxmox/variables'
22
+ require 'fog/proxmox/json'
23
+
24
+ module Fog
25
+ module Proxmox
26
+ # Core module
27
+ module Auth
28
+ module Token
29
+ class AccessTicket
30
+ include Fog::Proxmox::Auth::Token
31
+
32
+ NAME = 'access_ticket'
33
+
34
+ attr_reader :csrf_token
35
+
36
+ class URIError < RuntimeError; end
37
+
38
+ EXPIRATION_DELAY = 2 * 60 * 60
39
+
40
+ def auth_method
41
+ 'POST'
42
+ end
43
+
44
+ def auth_path(params = {})
45
+ '/access/ticket'
46
+ end
47
+
48
+ def auth_body(params = {})
49
+ raise URIError, 'URI params is required' if params.nil? || params.empty?
50
+ raise URIError, 'proxmox_username is required' if params[:proxmox_username].nil? || params[:proxmox_username].empty?
51
+ raise URIError, 'proxmox_password is required' if params[:proxmox_password].nil? || params[:proxmox_password].empty?
52
+ URI.encode_www_form(username: params[:proxmox_username], password: params[:proxmox_password])
53
+ end
54
+
55
+ def headers(method = 'GET', params = {}, additional_headers = {})
56
+ headers_hash = {}
57
+ @data ||= {}
58
+ unless @data.empty?
59
+ headers_hash.store('Cookie', "PVEAuthCookie=#{@data['ticket']}")
60
+ if %w[PUT POST DELETE].include? method
61
+ headers_hash.store('CSRFPreventionToken', @data['CSRFPreventionToken'])
62
+ end
63
+ end
64
+ headers_hash.merge! additional_headers
65
+ headers_hash
66
+ end
67
+
68
+ def build_credentials(proxmox_options, data)
69
+ @token = data['ticket']
70
+ @expires = Time.now.utc.to_i + EXPIRATION_DELAY
71
+ @userid = data['username']
72
+ @csrf_token = data['CSRFPreventionToken']
73
+ end
74
+
75
+ def missing_credentials(options)
76
+ missing_credentials = []
77
+ missing_credentials << :proxmox_username unless options[:proxmox_username]
78
+ missing_credentials << :proxmox_password unless options[:proxmox_password]
79
+ raise ArgumentError, "Missing required arguments: #{missing_credentials.join(', ')}" unless missing_credentials.empty?
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2018 Tristan Robert
4
+
5
+ # This file is part of Fog::Proxmox.
6
+
7
+ # Fog::Proxmox is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU General Public License as published by
9
+ # the Free Software Foundation, either version 3 of the License, or
10
+ # (at your option) any later version.
11
+
12
+ # Fog::Proxmox is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with Fog::Proxmox. If not, see <http://www.gnu.org/licenses/>.
19
+
20
+ require 'fog/json'
21
+ require 'fog/proxmox/variables'
22
+ require 'fog/proxmox/json'
23
+
24
+ module Fog
25
+ module Proxmox
26
+ # Core module
27
+ module Auth
28
+ module Token
29
+ class UserToken
30
+ include Fog::Proxmox::Auth::Token
31
+
32
+ NAME = 'user_token'
33
+
34
+ attr_reader :token_id
35
+
36
+ class URIError < RuntimeError; end
37
+
38
+ def auth_method
39
+ 'GET'
40
+ end
41
+
42
+ def auth_path(params = {})
43
+ raise URIError, 'URI params are required' if params.nil? || params.empty?
44
+ raise URIError, 'proxmox_userid is required' if params[:proxmox_userid].nil? || params[:proxmox_userid].empty?
45
+ raise URIError, 'proxmox_tokenid is required' if params[:proxmox_tokenid].nil? || params[:proxmox_tokenid].empty?
46
+ "/access/users/#{URI.encode_www_form_component(params[:proxmox_userid])}/token/#{params[:proxmox_tokenid]}"
47
+ end
48
+
49
+ def auth_body(params = {})
50
+ ''
51
+ end
52
+
53
+ def no_token?(params)
54
+ (params.respond_to?(:proxmox_token) || params[:proxmox_token].nil? || params[:proxmox_token].empty?) && (@token.nil? || @token.empty?)
55
+ end
56
+
57
+ def set_credentials(params)
58
+ token = @token
59
+ token = params[:proxmox_token] if token.empty?
60
+ token_id = @token_id
61
+ token_id = params[:proxmox_tokenid] if token_id.empty?
62
+ userid = @userid
63
+ userid = params[:proxmox_userid] if userid.empty?
64
+ {userid: userid, token_id: token_id, token: token }
65
+ end
66
+
67
+ def headers(method = 'GET', params = {}, additional_headers = {})
68
+ raise URIError, 'User token is required' if no_token?(params)
69
+ credentials = set_credentials(params)
70
+ headers_hash = {}
71
+ headers_hash.store('Authorization', "PVEAPIToken=#{credentials[:userid]}!#{credentials[:token_id]}=#{credentials[:token]}")
72
+ headers_hash.merge! additional_headers
73
+ headers_hash
74
+ end
75
+
76
+ def build_credentials(proxmox_options, data)
77
+ @expires = data['expire']
78
+ @token = proxmox_options[:proxmox_token]
79
+ @token_id = proxmox_options[:proxmox_tokenid]
80
+ @userid = proxmox_options[:proxmox_userid]
81
+ end
82
+
83
+ def missing_credentials(options)
84
+ missing_credentials = []
85
+ missing_credentials << :proxmox_userid unless options[:proxmox_userid]
86
+ missing_credentials << :proxmox_tokenid unless options[:proxmox_tokenid]
87
+ missing_credentials << :proxmox_token unless options[:proxmox_token]
88
+ raise ArgumentError, "Missing required arguments: #{missing_credentials.join(', ')}" unless missing_credentials.empty?
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -23,13 +23,11 @@ module Fog
23
23
  module Proxmox
24
24
  # Proxmox compute service
25
25
  class Compute < Fog::Service
26
- requires :pve_url
27
- recognizes :pve_ticket, :pve_path, :pve_ticket_expires,
28
- :pve_csrftoken, :persistent, :current_user, :pve_username,
29
- :pve_password, :pve_deadline
26
+ requires :proxmox_url, :proxmox_auth_method
27
+ recognizes :proxmox_token, :proxmox_tokenid, :proxmox_userid, :persistent, :proxmox_username, :proxmox_password
30
28
 
31
29
  # Models
32
- model_path 'fog/compute/proxmox/models'
30
+ model_path 'fog/proxmox/compute/models'
33
31
  model :node
34
32
  collection :nodes
35
33
  model :server
@@ -49,7 +47,7 @@ module Fog
49
47
  collection :snapshots
50
48
 
51
49
  # Requests
52
- request_path 'fog/compute/proxmox/requests'
50
+ request_path 'fog/proxmox/compute/requests'
53
51
 
54
52
  # Manage nodes cluster
55
53
  request :list_nodes
@@ -102,8 +100,14 @@ module Fog
102
100
  attr_reader :config
103
101
 
104
102
  def initialize(options = {})
105
- @pve_uri = URI.parse(options[:pve_url])
106
- @pve_path = @pve_uri.path
103
+ @proxmox_uri = URI.parse(options[:proxmox_url])
104
+ @proxmox_auth_method = options[:proxmox_auth_method]
105
+ @proxmox_tokenid = options[:proxmox_tokenid]
106
+ @proxmox_userid = options[:proxmox_userid]
107
+ @proxmox_username = options[:proxmox_username]
108
+ @proxmox_password = options[:proxmox_password]
109
+ @proxmox_token = options[:proxmox_token]
110
+ @proxmox_path = @proxmox_uri.path
107
111
  @config = options
108
112
  end
109
113
  end
@@ -111,14 +115,25 @@ module Fog
111
115
  # Real class
112
116
  class Real
113
117
  include Fog::Proxmox::Core
114
- def initialize(options = {})
115
- initialize_identity(options)
116
- @connection_options = options[:connection_options] || {}
117
- @path_prefix = URI.parse(options[:pve_url]).path
118
- authenticate
119
- @persistent = options[:persistent] || false
120
- url = "#{@scheme}://#{@host}:#{@port}"
121
- @connection = Fog::Core::Connection.new(url, @persistent, @connection_options.merge(path_prefix: @path_prefix))
118
+
119
+ def self.not_found_class
120
+ Fog::Proxmox::Compute::NotFound
121
+ end
122
+
123
+ def config
124
+ self
125
+ end
126
+
127
+ def config_service?
128
+ true
129
+ end
130
+
131
+ private
132
+
133
+ def configure(source)
134
+ source.instance_variables.each do |v|
135
+ instance_variable_set(v, source.instance_variable_get(v))
136
+ end
122
137
  end
123
138
  end
124
139
  end
@@ -18,6 +18,7 @@
18
18
  # frozen_string_literal: true
19
19
 
20
20
  require 'fog/proxmox/helpers/disk_helper'
21
+ require 'fog/proxmox/helpers/controller_helper'
21
22
 
22
23
  module Fog
23
24
  module Proxmox
@@ -56,11 +57,23 @@ module Fog
56
57
  end
57
58
 
58
59
  def mount_point?
59
- id.match(/(mp)(\d+)/)
60
+ Fog::Proxmox::DiskHelper.mount_point?(id)
60
61
  end
61
62
 
62
63
  def controller?
63
- id.match(/(scsi|ide|sata|virtio)(\d+)/)
64
+ Fog::Proxmox::DiskHelper.server_disk?(id)
65
+ end
66
+
67
+ def cloud_init?
68
+ id != 'ide2' && media == 'cdrom'
69
+ end
70
+
71
+ def hard_disk?
72
+ controller? && !cdrom? && !cloud_init?
73
+ end
74
+
75
+ def template?
76
+ Fog::Proxmox::DiskHelper.template?(volid)
64
77
  end
65
78
 
66
79
  def flatten
@@ -17,7 +17,7 @@
17
17
  # You should have received a copy of the GNU General Public License
18
18
  # along with Fog::Proxmox. If not, see <http://www.gnu.org/licenses/>.
19
19
 
20
- require 'fog/compute/proxmox/models/disk'
20
+ require 'fog/proxmox/compute/models/disk'
21
21
 
22
22
  module Fog
23
23
  module Proxmox
@@ -45,6 +45,10 @@ module Fog
45
45
  def rootfs
46
46
  find(&:rootfs?)
47
47
  end
48
+
49
+ def cloudinit
50
+ find(&:cloud_init?)
51
+ end
48
52
  end
49
53
  end
50
54
  end
@@ -26,6 +26,7 @@ module Fog
26
26
  class Interface < Fog::Model
27
27
  identity :id
28
28
  attribute :macaddr
29
+ attribute :hwaddr
29
30
  attribute :model
30
31
  attribute :name
31
32
  attribute :ip
@@ -38,6 +39,9 @@ module Fog
38
39
  attribute :rate
39
40
  attribute :queues
40
41
  attribute :tag
42
+ attribute :mtu
43
+ attribute :trunks
44
+ attribute :type
41
45
 
42
46
  def flatten
43
47
  Fog::Proxmox::NicHelper.flatten(attributes)
@@ -17,7 +17,7 @@
17
17
  # You should have received a copy of the GNU General Public License
18
18
  # along with Fog::Proxmox. If not, see <http://www.gnu.org/licenses/>.
19
19
 
20
- require 'fog/compute/proxmox/models/interface'
20
+ require 'fog/proxmox/compute/models/interface'
21
21
  require 'fog/proxmox/helpers/controller_helper'
22
22
 
23
23
  module Fog
@@ -17,7 +17,7 @@
17
17
  # You should have received a copy of the GNU General Public License
18
18
  # along with Fog::Proxmox. If not, see <http://www.gnu.org/licenses/>.
19
19
 
20
- require 'fog/compute/proxmox/models/node'
20
+ require 'fog/proxmox/compute/models/node'
21
21
 
22
22
  module Fog
23
23
  module Proxmox
@@ -228,7 +228,7 @@ module Fog
228
228
  volumes
229
229
  end
230
230
 
231
- protected
231
+ protected
232
232
 
233
233
  def initialize_config(new_attributes = {})
234
234
  options = { service: service, vmid: vmid }
@@ -247,7 +247,7 @@ module Fog
247
247
 
248
248
  def node
249
249
  Fog::Proxmox::Compute::Node.new(service: service, node: node_id)
250
- end
250
+ end
251
251
  end
252
252
  end
253
253
  end
@@ -69,6 +69,14 @@ module Fog
69
69
  attribute :unprivileged
70
70
  attribute :interfaces
71
71
  attribute :disks
72
+ attribute :ciuser
73
+ attribute :cipassword
74
+ attribute :cicustom
75
+ attribute :citype
76
+ attribute :ipconfigs
77
+ attribute :sshkeys
78
+ attribute :searchdomain
79
+ attribute :nameserver
72
80
 
73
81
  def initialize(new_attributes = {})
74
82
  prepare_service_value(new_attributes)
@@ -17,7 +17,7 @@
17
17
  # You should have received a copy of the GNU General Public License
18
18
  # along with Fog::Proxmox. If not, see <http://www.gnu.org/licenses/>.
19
19
 
20
- require 'fog/compute/proxmox/models/server'
20
+ require 'fog/proxmox/compute/models/server'
21
21
 
22
22
  module Fog
23
23
  module Proxmox
@@ -17,7 +17,7 @@
17
17
  # You should have received a copy of the GNU General Public License
18
18
  # along with Fog::Proxmox. If not, see <http://www.gnu.org/licenses/>.
19
19
 
20
- require 'fog/compute/proxmox/models/snapshot'
20
+ require 'fog/proxmox/compute/models/snapshot'
21
21
 
22
22
  module Fog
23
23
  module Proxmox
@@ -17,7 +17,7 @@
17
17
  # You should have received a copy of the GNU General Public License
18
18
  # along with Fog::Proxmox. If not, see <http://www.gnu.org/licenses/>.
19
19
 
20
- require 'fog/compute/proxmox/models/storage'
20
+ require 'fog/proxmox/compute/models/storage'
21
21
 
22
22
  module Fog
23
23
  module Proxmox
@@ -17,7 +17,7 @@
17
17
  # You should have received a copy of the GNU General Public License
18
18
  # along with Fog::Proxmox. If not, see <http://www.gnu.org/licenses/>.
19
19
 
20
- require 'fog/compute/proxmox/models/task'
20
+ require 'fog/proxmox/compute/models/task'
21
21
 
22
22
  module Fog
23
23
  module Proxmox
@@ -26,6 +26,8 @@
26
26
 
27
27
  # frozen_string_literal: true
28
28
 
29
+ require 'fog/proxmox/helpers/disk_helper'
30
+
29
31
  module Fog
30
32
  module Proxmox
31
33
  class Compute
@@ -55,6 +57,10 @@ module Fog
55
57
  def restore(vmid, options = {})
56
58
  service.create_server(node_id, options.merge(archive: volid, storage: storage_id, vmid: vmid))
57
59
  end
60
+
61
+ def template?
62
+ Fog::Proxmox::DiskHelper.template?(volid)
63
+ end
58
64
  end
59
65
  end
60
66
  end