3scale_toolbox 0.18.3 → 0.19.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/3scale_toolbox.gemspec +3 -3
  3. data/README.md +1 -2
  4. data/lib/3scale_toolbox/commands/backend_command/copy_command/delete_mapping_rules_task.rb +18 -0
  5. data/lib/3scale_toolbox/commands/backend_command/copy_command/task.rb +4 -0
  6. data/lib/3scale_toolbox/commands/backend_command/copy_command.rb +4 -1
  7. data/lib/3scale_toolbox/commands/import_command/import_csv.rb +8 -8
  8. data/lib/3scale_toolbox/commands/import_command/openapi/create_activedocs_step.rb +1 -1
  9. data/lib/3scale_toolbox/commands/import_command/openapi/update_policies_step.rb +23 -10
  10. data/lib/3scale_toolbox/commands/import_command/openapi.rb +2 -0
  11. data/lib/3scale_toolbox/commands/plans_command/export_command.rb +52 -29
  12. data/lib/3scale_toolbox/commands/plans_command/import/import_backend_metrics_step.rb +37 -0
  13. data/lib/3scale_toolbox/commands/plans_command/import/import_plan_limits_step.rb +11 -2
  14. data/lib/3scale_toolbox/commands/plans_command/import/import_plan_metrics_step.rb +2 -2
  15. data/lib/3scale_toolbox/commands/plans_command/import/import_plan_pricing_rules_step.rb +12 -1
  16. data/lib/3scale_toolbox/commands/plans_command/import/step.rb +23 -8
  17. data/lib/3scale_toolbox/commands/plans_command/import/validate_plan_step.rb +126 -0
  18. data/lib/3scale_toolbox/commands/plans_command/import_command.rb +5 -1
  19. data/lib/3scale_toolbox/commands/product_command/copy_command/copy_backends_task.rb +6 -0
  20. data/lib/3scale_toolbox/commands/product_command/copy_command.rb +3 -2
  21. data/lib/3scale_toolbox/commands/product_command/import_command.rb +1 -0
  22. data/lib/3scale_toolbox/crds/limit_dump.rb +1 -1
  23. data/lib/3scale_toolbox/crds/pricing_rule_dump.rb +1 -1
  24. data/lib/3scale_toolbox/entities/application_plan.rb +64 -0
  25. data/lib/3scale_toolbox/entities/backend.rb +4 -0
  26. data/lib/3scale_toolbox/entities/backend_method.rb +16 -0
  27. data/lib/3scale_toolbox/entities/backend_metric.rb +16 -0
  28. data/lib/3scale_toolbox/entities/limit.rb +52 -7
  29. data/lib/3scale_toolbox/entities/method.rb +11 -0
  30. data/lib/3scale_toolbox/entities/metric.rb +12 -0
  31. data/lib/3scale_toolbox/entities/pricing_rule.rb +52 -7
  32. data/lib/3scale_toolbox/entities/service.rb +4 -0
  33. data/lib/3scale_toolbox/proxy_logger.rb +2 -0
  34. data/lib/3scale_toolbox/remote_cache.rb +49 -2
  35. data/lib/3scale_toolbox/version.rb +1 -1
  36. data/licenses.xml +15 -25
  37. metadata +8 -13
  38. data/lib/3scale_toolbox/commands/plans_command/export/read_app_plan_step.rb +0 -16
  39. data/lib/3scale_toolbox/commands/plans_command/export/read_plan_features_step.rb +0 -16
  40. data/lib/3scale_toolbox/commands/plans_command/export/read_plan_limits_step.rb +0 -19
  41. data/lib/3scale_toolbox/commands/plans_command/export/read_plan_methods_step.rb +0 -47
  42. data/lib/3scale_toolbox/commands/plans_command/export/read_plan_metrics_step.rb +0 -47
  43. data/lib/3scale_toolbox/commands/plans_command/export/read_plan_pricing_rules_step.rb +0 -19
  44. data/lib/3scale_toolbox/commands/plans_command/export/step.rb +0 -85
  45. data/lib/3scale_toolbox/commands/plans_command/export/write_artifacts_file_step.rb +0 -84
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: 3scale_toolbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.3
4
+ version: 0.19.3
5
5
  platform: ruby
6
6
  authors:
7
- - Michal Cichra
7
+ - Miguel Soriano
8
8
  - Eguzki Astiz Lezaun
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2021-06-11 00:00:00.000000000 Z
12
+ date: 2021-10-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -139,7 +139,7 @@ dependencies:
139
139
  version: '0.20'
