knife-ionoscloud 5.1.0 → 6.0.0.alpha.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 (192) hide show
  1. checksums.yaml +4 -4
  2. data/knife-ionoscloud.gemspec +1 -1
  3. data/lib/chef/knife/ionoscloud_backupunit_create.rb +1 -1
  4. data/lib/chef/knife/ionoscloud_backupunit_delete.rb +1 -1
  5. data/lib/chef/knife/ionoscloud_backupunit_list.rb +1 -1
  6. data/lib/chef/knife/ionoscloud_backupunit_ssourl.rb +1 -1
  7. data/lib/chef/knife/ionoscloud_base.rb +1 -1
  8. data/lib/chef/knife/ionoscloud_composite_server_create.rb +25 -23
  9. data/lib/chef/knife/ionoscloud_contract_list.rb +32 -23
  10. data/lib/chef/knife/ionoscloud_cube_server_create.rb +215 -0
  11. data/lib/chef/knife/ionoscloud_datacenter_create.rb +1 -1
  12. data/lib/chef/knife/ionoscloud_datacenter_delete.rb +1 -1
  13. data/lib/chef/knife/ionoscloud_datacenter_list.rb +4 -2
  14. data/lib/chef/knife/ionoscloud_firewall_create.rb +11 -4
  15. data/lib/chef/knife/ionoscloud_firewall_delete.rb +4 -3
  16. data/lib/chef/knife/ionoscloud_firewall_list.rb +5 -3
  17. data/lib/chef/knife/ionoscloud_flowlog_create.rb +121 -0
  18. data/lib/chef/knife/ionoscloud_flowlog_delete.rb +106 -0
  19. data/lib/chef/knife/ionoscloud_flowlog_list.rb +100 -0
  20. data/lib/chef/knife/ionoscloud_group_create.rb +35 -14
  21. data/lib/chef/knife/ionoscloud_group_delete.rb +7 -0
  22. data/lib/chef/knife/ionoscloud_group_get.rb +6 -0
  23. data/lib/chef/knife/ionoscloud_group_list.rb +19 -7
  24. data/lib/chef/knife/ionoscloud_image_list.rb +1 -1
  25. data/lib/chef/knife/ionoscloud_ipfailover_add.rb +1 -1
  26. data/lib/chef/knife/ionoscloud_ipfailover_remove.rb +1 -1
  27. data/lib/chef/knife/ionoscloud_k8s_delete.rb +5 -2
  28. data/lib/chef/knife/ionoscloud_label_add.rb +1 -1
  29. data/lib/chef/knife/ionoscloud_label_list.rb +1 -1
  30. data/lib/chef/knife/ionoscloud_label_remove.rb +1 -1
  31. data/lib/chef/knife/ionoscloud_lan_create.rb +1 -1
  32. data/lib/chef/knife/ionoscloud_lan_delete.rb +1 -1
  33. data/lib/chef/knife/ionoscloud_lan_list.rb +1 -1
  34. data/lib/chef/knife/ionoscloud_loadbalancer_create.rb +1 -1
  35. data/lib/chef/knife/ionoscloud_loadbalancer_delete.rb +1 -1
  36. data/lib/chef/knife/ionoscloud_loadbalancer_get.rb +1 -1
  37. data/lib/chef/knife/ionoscloud_loadbalancer_list.rb +1 -1
  38. data/lib/chef/knife/ionoscloud_loadbalancer_nic_add.rb +1 -1
  39. data/lib/chef/knife/ionoscloud_loadbalancer_nic_remove.rb +1 -1
  40. data/lib/chef/knife/ionoscloud_location_list.rb +5 -3
  41. data/lib/chef/knife/ionoscloud_natgateway_create.rb +71 -0
  42. data/lib/chef/knife/ionoscloud_natgateway_delete.rb +69 -0
  43. data/lib/chef/knife/ionoscloud_natgateway_lan_add.rb +82 -0
  44. data/lib/chef/knife/ionoscloud_natgateway_lan_remove.rb +58 -0
  45. data/lib/chef/knife/ionoscloud_natgateway_list.rb +49 -0
  46. data/lib/chef/knife/ionoscloud_natgateway_rule_add.rb +124 -0
  47. data/lib/chef/knife/ionoscloud_natgateway_rule_list.rb +63 -0
  48. data/lib/chef/knife/ionoscloud_natgateway_rule_remove.rb +72 -0
  49. data/lib/chef/knife/ionoscloud_networkloadbalancer_create.rb +95 -0
  50. data/lib/chef/knife/ionoscloud_networkloadbalancer_delete.rb +81 -0
  51. data/lib/chef/knife/ionoscloud_networkloadbalancer_list.rb +56 -0
  52. data/lib/chef/knife/ionoscloud_networkloadbalancer_rule_add.rb +150 -0
  53. data/lib/chef/knife/ionoscloud_networkloadbalancer_rule_list.rb +63 -0
  54. data/lib/chef/knife/ionoscloud_networkloadbalancer_rule_remove.rb +78 -0
  55. data/lib/chef/knife/ionoscloud_networkloadbalancer_rule_target_add.rb +141 -0
  56. data/lib/chef/knife/ionoscloud_networkloadbalancer_rule_target_list.rb +68 -0
  57. data/lib/chef/knife/ionoscloud_networkloadbalancer_rule_target_remove.rb +105 -0
  58. data/lib/chef/knife/ionoscloud_nic_create.rb +14 -9
  59. data/lib/chef/knife/ionoscloud_nic_delete.rb +4 -2
  60. data/lib/chef/knife/ionoscloud_nic_list.rb +9 -5
  61. data/lib/chef/knife/ionoscloud_node_list.rb +0 -1
  62. data/lib/chef/knife/ionoscloud_nodepool_create.rb +42 -16
  63. data/lib/chef/knife/ionoscloud_nodepool_delete.rb +25 -0
  64. data/lib/chef/knife/ionoscloud_nodepool_lan_add.rb +130 -0
  65. data/lib/chef/knife/ionoscloud_nodepool_lan_remove.rb +96 -0
  66. data/lib/chef/knife/ionoscloud_nodepool_list.rb +3 -1
  67. data/lib/chef/knife/ionoscloud_pcc_create.rb +2 -2
  68. data/lib/chef/knife/ionoscloud_pcc_delete.rb +1 -1
  69. data/lib/chef/knife/ionoscloud_pcc_list.rb +1 -1
  70. data/lib/chef/knife/ionoscloud_request_list.rb +1 -1
  71. data/lib/chef/knife/ionoscloud_request_status.rb +1 -1
  72. data/lib/chef/knife/ionoscloud_s3key_create.rb +2 -2
  73. data/lib/chef/knife/ionoscloud_s3key_delete.rb +3 -3
  74. data/lib/chef/knife/ionoscloud_s3key_list.rb +2 -2
  75. data/lib/chef/knife/ionoscloud_server_console.rb +42 -0
  76. data/lib/chef/knife/ionoscloud_server_create.rb +8 -8
  77. data/lib/chef/knife/ionoscloud_server_delete.rb +1 -1
  78. data/lib/chef/knife/ionoscloud_server_list.rb +16 -5
  79. data/lib/chef/knife/ionoscloud_server_reboot.rb +1 -1
  80. data/lib/chef/knife/ionoscloud_server_resume.rb +43 -0
  81. data/lib/chef/knife/ionoscloud_server_start.rb +1 -1
  82. data/lib/chef/knife/ionoscloud_server_stop.rb +1 -1
  83. data/lib/chef/knife/ionoscloud_server_suspend.rb +44 -0
  84. data/lib/chef/knife/ionoscloud_server_token.rb +42 -0
  85. data/lib/chef/knife/ionoscloud_server_upgrade.rb +44 -0
  86. data/lib/chef/knife/ionoscloud_snapshot_create.rb +2 -2
  87. data/lib/chef/knife/ionoscloud_snapshot_delete.rb +1 -1
  88. data/lib/chef/knife/ionoscloud_snapshot_list.rb +1 -1
  89. data/lib/chef/knife/ionoscloud_snapshot_restore.rb +2 -2
  90. data/lib/chef/knife/ionoscloud_template_list.rb +46 -0
  91. data/lib/chef/knife/ionoscloud_user_ssourl.rb +1 -1
  92. data/lib/chef/knife/ionoscloud_volume_attach.rb +1 -1
  93. data/lib/chef/knife/ionoscloud_volume_create.rb +33 -35
  94. data/lib/chef/knife/ionoscloud_volume_delete.rb +1 -1
  95. data/lib/chef/knife/ionoscloud_volume_detach.rb +1 -1
  96. data/lib/chef/knife/ionoscloud_volume_list.rb +2 -2
  97. data/lib/knife-ionoscloud/version.rb +1 -1
  98. data/spec/chef/knife/ionoscloud_backupunit_create_spec.rb +2 -2
  99. data/spec/chef/knife/ionoscloud_backupunit_delete_spec.rb +5 -5
  100. data/spec/chef/knife/ionoscloud_backupunit_list_spec.rb +1 -1
  101. data/spec/chef/knife/ionoscloud_backupunit_ssourl_spec.rb +3 -3
  102. data/spec/chef/knife/ionoscloud_base_spec.rb +4 -4
  103. data/spec/chef/knife/ionoscloud_composite_server_create_spec.rb +11 -8
  104. data/spec/chef/knife/ionoscloud_contract_list_spec.rb +32 -27
  105. data/spec/chef/knife/ionoscloud_cube_server_create_spec.rb +249 -0
  106. data/spec/chef/knife/ionoscloud_datacenter_create_spec.rb +3 -2
  107. data/spec/chef/knife/ionoscloud_datacenter_delete_spec.rb +5 -5
  108. data/spec/chef/knife/ionoscloud_datacenter_list_spec.rb +5 -3
  109. data/spec/chef/knife/ionoscloud_firewall_create_spec.rb +5 -3
  110. data/spec/chef/knife/ionoscloud_firewall_delete_spec.rb +6 -5
  111. data/spec/chef/knife/ionoscloud_firewall_list_spec.rb +5 -3
  112. data/spec/chef/knife/ionoscloud_flowlog_create_spec.rb +254 -0
  113. data/spec/chef/knife/ionoscloud_flowlog_delete_spec.rb +360 -0
  114. data/spec/chef/knife/ionoscloud_flowlog_list_spec.rb +264 -0
  115. data/spec/chef/knife/ionoscloud_group_create_spec.rb +6 -0
  116. data/spec/chef/knife/ionoscloud_group_delete_spec.rb +6 -0
  117. data/spec/chef/knife/ionoscloud_group_get_spec.rb +6 -0
  118. data/spec/chef/knife/ionoscloud_group_list_spec.rb +26 -8
  119. data/spec/chef/knife/ionoscloud_image_list_spec.rb +2 -2
  120. data/spec/chef/knife/ionoscloud_ipfailover_add_spec.rb +3 -3
  121. data/spec/chef/knife/ionoscloud_ipfailover_remove_spec.rb +4 -4
  122. data/spec/chef/knife/ionoscloud_k8s_delete_spec.rb +5 -2
  123. data/spec/chef/knife/ionoscloud_kubeconfig_get_spec.rb +2 -2
  124. data/spec/chef/knife/ionoscloud_label_add_spec.rb +10 -10
  125. data/spec/chef/knife/ionoscloud_label_list_spec.rb +14 -14
  126. data/spec/chef/knife/ionoscloud_label_remove_spec.rb +20 -20
  127. data/spec/chef/knife/ionoscloud_lan_create_spec.rb +3 -3
  128. data/spec/chef/knife/ionoscloud_lan_delete_spec.rb +5 -5
  129. data/spec/chef/knife/ionoscloud_lan_list_spec.rb +2 -2
  130. data/spec/chef/knife/ionoscloud_loadbalancer_create_spec.rb +3 -3
  131. data/spec/chef/knife/ionoscloud_loadbalancer_delete_spec.rb +5 -5
  132. data/spec/chef/knife/ionoscloud_loadbalancer_get_spec.rb +2 -2
  133. data/spec/chef/knife/ionoscloud_loadbalancer_list_spec.rb +2 -2
  134. data/spec/chef/knife/ionoscloud_loadbalancer_nic_add_spec.rb +6 -6
  135. data/spec/chef/knife/ionoscloud_loadbalancer_nic_remove_spec.rb +6 -6
  136. data/spec/chef/knife/ionoscloud_location_list_spec.rb +5 -3
  137. data/spec/chef/knife/ionoscloud_natgateway_create_spec.rb +77 -0
  138. data/spec/chef/knife/ionoscloud_natgateway_delete_spec.rb +118 -0
  139. data/spec/chef/knife/ionoscloud_natgateway_lan_add_spec.rb +143 -0
  140. data/spec/chef/knife/ionoscloud_natgateway_lan_remove_spec.rb +194 -0
  141. data/spec/chef/knife/ionoscloud_natgateway_list_spec.rb +79 -0
  142. data/spec/chef/knife/ionoscloud_natgateway_rule_add_spec.rb +98 -0
  143. data/spec/chef/knife/ionoscloud_natgateway_rule_list_spec.rb +92 -0
  144. data/spec/chef/knife/ionoscloud_natgateway_rule_remove_spec.rb +77 -0
  145. data/spec/chef/knife/ionoscloud_networkloadbalancer_create_spec.rb +80 -0
  146. data/spec/chef/knife/ionoscloud_networkloadbalancer_delete_spec.rb +119 -0
  147. data/spec/chef/knife/ionoscloud_networkloadbalancer_list_spec.rb +88 -0
  148. data/spec/chef/knife/ionoscloud_networkloadbalancer_rule_add_spec.rb +104 -0
  149. data/spec/chef/knife/ionoscloud_networkloadbalancer_rule_list_spec.rb +89 -0
  150. data/spec/chef/knife/ionoscloud_networkloadbalancer_rule_remove_spec.rb +124 -0
  151. data/spec/chef/knife/ionoscloud_networkloadbalancer_rule_target_add_spec.rb +109 -0
  152. data/spec/chef/knife/ionoscloud_networkloadbalancer_rule_target_list_spec.rb +85 -0
  153. data/spec/chef/knife/ionoscloud_networkloadbalancer_rule_target_remove_spec.rb +263 -0
  154. data/spec/chef/knife/ionoscloud_nic_create_spec.rb +9 -5
  155. data/spec/chef/knife/ionoscloud_nic_delete_spec.rb +8 -6
  156. data/spec/chef/knife/ionoscloud_nic_list_spec.rb +12 -6
  157. data/spec/chef/knife/ionoscloud_nodepool_create_spec.rb +15 -1
  158. data/spec/chef/knife/ionoscloud_nodepool_lan_add_spec.rb +226 -0
  159. data/spec/chef/knife/ionoscloud_nodepool_lan_remove.rb +199 -0
  160. data/spec/chef/knife/ionoscloud_nodepool_list_spec.rb +3 -1
  161. data/spec/chef/knife/ionoscloud_pcc_create_spec.rb +6 -6
  162. data/spec/chef/knife/ionoscloud_pcc_delete_spec.rb +5 -5
  163. data/spec/chef/knife/ionoscloud_pcc_list_spec.rb +2 -2
  164. data/spec/chef/knife/ionoscloud_request_list_spec.rb +16 -16
  165. data/spec/chef/knife/ionoscloud_request_status_spec.rb +3 -3
  166. data/spec/chef/knife/ionoscloud_s3key_create_spec.rb +2 -2
  167. data/spec/chef/knife/ionoscloud_s3key_delete_spec.rb +5 -5
  168. data/spec/chef/knife/ionoscloud_s3key_list_spec.rb +2 -2
  169. data/spec/chef/knife/ionoscloud_server_console_spec.rb +97 -0
  170. data/spec/chef/knife/ionoscloud_server_create_spec.rb +3 -3
  171. data/spec/chef/knife/ionoscloud_server_delete_spec.rb +5 -5
  172. data/spec/chef/knife/ionoscloud_server_list_spec.rb +63 -5
  173. data/spec/chef/knife/ionoscloud_server_reboot_spec.rb +3 -5
  174. data/spec/chef/knife/ionoscloud_server_resume_spec.rb +93 -0
  175. data/spec/chef/knife/ionoscloud_server_start_spec.rb +3 -5
  176. data/spec/chef/knife/ionoscloud_server_stop_spec.rb +3 -5
  177. data/spec/chef/knife/ionoscloud_server_suspend_spec.rb +93 -0
  178. data/spec/chef/knife/ionoscloud_server_token_spec.rb +97 -0
  179. data/spec/chef/knife/ionoscloud_server_upgrade_spec.rb +96 -0
  180. data/spec/chef/knife/ionoscloud_snapshot_create_spec.rb +3 -3
  181. data/spec/chef/knife/ionoscloud_snapshot_delete_spec.rb +5 -5
  182. data/spec/chef/knife/ionoscloud_snapshot_list_spec.rb +2 -2
  183. data/spec/chef/knife/ionoscloud_snapshot_restore_spec.rb +3 -3
  184. data/spec/chef/knife/ionoscloud_template_list_spec.rb +78 -0
  185. data/spec/chef/knife/ionoscloud_user_ssourl_spec.rb +3 -3
  186. data/spec/chef/knife/ionoscloud_volume_attach_spec.rb +4 -4
  187. data/spec/chef/knife/ionoscloud_volume_create_spec.rb +6 -58
  188. data/spec/chef/knife/ionoscloud_volume_delete_spec.rb +5 -5
  189. data/spec/chef/knife/ionoscloud_volume_detach_spec.rb +5 -5
  190. data/spec/chef/knife/ionoscloud_volume_list_spec.rb +4 -4
  191. data/spec/spec_helper.rb +223 -29
  192. metadata +93 -6
