knife-ionoscloud 5.0.0.beta.1

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 (272) hide show
  1. checksums.yaml +7 -0
  2. data/.gitbook.yaml +4 -0
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +54 -0
  4. data/.github/ISSUE_TEMPLATE/config.yml +5 -0
  5. data/.github/ISSUE_TEMPLATE/feature_request.md +51 -0
  6. data/.github/workflows/ci.yml +38 -0
  7. data/.github/workflows/publish.yml +58 -0
  8. data/.gitignore +26 -0
  9. data/.rubocop.yml +148 -0
  10. data/Gemfile +4 -0
  11. data/LICENSE.txt +201 -0
  12. data/Rakefile +7 -0
  13. data/docs/README.md +67 -0
  14. data/docs/changelog.md +1 -0
  15. data/docs/docs_generator.rb +107 -0
  16. data/docs/subcommands/backupunit_create.md +38 -0
  17. data/docs/subcommands/backupunit_delete.md +26 -0
  18. data/docs/subcommands/backupunit_list.md +26 -0
  19. data/docs/subcommands/backupunit_ssourl.md +30 -0
  20. data/docs/subcommands/composite_server_create.md +97 -0
  21. data/docs/subcommands/contract_list.md +26 -0
  22. data/docs/subcommands/datacenter_create.md +41 -0
  23. data/docs/subcommands/datacenter_delete.md +26 -0
  24. data/docs/subcommands/datacenter_list.md +26 -0
  25. data/docs/subcommands/firewall_create.md +65 -0
  26. data/docs/subcommands/firewall_delete.md +38 -0
  27. data/docs/subcommands/firewall_list.md +38 -0
  28. data/docs/subcommands/group_create.md +48 -0
  29. data/docs/subcommands/group_delete.md +26 -0
  30. data/docs/subcommands/group_get.md +30 -0
  31. data/docs/subcommands/group_list.md +29 -0
  32. data/docs/subcommands/group_user_add.md +30 -0
  33. data/docs/subcommands/group_user_remove.md +30 -0
  34. data/docs/subcommands/image_list.md +26 -0
  35. data/docs/subcommands/ipblock_create.md +37 -0
  36. data/docs/subcommands/ipblock_delete.md +26 -0
  37. data/docs/subcommands/ipblock_list.md +26 -0
  38. data/docs/subcommands/ipfailover_add.md +46 -0
  39. data/docs/subcommands/ipfailover_remove.md +42 -0
  40. data/docs/subcommands/k8s_create.md +39 -0
  41. data/docs/subcommands/k8s_delete.md +26 -0
  42. data/docs/subcommands/k8s_list.md +26 -0
  43. data/docs/subcommands/kubeconfig_get.md +30 -0
  44. data/docs/subcommands/label_add.md +45 -0
  45. data/docs/subcommands/label_list.md +35 -0
  46. data/docs/subcommands/label_remove.md +37 -0
  47. data/docs/subcommands/lan_create.md +36 -0
  48. data/docs/subcommands/lan_delete.md +30 -0
  49. data/docs/subcommands/lan_list.md +30 -0
  50. data/docs/subcommands/loadbalancer_create.md +43 -0
  51. data/docs/subcommands/loadbalancer_delete.md +30 -0
  52. data/docs/subcommands/loadbalancer_get.md +34 -0
  53. data/docs/subcommands/loadbalancer_list.md +30 -0
  54. data/docs/subcommands/loadbalancer_nic_add.md +34 -0
  55. data/docs/subcommands/loadbalancer_nic_remove.md +34 -0
  56. data/docs/subcommands/location_list.md +26 -0
  57. data/docs/subcommands/nic_create.md +51 -0
  58. data/docs/subcommands/nic_delete.md +34 -0
  59. data/docs/subcommands/nic_list.md +34 -0
  60. data/docs/subcommands/node_delete.md +34 -0
  61. data/docs/subcommands/node_list.md +34 -0
  62. data/docs/subcommands/node_replace.md +36 -0
  63. data/docs/subcommands/nodepool_create.md +87 -0
  64. data/docs/subcommands/nodepool_delete.md +30 -0
  65. data/docs/subcommands/nodepool_list.md +30 -0
  66. data/docs/subcommands/pcc_create.md +38 -0
  67. data/docs/subcommands/pcc_delete.md +26 -0
  68. data/docs/subcommands/pcc_list.md +26 -0
  69. data/docs/subcommands/request_list.md +32 -0
  70. data/docs/subcommands/request_status.md +30 -0
  71. data/docs/subcommands/request_wait.md +30 -0
  72. data/docs/subcommands/resource_list.md +34 -0
  73. data/docs/subcommands/s3key_create.md +30 -0
  74. data/docs/subcommands/s3key_delete.md +30 -0
  75. data/docs/subcommands/s3key_list.md +30 -0
  76. data/docs/subcommands/server_create.md +55 -0
  77. data/docs/subcommands/server_delete.md +32 -0
  78. data/docs/subcommands/server_list.md +30 -0
  79. data/docs/subcommands/server_reboot.md +30 -0
  80. data/docs/subcommands/server_start.md +30 -0
  81. data/docs/subcommands/server_stop.md +30 -0
  82. data/docs/subcommands/share_create.md +40 -0
  83. data/docs/subcommands/share_delete.md +30 -0
  84. data/docs/subcommands/share_list.md +30 -0
  85. data/docs/subcommands/snapshot_create.md +34 -0
  86. data/docs/subcommands/snapshot_delete.md +26 -0
  87. data/docs/subcommands/snapshot_list.md +26 -0
  88. data/docs/subcommands/snapshot_restore.md +38 -0
  89. data/docs/subcommands/user_create.md +49 -0
  90. data/docs/subcommands/user_delete.md +26 -0
  91. data/docs/subcommands/user_list.md +29 -0
  92. data/docs/subcommands/user_ssourl.md +30 -0
  93. data/docs/subcommands/volume_attach.md +34 -0
  94. data/docs/subcommands/volume_create.md +63 -0
  95. data/docs/subcommands/volume_delete.md +30 -0
  96. data/docs/subcommands/volume_detach.md +36 -0
  97. data/docs/subcommands/volume_list.md +33 -0
  98. data/docs/summary.md +89 -0
  99. data/docs/templates/subcommand_doc.mustache +26 -0
  100. data/docs/templates/summary.mustache +10 -0
  101. data/knife-ionoscloud.gemspec +27 -0
  102. data/lib/chef/knife/ionoscloud_backupunit_create.rb +63 -0
  103. data/lib/chef/knife/ionoscloud_backupunit_delete.rb +55 -0
  104. data/lib/chef/knife/ionoscloud_backupunit_list.rb +41 -0
  105. data/lib/chef/knife/ionoscloud_backupunit_ssourl.rb +39 -0
  106. data/lib/chef/knife/ionoscloud_base.rb +76 -0
  107. data/lib/chef/knife/ionoscloud_composite_server_create.rb +217 -0
  108. data/lib/chef/knife/ionoscloud_contract_list.rb +50 -0
  109. data/lib/chef/knife/ionoscloud_datacenter_create.rb +66 -0
  110. data/lib/chef/knife/ionoscloud_datacenter_delete.rb +56 -0
  111. data/lib/chef/knife/ionoscloud_datacenter_list.rb +50 -0
  112. data/lib/chef/knife/ionoscloud_firewall_create.rb +135 -0
  113. data/lib/chef/knife/ionoscloud_firewall_delete.rb +76 -0
  114. data/lib/chef/knife/ionoscloud_firewall_list.rb +72 -0
  115. data/lib/chef/knife/ionoscloud_group_create.rb +89 -0
  116. data/lib/chef/knife/ionoscloud_group_delete.rb +61 -0
  117. data/lib/chef/knife/ionoscloud_group_get.rb +46 -0
  118. data/lib/chef/knife/ionoscloud_group_list.rb +62 -0
  119. data/lib/chef/knife/ionoscloud_group_user_add.rb +72 -0
  120. data/lib/chef/knife/ionoscloud_group_user_remove.rb +72 -0
  121. data/lib/chef/knife/ionoscloud_image_list.rb +47 -0
  122. data/lib/chef/knife/ionoscloud_ipblock_create.rb +63 -0
  123. data/lib/chef/knife/ionoscloud_ipblock_delete.rb +50 -0
  124. data/lib/chef/knife/ionoscloud_ipblock_list.rb +42 -0
  125. data/lib/chef/knife/ionoscloud_ipfailover_add.rb +76 -0
  126. data/lib/chef/knife/ionoscloud_ipfailover_remove.rb +76 -0
  127. data/lib/chef/knife/ionoscloud_k8s_create.rb +79 -0
  128. data/lib/chef/knife/ionoscloud_k8s_delete.rb +67 -0
  129. data/lib/chef/knife/ionoscloud_k8s_list.rb +45 -0
  130. data/lib/chef/knife/ionoscloud_kubeconfig_get.rb +37 -0
  131. data/lib/chef/knife/ionoscloud_label_add.rb +84 -0
  132. data/lib/chef/knife/ionoscloud_label_list.rb +83 -0
  133. data/lib/chef/knife/ionoscloud_label_remove.rb +77 -0
  134. data/lib/chef/knife/ionoscloud_lan_create.rb +69 -0
  135. data/lib/chef/knife/ionoscloud_lan_delete.rb +54 -0
  136. data/lib/chef/knife/ionoscloud_lan_list.rb +46 -0
  137. data/lib/chef/knife/ionoscloud_loadbalancer_create.rb +87 -0
  138. data/lib/chef/knife/ionoscloud_loadbalancer_delete.rb +68 -0
  139. data/lib/chef/knife/ionoscloud_loadbalancer_get.rb +51 -0
  140. data/lib/chef/knife/ionoscloud_loadbalancer_list.rb +50 -0
  141. data/lib/chef/knife/ionoscloud_loadbalancer_nic_add.rb +75 -0
  142. data/lib/chef/knife/ionoscloud_loadbalancer_nic_remove.rb +76 -0
  143. data/lib/chef/knife/ionoscloud_location_list.rb +38 -0
  144. data/lib/chef/knife/ionoscloud_nic_create.rb +104 -0
  145. data/lib/chef/knife/ionoscloud_nic_delete.rb +62 -0
  146. data/lib/chef/knife/ionoscloud_nic_list.rb +57 -0
  147. data/lib/chef/knife/ionoscloud_node_delete.rb +65 -0
  148. data/lib/chef/knife/ionoscloud_node_list.rb +55 -0
  149. data/lib/chef/knife/ionoscloud_node_replace.rb +54 -0
  150. data/lib/chef/knife/ionoscloud_nodepool_create.rb +163 -0
  151. data/lib/chef/knife/ionoscloud_nodepool_delete.rb +60 -0
  152. data/lib/chef/knife/ionoscloud_nodepool_list.rb +51 -0
  153. data/lib/chef/knife/ionoscloud_pcc_create.rb +68 -0
  154. data/lib/chef/knife/ionoscloud_pcc_delete.rb +57 -0
  155. data/lib/chef/knife/ionoscloud_pcc_list.rb +41 -0
  156. data/lib/chef/knife/ionoscloud_request_list.rb +94 -0
  157. data/lib/chef/knife/ionoscloud_request_status.rb +37 -0
  158. data/lib/chef/knife/ionoscloud_request_wait.rb +41 -0
  159. data/lib/chef/knife/ionoscloud_resource_list.rb +81 -0
  160. data/lib/chef/knife/ionoscloud_s3key_create.rb +45 -0
  161. data/lib/chef/knife/ionoscloud_s3key_delete.rb +57 -0
  162. data/lib/chef/knife/ionoscloud_s3key_list.rb +46 -0
  163. data/lib/chef/knife/ionoscloud_server_create.rb +104 -0
  164. data/lib/chef/knife/ionoscloud_server_delete.rb +62 -0
  165. data/lib/chef/knife/ionoscloud_server_list.rb +58 -0
  166. data/lib/chef/knife/ionoscloud_server_reboot.rb +45 -0
  167. data/lib/chef/knife/ionoscloud_server_start.rb +43 -0
  168. data/lib/chef/knife/ionoscloud_server_stop.rb +44 -0
  169. data/lib/chef/knife/ionoscloud_share_create.rb +71 -0
  170. data/lib/chef/knife/ionoscloud_share_delete.rb +55 -0
  171. data/lib/chef/knife/ionoscloud_share_list.rb +47 -0
  172. data/lib/chef/knife/ionoscloud_snapshot_create.rb +58 -0
  173. data/lib/chef/knife/ionoscloud_snapshot_delete.rb +54 -0
  174. data/lib/chef/knife/ionoscloud_snapshot_list.rb +45 -0
  175. data/lib/chef/knife/ionoscloud_snapshot_restore.rb +69 -0
  176. data/lib/chef/knife/ionoscloud_user_create.rb +83 -0
  177. data/lib/chef/knife/ionoscloud_user_delete.rb +56 -0
  178. data/lib/chef/knife/ionoscloud_user_list.rb +60 -0
  179. data/lib/chef/knife/ionoscloud_user_ssourl.rb +37 -0
  180. data/lib/chef/knife/ionoscloud_volume_attach.rb +52 -0
  181. data/lib/chef/knife/ionoscloud_volume_create.rb +133 -0
  182. data/lib/chef/knife/ionoscloud_volume_delete.rb +67 -0
  183. data/lib/chef/knife/ionoscloud_volume_detach.rb +77 -0
  184. data/lib/chef/knife/ionoscloud_volume_list.rb +70 -0
  185. data/lib/knife-ionoscloud/version.rb +6 -0
  186. data/spec/chef/knife/ionoscloud_backupunit_create_spec.rb +65 -0
  187. data/spec/chef/knife/ionoscloud_backupunit_delete_spec.rb +101 -0
  188. data/spec/chef/knife/ionoscloud_backupunit_list_spec.rb +72 -0
  189. data/spec/chef/knife/ionoscloud_backupunit_ssourl_spec.rb +93 -0
  190. data/spec/chef/knife/ionoscloud_base_spec.rb +157 -0
  191. data/spec/chef/knife/ionoscloud_composite_server_create_spec.rb +111 -0
  192. data/spec/chef/knife/ionoscloud_contract_list_spec.rb +81 -0
  193. data/spec/chef/knife/ionoscloud_datacenter_create_spec.rb +72 -0
  194. data/spec/chef/knife/ionoscloud_datacenter_delete_spec.rb +102 -0
  195. data/spec/chef/knife/ionoscloud_datacenter_list_spec.rb +76 -0
  196. data/spec/chef/knife/ionoscloud_firewall_create_spec.rb +90 -0
  197. data/spec/chef/knife/ionoscloud_firewall_delete_spec.rb +117 -0
  198. data/spec/chef/knife/ionoscloud_firewall_list_spec.rb +90 -0
  199. data/spec/chef/knife/ionoscloud_group_create_spec.rb +76 -0
  200. data/spec/chef/knife/ionoscloud_group_delete_spec.rb +109 -0
  201. data/spec/chef/knife/ionoscloud_group_get_spec.rb +73 -0
  202. data/spec/chef/knife/ionoscloud_group_list_spec.rb +115 -0
  203. data/spec/chef/knife/ionoscloud_group_user_add_spec.rb +134 -0
  204. data/spec/chef/knife/ionoscloud_group_user_remove_spec.rb +130 -0
  205. data/spec/chef/knife/ionoscloud_image_list_spec.rb +75 -0
  206. data/spec/chef/knife/ionoscloud_ipblock_create_spec.rb +72 -0
  207. data/spec/chef/knife/ionoscloud_ipblock_delete_spec.rb +102 -0
  208. data/spec/chef/knife/ionoscloud_ipblock_list_spec.rb +74 -0
  209. data/spec/chef/knife/ionoscloud_ipfailover_add_spec.rb +83 -0
  210. data/spec/chef/knife/ionoscloud_ipfailover_remove_spec.rb +122 -0
  211. data/spec/chef/knife/ionoscloud_k8s_create_spec.rb +83 -0
  212. data/spec/chef/knife/ionoscloud_k8s_delete_spec.rb +172 -0
  213. data/spec/chef/knife/ionoscloud_k8s_list_spec.rb +73 -0
  214. data/spec/chef/knife/ionoscloud_kubeconfig_get_spec.rb +91 -0
  215. data/spec/chef/knife/ionoscloud_label_add_spec.rb +287 -0
  216. data/spec/chef/knife/ionoscloud_label_list_spec.rb +337 -0
  217. data/spec/chef/knife/ionoscloud_label_remove_spec.rb +391 -0
  218. data/spec/chef/knife/ionoscloud_lan_create_spec.rb +77 -0
  219. data/spec/chef/knife/ionoscloud_lan_delete_spec.rb +103 -0
  220. data/spec/chef/knife/ionoscloud_lan_list_spec.rb +73 -0
  221. data/spec/chef/knife/ionoscloud_loadbalancer_create_spec.rb +82 -0
  222. data/spec/chef/knife/ionoscloud_loadbalancer_delete_spec.rb +107 -0
  223. data/spec/chef/knife/ionoscloud_loadbalancer_get_spec.rb +68 -0
  224. data/spec/chef/knife/ionoscloud_loadbalancer_list_spec.rb +74 -0
  225. data/spec/chef/knife/ionoscloud_loadbalancer_nic_add_spec.rb +128 -0
  226. data/spec/chef/knife/ionoscloud_loadbalancer_nic_remove_spec.rb +124 -0
  227. data/spec/chef/knife/ionoscloud_location_list_spec.rb +67 -0
  228. data/spec/chef/knife/ionoscloud_nic_create_spec.rb +85 -0
  229. data/spec/chef/knife/ionoscloud_nic_delete_spec.rb +108 -0
  230. data/spec/chef/knife/ionoscloud_nic_list_spec.rb +83 -0
  231. data/spec/chef/knife/ionoscloud_node_delete_spec.rb +107 -0
  232. data/spec/chef/knife/ionoscloud_node_list_spec.rb +75 -0
  233. data/spec/chef/knife/ionoscloud_node_replace_spec.rb +94 -0
  234. data/spec/chef/knife/ionoscloud_nodepool_create_spec.rb +99 -0
  235. data/spec/chef/knife/ionoscloud_nodepool_delete_spec.rb +106 -0
  236. data/spec/chef/knife/ionoscloud_nodepool_list_spec.rb +76 -0
  237. data/spec/chef/knife/ionoscloud_pcc_create_spec.rb +70 -0
  238. data/spec/chef/knife/ionoscloud_pcc_delete_spec.rb +106 -0
  239. data/spec/chef/knife/ionoscloud_pcc_list_spec.rb +69 -0
  240. data/spec/chef/knife/ionoscloud_request_list_spec.rb +165 -0
  241. data/spec/chef/knife/ionoscloud_request_status_spec.rb +92 -0
  242. data/spec/chef/knife/ionoscloud_request_wait_spec.rb +74 -0
  243. data/spec/chef/knife/ionoscloud_resource_list_spec.rb +155 -0
  244. data/spec/chef/knife/ionoscloud_s3key_create_spec.rb +64 -0
  245. data/spec/chef/knife/ionoscloud_s3key_delete_spec.rb +103 -0
  246. data/spec/chef/knife/ionoscloud_s3key_list_spec.rb +70 -0
  247. data/spec/chef/knife/ionoscloud_server_create_spec.rb +84 -0
  248. data/spec/chef/knife/ionoscloud_server_delete_spec.rb +108 -0
  249. data/spec/chef/knife/ionoscloud_server_list_spec.rb +85 -0
  250. data/spec/chef/knife/ionoscloud_server_reboot_spec.rb +95 -0
  251. data/spec/chef/knife/ionoscloud_server_start_spec.rb +95 -0
  252. data/spec/chef/knife/ionoscloud_server_stop_spec.rb +95 -0
  253. data/spec/chef/knife/ionoscloud_share_create_spec.rb +68 -0
  254. data/spec/chef/knife/ionoscloud_share_delete_spec.rb +103 -0
  255. data/spec/chef/knife/ionoscloud_share_list_spec.rb +70 -0
  256. data/spec/chef/knife/ionoscloud_snapshot_create_spec.rb +74 -0
  257. data/spec/chef/knife/ionoscloud_snapshot_delete_spec.rb +103 -0
  258. data/spec/chef/knife/ionoscloud_snapshot_list_spec.rb +73 -0
  259. data/spec/chef/knife/ionoscloud_snapshot_restore_spec.rb +78 -0
  260. data/spec/chef/knife/ionoscloud_user_create_spec.rb +73 -0
  261. data/spec/chef/knife/ionoscloud_user_delete_spec.rb +104 -0
  262. data/spec/chef/knife/ionoscloud_user_list_spec.rb +103 -0
  263. data/spec/chef/knife/ionoscloud_user_ssourl_spec.rb +93 -0
  264. data/spec/chef/knife/ionoscloud_volume_attach_spec.rb +99 -0
  265. data/spec/chef/knife/ionoscloud_volume_create_spec.rb +143 -0
  266. data/spec/chef/knife/ionoscloud_volume_delete_spec.rb +108 -0
  267. data/spec/chef/knife/ionoscloud_volume_detach_spec.rb +110 -0
  268. data/spec/chef/knife/ionoscloud_volume_list_spec.rb +118 -0
  269. data/spec/spec_helper.rb +702 -0
  270. data/spec/test.sh +3 -0
  271. data/summary.md +0 -0
  272. metadata +460 -0
