knife-ionoscloud 6.1.2 → 6.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/docs/changelog.md +8 -0
  3. data/docs/docs_generator.rb +2 -1
  4. data/docs/subcommands/application-loadbalancer/applicationloadbalancer_create.md +60 -0
  5. data/docs/subcommands/application-loadbalancer/applicationloadbalancer_delete.md +41 -0
  6. data/docs/subcommands/application-loadbalancer/applicationloadbalancer_get.md +45 -0
  7. data/docs/subcommands/application-loadbalancer/applicationloadbalancer_list.md +41 -0
  8. data/docs/subcommands/application-loadbalancer/applicationloadbalancer_rule_add.md +69 -0
  9. data/docs/subcommands/application-loadbalancer/applicationloadbalancer_rule_httprule_add.md +78 -0
  10. data/docs/subcommands/application-loadbalancer/applicationloadbalancer_rule_httprule_remove.md +49 -0
  11. data/docs/subcommands/application-loadbalancer/applicationloadbalancer_rule_remove.md +45 -0
  12. data/docs/subcommands/application-loadbalancer/applicationloadbalancer_rule_update.md +70 -0
  13. data/docs/subcommands/application-loadbalancer/applicationloadbalancer_update.md +60 -0
  14. data/docs/subcommands/application-loadbalancer/targetgroup_create.md +79 -0
  15. data/docs/subcommands/application-loadbalancer/targetgroup_delete.md +37 -0
  16. data/docs/subcommands/application-loadbalancer/targetgroup_get.md +41 -0
  17. data/docs/subcommands/application-loadbalancer/targetgroup_list.md +37 -0
  18. data/docs/subcommands/application-loadbalancer/targetgroup_target_add.md +59 -0
  19. data/docs/subcommands/application-loadbalancer/targetgroup_target_remove.md +49 -0
  20. data/docs/subcommands/application-loadbalancer/targetgroup_update.md +80 -0
  21. data/docs/summary.md +61 -43
  22. data/knife-ionoscloud.gemspec +3 -2
  23. data/lib/chef/knife/ionoscloud_applicationloadbalancer_create.rb +85 -0
  24. data/lib/chef/knife/ionoscloud_applicationloadbalancer_delete.rb +64 -0
  25. data/lib/chef/knife/ionoscloud_applicationloadbalancer_get.rb +45 -0
  26. data/lib/chef/knife/ionoscloud_applicationloadbalancer_list.rb +56 -0
  27. data/lib/chef/knife/ionoscloud_applicationloadbalancer_rule_add.rb +129 -0
  28. data/lib/chef/knife/ionoscloud_applicationloadbalancer_rule_httprule_add.rb +159 -0
  29. data/lib/chef/knife/ionoscloud_applicationloadbalancer_rule_httprule_remove.rb +89 -0
  30. data/lib/chef/knife/ionoscloud_applicationloadbalancer_rule_remove.rb +70 -0
  31. data/lib/chef/knife/ionoscloud_applicationloadbalancer_rule_update.rb +137 -0
  32. data/lib/chef/knife/ionoscloud_applicationloadbalancer_update.rb +96 -0
  33. data/lib/chef/knife/ionoscloud_base.rb +139 -7
  34. data/lib/chef/knife/ionoscloud_targetgroup_create.rb +140 -0
  35. data/lib/chef/knife/ionoscloud_targetgroup_delete.rb +50 -0
  36. data/lib/chef/knife/ionoscloud_targetgroup_get.rb +34 -0
  37. data/lib/chef/knife/ionoscloud_targetgroup_list.rb +45 -0
  38. data/lib/chef/knife/ionoscloud_targetgroup_target_add.rb +93 -0
  39. data/lib/chef/knife/ionoscloud_targetgroup_target_remove.rb +66 -0
  40. data/lib/chef/knife/ionoscloud_targetgroup_update.rb +151 -0
  41. data/lib/knife-ionoscloud/version.rb +1 -1
  42. data/spec/chef/knife/ionoscloud_applicationloadbalancer_create_spec.rb +82 -0
  43. data/spec/chef/knife/ionoscloud_applicationloadbalancer_delete_spec.rb +110 -0
  44. data/spec/chef/knife/ionoscloud_applicationloadbalancer_get_spec.rb +70 -0
  45. data/spec/chef/knife/ionoscloud_applicationloadbalancer_list_spec.rb +87 -0
  46. data/spec/chef/knife/ionoscloud_applicationloadbalancer_rule_add_spec.rb +140 -0
  47. data/spec/chef/knife/ionoscloud_applicationloadbalancer_rule_httprule_add_spec.rb +238 -0
  48. data/spec/chef/knife/ionoscloud_applicationloadbalancer_rule_httprule_remove_spec.rb +204 -0
  49. data/spec/chef/knife/ionoscloud_applicationloadbalancer_rule_remove_spec.rb +127 -0
  50. data/spec/chef/knife/ionoscloud_applicationloadbalancer_rule_update_spec.rb +219 -0
  51. data/spec/chef/knife/ionoscloud_applicationloadbalancer_update_spec.rb +97 -0
  52. data/spec/chef/knife/ionoscloud_targetgroup_create_spec.rb +109 -0
  53. data/spec/chef/knife/ionoscloud_targetgroup_delete_spec.rb +111 -0
  54. data/spec/chef/knife/ionoscloud_targetgroup_get_spec.rb +71 -0
  55. data/spec/chef/knife/ionoscloud_targetgroup_list_spec.rb +78 -0
  56. data/spec/chef/knife/ionoscloud_targetgroup_target_add_spec.rb +164 -0
  57. data/spec/chef/knife/ionoscloud_targetgroup_target_remove_spec.rb +139 -0
  58. data/spec/chef/knife/ionoscloud_targetgroup_update_spec.rb +144 -0
  59. data/spec/spec_helper.rb +135 -27
  60. metadata +77 -9