@@ -30,7 +30,7 @@ class Chef
30
30
  $stdout.sync = true
31
31
  validate_required_params(@required_options, config)
32
32
 
33
- nic_api = Ionoscloud::NicApi.new(api_client)
33
+ nic_api = Ionoscloud::NetworkInterfacesApi.new(api_client)
34
34
  @name_args.each do |nic_id|
35
35
  begin
36
36
  nic = nic_api.datacenters_servers_nics_find_by_id(config[:datacenter_id], config[:server_id], nic_id)
@@ -45,7 +45,9 @@ class Chef
45
45
  msg_pair('IPs', nic.properties.ips)
46
46
  msg_pair('DHCP', nic.properties.dhcp)
47
47
  msg_pair('LAN', nic.properties.lan)
48
- msg_pair('NAT', nic.properties.nat)
48
+ msg_pair('Firewall Type', nic.properties.firewall_type)
49
+ msg_pair('Device Number', nic.properties.device_number)
50
+ msg_pair('PCI Slot', nic.properties.pci_slot)
49
51
 
50
52
  begin
51
53
  confirm('Do you really want to delete this Nic')
@@ -35,22 +35,26 @@ class Chef
35
35
  ui.color('Name', :bold),
36
36
  ui.color('IPs', :bold),
37
37
  ui.color('DHCP', :bold),