@@ -0,0 +1,45 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudServerReboot < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud server reboot SERVER_ID [SERVER_ID] (options)'
9
+
10
+ option :datacenter_id,
11
+ short: '-D DATACENTER_ID',
12
+ long: '--datacenter-id DATACENTER_ID',
13
+ description: 'ID of the data center'
14
+
15
+ attr_reader :description, :required_options
16
+
17
+ def initialize(args = [])
18
+ super(args)
19
+ @description =
20
+ 'This will force a hard reboot of the server. Do not use this method '\
21
+ 'if you want to gracefully reboot the machine. This is the equivalent '\
22
+ 'of powering off the machine and turning it back on.'
23
+ @required_options = [:datacenter_id, :ionoscloud_username, :ionoscloud_password]
24
+ end
25
+
26
+ def run
27
+ $stdout.sync = true
28
+ validate_required_params(@required_options, config)
29
+
30
+ server_api = Ionoscloud::ServerApi.new(api_client)
31
+
32
+ @name_args.each do |server_id|
33
+ begin
34
+ _, _, headers = server_api.datacenters_servers_reboot_post_with_http_info(config[:datacenter_id], server_id)
35
+ rescue Ionoscloud::ApiError => err
36
+ raise err unless err.code == 404
37
+ ui.error("Server ID #{server_id} not found. Skipping.")
38
+ next
39
+ end
40
+ ui.warn("Server #{server_id} is rebooting. Request ID: #{get_request_id headers}")
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,43 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudServerStart < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud server start SERVER_ID [SERVER_ID] (options)'
9
+
10
+ option :datacenter_id,
11
+ short: '-D DATACENTER_ID',
12
+ long: '--datacenter-id DATACENTER_ID',
13
+ description: 'ID of the data center'
14
+
15
+ attr_reader :description, :required_options
16
+
17
+ def initialize(args = [])
18
+ super(args)
19
+ @description =
20
+ 'This will start a server. If the server\'s public IP was deallocated then a new IP will be assigned.'
21
+ @required_options = [:datacenter_id, :ionoscloud_username, :ionoscloud_password]
22
+ end
23
+
24
+ def run
25
+ $stdout.sync = true
26
+ validate_required_params(@required_options, config)
27
+
28
+ server_api = Ionoscloud::ServerApi.new(api_client)
29
+
30
+ @name_args.each do |server_id|
31
+ begin
32
+ _, _, headers = server_api.datacenters_servers_start_post_with_http_info(config[:datacenter_id], server_id)
33
+ rescue Ionoscloud::ApiError => err
34
+ raise err unless err.code == 404
35
+ ui.error("Server ID #{server_id} not found. Skipping.")
36
+ next
37
+ end
38
+ ui.info("Server #{server_id} is starting. Request ID: #{get_request_id headers}")
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,44 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudServerStop < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud server stop SERVER_ID [SERVER_ID] (options)'
9
+
10
+ option :datacenter_id,
11
+ short: '-D DATACENTER_ID',
12
+ long: '--datacenter-id DATACENTER_ID',
13
+ description: 'ID of the data center'
14
+
15
+ attr_reader :description, :required_options
16
+
17
+ def initialize(args = [])
18
+ super(args)
19
+ @description =
20
+ 'This will stop a server. The machine will be forcefully powered off, '\
21
+ 'billing will cease, and the public IP, if one is allocated, will be deallocated.'
22
+ @required_options = [:datacenter_id, :ionoscloud_username, :ionoscloud_password]
23
+ end
24
+
25
+ def run
26
+ $stdout.sync = true
27
+ validate_required_params(@required_options, config)
28
+
29
+ server_api = Ionoscloud::ServerApi.new(api_client)
30
+
31
+ @name_args.each do |server_id|
32
+ begin
33
+ _, _, headers = server_api.datacenters_servers_stop_post_with_http_info(config[:datacenter_id], server_id)
34
+ rescue Ionoscloud::ApiError => err
35
+ raise err unless err.code == 404
36
+ ui.error("Server ID #{server_id} not found. Skipping.")
37
+ next
38
+ end
39
+ ui.warn("Server #{server_id} is stopping. Request ID: #{get_request_id headers}")
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,71 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudShareCreate < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud share create (options)'
9
+
10
+ option :group_id,
11
+ short: '-G GROUP_ID',
12
+ long: '--group-id GROUP_ID',
13
+ description: 'ID of the group.'
14
+
15
+ option :resource_id,
16
+ short: '-R RESOURCE_ID',
17
+ long: '--resource-id RESOURCE_ID',
18
+ description: 'The ID of the resource.'
19
+
20
+ option :edit_privilege,
21
+ short: '-e',
22
+ long: '--edit',
23
+ description: 'The group has permission to edit privileges on this resource.'
24
+
25
+ option :share_privilege,
26
+ short: '-s',
27
+ long: '--share',
28
+ description: 'The group has permission to share this resource.'
29
+
30
+ attr_reader :description, :required_options
31
+
32
+ def initialize(args = [])
33
+ super(args)
34
+ @description =
35
+ 'Adds a specific resource share to a group and optionally allows the setting of permissions '\
36
+ 'for that resource. As an example, you might use this to grant permissions to use an image '\
37
+ 'or snapshot to a specific group.'
38
+ @required_options = [:group_id, :resource_id, :ionoscloud_username, :ionoscloud_password]
39
+ end
40
+
41
+ def run
42
+ $stdout.sync = true
43
+ validate_required_params(@required_options, config)
44
+
45
+ print "#{ui.color('Sharing Resource...', :magenta)}"
46
+
47
+ user_management_api = Ionoscloud::UserManagementApi.new(api_client)
48
+
49
+ share, _, headers = user_management_api.um_groups_shares_post_with_http_info(
50
+ config[:group_id],
51
+ config[:resource_id],
52
+ {
53
+ properties: {
54
+ editPrivilege: config[:edit_privilege],
55
+ sharePrivilege: config[:share_privilege],
56
+ }.compact,
57
+ },
58
+ )
59
+
60
+ dot = ui.color('.', :magenta)
61
+ api_client.wait_for { print dot; is_done? get_request_id headers }
62
+
63
+ puts "\n"
64
+ puts "#{ui.color('ID', :cyan)}: #{share.id}"
65
+ puts "#{ui.color('Edit Privilege', :cyan)}: #{share.properties.edit_privilege.to_s}"
66
+ puts "#{ui.color('Share Privilege', :cyan)}: #{share.properties.share_privilege.to_s}"
67
+ puts 'done'
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,55 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudShareDelete < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud server delete SHARE_ID [SHARE_ID] (options)'
9
+
10
+ option :group_id,
11
+ short: '-G GROUP_ID',
12
+ long: '--group-id GROUP_ID',
13
+ description: 'ID of the group.'
14
+
15
+ attr_reader :description, :required_options
16
+
17
+ def initialize(args = [])
18
+ super(args)
19
+ @description =
20
+ 'Removes a resource share from a specified group.'
21
+ @required_options = [:group_id, :ionoscloud_username, :ionoscloud_password]
22
+ end
23
+
24
+ def run
25
+ $stdout.sync = true
26
+ validate_required_params(@required_options, config)
27
+
28
+ user_management_api = Ionoscloud::UserManagementApi.new(api_client)
29
+
30
+ @name_args.each do |share_id|
31
+ begin
32
+ share = user_management_api.um_groups_shares_find_by_resource_id(config[:group_id], share_id)
33
+ rescue Ionoscloud::ApiError => err
34
+ raise err unless err.code == 404
35
+ ui.error("Resource Share ID #{share_id} not found. Skipping.")
36
+ next
37
+ end
38
+
39
+ msg_pair('ID', share.id)
40
+ msg_pair('Edit Privilege', share.properties.edit_privilege.to_s)
41
+ msg_pair('Share Privilege', share.properties.share_privilege.to_s)
42
+
43
+ begin
44
+ confirm('Do you really want to delete this Resource Share')
45
+ rescue SystemExit => exc
46
+ next
47
+ end
48
+
49
+ _, _, headers = user_management_api.um_groups_shares_delete_with_http_info(config[:group_id], share_id)
50
+ ui.warn("Deleted Resource Share #{share.id}. Request ID: #{get_request_id headers}")
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,47 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudShareList < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud share list (options)'
9
+
10
+ option :group_id,
11
+ short: '-G GROUP_ID',
12
+ long: '--group-id GROUP_ID',
13
+ description: 'ID of the group.'
14
+
15
+ attr_reader :description, :required_options
16
+
17
+ def initialize(args = [])
18
+ super(args)
19
+ @description =
20
+ 'Retrieves a full list of all the resources that are shared through this '\
21
+ 'group and lists the permissions granted to the group members for each shared resource.'
22
+ @required_options = [:group_id, :ionoscloud_username, :ionoscloud_password]
23
+ end
24
+
25
+ def run
26
+ $stdout.sync = true
27
+ validate_required_params(@required_options, config)
28
+
29
+ share_list = [
30
+ ui.color('ID', :bold),
31
+ ui.color('Edit Privilege', :bold),
32
+ ui.color('Share Privilege', :bold),
33
+ ]
34
+
35
+ user_management_api = Ionoscloud::UserManagementApi.new(api_client)
36
+
37
+ user_management_api.um_groups_shares_get(config[:group_id], { depth: 1 }).items.each do |share|
38
+ share_list << share.id
39
+ share_list << share.properties.edit_privilege.to_s
40
+ share_list << share.properties.share_privilege.to_s
41
+ end
42
+
43
+ puts ui.list(share_list, :uneven_columns_across, 3)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,58 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudSnapshotCreate < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud snapshot create (options)'
9
+
10
+ option :datacenter_id,
11
+ short: '-D DATACENTER_ID',
12
+ long: '--datacenter DATACENTER_ID',
13
+ description: 'ID of the Datacenter'
14
+
15
+ option :volume_id,
16
+ short: '-V VOLUME_ID',
17
+ long: '--volume VOLUME_ID',
18
+ description: 'ID of the Volume'
19
+
20
+ attr_reader :description, :required_options
21
+
22
+ def initialize(args = [])
23
+ super(args)
24
+ @description =
25
+ 'Creates a snapshot of a volume within the virtual data center. '\
26
+ 'You can use a snapshot to create a new storage volume or to restore a storage volume.'
27
+ @required_options = [:datacenter_id, :volume_id, :ionoscloud_username, :ionoscloud_password]
28
+ end
29
+
30
+ def run
31
+ $stdout.sync = true
32
+ validate_required_params(@required_options, config)
33
+
34
+ print "#{ui.color('Creating Snapshot...', :magenta)}"
35
+
36
+ volume_api = Ionoscloud::VolumeApi.new(api_client)
37
+
38
+ snapshot, _, headers = volume_api.datacenters_volumes_create_snapshot_post_with_http_info(
39
+ config[:datacenter_id],
40
+ config[:volume_id],
41
+ )
42
+
43
+ dot = ui.color('.', :magenta)
44
+ api_client.wait_for { print dot; is_done? get_request_id headers }
45
+
46
+ snapshot = Ionoscloud::SnapshotApi.new(api_client).snapshots_find_by_id(snapshot.id)
47
+
48
+ puts "\n"
49
+ puts "#{ui.color('ID', :cyan)}: #{snapshot.id}"
50
+ puts "#{ui.color('Name', :cyan)}: #{snapshot.properties.name}"
51
+ puts "#{ui.color('Description', :cyan)}: #{snapshot.properties.description}"
52
+ puts "#{ui.color('Location', :cyan)}: #{snapshot.properties.location}"
53
+ puts "#{ui.color('Size', :cyan)}: #{snapshot.properties.size.to_s}"
54
+ puts 'done'
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,54 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudSnapshotDelete < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud snapshot delete SNAPSHOT_ID [SNAPSHOT_ID]'
9
+
10
+ attr_reader :description, :required_options
11
+
12
+ def initialize(args = [])
13
+ super(args)
14
+ @description =
15
+ 'Deletes the specified snapshot.'
16
+ @required_options = [:ionoscloud_username, :ionoscloud_password]
17
+ end
18
+
19
+ def run
20
+ $stdout.sync = true
21
+ validate_required_params(@required_options, config)
22
+
23
+ snapshot_api = Ionoscloud::SnapshotApi.new(api_client)
24
+
25
+ @name_args.each do |snapshot_id|
26
+ begin
27
+ snapshot = snapshot_api.snapshots_find_by_id(snapshot_id)
28
+ rescue Ionoscloud::ApiError => err
29
+ raise err unless err.code == 404
30
+ ui.error("Snapshot ID #{snapshot_id} not found. Skipping.")
31
+ next
32
+ end
33
+
34
+ msg_pair('ID', snapshot.id)
35
+ msg_pair('Name', snapshot.properties.name)
36
+ msg_pair('Description', snapshot.properties.description)
37
+ msg_pair('Location', snapshot.properties.location)
38
+ msg_pair('Size', snapshot.properties.size.to_s)
39
+
40
+ puts "\n"
41
+
42
+ begin
43
+ confirm('Do you really want to delete this Snapshot')
44
+ rescue SystemExit => exc
45
+ next
46
+ end
47
+
48
+ _, _, headers = snapshot_api.snapshots_delete_with_http_info(snapshot_id)
49
+ ui.warn("Deleted Snapshot #{snapshot.id}. Request ID: #{get_request_id headers}")
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,45 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudSnapshotList < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud snapshot list'
9
+
10
+ attr_reader :description, :required_options
11
+
12
+ def initialize(args = [])
13
+ super(args)
14
+ @description =
15
+ 'Retrieve a list of snapshots.'
16
+ @required_options = [:ionoscloud_username, :ionoscloud_password]
17
+ end
18
+
19
+ def run
20
+ $stdout.sync = true
21
+ validate_required_params(@required_options, config)
22
+
23
+ snapshot_list = [
24
+ ui.color('ID', :bold),
25
+ ui.color('Name', :bold),
26
+ ui.color('Description', :bold),
27
+ ui.color('Location', :bold),
28
+ ui.color('Size', :bold)
29
+ ]
30
+
31
+ snapshot_api = Ionoscloud::SnapshotApi.new(api_client)
32
+
33
+ snapshot_api.snapshots_get({ depth: 1 }).items.each do |snapshot|
34
+ snapshot_list << snapshot.id
35
+ snapshot_list << snapshot.properties.name
36
+ snapshot_list << snapshot.properties.description || ''
37
+ snapshot_list << snapshot.properties.location
38
+ snapshot_list << snapshot.properties.size.to_s
39
+ end
40
+
41
+ puts ui.list(snapshot_list, :uneven_columns_across, 5)
42
+ end
43
+ end
44
+ end
45
+ end