@@ -0,0 +1,140 @@
1
+ require 'spec_helper'
2
+ require 'ionoscloud_applicationloadbalancer_rule_add'
3
+
4
+ Chef::Knife::IonoscloudApplicationloadbalancerRuleAdd.load_deps
5
+
6
+ describe Chef::Knife::IonoscloudApplicationloadbalancerRuleAdd do
7
+ before :each do
8
+ subject { Chef::Knife::IonoscloudApplicationloadbalancerRuleAdd.new }
9
+
10
+ allow(subject).to receive(:puts)
11
+ allow(subject).to receive(:print)
12
+ end
13
+
14
+ describe '#run' do
15
+ it 'should call ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_post_with_http_info' do
16
+ application_loadbalancer = application_loadbalancer_mock
17
+ application_loadbalancer_rule = application_loadbalancer_rule_mock
18
+
19
+ subject_config = {
20
+ ionoscloud_username: 'email',
21
+ ionoscloud_password: 'password',
22
+ datacenter_id: 'datacenter_id',
23
+ application_loadbalancer_id: application_loadbalancer.id,
24
+ name: application_loadbalancer_rule.properties.name,
25
+ protocol: application_loadbalancer_rule.properties.protocol,
26
+ listener_ip: application_loadbalancer_rule.properties.listener_ip,
27
+ listener_port: application_loadbalancer_rule.properties.listener_port,
28
+ client_timeout: application_loadbalancer_rule.properties.client_timeout,
29
+ server_certificates: application_loadbalancer_rule.properties.server_certificates.join(','),
30
+ http_rules: application_loadbalancer_rule.properties.http_rules.map do |el|
31
+ hash = el.to_hash
32
+ hash[:conditions].map! do |condition|
33
+ condition.collect { |k, v| [k.to_s, v] }.to_h
34
+ end
35
+ {
36
+ 'name' => hash[:name],
37
+ 'type' => hash[:type],
38
+ 'target_group' => hash[:targetGroup],
39
+ 'drop_query' => hash[:dropQuery],
40
+ 'location' => hash[:location],
41
+ 'status_code' => hash[:statusCode],
42
+ 'response_message' => hash[:responseMessage],
43
+ 'content_type' => hash[:contentType],
44
+ 'conditions' => hash[:conditions],
45
+ }
46
+ end,
47
+ yes: true,
48
+
49
+ }
50
+
51
+ subject_config.each { |key, value| subject.config[key] = value }
52
+
53
+ expect(subject).to receive(:puts).with("ID: #{application_loadbalancer.id}")
54
+ expect(subject).to receive(:puts).with("Name: #{application_loadbalancer.properties.name}")
55
+ expect(subject).to receive(:puts).with("Listener LAN: #{application_loadbalancer.properties.listener_lan}")
56
+ expect(subject).to receive(:puts).with("IPS: #{application_loadbalancer.properties.ips}")
57
+ expect(subject).to receive(:puts).with("Target LAN: #{application_loadbalancer.properties.target_lan}")
58
+ expect(subject).to receive(:puts).with("Lb Private IPS: #{application_loadbalancer.properties.lb_private_ips}")
59
+ expect(subject).to receive(:puts).with("Rules: #{
60
+ (application_loadbalancer.entities.forwardingrules.items + [application_loadbalancer_rule]).map do |rule|
61
+ {
62
+ id: rule.id,
63
+ name: application_loadbalancer_rule.properties.name,
64
+ protocol: application_loadbalancer_rule.properties.protocol,
65
+ listener_ip: application_loadbalancer_rule.properties.listener_ip,
66
+ listener_port: application_loadbalancer_rule.properties.listener_port,
67
+ client_timeout: application_loadbalancer_rule.properties.client_timeout,
68
+ server_certificates: application_loadbalancer_rule.properties.server_certificates,
69
+ http_rules: rule.properties.http_rules.nil? ? [] : rule.properties.http_rules.map do |http_rule|
70
+ {
71
+ name: http_rule.name,
72
+ type: http_rule.type,
73
+ target_group: http_rule.target_group,
74
+ drop_query: http_rule.drop_query,
75
+ location: http_rule.location,
76
+ status_code: http_rule.status_code,
77
+ response_message: http_rule.response_message,
78
+ content_type: http_rule.content_type,
79
+ conditions: http_rule.conditions.nil? ? [] : http_rule.conditions.map do |condition|
80
+ {
81
+ type: condition.type,
82
+ condition: condition.condition,
83
+ negate: condition.negate,
84
+ key: condition.key,
85
+ value: condition.value,
86
+ }
87
+ end,
88
+ }
89
+ end,
90
+ }
91
+ end}")
92
+
93
+ application_loadbalancer.entities.forwardingrules.items << application_loadbalancer_rule
94
+ expected_properties = application_loadbalancer_rule.properties.to_hash
95
+
96
+ mock_wait_for(subject)
97
+ mock_call_api(
98
+ subject,
99
+ [
100
+ {
101
+ method: 'POST',
102
+ path: "/datacenters/#{subject_config[:datacenter_id]}/applicationloadbalancers/#{subject_config[:application_loadbalancer_id]}/forwardingrules",
103
+ operation: :'ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_post',
104
+ body: { properties: expected_properties },
105
+ return_type: 'ApplicationLoadBalancerForwardingRule',
106
+ },
107
+ {
108
+ method: 'GET',
109
+ path: "/datacenters/#{subject_config[:datacenter_id]}/applicationloadbalancers/#{subject_config[:application_loadbalancer_id]}",
110
+ operation: :'ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_find_by_application_load_balancer_id',
111
+ return_type: 'ApplicationLoadBalancer',
112
+ result: application_loadbalancer,
113
+ },
114
+ ],
115
+ )
116
+
117
+ expect { subject.run }.not_to raise_error(Exception)
118
+ end
119
+
120
+ it 'should not make any call if any required option is missing' do
121
+ required_options = subject.instance_variable_get(:@required_options)
122
+
123
+ if required_options.length > 0
124
+ arrays_without_one_element(required_options).each do |test_case|
125
+ subject.config[:ionoscloud_token] = 'token'
126
+ test_case[:array].each { |value| subject.config[value] = 'test' }
127
+
128
+ expect(subject).to receive(:puts).with("Missing required parameters #{test_case[:removed]}")
129
+ expect(subject.api_client).not_to receive(:call_api)
130
+
131
+ expect { subject.run }.to raise_error(SystemExit) do |error|
132
+ expect(error.status).to eq(1)
133
+ end
134
+
135
+ required_options.each { |value| subject.config[value] = nil }
136
+ end
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,238 @@
1
+ require 'spec_helper'
2
+ require 'ionoscloud_applicationloadbalancer_rule_httprule_add'
3
+
4
+ Chef::Knife::IonoscloudApplicationloadbalancerRuleHttpruleAdd.load_deps
5
+
6
+ describe Chef::Knife::IonoscloudApplicationloadbalancerRuleHttpruleAdd do
7
+ before :each do
8
+ subject { Chef::Knife::IonoscloudApplicationloadbalancerRuleHttpruleAdd.new }
9
+
10
+ allow(subject).to receive(:puts)
11
+ allow(subject).to receive(:print)
12
+ end
13
+
14
+ describe '#run' do
15
+ it 'should call ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_patch_with_http_info '\
16
+ 'and add a new Http Rule' do
17
+ application_loadbalancer = application_loadbalancer_mock
18
+ application_loadbalancer_rule_httprule = application_loadbalancer_rule_httprule_mock(name: 'test')
19
+ subject_config = {
20
+ ionoscloud_username: 'email',
21
+ ionoscloud_password: 'password',
22
+ datacenter_id: 'datacenter_id',
23
+ application_loadbalancer_id: application_loadbalancer.id,
24
+ forwarding_rule_id: application_loadbalancer.entities.forwardingrules.items.first.id,
25
+ name: application_loadbalancer_rule_httprule.name,
26
+ type: application_loadbalancer_rule_httprule.type,
27
+ target_group: application_loadbalancer_rule_httprule.target_group,
28
+ drop_query: application_loadbalancer_rule_httprule.drop_query,
29
+ location: application_loadbalancer_rule_httprule.location,
30
+ status_code: application_loadbalancer_rule_httprule.status_code,
31
+ response_message: application_loadbalancer_rule_httprule.response_message,
32
+ content_type: application_loadbalancer_rule_httprule.content_type,
33
+ conditions: application_loadbalancer_rule_httprule.conditions.map { |el| el.to_hash.collect { |k, v| [k.to_s, v] }.to_h },
34
+ yes: true,
35
+ }
36
+
37
+ subject_config.each { |key, value| subject.config[key] = value }
38
+
39
+ forwarding_rule = application_loadbalancer.entities.forwardingrules.items.first
40
+
41
+ expected_rule_print = {
42
+ name: application_loadbalancer_rule_httprule.name,
43
+ type: application_loadbalancer_rule_httprule.type,
44
+ target_group: application_loadbalancer_rule_httprule.target_group,
45
+ drop_query: application_loadbalancer_rule_httprule.drop_query,
46
+ location: application_loadbalancer_rule_httprule.location,
47
+ status_code: application_loadbalancer_rule_httprule.status_code,
48
+ response_message: application_loadbalancer_rule_httprule.response_message,
49
+ content_type: application_loadbalancer_rule_httprule.content_type,
50
+ conditions: application_loadbalancer_rule_httprule.conditions.map { |el| el.to_hash },
51
+ }
52
+ expect(subject).to receive(:puts).with("ID: #{application_loadbalancer.id}")
53
+ expect(subject).to receive(:puts).with("Name: #{application_loadbalancer.properties.name}")
54
+ expect(subject).to receive(:puts).with("Listener LAN: #{application_loadbalancer.properties.listener_lan}")
55
+ expect(subject).to receive(:puts).with("IPS: #{application_loadbalancer.properties.ips}")
56
+ expect(subject).to receive(:puts).with("Target LAN: #{application_loadbalancer.properties.target_lan}")
57
+ expect(subject).to receive(:puts).with("Lb Private IPS: #{application_loadbalancer.properties.lb_private_ips}")
58
+ expect(subject).to receive(:puts).with("Rules: #{[{
59
+ id: forwarding_rule.id,
60
+ name: forwarding_rule.properties.name,
61
+ protocol: forwarding_rule.properties.protocol,
62
+ listener_ip: forwarding_rule.properties.listener_ip,
63
+ listener_port: forwarding_rule.properties.listener_port,
64
+ client_timeout: forwarding_rule.properties.client_timeout,
65
+ server_certificates: forwarding_rule.properties.server_certificates,
66
+ http_rules: forwarding_rule.properties.http_rules.map do |http_rule|
67
+ {
68
+ name: http_rule.name,
69
+ type: http_rule.type,
70
+ target_group: http_rule.target_group,
71
+ drop_query: http_rule.drop_query,
72
+ location: http_rule.location,
73
+ status_code: http_rule.status_code,
74
+ response_message: http_rule.response_message,
75
+ content_type: http_rule.content_type,
76
+ conditions: http_rule.conditions.nil? ? [] : http_rule.conditions.map do |condition|
77
+ {
78
+ type: condition.type,
79
+ condition: condition.condition,
80
+ negate: condition.negate,
81
+ key: condition.key,
82
+ value: condition.value,
83
+ }
84
+ end,
85
+ }
86
+ end + [expected_rule_print],
87
+ }, subject.get_application_loadbalancer_extended_properties(application_loadbalancer)[1],]}")
88
+
89
+ expected_added_httprule_body = application_loadbalancer_rule_httprule.to_hash
90
+
91
+ mock_wait_for(subject)
92
+ mock_call_api(
93
+ subject,
94
+ [
95
+ {
96
+ method: 'GET',
97
+ path: "/datacenters/#{subject_config[:datacenter_id]}/applicationloadbalancers/"\
98
+ "#{subject_config[:application_loadbalancer_id]}/forwardingrules/#{subject_config[:forwarding_rule_id]}",
99
+ operation: :'ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_find_by_forwarding_rule_id',
100
+ return_type: 'ApplicationLoadBalancerForwardingRule',
101
+ result: application_loadbalancer.entities.forwardingrules.items.first,
102
+ },
103
+ {
104
+ method: 'PATCH',
105
+ path: "/datacenters/#{subject_config[:datacenter_id]}/applicationloadbalancers/"\
106
+ "#{subject_config[:application_loadbalancer_id]}/forwardingrules/#{subject_config[:forwarding_rule_id]}",
107
+ operation: :'ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_patch',
108
+ body: {
109
+ httpRules: application_loadbalancer.entities.forwardingrules.items.first.properties.http_rules.map(&:to_hash) + [expected_added_httprule_body],
110
+ },
111
+ return_type: 'ApplicationLoadBalancerForwardingRule',
112
+ },
113
+ {
114
+ method: 'GET',
115
+ path: "/datacenters/#{subject_config[:datacenter_id]}/applicationloadbalancers/#{subject_config[:application_loadbalancer_id]}",
116
+ operation: :'ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_find_by_application_load_balancer_id',
117
+ return_type: 'ApplicationLoadBalancer',
118
+ result: application_loadbalancer,
119
+ },
120
+ ],
121
+ )
122
+
123
+ expect { subject.run }.not_to raise_error(Exception)
124
+ end
125
+
126
+ it 'should call ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_patch_with_http_info '\
127
+ 'and update an existing Http Rule' do
128
+ application_loadbalancer = application_loadbalancer_mock
129
+ application_loadbalancer_rule_httprule = application_loadbalancer_rule_httprule_mock(location: 'www.not-ionos.com', message: 'new_message')
130
+ subject_config = {
131
+ ionoscloud_username: 'email',
132
+ ionoscloud_password: 'password',
133
+ datacenter_id: 'datacenter_id',
134
+ application_loadbalancer_id: application_loadbalancer.id,
135
+ forwarding_rule_id: application_loadbalancer.entities.forwardingrules.items.first.id,
136
+ name: application_loadbalancer_rule_httprule.name,
137
+ type: application_loadbalancer_rule_httprule.type,
138
+ location: application_loadbalancer_rule_httprule.location,
139
+ response_message: application_loadbalancer_rule_httprule.response_message,
140
+ conditions: '[' + JSON[application_loadbalancer_rule_httprule.conditions.first.to_hash] +
141
+ ',' + JSON[application_loadbalancer_rule_httprule.conditions.first.to_hash] + ']',
142
+ yes: true,
143
+ }
144
+
145
+ subject_config.each { |key, value| subject.config[key] = value }
146
+
147
+ forwarding_rule = application_loadbalancer.entities.forwardingrules.items.first
148
+
149
+ expect(subject).to receive(:puts).with("ID: #{application_loadbalancer.id}")
150
+ expect(subject).to receive(:puts).with("Name: #{application_loadbalancer.properties.name}")
151
+ expect(subject).to receive(:puts).with("Listener LAN: #{application_loadbalancer.properties.listener_lan}")
152
+ expect(subject).to receive(:puts).with("IPS: #{application_loadbalancer.properties.ips}")
153
+ expect(subject).to receive(:puts).with("Target LAN: #{application_loadbalancer.properties.target_lan}")
154
+ expect(subject).to receive(:puts).with("Lb Private IPS: #{application_loadbalancer.properties.lb_private_ips}")
155
+ expect(subject).to receive(:puts).with("Rules: #{[{
156
+ id: forwarding_rule.id,
157
+ name: forwarding_rule.properties.name,
158
+ protocol: forwarding_rule.properties.protocol,
159
+ listener_ip: forwarding_rule.properties.listener_ip,
160
+ listener_port: forwarding_rule.properties.listener_port,
161
+ client_timeout: forwarding_rule.properties.client_timeout,
162
+ server_certificates: forwarding_rule.properties.server_certificates,
163
+ http_rules: [{
164
+ name: application_loadbalancer_rule_httprule.name,
165
+ type: application_loadbalancer_rule_httprule.type,
166
+ target_group: application_loadbalancer.entities.forwardingrules.items.first.properties.http_rules.first.target_group,
167
+ drop_query: application_loadbalancer_rule_httprule.drop_query,
168
+ location: application_loadbalancer_rule_httprule.location,
169
+ status_code: application_loadbalancer_rule_httprule.status_code,
170
+ response_message: application_loadbalancer_rule_httprule.response_message,
171
+ content_type: application_loadbalancer_rule_httprule.content_type,
172
+ conditions: [
173
+ application_loadbalancer_rule_httprule.conditions.first.to_hash,
174
+ application_loadbalancer_rule_httprule.conditions.first.to_hash,
175
+ ],
176
+ }],
177
+ }, subject.get_application_loadbalancer_extended_properties(application_loadbalancer)[1],]}")
178
+
179
+ expected_added_httprule_body = application_loadbalancer_rule_httprule.to_hash
180
+ expected_added_httprule_body[:targetGroup] = application_loadbalancer.entities.forwardingrules.items.first.properties.http_rules.first.target_group
181
+ expected_added_httprule_body[:conditions] << application_loadbalancer_rule_httprule.conditions.first.to_hash
182
+
183
+ mock_wait_for(subject)
184
+ mock_call_api(
185
+ subject,
186
+ [
187
+ {
188
+ method: 'GET',
189
+ path: "/datacenters/#{subject_config[:datacenter_id]}/applicationloadbalancers/"\
190
+ "#{subject_config[:application_loadbalancer_id]}/forwardingrules/#{subject_config[:forwarding_rule_id]}",
191
+ operation: :'ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_find_by_forwarding_rule_id',
192
+ return_type: 'ApplicationLoadBalancerForwardingRule',
193
+ result: application_loadbalancer.entities.forwardingrules.items.first,
194
+ },
195
+ {
196
+ method: 'PATCH',
197
+ path: "/datacenters/#{subject_config[:datacenter_id]}/applicationloadbalancers/"\
198
+ "#{subject_config[:application_loadbalancer_id]}/forwardingrules/#{subject_config[:forwarding_rule_id]}",
199
+ operation: :'ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_patch',
200
+ body: {
201
+ httpRules: [expected_added_httprule_body],
202
+ },
203
+ return_type: 'ApplicationLoadBalancerForwardingRule',
204
+ },
205
+ {
206
+ method: 'GET',
207
+ path: "/datacenters/#{subject_config[:datacenter_id]}/applicationloadbalancers/#{subject_config[:application_loadbalancer_id]}",
208
+ operation: :'ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_find_by_application_load_balancer_id',
209
+ return_type: 'ApplicationLoadBalancer',
210
+ result: application_loadbalancer,
211
+ },
212
+ ],
213
+ )
214
+
215
+ expect { subject.run }.not_to raise_error(Exception)
216
+ end
217
+
218
+ it 'should not make any call if any required option is missing' do
219
+ required_options = subject.instance_variable_get(:@required_options)
220
+
221
+ if required_options.length > 0
222
+ arrays_without_one_element(required_options).each do |test_case|
223
+ subject.config[:ionoscloud_token] = 'token'
224
+ test_case[:array].each { |value| subject.config[value] = 'test' }
225
+
226
+ expect(subject).to receive(:puts).with("Missing required parameters #{test_case[:removed]}")
227
+ expect(subject.api_client).not_to receive(:call_api)
228
+
229
+ expect { subject.run }.to raise_error(SystemExit) do |error|
230
+ expect(error.status).to eq(1)
231
+ end
232
+
233
+ required_options.each { |value| subject.config[value] = nil }
234
+ end
235
+ end
236
+ end
237
+ end
238
+ end
@@ -0,0 +1,204 @@
1
+ require 'spec_helper'
2
+ require 'ionoscloud_applicationloadbalancer_rule_httprule_remove'
3
+
4
+ Chef::Knife::IonoscloudApplicationloadbalancerRuleHttpruleRemove.load_deps
5
+
6
+ describe Chef::Knife::IonoscloudApplicationloadbalancerRuleHttpruleRemove do
7
+ before :each do
8
+ subject { Chef::Knife::IonoscloudApplicationloadbalancerRuleHttpruleRemove.new }
9
+
10
+ allow(subject).to receive(:puts)
11
+ allow(subject).to receive(:print)
12
+ end
13
+
14
+ describe '#run' do
15
+ it 'should call ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_patch_with_http_info '\
16
+ 'when the ID is valid' do
17
+ application_loadbalancer = application_loadbalancer_mock
18
+ subject_config = {
19
+ ionoscloud_username: 'email',
20
+ ionoscloud_password: 'password',
21
+ datacenter_id: 'datacenter_id',
22
+ application_loadbalancer_id: application_loadbalancer.id,
23
+ forwarding_rule_id: application_loadbalancer.entities.forwardingrules.items.first.id,
24
+ yes: true,
25
+ }
26
+
27
+ subject_config.each { |key, value| subject.config[key] = value }
28
+ subject.name_args = [application_loadbalancer.entities.forwardingrules.items.first.properties.http_rules.first.name, 'invalid_name']
29
+
30
+ forwarding_rule = application_loadbalancer.entities.forwardingrules.items.first
31
+
32
+ expect(subject).to receive(:puts).with("ID: #{application_loadbalancer.id}")
33
+ expect(subject).to receive(:puts).with("Name: #{application_loadbalancer.properties.name}")
34
+ expect(subject).to receive(:puts).with("Listener LAN: #{application_loadbalancer.properties.listener_lan}")
35
+ expect(subject).to receive(:puts).with("IPS: #{application_loadbalancer.properties.ips}")
36
+ expect(subject).to receive(:puts).with("Target LAN: #{application_loadbalancer.properties.target_lan}")
37
+ expect(subject).to receive(:puts).with("Lb Private IPS: #{application_loadbalancer.properties.lb_private_ips}")
38
+ expect(subject).to receive(:puts).with("Rules: #{[{
39
+ id: forwarding_rule.id,
40
+ name: forwarding_rule.properties.name,
41
+ protocol: forwarding_rule.properties.protocol,
42
+ listener_ip: forwarding_rule.properties.listener_ip,
43
+ listener_port: forwarding_rule.properties.listener_port,
44
+ client_timeout: forwarding_rule.properties.client_timeout,
45
+ server_certificates: forwarding_rule.properties.server_certificates,
46
+ http_rules: [],
47
+ }, subject.get_application_loadbalancer_extended_properties(application_loadbalancer)[1],]}")
48
+ expect(subject).to receive(:print).with("Removing the Http Rules #{[subject.name_args.first]} from the Application Loadbalancer Forwarding Rule...")
49
+
50
+ mock_wait_for(subject)
51
+ mock_call_api(
52
+ subject,
53
+ [
54
+ {
55
+ method: 'GET',
56
+ path: "/datacenters/#{subject_config[:datacenter_id]}/applicationloadbalancers/"\
57
+ "#{subject_config[:application_loadbalancer_id]}/forwardingrules/#{subject_config[:forwarding_rule_id]}",
58
+ operation: :'ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_find_by_forwarding_rule_id',
59
+ return_type: 'ApplicationLoadBalancerForwardingRule',
60
+ result: application_loadbalancer.entities.forwardingrules.items.first,
61
+ },
62
+ {
63
+ method: 'PATCH',
64
+ path: "/datacenters/#{subject_config[:datacenter_id]}/applicationloadbalancers/"\
65
+ "#{subject_config[:application_loadbalancer_id]}/forwardingrules/#{subject_config[:forwarding_rule_id]}",
66
+ operation: :'ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_patch',
67
+ body: {
68
+ httpRules: [],
69
+ },
70
+ return_type: 'ApplicationLoadBalancerForwardingRule',
71
+ },
72
+ {
73
+ method: 'GET',
74
+ path: "/datacenters/#{subject_config[:datacenter_id]}/applicationloadbalancers/#{application_loadbalancer.id}",
75
+ operation: :'ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_find_by_application_load_balancer_id',
76
+ return_type: 'ApplicationLoadBalancer',
77
+ result: application_loadbalancer,
78
+ },
79
+ ],
80
+ )
81
+
82
+ expect { subject.run }.not_to raise_error(Exception)
83
+ end
84
+
85
+ it 'should not call ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_patch_with_http_info '\
86
+ 'when the ID is not valid' do
87
+ application_loadbalancer = application_loadbalancer_mock
88
+ subject_config = {
89
+ ionoscloud_username: 'email',
90
+ ionoscloud_password: 'password',
91
+ datacenter_id: 'datacenter_id',
92
+ application_loadbalancer_id: application_loadbalancer.id,
93
+ forwarding_rule_id: application_loadbalancer.entities.forwardingrules.items.first.id,
94
+ }
95
+
96
+ subject_config.each { |key, value| subject.config[key] = value }
97
+ subject.name_args = ['invalid_id', 'invalid_id2']
98
+
99
+ expect(subject).to receive(:puts).with("ID: #{application_loadbalancer.id}")
100
+ expect(subject).to receive(:puts).with("Name: #{application_loadbalancer.properties.name}")
101
+ expect(subject).to receive(:puts).with("Listener LAN: #{application_loadbalancer.properties.listener_lan}")
102
+ expect(subject).to receive(:puts).with("IPS: #{application_loadbalancer.properties.ips}")
103
+ expect(subject).to receive(:puts).with("Target LAN: #{application_loadbalancer.properties.target_lan}")
104
+ expect(subject).to receive(:puts).with("Lb Private IPS: #{application_loadbalancer.properties.lb_private_ips}")
105
+ expect(subject).to receive(:puts).with("Rules: #{subject.get_application_loadbalancer_extended_properties(application_loadbalancer)}")
106
+
107
+ expect(subject.ui).to receive(:warn).with('No name of an existing Http Rule was given.')
108
+
109
+ expect(subject.api_client).not_to receive(:wait_for)
110
+ mock_call_api(
111
+ subject,
112
+ [
113
+ {
114
+ method: 'GET',
115
+ path: "/datacenters/#{subject_config[:datacenter_id]}/applicationloadbalancers/"\
116
+ "#{subject_config[:application_loadbalancer_id]}/forwardingrules/#{subject_config[:forwarding_rule_id]}",
117
+ operation: :'ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_find_by_forwarding_rule_id',
118
+ return_type: 'ApplicationLoadBalancerForwardingRule',
119
+ result: application_loadbalancer.entities.forwardingrules.items.first,
120
+ },
121
+ {
122
+ method: 'GET',
123
+ path: "/datacenters/#{subject_config[:datacenter_id]}/applicationloadbalancers/#{application_loadbalancer.id}",
124
+ operation: :'ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_find_by_application_load_balancer_id',
125
+ return_type: 'ApplicationLoadBalancer',
126
+ result: application_loadbalancer,
127
+ },
128
+ ],
129
+ )
130
+
131
+ expect { subject.run }.not_to raise_error(Exception)
132
+ end
133
+
134
+ it 'should not call ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_patch_with_http_info '\
135
+ 'when the rules has to existing Http Rule' do
136
+ application_loadbalancer = application_loadbalancer_mock
137
+ application_loadbalancer.entities.forwardingrules.items.first.properties.http_rules = nil
138
+ subject_config = {
139
+ ionoscloud_username: 'email',
140
+ ionoscloud_password: 'password',
141
+ datacenter_id: 'datacenter_id',
142
+ application_loadbalancer_id: application_loadbalancer.id,
143
+ forwarding_rule_id: application_loadbalancer.entities.forwardingrules.items.first.id,
144
+ }
145
+
146
+ subject_config.each { |key, value| subject.config[key] = value }
147
+ subject.name_args = ['invalid_id', 'invalid_id2']
148
+
149
+ expect(subject).to receive(:puts).with("ID: #{application_loadbalancer.id}")
150
+ expect(subject).to receive(:puts).with("Name: #{application_loadbalancer.properties.name}")
151
+ expect(subject).to receive(:puts).with("Listener LAN: #{application_loadbalancer.properties.listener_lan}")
152
+ expect(subject).to receive(:puts).with("IPS: #{application_loadbalancer.properties.ips}")
153
+ expect(subject).to receive(:puts).with("Target LAN: #{application_loadbalancer.properties.target_lan}")
154
+ expect(subject).to receive(:puts).with("Lb Private IPS: #{application_loadbalancer.properties.lb_private_ips}")
155
+ expect(subject).to receive(:puts).with("Rules: #{subject.get_application_loadbalancer_extended_properties(application_loadbalancer)}")
156
+
157
+ expect(subject.ui).to receive(:warn).with("The Forwarding Rule #{subject_config[:forwarding_rule_id]} has no Http Rules.")
158
+
159
+ expect(subject.api_client).not_to receive(:wait_for)
160
+ mock_call_api(
161
+ subject,
162
+ [
163
+ {
164
+ method: 'GET',
165
+ path: "/datacenters/#{subject_config[:datacenter_id]}/applicationloadbalancers/"\
166
+ "#{subject_config[:application_loadbalancer_id]}/forwardingrules/#{subject_config[:forwarding_rule_id]}",
167
+ operation: :'ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_forwardingrules_find_by_forwarding_rule_id',
168
+ return_type: 'ApplicationLoadBalancerForwardingRule',
169
+ result: application_loadbalancer.entities.forwardingrules.items.first,
170
+ },
171
+ {
172
+ method: 'GET',
173
+ path: "/datacenters/#{subject_config[:datacenter_id]}/applicationloadbalancers/#{application_loadbalancer.id}",
174
+ operation: :'ApplicationLoadBalancersApi.datacenters_applicationloadbalancers_find_by_application_load_balancer_id',
175
+ return_type: 'ApplicationLoadBalancer',
176
+ result: application_loadbalancer,
177
+ },
178
+ ],
179
+ )
180
+
181
+ expect { subject.run }.not_to raise_error(Exception)
182
+ end
183
+
184
+ it 'should not make any call if any required option is missing' do
185
+ required_options = subject.instance_variable_get(:@required_options)
186
+
187
+ if required_options.length > 0
188
+ arrays_without_one_element(required_options).each do |test_case|
189
+ subject.config[:ionoscloud_token] = 'token'
190
+ test_case[:array].each { |value| subject.config[value] = 'test' }
191
+
192
+ expect(subject).to receive(:puts).with("Missing required parameters #{test_case[:removed]}")
193
+ expect(subject.api_client).not_to receive(:call_api)
194
+
195
+ expect { subject.run }.to raise_error(SystemExit) do |error|
196
+ expect(error.status).to eq(1)
197
+ end
198
+
199
+ required_options.each { |value| subject.config[value] = nil }
200
+ end
201
+ end
202
+ end
203
+ end
204
+ end