38
- ui.color('NAT', :bold),
39
- ui.color('LAN', :bold)
38
+ ui.color('LAN', :bold),
39
+ ui.color('Firewall Type', :bold),
40
+ ui.color('Device Number', :bold),
41
+ ui.color('PCI Slot', :bold),
40
42
  ]
41
43
 
42
- nic_api = Ionoscloud::NicApi.new(api_client)
44
+ nic_api = Ionoscloud::NetworkInterfacesApi.new(api_client)
43
45
 
44
46
  nic_api.datacenters_servers_nics_get(config[:datacenter_id], config[:server_id], { depth: 1 }).items.each do |nic|
45
47
  nic_list << nic.id
46
48
  nic_list << nic.properties.name
47
49
  nic_list << nic.properties.ips.to_s
48
50
  nic_list << nic.properties.dhcp.to_s
49
- nic_list << nic.properties.nat.to_s
50
51
  nic_list << nic.properties.lan.to_s
52
+ nic_list << nic.properties.firewall_type.to_s
53
+ nic_list << nic.properties.device_number.to_s
54
+ nic_list << nic.properties.pci_slot.to_s
51
55
  end
52
56
 
53
- puts ui.list(nic_list, :uneven_columns_across, 6)
57
+ puts ui.list(nic_list, :uneven_columns_across, 8)
54
58
  end
