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
@@ -22,7 +22,7 @@ class Chef
22
22
  $stdout.sync = true
23
23
  validate_required_params(@required_options, config)
24
24
 
25
- datacenter_api = Ionoscloud::DataCenterApi.new(api_client)
25
+ datacenter_api = Ionoscloud::DataCentersApi.new(api_client)
26
26
 
27
27
  @name_args.each do |datacenter_id|
28
28
  begin
@@ -30,20 +30,22 @@ class Chef
30
30
  ui.color('Name', :bold),
31
31
  ui.color('Description', :bold),
32
32
  ui.color('Location', :bold),
33
+ ui.color('CPU Architectures', :bold),
33
34
  ui.color('Version', :bold),
34
35
  ]
35
36
 
36
- datacenter_api = Ionoscloud::DataCenterApi.new(api_client)
37
+ datacenter_api = Ionoscloud::DataCentersApi.new(api_client)
37
38
 
38
39
  datacenter_api.datacenters_get({ depth: 1 }).items.each do |datacenter|
39
40
  datacenter_list << datacenter.id
40
41
  datacenter_list << datacenter.properties.name
41
42
  datacenter_list << datacenter.properties.description || ''
42
43
  datacenter_list << datacenter.properties.location
44
+ datacenter_list << datacenter.properties.cpu_architecture.map { |arch| arch.cpu_family }
43
45
  datacenter_list << datacenter.properties.version.to_s
44
46
  end
45
47
 
46
- puts ui.list(datacenter_list, :uneven_columns_across, 5)
48
+ puts ui.list(datacenter_list, :uneven_columns_across, 6)
47
49
  end
48
50
  end
49
51
  end
@@ -57,7 +57,6 @@ class Chef
57
57
  description: 'Defines the start range of the allowed port(s)'
58
58
 
59
59
  option :port_range_end,
60
- short: '-t PORT',
61
60
  long: '--port-range-end PORT',
62
61
  description: 'Defines the end range of the allowed port(s)'
63
62
 
@@ -71,6 +70,12 @@ class Chef
71
70
  description: 'Defines the allowed code (from 0 to 254) if the' \
72
71
  ' protocol ICMP is chosen; null allows all codes'
73
72
 
73
+ option :type,
74
+ short: '--t TYPE',
75
+ long: '--type TYPE',
76
+ description: 'The type of firewall rule. If is not specified, it will take the default value INGRESS',
77
+ default: 'INGRESS'
78
+
74
79
  attr_reader :description, :required_options
75
80
 
76
81
  def initialize(args = [])
@@ -96,11 +101,12 @@ class Chef
96
101
  port_range_end: config[:port_range_end],
97
102
  icmp_type: config[:icmp_type],
98
103
  icmp_code: config[:icmp_code],
104
+ type: config[:type]
99
105
  }
100
106
 
101
- nic_api = Ionoscloud::NicApi.new(api_client)
107
+ firewallrules_api = Ionoscloud::FirewallRulesApi.new(api_client)
102
108
 
