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,38 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudLocationList < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud location list'
9
+
10
+ attr_reader :description, :required_options
11
+
12
+ def initialize(args = [])
13
+ super(args)
14
+ @description =
15
+ 'List available physical locations where resources can reside.'
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
+ location_list = [
24
+ ui.color('ID', :bold),
25
+ ui.color('Name', :bold)
26
+ ]
27
+ location_api = Ionoscloud::LocationApi.new(api_client)
28
+
29
+ location_api.locations_get({ depth: 1 }).items.each do |location|
30
+ location_list << location.id
31
+ location_list << location.properties.name
32
+ end
33
+
34
+ puts ui.list(location_list, :uneven_columns_across, 2)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,104 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudNicCreate < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud nic create (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 :server_id,
16
+ short: '-S SERVER_ID',
17
+ long: '--server-id SERVER_ID',
18
+ description: 'Name of the server'
19
+
20
+ option :name,
21
+ short: '-n NAME',
22
+ long: '--name NAME',
23
+ description: 'Name of the NIC'
24
+
25
+ option :ips,
26
+ short: '-i IP[,IP,...]',
27
+ long: '--ips IP[,IP,...]',
28
+ description: 'IPs assigned to the NIC'
29
+
30
+ option :dhcp,
31
+ short: '-d',
32
+ long: '--dhcp',
33
+ boolean: true | false,
34
+ default: true,
35
+ description: 'Set to false if you wish to disable DHCP'
36
+
37
+ option :lan,
38
+ short: '-l ID',
39
+ long: '--lan ID',
40
+ description: 'The LAN ID the NIC will reside on; if the LAN ID does not exist it will be created'
41
+
42
+ option :nat,
43
+ long: '--nat',
44
+ description: 'Set to enable NAT on the NIC'
45
+
46
+ attr_reader :description, :required_options
47
+
48
+ def initialize(args = [])
49
+ super(args)
50
+ @description =
51
+ "Creates a NIC on the specified server.\n"\
52
+ "The Ionoscloud platform supports adding multiple NICs to a server. These NICs "\
53
+ "can be used to create different, segmented networks on the platform."
54
+ @required_options = [:datacenter_id, :server_id, :lan, :ionoscloud_username, :ionoscloud_password]
55
+ end
56
+
57
+ def run
58
+ $stdout.sync = true
59
+ validate_required_params(@required_options, config)
60
+
61
+ print "#{ui.color('Creating nic...', :magenta)}"
62
+
63
+ if config[:ips]
64
+ config[:ips] = config[:ips].split(',')
65
+ end
66
+
67
+ params = {
68
+ name: config[:name],
69
+ ips: config[:ips],
70
+ dhcp: config[:dhcp],
71
+ lan: config[:lan],
72
+ nat: !config[:nat].nil?,
73
+ }
74
+
75
+ nic_api = Ionoscloud::NicApi.new(api_client)
76
+
77
+ nic, _, headers = nic_api.datacenters_servers_nics_post_with_http_info(
78
+ config[:datacenter_id],
79
+ config[:server_id],
80
+ { properties: params.compact },
81
+ )
82
+
83
+ dot = ui.color('.', :magenta)
84
+ api_client.wait_for { print dot; is_done? get_request_id headers }
85
+
86
+ nic = nic_api.datacenters_servers_nics_find_by_id(
87
+ config[:datacenter_id],
88
+ config[:server_id],
89
+ nic.id,
90
+ )
91
+
92
+ puts "\n"
93
+ puts "#{ui.color('ID', :cyan)}: #{nic.id}"
94
+ puts "#{ui.color('Name', :cyan)}: #{nic.properties.name}"
95
+ puts "#{ui.color('IPs', :cyan)}: #{nic.properties.ips.to_s}"
96
+ puts "#{ui.color('DHCP', :cyan)}: #{nic.properties.dhcp}"
97
+ puts "#{ui.color('LAN', :cyan)}: #{nic.properties.lan}"
98
+ puts "#{ui.color('NAT', :cyan)}: #{nic.properties.nat}"
99
+
100
+ puts 'done'
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,62 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudNicDelete < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud nic delete NIC_ID [NIC_ID] (options)'
9
+
10
+ option :datacenter_id,
11
+ short: '-D DATACENTER_ID',
12
+ long: '--datacenter-id DATACENTER_ID',
13
+ description: 'The ID of the data center'
14
+
15
+ option :server_id,
16
+ short: '-S SERVER_ID',
17
+ long: '--server-id SERVER_ID',
18
+ description: 'The ID of the server assigned the NIC'
19
+
20
+ attr_reader :description, :required_options
21
+
22
+ def initialize(args = [])
23
+ super(args)
24
+ @description =
25
+ 'Deletes an existing NIC from a server.'
26
+ @required_options = [:datacenter_id, :server_id, :ionoscloud_username, :ionoscloud_password]
27
+ end
28
+
29
+ def run
30
+ $stdout.sync = true
31
+ validate_required_params(@required_options, config)
32
+
33
+ nic_api = Ionoscloud::NicApi.new(api_client)
34
+ @name_args.each do |nic_id|
35
+ begin
36
+ nic = nic_api.datacenters_servers_nics_find_by_id(config[:datacenter_id], config[:server_id], nic_id)
37
+ rescue Ionoscloud::ApiError => err
38
+ raise err unless err.code == 404
39
+ ui.error("Nic ID #{nic_id} not found. Skipping.")
40
+ next
41
+ end
42
+
43
+ msg_pair('ID', nic.id)
44
+ msg_pair('Name', nic.properties.name)
45
+ msg_pair('IPs', nic.properties.ips)
46
+ msg_pair('DHCP', nic.properties.dhcp)
47
+ msg_pair('LAN', nic.properties.lan)
48
+ msg_pair('NAT', nic.properties.nat)
49
+
50
+ begin
51
+ confirm('Do you really want to delete this Nic')
52
+ rescue SystemExit => exc
53
+ next
54
+ end
55
+
56
+ _, _, headers = nic_api.datacenters_servers_nics_delete_with_http_info(config[:datacenter_id], config[:server_id], nic.id)
57
+ ui.warn("Deleted Nic #{nic.id}. Request ID: #{get_request_id headers}")
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,57 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudNicList < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud nic list (options)'
9
+
10
+ option :datacenter_id,
11
+ short: '-D DATACENTER_ID',
12
+ long: '--datacenter-id DATACENTER_ID',
13
+ description: 'The ID of the datacenter containing the NIC'
14
+
15
+ option :server_id,
16
+ short: '-S SERVER_ID',
17
+ long: '--server-id SERVER_ID',
18
+ description: 'The ID of the server assigned the NIC'
19
+
20
+ attr_reader :description, :required_options
21
+
22
+ def initialize(args = [])
23
+ super(args)
24
+ @description =
25
+ 'List all available NICs connected to a server.'
26
+ @required_options = [:datacenter_id, :server_id, :ionoscloud_username, :ionoscloud_password]
27
+ end
28
+
29
+ def run
30
+ $stdout.sync = true
31
+ validate_required_params(@required_options, config)
32
+
33
+ nic_list = [
34
+ ui.color('ID', :bold),
35
+ ui.color('Name', :bold),
36
+ ui.color('IPs', :bold),
37
+ ui.color('DHCP', :bold),
38
+ ui.color('NAT', :bold),
39
+ ui.color('LAN', :bold)
40
+ ]
41
+
42
+ nic_api = Ionoscloud::NicApi.new(api_client)
43
+
44
+ nic_api.datacenters_servers_nics_get(config[:datacenter_id], config[:server_id], { depth: 1 }).items.each do |nic|
45
+ nic_list << nic.id
46
+ nic_list << nic.properties.name
47
+ nic_list << nic.properties.ips.to_s
48
+ nic_list << nic.properties.dhcp.to_s
49
+ nic_list << nic.properties.nat.to_s
50
+ nic_list << nic.properties.lan.to_s
51
+ end
52
+
53
+ puts ui.list(nic_list, :uneven_columns_across, 6)
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,65 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudNodeDelete < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud node delete NODE_ID [NODE_ID] (options)'
9
+
10
+ option :cluster_id,
11
+ short: '-C CLUSTER_ID',
12
+ long: '--cluster-id CLUSTER_ID',
13
+ description: 'The ID of the K8s Cluster'
14
+
15
+
16
+ option :nodepool_id,
17
+ short: '-P NODEPOOL_ID',
18
+ long: '--nodepool-id NODEPOOL_ID',
19
+ description: 'The ID of the K8s Nodepool'
20
+
21
+ attr_reader :description, :required_options
22
+
23
+ def initialize(args = [])
24
+ super(args)
25
+ @description =
26
+ 'Delete a single Kubernetes Node.'
27
+ @required_options = [:cluster_id, :nodepool_id, :ionoscloud_username, :ionoscloud_password]
28
+ end
29
+
30
+ def run
31
+ $stdout.sync = true
32
+ validate_required_params(@required_options, config)
33
+
34
+ kubernetes_api = Ionoscloud::KubernetesApi.new(api_client)
35
+
36
+ @name_args.each do |node_id|
37
+ begin
38
+ node = kubernetes_api.k8s_nodepools_nodes_find_by_id(config[:cluster_id], config[:nodepool_id], node_id)
39
+ rescue Ionoscloud::ApiError => err
40
+ raise err unless err.code == 404
41
+ ui.error("K8s Node ID #{node_id} not found. Skipping.")
42
+ next
43
+ end
44
+
45
+ msg_pair('ID', node.id)
46
+ msg_pair('Name', node.properties.name)
47
+ msg_pair('Public IP', node.properties.public_ip)
48
+ msg_pair('K8s Version', node.properties.k8s_version)
49
+ msg_pair('State', node.metadata.state)
50
+
51
+ puts "\n"
52
+
53
+ begin
54
+ confirm('Do you really want to delete this K8s Node')
55
+ rescue SystemExit => exc
56
+ next
57
+ end
58
+
59
+ kubernetes_api.k8s_nodepools_nodes_delete(config[:cluster_id], config[:nodepool_id], node.id)
60
+ ui.warn("Deleted K8s Node #{node.id}.")
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,55 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudNodeList < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud node list'
9
+
10
+ option :cluster_id,
11
+ short: '-C CLUSTER_ID',
12
+ long: '--cluster-id CLUSTER_ID',
13
+ description: 'The ID of the K8s Cluster'
14
+
15
+
16
+ option :nodepool_id,
17
+ short: '-P NODEPOOL_ID',
18
+ long: '--nodepool-id NODEPOOL_ID',
19
+ description: 'The ID of the K8s Nodepool'
20
+
21
+ attr_reader :description, :required_options
22
+
23
+ def initialize(args = [])
24
+ super(args)
25
+ @description =
26
+ 'Retrieve a list of Kubernetes Nodes in a Nodepool.'
27
+ @required_options = [:cluster_id, :nodepool_id, :ionoscloud_username, :ionoscloud_password]
28
+ end
29
+
30
+ def run
31
+ $stdout.sync = true
32
+ validate_required_params(@required_options, config)
33
+
34
+ node_list = [
35
+ ui.color('ID', :bold),
36
+ ui.color('Name', :bold),
37
+ ui.color('Public IP', :bold),
38
+ ui.color('K8s Version', :bold),
39
+ ui.color('State', :bold),
40
+ ]
41
+
42
+ kubernetes_api = Ionoscloud::KubernetesApi.new(api_client)
43
+
44
+ kubernetes_api.k8s_nodepools_nodes_get(config[:cluster_id], config[:nodepool_id], { depth: 2 }).items.each do |node|
45
+ node_list << node.id
46
+ node_list << node.properties.name
47
+ node_list << node.properties.public_ip
48
+ node_list << node.properties.k8s_version
49
+ node_list << node.metadata.state
50
+ end
51
+ puts ui.list(node_list, :uneven_columns_across, 5)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,54 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudNodeReplace < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud node replace NODE_ID [NODE_ID] (options)'
9
+
10
+ option :cluster_id,
11
+ short: '-C CLUSTER_ID',
12
+ long: '--cluster-id CLUSTER_ID',
13
+ description: 'The ID of the K8s Cluster'
14
+
15
+
16
+ option :nodepool_id,
17
+ short: '-P NODEPOOL_ID',
18
+ long: '--nodepool-id NODEPOOL_ID',
19
+ description: 'The ID of the K8s Nodepool'
20
+
21
+ attr_reader :description, :required_options
22
+
23
+ def initialize(args = [])
24
+ super(args)
25
+ @description =
26
+ "You can recreate a single Kubernetes Node.\n\n"\
27
+ "Managed Kubernetes starts a process which based on the nodepool\'s "\
28
+ "template creates & configures a new node, waits for status \"ACTIVE\", "\
29
+ "and migrates all the pods from the faulty node, deleting it once empty. "\
30
+ "While this operation occurs, the nodepool will have an extra billable \"ACTIVE\" node."
31
+ @required_options = [:cluster_id, :nodepool_id, :ionoscloud_username, :ionoscloud_password]
32
+ end
33
+
34
+ def run
35
+ $stdout.sync = true
36
+ validate_required_params(@required_options, config)
37
+
38
+ kubernetes_api = Ionoscloud::KubernetesApi.new(api_client)
39
+
40
+ @name_args.each do |node_id|
41
+ begin
42
+ kubernetes_api.k8s_nodepools_nodes_replace_post(config[:cluster_id], config[:nodepool_id], node_id)
43
+ rescue Ionoscloud::ApiError => err
44
+ raise err unless err.code == 404
45
+ ui.error("K8s Node ID #{node_id} not found. Skipping.")
46
+ next
47
+ end
48
+
49
+ ui.warn("Recreated K8s Node #{node_id}.")
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,163 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudNodepoolCreate < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud nodepool create (options)'
9
+
10
+ option :datacenter_id,
11
+ short: '-D DATACENTER_ID',
12
+ long: '--datacenter-id DATACENTER_ID',
13
+ description: 'ID of the virtual datacenter'
14
+
15
+ option :cluster_id,
16
+ short: '-C CLUSTER_ID',
17
+ long: '--cluster-id CLUSTER_ID',
18
+ description: 'ID of the Kubernetes cluster'
19
+
20
+ option :name,
21
+ short: '-n NAME',
22
+ long: '--name NAME',
23
+ description: 'Name of the Kubernetes node pool'
24
+
25
+ option :version,
26
+ short: '-v VERSION',
27
+ long: '--version VERSION',
28
+ description: 'The version for the Kubernetes cluster.'
29
+
30
+ option :maintenance_day,
31
+ short: '-d MAINTENANCE_DAY',
32
+ long: '--maintenance-day MAINTENANCE_DAY',
33
+ description: 'Day Of the week when to perform the maintenance.'
34
+
35
+ option :maintenance_time,
36
+ short: '-t MAINTENANCE_TIME',
37
+ long: '--maintenance-time MAINTENANCE_TIME',
38
+ description: 'Time Of the day when to perform the maintenance.'
39
+
40
+ option :node_count,
41
+ short: '-c NODE_COUNT',
42
+ long: '--node-count NODE_COUNT',
43
+ description: 'The number of worker nodes that the node pool should contain. Min 2, Max: Determined by the resource availability.'
44
+
45
+ option :cpu_family,
46
+ short: '-f CPU_FAMILY',
47
+ long: '--cpu-family CPU_FAMILY',
48
+ description: 'Sets the CPU type. [AMD_OPTERON, INTEL_XEON, INTEL_SKYLAKE]',
49
+ default: 'INTEL_SKYLAKE'
50
+
51
+ option :cores,
52
+ long: '--cores CORES',
53
+ description: 'The total number of cores for the node.'
54
+
55
+ option :ram,
56
+ short: '-r RAM',
57
+ long: '--ram RAM',
58
+ description: 'The amount of RAM in MB'
59
+
60
+ option :availability_zone,
61
+ short: '-a AVAILABILITY_ZONE',
62
+ long: '--availability-zone AVAILABILITY_ZONE',
63
+ description: 'The availability zone of the node pool',
64
+ default: 'AUTO'
65
+
66
+ option :storage_type,
67
+ long: '--storage-type STORAGE_TYPE',
68
+ description: 'Sets the storage type. [HDD, SSD]',
69
+ default: 'HDD'
70
+
71
+ option :storage_size,
72
+ long: '--storage-size STORAGE_SIZE',
73
+ description: 'The total allocated storage capacity of a node.'
74
+
75
+ option :min_node_count,
76
+ long: '--min-node-count MIN_NODE_COUNT',
77
+ description: 'The minimum number of worker nodes that the managed node group can scale in'
78
+
79
+ option :max_node_count,
80
+ long: '--max-node-count MAX_NODE_COUNT',
81
+ description: 'The maximum number of worker nodes that the managed node pool can scale-out.'
82
+
83
+ option :lans,
84
+ long: '--lans LAN_ID [LAN_ID]',
85
+ description: 'An array of additional private LANs attached to worker nodes'
86
+
87
+ attr_reader :description, :required_options
88
+
89
+ def initialize(args = [])
90
+ super(args)
91
+ @description =
92
+ "Creates a node pool into an existing Kubernetes cluster. "\
93
+ "The Kubernetes cluster must be in state \"ACTIVE\" before creating a node pool.\n\n"\
94
+ "The worker nodes within the node pools will be deployed into an existing data centers."
95
+ @required_options = [
96
+ :datacenter_id, :cluster_id, :name, :version, :node_count, :cpu_family, :cores, :ram,
97
+ :availability_zone, :storage_type, :storage_size, :ionoscloud_username, :ionoscloud_password,
98
+ ]
99
+ end
100
+
101
+ def run
102
+ $stdout.sync = true
103
+ validate_required_params(@required_options, config)
104
+
105
+ print "#{ui.color('Creating K8s Nodepool...', :magenta)}"
106
+
107
+ kubernetes_api = Ionoscloud::KubernetesApi.new(api_client)
108
+
109
+ nodepool_properties = {
110
+ name: config[:name],
111
+ k8sVersion: config[:version],
112
+ datacenterId: config[:datacenter_id],
113
+ nodeCount: config[:node_count],
114
+ cpuFamily: config[:cpu_family],
115
+ coresCount: config[:cores],
116
+ ramSize: config[:ram],
117
+ availabilityZone: config[:availability_zone],
118
+ storageType: config[:storage_type],
119
+ storageSize: config[:storage_size],
120
+ }
121
+
122
+ if config[:maintenance_day] && config[:maintenance_time]
123
+ nodepool_properties[:maintenanceWindow] = {
124
+ dayOfTheWeek: config[:maintenance_day],
125
+ time: config[:maintenance_time],
126
+ }
127
+ end
128
+
129
+ if config[:min_node_count] || config[:max_node_count]
130
+ nodepool_properties[:autoScaling] = {}
131
+ nodepool_properties[:autoScaling][:minNodeCount] = config[:min_node_count] unless config[:min_node_count].nil?
132
+ nodepool_properties[:autoScaling][:maxNodeCount] = config[:max_node_count] unless config[:max_node_count].nil?
133
+ end
134
+
135
+ if config[:lans]
136
+ nodepool_properties[:lans] = config[:lans].split(',').map! { |lan| { id: Integer(lan) } }
137
+ end
138
+
139
+ nodepool = kubernetes_api.k8s_nodepools_post(config[:cluster_id], { properties: nodepool_properties })
140
+
141
+ auto_scaling = "Min node count: #{nodepool.properties.auto_scaling.min_node_count}, Max node count:#{nodepool.properties.auto_scaling.max_node_count}"
142
+ maintenance_window = "#{nodepool.properties.maintenance_window.day_of_the_week}, #{nodepool.properties.maintenance_window.time}"
143
+
144
+ puts "\n"
145
+ puts "#{ui.color('ID', :cyan)}: #{nodepool.id}"
146
+ puts "#{ui.color('Name', :cyan)}: #{nodepool.properties.name}"
147
+ puts "#{ui.color('K8s Version', :cyan)}: #{nodepool.properties.k8s_version}"
148
+ puts "#{ui.color('Datacenter ID', :cyan)}: #{nodepool.properties.datacenter_id}"
149
+ puts "#{ui.color('Node Count', :cyan)}: #{nodepool.properties.node_count}"
150
+ puts "#{ui.color('CPU Family', :cyan)}: #{nodepool.properties.cpu_family}"
151
+ puts "#{ui.color('Cores Count', :cyan)}: #{nodepool.properties.cores_count}"
152
+ puts "#{ui.color('RAM', :cyan)}: #{nodepool.properties.ram_size}"
153
+ puts "#{ui.color('Storage Type', :cyan)}: #{nodepool.properties.storage_type}"
154
+ puts "#{ui.color('Storage Size', :cyan)}: #{nodepool.properties.storage_size}"
155
+ puts "#{ui.color('Availability Zone', :cyan)}: #{nodepool.properties.availability_zone}"
156
+ puts "#{ui.color('Auto Scaling', :cyan)}: #{auto_scaling}"
157
+ puts "#{ui.color('Maintenance Window', :cyan)}: #{maintenance_window}"
158
+ puts "#{ui.color('State', :cyan)}: #{nodepool.metadata.state}"
159
+ puts 'done'
160
+ end
161
+ end
162
+ end
163
+ end