fog-proxmox-configlmm 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (189) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +8 -0
  3. data/LICENSE +674 -0
  4. data/README.md +110 -0
  5. data/docs/compute.md +874 -0
  6. data/docs/connection_parameters.md +45 -0
  7. data/docs/getting_started.md +53 -0
  8. data/docs/identity.md +382 -0
  9. data/examples/compute.rb +276 -0
  10. data/examples/identity.rb +203 -0
  11. data/lib/fog/proxmox/attributes.rb +34 -0
  12. data/lib/fog/proxmox/auth/token/access_ticket.rb +96 -0
  13. data/lib/fog/proxmox/auth/token/user_token.rb +107 -0
  14. data/lib/fog/proxmox/auth/token.rb +94 -0
  15. data/lib/fog/proxmox/compute/models/disk.rb +94 -0
  16. data/lib/fog/proxmox/compute/models/disks.rb +55 -0
  17. data/lib/fog/proxmox/compute/models/interface.rb +56 -0
  18. data/lib/fog/proxmox/compute/models/interfaces.rb +44 -0
  19. data/lib/fog/proxmox/compute/models/node.rb +93 -0
  20. data/lib/fog/proxmox/compute/models/nodes.rb +39 -0
  21. data/lib/fog/proxmox/compute/models/server.rb +271 -0
  22. data/lib/fog/proxmox/compute/models/server_config.rb +161 -0
  23. data/lib/fog/proxmox/compute/models/servers.rb +80 -0
  24. data/lib/fog/proxmox/compute/models/snapshot.rb +83 -0
  25. data/lib/fog/proxmox/compute/models/snapshots.rb +47 -0
  26. data/lib/fog/proxmox/compute/models/storage.rb +65 -0
  27. data/lib/fog/proxmox/compute/models/storages.rb +51 -0
  28. data/lib/fog/proxmox/compute/models/task.rb +79 -0
  29. data/lib/fog/proxmox/compute/models/tasks.rb +65 -0
  30. data/lib/fog/proxmox/compute/models/volume.rb +68 -0
  31. data/lib/fog/proxmox/compute/models/volumes.rb +58 -0
  32. data/lib/fog/proxmox/compute/requests/action_server.rb +45 -0
  33. data/lib/fog/proxmox/compute/requests/clone_server.rb +44 -0
  34. data/lib/fog/proxmox/compute/requests/create_backup.rb +42 -0
  35. data/lib/fog/proxmox/compute/requests/create_server.rb +43 -0
  36. data/lib/fog/proxmox/compute/requests/create_snapshot.rb +46 -0
  37. data/lib/fog/proxmox/compute/requests/create_spice.rb +44 -0
  38. data/lib/fog/proxmox/compute/requests/create_term.rb +45 -0
  39. data/lib/fog/proxmox/compute/requests/create_vnc.rb +44 -0
  40. data/lib/fog/proxmox/compute/requests/delete_server.rb +45 -0
  41. data/lib/fog/proxmox/compute/requests/delete_snapshot.rb +47 -0
  42. data/lib/fog/proxmox/compute/requests/delete_volume.rb +40 -0
  43. data/lib/fog/proxmox/compute/requests/get_node_statistics.rb +44 -0
  44. data/lib/fog/proxmox/compute/requests/get_server_config.rb +60 -0
  45. data/lib/fog/proxmox/compute/requests/get_server_status.rb +63 -0
  46. data/lib/fog/proxmox/compute/requests/get_snapshot_config.rb +44 -0
  47. data/lib/fog/proxmox/compute/requests/get_task.rb +41 -0
  48. data/lib/fog/proxmox/compute/requests/get_vnc.rb +45 -0
  49. data/lib/fog/proxmox/compute/requests/get_volume.rb +42 -0
  50. data/lib/fog/proxmox/compute/requests/list_nodes.rb +48 -0
  51. data/lib/fog/proxmox/compute/requests/list_servers.rb +113 -0
  52. data/lib/fog/proxmox/compute/requests/list_snapshots.rb +66 -0
  53. data/lib/fog/proxmox/compute/requests/list_storages.rb +46 -0
  54. data/lib/fog/proxmox/compute/requests/list_tasks.rb +44 -0
  55. data/lib/fog/proxmox/compute/requests/list_volumes.rb +44 -0
  56. data/lib/fog/proxmox/compute/requests/log_task.rb +44 -0
  57. data/lib/fog/proxmox/compute/requests/migrate_server.rb +44 -0
  58. data/lib/fog/proxmox/compute/requests/move_disk.rb +43 -0
  59. data/lib/fog/proxmox/compute/requests/move_volume.rb +43 -0
  60. data/lib/fog/proxmox/compute/requests/next_vmid.rb +42 -0
  61. data/lib/fog/proxmox/compute/requests/resize_container.rb +43 -0
  62. data/lib/fog/proxmox/compute/requests/resize_server.rb +43 -0
  63. data/lib/fog/proxmox/compute/requests/rollback_snapshot.rb +48 -0
  64. data/lib/fog/proxmox/compute/requests/status_task.rb +41 -0
  65. data/lib/fog/proxmox/compute/requests/stop_task.rb +41 -0
  66. data/lib/fog/proxmox/compute/requests/template_server.rb +44 -0
  67. data/lib/fog/proxmox/compute/requests/update_server.rb +44 -0
  68. data/lib/fog/proxmox/compute/requests/update_snapshot.rb +45 -0
  69. data/lib/fog/proxmox/compute.rb +141 -0
  70. data/lib/fog/proxmox/core.rb +147 -0
  71. data/lib/fog/proxmox/errors.rb +65 -0
  72. data/lib/fog/proxmox/hash.rb +37 -0
  73. data/lib/fog/proxmox/helpers/controller_helper.rb +63 -0
  74. data/lib/fog/proxmox/helpers/cpu_helper.rb +88 -0
  75. data/lib/fog/proxmox/helpers/disk_helper.rb +185 -0
  76. data/lib/fog/proxmox/helpers/ip_helper.rb +101 -0
  77. data/lib/fog/proxmox/helpers/nic_helper.rb +132 -0
  78. data/lib/fog/proxmox/identity/models/domain.rb +69 -0
  79. data/lib/fog/proxmox/identity/models/domain_type.rb +47 -0
  80. data/lib/fog/proxmox/identity/models/domains.rb +44 -0
  81. data/lib/fog/proxmox/identity/models/group.rb +51 -0
  82. data/lib/fog/proxmox/identity/models/groups.rb +44 -0
  83. data/lib/fog/proxmox/identity/models/permission.rb +66 -0
  84. data/lib/fog/proxmox/identity/models/permissions.rb +46 -0
  85. data/lib/fog/proxmox/identity/models/pool.rb +89 -0
  86. data/lib/fog/proxmox/identity/models/pools.rb +46 -0
  87. data/lib/fog/proxmox/identity/models/principal.rb +42 -0
  88. data/lib/fog/proxmox/identity/models/role.rb +48 -0
  89. data/lib/fog/proxmox/identity/models/roles.rb +44 -0
  90. data/lib/fog/proxmox/identity/models/token.rb +72 -0
  91. data/lib/fog/proxmox/identity/models/token_info.rb +41 -0
  92. data/lib/fog/proxmox/identity/models/tokens.rb +54 -0
  93. data/lib/fog/proxmox/identity/models/user.rb +82 -0
  94. data/lib/fog/proxmox/identity/models/users.rb +44 -0
  95. data/lib/fog/proxmox/identity/requests/change_password.rb +41 -0
  96. data/lib/fog/proxmox/identity/requests/check_permissions.rb +41 -0
  97. data/lib/fog/proxmox/identity/requests/create_domain.rb +40 -0
  98. data/lib/fog/proxmox/identity/requests/create_group.rb +40 -0
  99. data/lib/fog/proxmox/identity/requests/create_pool.rb +40 -0
  100. data/lib/fog/proxmox/identity/requests/create_role.rb +40 -0
  101. data/lib/fog/proxmox/identity/requests/create_token.rb +40 -0
  102. data/lib/fog/proxmox/identity/requests/create_user.rb +40 -0
  103. data/lib/fog/proxmox/identity/requests/delete_domain.rb +40 -0
  104. data/lib/fog/proxmox/identity/requests/delete_group.rb +40 -0
  105. data/lib/fog/proxmox/identity/requests/delete_pool.rb +39 -0
  106. data/lib/fog/proxmox/identity/requests/delete_role.rb +40 -0
  107. data/lib/fog/proxmox/identity/requests/delete_token.rb +40 -0
  108. data/lib/fog/proxmox/identity/requests/delete_user.rb +39 -0
  109. data/lib/fog/proxmox/identity/requests/get_domain.rb +41 -0
  110. data/lib/fog/proxmox/identity/requests/get_group.rb +41 -0
  111. data/lib/fog/proxmox/identity/requests/get_pool.rb +41 -0
  112. data/lib/fog/proxmox/identity/requests/get_role.rb +41 -0
  113. data/lib/fog/proxmox/identity/requests/get_token_info.rb +41 -0
  114. data/lib/fog/proxmox/identity/requests/get_user.rb +41 -0
  115. data/lib/fog/proxmox/identity/requests/list_domains.rb +41 -0
  116. data/lib/fog/proxmox/identity/requests/list_groups.rb +41 -0
  117. data/lib/fog/proxmox/identity/requests/list_permissions.rb +41 -0
  118. data/lib/fog/proxmox/identity/requests/list_pools.rb +41 -0
  119. data/lib/fog/proxmox/identity/requests/list_roles.rb +40 -0
  120. data/lib/fog/proxmox/identity/requests/list_tokens.rb +41 -0
  121. data/lib/fog/proxmox/identity/requests/list_user_permissions.rb +44 -0
  122. data/lib/fog/proxmox/identity/requests/list_users.rb +42 -0
  123. data/lib/fog/proxmox/identity/requests/read_version.rb +39 -0
  124. data/lib/fog/proxmox/identity/requests/update_domain.rb +41 -0
  125. data/lib/fog/proxmox/identity/requests/update_group.rb +40 -0
  126. data/lib/fog/proxmox/identity/requests/update_permissions.rb +41 -0
  127. data/lib/fog/proxmox/identity/requests/update_pool.rb +41 -0
  128. data/lib/fog/proxmox/identity/requests/update_role.rb +41 -0
  129. data/lib/fog/proxmox/identity/requests/update_token.rb +41 -0
  130. data/lib/fog/proxmox/identity/requests/update_user.rb +41 -0
  131. data/lib/fog/proxmox/identity.rb +144 -0
  132. data/lib/fog/proxmox/json.rb +32 -0
  133. data/lib/fog/proxmox/network/models/network.rb +76 -0
  134. data/lib/fog/proxmox/network/models/networks.rb +48 -0
  135. data/lib/fog/proxmox/network/models/node.rb +75 -0
  136. data/lib/fog/proxmox/network/models/nodes.rb +39 -0
  137. data/lib/fog/proxmox/network/requests/create_network.rb +41 -0
  138. data/lib/fog/proxmox/network/requests/delete_network.rb +42 -0
  139. data/lib/fog/proxmox/network/requests/get_network.rb +43 -0
  140. data/lib/fog/proxmox/network/requests/get_node.rb +41 -0
  141. data/lib/fog/proxmox/network/requests/list_networks.rb +43 -0
  142. data/lib/fog/proxmox/network/requests/list_nodes.rb +42 -0
  143. data/lib/fog/proxmox/network/requests/power_node.rb +43 -0
  144. data/lib/fog/proxmox/network/requests/update_network.rb +42 -0
  145. data/lib/fog/proxmox/network.rb +90 -0
  146. data/lib/fog/proxmox/storage/requests/create.rb +23 -0
  147. data/lib/fog/proxmox/storage/requests/download_appliance.rb +24 -0
  148. data/lib/fog/proxmox/storage/requests/list.rb +22 -0
  149. data/lib/fog/proxmox/storage/requests/list_appliances.rb +23 -0
  150. data/lib/fog/proxmox/storage/requests/upload.rb +44 -0
  151. data/lib/fog/proxmox/storage.rb +82 -0
  152. data/lib/fog/proxmox/string.rb +32 -0
  153. data/lib/fog/proxmox/variables.rb +40 -0
  154. data/lib/fog/proxmox/version.rb +24 -0
  155. data/lib/fog/proxmox.rb +53 -0
  156. data/spec/compute_spec.rb +447 -0
  157. data/spec/fixtures/proxmox/compute/common_auth.yml +40 -0
  158. data/spec/fixtures/proxmox/compute/containers.yml +6921 -0
  159. data/spec/fixtures/proxmox/compute/nodes.yml +115 -0
  160. data/spec/fixtures/proxmox/compute/servers.yml +19011 -0
  161. data/spec/fixtures/proxmox/compute/snapshots.yml +1376 -0
  162. data/spec/fixtures/proxmox/compute/storages.yml +151 -0
  163. data/spec/fixtures/proxmox/compute/tasks.yml +465 -0
  164. data/spec/fixtures/proxmox/identity/auth.yml +42 -0
  165. data/spec/fixtures/proxmox/identity/auth_access_ticket.yml +77 -0
  166. data/spec/fixtures/proxmox/identity/auth_user_token.yml +77 -0
  167. data/spec/fixtures/proxmox/identity/common_auth.yml +40 -0
  168. data/spec/fixtures/proxmox/identity/domains.yml +665 -0
  169. data/spec/fixtures/proxmox/identity/groups.yml +345 -0
  170. data/spec/fixtures/proxmox/identity/permissions.yml +911 -0
  171. data/spec/fixtures/proxmox/identity/pools.yml +946 -0
  172. data/spec/fixtures/proxmox/identity/read_version.yml +40 -0
  173. data/spec/fixtures/proxmox/identity/roles.yml +345 -0
  174. data/spec/fixtures/proxmox/identity/tokens.yml +494 -0
  175. data/spec/fixtures/proxmox/identity/users.yml +725 -0
  176. data/spec/fixtures/proxmox/network/common_auth.yml +40 -0
  177. data/spec/fixtures/proxmox/network/networks.yml +375 -0
  178. data/spec/fixtures/proxmox/pve.home +34 -0
  179. data/spec/hash_spec.rb +43 -0
  180. data/spec/helpers/controller_helper_spec.rb +157 -0
  181. data/spec/helpers/cpu_helper_spec.rb +82 -0
  182. data/spec/helpers/disk_helper_spec.rb +304 -0
  183. data/spec/helpers/ip_helper_spec.rb +177 -0
  184. data/spec/helpers/nic_helper_spec.rb +144 -0
  185. data/spec/identity_spec.rb +416 -0
  186. data/spec/network_spec.rb +67 -0
  187. data/spec/proxmox_vcr.rb +97 -0
  188. data/spec/spec_helper.rb +41 -0
  189. metadata +566 -0