55
59
  end
56
60
  end
@@ -12,7 +12,6 @@ class Chef
12
12
  long: '--cluster-id CLUSTER_ID',
13
13
  description: 'The ID of the K8s Cluster'
14
14
 
15
-
16
15
  option :nodepool_id,
17
16
  short: '-P NODEPOOL_ID',
18
17
  long: '--nodepool-id NODEPOOL_ID',
@@ -84,6 +84,13 @@ class Chef
84
84
  long: '--lans LAN_ID [LAN_ID]',
85
85
  description: 'An array of additional private LANs attached to worker nodes'
86
86
 
87
+ option :public_ips,
88
+ long: '--ips PUBLIC_IP [PUBLIC_IP]',
89
+ description: 'Optional array of reserved public IP addresses to be used by the nodes. '\
90
+ 'IPs must be from same location as the data center used for the node pool. The array '\
91
+ 'must contain one extra IP than maximum number of nodes could be. (nodeCount+1 if fixed '\
92
+ 'node amount or maxNodeCount+1 if auto scaling is used) The extra provided IP Will be used during rebuilding of nodes.'
93
+
87
94
  attr_reader :description, :required_options
88
95
 
89
96
  def initialize(args = [])
@@ -106,37 +113,42 @@ class Chef
106
113
 
