fog-proxmox 0.4.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 (199) hide show
  1. checksums.yaml +7 -0
  2. data/.bundle/config +4 -0
  3. data/.codeclimate.yml +14 -0
  4. data/.github/ISSUE_TEMPLATE/bug_report.md +35 -0
  5. data/.github/ISSUE_TEMPLATE/feature_request.md +17 -0
  6. data/.gitignore +5 -0
  7. data/.gitlab-ci.yml +42 -0
  8. data/.rubocop.yml +13 -0
  9. data/.ruby-gemset +1 -0
  10. data/.solargraph.yml +10 -0
  11. data/.travis.yml +26 -0
  12. data/.vscode/launch.json +114 -0
  13. data/.vscode/settings.json +45 -0
  14. data/.vscode/tasks.json +27 -0
  15. data/CODE_OF_CONDUCT.md +74 -0
  16. data/CONTRIBUTING.md +20 -0
  17. data/CONTRIBUTORS.md +9 -0
  18. data/Gemfile +23 -0
  19. data/Gemfile.lock +146 -0
  20. data/ISSUE_TEMPLATE.md +43 -0
  21. data/LICENSE +674 -0
  22. data/README.md +58 -0
  23. data/Rakefile +53 -0
  24. data/SUPPORT.md +9 -0
  25. data/bin/console +29 -0
  26. data/bin/setup +29 -0
  27. data/docs/compute.md +846 -0
  28. data/docs/connection_parameters.md +45 -0
  29. data/docs/getting_started.md +53 -0
  30. data/docs/identity.md +357 -0
  31. data/examples/compute.rb +279 -0
  32. data/examples/identity.rb +195 -0
  33. data/fog-proxmox.gemspec +63 -0
  34. data/fogproxmox.png +0 -0
  35. data/lib/fog/compute/proxmox.rb +131 -0
  36. data/lib/fog/compute/proxmox/models/container.rb +97 -0
  37. data/lib/fog/compute/proxmox/models/container_config.rb +90 -0
  38. data/lib/fog/compute/proxmox/models/containers.rb +40 -0
  39. data/lib/fog/compute/proxmox/models/disk.rb +67 -0
  40. data/lib/fog/compute/proxmox/models/disks.rb +49 -0
  41. data/lib/fog/compute/proxmox/models/interface.rb +50 -0
  42. data/lib/fog/compute/proxmox/models/interfaces.rb +46 -0
  43. data/lib/fog/compute/proxmox/models/node.rb +93 -0
  44. data/lib/fog/compute/proxmox/models/nodes.rb +45 -0
  45. data/lib/fog/compute/proxmox/models/server.rb +212 -0
  46. data/lib/fog/compute/proxmox/models/server_config.rb +116 -0
  47. data/lib/fog/compute/proxmox/models/servers.rb +70 -0
  48. data/lib/fog/compute/proxmox/models/snapshot.rb +70 -0
  49. data/lib/fog/compute/proxmox/models/snapshots.rb +55 -0
  50. data/lib/fog/compute/proxmox/models/storage.rb +61 -0
  51. data/lib/fog/compute/proxmox/models/storages.rb +60 -0
  52. data/lib/fog/compute/proxmox/models/task.rb +84 -0
  53. data/lib/fog/compute/proxmox/models/tasks.rb +71 -0
  54. data/lib/fog/compute/proxmox/models/volume.rb +61 -0
  55. data/lib/fog/compute/proxmox/models/volumes.rb +67 -0
  56. data/lib/fog/compute/proxmox/requests/action_server.rb +47 -0
  57. data/lib/fog/compute/proxmox/requests/check_vmid.rb +41 -0
  58. data/lib/fog/compute/proxmox/requests/clone_server.rb +46 -0
  59. data/lib/fog/compute/proxmox/requests/create_backup.rb +44 -0
  60. data/lib/fog/compute/proxmox/requests/create_server.rb +45 -0
  61. data/lib/fog/compute/proxmox/requests/create_snapshot.rb +47 -0
  62. data/lib/fog/compute/proxmox/requests/create_spice.rb +46 -0
  63. data/lib/fog/compute/proxmox/requests/create_term.rb +46 -0
  64. data/lib/fog/compute/proxmox/requests/create_vnc.rb +46 -0
  65. data/lib/fog/compute/proxmox/requests/delete_server.rb +47 -0
  66. data/lib/fog/compute/proxmox/requests/delete_snapshot.rb +48 -0
  67. data/lib/fog/compute/proxmox/requests/delete_volume.rb +40 -0
  68. data/lib/fog/compute/proxmox/requests/get_node.rb +44 -0
  69. data/lib/fog/compute/proxmox/requests/get_server_config.rb +45 -0
  70. data/lib/fog/compute/proxmox/requests/get_server_status.rb +45 -0
  71. data/lib/fog/compute/proxmox/requests/get_snapshot.rb +47 -0
  72. data/lib/fog/compute/proxmox/requests/get_storage.rb +44 -0
  73. data/lib/fog/compute/proxmox/requests/get_task.rb +44 -0
  74. data/lib/fog/compute/proxmox/requests/get_vnc.rb +46 -0
  75. data/lib/fog/compute/proxmox/requests/get_volume.rb +42 -0
  76. data/lib/fog/compute/proxmox/requests/list_nodes.rb +42 -0
  77. data/lib/fog/compute/proxmox/requests/list_servers.rb +42 -0
  78. data/lib/fog/compute/proxmox/requests/list_snapshots.rb +43 -0
  79. data/lib/fog/compute/proxmox/requests/list_storages.rb +42 -0
  80. data/lib/fog/compute/proxmox/requests/list_tasks.rb +42 -0
  81. data/lib/fog/compute/proxmox/requests/list_volumes.rb +42 -0
  82. data/lib/fog/compute/proxmox/requests/log_task.rb +45 -0
  83. data/lib/fog/compute/proxmox/requests/migrate_server.rb +44 -0
  84. data/lib/fog/compute/proxmox/requests/move_disk.rb +46 -0
  85. data/lib/fog/compute/proxmox/requests/move_volume.rb +46 -0
  86. data/lib/fog/compute/proxmox/requests/next_vmid.rb +39 -0
  87. data/lib/fog/compute/proxmox/requests/resize_container.rb +46 -0
  88. data/lib/fog/compute/proxmox/requests/resize_server.rb +43 -0
  89. data/lib/fog/compute/proxmox/requests/rollback_snapshot.rb +46 -0
  90. data/lib/fog/compute/proxmox/requests/status_task.rb +44 -0
  91. data/lib/fog/compute/proxmox/requests/stop_task.rb +41 -0
  92. data/lib/fog/compute/proxmox/requests/template_server.rb +43 -0
  93. data/lib/fog/compute/proxmox/requests/update_server.rb +46 -0
  94. data/lib/fog/compute/proxmox/requests/update_snapshot.rb +45 -0
  95. data/lib/fog/identity/proxmox.rb +132 -0
  96. data/lib/fog/identity/proxmox/models/activedirectory.rb +57 -0
  97. data/lib/fog/identity/proxmox/models/domain.rb +61 -0
  98. data/lib/fog/identity/proxmox/models/domains.rb +115 -0
  99. data/lib/fog/identity/proxmox/models/group.rb +60 -0
  100. data/lib/fog/identity/proxmox/models/groups.rb +50 -0
  101. data/lib/fog/identity/proxmox/models/ldap.rb +57 -0
  102. data/lib/fog/identity/proxmox/models/oath.rb +50 -0
  103. data/lib/fog/identity/proxmox/models/pam.rb +46 -0
  104. data/lib/fog/identity/proxmox/models/permission.rb +69 -0
  105. data/lib/fog/identity/proxmox/models/permissions.rb +61 -0
  106. data/lib/fog/identity/proxmox/models/pool.rb +84 -0
  107. data/lib/fog/identity/proxmox/models/pools.rb +50 -0
  108. data/lib/fog/identity/proxmox/models/principal.rb +47 -0
  109. data/lib/fog/identity/proxmox/models/pve.rb +46 -0
  110. data/lib/fog/identity/proxmox/models/role.rb +61 -0
  111. data/lib/fog/identity/proxmox/models/roles.rb +51 -0
  112. data/lib/fog/identity/proxmox/models/user.rb +74 -0
  113. data/lib/fog/identity/proxmox/models/users.rb +50 -0
  114. data/lib/fog/identity/proxmox/models/yubico.rb +51 -0
  115. data/lib/fog/identity/proxmox/requests/add_permission.rb +41 -0
  116. data/lib/fog/identity/proxmox/requests/change_password.rb +41 -0
  117. data/lib/fog/identity/proxmox/requests/check_permissions.rb +44 -0
  118. data/lib/fog/identity/proxmox/requests/create_domain.rb +40 -0
  119. data/lib/fog/identity/proxmox/requests/create_group.rb +40 -0
  120. data/lib/fog/identity/proxmox/requests/create_pool.rb +40 -0
  121. data/lib/fog/identity/proxmox/requests/create_role.rb +40 -0
  122. data/lib/fog/identity/proxmox/requests/create_user.rb +40 -0
  123. data/lib/fog/identity/proxmox/requests/delete_domain.rb +40 -0
  124. data/lib/fog/identity/proxmox/requests/delete_group.rb +40 -0
  125. data/lib/fog/identity/proxmox/requests/delete_pool.rb +39 -0
  126. data/lib/fog/identity/proxmox/requests/delete_role.rb +40 -0
  127. data/lib/fog/identity/proxmox/requests/delete_user.rb +39 -0
  128. data/lib/fog/identity/proxmox/requests/get_domain.rb +41 -0
  129. data/lib/fog/identity/proxmox/requests/get_group.rb +41 -0
  130. data/lib/fog/identity/proxmox/requests/get_pool.rb +41 -0
  131. data/lib/fog/identity/proxmox/requests/get_role.rb +41 -0
  132. data/lib/fog/identity/proxmox/requests/get_user.rb +40 -0
  133. data/lib/fog/identity/proxmox/requests/list_domains.rb +41 -0
  134. data/lib/fog/identity/proxmox/requests/list_groups.rb +41 -0
  135. data/lib/fog/identity/proxmox/requests/list_permissions.rb +41 -0
  136. data/lib/fog/identity/proxmox/requests/list_pools.rb +41 -0
  137. data/lib/fog/identity/proxmox/requests/list_roles.rb +41 -0
  138. data/lib/fog/identity/proxmox/requests/list_users.rb +42 -0
  139. data/lib/fog/identity/proxmox/requests/read_version.rb +43 -0
  140. data/lib/fog/identity/proxmox/requests/remove_permission.rb +42 -0
  141. data/lib/fog/identity/proxmox/requests/update_domain.rb +41 -0
  142. data/lib/fog/identity/proxmox/requests/update_group.rb +41 -0
  143. data/lib/fog/identity/proxmox/requests/update_pool.rb +41 -0
  144. data/lib/fog/identity/proxmox/requests/update_role.rb +41 -0
  145. data/lib/fog/identity/proxmox/requests/update_user.rb +41 -0
  146. data/lib/fog/network/proxmox.rb +83 -0
  147. data/lib/fog/network/proxmox/models/network.rb +82 -0
  148. data/lib/fog/network/proxmox/models/networks.rb +54 -0
  149. data/lib/fog/network/proxmox/models/node.rb +70 -0
  150. data/lib/fog/network/proxmox/models/nodes.rb +45 -0
  151. data/lib/fog/network/proxmox/requests/create_network.rb +44 -0
  152. data/lib/fog/network/proxmox/requests/delete_network.rb +45 -0
  153. data/lib/fog/network/proxmox/requests/get_network.rb +46 -0
  154. data/lib/fog/network/proxmox/requests/get_node.rb +44 -0
  155. data/lib/fog/network/proxmox/requests/list_networks.rb +43 -0
  156. data/lib/fog/network/proxmox/requests/list_nodes.rb +42 -0
  157. data/lib/fog/network/proxmox/requests/power_node.rb +46 -0
  158. data/lib/fog/network/proxmox/requests/update_network.rb +46 -0
  159. data/lib/fog/proxmox.rb +128 -0
  160. data/lib/fog/proxmox/core.rb +139 -0
  161. data/lib/fog/proxmox/errors.rb +64 -0
  162. data/lib/fog/proxmox/hash.rb +33 -0
  163. data/lib/fog/proxmox/helpers/controller_helper.rb +55 -0
  164. data/lib/fog/proxmox/helpers/cpu_helper.rb +45 -0
  165. data/lib/fog/proxmox/helpers/disk_helper.rb +84 -0
  166. data/lib/fog/proxmox/helpers/nic_helper.rb +62 -0
  167. data/lib/fog/proxmox/json.rb +32 -0
  168. data/lib/fog/proxmox/models/collection.rb +85 -0
  169. data/lib/fog/proxmox/models/model.rb +58 -0
  170. data/lib/fog/proxmox/variables.rb +40 -0
  171. data/lib/fog/proxmox/version.rb +24 -0
  172. data/lib/fog/storage/proxmox.rb +29 -0
  173. data/spec/compute_spec.rb +408 -0
  174. data/spec/fixtures/proxmox/compute/containers.yml +5398 -0
  175. data/spec/fixtures/proxmox/compute/identity_ticket.yml +40 -0
  176. data/spec/fixtures/proxmox/compute/servers.yml +10571 -0
  177. data/spec/fixtures/proxmox/compute/snapshots.yml +1228 -0
  178. data/spec/fixtures/proxmox/compute/storages.yml +120 -0
  179. data/spec/fixtures/proxmox/compute/tasks.yml +200 -0
  180. data/spec/fixtures/proxmox/identity/auth.yml +44 -0
  181. data/spec/fixtures/proxmox/identity/domains.yml +531 -0
  182. data/spec/fixtures/proxmox/identity/groups.yml +324 -0
  183. data/spec/fixtures/proxmox/identity/identity_ticket.yml +40 -0
  184. data/spec/fixtures/proxmox/identity/permissions.yml +565 -0
  185. data/spec/fixtures/proxmox/identity/pools.yml +488 -0
  186. data/spec/fixtures/proxmox/identity/read_version.yml +42 -0
  187. data/spec/fixtures/proxmox/identity/roles.yml +324 -0
  188. data/spec/fixtures/proxmox/identity/users.yml +646 -0
  189. data/spec/fixtures/proxmox/network/identity_ticket.yml +40 -0
  190. data/spec/fixtures/proxmox/network/networks.yml +413 -0
  191. data/spec/helpers/controller_helper_spec.rb +77 -0
  192. data/spec/helpers/cpu_helper_spec.rb +91 -0
  193. data/spec/helpers/disk_helper_spec.rb +104 -0
  194. data/spec/helpers/nic_helper_spec.rb +73 -0
  195. data/spec/identity_spec.rb +316 -0
  196. data/spec/network_spec.rb +67 -0
  197. data/spec/proxmox_vcr.rb +102 -0
  198. data/spec/spec_helper.rb +39 -0
  199. metadata +535 -0