@@ -0,0 +1,40 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://192.168.56.101:8006/api2/json/access/ticket
6
+ body:
7
+ encoding: US-ASCII
8
+ string: username=root%40pam&password=proxmox01
9
+ headers:
10
+ User-Agent:
11
+ - fog-core/2.2.3
12
+ Accept:
13
+ - application/json
14
+ response:
15
+ status:
16
+ code: 200
17
+ message: OK
18
+ headers:
19
+ Cache-Control:
20
+ - max-age=0
21
+ Connection:
22
+ - close, Keep-Alive
23
+ Date:
24
+ - Wed, 25 Nov 2020 13:43:47 GMT
25
+ Pragma:
26
+ - no-cache
27
+ Server:
28
+ - pve-api-daemon/3.0
29
+ Content-Length:
30
+ - '1167'
31
+ Content-Type:
32
+ - application/json;charset=UTF-8
33
+ Expires:
34
+ - Wed, 25 Nov 2020 13:43:47 GMT
35
+ body:
36
+ encoding: ASCII-8BIT
37
+ string: '{"data":{"CSRFPreventionToken":"5FBE5F93:tNCo7nHYIIdA46RVo8yPQg9ZcbtzibFl3lhAwDPkSqc","ticket":"PVE:root@pam:5FBE5F93::J4UGO/cW6NJLxU0fQy8AnxuJhKDkIa+ZLBLUIxlXYO3Nb1ocZ15jqoPl0EEOQpI2sohhmtGYo9bptqaPPH48rmaNKzIUtHjDAg/c425GgbhkSo2jYVeCWcTTEC+nDskOiMkjdE4HIiFLpk71IMEP93hGWJ4+mnUxOLfHsRDodWdJXoGoBlxiUBu0zirFLXR60i6WCK2oX82nPYXRJbsl4VRLYcOkYXnnfaUxYgOL0veZhKRcAWlVRKQ7/lkdG1iu3XlOvEeynqcT2xHs+Z158zALA+ZzAEQ6GYdvFFKr/xR57Kd8hfOhRumKx5EaDfdeYkZP/8ZVH48tEbTXrOEQHg==","cap":{"nodes":{"Sys.Console":1,"Sys.Audit":1,"Sys.PowerMgmt":1,"Permissions.Modify":1,"Sys.Modify":1,"Sys.Syslog":1},"access":{"Group.Allocate":1,"Permissions.Modify":1,"User.Modify":1},"dc":{"Sys.Audit":1},"vms":{"VM.Config.HWType":1,"VM.Migrate":1,"VM.Snapshot.Rollback":1,"VM.Config.Memory":1,"VM.Config.Disk":1,"VM.PowerMgmt":1,"VM.Monitor":1,"VM.Backup":1,"VM.Audit":1,"VM.Config.CDROM":1,"VM.Config.Network":1,"Permissions.Modify":1,"VM.Clone":1,"VM.Allocate":1,"VM.Config.CPU":1,"VM.Console":1,"VM.Config.Options":1,"VM.Snapshot":1},"storage":{"Datastore.Allocate":1,"Permissions.Modify":1,"Datastore.Audit":1,"Datastore.AllocateSpace":1,"Datastore.AllocateTemplate":1}},"username":"root@pam"}}'
38
+ http_version:
39
+ recorded_at: Wed, 25 Nov 2020 13:43:48 GMT
40
+ recorded_with: VCR 4.0.0
@@ -0,0 +1,375 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://192.168.56.101:8006/api2/json/cluster/resources?type=node
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - fog-core/2.2.3
12
+ Cookie:
13
+ - PVEAuthCookie=PVE:root@pam:5FBE5F93::J4UGO/cW6NJLxU0fQy8AnxuJhKDkIa+ZLBLUIxlXYO3Nb1ocZ15jqoPl0EEOQpI2sohhmtGYo9bptqaPPH48rmaNKzIUtHjDAg/c425GgbhkSo2jYVeCWcTTEC+nDskOiMkjdE4HIiFLpk71IMEP93hGWJ4+mnUxOLfHsRDodWdJXoGoBlxiUBu0zirFLXR60i6WCK2oX82nPYXRJbsl4VRLYcOkYXnnfaUxYgOL0veZhKRcAWlVRKQ7/lkdG1iu3XlOvEeynqcT2xHs+Z158zALA+ZzAEQ6GYdvFFKr/xR57Kd8hfOhRumKx5EaDfdeYkZP/8ZVH48tEbTXrOEQHg==
14
+ response:
15
+ status:
16
+ code: 200
17
+ message: OK
18
+ headers:
19
+ Cache-Control:
20
+ - max-age=0
21
+ Connection:
22
+ - Keep-Alive
23
+ Date:
24
+ - Wed, 25 Nov 2020 13:43:47 GMT
25
+ Pragma:
26
+ - no-cache
27
+ Server:
28
+ - pve-api-daemon/3.0
29
+ Content-Length:
30
+ - '209'
31
+ Content-Type:
32
+ - application/json;charset=UTF-8
33
+ Expires:
34
+ - Wed, 25 Nov 2020 13:43:47 GMT
35
+ body:
36
+ encoding: ASCII-8BIT
37
+ string: '{"data":[{"mem":816152576,"disk":1983594496,"maxcpu":2,"cpu":0.00538129953557645,"status":"online","level":"","node":"pve","uptime":818,"maxmem":2083995648,"type":"node","id":"node/pve","maxdisk":2839314432}]}'
38
+ http_version:
39
+ recorded_at: Wed, 25 Nov 2020 13:43:48 GMT
40
+ - request:
41
+ method: post
42
+ uri: https://192.168.56.101:8006/api2/json/nodes/pve/network
43
+ body:
44
+ encoding: US-ASCII
45
+ string: iface=enp0s10&type=eth
46
+ headers:
47
+ User-Agent:
48
+ - fog-core/2.2.3
49
+ Cookie:
50
+ - PVEAuthCookie=PVE:root@pam:5FBE5F93::J4UGO/cW6NJLxU0fQy8AnxuJhKDkIa+ZLBLUIxlXYO3Nb1ocZ15jqoPl0EEOQpI2sohhmtGYo9bptqaPPH48rmaNKzIUtHjDAg/c425GgbhkSo2jYVeCWcTTEC+nDskOiMkjdE4HIiFLpk71IMEP93hGWJ4+mnUxOLfHsRDodWdJXoGoBlxiUBu0zirFLXR60i6WCK2oX82nPYXRJbsl4VRLYcOkYXnnfaUxYgOL0veZhKRcAWlVRKQ7/lkdG1iu3XlOvEeynqcT2xHs+Z158zALA+ZzAEQ6GYdvFFKr/xR57Kd8hfOhRumKx5EaDfdeYkZP/8ZVH48tEbTXrOEQHg==
51
+ Csrfpreventiontoken:
52
+ - 5FBE5F93:tNCo7nHYIIdA46RVo8yPQg9ZcbtzibFl3lhAwDPkSqc
53
+ response:
54
+ status:
55
+ code: 200
56
+ message: OK
57
+ headers:
58
+ Cache-Control:
59
+ - max-age=0
60
+ Connection:
61
+ - close, Keep-Alive
62
+ Date:
63
+ - Wed, 25 Nov 2020 13:43:47 GMT
64
+ Pragma:
65
+ - no-cache
66
+ Server:
67
+ - pve-api-daemon/3.0
68
+ Content-Length:
69
+ - '13'
70
+ Content-Type:
71
+ - application/json;charset=UTF-8
72
+ Expires:
73
+ - Wed, 25 Nov 2020 13:43:47 GMT
74
+ body:
75
+ encoding: ASCII-8BIT
76
+ string: '{"data":null}'
77
+ http_version:
78
+ recorded_at: Wed, 25 Nov 2020 13:43:49 GMT
79
+ - request:
80
+ method: get
81
+ uri: https://192.168.56.101:8006/api2/json/nodes/pve/network
82
+ body:
83
+ encoding: US-ASCII
84
+ string: ''
85
+ headers:
86
+ User-Agent:
87
+ - fog-core/2.2.3
88
+ Cookie:
89
+ - PVEAuthCookie=PVE:root@pam:5FBE5F93::J4UGO/cW6NJLxU0fQy8AnxuJhKDkIa+ZLBLUIxlXYO3Nb1ocZ15jqoPl0EEOQpI2sohhmtGYo9bptqaPPH48rmaNKzIUtHjDAg/c425GgbhkSo2jYVeCWcTTEC+nDskOiMkjdE4HIiFLpk71IMEP93hGWJ4+mnUxOLfHsRDodWdJXoGoBlxiUBu0zirFLXR60i6WCK2oX82nPYXRJbsl4VRLYcOkYXnnfaUxYgOL0veZhKRcAWlVRKQ7/lkdG1iu3XlOvEeynqcT2xHs+Z158zALA+ZzAEQ6GYdvFFKr/xR57Kd8hfOhRumKx5EaDfdeYkZP/8ZVH48tEbTXrOEQHg==
90
+ response:
91
+ status:
92
+ code: 200
93
+ message: OK
94
+ headers:
95
+ Cache-Control:
96
+ - max-age=0
97
+ Connection:
98
+ - Keep-Alive
99
+ Date:
100
+ - Wed, 25 Nov 2020 13:43:47 GMT
101
+ Pragma:
102
+ - no-cache
103
+ Server:
104
+ - pve-api-daemon/3.0
105
+ Content-Length:
106
+ - '1696'
107
+ Content-Type:
108
+ - application/json;charset=UTF-8
109
+ Expires:
110
+ - Wed, 25 Nov 2020 13:43:47 GMT
111
+ body:
112
+ encoding: ASCII-8BIT
113
+ string: '{"changes":"--- /etc/network/interfaces\t2020-09-24 13:49:08.604000707
114
+ +0200\n+++ /etc/network/interfaces.new\t2020-11-25 14:43:47.067974101 +0100\n@@
115
+ -1,15 +1,28 @@\n+# network interface settings; autogenerated\n+# Please do
116
+ NOT modify this file directly, unless you know what\n+# you''re doing.\n+#\n+#
117
+ If you want to manage parts of the network configuration manually,\n+# please
118
+ utilize the ''source'' or ''source-directory'' directives to do\n+# so.\n+#
119
+ PVE will preserve these directives, but will NOT read its network\n+# configuration
120
+ from sourced files, so do not attempt to move any of\n+# the PVE managed interfaces
121
+ into external files!\n+\n auto lo\n iface lo inet loopback\n \n iface enp0s3
122
+ inet manual\n \n+iface enp0s8 inet manual\n+\n+iface enp0s10 inet manual\n+\n
123
+ auto vmbr0\n iface vmbr0 inet static\n-\taddress 192.168.56.101\n-\tnetmask
124
+ 255.255.255.0\n+\taddress 192.168.56.101/24\n \tgateway 10.0.3.2\n-\tbridge_ports
125
+ enp0s3\n-\tbridge_stp off\n-\tbridge_fd 0\n+\tbridge-ports enp0s3\n+\tbridge-stp
126
+ off\n+\tbridge-fd 0\n \n-iface enp0s8 inet manual\n","data":[{"priority":5,"iface":"enp0s10","method6":"manual","method":"manual","families":["inet"],"type":"eth"},{"exists":1,"families":["inet"],"method":"manual","iface":"enp0s3","type":"eth","active":1,"method6":"manual","priority":3},{"type":"eth","exists":1,"families":["inet"],"method6":"manual","method":"manual","iface":"enp0s8","priority":4},{"type":"bridge","bridge_stp":"off","netmask":"24","bridge_fd":"0","cidr":"192.168.56.101/24","method":"static","active":1,"autostart":1,"priority":6,"method6":"manual","bridge_ports":"enp0s3","families":["inet"],"gateway":"10.0.3.2","address":"192.168.56.101","iface":"vmbr0"}]}'
127
+ http_version:
128
+ recorded_at: Wed, 25 Nov 2020 13:43:49 GMT
129
+ - request:
130
+ method: post
131
+ uri: https://192.168.56.101:8006/api2/json/nodes/pve/network
132
+ body:
133
+ encoding: US-ASCII
134
+ string: iface=enp0s10&type=eth
135
+ headers:
136
+ User-Agent:
137
+ - fog-core/2.2.3
138
+ Cookie:
139
+ - PVEAuthCookie=PVE:root@pam:5FBE5F93::J4UGO/cW6NJLxU0fQy8AnxuJhKDkIa+ZLBLUIxlXYO3Nb1ocZ15jqoPl0EEOQpI2sohhmtGYo9bptqaPPH48rmaNKzIUtHjDAg/c425GgbhkSo2jYVeCWcTTEC+nDskOiMkjdE4HIiFLpk71IMEP93hGWJ4+mnUxOLfHsRDodWdJXoGoBlxiUBu0zirFLXR60i6WCK2oX82nPYXRJbsl4VRLYcOkYXnnfaUxYgOL0veZhKRcAWlVRKQ7/lkdG1iu3XlOvEeynqcT2xHs+Z158zALA+ZzAEQ6GYdvFFKr/xR57Kd8hfOhRumKx5EaDfdeYkZP/8ZVH48tEbTXrOEQHg==
140
+ Csrfpreventiontoken:
141
+ - 5FBE5F93:tNCo7nHYIIdA46RVo8yPQg9ZcbtzibFl3lhAwDPkSqc
142
+ response:
143
+ status:
144
+ code: 400
145
+ message: Parameter verification failed.
146
+ headers:
147
+ Cache-Control:
148
+ - max-age=0
149
+ Connection:
150
+ - close
151
+ Date:
152
+ - Wed, 25 Nov 2020 13:43:47 GMT
153
+ Pragma:
154
+ - no-cache
155
+ Server:
156
+ - pve-api-daemon/3.0
157
+ Content-Length:
158
+ - '59'
159
+ Content-Type:
160
+ - application/json;charset=UTF-8
161
+ Expires:
162
+ - Wed, 25 Nov 2020 13:43:47 GMT
163
+ body:
164
+ encoding: ASCII-8BIT
165
+ string: '{"data":null,"errors":{"iface":"interface already exists"}}'
166
+ http_version:
167
+ recorded_at: Wed, 25 Nov 2020 13:43:49 GMT
168
+ - request:
169
+ method: get
170
+ uri: https://192.168.56.101:8006/api2/json/nodes/pve/network
171
+ body:
172
+ encoding: US-ASCII
173
+ string: ''
174
+ headers:
175
+ User-Agent:
176
+ - fog-core/2.2.3
177
+ Cookie:
178
+ - PVEAuthCookie=PVE:root@pam:5FBE5F93::J4UGO/cW6NJLxU0fQy8AnxuJhKDkIa+ZLBLUIxlXYO3Nb1ocZ15jqoPl0EEOQpI2sohhmtGYo9bptqaPPH48rmaNKzIUtHjDAg/c425GgbhkSo2jYVeCWcTTEC+nDskOiMkjdE4HIiFLpk71IMEP93hGWJ4+mnUxOLfHsRDodWdJXoGoBlxiUBu0zirFLXR60i6WCK2oX82nPYXRJbsl4VRLYcOkYXnnfaUxYgOL0veZhKRcAWlVRKQ7/lkdG1iu3XlOvEeynqcT2xHs+Z158zALA+ZzAEQ6GYdvFFKr/xR57Kd8hfOhRumKx5EaDfdeYkZP/8ZVH48tEbTXrOEQHg==
179
+ response:
180
+ status:
181
+ code: 200
182
+ message: OK
183
+ headers:
184
+ Cache-Control:
185
+ - max-age=0
186
+ Connection:
187
+ - Keep-Alive
188
+ Date:
189
+ - Wed, 25 Nov 2020 13:43:47 GMT
190
+ Pragma:
191
+ - no-cache
192
+ Server:
193
+ - pve-api-daemon/3.0
194
+ Content-Length:
195
+ - '1696'
196
+ Content-Type:
197
+ - application/json;charset=UTF-8
198
+ Expires:
199
+ - Wed, 25 Nov 2020 13:43:47 GMT
200
+ body:
201
+ encoding: ASCII-8BIT
202
+ string: '{"data":[{"families":["inet"],"bridge_fd":"0","netmask":"24","bridge_stp":"off","gateway":"10.0.3.2","address":"192.168.56.101","cidr":"192.168.56.101/24","method":"static","iface":"vmbr0","active":1,"type":"bridge","autostart":1,"priority":6,"method6":"manual","bridge_ports":"enp0s3"},{"method":"manual","iface":"enp0s8","families":["inet"],"exists":1,"priority":4,"method6":"manual","type":"eth"},{"priority":3,"iface":"enp0s3","method":"manual","method6":"manual","families":["inet"],"active":1,"exists":1,"type":"eth"},{"type":"eth","families":["inet"],"method6":"manual","method":"manual","iface":"enp0s10","priority":5}],"changes":"---
203
+ /etc/network/interfaces\t2020-09-24 13:49:08.604000707 +0200\n+++ /etc/network/interfaces.new\t2020-11-25
204
+ 14:43:47.067974101 +0100\n@@ -1,15 +1,28 @@\n+# network interface settings;
205
+ autogenerated\n+# Please do NOT modify this file directly, unless you know
206
+ what\n+# you''re doing.\n+#\n+# If you want to manage parts of the network
207
+ configuration manually,\n+# please utilize the ''source'' or ''source-directory''
208
+ directives to do\n+# so.\n+# PVE will preserve these directives, but will
209
+ NOT read its network\n+# configuration from sourced files, so do not attempt
210
+ to move any of\n+# the PVE managed interfaces into external files!\n+\n auto
211
+ lo\n iface lo inet loopback\n \n iface enp0s3 inet manual\n \n+iface enp0s8
212
+ inet manual\n+\n+iface enp0s10 inet manual\n+\n auto vmbr0\n iface vmbr0 inet
213
+ static\n-\taddress 192.168.56.101\n-\tnetmask 255.255.255.0\n+\taddress 192.168.56.101/24\n
214
+ \tgateway 10.0.3.2\n-\tbridge_ports enp0s3\n-\tbridge_stp off\n-\tbridge_fd
215
+ 0\n+\tbridge-ports enp0s3\n+\tbridge-stp off\n+\tbridge-fd 0\n \n-iface enp0s8
216
+ inet manual\n"}'
217
+ http_version:
218
+ recorded_at: Wed, 25 Nov 2020 13:43:49 GMT
219
+ - request:
220
+ method: put
221
+ uri: https://192.168.56.101:8006/api2/json/nodes/pve/network/enp0s10
222
+ body:
223
+ encoding: US-ASCII
224
+ string: comments=test&type=eth
225
+ headers:
226
+ User-Agent:
227
+ - fog-core/2.2.3
228
+ Cookie:
229
+ - PVEAuthCookie=PVE:root@pam:5FBE5F93::J4UGO/cW6NJLxU0fQy8AnxuJhKDkIa+ZLBLUIxlXYO3Nb1ocZ15jqoPl0EEOQpI2sohhmtGYo9bptqaPPH48rmaNKzIUtHjDAg/c425GgbhkSo2jYVeCWcTTEC+nDskOiMkjdE4HIiFLpk71IMEP93hGWJ4+mnUxOLfHsRDodWdJXoGoBlxiUBu0zirFLXR60i6WCK2oX82nPYXRJbsl4VRLYcOkYXnnfaUxYgOL0veZhKRcAWlVRKQ7/lkdG1iu3XlOvEeynqcT2xHs+Z158zALA+ZzAEQ6GYdvFFKr/xR57Kd8hfOhRumKx5EaDfdeYkZP/8ZVH48tEbTXrOEQHg==
230
+ Csrfpreventiontoken:
231
+ - 5FBE5F93:tNCo7nHYIIdA46RVo8yPQg9ZcbtzibFl3lhAwDPkSqc
232
+ response:
233
+ status:
234
+ code: 200
235
+ message: OK
236
+ headers:
237
+ Cache-Control:
238
+ - max-age=0
239
+ Connection:
240
+ - Keep-Alive, Keep-Alive
241
+ Date:
242
+ - Wed, 25 Nov 2020 13:43:47 GMT
243
+ Pragma:
244
+ - no-cache
245
+ Server:
246
+ - pve-api-daemon/3.0
247
+ Content-Length:
248
+ - '13'
249
+ Content-Type:
250
+ - application/json;charset=UTF-8
251
+ Expires:
252
+ - Wed, 25 Nov 2020 13:43:47 GMT
253
+ body:
254
+ encoding: ASCII-8BIT
255
+ string: '{"data":null}'
256
+ http_version:
257
+ recorded_at: Wed, 25 Nov 2020 13:43:49 GMT
258
+ - request:
259
+ method: post
260
+ uri: https://192.168.56.101:8006/api2/json/nodes/pve/status
261
+ body:
262
+ encoding: US-ASCII
263
+ string: command=reboot
264
+ headers:
265
+ User-Agent:
266
+ - fog-core/2.2.3
267
+ Cookie:
268
+ - PVEAuthCookie=PVE:root@pam:5FBE5F93::J4UGO/cW6NJLxU0fQy8AnxuJhKDkIa+ZLBLUIxlXYO3Nb1ocZ15jqoPl0EEOQpI2sohhmtGYo9bptqaPPH48rmaNKzIUtHjDAg/c425GgbhkSo2jYVeCWcTTEC+nDskOiMkjdE4HIiFLpk71IMEP93hGWJ4+mnUxOLfHsRDodWdJXoGoBlxiUBu0zirFLXR60i6WCK2oX82nPYXRJbsl4VRLYcOkYXnnfaUxYgOL0veZhKRcAWlVRKQ7/lkdG1iu3XlOvEeynqcT2xHs+Z158zALA+ZzAEQ6GYdvFFKr/xR57Kd8hfOhRumKx5EaDfdeYkZP/8ZVH48tEbTXrOEQHg==
269
+ Csrfpreventiontoken:
270
+ - 5FBE5F93:tNCo7nHYIIdA46RVo8yPQg9ZcbtzibFl3lhAwDPkSqc
271
+ response:
272
+ status:
273
+ code: 200
274
+ message: OK
275
+ headers:
276
+ Cache-Control:
277
+ - max-age=0
278
+ Connection:
279
+ - close, Keep-Alive
280
+ Date:
281
+ - Wed, 25 Nov 2020 13:43:47 GMT
282
+ Pragma:
283
+ - no-cache
284
+ Server:
285
+ - pve-api-daemon/3.0
286
+ Content-Length:
287
+ - '13'
288
+ Content-Type:
289
+ - application/json;charset=UTF-8
290
+ Expires:
291
+ - Wed, 25 Nov 2020 13:43:47 GMT
292
+ body:
293
+ encoding: ASCII-8BIT
294
+ string: '{"data":null}'
295
+ http_version:
296
+ recorded_at: Wed, 25 Nov 2020 13:43:49 GMT
297
+ - request:
298
+ method: delete
299
+ uri: https://192.168.56.101:8006/api2/json/nodes/pve/network/enp0s10
300
+ body:
301
+ encoding: US-ASCII
302
+ string: ''
303
+ headers:
304
+ User-Agent:
305
+ - fog-core/2.2.3
306
+ Cookie:
307
+ - PVEAuthCookie=PVE:root@pam:5FBE5F93::J4UGO/cW6NJLxU0fQy8AnxuJhKDkIa+ZLBLUIxlXYO3Nb1ocZ15jqoPl0EEOQpI2sohhmtGYo9bptqaPPH48rmaNKzIUtHjDAg/c425GgbhkSo2jYVeCWcTTEC+nDskOiMkjdE4HIiFLpk71IMEP93hGWJ4+mnUxOLfHsRDodWdJXoGoBlxiUBu0zirFLXR60i6WCK2oX82nPYXRJbsl4VRLYcOkYXnnfaUxYgOL0veZhKRcAWlVRKQ7/lkdG1iu3XlOvEeynqcT2xHs+Z158zALA+ZzAEQ6GYdvFFKr/xR57Kd8hfOhRumKx5EaDfdeYkZP/8ZVH48tEbTXrOEQHg==
308
+ Csrfpreventiontoken:
309
+ - 5FBE5F93:tNCo7nHYIIdA46RVo8yPQg9ZcbtzibFl3lhAwDPkSqc
310
+ response:
311
+ status:
312
+ code: 200
313
+ message: OK
314
+ headers:
315
+ Cache-Control:
316
+ - max-age=0
317
+ Connection:
318
+ - Keep-Alive, Keep-Alive
319
+ Date:
320
+ - Wed, 25 Nov 2020 13:44:48 GMT
321
+ Pragma:
322
+ - no-cache
323
+ Server:
324
+ - pve-api-daemon/3.0
325
+ Content-Length:
326
+ - '13'
327
+ Content-Type:
328
+ - application/json;charset=UTF-8
329
+ Expires:
330
+ - Wed, 25 Nov 2020 13:44:48 GMT
331
+ body:
332
+ encoding: ASCII-8BIT
333
+ string: '{"data":null}'
334
+ http_version:
335
+ recorded_at: Wed, 25 Nov 2020 13:44:49 GMT
336
+ - request:
337
+ method: post
338
+ uri: https://192.168.56.101:8006/api2/json/nodes/pve/status
339
+ body:
340
+ encoding: US-ASCII
341
+ string: command=reboot
342
+ headers:
343
+ User-Agent:
344
+ - fog-core/2.2.3
345
+ Cookie:
346
+ - PVEAuthCookie=PVE:root@pam:5FBE5F93::J4UGO/cW6NJLxU0fQy8AnxuJhKDkIa+ZLBLUIxlXYO3Nb1ocZ15jqoPl0EEOQpI2sohhmtGYo9bptqaPPH48rmaNKzIUtHjDAg/c425GgbhkSo2jYVeCWcTTEC+nDskOiMkjdE4HIiFLpk71IMEP93hGWJ4+mnUxOLfHsRDodWdJXoGoBlxiUBu0zirFLXR60i6WCK2oX82nPYXRJbsl4VRLYcOkYXnnfaUxYgOL0veZhKRcAWlVRKQ7/lkdG1iu3XlOvEeynqcT2xHs+Z158zALA+ZzAEQ6GYdvFFKr/xR57Kd8hfOhRumKx5EaDfdeYkZP/8ZVH48tEbTXrOEQHg==
347
+ Csrfpreventiontoken:
348
+ - 5FBE5F93:tNCo7nHYIIdA46RVo8yPQg9ZcbtzibFl3lhAwDPkSqc
349
+ response:
350
+ status:
351
+ code: 200
352
+ message: OK
353
+ headers:
354
+ Cache-Control:
355
+ - max-age=0
356
+ Connection:
357
+ - close, Keep-Alive
358
+ Date:
359
+ - Wed, 25 Nov 2020 13:44:48 GMT
360
+ Pragma:
361
+ - no-cache
362
+ Server:
363
+ - pve-api-daemon/3.0
364
+ Content-Length:
365
+ - '13'
366
+ Content-Type:
367
+ - application/json;charset=UTF-8
368
+ Expires:
369
+ - Wed, 25 Nov 2020 13:44:48 GMT
370
+ body:
371
+ encoding: ASCII-8BIT
372
+ string: '{"data":null}'
373
+ http_version:
374
+ recorded_at: Wed, 25 Nov 2020 13:44:49 GMT
375
+ recorded_with: VCR 4.0.0
@@ -0,0 +1,34 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFzTCCA7WgAwIBAgIUa5Qd49Zt/GzIid0nAlTcqvnGjXMwDQYJKoZIhvcNAQEL
3
+ BQAwdjEkMCIGA1UEAwwbUHJveG1veCBWaXJ0dWFsIEVudmlyb25tZW50MS0wKwYD
4
+ VQQLDCQzMjZiYjhhNC02OGFhLTQ4NTEtOGI1Mi04ZTNkNDVmNTE2ZjgxHzAdBgNV
5
+ BAoMFlBWRSBDbHVzdGVyIE1hbmFnZXIgQ0EwHhcNMTkxMTIxMTQyMDI2WhcNMjkx
6
+ MTE4MTQyMDI2WjB2MSQwIgYDVQQDDBtQcm94bW94IFZpcnR1YWwgRW52aXJvbm1l
7
+ bnQxLTArBgNVBAsMJDMyNmJiOGE0LTY4YWEtNDg1MS04YjUyLThlM2Q0NWY1MTZm
8
+ ODEfMB0GA1UECgwWUFZFIENsdXN0ZXIgTWFuYWdlciBDQTCCAiIwDQYJKoZIhvcN
9
+ AQEBBQADggIPADCCAgoCggIBAKjNB3rlIr5HuKTAeKyxfodUMqiygEsIukEj0UEh
10
+ ZcZQkFzNomVGB0C3S9hOWy1isW9lAr2I0lPmQqiZrs8qbFRJY0CBVRmzTIhr1ufo
11
+ pZygEMzIBETEuMwm4Xe1qZE75N+JgwY2T1YNYZIsLDuxekU17K1SMCAldxoC+gKd
12
+ x5a1AHUanowIHmy1MFmYPjWQI1+1UcJS7cK+g/Ro84sb+zTXtpeT/4dO1x9n6o7F
13
+ bq3cJKmXakRFxIeD4zeYktt+1VSxnwoKaTxO1zhk99kGQ3PpVfZ0tzpb97T8m+BQ
14
+ pAkUYpk/3cNGMW4x7XV21lD7bDtJFN/wH6vYxal61qTsZVVtxzXnKYviC69mLaCh
15
+ W+L4Ph2P4VqdzQLFaIjoNyFN7kqwBkFGwe0nReP5+L3y/tBn2od3aKsOE1NazfNH
16
+ m2rJ94nc20g0PLmVKFshuoDAlL0byaBBnfN86rJsIyON9kyWsOGBIGxTtc46q7xO
17
+ w8YjSdkZ9tSRklr/+eqWdpnY6zSxROUBC22HubgIVBCuA4Ddql8ZcSpILotcaJnr
18
+ H+Gcfzj5tYrLlQR1P2W1bRLcV9NEud5550vkj84qXLKF8Le6PHLmdMm+f5qwOzMN
19
+ 1A7/Mhpv4nCbGZSVTf6amRwlYO2BYppPBfThFUxh4RTSVRuu8xeTUKZ0Sn2SbIJw
20
+ 6oinAgMBAAGjUzBRMB0GA1UdDgQWBBQhUE8yP/5NnaEc3k6wWCnZcl42JDAfBgNV
21
+ HSMEGDAWgBQhUE8yP/5NnaEc3k6wWCnZcl42JDAPBgNVHRMBAf8EBTADAQH/MA0G
22
+ CSqGSIb3DQEBCwUAA4ICAQBUeugrWLHwqgv0DZNy9DsY+Z9yazuYlBdAI8nucbBJ
23
+ DJvV/DmRnL66vQL9fmsfBxOTIDhtuZmu8RhxfQ6n1RiFkh2J87R3p9sf5+FRQ2tt
24
+ bFBlLbbk9HxiIIhhL1/r6+A6huO49iC56Payu3ipJaGyacXkhXD8DwLNahO/lAZx
25
+ g/7etkJIEQe5Rd6s0cwINq8VfwXC2WgSNzF4o5bej6uIOZP6ax19IyU4h3DDelYt
26
+ rUPv7e3SsixfMwkuFL9giNhqubxffG/p/eTB5yzm89jMCDO1s5uIb/devGrXSVBA
27
+ T7iLQraosiFB9/8si4pwOmkFVnyF2/9cQEzht78WQEP16t5bbpgTNvmd7f7oPHPR
28
+ uB/W3qB/AGCKhlqm+/ZkJ9pvxm+jjb0X0SHf6tMXi8qBV7bnlqPyQJBG1ST+Vm/a
29
+ KqALPcOieSl9VnlqesO5Axnflw07fOUb0VahvJm9qSTSWi1XR645tRt4UHs8nDAg
30
+ DZyBXwboL5IvLg/pF1R/7V3srgyQ9sReoOrFZdjshS7u8SECy5sywIkPovxVOMhi
31
+ yQylee3A+myNATvZpg8WZi0nLeTagCTNYv8jVQpQ+tHFNn9o8Jsy0pQ1sMWzwltI
32
+ 6yxC+k11bRCKHYpHAdypeP154LtrHbbEmzCeF/4ZCDsAHr0XEsGQkXUrBtOzEwIM
33
+ pw==
34
+ -----END CERTIFICATE-----
data/spec/hash_spec.rb ADDED
@@ -0,0 +1,43 @@
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 'spec_helper'
21
+ require 'fog/proxmox/hash'
22
+
23
+ describe Fog::Proxmox::Hash do
24
+ let(:net_vm) do
25
+ { net0: 'virtio=66:89:C5:59:AA:96,bridge=vmbr0,firewall=1,link_down=1,queues=1,rate=1,tag=1' }
26
+ end
27
+ let(:net) do
28
+ { id: 'net0', model: 'virtio', macaddr: '66:89:C5:59:AA:96', z: nil }
29
+ end
30
+
31
+ describe '#flatten' do
32
+ it 'returns string net_vm' do
33
+ assert_equal 'net0: virtio=66:89:C5:59:AA:96,bridge=vmbr0,firewall=1,link_down=1,queues=1,rate=1,tag=1',
34
+ Fog::Proxmox::Hash.flatten(net_vm)
35
+ end
36
+ end
37
+
38
+ describe '#stringify' do
39
+ it 'returns stringify hash' do
40
+ assert_equal 'id=net0,model=virtio,macaddr=66:89:C5:59:AA:96', Fog::Proxmox::Hash.stringify(net)
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,157 @@
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 'spec_helper'
21
+ require 'fog/proxmox/helpers/controller_helper'
22
+
23
+ describe Fog::Proxmox::ControllerHelper do
24
+ let(:net) do
25
+ { net0: 'virtio=66:89:C5:59:AA:96,bridge=vmbr0,firewall=1,link_down=1,queues=1,rate=1,tag=1' }
26
+ end
27
+ let(:net_no_options) do
28
+ { net0: 'virtio=66:89:C5:59:AA:96' }
29
+ end
30
+ let(:net_lxc) do
31
+ { net0: 'virtio=66:89:C5:59:AA:96,bridge=vmbr0,firewall=1,link_down=1,queues=1,rate=1,tag=1,ip=192.168.56.100/31,ip6=2001:0000:1234:0000:0000:C1C0:ABCD:0876/31' }
32
+ end
33
+ let(:scsi) do
34
+ { scsi10: 'local-lvm:1,cache=none' }
35
+ end
36
+ let(:cdrom) do
37
+ { ide2: 'none,media=cdrom' }
38
+ end
39
+ let(:mp) do
40
+ { mp0: 'local-lvm:1,mp=/opt/path' }
41
+ end
42
+ let(:rootfs) do
43
+ { rootfs: 'local-lvm:1' }
44
+ end
45
+
46
+ describe '#extract' do
47
+ it 'returns bridge' do
48
+ bridge = Fog::Proxmox::ControllerHelper.extract('bridge', net[:net0])
49
+ assert_equal 'vmbr0', bridge
50
+ end
51
+
52
+ it 'returns nil' do
53
+ bridge = Fog::Proxmox::ControllerHelper.extract('bridge', net_no_options[:net0])
54
+ assert !bridge
55
+ end
56
+
57
+ it 'returns firewall' do
58
+ firewall = Fog::Proxmox::ControllerHelper.extract('firewall', net[:net0])
59
+ assert_equal '1', firewall
60
+ end
61
+
62
+ it 'returns cache' do
63
+ cache = Fog::Proxmox::ControllerHelper.extract('cache', scsi[:scsi10])
64
+ assert_equal 'none', cache
65
+ end
66
+
67
+ it 'returns mp' do
68
+ path = Fog::Proxmox::ControllerHelper.extract('mp', mp[:mp0])
69
+ assert_equal '/opt/path', path
70
+ end
71
+
72
+ it 'returns cidr ip' do
73
+ path = Fog::Proxmox::ControllerHelper.extract('ip', net_lxc[:net0])
74
+ assert_equal '192.168.56.100/31', path
75
+ end
76
+
77
+ it 'returns cidr ip6' do
78
+ path = Fog::Proxmox::ControllerHelper.extract('ip6', net_lxc[:net0])
79
+ assert_equal '2001:0000:1234:0000:0000:C1C0:ABCD:0876/31', path
80
+ end
81
+ end
82
+
83
+ describe '#extract_index' do
84
+ it 'net0 returns 0' do
85
+ index = Fog::Proxmox::ControllerHelper.extract_index('net', :net0)
86
+ assert index == 0
87
+ end
88
+
89
+ it 'scsi10 returns 10' do
90
+ index = Fog::Proxmox::ControllerHelper.extract_index('scsi', :scsi10)
91
+ assert index == 10
92
+ end
93
+ end
94
+
95
+ describe '#last_index' do
96
+ it 'returns -1' do
97
+ last = Fog::Proxmox::ControllerHelper.last_index('net', {})
98
+ assert last == -1
99
+ end
100
+
101
+ it 'returns 0' do
102
+ last = Fog::Proxmox::ControllerHelper.last_index('net', net)
103
+ assert last == 0
104
+ end
105
+
106
+ it 'returns 10' do
107
+ last = Fog::Proxmox::ControllerHelper.last_index('scsi', scsi)
108
+ assert last == 10
109
+ end
110
+ end
111
+
112
+ describe '#valid?' do
113
+ it 'returns true' do
114
+ assert Fog::Proxmox::ControllerHelper.valid?('net', 'net0')
115
+ end
116
+
117
+ it 'returns false' do
118
+ assert !Fog::Proxmox::ControllerHelper.valid?('net', 'sdfdsf')
119
+ end
120
+ end
121
+
122
+ describe '#select' do
123
+ it 'returns scsi10' do
124
+ controllers = Fog::Proxmox::ControllerHelper.select(scsi, 'scsi')
125
+ assert controllers.has_key?(:scsi10)
126
+ assert controllers.has_value?(scsi[:scsi10])
127
+ end
128
+
129
+ it 'returns empty' do
130
+ controllers = Fog::Proxmox::ControllerHelper.select(net, 'scsi')
131
+ assert controllers.empty?
132
+ end
133
+ end
134
+
135
+ describe '#collect_controllers' do
136
+ it 'returns scsi0 and ide2' do
137
+ controllers = Fog::Proxmox::ControllerHelper.collect_controllers(scsi.merge(cdrom))
138
+ assert controllers.has_key?(:scsi10)
139
+ assert controllers.has_value?(scsi[:scsi10])
140
+ assert controllers.has_key?(:ide2)
141
+ assert controllers.has_value?(cdrom[:ide2])
142
+ end
143
+
144
+ it 'returns rootfs and mp0' do
145
+ controllers = Fog::Proxmox::ControllerHelper.collect_controllers(rootfs.merge(mp))
146
+ assert controllers.has_key?(:mp0)
147
+ assert controllers.has_value?(mp[:mp0])
148
+ assert controllers.has_key?(:rootfs)
149
+ assert controllers.has_value?(rootfs[:rootfs])
150
+ end
151
+
152
+ it 'returns empty' do
153
+ controllers = Fog::Proxmox::ControllerHelper.collect_controllers(net)
154
+ assert controllers.empty?
155
+ end
156
+ end
157
+ end