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 IonoscloudK8sList < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud k8s list'
9
+
10
+ attr_reader :description, :required_options
11
+
12
+ def initialize(args = [])
13
+ super(args)
14
+ @description =
15
+ 'Retrieve a list of Kubernetes clusters.'
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
+ cluster_list = [
24
+ ui.color('ID', :bold),
25
+ ui.color('Name', :bold),
26
+ ui.color('Version', :bold),
27
+ ui.color('Maintenance Window', :bold),
28
+ ui.color('State', :bold),
29
+ ]
30
+
31
+ kubernetes_api = Ionoscloud::KubernetesApi.new(api_client)
32
+
33
+ kubernetes_api.k8s_get({ depth: 1 }).items.each do |cluster|
34
+ cluster_list << cluster.id
35
+ cluster_list << cluster.properties.name
36
+ cluster_list << cluster.properties.k8s_version
37
+ cluster_list << "#{cluster.properties.maintenance_window.day_of_the_week}, #{cluster.properties.maintenance_window.time}"
38
+ cluster_list << cluster.metadata.state
39
+ end
40
+
41
+ puts ui.list(cluster_list, :uneven_columns_across, 5)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,37 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudKubeconfigGet < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud kubeconfig get (options)'
9
+
10
+ option :cluster_id,
11
+ short: '-C CLUSTER_ID',
12
+ long: '--cluster-id CLUSTER_ID',
13
+ description: 'The ID of the Kubernetes cluster.'
14
+
15
+ attr_reader :description, :required_options
16
+
17
+ def initialize(args = [])
18
+ super(args)
19
+ @description =
20
+ 'Retrieve the kubeconfig file for a given Kubernetes cluster.'
21
+ @required_options = [:cluster_id, :ionoscloud_username, :ionoscloud_password]
22
+ end
23
+
24
+ def run
25
+ $stdout.sync = true
26
+ validate_required_params(@required_options, config)
27
+
28
+ begin
29
+ puts Ionoscloud::KubernetesApi.new(api_client).k8s_kubeconfig_get(config[:cluster_id])
30
+ rescue Ionoscloud::ApiError => err
31
+ raise err unless err.code == 404
32
+ ui.error("K8s Cluster ID #{config[:cluster_id]} not found.")
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,84 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudLabelAdd < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud label add (options)'
9
+
10
+ option :type,
11
+ short: '-T RESOURCE_TYPE',
12
+ long: '--resource-type RESOURCE_TYPE',
13
+ description: 'Type of the resource to be labeled. Must be one of [datacenter, server, volume, ipblock, snapshot]'
14
+
15
+ option :key,
16
+ short: '-K KEY',
17
+ long: '--key KEY',
18
+ description: 'Key of the label.'
19
+
20
+ option :value,
21
+ long: '--value VALUE',
22
+ description: 'Value of the label.'
23
+
24
+ option :datacenter_id,
25
+ short: '-D DATACENTER_ID',
26
+ long: '--datacenter-id DATACENTER_ID',
27
+ description: 'ID of the data center.'
28
+
29
+ option :resource_id,
30
+ short: '-R RESOURCE_ID',
31
+ long: '--resource-id RESOURCE_ID',
32
+ description: 'ID of the resource.'
33
+
34
+ attr_reader :description, :required_options
35
+
36
+ def initialize(args = [])
37
+ super(args)
38
+ @description =
39
+ 'Add a Label to a Resource.'
40
+ @required_options = [:type, :resource_id, :key, :value, :ionoscloud_username, :ionoscloud_password]
41
+ end
42
+
43
+ def run
44
+ $stdout.sync = true
45
+ validate_required_params(@required_options, config)
46
+
47
+ label_api = Ionoscloud::LabelApi.new(api_client)
48
+
49
+ label_properties = {
50
+ properties: {
51
+ key: config[:key],
52
+ value: config[:value],
53
+ },
54
+ }
55
+
56
+ case config[:type]
57
+ when 'datacenter'
58
+ label = label_api.datacenters_labels_post(config[:resource_id], label_properties)
59
+ when 'server'
60
+ validate_required_params([:datacenter_id], config)
61
+ label = label_api.datacenters_servers_labels_post(config[:datacenter_id], config[:resource_id], label_properties)
62
+ when 'volume'
63
+ validate_required_params([:datacenter_id], config)
64
+ label = label_api.datacenters_volumes_labels_post(config[:datacenter_id], config[:resource_id], label_properties)
65
+ when 'ipblock'
66
+ label = label_api.ipblocks_labels_post(config[:resource_id], label_properties)
67
+ when 'snapshot'
68
+ label = label_api.snapshots_labels_post(config[:resource_id], label_properties)
69
+ else
70
+ ui.error("#{config[:type]} is not a valid Resource Type.")
71
+ exit(1)
72
+ end
73
+
74
+ print "#{ui.color('Adding label...', :magenta)}"
75
+ puts "\n"
76
+ puts "#{ui.color('Resource ID', :cyan)}: #{config[:resource_id]}"
77
+ puts "#{ui.color('Resource Type', :cyan)}: #{config[:type]}"
78
+ puts "#{ui.color('Label Key', :cyan)}: #{label.properties.key}"
79
+ puts "#{ui.color('Value', :cyan)}: #{label.properties.value}"
80
+ puts 'done'
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,83 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudLabelList < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud label list (options)'
9
+
10
+ option :type,
11
+ short: '-T RESOURCE_TYPE',
12
+ long: '--resource-type RESOURCE_TYPE',
13
+ description: 'Type of the resource to be labeled.'
14
+
15
+ option :datacenter_id,
16
+ short: '-D DATACENTER_ID',
17
+ long: '--datacenter-id DATACENTER_ID',
18
+ description: 'ID of the data center.'
19
+
20
+ option :resource_id,
21
+ short: '-R RESOURCE_ID',
22
+ long: '--resource-id RESOURCE_ID',
23
+ description: 'ID of the resource.'
24
+
25
+ attr_reader :description, :required_options
26
+
27
+ def initialize(args = [])
28
+ super(args)
29
+ @description =
30
+ 'List all Labels available to the user. Specify the type and required resource ID '\
31
+ 'to list labels for a specific resource instead.'
32
+ @required_options = [:ionoscloud_username, :ionoscloud_password]
33
+ end
34
+
35
+ def run
36
+ $stdout.sync = true
37
+ validate_required_params(@required_options, config)
38
+
39
+ label_api = Ionoscloud::LabelApi.new(api_client)
40
+ opts = { depth: 1 }
41
+
42
+ case config[:type]
43
+ when 'datacenter'
44
+ validate_required_params([:resource_id], config)
45
+ labels = label_api.datacenters_labels_get(config[:resource_id], opts)
46
+ when 'server'
47
+ validate_required_params([:datacenter_id, :resource_id], config)
48
+ labels = label_api.datacenters_servers_labels_get(config[:datacenter_id], config[:resource_id], opts)
49
+ when 'volume'
50
+ validate_required_params([:datacenter_id, :resource_id], config)
51
+ labels = label_api.datacenters_volumes_labels_get(config[:datacenter_id], config[:resource_id], opts)
52
+ when 'ipblock'
53
+ validate_required_params([:resource_id], config)
54
+ labels = label_api.ipblocks_labels_get(config[:resource_id], opts)
55
+ when 'snapshot'
56
+ validate_required_params([:resource_id], config)
57
+ labels = label_api.snapshots_labels_get(config[:resource_id], opts)
58
+ else
59
+ if !config[:type].nil?
60
+ ui.warn("#{config[:type]} is not a valid Resource Type. Returning all available labels.")
61
+ end
62
+ labels = label_api.labels_get(opts)
63
+ end
64
+
65
+ label_list = [
66
+ ui.color('Resource ID', :bold),
67
+ ui.color('Resource Type', :bold),
68
+ ui.color('Label key', :bold),
69
+ ui.color('Value', :bold),
70
+ ]
71
+
72
+ labels.items.each do |label|
73
+ label_list << (label.properties.respond_to?(:resource_id) ? label.properties.resource_id : config[:resource_id])
74
+ label_list << (label.properties.respond_to?(:resource_type) ? label.properties.resource_type : config[:type])
75
+ label_list << label.properties.key
76
+ label_list << label.properties.value
77
+ end
78
+
79
+ puts ui.list(label_list, :uneven_columns_across, 4)
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,77 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudLabelRemove < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud label remove LABEL_KEY [LABEL_KEY] (options)'
9
+
10
+ option :type,
11
+ short: '-T RESOURCE_TYPE',
12
+ long: '--resource-type RESOURCE_TYPE',
13
+ description: 'Type of the resource to be labeled.'
14
+
15
+ option :datacenter_id,
16
+ short: '-D DATACENTER_ID',
17
+ long: '--datacenter-id DATACENTER_ID',
18
+ description: 'ID of the data center.'
19
+
20
+ option :resource_id,
21
+ short: '-R RESOURCE_ID',
22
+ long: '--resource-id RESOURCE_ID',
23
+ description: 'ID of the resource.'
24
+
25
+ attr_reader :description, :required_options
26
+
27
+ def initialize(args = [])
28
+ super(args)
29
+ @description =
30
+ 'Remove a Label from a Resource.'
31
+ @required_options = [:type, :resource_id, :ionoscloud_username, :ionoscloud_password]
32
+ end
33
+
34
+ def run
35
+ $stdout.sync = true
36
+ validate_required_params(@required_options, config)
37
+
38
+ label_api = Ionoscloud::LabelApi.new(api_client)
39
+
40
+ args = [config[:resource_id]]
41
+
42
+ case config[:type]
43
+ when 'datacenter'
44
+ method = label_api.method(:datacenters_labels_delete)
45
+ when 'server'
46
+ validate_required_params([:datacenter_id], config)
47
+
48
+ method = label_api.method(:datacenters_servers_labels_delete)
49
+ args = [config[:datacenter_id], config[:resource_id]]
50
+ when 'volume'
51
+ validate_required_params([:datacenter_id], config)
52
+
53
+ method = label_api.method(:datacenters_volumes_labels_delete)
54
+ args = [config[:datacenter_id], config[:resource_id]]
55
+ when 'ipblock'
56
+ method = label_api.method(:ipblocks_labels_delete)
57
+ when 'snapshot'
58
+ method = label_api.method(:snapshots_labels_delete)
59
+ else
60
+ ui.error("#{config[:type]} is not a valid Resource Type.")
61
+ exit(1)
62
+ end
63
+
64
+ @name_args.each do |label_key|
65
+ begin
66
+ method.call(*args, label_key)
67
+ rescue Ionoscloud::ApiError => err
68
+ raise err unless err.code == 404
69
+ ui.error("Label #{label_key} not found. Skipping.")
70
+ next
71
+ end
72
+ ui.warn("Removed Label #{label_key} from #{config[:type]} #{config[:resource_id]}.")
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,69 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudLanCreate < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud lan 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 :name,
16
+ short: '-n NAME',
17
+ long: '--name NAME',
18
+ description: 'Name of the server'
19
+
20
+ option :public,
21
+ short: '-p',
22
+ long: '--public',
23
+ boolean: true,
24
+ default: false,
25
+ description: 'Boolean indicating if the LAN faces the public ' \
26
+ 'Internet or not; defaults to false'
27
+
28
+ attr_reader :description, :required_options
29
+
30
+ def initialize(args = [])
31
+ super(args)
32
+ @description =
33
+ 'Creates a new LAN under a data center.'
34
+ @required_options = [:datacenter_id, :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('Creating LAN...', :magenta)}"
42
+
43
+ lan_api = Ionoscloud::LanApi.new(api_client)
44
+
45
+ lan, _, headers = lan_api.datacenters_lans_post_with_http_info(
46
+ config[:datacenter_id],
47
+ {
48
+ properties: {
49
+ name: config[:name],
50
+ public: config[:public],
51
+ }
52
+ },
53
+ )
54
+
55
+ dot = ui.color('.', :magenta)
56
+ api_client.wait_for { print dot; is_done? get_request_id headers }
57
+
58
+ lan = lan_api.datacenters_lans_find_by_id(config[:datacenter_id], lan.id)
59
+
60
+ puts "\n"
61
+ puts "#{ui.color('ID', :cyan)}: #{lan.id}"
62
+ puts "#{ui.color('Name', :cyan)}: #{lan.properties.name}"
63
+ puts "#{ui.color('Public', :cyan)}: #{lan.properties.public}"
64
+
65
+ puts 'done'
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,54 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudLanDelete < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud lan delete LAN_ID [LAN_ID] (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
+ attr_reader :description, :required_options
16
+
17
+ def initialize(args = [])
18
+ super(args)
19
+ @description =
20
+ 'Deletes an existing LAN.'
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
+ lan_api = Ionoscloud::LanApi.new(api_client)
29
+ @name_args.each do |lan_id|
30
+ begin
31
+ lan = lan_api.datacenters_lans_find_by_id(config[:datacenter_id], lan_id)
32
+ rescue Ionoscloud::ApiError => err
33
+ raise err unless err.code == 404
34
+ ui.error("Lan ID #{lan_id} not found. Skipping.")
35
+ next
36
+ end
37
+
38
+ msg_pair('ID', lan.id)
39
+ msg_pair('Name', lan.properties.name)
40
+ msg_pair('Public', lan.properties.public.to_s)
41
+
42
+ begin
43
+ confirm('Do you really want to delete this LAN')
44
+ rescue SystemExit => exc
45
+ next
46
+ end
47
+
48
+ _, _, headers = lan_api.datacenters_lans_delete_with_http_info(config[:datacenter_id], lan.id)
49
+ ui.warn("Deleted Lan #{lan.id}. Request ID: #{get_request_id headers}")
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end