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,63 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudIpblockCreate < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud ipblock create (options)'
9
+
10
+ option :location,
11
+ short: '-l LOCATION',
12
+ long: '--location LOCATION',
13
+ description: 'Location of the IP block (us/las, us/ewr, de/fra, de/fkb)'
14
+
15
+ option :size,
16
+ short: '-S INT',
17
+ long: '--size INT',
18
+ description: 'The number of IP addresses to reserve'
19
+
20
+ option :name,
21
+ short: '-n NAME',
22
+ long: '--name NAME',
23
+ description: 'Name of the IP block'
24
+
25
+ attr_reader :description, :required_options
26
+
27
+ def initialize(args = [])
28
+ super(args)
29
+ @description =
30
+ 'Reserves an IP block at a specified location that can be used by resources '\
31
+ 'within any VDCs provisioned in that same location. An IP block consists of '\
32
+ 'one or more static IP addresses. The IP block size (number of IP addresses) '\
33
+ 'and location are required to reserve an IP block.'
34
+ @required_options = [:size, :location, :ionoscloud_username, :ionoscloud_password]
35
+ end
36
+
37
+ def run
38
+ $stdout.sync = true
39
+ validate_required_params(@required_options, config)
40
+
41
+ print "#{ui.color('Allocating IP block...', :magenta)}"
42
+
43
+ params = {
44
+ location: config[:location],
45
+ size: config[:size],
46
+ name: config[:name],
47
+ }.compact
48
+
49
+ ipblock, _, headers = Ionoscloud::IPBlocksApi.new(api_client).ipblocks_post_with_http_info({ properties: params.compact })
50
+
51
+ dot = ui.color('.', :magenta)
52
+ api_client.wait_for { print dot; is_done? get_request_id headers }
53
+
54
+ puts "\n"
55
+ puts "#{ui.color('ID', :cyan)}: #{ipblock.id}"
56
+ puts "#{ui.color('Name', :cyan)}: #{ipblock.properties.name}"
57
+ puts "#{ui.color('Location', :cyan)}: #{ipblock.properties.location}"
58
+ puts "#{ui.color('IP Addresses', :cyan)}: #{ipblock.properties.ips.to_s}"
59
+ puts 'done'
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,50 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudIpblockDelete < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud ipblock delete IPBLOCK_ID [IPBLOCK_ID]'
9
+
10
+ attr_reader :description, :required_options
11
+
12
+ def initialize(args = [])
13
+ super(args)
14
+ @description =
15
+ 'Releases a currently assigned IP block.'
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
+ ipblock_api = Ionoscloud::IPBlocksApi.new(api_client)
24
+ @name_args.each do |ipblock_id|
25
+ begin
26
+ ipblock = ipblock_api.ipblocks_find_by_id(ipblock_id)
27
+ rescue Ionoscloud::ApiError => err
28
+ raise err unless err.code == 404
29
+ ui.error("IP block ID #{ipblock_id} not found. Skipping.")
30
+ next
31
+ end
32
+
33
+ msg_pair('ID', ipblock.id)
34
+ msg_pair('Name', ipblock.properties.name)
35
+ msg_pair('Location', ipblock.properties.location)
36
+ msg_pair('IP Addresses', ipblock.properties.ips)
37
+
38
+ begin
39
+ confirm('Do you really want to delete this IP block')
40
+ rescue SystemExit => exc
41
+ next
42
+ end
43
+
44
+ _, _, headers = ipblock_api.ipblocks_delete_with_http_info(ipblock_id)
45
+ ui.warn("Released IP block #{ipblock.id}. Request ID: #{get_request_id headers}")
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,42 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudIpblockList < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud ipblock list'
9
+
10
+ attr_reader :description, :required_options
11
+
12
+ def initialize(args = [])
13
+ super(args)
14
+ @description =
15
+ 'Lists all available IP blocks.'
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
+ ipblock_list = [
24
+ ui.color('ID', :bold),
25
+ ui.color('Name', :bold),
26
+ ui.color('Location', :bold),
27
+ ui.color('IP Addresses', :bold),
28
+ ]
29
+ ipblock_api = Ionoscloud::IPBlocksApi.new(api_client)
30
+
31
+ ipblock_api.ipblocks_get({ depth: 1 }).items.each do |ipblock|
32
+ ipblock_list << ipblock.id
33
+ ipblock_list << ipblock.properties.name
34
+ ipblock_list << ipblock.properties.location
35
+ ipblock_list << ipblock.properties.ips.join(', ')
36
+ end
37
+
38
+ puts ui.list(ipblock_list, :uneven_columns_across, 4)
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,76 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudIpfailoverAdd < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud ipfailover add (options)'
9
+
10
+ option :datacenter_id,
11
+ short: '-D DATACENTER_ID',
12
+ long: '--datacenter-id DATACENTER_ID',
13
+ description: 'Name of the data center'
14
+
15
+ option :lan_id,
16
+ short: '-l LAN_ID',
17
+ long: '--lan-id LAN_ID',
18
+ description: 'Lan ID'
19
+
20
+ option :ip,
21
+ short: '-i IP',
22
+ long: '--ip IP',
23
+ description: 'IP to be added to IP failover group'
24
+
25
+ option :nic_id,
26
+ short: '-n NIC_ID',
27
+ long: '--nic-id NIC_ID',
28
+ description: 'NIC to be added to IP failover group'
29
+
30
+ attr_reader :description, :required_options
31
+
32
+ def initialize(args = [])
33
+ super(args)
34
+ @description =
35
+ "Successfully setting up an IP Failover group requires three steps:\n"\
36
+ "* Add a reserved IP address to a NIC that will become the IP Failover master.\n"\
37
+ "* Use PATCH or PUT to enable ipFailover by providing the relevant ip and nicUuid values.\n"\
38
+ "* Add the same reserved IP address to any other NICs that are a member of the same LAN. Those NICs will become IP Failover members.\n"
39
+ @required_options = [:datacenter_id, :lan_id, :ip, :nic_id, :ionoscloud_username, :ionoscloud_password]
40
+ end
41
+
42
+ def run
43
+ $stdout.sync = true
44
+ validate_required_params(@required_options, config)
45
+
46
+ lan_api = Ionoscloud::LanApi.new(api_client)
47
+
48
+ lan = lan_api.datacenters_lans_find_by_id(config[:datacenter_id], config[:lan_id])
49
+
50
+ failover_ips = lan.properties.ip_failover || []
51
+ failover_ips.push({
52
+ ip: config[:ip],
53
+ nicUuid: config[:nic_id],
54
+ })
55
+
56
+ changes = Ionoscloud::LanProperties.new({ ip_failover: failover_ips })
57
+
58
+ _, _, headers = lan_api.datacenters_lans_patch_with_http_info(config[:datacenter_id], config[:lan_id], changes)
59
+
60
+ dot = ui.color('.', :magenta)
61
+ api_client.wait_for { print dot; is_done? get_request_id headers }
62
+
63
+ lan = lan_api.datacenters_lans_find_by_id(config[:datacenter_id], config[:lan_id])
64
+
65
+ ip_failovers = lan.properties.ip_failover.map { |el| el.to_hash }
66
+
67
+ puts "\n"
68
+ puts "#{ui.color('ID', :cyan)}: #{lan.id}"
69
+ puts "#{ui.color('Name', :cyan)}: #{lan.properties.name}"
70
+ puts "#{ui.color('Public', :cyan)}: #{lan.properties.public}"
71
+ puts "#{ui.color('IP Failover', :cyan)}: #{ip_failovers}"
72
+ puts 'done'
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,76 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudIpfailoverRemove < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud ipfailover remove (options)'
9
+
10
+ option :datacenter_id,
11
+ short: '-D DATACENTER_ID',
12
+ long: '--datacenter-id DATACENTER_ID',
13
+ description: 'Name of the data center'
14
+
15
+ option :lan_id,
16
+ short: '-l LAN_ID',
17
+ long: '--lan-id LAN_ID',
18
+ description: 'Lan ID'
19
+
20
+ option :ip,
21
+ short: '-i IP',
22
+ long: '--ip IP',
23
+ description: 'IP to be removed from the IP failover group'
24
+
25
+ option :nic_id,
26
+ short: '-n NIC_ID',
27
+ long: '--nic-id NIC_ID',
28
+ description: 'NIC to be removed from the IP failover group'
29
+
30
+ attr_reader :description, :required_options
31
+
32
+ def initialize(args = [])
33
+ super(args)
34
+ @description =
35
+ 'Remove IP Failover from LAN'
36
+ @required_options = [:datacenter_id, :lan_id, :ip, :nic_id, :ionoscloud_username, :ionoscloud_password]
37
+ end
38
+
39
+ def run
40
+ $stdout.sync = true
41
+ validate_required_params(@required_options, config)
42
+
43
+ lan_api = Ionoscloud::LanApi.new(api_client)
44
+
45
+ lan = lan_api.datacenters_lans_find_by_id(config[:datacenter_id], config[:lan_id])
46
+
47
+ initial_length = lan.properties.ip_failover.length
48
+
49
+ changes = Ionoscloud::LanProperties.new(
50
+ { ip_failover: lan.properties.ip_failover.select { |el| el.nic_uuid != config[:nic_id] || el.ip != config[:ip] } },
51
+ )
52
+ new_length = changes.ip_failover.length
53
+
54
+ if new_length < initial_length
55
+ _, _, headers = lan_api.datacenters_lans_patch_with_http_info(
56
+ config[:datacenter_id], config[:lan_id], changes,
57
+ )
58
+
59
+ dot = ui.color('.', :magenta)
60
+ api_client.wait_for { print dot; is_done? get_request_id headers }
61
+
62
+ lan = lan_api.datacenters_lans_find_by_id(config[:datacenter_id], config[:lan_id])
63
+ end
64
+
65
+ ip_failovers = lan.properties.ip_failover.map { |el| el.to_hash }
66
+
67
+ puts "\n"
68
+ puts "#{ui.color('ID', :cyan)}: #{lan.id}"
69
+ puts "#{ui.color('Name', :cyan)}: #{lan.properties.name}"
70
+ puts "#{ui.color('Public', :cyan)}: #{lan.properties.public}"
71
+ puts "#{ui.color('IP Failover', :cyan)}: #{ip_failovers}"
72
+ puts 'done'
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,79 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudK8sCreate < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud k8s create (options)'
9
+
10
+ option :name,
11
+ short: '-n NAME',
12
+ long: '--name NAME',
13
+ description: 'Name of the server'
14
+
15
+ option :version,
16
+ short: '-v VERSION',
17
+ long: '--version VERSION',
18
+ description: 'The version for the Kubernetes cluster.'
19
+
20
+ option :maintenance_day,
21
+ short: '-d MAINTENANCE_DAY',
22
+ long: '--maintenance-day MAINTENANCE_DAY',
23
+ description: 'Day Of the week when to perform the maintenance.'
24
+
25
+ option :maintenance_time,
26
+ short: '-t MAINTENANCE_TIME',
27
+ long: '--maintenance-time MAINTENANCE_TIME',
28
+ description: 'Time Of the day when to perform the maintenance.'
29
+
30
+ attr_reader :description, :required_options
31
+
32
+ def initialize(args = [])
33
+ super(args)
34
+ @description =
35
+ 'Creates a new Managed Kubernetes cluster.'
36
+ @required_options = [:name, :ionoscloud_username, :ionoscloud_password]
37
+ end
38
+
39
+ def run
40
+ $stdout.sync = true
41
+ validate_required_params(@required_options, config)
42
+
43
+ print "#{ui.color('Creating K8s Cluster...', :magenta)}"
44
+
45
+ kubernetes_api = Ionoscloud::KubernetesApi.new(api_client)
46
+
47
+ cluster_properties = {
48
+ name: config[:name],
49
+ k8sVersion: config[:version],
50
+ }.compact
51
+
52
+ if config[:maintenance_day] && config[:maintenance_time]
53
+ cluster_properties[:maintenanceWindow] = {
54
+ dayOfTheWeek: config[:maintenance_day],
55
+ time: config[:maintenance_time],
56
+ }
57
+ end
58
+
59
+ cluster, _, headers = kubernetes_api.k8s_post_with_http_info({ properties: cluster_properties })
60
+
61
+ dot = ui.color('.', :magenta)
62
+ api_client.wait_for { print dot; is_done? get_request_id headers }
63
+
64
+ cluster = kubernetes_api.k8s_find_by_cluster_id(cluster.id)
65
+
66
+ maintenance_window = "#{cluster.properties.maintenance_window.day_of_the_week}, #{cluster.properties.maintenance_window.time}"
67
+
68
+ puts "\n"
69
+ puts "#{ui.color('ID', :cyan)}: #{cluster.id}"
70
+ puts "#{ui.color('Name', :cyan)}: #{cluster.properties.name}"
71
+ puts "#{ui.color('k8s Version', :cyan)}: #{cluster.properties.k8s_version}"
72
+ puts "#{ui.color('Maintenance Window', :cyan)}: #{maintenance_window}"
73
+ puts "#{ui.color('State', :cyan)}: #{cluster.metadata.state}"
74
+
75
+ puts 'done'
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,67 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudK8sDelete < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud k8s delete CLUSTER_ID [CLUSTER_ID]'
9
+
10
+ attr_reader :description, :required_options
11
+
12
+ def initialize(args = [])
13
+ super(args)
14
+ @description =
15
+ 'Deletes a Kubernetes cluster. The cluster cannot contain any node pools when deleting.'
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
+ kubernetes_api = Ionoscloud::KubernetesApi.new(api_client)
24
+
25
+ @name_args.each do |cluster_id|
26
+ begin
27
+ cluster = kubernetes_api.k8s_find_by_cluster_id(cluster_id, { depth: 2 })
28
+ rescue Ionoscloud::ApiError => err
29
+ raise err unless err.code == 404
30
+ ui.error("K8s Cluster ID #{cluster_id} not found. Skipping.")
31
+ next
32
+ end
33
+
34
+ if cluster.metadata.state != 'ACTIVE'
35
+ ui.error("K8s Cluster ID #{cluster_id} is not active. Skipping.")
36
+ next
37
+ end
38
+
39
+ if cluster.entities.nodepools.items.length > 0
40
+ ui.error("K8s Cluster ID #{cluster_id} has existing Nodepools. Skipping.")
41
+ next
42
+ end
43
+
44
+ msg_pair('ID', cluster.id)
45
+ msg_pair('Name', cluster.properties.name)
46
+ msg_pair('Version', cluster.properties.k8s_version)
47
+ msg_pair(
48
+ 'Maintenance Window',
49
+ "#{cluster.properties.maintenance_window.day_of_the_week}, #{cluster.properties.maintenance_window.time}",
50
+ )
51
+ msg_pair('State', cluster.metadata.state)
52
+
53
+ puts "\n"
54
+
55
+ begin
56
+ confirm('Do you really want to delete this K8s Cluster')
57
+ rescue SystemExit => exc
58
+ next
59
+ end
60
+
61
+ _, _, headers = kubernetes_api.k8s_delete_with_http_info(cluster.id)
62
+ ui.warn("Deleted K8s Cluster #{cluster.id}. Request ID: #{get_request_id headers}")
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end