107
114
  kubernetes_api = Ionoscloud::KubernetesApi.new(api_client)
108
115
 
116
+ config[:public_ips] = config[:public_ips].split(',') if config[:public_ips]
117
+
109
118
  nodepool_properties = {
110
119
  name: config[:name],
111
- k8sVersion: config[:version],
112
- datacenterId: config[:datacenter_id],
113
- nodeCount: config[:node_count],
114
- cpuFamily: config[:cpu_family],
115
- coresCount: config[:cores],
116
- ramSize: config[:ram],
117
- availabilityZone: config[:availability_zone],
118
- storageType: config[:storage_type],
119
- storageSize: config[:storage_size],
120
+ k8s_version: config[:version],
121
+ datacenter_id: config[:datacenter_id],
122
+ node_count: config[:node_count],
123
+ cpu_family: config[:cpu_family],
124
+ cores_count: config[:cores],
125
+ ram_size: config[:ram],
126
+ availability_zone: config[:availability_zone],
127
+ storage_type: config[:storage_type],
128
+ storage_size: config[:storage_size],
129
+ public_ips: config[:public_ips],
120
130
  }
121
131
 
122
132
  if config[:maintenance_day] && config[:maintenance_time]
123
- nodepool_properties[:maintenanceWindow] = {
124
- dayOfTheWeek: config[:maintenance_day],
133
+ nodepool_properties[:maintenance_window] = Ionoscloud::KubernetesMaintenanceWindow.new(
134
+ day_of_the_week: config[:maintenance_day],
125
135
  time: config[:maintenance_time],
126
- }
136
+ )
127
137
  end
128
138
 
129
139
  if config[:min_node_count] || config[:max_node_count]
130
- nodepool_properties[:autoScaling] = {}
131
- nodepool_properties[:autoScaling][:minNodeCount] = config[:min_node_count] unless config[:min_node_count].nil?
132
- nodepool_properties[:autoScaling][:maxNodeCount] = config[:max_node_count] unless config[:max_node_count].nil?
140
+ nodepool_properties[:auto_scaling] = Ionoscloud::KubernetesAutoScaling.new()
141
+ nodepool_properties[:auto_scaling].min_node_count = config[:min_node_count] unless config[:min_node_count].nil?
142
+ nodepool_properties[:auto_scaling].max_node_count = config[:max_node_count] unless config[:max_node_count].nil?
133
143
  end
134
144
 
135
145
  if config[:lans]
136
146
  nodepool_properties[:lans] = config[:lans].split(',').map! { |lan| { id: Integer(lan) } }
137
147
  end
138
148
 
139
- nodepool = kubernetes_api.k8s_nodepools_post(config[:cluster_id], { properties: nodepool_properties })
149
+ nodepool = Ionoscloud::KubernetesNodePool.new(properties: Ionoscloud::KubernetesNodePoolPropertiesForPost.new(nodepool_properties))
150
+
151
+ nodepool = kubernetes_api.k8s_nodepools_post(config[:cluster_id], nodepool)
140
152
 
141
153
  auto_scaling = "Min node count: #{nodepool.properties.auto_scaling.min_node_count}, Max node count:#{nodepool.properties.auto_scaling.max_node_count}"