140
140
  description: 3scale tools to manage your API from the terminal.
141
141
  email:
142
- - michal@3scale.net
142
+ - msoriano@redhat.com
143
143
  - eastizle@redhat.com
144
144
  executables:
145
145
  - 3scale
@@ -184,6 +184,7 @@ files:
184
184
  - lib/3scale_toolbox/commands/backend_command/copy_command/copy_methods_task.rb
185
185
  - lib/3scale_toolbox/commands/backend_command/copy_command/copy_metrics_task.rb
186
186
  - lib/3scale_toolbox/commands/backend_command/copy_command/create_or_update_target_backend_task.rb
187
+ - lib/3scale_toolbox/commands/backend_command/copy_command/delete_mapping_rules_task.rb
187
188
  - lib/3scale_toolbox/commands/backend_command/copy_command/task.rb
188
189
  - lib/3scale_toolbox/commands/copy_command.rb
189
190
  - lib/3scale_toolbox/commands/copy_command/service_command.rb
@@ -217,21 +218,15 @@ files:
217
218
  - lib/3scale_toolbox/commands/plans_command/apply_command.rb
218
219
  - lib/3scale_toolbox/commands/plans_command/create_command.rb
219
220
  - lib/3scale_toolbox/commands/plans_command/delete_command.rb
220
- - lib/3scale_toolbox/commands/plans_command/export/read_app_plan_step.rb
221
- - lib/3scale_toolbox/commands/plans_command/export/read_plan_features_step.rb
222
- - lib/3scale_toolbox/commands/plans_command/export/read_plan_limits_step.rb
223
- - lib/3scale_toolbox/commands/plans_command/export/read_plan_methods_step.rb
224
- - lib/3scale_toolbox/commands/plans_command/export/read_plan_metrics_step.rb
225
- - lib/3scale_toolbox/commands/plans_command/export/read_plan_pricing_rules_step.rb
226
- - lib/3scale_toolbox/commands/plans_command/export/step.rb
227
- - lib/3scale_toolbox/commands/plans_command/export/write_artifacts_file_step.rb
228
221
  - lib/3scale_toolbox/commands/plans_command/export_command.rb
229
222
  - lib/3scale_toolbox/commands/plans_command/import/create_or_update_app_plan_step.rb
223
+ - lib/3scale_toolbox/commands/plans_command/import/import_backend_metrics_step.rb
230
224
  - lib/3scale_toolbox/commands/plans_command/import/import_plan_features_step.rb
231
225
  - lib/3scale_toolbox/commands/plans_command/import/import_plan_limits_step.rb
232
226
  - lib/3scale_toolbox/commands/plans_command/import/import_plan_metrics_step.rb
233
227
  - lib/3scale_toolbox/commands/plans_command/import/import_plan_pricing_rules_step.rb
234
228
  - lib/3scale_toolbox/commands/plans_command/import/step.rb
229
+ - lib/3scale_toolbox/commands/plans_command/import/validate_plan_step.rb
235
230
  - lib/3scale_toolbox/commands/plans_command/import_command.rb
236
231
  - lib/3scale_toolbox/commands/plans_command/list_command.rb
237
232
  - lib/3scale_toolbox/commands/plans_command/show_command.rb
@@ -343,7 +338,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
343
338
  requirements:
344
339
  - - ">="
345
340
  - !ruby/object:Gem::Version
346
- version: '2.5'
341
+ version: '2.6'
347
342
  required_rubygems_version: !ruby/object:Gem::Requirement
348
343
  requirements:
349
344
  - - ">="