@@ -0,0 +1,45 @@
1
+ # Optional connection parameters
2
+
3
+ Fog supports passing additional connection parameters to its underlying HTTP library (Excon) using the `:connection_options` parameter.
4
+
5
+ <table>
6
+ <tr>
7
+ <th>Key</th>
8
+ <th>Description</th>
9
+ </tr>
10
+ <tr>
11
+ <td>:connect_timeout</td>
12
+ <td>Connection timeout (default: 60 seconds)</td>
13
+ </tr>
14
+ <tr>
15
+ <td>:read_timeout</td>
16
+ <td>Read timeout for connection (default: 60 seconds)</td> </tr>
17
+ <tr>
18
+ <td>:write_timeout</td>
19
+ <td>Write timeout for connection (default: 60 seconds)</td>
20
+ </tr>
21
+ <tr>
22
+ <td>:proxy</td>
23
+ <td>Proxy for HTTP and HTTPS connections</td>
24
+ </tr>
25
+ <tr>
26
+ <td>:ssl_ca_path</td>
27
+ <td>Path to SSL certificate authorities</td>
28
+ </tr>
29
+ <tr>
30
+ <td>:ssl_ca_file</td>
31
+ <td>SSL certificate authority file</td>
32
+ </tr>
33
+ <tr>
34
+ <td>:ssl_verify_peer</td>
35
+ <td>SSL verify peer (default: true)</td>
36
+ </tr>
37
+ <tr>
38
+ <td>:debug_request</td>
39
+ <td>debug print request (default: false)</td>
40
+ </tr>
41
+ <tr>
42
+ <td>:debug_response</td>
43
+ <td>debug print response (default: false)</td>
44
+ </tr>
45
+ </table>
@@ -0,0 +1,53 @@
1
+ # Getting started with Fog proxmox
2
+
3
+ ## Requirements
4
+
5
+ ### Ruby
6
+
7
+ 2.3, 2.4 and 2.5 ruby versions are tested and required.
8
+ Fog requires 2.0+ for new projects.
9
+
10
+ ## Installation
11
+
12
+ With rubygems:
13
+
14
+ ```ruby
15
+ gem install fog-proxmox
16
+ ```
17
+
18
+ With bundler:
19
+
20
+ Create a Gemfile with:
21
+
22
+ ```ruby
23
+ source 'https://rubygems.org'
24
+
25
+ gem 'fog-proxmox'
26
+ ```
27
+
28
+ then:
29
+
30
+ ```ruby
31
+ bundler install
32
+ ```
33
+
34
+ ## Exploring capabilities
35
+
36
+ ```ruby
37
+ irb
38
+ ```
39
+
40
+ ```ruby
41
+ require 'fog/proxmox'
42
+ ```
43
+
44
+ ```ruby
45
+ Fog::Proxmox.services
46
+ ```
47
+
48
+ This command show you a summary of the available services.
49
+
50
+ ### Available services in details
51
+
52
+ * [Identity](identity.md)
53
+ * [Compute](compute.md)
data/docs/identity.md ADDED
@@ -0,0 +1,357 @@
1
+ # Identity
2
+
3
+ This document shows you the identity service (or user management) available with fog-proxmox.
4
+
5
+ Proxmox supports many authentication sources (PAM, LDAP, Active Directory) and an authorization management (ACL, privileges).
6
+
7
+ You can see more details in [Proxmox user management wiki page](https://pve.proxmox.com/wiki/User_Management)
8
+
9
+ ## Starting irb console
10
+
11
+ ```ruby
12
+ irb
13
+ ```
14
+
15
+ ```ruby
16
+ require 'fog/proxmox'
17
+ ```
18
+
19
+ ## Create identity service
20
+
21
+ ```ruby
22
+ identity = Fog::Identity::Proxmox.new(
23
+ pve_username: PVE_USERNAME, # your user name
24
+ pve_password: PVE_PASSWORD, # your password
25
+ pve_url: PVE_URL, # your server url
26
+ connection_options: {} # connection options
27
+ )
28
+ ```
29
+
30
+ [connection_options](connection_parameters.md) are also available.
31
+
32
+ ## Fog Abstractions
33
+
34
+ Fog provides both a **model** and **request** abstraction. The request abstraction provides the most efficient interface and the model abstraction wraps the request abstraction to provide a convenient `ActiveModel` like interface.
35
+
36
+ ### Request Layer
37
+
38
+ The request abstraction maps directly to the [Proxmox VE API](https://pve.proxmox.com/wiki/Proxmox_VE_API). It provides an interface to the Proxmox Identity service.
39
+
40
+ To see a list of requests supported by the identity service:
41
+
42
+ ```ruby
43
+ identity.requests
44
+ ```
45
+
46
+ To learn more about Identity request methods refer to source files.
47
+
48
+ To learn more about Excon refer to [Excon GitHub repo](https://github.com/geemus/excon).
49
+
50
+ ### Model Layer
51
+
52
+ Fog models behave in a manner similar to `ActiveModel`. Models will generally respond to `create`, `save`, `persisted?`, `destroy`, `reload` and `attributes` methods. Additionally, fog will automatically create attribute accessors.
53
+
54
+ Here is a summary of common model methods:
55
+
56
+ <table>
57
+ <tr>
58
+ <th>Method</th>
59
+ <th>Description</th>
60
+ </tr>
61
+ <tr>
62
+ <td>create</td>
63
+ <td>
64
+ Accepts hash of attributes and creates object.<br>
65
+ Note: creation is a non-blocking call and you will be required to wait for a valid state before using resulting object.
66
+ </td>
67
+ </tr>
68
+ <tr>
69
+ <td>update</td>
70
+ <td>Updates object.<br>
71
+ Note: not all objects support updating object.</td>
72
+ </tr>
73
+ <tr>
74
+ <td>destroy</td>
75
+ <td>
76
+ Destroys object.<br>
77
+ Note: this is a non-blocking call and object deletion might not be instantaneous.
78
+ </td>
79
+ <tr>
80
+ <td>attributes</td>
81
+ <td>Returns a hash containing the list of model attributes and values.</td>
82
+ </tr>
83
+ <td>identity</td>
84
+ <td>
85
+ Returns the identity of the object.<br>
86
+ Note: This might not always be equal to object.id.
87
+ </td>
88
+ </tr>
89
+ </table>
90
+
91
+ The remainder of this document details the model abstraction.
92
+
93
+ #### Users management
94
+
95
+ List all users:
96
+
97
+ ```ruby
98
+ identity.users.all
99
+ ```
100
+
101
+ This returns a collection of `Fog::Identity::Proxmox::User` models:
102
+
103
+ Create a user:
104
+
105
+ ```ruby
106
+ identity.users.create({
107
+ userid: 'bobsinclar@pve',
108
+ password: 'bobsinclar1',
109
+ firstname: 'Bob',
110
+ lastname: 'Sinclar',
111
+ email: 'bobsinclar@proxmox.com'
112
+ })
113
+ ```
114
+
115
+ Get a user:
116
+
117
+ ```ruby
118
+ user = identity.users.find_by_id 'bobsinclar@pve'
119
+ ```
120
+
121
+ Change his password:
122
+
123
+ ```ruby
124
+ user.password = 'bobsinclar2'
125
+ user.change_password
126
+ ```
127
+
128
+ Add groups to user:
129
+
130
+ ```ruby
131
+ user.groups = %w[group1 group2]
132
+ user.update
133
+ ```
134
+
135
+ Delete user:
136
+
137
+ ```ruby
138
+ user.destroy
139
+ ```
140
+
141
+ #### Groups management
142
+
143
+ Proxmox supports permissions management by group.
144
+
145
+ Proxmox recommends to manage permissions by group instead of by user.
146
+
147
+ List all groups:
148
+
149
+ ```ruby
150
+ identity.groups.all
151
+ ```
152
+
153
+ This returns a collection of `Fog::Identity::Proxmox::Group` models:
154
+
155
+ Create a group:
156
+
157
+ ```ruby
158
+ identity.groups.create({
159
+ groupid: 'group1'
160
+ })
161
+ ```
162
+
163
+ Get a group:
164
+
165
+ ```ruby
166
+ group = identity.groups.find_by_id 'group1'
167
+ ```
168
+
169
+ Add a comment:
170
+
171
+ ```ruby
172
+ group.comment = 'Group 1'
173
+ group.update
174
+ ```
175
+
176
+ Delete group:
177
+
178
+ ```ruby
179
+ group.destroy
180
+ ```
181
+
182
+ #### Domains management
183
+
184
+ Proxmox supports 4 domains or realms (sources of authentication): PAM, PVE, LDAP and Active Directory.
185
+
186
+ Proxmox server has two default domains: PAM and PVE.
187
+
188
+ List all domains:
189
+
190
+ ```ruby
191
+ identity.domains.all
192
+ ```
193
+
194
+ This returns a collection of `Fog::Identity::Proxmox::Domain` models:
195
+
196
+ Create a LDAP domain:
197
+
198
+ ```ruby
199
+ identity.domains.create({
200
+ realm: 'LDAP',
201
+ type: 'ldap',
202
+ base_dn: 'ou=People,dc=ldap-test,dc=com',
203
+ user_attr: 'LDAP',
204
+ server1: 'localhost',
205
+ port: 389,
206
+ default: 0,
207
+ secure: 0
208
+ })
209
+ ```
210
+
211
+ Get a domain:
212
+
213
+ ```ruby
214
+ ldap = identity.domains.find_by_id 'LDAP'
215
+ ```
216
+
217
+ Add a comment and a two factor authentication (OATH) to LDAP realm:
218
+
219
+ ```ruby
220
+ ldap.type.comment = 'Test domain LDAP'
221
+ ldap.type.tfa = 'type=oath,step=30,digits=8'
222
+ ldap.update
223
+ ```
224
+
225
+ Delete domain:
226
+
227
+ ```ruby
228
+ ldap.destroy
229
+ ```
230
+
231
+ #### Roles management
232
+
233
+ Proxmox supports roles management to give permissions to group of users.
234
+
235
+ Proxmox server has several defaults roles already created. See [Proxmox user management wiki page](https://pve.proxmox.com/wiki/User_Management)
236
+
237
+ List all roles:
238
+
239
+ ```ruby
240
+ identity.roles.all
241
+ ```
242
+
243
+ This returns a collection of `Fog::Identity::Proxmox::Role` models:
244
+
245
+ Create a new role:
246
+
247
+ ```ruby
248
+ identity.roles.create({ roleid: 'PVETestAuditor' })
249
+ ```
250
+
251
+ Get the role:
252
+
253
+ ```ruby
254
+ role = identity.groups.find_by_id 'PVETestAuditor'
255
+ ```
256
+
257
+ Add privileges to this new role:
258
+
259
+ ```ruby
260
+ role.privs = 'Datastore.Audit Sys.Audit VM.Audit'
261
+ role.update
262
+ ```
263
+
264
+ List of all available privileges can be seen at [Proxmox user management wiki page](https://pve.proxmox.com/wiki/User_Management)
265
+
266
+ Delete role:
267
+
268
+ ```ruby
269
+ role.destroy
270
+ ```
271
+
272
+ #### Permissions management
273
+
274
+ Proxmox supports permissions management. Access permissions are assigned to objects, such as a virtual machines, storages or pools of resources. It uses path to identify these objects. Path is the same as REST API path.
275
+
276
+ See more details in [Proxmox user management wiki page](https://pve.proxmox.com/wiki/User_Management)
277
+
278
+ List all permissions:
279
+
280
+ ```ruby
281
+ identity.permissions.all
282
+ ```
283
+
284
+ This returns a collection of `Fog::Identity::Proxmox::Permission` models:
285
+
286
+ Add a new permission (manage users) to a user:
287
+
288
+ ```ruby
289
+ identity.permissions.add({
290
+ path: '/access/users',
291
+ roles: 'PVEUserAdmin',
292
+ users: 'bobsinclar@pve'
293
+ })
294
+ ```
295
+
296
+ Add a new permission (manage users) to a group of users:
297
+
298
+ ```ruby
299
+ identity.permissions.add({
300
+ path: '/access/users',
301
+ roles: 'PVEUserAdmin',
302
+ groups: 'group1'
303
+ })
304
+ ```
305
+
306
+ Remove a permission to a user:
307
+
308
+ ```ruby
309
+ identity.permissions.remove({
310
+ path: '/access/users',
311
+ roles: 'PVEUserAdmin',
312
+ users: 'bobsinclar@pve'
313
+ })
314
+ ```
315
+ #### Pools management
316
+
317
+ Proxmox supports pools management of VMs or storages. It eases managing permissions on these.
318
+
319
+ Create a pool:
320
+
321
+ ```ruby
322
+ identity.pools.create { poolid: 'pool1' }
323
+ ```
324
+
325
+ Get a pool:
326
+
327
+ ```ruby
328
+ pool1 = identity.pools.find_by_id 'pool1'
329
+ ```
330
+
331
+ Add comment, server 100 and storage local-lvm to the pool:
332
+
333
+ ```ruby
334
+ pool1.comment = 'Pool 1'
335
+ pool1.update
336
+ pool1.add_server 100
337
+ pool1.add_storage 'local-lvm '
338
+ ```
339
+
340
+ Get all pools:
341
+
342
+ ```ruby
343
+ identity.pools.all
344
+ ```
345
+
346
+ Delete pool:
347
+
348
+ ```ruby
349
+ # you need to remove all members before deleting pool
350
+ pool1.remove_server 100
351
+ pool1.remove_storage 'local-lvm '
352
+ pool1.destroy
353
+ ```
354
+
355
+ ### Examples
356
+
357
+ More examples can be seen at [examples/identity.rb](examples/identity.rb) or [spec/identity_spec.rb](spec/identity_spec.rb).