142
154
  maintenance_window = "#{nodepool.properties.maintenance_window.day_of_the_week}, #{nodepool.properties.maintenance_window.time}"
@@ -152,6 +164,20 @@ class Chef
152
164
  puts "#{ui.color('RAM', :cyan)}: #{nodepool.properties.ram_size}"
153
165
  puts "#{ui.color('Storage Type', :cyan)}: #{nodepool.properties.storage_type}"
154
166
  puts "#{ui.color('Storage Size', :cyan)}: #{nodepool.properties.storage_size}"
167
+ puts "#{ui.color('Lans', :cyan)}: #{nodepool.properties.lans.map do
168
+ |lan|
169
+ {
170
+ id: lan.id,
171
+ dhcp: lan.dhcp,
172
+ routes: lan.routes ? lan.routes.map do
173
+ |route|
174
+ {
175
+ network: route.network,
176
+ gateway_ip: route.gateway_ip,
177
+ }
178
+ end : []
179
+ }
180
+ end}"
155
181
  puts "#{ui.color('Availability Zone', :cyan)}: #{nodepool.properties.availability_zone}"
156
182
  puts "#{ui.color('Auto Scaling', :cyan)}: #{auto_scaling}"
157
183
  puts "#{ui.color('Maintenance Window', :cyan)}: #{maintenance_window}"
@@ -36,11 +36,36 @@ class Chef
36
36
  next
37
37
  end
38
38
 
39
+ auto_scaling = "Min node count: #{nodepool.properties.auto_scaling.min_node_count}, Max node count:#{nodepool.properties.auto_scaling.max_node_count}"
40
+ maintenance_window = "#{nodepool.properties.maintenance_window.day_of_the_week}, #{nodepool.properties.maintenance_window.time}"
41
+
39
42
  msg_pair('ID', nodepool.id)
40
43
  msg_pair('Name', nodepool.properties.name)
41
44
  msg_pair('K8s Version', nodepool.properties.k8s_version)
42
45
  msg_pair('Datacenter ID', nodepool.properties.datacenter_id)
43
46
  msg_pair('Node Count', nodepool.properties.node_count)
47
+ msg_pair('CPU Family', nodepool.properties.cpu_family)
48
+ msg_pair('Cores Count', nodepool.properties.cores_count)
49
+ msg_pair('RAM', nodepool.properties.ram_size)
50
+ msg_pair('Storage Type', nodepool.properties.storage_type)
51
+ msg_pair('Storage Size', nodepool.properties.storage_size)
52
+ msg_pair('Lans', nodepool.properties.lans.map do
53
+ |lan|
54
+ {
55
+ id: lan.id,
56
+ dhcp: lan.dhcp,
57
+ routes: lan.routes ? lan.routes.map do
58
+ |route|
59
+ {
60
+ network: route.network,
61
+ gateway_ip: route.gateway_ip,
62
+ }
63
+ end : []
64
+ }
65
+ end)
66
+ msg_pair('Availability Zone', nodepool.properties.availability_zone)
67
+ msg_pair('Auto Scaling', auto_scaling)
68
+ msg_pair('Maintenance Window', maintenance_window)
44
69
  msg_pair('State', nodepool.metadata.state)
45
70
 
46
71
  puts "\n"
