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.
- checksums.yaml +7 -0
- data/.gitbook.yaml +4 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +54 -0
- data/.github/ISSUE_TEMPLATE/config.yml +5 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +51 -0
- data/.github/workflows/ci.yml +38 -0
- data/.github/workflows/publish.yml +58 -0
- data/.gitignore +26 -0
- data/.rubocop.yml +148 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +201 -0
- data/Rakefile +7 -0
- data/docs/README.md +67 -0
- data/docs/changelog.md +1 -0
- data/docs/docs_generator.rb +107 -0
- data/docs/subcommands/backupunit_create.md +38 -0
- data/docs/subcommands/backupunit_delete.md +26 -0
- data/docs/subcommands/backupunit_list.md +26 -0
- data/docs/subcommands/backupunit_ssourl.md +30 -0
- data/docs/subcommands/composite_server_create.md +97 -0
- data/docs/subcommands/contract_list.md +26 -0
- data/docs/subcommands/datacenter_create.md +41 -0
- data/docs/subcommands/datacenter_delete.md +26 -0
- data/docs/subcommands/datacenter_list.md +26 -0
- data/docs/subcommands/firewall_create.md +65 -0
- data/docs/subcommands/firewall_delete.md +38 -0
- data/docs/subcommands/firewall_list.md +38 -0
- data/docs/subcommands/group_create.md +48 -0
- data/docs/subcommands/group_delete.md +26 -0
- data/docs/subcommands/group_get.md +30 -0
- data/docs/subcommands/group_list.md +29 -0
- data/docs/subcommands/group_user_add.md +30 -0
- data/docs/subcommands/group_user_remove.md +30 -0
- data/docs/subcommands/image_list.md +26 -0
- data/docs/subcommands/ipblock_create.md +37 -0
- data/docs/subcommands/ipblock_delete.md +26 -0
- data/docs/subcommands/ipblock_list.md +26 -0
- data/docs/subcommands/ipfailover_add.md +46 -0
- data/docs/subcommands/ipfailover_remove.md +42 -0
- data/docs/subcommands/k8s_create.md +39 -0
- data/docs/subcommands/k8s_delete.md +26 -0
- data/docs/subcommands/k8s_list.md +26 -0
- data/docs/subcommands/kubeconfig_get.md +30 -0
- data/docs/subcommands/label_add.md +45 -0
- data/docs/subcommands/label_list.md +35 -0
- data/docs/subcommands/label_remove.md +37 -0
- data/docs/subcommands/lan_create.md +36 -0
- data/docs/subcommands/lan_delete.md +30 -0
- data/docs/subcommands/lan_list.md +30 -0
- data/docs/subcommands/loadbalancer_create.md +43 -0
- data/docs/subcommands/loadbalancer_delete.md +30 -0
- data/docs/subcommands/loadbalancer_get.md +34 -0
- data/docs/subcommands/loadbalancer_list.md +30 -0
- data/docs/subcommands/loadbalancer_nic_add.md +34 -0
- data/docs/subcommands/loadbalancer_nic_remove.md +34 -0
- data/docs/subcommands/location_list.md +26 -0
- data/docs/subcommands/nic_create.md +51 -0
- data/docs/subcommands/nic_delete.md +34 -0
- data/docs/subcommands/nic_list.md +34 -0
- data/docs/subcommands/node_delete.md +34 -0
- data/docs/subcommands/node_list.md +34 -0
- data/docs/subcommands/node_replace.md +36 -0
- data/docs/subcommands/nodepool_create.md +87 -0
- data/docs/subcommands/nodepool_delete.md +30 -0
- data/docs/subcommands/nodepool_list.md +30 -0
- data/docs/subcommands/pcc_create.md +38 -0
- data/docs/subcommands/pcc_delete.md +26 -0
- data/docs/subcommands/pcc_list.md +26 -0
- data/docs/subcommands/request_list.md +32 -0
- data/docs/subcommands/request_status.md +30 -0
- data/docs/subcommands/request_wait.md +30 -0
- data/docs/subcommands/resource_list.md +34 -0
- data/docs/subcommands/s3key_create.md +30 -0
- data/docs/subcommands/s3key_delete.md +30 -0
- data/docs/subcommands/s3key_list.md +30 -0
- data/docs/subcommands/server_create.md +55 -0
- data/docs/subcommands/server_delete.md +32 -0
- data/docs/subcommands/server_list.md +30 -0
- data/docs/subcommands/server_reboot.md +30 -0
- data/docs/subcommands/server_start.md +30 -0
- data/docs/subcommands/server_stop.md +30 -0
- data/docs/subcommands/share_create.md +40 -0
- data/docs/subcommands/share_delete.md +30 -0
- data/docs/subcommands/share_list.md +30 -0
- data/docs/subcommands/snapshot_create.md +34 -0
- data/docs/subcommands/snapshot_delete.md +26 -0
- data/docs/subcommands/snapshot_list.md +26 -0
- data/docs/subcommands/snapshot_restore.md +38 -0
- data/docs/subcommands/user_create.md +49 -0
- data/docs/subcommands/user_delete.md +26 -0
- data/docs/subcommands/user_list.md +29 -0
- data/docs/subcommands/user_ssourl.md +30 -0
- data/docs/subcommands/volume_attach.md +34 -0
- data/docs/subcommands/volume_create.md +63 -0
- data/docs/subcommands/volume_delete.md +30 -0
- data/docs/subcommands/volume_detach.md +36 -0
- data/docs/subcommands/volume_list.md +33 -0
- data/docs/summary.md +89 -0
- data/docs/templates/subcommand_doc.mustache +26 -0
- data/docs/templates/summary.mustache +10 -0
- data/knife-ionoscloud.gemspec +27 -0
- data/lib/chef/knife/ionoscloud_backupunit_create.rb +63 -0
- data/lib/chef/knife/ionoscloud_backupunit_delete.rb +55 -0
- data/lib/chef/knife/ionoscloud_backupunit_list.rb +41 -0
- data/lib/chef/knife/ionoscloud_backupunit_ssourl.rb +39 -0
- data/lib/chef/knife/ionoscloud_base.rb +76 -0
- data/lib/chef/knife/ionoscloud_composite_server_create.rb +217 -0
- data/lib/chef/knife/ionoscloud_contract_list.rb +50 -0
- data/lib/chef/knife/ionoscloud_datacenter_create.rb +66 -0
- data/lib/chef/knife/ionoscloud_datacenter_delete.rb +56 -0
- data/lib/chef/knife/ionoscloud_datacenter_list.rb +50 -0
- data/lib/chef/knife/ionoscloud_firewall_create.rb +135 -0
- data/lib/chef/knife/ionoscloud_firewall_delete.rb +76 -0
- data/lib/chef/knife/ionoscloud_firewall_list.rb +72 -0
- data/lib/chef/knife/ionoscloud_group_create.rb +89 -0
- data/lib/chef/knife/ionoscloud_group_delete.rb +61 -0
- data/lib/chef/knife/ionoscloud_group_get.rb +46 -0
- data/lib/chef/knife/ionoscloud_group_list.rb +62 -0
- data/lib/chef/knife/ionoscloud_group_user_add.rb +72 -0
- data/lib/chef/knife/ionoscloud_group_user_remove.rb +72 -0
- data/lib/chef/knife/ionoscloud_image_list.rb +47 -0
- data/lib/chef/knife/ionoscloud_ipblock_create.rb +63 -0
- data/lib/chef/knife/ionoscloud_ipblock_delete.rb +50 -0
- data/lib/chef/knife/ionoscloud_ipblock_list.rb +42 -0
- data/lib/chef/knife/ionoscloud_ipfailover_add.rb +76 -0
- data/lib/chef/knife/ionoscloud_ipfailover_remove.rb +76 -0
- data/lib/chef/knife/ionoscloud_k8s_create.rb +79 -0
- data/lib/chef/knife/ionoscloud_k8s_delete.rb +67 -0
- data/lib/chef/knife/ionoscloud_k8s_list.rb +45 -0
- data/lib/chef/knife/ionoscloud_kubeconfig_get.rb +37 -0
- data/lib/chef/knife/ionoscloud_label_add.rb +84 -0
- data/lib/chef/knife/ionoscloud_label_list.rb +83 -0
- data/lib/chef/knife/ionoscloud_label_remove.rb +77 -0
- data/lib/chef/knife/ionoscloud_lan_create.rb +69 -0
- data/lib/chef/knife/ionoscloud_lan_delete.rb +54 -0
- data/lib/chef/knife/ionoscloud_lan_list.rb +46 -0
- data/lib/chef/knife/ionoscloud_loadbalancer_create.rb +87 -0
- data/lib/chef/knife/ionoscloud_loadbalancer_delete.rb +68 -0
- data/lib/chef/knife/ionoscloud_loadbalancer_get.rb +51 -0
- data/lib/chef/knife/ionoscloud_loadbalancer_list.rb +50 -0
- data/lib/chef/knife/ionoscloud_loadbalancer_nic_add.rb +75 -0
- data/lib/chef/knife/ionoscloud_loadbalancer_nic_remove.rb +76 -0
- data/lib/chef/knife/ionoscloud_location_list.rb +38 -0
- data/lib/chef/knife/ionoscloud_nic_create.rb +104 -0
- data/lib/chef/knife/ionoscloud_nic_delete.rb +62 -0
- data/lib/chef/knife/ionoscloud_nic_list.rb +57 -0
- data/lib/chef/knife/ionoscloud_node_delete.rb +65 -0
- data/lib/chef/knife/ionoscloud_node_list.rb +55 -0
- data/lib/chef/knife/ionoscloud_node_replace.rb +54 -0
- data/lib/chef/knife/ionoscloud_nodepool_create.rb +163 -0
- data/lib/chef/knife/ionoscloud_nodepool_delete.rb +60 -0
- data/lib/chef/knife/ionoscloud_nodepool_list.rb +51 -0
- data/lib/chef/knife/ionoscloud_pcc_create.rb +68 -0
- data/lib/chef/knife/ionoscloud_pcc_delete.rb +57 -0
- data/lib/chef/knife/ionoscloud_pcc_list.rb +41 -0
- data/lib/chef/knife/ionoscloud_request_list.rb +94 -0
- data/lib/chef/knife/ionoscloud_request_status.rb +37 -0
- data/lib/chef/knife/ionoscloud_request_wait.rb +41 -0
- data/lib/chef/knife/ionoscloud_resource_list.rb +81 -0
- data/lib/chef/knife/ionoscloud_s3key_create.rb +45 -0
- data/lib/chef/knife/ionoscloud_s3key_delete.rb +57 -0
- data/lib/chef/knife/ionoscloud_s3key_list.rb +46 -0
- data/lib/chef/knife/ionoscloud_server_create.rb +104 -0
- data/lib/chef/knife/ionoscloud_server_delete.rb +62 -0
- data/lib/chef/knife/ionoscloud_server_list.rb +58 -0
- data/lib/chef/knife/ionoscloud_server_reboot.rb +45 -0
- data/lib/chef/knife/ionoscloud_server_start.rb +43 -0
- data/lib/chef/knife/ionoscloud_server_stop.rb +44 -0
- data/lib/chef/knife/ionoscloud_share_create.rb +71 -0
- data/lib/chef/knife/ionoscloud_share_delete.rb +55 -0
- data/lib/chef/knife/ionoscloud_share_list.rb +47 -0
- data/lib/chef/knife/ionoscloud_snapshot_create.rb +58 -0
- data/lib/chef/knife/ionoscloud_snapshot_delete.rb +54 -0
- data/lib/chef/knife/ionoscloud_snapshot_list.rb +45 -0
- data/lib/chef/knife/ionoscloud_snapshot_restore.rb +69 -0
- data/lib/chef/knife/ionoscloud_user_create.rb +83 -0
- data/lib/chef/knife/ionoscloud_user_delete.rb +56 -0
- data/lib/chef/knife/ionoscloud_user_list.rb +60 -0
- data/lib/chef/knife/ionoscloud_user_ssourl.rb +37 -0
- data/lib/chef/knife/ionoscloud_volume_attach.rb +52 -0
- data/lib/chef/knife/ionoscloud_volume_create.rb +133 -0
- data/lib/chef/knife/ionoscloud_volume_delete.rb +67 -0
- data/lib/chef/knife/ionoscloud_volume_detach.rb +77 -0
- data/lib/chef/knife/ionoscloud_volume_list.rb +70 -0
- data/lib/knife-ionoscloud/version.rb +6 -0
- data/spec/chef/knife/ionoscloud_backupunit_create_spec.rb +65 -0
- data/spec/chef/knife/ionoscloud_backupunit_delete_spec.rb +101 -0
- data/spec/chef/knife/ionoscloud_backupunit_list_spec.rb +72 -0
- data/spec/chef/knife/ionoscloud_backupunit_ssourl_spec.rb +93 -0
- data/spec/chef/knife/ionoscloud_base_spec.rb +157 -0
- data/spec/chef/knife/ionoscloud_composite_server_create_spec.rb +111 -0
- data/spec/chef/knife/ionoscloud_contract_list_spec.rb +81 -0
- data/spec/chef/knife/ionoscloud_datacenter_create_spec.rb +72 -0
- data/spec/chef/knife/ionoscloud_datacenter_delete_spec.rb +102 -0
- data/spec/chef/knife/ionoscloud_datacenter_list_spec.rb +76 -0
- data/spec/chef/knife/ionoscloud_firewall_create_spec.rb +90 -0
- data/spec/chef/knife/ionoscloud_firewall_delete_spec.rb +117 -0
- data/spec/chef/knife/ionoscloud_firewall_list_spec.rb +90 -0
- data/spec/chef/knife/ionoscloud_group_create_spec.rb +76 -0
- data/spec/chef/knife/ionoscloud_group_delete_spec.rb +109 -0
- data/spec/chef/knife/ionoscloud_group_get_spec.rb +73 -0
- data/spec/chef/knife/ionoscloud_group_list_spec.rb +115 -0
- data/spec/chef/knife/ionoscloud_group_user_add_spec.rb +134 -0
- data/spec/chef/knife/ionoscloud_group_user_remove_spec.rb +130 -0
- data/spec/chef/knife/ionoscloud_image_list_spec.rb +75 -0
- data/spec/chef/knife/ionoscloud_ipblock_create_spec.rb +72 -0
- data/spec/chef/knife/ionoscloud_ipblock_delete_spec.rb +102 -0
- data/spec/chef/knife/ionoscloud_ipblock_list_spec.rb +74 -0
- data/spec/chef/knife/ionoscloud_ipfailover_add_spec.rb +83 -0
- data/spec/chef/knife/ionoscloud_ipfailover_remove_spec.rb +122 -0
- data/spec/chef/knife/ionoscloud_k8s_create_spec.rb +83 -0
- data/spec/chef/knife/ionoscloud_k8s_delete_spec.rb +172 -0
- data/spec/chef/knife/ionoscloud_k8s_list_spec.rb +73 -0
- data/spec/chef/knife/ionoscloud_kubeconfig_get_spec.rb +91 -0
- data/spec/chef/knife/ionoscloud_label_add_spec.rb +287 -0
- data/spec/chef/knife/ionoscloud_label_list_spec.rb +337 -0
- data/spec/chef/knife/ionoscloud_label_remove_spec.rb +391 -0
- data/spec/chef/knife/ionoscloud_lan_create_spec.rb +77 -0
- data/spec/chef/knife/ionoscloud_lan_delete_spec.rb +103 -0
- data/spec/chef/knife/ionoscloud_lan_list_spec.rb +73 -0
- data/spec/chef/knife/ionoscloud_loadbalancer_create_spec.rb +82 -0
- data/spec/chef/knife/ionoscloud_loadbalancer_delete_spec.rb +107 -0
- data/spec/chef/knife/ionoscloud_loadbalancer_get_spec.rb +68 -0
- data/spec/chef/knife/ionoscloud_loadbalancer_list_spec.rb +74 -0
- data/spec/chef/knife/ionoscloud_loadbalancer_nic_add_spec.rb +128 -0
- data/spec/chef/knife/ionoscloud_loadbalancer_nic_remove_spec.rb +124 -0
- data/spec/chef/knife/ionoscloud_location_list_spec.rb +67 -0
- data/spec/chef/knife/ionoscloud_nic_create_spec.rb +85 -0
- data/spec/chef/knife/ionoscloud_nic_delete_spec.rb +108 -0
- data/spec/chef/knife/ionoscloud_nic_list_spec.rb +83 -0
- data/spec/chef/knife/ionoscloud_node_delete_spec.rb +107 -0
- data/spec/chef/knife/ionoscloud_node_list_spec.rb +75 -0
- data/spec/chef/knife/ionoscloud_node_replace_spec.rb +94 -0
- data/spec/chef/knife/ionoscloud_nodepool_create_spec.rb +99 -0
- data/spec/chef/knife/ionoscloud_nodepool_delete_spec.rb +106 -0
- data/spec/chef/knife/ionoscloud_nodepool_list_spec.rb +76 -0
- data/spec/chef/knife/ionoscloud_pcc_create_spec.rb +70 -0
- data/spec/chef/knife/ionoscloud_pcc_delete_spec.rb +106 -0
- data/spec/chef/knife/ionoscloud_pcc_list_spec.rb +69 -0
- data/spec/chef/knife/ionoscloud_request_list_spec.rb +165 -0
- data/spec/chef/knife/ionoscloud_request_status_spec.rb +92 -0
- data/spec/chef/knife/ionoscloud_request_wait_spec.rb +74 -0
- data/spec/chef/knife/ionoscloud_resource_list_spec.rb +155 -0
- data/spec/chef/knife/ionoscloud_s3key_create_spec.rb +64 -0
- data/spec/chef/knife/ionoscloud_s3key_delete_spec.rb +103 -0
- data/spec/chef/knife/ionoscloud_s3key_list_spec.rb +70 -0
- data/spec/chef/knife/ionoscloud_server_create_spec.rb +84 -0
- data/spec/chef/knife/ionoscloud_server_delete_spec.rb +108 -0
- data/spec/chef/knife/ionoscloud_server_list_spec.rb +85 -0
- data/spec/chef/knife/ionoscloud_server_reboot_spec.rb +95 -0
- data/spec/chef/knife/ionoscloud_server_start_spec.rb +95 -0
- data/spec/chef/knife/ionoscloud_server_stop_spec.rb +95 -0
- data/spec/chef/knife/ionoscloud_share_create_spec.rb +68 -0
- data/spec/chef/knife/ionoscloud_share_delete_spec.rb +103 -0
- data/spec/chef/knife/ionoscloud_share_list_spec.rb +70 -0
- data/spec/chef/knife/ionoscloud_snapshot_create_spec.rb +74 -0
- data/spec/chef/knife/ionoscloud_snapshot_delete_spec.rb +103 -0
- data/spec/chef/knife/ionoscloud_snapshot_list_spec.rb +73 -0
- data/spec/chef/knife/ionoscloud_snapshot_restore_spec.rb +78 -0
- data/spec/chef/knife/ionoscloud_user_create_spec.rb +73 -0
- data/spec/chef/knife/ionoscloud_user_delete_spec.rb +104 -0
- data/spec/chef/knife/ionoscloud_user_list_spec.rb +103 -0
- data/spec/chef/knife/ionoscloud_user_ssourl_spec.rb +93 -0
- data/spec/chef/knife/ionoscloud_volume_attach_spec.rb +99 -0
- data/spec/chef/knife/ionoscloud_volume_create_spec.rb +143 -0
- data/spec/chef/knife/ionoscloud_volume_delete_spec.rb +108 -0
- data/spec/chef/knife/ionoscloud_volume_detach_spec.rb +110 -0
- data/spec/chef/knife/ionoscloud_volume_list_spec.rb +118 -0
- data/spec/spec_helper.rb +702 -0
- data/spec/test.sh +3 -0
- data/summary.md +0 -0
- metadata +460 -0
@@ -0,0 +1,63 @@
|
|
1
|
+
require_relative 'ionoscloud_base'
|
2
|
+
|
3
|
+
class Chef
|
4
|
+
class Knife
|
5
|
+
class IonoscloudIpblockCreate < Knife
|
6
|
+
include Knife::IonoscloudBase
|
7
|
+
|
8
|
+
banner 'knife ionoscloud ipblock create (options)'
|
9
|
+
|
10
|
+
option :location,
|
11
|
+
short: '-l LOCATION',
|
12
|
+
long: '--location LOCATION',
|
13
|
+
description: 'Location of the IP block (us/las, us/ewr, de/fra, de/fkb)'
|
14
|
+
|
15
|
+
option :size,
|
16
|
+
short: '-S INT',
|
17
|
+
long: '--size INT',
|
18
|
+
description: 'The number of IP addresses to reserve'
|
19
|
+
|
20
|
+
option :name,
|
21
|
+
short: '-n NAME',
|
22
|
+
long: '--name NAME',
|
23
|
+
description: 'Name of the IP block'
|
24
|
+
|
25
|
+
attr_reader :description, :required_options
|
26
|
+
|
27
|
+
def initialize(args = [])
|
28
|
+
super(args)
|
29
|
+
@description =
|
30
|
+
'Reserves an IP block at a specified location that can be used by resources '\
|
31
|
+
'within any VDCs provisioned in that same location. An IP block consists of '\
|
32
|
+
'one or more static IP addresses. The IP block size (number of IP addresses) '\
|
33
|
+
'and location are required to reserve an IP block.'
|
34
|
+
@required_options = [:size, :location, :ionoscloud_username, :ionoscloud_password]
|
35
|
+
end
|
36
|
+
|
37
|
+
def run
|
38
|
+
$stdout.sync = true
|
39
|
+
validate_required_params(@required_options, config)
|
40
|
+
|
41
|
+
print "#{ui.color('Allocating IP block...', :magenta)}"
|
42
|
+
|
43
|
+
params = {
|
44
|
+
location: config[:location],
|
45
|
+
size: config[:size],
|
46
|
+
name: config[:name],
|
47
|
+
}.compact
|
48
|
+
|
49
|
+
ipblock, _, headers = Ionoscloud::IPBlocksApi.new(api_client).ipblocks_post_with_http_info({ properties: params.compact })
|
50
|
+
|
51
|
+
dot = ui.color('.', :magenta)
|
52
|
+
api_client.wait_for { print dot; is_done? get_request_id headers }
|
53
|
+
|
54
|
+
puts "\n"
|
55
|
+
puts "#{ui.color('ID', :cyan)}: #{ipblock.id}"
|
56
|
+
puts "#{ui.color('Name', :cyan)}: #{ipblock.properties.name}"
|
57
|
+
puts "#{ui.color('Location', :cyan)}: #{ipblock.properties.location}"
|
58
|
+
puts "#{ui.color('IP Addresses', :cyan)}: #{ipblock.properties.ips.to_s}"
|
59
|
+
puts 'done'
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require_relative 'ionoscloud_base'
|
2
|
+
|
3
|
+
class Chef
|
4
|
+
class Knife
|
5
|
+
class IonoscloudIpblockDelete < Knife
|
6
|
+
include Knife::IonoscloudBase
|
7
|
+
|
8
|
+
banner 'knife ionoscloud ipblock delete IPBLOCK_ID [IPBLOCK_ID]'
|
9
|
+
|
10
|
+
attr_reader :description, :required_options
|
11
|
+
|
12
|
+
def initialize(args = [])
|
13
|
+
super(args)
|
14
|
+
@description =
|
15
|
+
'Releases a currently assigned IP block.'
|
16
|
+
@required_options = [:ionoscloud_username, :ionoscloud_password]
|
17
|
+
end
|
18
|
+
|
19
|
+
def run
|
20
|
+
$stdout.sync = true
|
21
|
+
validate_required_params(@required_options, config)
|
22
|
+
|
23
|
+
ipblock_api = Ionoscloud::IPBlocksApi.new(api_client)
|
24
|
+
@name_args.each do |ipblock_id|
|
25
|
+
begin
|
26
|
+
ipblock = ipblock_api.ipblocks_find_by_id(ipblock_id)
|
27
|
+
rescue Ionoscloud::ApiError => err
|
28
|
+
raise err unless err.code == 404
|
29
|
+
ui.error("IP block ID #{ipblock_id} not found. Skipping.")
|
30
|
+
next
|
31
|
+
end
|
32
|
+
|
33
|
+
msg_pair('ID', ipblock.id)
|
34
|
+
msg_pair('Name', ipblock.properties.name)
|
35
|
+
msg_pair('Location', ipblock.properties.location)
|
36
|
+
msg_pair('IP Addresses', ipblock.properties.ips)
|
37
|
+
|
38
|
+
begin
|
39
|
+
confirm('Do you really want to delete this IP block')
|
40
|
+
rescue SystemExit => exc
|
41
|
+
next
|
42
|
+
end
|
43
|
+
|
44
|
+
_, _, headers = ipblock_api.ipblocks_delete_with_http_info(ipblock_id)
|
45
|
+
ui.warn("Released IP block #{ipblock.id}. Request ID: #{get_request_id headers}")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require_relative 'ionoscloud_base'
|
2
|
+
|
3
|
+
class Chef
|
4
|
+
class Knife
|
5
|
+
class IonoscloudIpblockList < Knife
|
6
|
+
include Knife::IonoscloudBase
|
7
|
+
|
8
|
+
banner 'knife ionoscloud ipblock list'
|
9
|
+
|
10
|
+
attr_reader :description, :required_options
|
11
|
+
|
12
|
+
def initialize(args = [])
|
13
|
+
super(args)
|
14
|
+
@description =
|
15
|
+
'Lists all available IP blocks.'
|
16
|
+
@required_options = [:ionoscloud_username, :ionoscloud_password]
|
17
|
+
end
|
18
|
+
|
19
|
+
def run
|
20
|
+
$stdout.sync = true
|
21
|
+
validate_required_params(@required_options, config)
|
22
|
+
|
23
|
+
ipblock_list = [
|
24
|
+
ui.color('ID', :bold),
|
25
|
+
ui.color('Name', :bold),
|
26
|
+
ui.color('Location', :bold),
|
27
|
+
ui.color('IP Addresses', :bold),
|
28
|
+
]
|
29
|
+
ipblock_api = Ionoscloud::IPBlocksApi.new(api_client)
|
30
|
+
|
31
|
+
ipblock_api.ipblocks_get({ depth: 1 }).items.each do |ipblock|
|
32
|
+
ipblock_list << ipblock.id
|
33
|
+
ipblock_list << ipblock.properties.name
|
34
|
+
ipblock_list << ipblock.properties.location
|
35
|
+
ipblock_list << ipblock.properties.ips.join(', ')
|
36
|
+
end
|
37
|
+
|
38
|
+
puts ui.list(ipblock_list, :uneven_columns_across, 4)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require_relative 'ionoscloud_base'
|
2
|
+
|
3
|
+
class Chef
|
4
|
+
class Knife
|
5
|
+
class IonoscloudIpfailoverAdd < Knife
|
6
|
+
include Knife::IonoscloudBase
|
7
|
+
|
8
|
+
banner 'knife ionoscloud ipfailover add (options)'
|
9
|
+
|
10
|
+
option :datacenter_id,
|
11
|
+
short: '-D DATACENTER_ID',
|
12
|
+
long: '--datacenter-id DATACENTER_ID',
|
13
|
+
description: 'Name of the data center'
|
14
|
+
|
15
|
+
option :lan_id,
|
16
|
+
short: '-l LAN_ID',
|
17
|
+
long: '--lan-id LAN_ID',
|
18
|
+
description: 'Lan ID'
|
19
|
+
|
20
|
+
option :ip,
|
21
|
+
short: '-i IP',
|
22
|
+
long: '--ip IP',
|
23
|
+
description: 'IP to be added to IP failover group'
|
24
|
+
|
25
|
+
option :nic_id,
|
26
|
+
short: '-n NIC_ID',
|
27
|
+
long: '--nic-id NIC_ID',
|
28
|
+
description: 'NIC to be added to IP failover group'
|
29
|
+
|
30
|
+
attr_reader :description, :required_options
|
31
|
+
|
32
|
+
def initialize(args = [])
|
33
|
+
super(args)
|
34
|
+
@description =
|
35
|
+
"Successfully setting up an IP Failover group requires three steps:\n"\
|
36
|
+
"* Add a reserved IP address to a NIC that will become the IP Failover master.\n"\
|
37
|
+
"* Use PATCH or PUT to enable ipFailover by providing the relevant ip and nicUuid values.\n"\
|
38
|
+
"* Add the same reserved IP address to any other NICs that are a member of the same LAN. Those NICs will become IP Failover members.\n"
|
39
|
+
@required_options = [:datacenter_id, :lan_id, :ip, :nic_id, :ionoscloud_username, :ionoscloud_password]
|
40
|
+
end
|
41
|
+
|
42
|
+
def run
|
43
|
+
$stdout.sync = true
|
44
|
+
validate_required_params(@required_options, config)
|
45
|
+
|
46
|
+
lan_api = Ionoscloud::LanApi.new(api_client)
|
47
|
+
|
48
|
+
lan = lan_api.datacenters_lans_find_by_id(config[:datacenter_id], config[:lan_id])
|
49
|
+
|
50
|
+
failover_ips = lan.properties.ip_failover || []
|
51
|
+
failover_ips.push({
|
52
|
+
ip: config[:ip],
|
53
|
+
nicUuid: config[:nic_id],
|
54
|
+
})
|
55
|
+
|
56
|
+
changes = Ionoscloud::LanProperties.new({ ip_failover: failover_ips })
|
57
|
+
|
58
|
+
_, _, headers = lan_api.datacenters_lans_patch_with_http_info(config[:datacenter_id], config[:lan_id], changes)
|
59
|
+
|
60
|
+
dot = ui.color('.', :magenta)
|
61
|
+
api_client.wait_for { print dot; is_done? get_request_id headers }
|
62
|
+
|
63
|
+
lan = lan_api.datacenters_lans_find_by_id(config[:datacenter_id], config[:lan_id])
|
64
|
+
|
65
|
+
ip_failovers = lan.properties.ip_failover.map { |el| el.to_hash }
|
66
|
+
|
67
|
+
puts "\n"
|
68
|
+
puts "#{ui.color('ID', :cyan)}: #{lan.id}"
|
69
|
+
puts "#{ui.color('Name', :cyan)}: #{lan.properties.name}"
|
70
|
+
puts "#{ui.color('Public', :cyan)}: #{lan.properties.public}"
|
71
|
+
puts "#{ui.color('IP Failover', :cyan)}: #{ip_failovers}"
|
72
|
+
puts 'done'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require_relative 'ionoscloud_base'
|
2
|
+
|
3
|
+
class Chef
|
4
|
+
class Knife
|
5
|
+
class IonoscloudIpfailoverRemove < Knife
|
6
|
+
include Knife::IonoscloudBase
|
7
|
+
|
8
|
+
banner 'knife ionoscloud ipfailover remove (options)'
|
9
|
+
|
10
|
+
option :datacenter_id,
|
11
|
+
short: '-D DATACENTER_ID',
|
12
|
+
long: '--datacenter-id DATACENTER_ID',
|
13
|
+
description: 'Name of the data center'
|
14
|
+
|
15
|
+
option :lan_id,
|
16
|
+
short: '-l LAN_ID',
|
17
|
+
long: '--lan-id LAN_ID',
|
18
|
+
description: 'Lan ID'
|
19
|
+
|
20
|
+
option :ip,
|
21
|
+
short: '-i IP',
|
22
|
+
long: '--ip IP',
|
23
|
+
description: 'IP to be removed from the IP failover group'
|
24
|
+
|
25
|
+
option :nic_id,
|
26
|
+
short: '-n NIC_ID',
|
27
|
+
long: '--nic-id NIC_ID',
|
28
|
+
description: 'NIC to be removed from the IP failover group'
|
29
|
+
|
30
|
+
attr_reader :description, :required_options
|
31
|
+
|
32
|
+
def initialize(args = [])
|
33
|
+
super(args)
|
34
|
+
@description =
|
35
|
+
'Remove IP Failover from LAN'
|
36
|
+
@required_options = [:datacenter_id, :lan_id, :ip, :nic_id, :ionoscloud_username, :ionoscloud_password]
|
37
|
+
end
|
38
|
+
|
39
|
+
def run
|
40
|
+
$stdout.sync = true
|
41
|
+
validate_required_params(@required_options, config)
|
42
|
+
|
43
|
+
lan_api = Ionoscloud::LanApi.new(api_client)
|
44
|
+
|
45
|
+
lan = lan_api.datacenters_lans_find_by_id(config[:datacenter_id], config[:lan_id])
|
46
|
+
|
47
|
+
initial_length = lan.properties.ip_failover.length
|
48
|
+
|
49
|
+
changes = Ionoscloud::LanProperties.new(
|
50
|
+
{ ip_failover: lan.properties.ip_failover.select { |el| el.nic_uuid != config[:nic_id] || el.ip != config[:ip] } },
|
51
|
+
)
|
52
|
+
new_length = changes.ip_failover.length
|
53
|
+
|
54
|
+
if new_length < initial_length
|
55
|
+
_, _, headers = lan_api.datacenters_lans_patch_with_http_info(
|
56
|
+
config[:datacenter_id], config[:lan_id], changes,
|
57
|
+
)
|
58
|
+
|
59
|
+
dot = ui.color('.', :magenta)
|
60
|
+
api_client.wait_for { print dot; is_done? get_request_id headers }
|
61
|
+
|
62
|
+
lan = lan_api.datacenters_lans_find_by_id(config[:datacenter_id], config[:lan_id])
|
63
|
+
end
|
64
|
+
|
65
|
+
ip_failovers = lan.properties.ip_failover.map { |el| el.to_hash }
|
66
|
+
|
67
|
+
puts "\n"
|
68
|
+
puts "#{ui.color('ID', :cyan)}: #{lan.id}"
|
69
|
+
puts "#{ui.color('Name', :cyan)}: #{lan.properties.name}"
|
70
|
+
puts "#{ui.color('Public', :cyan)}: #{lan.properties.public}"
|
71
|
+
puts "#{ui.color('IP Failover', :cyan)}: #{ip_failovers}"
|
72
|
+
puts 'done'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require_relative 'ionoscloud_base'
|
2
|
+
|
3
|
+
class Chef
|
4
|
+
class Knife
|
5
|
+
class IonoscloudK8sCreate < Knife
|
6
|
+
include Knife::IonoscloudBase
|
7
|
+
|
8
|
+
banner 'knife ionoscloud k8s create (options)'
|
9
|
+
|
10
|
+
option :name,
|
11
|
+
short: '-n NAME',
|
12
|
+
long: '--name NAME',
|
13
|
+
description: 'Name of the server'
|
14
|
+
|
15
|
+
option :version,
|
16
|
+
short: '-v VERSION',
|
17
|
+
long: '--version VERSION',
|
18
|
+
description: 'The version for the Kubernetes cluster.'
|
19
|
+
|
20
|
+
option :maintenance_day,
|
21
|
+
short: '-d MAINTENANCE_DAY',
|
22
|
+
long: '--maintenance-day MAINTENANCE_DAY',
|
23
|
+
description: 'Day Of the week when to perform the maintenance.'
|
24
|
+
|
25
|
+
option :maintenance_time,
|
26
|
+
short: '-t MAINTENANCE_TIME',
|
27
|
+
long: '--maintenance-time MAINTENANCE_TIME',
|
28
|
+
description: 'Time Of the day when to perform the maintenance.'
|
29
|
+
|
30
|
+
attr_reader :description, :required_options
|
31
|
+
|
32
|
+
def initialize(args = [])
|
33
|
+
super(args)
|
34
|
+
@description =
|
35
|
+
'Creates a new Managed Kubernetes cluster.'
|
36
|
+
@required_options = [:name, :ionoscloud_username, :ionoscloud_password]
|
37
|
+
end
|
38
|
+
|
39
|
+
def run
|
40
|
+
$stdout.sync = true
|
41
|
+
validate_required_params(@required_options, config)
|
42
|
+
|
43
|
+
print "#{ui.color('Creating K8s Cluster...', :magenta)}"
|
44
|
+
|
45
|
+
kubernetes_api = Ionoscloud::KubernetesApi.new(api_client)
|
46
|
+
|
47
|
+
cluster_properties = {
|
48
|
+
name: config[:name],
|
49
|
+
k8sVersion: config[:version],
|
50
|
+
}.compact
|
51
|
+
|
52
|
+
if config[:maintenance_day] && config[:maintenance_time]
|
53
|
+
cluster_properties[:maintenanceWindow] = {
|
54
|
+
dayOfTheWeek: config[:maintenance_day],
|
55
|
+
time: config[:maintenance_time],
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
cluster, _, headers = kubernetes_api.k8s_post_with_http_info({ properties: cluster_properties })
|
60
|
+
|
61
|
+
dot = ui.color('.', :magenta)
|
62
|
+
api_client.wait_for { print dot; is_done? get_request_id headers }
|
63
|
+
|
64
|
+
cluster = kubernetes_api.k8s_find_by_cluster_id(cluster.id)
|
65
|
+
|
66
|
+
maintenance_window = "#{cluster.properties.maintenance_window.day_of_the_week}, #{cluster.properties.maintenance_window.time}"
|
67
|
+
|
68
|
+
puts "\n"
|
69
|
+
puts "#{ui.color('ID', :cyan)}: #{cluster.id}"
|
70
|
+
puts "#{ui.color('Name', :cyan)}: #{cluster.properties.name}"
|
71
|
+
puts "#{ui.color('k8s Version', :cyan)}: #{cluster.properties.k8s_version}"
|
72
|
+
puts "#{ui.color('Maintenance Window', :cyan)}: #{maintenance_window}"
|
73
|
+
puts "#{ui.color('State', :cyan)}: #{cluster.metadata.state}"
|
74
|
+
|
75
|
+
puts 'done'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require_relative 'ionoscloud_base'
|
2
|
+
|
3
|
+
class Chef
|
4
|
+
class Knife
|
5
|
+
class IonoscloudK8sDelete < Knife
|
6
|
+
include Knife::IonoscloudBase
|
7
|
+
|
8
|
+
banner 'knife ionoscloud k8s delete CLUSTER_ID [CLUSTER_ID]'
|
9
|
+
|
10
|
+
attr_reader :description, :required_options
|
11
|
+
|
12
|
+
def initialize(args = [])
|
13
|
+
super(args)
|
14
|
+
@description =
|
15
|
+
'Deletes a Kubernetes cluster. The cluster cannot contain any node pools when deleting.'
|
16
|
+
@required_options = [:ionoscloud_username, :ionoscloud_password]
|
17
|
+
end
|
18
|
+
|
19
|
+
def run
|
20
|
+
$stdout.sync = true
|
21
|
+
validate_required_params(@required_options, config)
|
22
|
+
|
23
|
+
kubernetes_api = Ionoscloud::KubernetesApi.new(api_client)
|
24
|
+
|
25
|
+
@name_args.each do |cluster_id|
|
26
|
+
begin
|
27
|
+
cluster = kubernetes_api.k8s_find_by_cluster_id(cluster_id, { depth: 2 })
|
28
|
+
rescue Ionoscloud::ApiError => err
|
29
|
+
raise err unless err.code == 404
|
30
|
+
ui.error("K8s Cluster ID #{cluster_id} not found. Skipping.")
|
31
|
+
next
|
32
|
+
end
|
33
|
+
|
34
|
+
if cluster.metadata.state != 'ACTIVE'
|
35
|
+
ui.error("K8s Cluster ID #{cluster_id} is not active. Skipping.")
|
36
|
+
next
|
37
|
+
end
|
38
|
+
|
39
|
+
if cluster.entities.nodepools.items.length > 0
|
40
|
+
ui.error("K8s Cluster ID #{cluster_id} has existing Nodepools. Skipping.")
|
41
|
+
next
|
42
|
+
end
|
43
|
+
|
44
|
+
msg_pair('ID', cluster.id)
|
45
|
+
msg_pair('Name', cluster.properties.name)
|
46
|
+
msg_pair('Version', cluster.properties.k8s_version)
|
47
|
+
msg_pair(
|
48
|
+
'Maintenance Window',
|
49
|
+
"#{cluster.properties.maintenance_window.day_of_the_week}, #{cluster.properties.maintenance_window.time}",
|
50
|
+
)
|
51
|
+
msg_pair('State', cluster.metadata.state)
|
52
|
+
|
53
|
+
puts "\n"
|
54
|
+
|
55
|
+
begin
|
56
|
+
confirm('Do you really want to delete this K8s Cluster')
|
57
|
+
rescue SystemExit => exc
|
58
|
+
next
|
59
|
+
end
|
60
|
+
|
61
|
+
_, _, headers = kubernetes_api.k8s_delete_with_http_info(cluster.id)
|
62
|
+
ui.warn("Deleted K8s Cluster #{cluster.id}. Request ID: #{get_request_id headers}")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|