@@ -1,16 +0,0 @@
1
- module ThreeScaleToolbox
2
- module Commands
3
- module PlansCommand
4
- module Export
5
- class ReadAppPlanStep
6
- include Step
7
- ##
8
- # Reads Application plan
9
- def call
10
- result[:plan] = plan.attrs
11
- end
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,16 +0,0 @@
1
- module ThreeScaleToolbox
2
- module Commands
3
- module PlansCommand
4
- module Export
5
- class ReadPlanFeaturesStep
6
- include Step
7
- ##
8
- # Reads Application Plan features
9
- def call
10
- result[:plan_features] = plan.features
11
- end
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,19 +0,0 @@
1
- module ThreeScaleToolbox
2
- module Commands
3
- module PlansCommand
4
- module Export
5
- class ReadPlanLimitsStep
6
- include Step
7
- ##
8
- # Reads Application Plan limits
9
- # add metric system_name out of metric_id
10
- def call
11
- result[:limits] = plan.limits.map do |limit|
12
- limit.attrs.merge('metric' => metric_info(limit, 'Limit'))
13
- end
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,47 +0,0 @@
1
- module ThreeScaleToolbox
2
- module Commands
3
- module PlansCommand
4
- module Export
5
- class ReadPlanMethods
6
- include Step
7
- ##
8
- # Compute unique list of methods from limits and pricingrules
9
- def call
10
- methods = [
11
- limit_methods,
12
- pricingrule_methods
13
- ]
14
- result[:plan_methods] = methods.each_with_object({}) { |elem, acc| acc.merge!(elem) }
15
- end
16
-
17
- private
18
-
19
- def limit_methods
20
- # multiple limits can reference the same method
21
- filtered_limit_methods.each_with_object({}) do |elem, acc|
22
- # find_method should not return nil.
23
- # It is assumed that metric_id refers to existing element from previous steps
24
- acc[elem['metric_id']] = find_method(elem['metric_id']).attrs
25
- end
26
- end
27
-
28
- def filtered_limit_methods
29
- result[:limits].select { |limit| limit.dig('metric', 'type') == 'method' }
30
- end
31
-
32
- def pricingrule_methods
33
- filtered_pricing_rule_methods.each_with_object({}) do |elem, acc|
34
- # find_method should not return nil.
35
- # It is assumed that metric_id refers to existing element from previous steps
36
- acc[elem['metric_id']] = find_method(elem['metric_id']).attrs
37
- end
38
- end
39
-
40
- def filtered_pricing_rule_methods
41
- result[:pricingrules].select { |limit| limit.dig('metric', 'type') == 'method' }
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,47 +0,0 @@
1
- module ThreeScaleToolbox
2
- module Commands
3
- module PlansCommand
4
- module Export
5
- class ReadPlanMetrics
6
- include Step
7
- ##
8
- # Compute unique list of metrics limits and pricingrules
9
- def call
10
- all_metrics = [
11
- limit_metrics,
12
- pricingrule_metrics
13
- ]
14
- result[:plan_metrics] = all_metrics.each_with_object({}) { |elem, acc| acc.merge!(elem) }
15
- end
16
-
17
- private
18
-
19
- def limit_metrics
20
- # multiple limits can reference the same metric
21
- filtered_limit_metrics.each_with_object({}) do |elem, acc|
22
- # find_metric should not return nil.
23
- # It is assumed that metric_id refers to existing element from previous steps
24
- acc[elem['metric_id']] = find_metric(elem['metric_id']).attrs
25
- end
26
- end
27
-
28
- def filtered_limit_metrics
29
- result[:limits].select { |limit| limit.dig('metric', 'type') == 'metric' }
30
- end
31
-
32
- def pricingrule_metrics
33
- filtered_pricing_rule_metrics.each_with_object({}) do |elem, acc|
34
- # find_metric should not return nil.
35
- # It is assumed that metric_id refers to existing element from previous steps
36
- acc[elem['metric_id']] = find_metric(elem['metric_id']).attrs
37
- end
38
- end
39
-
40
- def filtered_pricing_rule_metrics
41
- result[:pricingrules].select { |limit| limit.dig('metric', 'type') == 'metric' }
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,19 +0,0 @@
1
- module ThreeScaleToolbox
2
- module Commands
3
- module PlansCommand
4
- module Export
5
- class ReadPlanPricingRulesStep
6
- include Step
7
- ##
8
- # Reads Application Plan pricing rules
9
- # add metric system_name out of metric_id
10
- def call
11
- result[:pricingrules] = plan.pricing_rules.map do |pr|
12
- pr.attrs.merge('metric' => metric_info(pr, 'PricingRule'), 'cost_per_unit' => pr.cost_per_unit.to_f)
13
- end
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,85 +0,0 @@
1
- module ThreeScaleToolbox
2
- module Commands
3
- module PlansCommand
4
- module Export
5
- APP_PLANS_BLACKLIST = %w[id links default custom created_at updated_at].freeze
6
- LIMITS_BLACKLIST = %w[id metric_id links created_at updated_at].freeze
7
- PRICINGRULES_BLACKLIST = %w[id metric_id links created_at updated_at].freeze
8
- PLAN_FEATURE_BLACKLIST = %w[id links created_at updated_at].freeze
9
- METRIC_BLACKLIST = %w[id links created_at updated_at].freeze
10
-
11
- module Step
12
- attr_reader :context
13
-
14
- def initialize(context)
15
- @context = context
16
- end
17
-
18
- def service
19
- context[:service] ||= find_service
20
- end
21
-
22
- def file
23
- context[:file]
24
- end
25
-
26
- def threescale_client
27
- context[:threescale_client]
28
- end
29
-
30
- # can be id or system_name
31
- def service_system_name
32
- context[:service_system_name]
33
- end
34
-
35
- # can be id or system_name
36
- def plan_system_name
37
- context[:plan_system_name]
38
- end
39
-
40
- def result
41
- context[:result] ||= {}
42
- end
43
-
44
- def plan
45
- context[:plan] ||= find_plan
46
- end
47
-
48
- def metric_info(elem, elem_name)
49
- if (method = find_method(elem.metric_id))
50
- { 'type' => 'method', 'system_name' => method.system_name }
51
- elsif (metric = find_metric(elem.metric_id))
52
- { 'type' => 'metric', 'system_name' => metric.system_name }
53
- else
54
- raise ThreeScaleToolbox::Error, "Unexpected error. #{elem_name} #{elem.id} " \
55
- "referencing to metric id #{elem.metric_id} which has not been found"
56
- end
57
- end
58
-
59
- private
60
-
61
- def find_service
62
- Entities::Service.find(remote: threescale_client,
63
- ref: service_system_name).tap do |svc|
64
- raise ThreeScaleToolbox::Error, "Service #{service_system_name} does not exist" if svc.nil?
65
- end
66
- end
67
-
68
- def find_plan
69
- Entities::ApplicationPlan.find(service: service, ref: plan_system_name).tap do |p|
70
- raise ThreeScaleToolbox::Error, "Application plan #{plan_system_name} does not exist" if p.nil?
71
- end
72
- end
73
-
74
- def find_metric(id)
75
- service.metrics.find { |metric| metric.id == id }
76
- end
77
-
78
- def find_method(id)
79
- service.methods.find { |method| method.id == id }
80
- end
81
- end
82
- end
83
- end
84
- end
85
- end
@@ -1,84 +0,0 @@
1
- module ThreeScaleToolbox
2
- module Commands
3
- module PlansCommand
4
- module Export
5
- class WriteArtifactsStep
6
- include Step
7
- ##
8
- # Serialization of Application Plan objects
9
- def call
10
- select_output do |output|
11
- output.write(serialized_object.to_yaml)
12
- end
13
- end
14
-
15
- private
16
-
17
- def select_output
18
- ios = if file
19
- File.open(file, 'w')
20
- else
21
- $stdout
22
- end
23
- begin
24
- yield(ios)
25
- ensure
26
- ios.close
27
- end
28
- end
29
-
30
- def serialized_object
31
- {
32
- 'plan' => serialized_plan,
33
- 'limits' => serialized_limits,
34
- 'pricingrules' => serialized_pricing_rules,
35
- 'plan_features' => serialized_plan_features,
36
- 'metrics' => serialized_metrics,
37
- 'methods' => serialized_methods,
38
- 'created_at' => Time.now.utc.iso8601,
39
- 'toolbox_version' => ThreeScaleToolbox::VERSION
40
- }
41
- end
42
-
43
- def serialized_plan
44
- result[:plan].reject { |key, _| APP_PLANS_BLACKLIST.include? key }
45
- end
46
-
47
- def serialized_limits
48
- result[:limits].map do |limit|
49
- metric = limit.delete('metric')
50
- limit['metric_system_name'] = metric['system_name']
51
- limit.reject { |key, _| LIMITS_BLACKLIST.include? key }
52
- end
53
- end
54
-
55
- def serialized_pricing_rules
56
- result[:pricingrules].map do |pr|
57
- metric = pr.delete('metric')
58
- pr['metric_system_name'] = metric['system_name']
59
- pr.reject { |key, _| PRICINGRULES_BLACKLIST.include? key }
60
- end
61
- end
62
-
63
- def serialized_plan_features
64
- result[:plan_features].map do |pr|
65
- pr.reject { |key, _| PLAN_FEATURE_BLACKLIST.include? key }
66
- end
67
- end
68
-
69
- def serialized_metrics
70
- result[:plan_metrics].values.map do |metric|
71
- metric.reject { |key, _| METRIC_BLACKLIST.include? key }
72
- end
73
- end
74
-
75
- def serialized_methods
76
- result[:plan_methods].values.map do |method|
77
- method.reject { |key, _| METRIC_BLACKLIST.include? key }
78
- end
79
- end
80
- end
81
- end
82
- end
83
- end
84
- end