@@ -0,0 +1,130 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudNodepoolLanAdd < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud nodepool lan add (options)'
9
+
10
+ option :cluster_id,
11
+ short: '-C CLUSTER_ID',
12
+ long: '--cluster-id CLUSTER_ID',
13
+ description: 'ID of the Kubernetes cluster'
14
+
15
+ option :nodepool_id,
16
+ short: '-N NODEPOOL_ID',
17
+ long: '--nodepool NODEPOOL_ID',
18
+ description: 'The ID of the K8s Nodepool'
19
+
20
+ option :lan_id,
21
+ short: '-L LAN_ID',
22
+ long: '--lan LAN_ID',
23
+ description: 'The ID of the LAN'
24
+
25
+ option :no_dhcp,
26
+ long: '--nodhcp',
27
+ boolean: true,
28
+ default: false,
29
+ description: 'Indicates if the Kubernetes Node Pool LAN will reserve an IP using DHCP'
30
+
31
+ option :routes,
32
+ long: '--routes NETWORK,GATEWAY_IP [NETWORK,GATEWAY_IP]',
33
+ description: 'An array of additional LANs attached to worker nodes'
34
+
35
+ attr_reader :description, :required_options
36
+
37
+ def initialize(args = [])
38
+ super(args)
39
+ @description =
40
+ 'Adds or updates a LAN within a Nodepool.'
41
+ @required_options = [:cluster_id, :nodepool_id, :lan_id, :ionoscloud_username, :ionoscloud_password]
42
+ end
43
+
44
+ def run
45
+ $stdout.sync = true
46
+ validate_required_params(@required_options, config)
47
+
48
+ kubernetes_api = Ionoscloud::KubernetesApi.new(api_client)
49
+
50
+ begin
51
+ nodepool = kubernetes_api.k8s_nodepools_find_by_id(config[:cluster_id], config[:nodepool_id])
52
+ rescue Ionoscloud::ApiError => err
53
+ raise err unless err.code == 404
54
+ ui.error("Nodepool ID #{config[:nodepool_id]} not found.")
55
+ exit(1)
56
+ end
57
+
58
+ routes = []
59
+ config[:routes] = config[:routes].split(',') if config[:routes]
60
+ config[:routes].each_slice(2) do |network, gateway_ip|
61
+ routes << Ionoscloud::KubernetesNodePoolLanRoutes.new(
62
+ network: network,
63
+ gateway_ip: gateway_ip,
64
+ )
65
+ end
66
+
67
+ new_lan = Ionoscloud::KubernetesNodePoolLan.new(
68
+ id: Integer(config[:lan_id]),
69
+ dhcp: !config[:no_dhcp],
70
+ routes: routes,
71
+ )
72
+
73
+ puts new_lan
74
+
75
+ existing = nodepool.properties.lans.select { |lan| lan.id == new_lan.id }
76
+
77
+ new_nodepool = Ionoscloud::KubernetesNodePool.new(
78
+ properties: Ionoscloud::KubernetesNodePoolPropertiesForPut.new(
79
+ node_count: nodepool.properties.node_count,
80
+ k8s_version: nodepool.properties.k8s_version,
81
+ maintenance_window: nodepool.properties.maintenance_window,
82
+ auto_scaling: nodepool.properties.auto_scaling,
83
+ public_ips: nodepool.properties.public_ips,
84
+ lans: nodepool.properties.lans,
85
+ ),
86
+ )
87
+
88
+ new_nodepool.properties.lans = new_nodepool.properties.lans.delete_if { |lan| lan.id == new_lan.id }
89
+ new_nodepool.properties.lans << new_lan
90
+
91
+ nodepool = kubernetes_api.k8s_nodepools_put(
92
+ config[:cluster_id], config[:nodepool_id], new_nodepool,
93
+ )
94
+
95
+ if existing.length > 0
96
+ ui.info("Updating Lan #{config[:lan_id]} in the Nodepoool.")
97
+ else
98
+ ui.info("Adding Lan #{config[:lan_id]} to the Nodepoool.")
99
+ end
100
+
101
+ auto_scaling = "Min node count: #{nodepool.properties.auto_scaling.min_node_count}, Max node count:#{nodepool.properties.auto_scaling.max_node_count}"
102
+ maintenance_window = "#{nodepool.properties.maintenance_window.day_of_the_week}, #{nodepool.properties.maintenance_window.time}"
103
+
104
+ puts "\n"
105
+ puts "#{ui.color('ID', :cyan)}: #{nodepool.id}"
106
+ puts "#{ui.color('Name', :cyan)}: #{nodepool.properties.name}"
107
+ puts "#{ui.color('K8s Version', :cyan)}: #{nodepool.properties.k8s_version}"
108
+ puts "#{ui.color('Node Count', :cyan)}: #{nodepool.properties.node_count}"
109
+ puts "#{ui.color('Lans', :cyan)}: #{nodepool.properties.lans.map do
110
+ |lan|
111
+ {
112
+ id: lan.id,
113
+ dhcp: lan.dhcp,
114
+ routes: lan.routes ? lan.routes.map do
115
+ |route|
116
+ {
117
+ network: route.network,
118
+ gateway_ip: route.gateway_ip,
119
+ }
120
+ end : []
121
+ }
122
+ end}"
123
+ puts "#{ui.color('Auto Scaling', :cyan)}: #{auto_scaling}"
124
+ puts "#{ui.color('Maintenance Window', :cyan)}: #{maintenance_window}"
125
+ puts "#{ui.color('State', :cyan)}: #{nodepool.metadata.state}"
126
+ puts 'done'
127
+ end
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,96 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudNodepoolLanRemove < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud nodepool lan remove LAN_ID [LAN_ID] (options)'
9
+
10
+ option :cluster_id,
11
+ short: '-C CLUSTER_ID',
12
+ long: '--cluster-id CLUSTER_ID',
13
+ description: 'ID of the Kubernetes cluster'
14
+
15
+ option :nodepool_id,
16
+ short: '-N NODEPOOL_ID',
17
+ long: '--nodepool NODEPOOL_ID',
18
+ description: 'The ID of the K8s Nodepool'
19
+
20
+ attr_reader :description, :required_options
21
+
22
+ def initialize(args = [])
23
+ super(args)
24
+ @description =
25
+ 'Adds or updates a LAN within a Nodepool.'
26
+ @required_options = [:cluster_id, :nodepool_id, :ionoscloud_username, :ionoscloud_password]
27
+ end
28
+
29
+ def run
30
+ $stdout.sync = true
31
+ validate_required_params(@required_options, config)
32
+
33
+ kubernetes_api = Ionoscloud::KubernetesApi.new(api_client)
34
+
35
+ begin
36
+ nodepool = kubernetes_api.k8s_nodepools_find_by_id(config[:cluster_id], config[:nodepool_id])
37
+ rescue Ionoscloud::ApiError => err
38
+ raise err unless err.code == 404
39
+ ui.error("Nodepool ID #{config[:nodepool_id]} not found.")
40
+ exit(1)
41
+ end
42
+
43
+ existing = nodepool.properties.lans.select { |lan| @name_args.map { |id| Integer(id) }.include? lan.id }
44
+
45
+ if existing.length > 0
46
+ new_nodepool = Ionoscloud::KubernetesNodePool.new(
47
+ properties: Ionoscloud::KubernetesNodePoolPropertiesForPut.new(
48
+ node_count: nodepool.properties.node_count,
49
+ k8s_version: nodepool.properties.k8s_version,
50
+ maintenance_window: nodepool.properties.maintenance_window,
51
+ auto_scaling: nodepool.properties.auto_scaling,
52
+ public_ips: nodepool.properties.public_ips,
53
+ lans: nodepool.properties.lans,
54
+ ),
55
+ )
56
+ new_nodepool.properties.lans.delete_if { |lan| @name_args.map { |id| Integer(id) }.include? lan.id }
57
+
58
+ nodepool = kubernetes_api.k8s_nodepools_put(
59
+ config[:cluster_id], config[:nodepool_id], new_nodepool,
60
+ )
61
+
62
+ ui.info("Removing Lans #{@name_args} from the Nodepoool.")
63
+ else
64
+ ui.info("None of the specified Lan IDs (#{@name_args}) are present on the Nodepoool.")
65
+ end
66
+
67
+ auto_scaling = "Min node count: #{nodepool.properties.auto_scaling.min_node_count}, Max node count:#{nodepool.properties.auto_scaling.max_node_count}"
68
+ maintenance_window = "#{nodepool.properties.maintenance_window.day_of_the_week}, #{nodepool.properties.maintenance_window.time}"
69
+
70
+ puts "\n"
71
+ puts "#{ui.color('ID', :cyan)}: #{nodepool.id}"
72
+ puts "#{ui.color('Name', :cyan)}: #{nodepool.properties.name}"
73
+ puts "#{ui.color('K8s Version', :cyan)}: #{nodepool.properties.k8s_version}"
74
+ puts "#{ui.color('Node Count', :cyan)}: #{nodepool.properties.node_count}"
75
+ puts "#{ui.color('Lans', :cyan)}: #{nodepool.properties.lans.map do
76
+ |lan|
77
+ {
78
+ id: lan.id,
79
+ dhcp: lan.dhcp,
80
+ routes: lan.routes ? lan.routes.map do
81
+ |route|
82
+ {
83
+ network: route.network,
84
+ gateway_ip: route.gateway_ip,
85
+ }
86
+ end : []
87
+ }
88
+ end}"
89
+ puts "#{ui.color('Auto Scaling', :cyan)}: #{auto_scaling}"
90
+ puts "#{ui.color('Maintenance Window', :cyan)}: #{maintenance_window}"
91
+ puts "#{ui.color('State', :cyan)}: #{nodepool.metadata.state}"
92
+ puts 'done'
93
+ end
94
+ end
95
+ end
96
+ end
@@ -31,6 +31,7 @@ class Chef
31
31
  ui.color('K8s Version', :bold),
