fog-proxmox 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (191) hide show
  1. checksums.yaml +7 -0
  2. data/.bundle/config +4 -0
  3. data/.codeclimate.yml +14 -0
  4. data/.github/CODE_OF_CONDUCT.md +74 -0
  5. data/.github/CONTRIBUTING.md +20 -0
  6. data/.github/CONTRIBUTORS.md +9 -0
  7. data/.github/FUNDING.yml +12 -0
  8. data/.github/ISSUE_TEMPLATE.md +43 -0
  9. data/.github/ISSUE_TEMPLATE/bug_report.md +35 -0
  10. data/.github/ISSUE_TEMPLATE/feature_request.md +17 -0
  11. data/.github/SUPPORT.md +9 -0
  12. data/.github/fogproxmox.png +0 -0
  13. data/.github/workflows/ci.yml +79 -0
  14. data/.gitignore +8 -0
  15. data/.rubocop.yml +13 -0
  16. data/.ruby-gemset +1 -0
  17. data/.solargraph.yml +10 -0
  18. data/.vscode/launch.json +96 -0
  19. data/.vscode/settings.json +45 -0
  20. data/.vscode/tasks.json +27 -0
  21. data/Gemfile +23 -0
  22. data/LICENSE +674 -0
  23. data/README.md +79 -0
  24. data/Rakefile +58 -0
  25. data/docs/compute.md +858 -0
  26. data/docs/connection_parameters.md +45 -0
  27. data/docs/getting_started.md +53 -0
  28. data/docs/identity.md +357 -0
  29. data/examples/compute.rb +276 -0
  30. data/examples/identity.rb +190 -0
  31. data/fog-proxmox.gemspec +63 -0
  32. data/lib/fog/compute/proxmox.rb +126 -0
  33. data/lib/fog/compute/proxmox/models/disk.rb +76 -0
  34. data/lib/fog/compute/proxmox/models/disks.rb +51 -0
  35. data/lib/fog/compute/proxmox/models/interface.rb +52 -0
  36. data/lib/fog/compute/proxmox/models/interfaces.rb +44 -0
  37. data/lib/fog/compute/proxmox/models/node.rb +95 -0
  38. data/lib/fog/compute/proxmox/models/nodes.rb +39 -0
  39. data/lib/fog/compute/proxmox/models/server.rb +254 -0
  40. data/lib/fog/compute/proxmox/models/server_config.rb +148 -0
  41. data/lib/fog/compute/proxmox/models/servers.rb +80 -0
  42. data/lib/fog/compute/proxmox/models/snapshot.rb +83 -0
  43. data/lib/fog/compute/proxmox/models/snapshots.rb +47 -0
  44. data/lib/fog/compute/proxmox/models/storage.rb +64 -0
  45. data/lib/fog/compute/proxmox/models/storages.rb +51 -0
  46. data/lib/fog/compute/proxmox/models/task.rb +79 -0
  47. data/lib/fog/compute/proxmox/models/tasks.rb +64 -0
  48. data/lib/fog/compute/proxmox/models/volume.rb +61 -0
  49. data/lib/fog/compute/proxmox/models/volumes.rb +58 -0
  50. data/lib/fog/compute/proxmox/requests/action_server.rb +45 -0
  51. data/lib/fog/compute/proxmox/requests/clone_server.rb +44 -0
  52. data/lib/fog/compute/proxmox/requests/create_backup.rb +42 -0
  53. data/lib/fog/compute/proxmox/requests/create_server.rb +43 -0
  54. data/lib/fog/compute/proxmox/requests/create_snapshot.rb +46 -0
  55. data/lib/fog/compute/proxmox/requests/create_spice.rb +44 -0
  56. data/lib/fog/compute/proxmox/requests/create_term.rb +44 -0
  57. data/lib/fog/compute/proxmox/requests/create_vnc.rb +44 -0
  58. data/lib/fog/compute/proxmox/requests/delete_server.rb +45 -0
  59. data/lib/fog/compute/proxmox/requests/delete_snapshot.rb +47 -0
  60. data/lib/fog/compute/proxmox/requests/delete_volume.rb +40 -0
  61. data/lib/fog/compute/proxmox/requests/get_node_statistics.rb +44 -0
  62. data/lib/fog/compute/proxmox/requests/get_server_config.rb +60 -0
  63. data/lib/fog/compute/proxmox/requests/get_server_status.rb +63 -0
  64. data/lib/fog/compute/proxmox/requests/get_snapshot_config.rb +44 -0
  65. data/lib/fog/compute/proxmox/requests/get_task.rb +41 -0
  66. data/lib/fog/compute/proxmox/requests/get_vnc.rb +44 -0
  67. data/lib/fog/compute/proxmox/requests/get_volume.rb +42 -0
  68. data/lib/fog/compute/proxmox/requests/list_nodes.rb +48 -0
  69. data/lib/fog/compute/proxmox/requests/list_servers.rb +113 -0
  70. data/lib/fog/compute/proxmox/requests/list_snapshots.rb +66 -0
  71. data/lib/fog/compute/proxmox/requests/list_storages.rb +46 -0
  72. data/lib/fog/compute/proxmox/requests/list_tasks.rb +44 -0
  73. data/lib/fog/compute/proxmox/requests/list_volumes.rb +44 -0
  74. data/lib/fog/compute/proxmox/requests/log_task.rb +44 -0
  75. data/lib/fog/compute/proxmox/requests/migrate_server.rb +44 -0
  76. data/lib/fog/compute/proxmox/requests/move_disk.rb +43 -0
  77. data/lib/fog/compute/proxmox/requests/move_volume.rb +43 -0
  78. data/lib/fog/compute/proxmox/requests/next_vmid.rb +42 -0
  79. data/lib/fog/compute/proxmox/requests/resize_container.rb +43 -0
  80. data/lib/fog/compute/proxmox/requests/resize_server.rb +43 -0
  81. data/lib/fog/compute/proxmox/requests/rollback_snapshot.rb +48 -0
  82. data/lib/fog/compute/proxmox/requests/status_task.rb +41 -0
  83. data/lib/fog/compute/proxmox/requests/stop_task.rb +41 -0
  84. data/lib/fog/compute/proxmox/requests/template_server.rb +44 -0
  85. data/lib/fog/compute/proxmox/requests/update_server.rb +44 -0
  86. data/lib/fog/compute/proxmox/requests/update_snapshot.rb +45 -0
  87. data/lib/fog/identity/proxmox.rb +130 -0
  88. data/lib/fog/identity/proxmox/models/domain.rb +65 -0
  89. data/lib/fog/identity/proxmox/models/domain_type.rb +48 -0
  90. data/lib/fog/identity/proxmox/models/domains.rb +45 -0
  91. data/lib/fog/identity/proxmox/models/group.rb +47 -0
  92. data/lib/fog/identity/proxmox/models/groups.rb +44 -0
  93. data/lib/fog/identity/proxmox/models/permission.rb +65 -0
  94. data/lib/fog/identity/proxmox/models/permissions.rb +44 -0
  95. data/lib/fog/identity/proxmox/models/pool.rb +89 -0
  96. data/lib/fog/identity/proxmox/models/pools.rb +46 -0
  97. data/lib/fog/identity/proxmox/models/principal.rb +42 -0
  98. data/lib/fog/identity/proxmox/models/role.rb +48 -0
  99. data/lib/fog/identity/proxmox/models/roles.rb +44 -0
  100. data/lib/fog/identity/proxmox/models/user.rb +60 -0
  101. data/lib/fog/identity/proxmox/models/users.rb +44 -0
  102. data/lib/fog/identity/proxmox/requests/change_password.rb +41 -0
  103. data/lib/fog/identity/proxmox/requests/check_permissions.rb +41 -0
  104. data/lib/fog/identity/proxmox/requests/create_domain.rb +40 -0
  105. data/lib/fog/identity/proxmox/requests/create_group.rb +40 -0
  106. data/lib/fog/identity/proxmox/requests/create_pool.rb +40 -0
  107. data/lib/fog/identity/proxmox/requests/create_role.rb +40 -0
  108. data/lib/fog/identity/proxmox/requests/create_user.rb +40 -0
  109. data/lib/fog/identity/proxmox/requests/delete_domain.rb +40 -0
  110. data/lib/fog/identity/proxmox/requests/delete_group.rb +40 -0
  111. data/lib/fog/identity/proxmox/requests/delete_pool.rb +39 -0
  112. data/lib/fog/identity/proxmox/requests/delete_role.rb +40 -0
  113. data/lib/fog/identity/proxmox/requests/delete_user.rb +39 -0
  114. data/lib/fog/identity/proxmox/requests/get_domain.rb +41 -0
  115. data/lib/fog/identity/proxmox/requests/get_group.rb +41 -0
  116. data/lib/fog/identity/proxmox/requests/get_pool.rb +41 -0
  117. data/lib/fog/identity/proxmox/requests/get_role.rb +41 -0
  118. data/lib/fog/identity/proxmox/requests/get_user.rb +40 -0
  119. data/lib/fog/identity/proxmox/requests/list_domains.rb +41 -0
  120. data/lib/fog/identity/proxmox/requests/list_groups.rb +41 -0
  121. data/lib/fog/identity/proxmox/requests/list_permissions.rb +41 -0
  122. data/lib/fog/identity/proxmox/requests/list_pools.rb +41 -0
  123. data/lib/fog/identity/proxmox/requests/list_roles.rb +40 -0
  124. data/lib/fog/identity/proxmox/requests/list_users.rb +42 -0
  125. data/lib/fog/identity/proxmox/requests/read_version.rb +39 -0
  126. data/lib/fog/identity/proxmox/requests/update_domain.rb +41 -0
  127. data/lib/fog/identity/proxmox/requests/update_group.rb +40 -0
  128. data/lib/fog/identity/proxmox/requests/update_permissions.rb +41 -0
  129. data/lib/fog/identity/proxmox/requests/update_pool.rb +41 -0
  130. data/lib/fog/identity/proxmox/requests/update_role.rb +41 -0
  131. data/lib/fog/identity/proxmox/requests/update_user.rb +41 -0
  132. data/lib/fog/network/proxmox.rb +83 -0
  133. data/lib/fog/network/proxmox/models/network.rb +76 -0
  134. data/lib/fog/network/proxmox/models/networks.rb +48 -0
  135. data/lib/fog/network/proxmox/models/node.rb +74 -0
  136. data/lib/fog/network/proxmox/models/nodes.rb +39 -0
  137. data/lib/fog/network/proxmox/requests/create_network.rb +41 -0
  138. data/lib/fog/network/proxmox/requests/delete_network.rb +42 -0
  139. data/lib/fog/network/proxmox/requests/get_network.rb +43 -0
  140. data/lib/fog/network/proxmox/requests/get_node.rb +41 -0
  141. data/lib/fog/network/proxmox/requests/list_networks.rb +43 -0
  142. data/lib/fog/network/proxmox/requests/list_nodes.rb +42 -0
  143. data/lib/fog/network/proxmox/requests/power_node.rb +43 -0
  144. data/lib/fog/network/proxmox/requests/update_network.rb +42 -0
  145. data/lib/fog/proxmox.rb +115 -0
  146. data/lib/fog/proxmox/attributes.rb +33 -0
  147. data/lib/fog/proxmox/core.rb +135 -0
  148. data/lib/fog/proxmox/errors.rb +64 -0
  149. data/lib/fog/proxmox/hash.rb +39 -0
  150. data/lib/fog/proxmox/helpers/controller_helper.rb +64 -0
  151. data/lib/fog/proxmox/helpers/cpu_helper.rb +42 -0
  152. data/lib/fog/proxmox/helpers/disk_helper.rb +159 -0
  153. data/lib/fog/proxmox/helpers/ip_helper.rb +100 -0
  154. data/lib/fog/proxmox/helpers/nic_helper.rb +115 -0
  155. data/lib/fog/proxmox/json.rb +32 -0
  156. data/lib/fog/proxmox/string.rb +31 -0
  157. data/lib/fog/proxmox/variables.rb +40 -0
  158. data/lib/fog/proxmox/version.rb +24 -0
  159. data/lib/fog/storage/proxmox.rb +29 -0
  160. data/spec/compute_spec.rb +446 -0
  161. data/spec/fixtures/proxmox/compute/containers.yml +12737 -0
  162. data/spec/fixtures/proxmox/compute/identity_ticket.yml +40 -0
  163. data/spec/fixtures/proxmox/compute/nodes.yml +121 -0
  164. data/spec/fixtures/proxmox/compute/servers.yml +24679 -0
  165. data/spec/fixtures/proxmox/compute/snapshots.yml +3321 -0
  166. data/spec/fixtures/proxmox/compute/storages.yml +159 -0
  167. data/spec/fixtures/proxmox/compute/tasks.yml +685 -0
  168. data/spec/fixtures/proxmox/identity/auth.yml +44 -0
  169. data/spec/fixtures/proxmox/identity/domains.yml +701 -0
  170. data/spec/fixtures/proxmox/identity/groups.yml +363 -0
  171. data/spec/fixtures/proxmox/identity/identity_ticket.yml +40 -0
  172. data/spec/fixtures/proxmox/identity/permissions.yml +803 -0
  173. data/spec/fixtures/proxmox/identity/pools.yml +1191 -0
  174. data/spec/fixtures/proxmox/identity/read_version.yml +42 -0
  175. data/spec/fixtures/proxmox/identity/renew.yml +40 -0
  176. data/spec/fixtures/proxmox/identity/roles.yml +363 -0
  177. data/spec/fixtures/proxmox/identity/users.yml +763 -0
  178. data/spec/fixtures/proxmox/network/identity_ticket.yml +40 -0
  179. data/spec/fixtures/proxmox/network/networks.yml +372 -0
  180. data/spec/fixtures/proxmox/pve.home +34 -0
  181. data/spec/hash_spec.rb +42 -0
  182. data/spec/helpers/controller_helper_spec.rb +145 -0
  183. data/spec/helpers/cpu_helper_spec.rb +70 -0
  184. data/spec/helpers/disk_helper_spec.rb +210 -0
  185. data/spec/helpers/ip_helper_spec.rb +160 -0
  186. data/spec/helpers/nic_helper_spec.rb +136 -0
  187. data/spec/identity_spec.rb +322 -0
  188. data/spec/network_spec.rb +67 -0
  189. data/spec/proxmox_vcr.rb +95 -0
  190. data/spec/spec_helper.rb +40 -0
  191. metadata +547 -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.1.2
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
+ - Fri, 22 Nov 2019 15:45:40 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
+ - Fri, 22 Nov 2019 15:45:40 GMT
35
+ body:
36
+ encoding: ASCII-8BIT
37
+ string: '{"data":{"cap":{"vms":{"VM.Console":1,"VM.Migrate":1,"VM.Audit":1,"VM.Snapshot":1,"Permissions.Modify":1,"VM.Config.Options":1,"VM.Allocate":1,"VM.Monitor":1,"VM.Config.CDROM":1,"VM.Config.Memory":1,"VM.Config.Network":1,"VM.PowerMgmt":1,"VM.Snapshot.Rollback":1,"VM.Clone":1,"VM.Config.HWType":1,"VM.Config.Disk":1,"VM.Config.CPU":1,"VM.Backup":1},"dc":{"Sys.Audit":1},"access":{"User.Modify":1,"Group.Allocate":1,"Permissions.Modify":1},"storage":{"Datastore.AllocateTemplate":1,"Datastore.AllocateSpace":1,"Datastore.Audit":1,"Datastore.Allocate":1,"Permissions.Modify":1},"nodes":{"Sys.Modify":1,"Sys.Console":1,"Sys.PowerMgmt":1,"Sys.Audit":1,"Sys.Syslog":1,"Permissions.Modify":1}},"ticket":"PVE:root@pam:5DD802A4::o4yb4/NL7JEJueeGMREt4rkA/o7w+TkICAL3IqWM0lRC0mNWwDvolr0DL+ibedzVDgDCONn3ypTcBTMxnllJX52QvuTfX8Cy0BR2mfqGxWg6acsl0YvcRFIhlYaWaSHBN5yfe23wvdnoXtHYgEUWsIda00QYPzm2dWYfnUam/vuh+va9ypvZ3NATPbF0EBEHHa+k5oBdL5Ete77+YoQUhKC7rDtZaJ0EPSkzWin+/M8bnSEDf7bETe2pS9fcg4jy7BLKzT0RHYSgMGJQ0dbpWxSzqEBo6DwnUWGqRsQ8h4AsDyR+ffxIc9HiqRFvJ5ShndMrtCjg/w08A8AM/UHABQ==","username":"root@pam","CSRFPreventionToken":"5DD802A4:AMi8Xfhz+bFVs9s+yLXQA2wjOfxDZRfXaQz+eGYxzwU"}}'
38
+ http_version:
39
+ recorded_at: Fri, 22 Nov 2019 15:45:42 GMT
40
+ recorded_with: VCR 4.0.0
@@ -0,0 +1,372 @@
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.1.2
12
+ Accept:
13
+ - application/json
14
+ Cookie:
15
+ - PVEAuthCookie=PVE:root@pam:5DD802A4::o4yb4/NL7JEJueeGMREt4rkA/o7w+TkICAL3IqWM0lRC0mNWwDvolr0DL+ibedzVDgDCONn3ypTcBTMxnllJX52QvuTfX8Cy0BR2mfqGxWg6acsl0YvcRFIhlYaWaSHBN5yfe23wvdnoXtHYgEUWsIda00QYPzm2dWYfnUam/vuh+va9ypvZ3NATPbF0EBEHHa+k5oBdL5Ete77+YoQUhKC7rDtZaJ0EPSkzWin+/M8bnSEDf7bETe2pS9fcg4jy7BLKzT0RHYSgMGJQ0dbpWxSzqEBo6DwnUWGqRsQ8h4AsDyR+ffxIc9HiqRFvJ5ShndMrtCjg/w08A8AM/UHABQ==
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Cache-Control:
22
+ - max-age=0
23
+ Connection:
24
+ - Keep-Alive
25
+ Date:
26
+ - Fri, 22 Nov 2019 15:45:40 GMT
27
+ Pragma:
28
+ - no-cache
29
+ Server:
30
+ - pve-api-daemon/3.0
31
+ Content-Length:
32
+ - '207'
33
+ Content-Type:
34
+ - application/json;charset=UTF-8
35
+ Expires:
36
+ - Fri, 22 Nov 2019 15:45:40 GMT
37
+ body:
38
+ encoding: ASCII-8BIT
39
+ string: '{"data":[{"cpu":0.182306523027616,"id":"node/pve","uptime":211,"type":"node","maxmem":2087149568,"level":"","disk":1732104192,"maxcpu":4,"maxdisk":2310864896,"status":"online","mem":890413056,"node":"pve"}]}'
40
+ http_version:
41
+ recorded_at: Fri, 22 Nov 2019 15:45:42 GMT
42
+ - request:
43
+ method: post
44
+ uri: https://192.168.56.101:8006/api2/json/nodes/pve/network
45
+ body:
46
+ encoding: US-ASCII
47
+ string: iface=enp0s10&type=eth
48
+ headers:
49
+ User-Agent:
50
+ - fog-core/2.1.2
51
+ Accept:
52
+ - application/json
53
+ Csrfpreventiontoken:
54
+ - 5DD802A4:AMi8Xfhz+bFVs9s+yLXQA2wjOfxDZRfXaQz+eGYxzwU
55
+ Cookie:
56
+ - PVEAuthCookie=PVE:root@pam:5DD802A4::o4yb4/NL7JEJueeGMREt4rkA/o7w+TkICAL3IqWM0lRC0mNWwDvolr0DL+ibedzVDgDCONn3ypTcBTMxnllJX52QvuTfX8Cy0BR2mfqGxWg6acsl0YvcRFIhlYaWaSHBN5yfe23wvdnoXtHYgEUWsIda00QYPzm2dWYfnUam/vuh+va9ypvZ3NATPbF0EBEHHa+k5oBdL5Ete77+YoQUhKC7rDtZaJ0EPSkzWin+/M8bnSEDf7bETe2pS9fcg4jy7BLKzT0RHYSgMGJQ0dbpWxSzqEBo6DwnUWGqRsQ8h4AsDyR+ffxIc9HiqRFvJ5ShndMrtCjg/w08A8AM/UHABQ==
57
+ response:
58
+ status:
59
+ code: 200
60
+ message: OK
61
+ headers:
62
+ Cache-Control:
63
+ - max-age=0
64
+ Connection:
65
+ - close, Keep-Alive
66
+ Date:
67
+ - Fri, 22 Nov 2019 15:45:40 GMT
68
+ Pragma:
69
+ - no-cache
70
+ Server:
71
+ - pve-api-daemon/3.0
72
+ Content-Length:
73
+ - '13'
74
+ Content-Type:
75
+ - application/json;charset=UTF-8
76
+ Expires:
77
+ - Fri, 22 Nov 2019 15:45:40 GMT
78
+ body:
79
+ encoding: ASCII-8BIT
80
+ string: '{"data":null}'
81
+ http_version:
82
+ recorded_at: Fri, 22 Nov 2019 15:45:42 GMT
83
+ - request:
84
+ method: get
85
+ uri: https://192.168.56.101:8006/api2/json/nodes/pve/network
86
+ body:
87
+ encoding: US-ASCII
88
+ string: ''
89
+ headers:
90
+ User-Agent:
91
+ - fog-core/2.1.2
92
+ Accept:
93
+ - application/json
94
+ Cookie:
95
+ - PVEAuthCookie=PVE:root@pam:5DD802A4::o4yb4/NL7JEJueeGMREt4rkA/o7w+TkICAL3IqWM0lRC0mNWwDvolr0DL+ibedzVDgDCONn3ypTcBTMxnllJX52QvuTfX8Cy0BR2mfqGxWg6acsl0YvcRFIhlYaWaSHBN5yfe23wvdnoXtHYgEUWsIda00QYPzm2dWYfnUam/vuh+va9ypvZ3NATPbF0EBEHHa+k5oBdL5Ete77+YoQUhKC7rDtZaJ0EPSkzWin+/M8bnSEDf7bETe2pS9fcg4jy7BLKzT0RHYSgMGJQ0dbpWxSzqEBo6DwnUWGqRsQ8h4AsDyR+ffxIc9HiqRFvJ5ShndMrtCjg/w08A8AM/UHABQ==
96
+ response:
97
+ status:
98
+ code: 200
99
+ message: OK
100
+ headers:
101
+ Cache-Control:
102
+ - max-age=0
103
+ Connection:
104
+ - Keep-Alive
105
+ Date:
106
+ - Fri, 22 Nov 2019 15:45:40 GMT
107
+ Pragma:
108
+ - no-cache
109
+ Server:
110
+ - pve-api-daemon/3.0
111
+ Content-Length:
112
+ - '938'
113
+ Content-Type:
114
+ - application/json;charset=UTF-8
115
+ Expires:
116
+ - Fri, 22 Nov 2019 15:45:40 GMT
117
+ body:
118
+ encoding: ASCII-8BIT
119
+ string: '{"data":[{"netmask":"255.255.255.0","bridge_ports":"enp0s3","iface":"vmbr0","bridge_fd":"0","type":"bridge","families":["inet"],"method6":"manual","gateway":"10.0.3.2","cidr":"192.168.56.101/24","autostart":1,"active":1,"bridge_stp":"off","address":"192.168.56.101","priority":6,"method":"static"},{"method6":"manual","families":["inet"],"active":1,"exists":1,"method":"manual","priority":3,"type":"eth","iface":"enp0s3"},{"families":["inet"],"method6":"manual","priority":5,"method":"manual","iface":"enp0s10","type":"eth"},{"priority":4,"exists":1,"method":"manual","families":["inet"],"method6":"manual","iface":"enp0s8","type":"eth"}],"changes":"---
120
+ /etc/network/interfaces\t2019-11-22 16:41:42.032000000 +0100\n+++ /etc/network/interfaces.new\t2019-11-22
121
+ 16:45:40.668000000 +0100\n@@ -16,6 +16,8 @@\n \n iface enp0s8 inet manual\n
122
+ \n+iface enp0s10 inet manual\n+\n auto vmbr0\n iface vmbr0 inet static\n \taddress 192.168.56.101\n"}'
123
+ http_version:
124
+ recorded_at: Fri, 22 Nov 2019 15:45:42 GMT
125
+ - request:
126
+ method: post
127
+ uri: https://192.168.56.101:8006/api2/json/nodes/pve/network
128
+ body:
129
+ encoding: US-ASCII
130
+ string: iface=enp0s10&type=eth
131
+ headers:
132
+ User-Agent:
133
+ - fog-core/2.1.2
134
+ Accept:
135
+ - application/json
136
+ Csrfpreventiontoken:
137
+ - 5DD802A4:AMi8Xfhz+bFVs9s+yLXQA2wjOfxDZRfXaQz+eGYxzwU
138
+ Cookie:
139
+ - PVEAuthCookie=PVE:root@pam:5DD802A4::o4yb4/NL7JEJueeGMREt4rkA/o7w+TkICAL3IqWM0lRC0mNWwDvolr0DL+ibedzVDgDCONn3ypTcBTMxnllJX52QvuTfX8Cy0BR2mfqGxWg6acsl0YvcRFIhlYaWaSHBN5yfe23wvdnoXtHYgEUWsIda00QYPzm2dWYfnUam/vuh+va9ypvZ3NATPbF0EBEHHa+k5oBdL5Ete77+YoQUhKC7rDtZaJ0EPSkzWin+/M8bnSEDf7bETe2pS9fcg4jy7BLKzT0RHYSgMGJQ0dbpWxSzqEBo6DwnUWGqRsQ8h4AsDyR+ffxIc9HiqRFvJ5ShndMrtCjg/w08A8AM/UHABQ==
140
+ response:
141
+ status:
142
+ code: 400
143
+ message: Parameter verification failed.
144
+ headers:
145
+ Cache-Control:
146
+ - max-age=0
147
+ Connection:
148
+ - close
149
+ Date:
150
+ - Fri, 22 Nov 2019 15:45:40 GMT
151
+ Pragma:
152
+ - no-cache
153
+ Server:
154
+ - pve-api-daemon/3.0
155
+ Content-Length:
156
+ - '59'
157
+ Content-Type:
158
+ - application/json;charset=UTF-8
159
+ Expires:
160
+ - Fri, 22 Nov 2019 15:45:40 GMT
161
+ body:
162
+ encoding: ASCII-8BIT
163
+ string: '{"data":null,"errors":{"iface":"interface already exists"}}'
164
+ http_version:
165
+ recorded_at: Fri, 22 Nov 2019 15:45:42 GMT
166
+ - request:
167
+ method: get
168
+ uri: https://192.168.56.101:8006/api2/json/nodes/pve/network
169
+ body:
170
+ encoding: US-ASCII
171
+ string: ''
172
+ headers:
173
+ User-Agent:
174
+ - fog-core/2.1.2
175
+ Accept:
176
+ - application/json
177
+ Cookie:
178
+ - PVEAuthCookie=PVE:root@pam:5DD802A4::o4yb4/NL7JEJueeGMREt4rkA/o7w+TkICAL3IqWM0lRC0mNWwDvolr0DL+ibedzVDgDCONn3ypTcBTMxnllJX52QvuTfX8Cy0BR2mfqGxWg6acsl0YvcRFIhlYaWaSHBN5yfe23wvdnoXtHYgEUWsIda00QYPzm2dWYfnUam/vuh+va9ypvZ3NATPbF0EBEHHa+k5oBdL5Ete77+YoQUhKC7rDtZaJ0EPSkzWin+/M8bnSEDf7bETe2pS9fcg4jy7BLKzT0RHYSgMGJQ0dbpWxSzqEBo6DwnUWGqRsQ8h4AsDyR+ffxIc9HiqRFvJ5ShndMrtCjg/w08A8AM/UHABQ==
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
+ - Fri, 22 Nov 2019 15:45:40 GMT
190
+ Pragma:
191
+ - no-cache
192
+ Server:
193
+ - pve-api-daemon/3.0
194
+ Content-Length:
195
+ - '938'
196
+ Content-Type:
197
+ - application/json;charset=UTF-8
198
+ Expires:
199
+ - Fri, 22 Nov 2019 15:45:40 GMT
200
+ body:
201
+ encoding: ASCII-8BIT
202
+ string: '{"data":[{"netmask":"255.255.255.0","bridge_ports":"enp0s3","bridge_fd":"0","iface":"vmbr0","type":"bridge","families":["inet"],"method6":"manual","gateway":"10.0.3.2","cidr":"192.168.56.101/24","autostart":1,"active":1,"bridge_stp":"off","address":"192.168.56.101","priority":6,"method":"static"},{"iface":"enp0s10","type":"eth","method6":"manual","families":["inet"],"method":"manual","priority":5},{"type":"eth","iface":"enp0s8","method":"manual","exists":1,"priority":4,"method6":"manual","families":["inet"]},{"type":"eth","iface":"enp0s3","priority":3,"method":"manual","exists":1,"active":1,"families":["inet"],"method6":"manual"}],"changes":"---
203
+ /etc/network/interfaces\t2019-11-22 16:41:42.032000000 +0100\n+++ /etc/network/interfaces.new\t2019-11-22
204
+ 16:45:40.668000000 +0100\n@@ -16,6 +16,8 @@\n \n iface enp0s8 inet manual\n
205
+ \n+iface enp0s10 inet manual\n+\n auto vmbr0\n iface vmbr0 inet static\n \taddress 192.168.56.101\n"}'
206
+ http_version:
207
+ recorded_at: Fri, 22 Nov 2019 15:45:42 GMT
208
+ - request:
209
+ method: put
210
+ uri: https://192.168.56.101:8006/api2/json/nodes/pve/network/enp0s10
211
+ body:
212
+ encoding: US-ASCII
213
+ string: comments=test&type=eth
214
+ headers:
215
+ User-Agent:
216
+ - fog-core/2.1.2
217
+ Accept:
218
+ - application/json
219
+ Csrfpreventiontoken:
220
+ - 5DD802A4:AMi8Xfhz+bFVs9s+yLXQA2wjOfxDZRfXaQz+eGYxzwU
221
+ Cookie:
222
+ - PVEAuthCookie=PVE:root@pam:5DD802A4::o4yb4/NL7JEJueeGMREt4rkA/o7w+TkICAL3IqWM0lRC0mNWwDvolr0DL+ibedzVDgDCONn3ypTcBTMxnllJX52QvuTfX8Cy0BR2mfqGxWg6acsl0YvcRFIhlYaWaSHBN5yfe23wvdnoXtHYgEUWsIda00QYPzm2dWYfnUam/vuh+va9ypvZ3NATPbF0EBEHHa+k5oBdL5Ete77+YoQUhKC7rDtZaJ0EPSkzWin+/M8bnSEDf7bETe2pS9fcg4jy7BLKzT0RHYSgMGJQ0dbpWxSzqEBo6DwnUWGqRsQ8h4AsDyR+ffxIc9HiqRFvJ5ShndMrtCjg/w08A8AM/UHABQ==
223
+ response:
224
+ status:
225
+ code: 200
226
+ message: OK
227
+ headers:
228
+ Cache-Control:
229
+ - max-age=0
230
+ Connection:
231
+ - Keep-Alive, Keep-Alive
232
+ Date:
233
+ - Fri, 22 Nov 2019 15:45:40 GMT
234
+ Pragma:
235
+ - no-cache
236
+ Server:
237
+ - pve-api-daemon/3.0
238
+ Content-Length:
239
+ - '13'
240
+ Content-Type:
241
+ - application/json;charset=UTF-8
242
+ Expires:
243
+ - Fri, 22 Nov 2019 15:45:40 GMT
244
+ body:
245
+ encoding: ASCII-8BIT
246
+ string: '{"data":null}'
247
+ http_version:
248
+ recorded_at: Fri, 22 Nov 2019 15:45:42 GMT
249
+ - request:
250
+ method: post
251
+ uri: https://192.168.56.101:8006/api2/json/nodes/pve/status
252
+ body:
253
+ encoding: US-ASCII
254
+ string: command=reboot
255
+ headers:
256
+ User-Agent:
257
+ - fog-core/2.1.2
258
+ Accept:
259
+ - application/json
260
+ Csrfpreventiontoken:
261
+ - 5DD802A4:AMi8Xfhz+bFVs9s+yLXQA2wjOfxDZRfXaQz+eGYxzwU
262
+ Cookie:
263
+ - PVEAuthCookie=PVE:root@pam:5DD802A4::o4yb4/NL7JEJueeGMREt4rkA/o7w+TkICAL3IqWM0lRC0mNWwDvolr0DL+ibedzVDgDCONn3ypTcBTMxnllJX52QvuTfX8Cy0BR2mfqGxWg6acsl0YvcRFIhlYaWaSHBN5yfe23wvdnoXtHYgEUWsIda00QYPzm2dWYfnUam/vuh+va9ypvZ3NATPbF0EBEHHa+k5oBdL5Ete77+YoQUhKC7rDtZaJ0EPSkzWin+/M8bnSEDf7bETe2pS9fcg4jy7BLKzT0RHYSgMGJQ0dbpWxSzqEBo6DwnUWGqRsQ8h4AsDyR+ffxIc9HiqRFvJ5ShndMrtCjg/w08A8AM/UHABQ==
264
+ response:
265
+ status:
266
+ code: 200
267
+ message: OK
268
+ headers:
269
+ Cache-Control:
270
+ - max-age=0
271
+ Connection:
272
+ - close, Keep-Alive
273
+ Date:
274
+ - Fri, 22 Nov 2019 15:45:40 GMT
275
+ Pragma:
276
+ - no-cache
277
+ Server:
278
+ - pve-api-daemon/3.0
279
+ Content-Length:
280
+ - '13'
281
+ Content-Type:
282
+ - application/json;charset=UTF-8
283
+ Expires:
284
+ - Fri, 22 Nov 2019 15:45:40 GMT
285
+ body:
286
+ encoding: ASCII-8BIT
287
+ string: '{"data":null}'
288
+ http_version:
289
+ recorded_at: Fri, 22 Nov 2019 15:45:42 GMT
290
+ - request:
291
+ method: delete
292
+ uri: https://192.168.56.101:8006/api2/json/nodes/pve/network/enp0s10
293
+ body:
294
+ encoding: US-ASCII
295
+ string: ''
296
+ headers:
297
+ User-Agent:
298
+ - fog-core/2.1.2
299
+ Accept:
300
+ - application/json
301
+ Csrfpreventiontoken:
302
+ - 5DD802A4:AMi8Xfhz+bFVs9s+yLXQA2wjOfxDZRfXaQz+eGYxzwU
303
+ Cookie:
304
+ - PVEAuthCookie=PVE:root@pam:5DD802A4::o4yb4/NL7JEJueeGMREt4rkA/o7w+TkICAL3IqWM0lRC0mNWwDvolr0DL+ibedzVDgDCONn3ypTcBTMxnllJX52QvuTfX8Cy0BR2mfqGxWg6acsl0YvcRFIhlYaWaSHBN5yfe23wvdnoXtHYgEUWsIda00QYPzm2dWYfnUam/vuh+va9ypvZ3NATPbF0EBEHHa+k5oBdL5Ete77+YoQUhKC7rDtZaJ0EPSkzWin+/M8bnSEDf7bETe2pS9fcg4jy7BLKzT0RHYSgMGJQ0dbpWxSzqEBo6DwnUWGqRsQ8h4AsDyR+ffxIc9HiqRFvJ5ShndMrtCjg/w08A8AM/UHABQ==
305
+ response:
306
+ status:
307
+ code: 200
308
+ message: OK
309
+ headers:
310
+ Cache-Control:
311
+ - max-age=0
312
+ Connection:
313
+ - Keep-Alive, Keep-Alive
314
+ Date:
315
+ - Fri, 22 Nov 2019 15:46:41 GMT
316
+ Pragma:
317
+ - no-cache
318
+ Server:
319
+ - pve-api-daemon/3.0
320
+ Content-Length:
321
+ - '13'
322
+ Content-Type:
323
+ - application/json;charset=UTF-8
324
+ Expires:
325
+ - Fri, 22 Nov 2019 15:46:41 GMT
326
+ body:
327
+ encoding: ASCII-8BIT
328
+ string: '{"data":null}'
329
+ http_version:
330
+ recorded_at: Fri, 22 Nov 2019 15:46:43 GMT
331
+ - request:
332
+ method: post
333
+ uri: https://192.168.56.101:8006/api2/json/nodes/pve/status
334
+ body:
335
+ encoding: US-ASCII
336
+ string: command=reboot
337
+ headers:
338
+ User-Agent:
339
+ - fog-core/2.1.2
340
+ Accept:
341
+ - application/json
342
+ Csrfpreventiontoken:
343
+ - 5DD802A4:AMi8Xfhz+bFVs9s+yLXQA2wjOfxDZRfXaQz+eGYxzwU
344
+ Cookie:
345
+ - PVEAuthCookie=PVE:root@pam:5DD802A4::o4yb4/NL7JEJueeGMREt4rkA/o7w+TkICAL3IqWM0lRC0mNWwDvolr0DL+ibedzVDgDCONn3ypTcBTMxnllJX52QvuTfX8Cy0BR2mfqGxWg6acsl0YvcRFIhlYaWaSHBN5yfe23wvdnoXtHYgEUWsIda00QYPzm2dWYfnUam/vuh+va9ypvZ3NATPbF0EBEHHa+k5oBdL5Ete77+YoQUhKC7rDtZaJ0EPSkzWin+/M8bnSEDf7bETe2pS9fcg4jy7BLKzT0RHYSgMGJQ0dbpWxSzqEBo6DwnUWGqRsQ8h4AsDyR+ffxIc9HiqRFvJ5ShndMrtCjg/w08A8AM/UHABQ==
346
+ response:
347
+ status:
348
+ code: 200
349
+ message: OK
350
+ headers:
351
+ Cache-Control:
352
+ - max-age=0
353
+ Connection:
354
+ - close, Keep-Alive
355
+ Date:
356
+ - Fri, 22 Nov 2019 15:46:41 GMT
357
+ Pragma:
358
+ - no-cache
359
+ Server:
360
+ - pve-api-daemon/3.0
361
+ Content-Length:
362
+ - '13'
363
+ Content-Type:
364
+ - application/json;charset=UTF-8
365
+ Expires:
366
+ - Fri, 22 Nov 2019 15:46:41 GMT
367
+ body:
368
+ encoding: ASCII-8BIT
369
+ string: '{"data":null}'
370
+ http_version:
371
+ recorded_at: Fri, 22 Nov 2019 15:46:43 GMT
372
+ 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-----
@@ -0,0 +1,42 @@
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', Fog::Proxmox::Hash.flatten(net_vm)
34
+ end
35
+ end
36
+
37
+ describe '#stringify' do
38
+ it 'returns stringify hash' do
39
+ assert_equal 'id=net0,model=virtio,macaddr=66:89:C5:59:AA:96', Fog::Proxmox::Hash.stringify(net)
40
+ end
41
+ end
42
+ end