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,81 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudResourceList < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud resource list (options)'
9
+
10
+ option :resource_type,
11
+ short: '-t RESOURCE_TYPE',
12
+ long: '--resource-type RESOURCE_TYPE',
13
+ description: 'The specific type of resources to retrieve information about.'
14
+
15
+ option :resource_id,
16
+ short: '-R RESOURCE_ID',
17
+ long: '--resource-id RESOURCE_ID',
18
+ description: 'The ID of the specific resource to retrieve information about.'
19
+
20
+ attr_reader :description, :required_options
21
+
22
+ def initialize(args = [])
23
+ super(args)
24
+ @description =
25
+ "No option: Retrieves a list of all resources and optionally their group associations. "\
26
+ "Please Note: This API call can take a significant amount of time to return when there "\
27
+ "are a large number of provisioned resources. You may wish to consult the next section "\
28
+ "on how to list resources of a particular type.\n\n"
29
+ "resource_type specified: Lists all shareable resources of a specific type. Optionally include their "\
30
+ "association with groups, permissions that a group has for the resource, and "\
31
+ "users that are members of the group. Because you are scoping your request to "\
32
+ "a specific resource type, this API will likely return faster than querying */um/resources*.\n\n"\
33
+ "The values available for resourceType are listed in this table:\n\n"\
34
+ "| ResourceType | Description |\n"\
35
+ "| datacenter | A virtual data center. |\n"\
36
+ "| image | A private image that has been uploaded. |\n"\
37
+ "| snapshot | A snapshot of a storage volume. |\n"\
38
+ "| ipblock | An IP block that has been reserved. |\n"\
39
+ "| k8s | A Kubernetes cluster. |\n\n"\
40
+ "resource_type and resource_id specified: Retrieves a specific resource."\
41
+ "**NOTE:** if you pass the *resource_id* option it is necessary to also pass the "\
42
+ "*resource_type* option or a list of all resources will be returned."
43
+ @required_options = [:ionoscloud_username, :ionoscloud_password]
44
+ end
45
+
46
+ def run
47
+ $stdout.sync = true
48
+ validate_required_params(@required_options, config)
49
+
50
+ user_management_api = Ionoscloud::UserManagementApi.new(api_client)
51
+
52
+ resource_list = [
53
+ ui.color('ID', :bold),
54
+ ui.color('Type', :bold),
55
+ ui.color('Name', :bold),
56
+ ]
57
+
58
+ if config[:resource_id] && !config[:resource_type]
59
+ ui.warn('Ignoring resource_id because no resource_type was specified.')
60
+ end
61
+
62
+ opts = { depth: 1 }
63
+
64
+ if config[:resource_type] && config[:resource_id]
65
+ resources = user_management_api.um_resources_find_by_type_and_id(config[:resource_type], config[:resource_id], opts)
66
+ elsif config[:resource_type]
67
+ resources = user_management_api.um_resources_find_by_type(config[:resource_type], opts)
68
+ else
69
+ resources = user_management_api.um_resources_get(opts)
70
+ end
71
+
72
+ resources.items.each do |resource|
73
+ resource_list << resource.id
74
+ resource_list << resource.type
75
+ resource_list << (resource.properties.respond_to?(:name) ? resource.properties.name : '')
76
+ end
77
+ puts ui.list(resource_list, :uneven_columns_across, 3)
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,45 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudS3keyCreate < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud s3key create (options)'
9
+
10
+ option :user_id,
11
+ short: '-u USER_ID',
12
+ long: '--user USER_ID',
13
+ description: 'The ID of the user'
14
+
15
+ attr_reader :description, :required_options
16
+
17
+ def initialize(args = [])
18
+ super(args)
19
+ @description =
20
+ 'Creates a new S3 key for a particular user.'
21
+ @required_options = [:user_id, :ionoscloud_username, :ionoscloud_password]
22
+ end
23
+
24
+ def run
25
+ $stdout.sync = true
26
+ validate_required_params(@required_options, config)
27
+
28
+ print "#{ui.color('Creating S3key...', :magenta)}"
29
+
30
+ user_management_api = Ionoscloud::UserManagementApi.new(api_client)
31
+
32
+ s3_key, _, headers = user_management_api.um_users_s3keys_post_with_http_info(config[:user_id])
33
+
34
+ dot = ui.color('.', :magenta)
35
+ api_client.wait_for { print dot; is_done? get_request_id headers }
36
+
37
+ puts "\n"
38
+ puts "#{ui.color('ID', :cyan)}: #{s3_key.id}"
39
+ puts "#{ui.color('Secret Key', :cyan)}: #{s3_key.properties.secret_key}"
40
+ puts "#{ui.color('Active', :cyan)}: #{s3_key.properties.active}"
41
+ puts 'done'
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,57 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudS3keyDelete < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud s3key delete S3KEY_ID [S3KEY_ID] (options)'
9
+
10
+ option :user_id,
11
+ short: '-u USER_ID',
12
+ long: '--user USER_ID',
13
+ description: 'The ID of the user'
14
+
15
+ attr_reader :description, :required_options
16
+
17
+ def initialize(args = [])
18
+ super(args)
19
+ @description =
20
+ 'This operation deletes a specific S3 key.'
21
+ @required_options = [:user_id, :ionoscloud_username, :ionoscloud_password]
22
+ end
23
+
24
+ def run
25
+ $stdout.sync = true
26
+ validate_required_params(@required_options, config)
27
+
28
+ user_management_api = Ionoscloud::UserManagementApi.new(api_client)
29
+
30
+ @name_args.each do |s3key_id|
31
+ begin
32
+ s3_key = user_management_api.um_users_s3keys_find_by_key_id(config[:user_id], s3key_id)
33
+ rescue Ionoscloud::ApiError => err
34
+ raise err unless err.code == 404
35
+ ui.error("S3 key ID #{s3key_id} not found. Skipping.")
36
+ next
37
+ end
38
+
39
+ msg_pair('ID', s3_key.id)
40
+ msg_pair('Secret Key', s3_key.properties.secret_key)
41
+ msg_pair('Active', s3_key.properties.active.to_s)
42
+
43
+ puts "\n"
44
+
45
+ begin
46
+ confirm('Do you really want to delete this S3 key')
47
+ rescue SystemExit => exc
48
+ next
49
+ end
50
+
51
+ _, _, headers = user_management_api.um_users_s3keys_delete_with_http_info(config[:user_id], s3key_id)
52
+ ui.warn("Deleted S3 key #{s3_key.id}. Request ID: #{get_request_id headers}")
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,46 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudS3keyList < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud s3key list (options)'
9
+
10
+ option :user_id,
11
+ short: '-u USER_ID',
12
+ long: '--user USER_ID',
13
+ description: 'The ID of the user'
14
+
15
+ attr_reader :description, :required_options
16
+
17
+ def initialize(args = [])
18
+ super(args)
19
+ @description =
20
+ 'Retrieve a list of all the S3 keys for a specific user.'
21
+ @required_options = [:user_id, :ionoscloud_username, :ionoscloud_password]
22
+ end
23
+
24
+ def run
25
+ $stdout.sync = true
26
+ validate_required_params(@required_options, config)
27
+
28
+ s3key_list = [
29
+ ui.color('ID', :bold),
30
+ ui.color('Secret Key', :bold),
31
+ ui.color('Active', :bold),
32
+ ]
33
+
34
+ user_management_api = Ionoscloud::UserManagementApi.new(api_client)
35
+
36
+ user_management_api.um_users_s3keys_get(config[:user_id], { depth: 1 }).items.each do |s3_key|
37
+ s3key_list << s3_key.id
38
+ s3key_list << s3_key.properties.secret_key
39
+ s3key_list << s3_key.properties.active.to_s
40
+ end
41
+
42
+ puts ui.list(s3key_list, :uneven_columns_across, 3)
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,104 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudServerCreate < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud server create (options)'
9
+
10
+ option :datacenter_id,
11
+ short: '-D DATACENTER_ID',
12
+ long: '--datacenter-id DATACENTER_ID',
13
+ description: 'Name of the virtual datacenter'
14
+
15
+ option :name,
16
+ short: '-n NAME',
17
+ long: '--name NAME',
18
+ description: 'Name of the server'
19
+
20
+ option :cores,
21
+ short: '-C CORES',
22
+ long: '--cores CORES',
23
+ description: 'The number of processor cores'
24
+
25
+ option :cpu_family,
26
+ short: '-f CPU_FAMILY',
27
+ long: '--cpu-family CPU_FAMILY',
28
+ description: 'The family of the CPU (INTEL_XEON or AMD_OPTERON)',
29
+ default: 'INTEL_SKYLAKE'
30
+
31
+ option :ram,
32
+ short: '-r RAM',
33
+ long: '--ram RAM',
34
+ description: 'The amount of RAM in MB'
35
+
36
+ option :availability_zone,
37
+ short: '-a AVAILABILITY_ZONE',
38
+ long: '--availability-zone AVAILABILITY_ZONE',
39
+ description: 'The availability zone of the server',
40
+ default: 'AUTO'
41
+
42
+ option :boot_volume,
43
+ long: '--boot-volume VOLUME_ID',
44
+ description: 'Reference to a volume used for booting'
45
+
46
+ option :boot_cdrom,
47
+ long: '--boot-cdrom CDROM_ID',
48
+ description: 'Reference to a CD-ROM used for booting'
49
+
50
+ attr_reader :description, :required_options
51
+
52
+ def initialize(args = [])
53
+ super(args)
54
+ @description =
55
+ "One of the unique features of the Ionoscloud platform when compared "\
56
+ "with the other providers is that they allow you to define your own settings "\
57
+ "for cores, memory, and disk size without being tied to a particular size or flavor.\n\n"\
58
+ "Note: *The memory parameter value must be a multiple of 256, e.g. 256, 512, 768, 1024, and so forth.*"
59
+ @required_options = [:datacenter_id, :cores, :ram, :ionoscloud_username, :ionoscloud_password]
60
+ end
61
+
62
+ def run
63
+ $stdout.sync = true
64
+ validate_required_params(@required_options, config)
65
+
66
+ print "#{ui.color('Creating server...', :magenta)}"
67
+ params = {
68
+ name: config[:name],
69
+ cores: config[:cores],
70
+ cpuFamily: config[:cpu_family],
71
+ ram: config[:ram],
72
+ availabilityZone: config[:availability_zone]
73
+ }
74
+
75
+ params[:bootCdrom] = { id: config[:boot_cdrom] } unless config[:boot_cdrom].nil?
76
+ params[:bootVolume] = { id: config[:boot_volume] } unless config[:boot_volume].nil?
77
+
78
+ server_api = Ionoscloud::ServerApi.new(api_client)
79
+
80
+ server, _, headers = server_api.datacenters_servers_post_with_http_info(
81
+ config[:datacenter_id],
82
+ { properties: params.compact },
83
+ )
84
+
85
+ dot = ui.color('.', :magenta)
86
+ api_client.wait_for { print dot; is_done? get_request_id headers }
87
+
88
+ server = server_api.datacenters_servers_find_by_id(config[:datacenter_id], server.id)
89
+
90
+ puts "\n"
91
+ puts "#{ui.color('ID', :cyan)}: #{server.id}"
92
+ puts "#{ui.color('Name', :cyan)}: #{server.properties.name}"
93
+ puts "#{ui.color('Cores', :cyan)}: #{server.properties.cores}"
94
+ puts "#{ui.color('CPU Family', :cyan)}: #{server.properties.cpu_family}"
95
+ puts "#{ui.color('Ram', :cyan)}: #{server.properties.ram}"
96
+ puts "#{ui.color('Availability Zone', :cyan)}: #{server.properties.availability_zone}"
97
+ puts "#{ui.color('Boot Volume', :cyan)}: #{server.properties.boot_volume ? server.properties.boot_volume.id : ''}"
98
+ puts "#{ui.color('Boot CDROM', :cyan)}: #{server.properties.boot_cdrom ? server.properties.boot_cdrom.id : ''}"
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 IonoscloudServerDelete < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud server delete SERVER_ID [SERVER_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
+ "This will remove a server from a VDC.\n\n"\
21
+ "**NOTE**: This will not automatically remove the storage volume(s) "\
22
+ "attached to a server. A separate API call is required to perform that action."
23
+ @required_options = [:datacenter_id, :ionoscloud_username, :ionoscloud_password]
24
+ end
25
+
26
+ def run
27
+ $stdout.sync = true
28
+ validate_required_params(@required_options, config)
29
+
30
+ server_api = Ionoscloud::ServerApi.new(api_client)
31
+
32
+ @name_args.each do |server_id|
33
+ begin
34
+ server = server_api.datacenters_servers_find_by_id(config[:datacenter_id], server_id)
35
+ rescue Ionoscloud::ApiError => err
36
+ raise err unless err.code == 404
37
+ ui.error("Server ID #{server_id} not found. Skipping.")
38
+ next
39
+ end
40
+
41
+ msg_pair('ID', server.id)
42
+ msg_pair('Name', server.properties.name)
43
+ msg_pair('Cores', server.properties.cores)
44
+ msg_pair('CPU Family', server.properties.cpu_family)
45
+ msg_pair('Ram', server.properties.ram)
46
+ msg_pair('Availability Zone', server.properties.availability_zone)
47
+ msg_pair('Boot Volume', server.properties.boot_volume.id)
48
+ msg_pair('Boot CDROM', server.properties.boot_cdrom.id)
49
+
50
+ begin
51
+ confirm('Do you really want to delete this server')
52
+ rescue SystemExit => exc
53
+ next
54
+ end
55
+
56
+ _, _, headers = server_api.datacenters_servers_delete_with_http_info(config[:datacenter_id], server_id)
57
+ ui.warn("Deleted Server #{server.id}. Request ID: #{get_request_id headers}")
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,58 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudServerList < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud server 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 server'
14
+
15
+ attr_reader :description, :required_options
16
+
17
+ def initialize(args = [])
18
+ super(args)
19
+ @description =
20
+ 'List all available servers under a specified 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
+ server_list = [
29
+ ui.color('ID', :bold),
30
+ ui.color('Name', :bold),
31
+ ui.color('Cores', :bold),
32
+ ui.color('CPU Family', :bold),
33
+ ui.color('RAM', :bold),
34
+ ui.color('Availability Zone', :bold),
35
+ ui.color('VM State', :bold),
36
+ ui.color('Boot Volume', :bold),
37
+ ui.color('Boot CDROM', :bold),
38
+ ]
39
+
40
+ server_api = Ionoscloud::ServerApi.new(api_client)
41
+
42
+ server_api.datacenters_servers_get(config[:datacenter_id], { depth: 1 }).items.each do |server|
43
+ server_list << server.id
44
+ server_list << server.properties.name
45
+ server_list << server.properties.cores.to_s
46
+ server_list << server.properties.cpu_family
47
+ server_list << server.properties.ram.to_s
48
+ server_list << server.properties.availability_zone
49
+ server_list << server.properties.vm_state
50
+ server_list << server.properties.boot_volume || ''
51
+ server_list << server.properties.boot_cdrom || ''
52
+ end
53
+
54
+ puts ui.list(server_list, :uneven_columns_across, 9)
55
+ end
56
+ end
57
+ end
58
+ end