32
32
  ui.color('Datacenter ID', :bold),
33
33
  ui.color('Node Count', :bold),
34
+ ui.color('Lan Count', :bold),
34
35
  ui.color('State', :bold),
35
36
  ]
36
37
 
@@ -42,9 +43,10 @@ class Chef
42
43
  nodepool_list << nodepool.properties.k8s_version
43
44
  nodepool_list << nodepool.properties.datacenter_id
44
45
  nodepool_list << nodepool.properties.node_count.to_s
46
+ nodepool_list << nodepool.properties.lans.length
45
47
  nodepool_list << nodepool.metadata.state
46
48
  end
47
- puts ui.list(nodepool_list, :uneven_columns_across, 6)
49
+ puts ui.list(nodepool_list, :uneven_columns_across, 7)
48
50
  end
49
51
  end
50
52
  end
@@ -36,7 +36,7 @@ class Chef
36
36
 
37
37
  print "#{ui.color('Creating private cross connect...', :magenta)}"
38
38
 
39
- pcc_api = Ionoscloud::PrivateCrossConnectApi.new(api_client)
39
+ pcc_api = Ionoscloud::PrivateCrossConnectsApi.new(api_client)
40
40
  config[:peers] = config[:peers].split(',') unless config[:peers].nil?
41
41
 
42
42
  if config[:peers] && config[:peers].length % 2 != 0
@@ -57,7 +57,7 @@ class Chef
57
57
  pcc = pcc_api.pccs_find_by_id(pcc.id)
58
58
 
59
59
  if config[:peers]
60
- lan_api = Ionoscloud::LanApi.new(api_client)
60
+ lan_api = Ionoscloud::LansApi.new(api_client)
61
61
 
62
62
  header_list = []
63
63
  allowed_datacenters_ids = pcc.properties.connectable_datacenters.map { |datacenter| datacenter.id }