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,46 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudLanList < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud lan list (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
+ attr_reader :description, :required_options
16
+
17
+ def initialize(args = [])
18
+ super(args)
19
+ @description =
20
+ 'Lists all available LANs under a data center.'
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
+ $stdout.sync = true
29
+ lan_list = [
30
+ ui.color('ID', :bold),
31
+ ui.color('Name', :bold),
32
+ ui.color('Public', :bold),
33
+ ]
34
+ lan_api = Ionoscloud::LanApi.new(api_client)
35
+
36
+ lan_api.datacenters_lans_get(config[:datacenter_id], { depth: 1 }).items.each do |lan|
37
+ lan_list << lan.id
38
+ lan_list << lan.properties.name
39
+ lan_list << lan.properties.public.to_s
40
+ end
41
+
42
+ puts ui.list(lan_list, :uneven_columns_across, 3)
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,87 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudLoadbalancerCreate < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud loadbalancer 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 load balancer'
19
+
20
+ option :ip,
21
+ long: '--ip IP',
22
+ description: 'IPv4 address of the load balancer. All attached NICs will inherit this IP.'
23
+
24
+ option :dhcp,
25
+ short: '-d DHCP',
26
+ long: '--dhcp DHCP',
27
+ description: 'Indicates if the load balancer will reserve an IP using DHCP.'
28
+
29
+ option :nics,
30
+ long: '--nics NIC_ID [NIC_ID]',
31
+ description: 'An array of additional private NICs attached to worker nodes'
32
+
33
+ attr_reader :description, :required_options
34
+
35
+ def initialize(args = [])
36
+ super(args)
37
+ @description =
38
+ 'Creates a load balancer within the VDC. Load balancers can be used for public or private IP traffic.'
39
+ @required_options = [:datacenter_id, :name, :ionoscloud_username, :ionoscloud_password]
40
+ end
41
+
42
+ def run
43
+ $stdout.sync = true
44
+ validate_required_params(@required_options, config)
45
+
46
+ print "#{ui.color('Creating Load Balancer...', :magenta)}"
47
+
48
+ if config[:nics]
49
+ config[:nics] = config[:nics].split(',').map! { |nic| { id: nic } }
50
+ end
51
+
52
+ load_balancer_api = Ionoscloud::LoadBalancerApi.new(api_client)
53
+
54
+ load_balancer, _, headers = load_balancer_api.datacenters_loadbalancers_post_with_http_info(
55
+ config[:datacenter_id],
56
+ Ionoscloud::Loadbalancer.new(
57
+ properties: Ionoscloud::LoadbalancerProperties.new(
58
+ name: config[:name],
59
+ ip: config[:ip],
60
+ dhcp: config[:dhcp],
61
+ ),
62
+ entities: Ionoscloud::LoadbalancerEntities.new(
63
+ balancednics: Ionoscloud::Nics.new(
64
+ items: config[:nics],
65
+ )
66
+ )
67
+ ),
68
+ )
69
+
70
+ dot = ui.color('.', :magenta)
71
+ api_client.wait_for { print dot; is_done? get_request_id headers }
72
+
73
+ load_balancer = load_balancer_api.datacenters_loadbalancers_find_by_id(config[:datacenter_id], load_balancer.id, { depth: 1 })
74
+
75
+ nics = load_balancer.entities.balancednics.items.map { |nic| nic.id }
76
+
77
+ puts "\n"
78
+ puts "#{ui.color('ID', :cyan)}: #{load_balancer.id}"
79
+ puts "#{ui.color('Name', :cyan)}: #{load_balancer.properties.name}"
80
+ puts "#{ui.color('IP address', :cyan)}: #{load_balancer.properties.ip}"
81
+ puts "#{ui.color('DHCP', :cyan)}: #{load_balancer.properties.dhcp}"
82
+ puts "#{ui.color('Balanced Nics', :cyan)}: #{nics.to_s}"
83
+ puts 'done'
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,68 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudLoadbalancerDelete < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud loadbalancer delete LOAD_BALANCER_ID [LOAD_BALANCER_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 the specified load balancer.'
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
+ load_balancer_api = Ionoscloud::LoadBalancerApi.new(api_client)
29
+
30
+ @name_args.each do |load_balancer_id|
31
+ begin
32
+ load_balancer = load_balancer_api.datacenters_loadbalancers_find_by_id(
33
+ config[:datacenter_id],
34
+ load_balancer_id,
35
+ { depth: 1 },
36
+ )
37
+ rescue Ionoscloud::ApiError => err
38
+ raise err unless err.code == 404
39
+ ui.error("Load balancer ID #{load_balancer_id} not found. Skipping.")
40
+ next
41
+ end
42
+
43
+ nics = load_balancer.entities.balancednics.items.map { |nic| nic.id }
44
+
45
+ msg_pair('ID', load_balancer.id)
46
+ msg_pair('Name', load_balancer.properties.name)
47
+ msg_pair('IP address', load_balancer.properties.ip)
48
+ msg_pair('DHCP', load_balancer.properties.dhcp)
49
+ msg_pair('Balanced Nics', nics.to_s)
50
+
51
+ puts "\n"
52
+
53
+ begin
54
+ confirm('Do you really want to delete this Load balancer')
55
+ rescue SystemExit => exc
56
+ next
57
+ end
58
+
59
+ _, _, headers = load_balancer_api.datacenters_loadbalancers_delete_with_http_info(
60
+ config[:datacenter_id],
61
+ load_balancer_id,
62
+ )
63
+ ui.warn("Deleted Load balancer #{load_balancer.id}. Request ID: #{get_request_id headers}")
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,51 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudLoadbalancerGet < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud loadbalancer get (options)'
9
+
10
+ option :datacenter_id,
11
+ short: '-D DATACENTER_ID',
12
+ long: '--datacenter-id DATACENTER_ID',
13
+ description: 'ID of the data center'
14
+
15
+ option :loadbalancer_id,
16
+ short: '-L LOADBALANCER_ID',
17
+ long: '--loadbalancer-id LOADBALANCER_ID',
18
+ description: 'ID of the load balancer'
19
+
20
+ attr_reader :description, :required_options
21
+
22
+ def initialize(args = [])
23
+ super(args)
24
+ @description =
25
+ 'Retrieves the attributes of a given load balancer. This will also retrieve a list of NICs associated with the load balancer.'
26
+ @required_options = [:datacenter_id, :loadbalancer_id, :ionoscloud_username, :ionoscloud_password]
27
+ end
28
+
29
+ def run
30
+ $stdout.sync = true
31
+ validate_required_params(@required_options, config)
32
+
33
+ load_balancer_api = Ionoscloud::LoadBalancerApi.new(api_client)
34
+
35
+ load_balancer = load_balancer_api.datacenters_loadbalancers_find_by_id(
36
+ config[:datacenter_id],
37
+ config[:loadbalancer_id],
38
+ { depth: 1 },
39
+ )
40
+
41
+ nics = load_balancer.entities.balancednics.items.map! { |el| el.id }
42
+
43
+ puts "#{ui.color('ID', :cyan)}: #{load_balancer.id}"
44
+ puts "#{ui.color('Name', :cyan)}: #{load_balancer.properties.name}"
45
+ puts "#{ui.color('IP address', :cyan)}: #{load_balancer.properties.ip}"
46
+ puts "#{ui.color('DHCP', :cyan)}: #{load_balancer.properties.dhcp}"
47
+ puts "#{ui.color('Balanced Nics', :cyan)}: #{nics.to_s}"
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,50 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudLoadbalancerList < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud loadbalancer list (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
+ 'Retrieve a list of load balancers within the virtual data center.'
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
+ load_balancers_list = [
29
+ ui.color('ID', :bold),
30
+ ui.color('Name', :bold),
31
+ ui.color('IP address', :bold),
32
+ ui.color('DHCP', :bold),
33
+ ui.color('NICs count', :bold),
34
+ ]
35
+
36
+ load_balancer_api = Ionoscloud::LoadBalancerApi.new(api_client)
37
+
38
+ load_balancer_api.datacenters_loadbalancers_get(config[:datacenter_id], { depth: 2 }).items.each do |load_balancer|
39
+ load_balancers_list << load_balancer.id
40
+ load_balancers_list << load_balancer.properties.name
41
+ load_balancers_list << load_balancer.properties.ip
42
+ load_balancers_list << load_balancer.properties.dhcp.to_s
43
+ load_balancers_list << load_balancer.entities.balancednics.items.length.to_s
44
+ end
45
+
46
+ puts ui.list(load_balancers_list, :uneven_columns_across, 5)
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,75 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudLoadbalancerNicAdd < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud loadbalancer nic add NIC_ID [NIC_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
+ option :loadbalancer_id,
16
+ short: '-L LOADBALANCER_ID',
17
+ long: '--loadbalancer-id LOADBALANCER_ID',
18
+ description: 'Name of the load balancer'
19
+
20
+ attr_reader :description, :required_options
21
+
22
+ def initialize(args = [])
23
+ super(args)
24
+ @description =
25
+ 'Adds the association of a NIC with a load balancer.'
26
+ @required_options = [:datacenter_id, :loadbalancer_id, :ionoscloud_username, :ionoscloud_password]
27
+ end
28
+
29
+ def run
30
+ $stdout.sync = true
31
+ validate_required_params(@required_options, config)
32
+
33
+ load_balancer_api = Ionoscloud::LoadBalancerApi.new(api_client)
34
+
35
+ request_ids_to_wait = []
36
+
37
+ @name_args.each do |nic_id|
38
+ begin
39
+ _, _, headers = load_balancer_api.datacenters_loadbalancers_balancednics_post_with_http_info(
40
+ config[:datacenter_id],
41
+ config[:loadbalancer_id],
42
+ { id: nic_id },
43
+ )
44
+ request_id = get_request_id headers
45
+ request_ids_to_wait.append(request_id)
46
+
47
+ ui.info("Added NIC #{nic_id} to the Load balancer #{config[:loadbalancer_id]}. Request ID: #{request_id}.")
48
+ rescue Ionoscloud::ApiError => err
49
+ raise err unless err.code == 404
50
+ ui.error("NIC ID #{nic_id} not found. Skipping.")
51
+ next
52
+ end
53
+ end
54
+
55
+ request_ids_to_wait.each { |request_id| api_client.wait_for { is_done? request_id } }
56
+
57
+ load_balancer = load_balancer_api.datacenters_loadbalancers_find_by_id(
58
+ config[:datacenter_id],
59
+ config[:loadbalancer_id],
60
+ { depth: 1 },
61
+ )
62
+
63
+ nics = load_balancer.entities.balancednics.items.map! { |el| el.id }
64
+
65
+ puts "\n"
66
+ puts "#{ui.color('ID', :cyan)}: #{load_balancer.id}"
67
+ puts "#{ui.color('Name', :cyan)}: #{load_balancer.properties.name}"
68
+ puts "#{ui.color('IP address', :cyan)}: #{load_balancer.properties.ip}"
69
+ puts "#{ui.color('DHCP', :cyan)}: #{load_balancer.properties.dhcp}"
70
+ puts "#{ui.color('Balanced Nics', :cyan)}: #{nics.to_s}"
71
+ puts 'done'
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,76 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudLoadbalancerNicRemove < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud loadbalancer nic remove NIC_ID [NIC_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
+ option :loadbalancer_id,
16
+ short: '-L LOADBALANCER_ID',
17
+ long: '--loadbalancer-id LOADBALANCER_ID',
18
+ description: 'Name of the load balancer'
19
+
20
+ attr_reader :description, :required_options
21
+
22
+ def initialize(args = [])
23
+ super(args)
24
+ @description =
25
+ 'Removes the association of a NIC with a load balancer.'
26
+ @required_options = [:datacenter_id, :loadbalancer_id, :ionoscloud_username, :ionoscloud_password]
27
+ end
28
+
29
+ def run
30
+ $stdout.sync = true
31
+ validate_required_params(@required_options, config)
32
+
33
+ load_balancer_api = Ionoscloud::LoadBalancerApi.new(api_client)
34
+
35
+ request_ids_to_wait = []
36
+
37
+ @name_args.each do |nic_id|
38
+ begin
39
+ _, _, headers = load_balancer_api.datacenters_loadbalancers_balancednics_delete_with_http_info(
40
+ config[:datacenter_id],
41
+ config[:loadbalancer_id],
42
+ nic_id,
43
+ )
44
+ request_id = get_request_id headers
45
+ request_ids_to_wait.append(request_id)
46
+
47
+ ui.warn("Removed NIC #{nic_id} from the Load balancer #{config[:loadbalancer_id]}. Request ID: #{request_id}.")
48
+ rescue Ionoscloud::ApiError => err
49
+ raise err unless err.code == 404
50
+ ui.error("NIC ID #{nic_id} not found. Skipping.")
51
+ next
52
+ end
53
+
54
+ end
55
+
56
+ request_ids_to_wait.each { |request_id| api_client.wait_for { is_done? request_id } }
57
+
58
+ load_balancer = load_balancer_api.datacenters_loadbalancers_find_by_id(
59
+ config[:datacenter_id],
60
+ config[:loadbalancer_id],
61
+ { depth: 1 },
62
+ )
63
+
64
+ nics = load_balancer.entities.balancednics.items.map! { |el| el.id }
65
+
66
+ puts "\n\n"
67
+ puts "#{ui.color('ID', :cyan)}: #{load_balancer.id}"
68
+ puts "#{ui.color('Name', :cyan)}: #{load_balancer.properties.name}"
69
+ puts "#{ui.color('IP address', :cyan)}: #{load_balancer.properties.ip}"
70
+ puts "#{ui.color('DHCP', :cyan)}: #{load_balancer.properties.dhcp}"
71
+ puts "#{ui.color('Balanced Nics', :cyan)}: #{nics.to_s}"
72
+ puts 'done'
73
+ end
74
+ end
75
+ end
76
+ end