103
- firewall, _, headers = nic_api.datacenters_servers_nics_firewallrules_post_with_http_info(
109
+ firewall, _, headers = firewallrules_api.datacenters_servers_nics_firewallrules_post_with_http_info(
104
110
  config[:datacenter_id],
105
111
  config[:server_id],
106
112
  config[:nic_id],
@@ -110,7 +116,7 @@ class Chef
110
116
  dot = ui.color('.', :magenta)
111
117
  api_client.wait_for { print dot; is_done? get_request_id headers }
112
118
 
113
- firewall = nic_api.datacenters_servers_nics_firewallrules_find_by_id(
119
+ firewall = firewallrules_api.datacenters_servers_nics_firewallrules_find_by_id(
114
120
  config[:datacenter_id],
115
121
  config[:server_id],
116
122
  config[:nic_id],
@@ -128,6 +134,7 @@ class Chef
128
134
  puts "#{ui.color('Port Range End', :cyan)}: #{firewall.properties.port_range_end}"
129
135
  puts "#{ui.color('ICMP Type', :cyan)}: #{firewall.properties.icmp_type}"
130
136
  puts "#{ui.color('ICMP Code', :cyan)}: #{firewall.properties.icmp_code}"
137
+ puts "#{ui.color('Type', :cyan)}: #{firewall.properties.type}"
131
138
  puts 'done'
132
139
  end
133
140
  end
@@ -35,11 +35,11 @@ class Chef
35
35
  $stdout.sync = true
36
36
  validate_required_params(@required_options, config)
37
37
 
38
- nic_api = Ionoscloud::NicApi.new(api_client)
38
+ firewallrules_api = Ionoscloud::FirewallRulesApi.new(api_client)
39
39
 
40
40
  @name_args.each do |firewall_id|
41
41
  begin
42
- firewall = nic_api.datacenters_servers_nics_firewallrules_find_by_id(
42
+ firewall = firewallrules_api.datacenters_servers_nics_firewallrules_find_by_id(
43
43
  config[:datacenter_id], config[:server_id], config[:nic_id], firewall_id,
44
44
  )
45
45
  rescue Ionoscloud::ApiError => err
@@ -58,6 +58,7 @@ class Chef
58
58
  msg_pair('Port Range End', firewall.properties.port_range_end)
59
59
  msg_pair('ICMP Type', firewall.properties.icmp_type)
60
60
  msg_pair('ICMP Code', firewall.properties.icmp_code)
61
+ msg_pair('Type', firewall.properties.type)
61
62
 
62
63
  begin
63
64
  confirm('Do you really want to delete this firewall rule')
@@ -65,7 +66,7 @@ class Chef
65
66
  next
66
67
  end
67
68
 
68
- _, _, headers = nic_api.datacenters_servers_nics_firewallrules_delete_with_http_info(
69
+ _, _, headers = firewallrules_api.datacenters_servers_nics_firewallrules_delete_with_http_info(
69
70
  config[:datacenter_id], config[:server_id], config[:nic_id], firewall_id,
70
71
  )
71
72
  ui.warn("Deleted Firewall rule #{firewall.id}. Request ID: #{get_request_id headers}")
@@ -46,11 +46,12 @@ class Chef
46
46
  ui.color('Port Range End', :bold),
47
47
  ui.color('ICMP Type', :bold),
48
48
  ui.color('ICMP CODE', :bold),
49
+ ui.color('Type', :bold),
49
50
  ]
50
51
 
51
- nic_api = Ionoscloud::NicApi.new(api_client)
52
+ firewallrules_api = Ionoscloud::FirewallRulesApi.new(api_client)
52
53
 
53
- nic_api.datacenters_servers_nics_firewallrules_get(
54
+ firewallrules_api.datacenters_servers_nics_firewallrules_get(
54
55
  config[:datacenter_id], config[:server_id], config[:nic_id], { depth: 1 }
55
56
  ).items.each do |firewall|
56
57
  firewall_list << firewall.id
@@ -63,9 +64,10 @@ class Chef
63
64
  firewall_list << firewall.properties.port_range_end.to_s
64
65
  firewall_list << firewall.properties.icmp_type.to_s
65
66
  firewall_list << firewall.properties.icmp_code.to_s
67
+ firewall_list << firewall.properties.type.to_s
66
68
  end
67
69
 
68
- puts ui.list(firewall_list, :uneven_columns_across, 10)
70
+ puts ui.list(firewall_list, :uneven_columns_across, 11)
69
71
  end
70
72
  end
71
73
  end
@@ -0,0 +1,121 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudFlowlogCreate < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud flowlog create (options)'
9
+
10
+ option :datacenter_id,
11
+ short: '-D DATACENTER_ID',
12
+ long: '--datacenter-id DATACENTER_ID',
13
+ description: 'ID of the data center'
14
+
15
+ option :type,
16
+ short: '-t FLOWLOG_TYPE',
17
+ long: '--type FLOWLOG_TYPE',
18
+ description: 'The object to which the flow log will be attached'
19
+
20
+ option :server_id,
21
+ short: '-S SERVER_ID',
22
+ long: '--server-id SERVER_ID',
23
+ description: 'ID of the server'
24
+
25
+ option :nic_id,
26
+ short: '-N NIC_ID',
27
+ long: '--nic-id NIC_ID',
28
+ description: 'ID of the NIC'
29
+
30
+ option :natgateway_id,
31
+ short: '-G NAT_GATEWAY_ID',
32
+ long: '--natgateway NAT_GATEWAY_ID',
33
+ description: 'ID of the NAT Gateway'
34
+
35
+ option :network_loadbalancer_id,
36
+ short: '-L NETWORK_LOADBALANCER',
37
+ long: '--network-loadbalancer NETWORK_LOADBALANCER',
38
+ description: 'ID of the Network Load Balancer'
39
+
40
+ option :name,
41
+ short: '-n NAME',
42
+ long: '--name NAME',
43
+ description: 'Name of the Flow Log'
44
+
45
+ option :action,
46
+ short: '-a ACTION',
47
+ long: '--action ACTION',
48
+ default: 'ALL',
49
+ description: 'Specifies the traffic action pattern. Must be one of ["ALL", "ACCEPTED", "REJECTED"].'
50
+
51
+ option :direction,
52
+ long: '--direction DIRECTION',
53
+ default: 'BIDIRECTIONAL',
54
+ description: 'Specifies the traffic direction pattern. Must be one of ["INGRESS", "EGRESS", "BIDIRECTIONAL"].'
55
+
56
+ option :bucket,
57
+ short: '-b BUCKET',
58
+ long: '--bucket BUCKET',
59
+ description: 'S3 bucket name of an existing IONOS Cloud S3 bucket. Ex. bucketName/key'
60
+
61
+ attr_reader :description, :required_options
62
+
63
+ def initialize(args = [])
64
+ super(args)
65
+ @description =
66
+ 'This will add a Flow Log to the network interface, NAT Gateway or Network Load Balancer.'
67
+ @required_options = [:datacenter_id, :type, :ionoscloud_username, :ionoscloud_password]
68
+ end
69
+
70
+ def run
71
+ $stdout.sync = true
72
+ validate_required_params(@required_options, config)
73
+
74
+ print "#{ui.color('Creating flow log...', :magenta)}"
75
+
76
+ case config[:type]
77
+ when 'nic'
78
+ validate_required_params([:server_id, :nic_id], config)
79
+ flowlogs_api = Ionoscloud::FlowLogsApi.new(api_client)
80
+ method = flowlogs_api.method(:datacenters_servers_nics_flowlogs_post_with_http_info)
81
+ args = [config[:datacenter_id], config[:server_id], config[:nic_id]]
82
+ when 'natgateway'
83
+ validate_required_params([:natgateway_id], config)
84
+ flowlogs_api = Ionoscloud::NATGatewaysApi.new(api_client)
85
+ method = flowlogs_api.method(:datacenters_natgateways_flowlogs_post_with_http_info)
86
+ args = [config[:datacenter_id], config[:natgateway_id]]
87
+ when 'loadbalancer'
88
+ validate_required_params([:network_loadbalancer_id], config)
89
+ flowlogs_api = Ionoscloud::NetworkLoadBalancersApi.new(api_client)
90
+ method = flowlogs_api.method(:datacenters_networkloadbalancers_flowlogs_post_with_http_info)
91
+ args = [config[:datacenter_id], config[:network_loadbalancer_id]]
92
+ else
93
+ ui.error "Flow log cannot belong to #{config[:type]}. Value must be one of ['nic', 'natgateway', 'loadbalancer']"
94
+ exit(1)
95
+ end
96
+
97
+ flowlog = Ionoscloud::FlowLog.new(
98
+ properties: Ionoscloud::FlowLogProperties.new({
99
+ name: config[:name],
100
+ action: config[:action],
101
+ direction: config[:direction],
102
+ bucket: config[:bucket],
103
+ }.compact),
104
+ )
105
+
106
+ flowlog, _, headers = method.call(*args, flowlog)
107
+
108
+ dot = ui.color('.', :magenta)
109
+ api_client.wait_for { print dot; is_done? get_request_id headers }
110
+
111
+ puts "\n"
112
+ puts "#{ui.color('ID', :cyan)}: #{flowlog.id}"
113
+ puts "#{ui.color('Name', :cyan)}: #{flowlog.properties.name}"
114
+ puts "#{ui.color('Action', :cyan)}: #{flowlog.properties.action}"
115
+ puts "#{ui.color('Direction', :cyan)}: #{flowlog.properties.direction}"
116
+ puts "#{ui.color('Bucket', :cyan)}: #{flowlog.properties.bucket}"
117
+ puts 'done'
118
+ end
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,106 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudFlowlogDelete < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud flowlog delete FLOWLOG_ID [FLOWLOG_ID] (options)'
9
+
10
+ option :datacenter_id,
11
+ short: '-D DATACENTER_ID',
12
+ long: '--datacenter-id DATACENTER_ID',
13
+ description: 'The ID of the data center'
14
+
15
+ option :type,
16
+ short: '-t FLOWLOG_TYPE',
17
+ long: '--type FLOWLOG_TYPE',
18
+ description: 'The object to which the flow log will be attached'
19
+
20
+ option :server_id,
21
+ short: '-S SERVER_ID',
22
+ long: '--server-id SERVER_ID',
23
+ description: 'The ID of the server'
24
+
25
+ option :nic_id,
26
+ short: '-N NIC_ID',
27
+ long: '--nic-id NIC_ID',
28
+ description: 'ID of the NIC'
29
+
30
+ option :natgateway_id,
31
+ short: '-G NAT_GATEWAY_ID',
32
+ long: '--nat-gateway NAT_GATEWAY_ID',
33
+ description: 'ID of the NAT Gateway'
34
+
35
+ option :network_loadbalancer_id,
36
+ short: '-L NETWORK_LOADBALANCER',
37
+ long: '--network-loadbalancer NETWORK_LOADBALANCER',
38
+ description: 'ID of the Network Load Balancer'
39
+
40
+ attr_reader :description, :required_options
41
+
42
+ def initialize(args = [])
43
+ super(args)
44
+ @description =
45
+ 'Removes the specified Flow Logs.'
46
+ @required_options = [:datacenter_id, :type, :ionoscloud_username, :ionoscloud_password]
47
+ end
48
+
49
+ def run
50
+ $stdout.sync = true
51
+ validate_required_params(@required_options, config)
52
+
53
+ flowlogs_api = Ionoscloud::FlowLogsApi.new(api_client)
54
+
55
+ case config[:type]
56
+ when 'nic'
57
+ validate_required_params([:server_id, :nic_id], config)
58
+ flowlogs_api = Ionoscloud::FlowLogsApi.new(api_client)
59
+ delete_method = flowlogs_api.method(:datacenters_servers_nics_flowlogs_delete_with_http_info)
60
+ get_method = flowlogs_api.method(:datacenters_servers_nics_flowlogs_find_by_id)
61
+ args = [config[:datacenter_id], config[:server_id], config[:nic_id]]
62
+ when 'natgateway'
63
+ validate_required_params([:natgateway_id], config)
64
+ flowlogs_api = Ionoscloud::NATGatewaysApi.new(api_client)
65
+ delete_method = flowlogs_api.method(:datacenters_natgateways_flowlogs_delete_with_http_info)
66
+ get_method = flowlogs_api.method(:datacenters_natgateways_flowlogs_find_by_flow_log_id)
67
+ args = [config[:datacenter_id], config[:natgateway_id]]
68
+ when 'loadbalancer'
69
+ validate_required_params([:network_loadbalancer_id], config)
70
+ flowlogs_api = Ionoscloud::NetworkLoadBalancersApi.new(api_client)
71
+ delete_method = flowlogs_api.method(:datacenters_networkloadbalancers_flowlogs_delete_with_http_info)
72
+ get_method = flowlogs_api.method(:datacenters_networkloadbalancers_flowlogs_find_by_flow_log_id)
73
+ args = [config[:datacenter_id], config[:network_loadbalancer_id]]
74
+ else
75
+ ui.error "Flow log cannot belong to #{config[:type]}. Value must be one of ['nic', 'natgateway', 'loadbalancer']"
76
+ exit(1)
77
+ end
78
+
79
+ @name_args.each do |flowlog_id|
80
+ begin
81
+ firewall = get_method.call(*args, flowlog_id)
82
+ rescue Ionoscloud::ApiError => err
83
+ raise err unless err.code == 404
84
+ ui.error("Flow log ID #{flowlog_id} not found. Skipping.")
85
+ next
86
+ end
87
+
88
+ msg_pair('ID', firewall.id)
89
+ msg_pair('Name', firewall.properties.name)
90
+ msg_pair('Action', firewall.properties.action)
91
+ msg_pair('Direction', firewall.properties.direction)
92
+ msg_pair('Bucket', firewall.properties.bucket)
93
+
94
+ begin
95
+ confirm('Do you really want to delete this flow log')
96
+ rescue SystemExit => exc
97
+ next
98
+ end
99
+
100
+ _, _, headers = delete_method.call(*args, flowlog_id)
101
+ ui.warn("Deleted flow log #{firewall.id}. Request ID: #{get_request_id headers}")
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,100 @@
1
+ require_relative 'ionoscloud_base'
2
+
3
+ class Chef
4
+ class Knife
5
+ class IonoscloudFlowlogList < Knife
6
+ include Knife::IonoscloudBase
7
+
8
+ banner 'knife ionoscloud flowlog list (options)'
9
+
10
+ option :datacenter_id,
11
+ short: '-D DATACENTER_ID',
12
+ long: '--datacenter-id DATACENTER_ID',
13
+ description: 'ID of the data center'
14
+
15
+ option :type,
16
+ short: '-t FLOWLOG_TYPE',
17
+ long: '--type FLOWLOG_TYPE',
18
+ description: 'The object to which the flow log will be attached'
19
+
20
+ option :server_id,
21
+ short: '-S SERVER_ID',
22
+ long: '--server-id SERVER_ID',
23
+ description: 'The ID of the server'
24
+
25
+ option :nic_id,
26
+ short: '-N NIC_ID',
27
+ long: '--nic-id NIC_ID',
28
+ description: 'ID of the NIC'
29
+
30
+ option :natgateway_id,
31
+ short: '-G NAT_GATEWAY_ID',
32
+ long: '--nat-gateway NAT_GATEWAY_ID',
33
+ description: 'ID of the NAT Gateway'
34
+
35
+ option :network_loadbalancer_id,
36
+ short: '-L NETWORK_LOADBALANCER',
37
+ long: '--network-loadbalancer NETWORK_LOADBALANCER',
38
+ description: 'ID of the Network Load Balancer'
39
+
40
+ attr_reader :description, :required_options
41
+
42
+ def initialize(args = [])
43
+ super(args)
44
+ @description =
45
+ 'Lists all available flow logs assigned to a NIC, NAT Gateway or Network Load Balancer.'
46
+ @required_options = [:datacenter_id, :type, :ionoscloud_username, :ionoscloud_password]
47
+ end
48
+
49
+ def run
50
+ $stdout.sync = true
51
+ validate_required_params(@required_options, config)
52
+
53
+ flowlog_list = [
54
+ ui.color('ID', :bold),
55
+ ui.color('Name', :bold),
56
+ ui.color('Action', :bold),
57
+ ui.color('Direction', :bold),
58
+ ui.color('Bucket', :bold),
59
+ ]
60
+ flowlogs = []
61
+
62
+ case config[:type]
63
+ when 'nic'
64
+ validate_required_params([:server_id, :nic_id], config)
65
+ flowlogs_api = Ionoscloud::FlowLogsApi.new(api_client)
66
+ flowlogs = flowlogs_api.datacenters_servers_nics_flowlogs_get(
67
+ config[:datacenter_id], config[:server_id], config[:nic_id], { depth: 1 }
68
+ )
69
+ when 'natgateway'
70
+ validate_required_params([:natgateway_id], config)
71
+ flowlogs_api = Ionoscloud::NATGatewaysApi.new(api_client)
72
+ flowlogs = flowlogs_api.datacenters_natgateways_flowlogs_get(
73
+ config[:datacenter_id], config[:natgateway_id], { depth: 1 }
74
+ )
75
+ when 'loadbalancer'
76
+ validate_required_params([:network_loadbalancer_id], config)
77
+ flowlogs_api = Ionoscloud::NetworkLoadBalancersApi.new(api_client)
78
+ flowlogs = flowlogs_api.datacenters_networkloadbalancers_flowlogs_get(
79
+ config[:datacenter_id], config[:network_loadbalancer_id], { depth: 1 }
80
+ )
81
+ else
82
+ ui.error "Flow log cannot belong to #{config[:type]}. Value must be one of ['nic', 'natgateway', 'loadbalancer']"
83
+ exit(1)
84
+ end
85
+
86
+ flowlogs_api = Ionoscloud::FlowLogsApi.new(api_client)
87
+
88
+ flowlogs.items.each do |flowlog|
89
+ flowlog_list << flowlog.id
90
+ flowlog_list << flowlog.properties.name
91
+ flowlog_list << flowlog.properties.action.to_s
92
+ flowlog_list << flowlog.properties.direction.to_s
93
+ flowlog_list << flowlog.properties.bucket.to_s
94
+ end
95
+
96
+ puts ui.list(flowlog_list, :uneven_columns_across, 5)
97
+ end
98
+ end
99
+ end
100
+ end