3scale_toolbox 0.16.0 → 0.18.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/3scale_toolbox.gemspec +2 -2
- data/README.md +11 -8
- data/lib/3scale_toolbox.rb +3 -0
- data/lib/3scale_toolbox/3scale_client_factory.rb +3 -4
- data/lib/3scale_toolbox/cli/error_handler.rb +17 -14
- data/lib/3scale_toolbox/commands.rb +2 -0
- data/lib/3scale_toolbox/commands/backend_command/copy_command/copy_mapping_rules_task.rb +11 -27
- data/lib/3scale_toolbox/commands/backend_command/copy_command/copy_methods_task.rb +5 -10
- data/lib/3scale_toolbox/commands/backend_command/copy_command/copy_metrics_task.rb +4 -4
- data/lib/3scale_toolbox/commands/backend_command/copy_command/create_or_update_target_backend_task.rb +3 -2
- data/lib/3scale_toolbox/commands/backend_command/copy_command/task.rb +10 -32
- data/lib/3scale_toolbox/commands/import_command/issuer_type_transformer.rb +16 -0
- data/lib/3scale_toolbox/commands/import_command/openapi.rb +3 -0
- data/lib/3scale_toolbox/commands/import_command/openapi/create_activedocs_step.rb +3 -2
- data/lib/3scale_toolbox/commands/import_command/openapi/create_mapping_rule_step.rb +2 -1
- data/lib/3scale_toolbox/commands/import_command/openapi/create_method_step.rb +5 -14
- data/lib/3scale_toolbox/commands/import_command/openapi/step.rb +4 -0
- data/lib/3scale_toolbox/commands/import_command/openapi/update_service_proxy_step.rb +1 -0
- data/lib/3scale_toolbox/commands/methods_command/apply_command.rb +2 -4
- data/lib/3scale_toolbox/commands/methods_command/create_command.rb +0 -2
- data/lib/3scale_toolbox/commands/methods_command/delete_command.rb +1 -1
- data/lib/3scale_toolbox/commands/methods_command/list_command.rb +1 -9
- data/lib/3scale_toolbox/commands/metrics_command/list_command.rb +1 -1
- data/lib/3scale_toolbox/commands/plans_command/export/read_plan_limits_step.rb +1 -1
- data/lib/3scale_toolbox/commands/plans_command/export/read_plan_methods_step.rb +2 -2
- data/lib/3scale_toolbox/commands/plans_command/export/read_plan_metrics_step.rb +2 -2
- data/lib/3scale_toolbox/commands/plans_command/export/read_plan_pricing_rules_step.rb +1 -2
- data/lib/3scale_toolbox/commands/plans_command/export/step.rb +8 -20
- data/lib/3scale_toolbox/commands/plans_command/import/import_plan_limits_step.rb +12 -14
- data/lib/3scale_toolbox/commands/plans_command/import/import_plan_metrics_step.rb +6 -13
- data/lib/3scale_toolbox/commands/plans_command/import/import_plan_pricing_rules_step.rb +12 -20
- data/lib/3scale_toolbox/commands/plans_command/import/step.rb +2 -22
- data/lib/3scale_toolbox/commands/plans_command/list_command.rb +1 -1
- data/lib/3scale_toolbox/commands/plans_command/show_command.rb +1 -1
- data/lib/3scale_toolbox/commands/policies_command.rb +24 -0
- data/lib/3scale_toolbox/commands/policies_command/export_command.rb +98 -0
- data/lib/3scale_toolbox/commands/policies_command/import_command.rb +61 -0
- data/lib/3scale_toolbox/commands/product_command.rb +4 -0
- data/lib/3scale_toolbox/commands/product_command/copy_command.rb +7 -3
- data/lib/3scale_toolbox/commands/product_command/copy_command/copy_backends_task.rb +22 -5
- data/lib/3scale_toolbox/commands/product_command/export_command.rb +81 -0
- data/lib/3scale_toolbox/commands/product_command/import_command.rb +125 -0
- data/lib/3scale_toolbox/commands/proxy_config_command.rb +5 -0
- data/lib/3scale_toolbox/commands/proxy_config_command/deploy_command.rb +54 -0
- data/lib/3scale_toolbox/commands/proxy_config_command/export_command.rb +74 -0
- data/lib/3scale_toolbox/commands/proxy_config_command/helper.rb +15 -0
- data/lib/3scale_toolbox/commands/service_command/copy_command/copy_activedocs_task.rb +15 -12
- data/lib/3scale_toolbox/commands/service_command/copy_command/copy_app_plans_task.rb +15 -15
- data/lib/3scale_toolbox/commands/service_command/copy_command/copy_limits_task.rb +12 -13
- data/lib/3scale_toolbox/commands/service_command/copy_command/copy_mapping_rules_task.rb +11 -11
- data/lib/3scale_toolbox/commands/service_command/copy_command/copy_methods_task.rb +9 -12
- data/lib/3scale_toolbox/commands/service_command/copy_command/copy_metrics_task.rb +8 -8
- data/lib/3scale_toolbox/commands/service_command/copy_command/copy_policies_task.rb +1 -1
- data/lib/3scale_toolbox/commands/service_command/copy_command/copy_pricingrules_task.rb +15 -18
- data/lib/3scale_toolbox/commands/service_command/copy_command/copy_service_proxy_task.rb +17 -2
- data/lib/3scale_toolbox/commands/service_command/copy_command/create_or_update_service_task.rb +2 -1
- data/lib/3scale_toolbox/commands/service_command/copy_command/destroy_mapping_rules_task.rb +9 -5
- data/lib/3scale_toolbox/commands/service_command/copy_command/task.rb +20 -34
- data/lib/3scale_toolbox/commands/update_command.rb +1 -1
- data/lib/3scale_toolbox/commands/update_command/service_command.rb +3 -2
- data/lib/3scale_toolbox/commands/update_command/service_command/delete_activedocs_task.rb +1 -3
- data/lib/3scale_toolbox/crds.rb +16 -0
- data/lib/3scale_toolbox/crds/application_plan_dump.rb +19 -0
- data/lib/3scale_toolbox/crds/backend_dump.rb +39 -0
- data/lib/3scale_toolbox/crds/backend_mapping_rule_dump.rb +26 -0
- data/lib/3scale_toolbox/crds/backend_method_dump.rb +12 -0
- data/lib/3scale_toolbox/crds/backend_metric_dump.rb +13 -0
- data/lib/3scale_toolbox/crds/backend_parser.rb +55 -0
- data/lib/3scale_toolbox/crds/backend_usage_dump.rb +11 -0
- data/lib/3scale_toolbox/crds/limit_dump.rb +37 -0
- data/lib/3scale_toolbox/crds/mapping_rule_dump.rb +26 -0
- data/lib/3scale_toolbox/crds/method_dump.rb +12 -0
- data/lib/3scale_toolbox/crds/metric_dump.rb +13 -0
- data/lib/3scale_toolbox/crds/pricing_rule_dump.rb +38 -0
- data/lib/3scale_toolbox/crds/product_deployment_parser.rb +329 -0
- data/lib/3scale_toolbox/crds/product_dump.rb +157 -0
- data/lib/3scale_toolbox/crds/product_parser.rb +114 -0
- data/lib/3scale_toolbox/crds/remote.rb +682 -0
- data/lib/3scale_toolbox/entities.rb +3 -0
- data/lib/3scale_toolbox/entities/activedocs.rb +12 -0
- data/lib/3scale_toolbox/entities/application_plan.rb +74 -39
- data/lib/3scale_toolbox/entities/backend.rb +65 -30
- data/lib/3scale_toolbox/entities/backend_mapping_rule.rb +29 -3
- data/lib/3scale_toolbox/entities/backend_method.rb +25 -16
- data/lib/3scale_toolbox/entities/backend_metric.rb +12 -2
- data/lib/3scale_toolbox/entities/backend_usage.rb +7 -1
- data/lib/3scale_toolbox/entities/limit.rb +71 -0
- data/lib/3scale_toolbox/entities/mapping_rule.rb +90 -0
- data/lib/3scale_toolbox/entities/method.rb +33 -19
- data/lib/3scale_toolbox/entities/metric.rb +29 -18
- data/lib/3scale_toolbox/entities/pricing_rule.rb +63 -0
- data/lib/3scale_toolbox/entities/proxy_config.rb +0 -1
- data/lib/3scale_toolbox/entities/service.rb +149 -46
- data/lib/3scale_toolbox/error.rb +50 -0
- data/lib/3scale_toolbox/helper.rb +13 -16
- data/lib/3scale_toolbox/openapi/oas3.rb +1 -1
- data/lib/3scale_toolbox/proxy_logger.rb +4 -0
- data/lib/3scale_toolbox/remote_cache.rb +157 -0
- data/lib/3scale_toolbox/remotes.rb +2 -2
- data/lib/3scale_toolbox/version.rb +1 -1
- data/licenses.xml +113 -45
- metadata +37 -8
@@ -6,9 +6,24 @@ module ThreeScaleToolbox
|
|
6
6
|
include Task
|
7
7
|
|
8
8
|
def call
|
9
|
-
target.update_proxy
|
9
|
+
target.update_proxy target_proxy_attrs
|
10
10
|
target.update_oidc source.oidc if source.attrs['backend_version'] == 'oidc'
|
11
|
-
|
11
|
+
logger.info "updated proxy of #{target.id} to match the original"
|
12
|
+
end
|
13
|
+
|
14
|
+
def target_proxy_attrs
|
15
|
+
if source.attrs['deployment_option'] == 'hosted'
|
16
|
+
# For services with "hosted" deployment config,
|
17
|
+
# "Public Base URL" should not be copied, mainly because public base URL is self-assigned.
|
18
|
+
# Two 3scale products (aka services) cannot be served using the same public base URL.
|
19
|
+
source_proxy.dup.delete_if { |key, _v| %w[endpoint sandbox_endpoint].include? key }
|
20
|
+
else
|
21
|
+
source_proxy
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def source_proxy
|
26
|
+
@source_proxy ||= source.proxy
|
12
27
|
end
|
13
28
|
end
|
14
29
|
end
|
data/lib/3scale_toolbox/commands/service_command/copy_command/create_or_update_service_task.rb
CHANGED
@@ -25,7 +25,8 @@ module ThreeScaleToolbox
|
|
25
25
|
# assign target service for other tasks to have it available
|
26
26
|
self.target = service
|
27
27
|
|
28
|
-
|
28
|
+
logger.info "new service id #{service.id}"
|
29
|
+
report['product_id'] = service.id
|
29
30
|
end
|
30
31
|
|
31
32
|
private
|
@@ -12,10 +12,8 @@ module ThreeScaleToolbox
|
|
12
12
|
def call
|
13
13
|
return unless delete_mapping_rules
|
14
14
|
|
15
|
-
|
16
|
-
target.mapping_rules.each
|
17
|
-
target.delete_mapping_rule mapping_rule['id']
|
18
|
-
end
|
15
|
+
logger.info 'destroying all mapping rules'
|
16
|
+
target.mapping_rules.each(&:delete)
|
19
17
|
end
|
20
18
|
|
21
19
|
private
|
@@ -25,7 +23,13 @@ module ThreeScaleToolbox
|
|
25
23
|
end
|
26
24
|
|
27
25
|
def target
|
28
|
-
context
|
26
|
+
context.fetch(:target)
|
27
|
+
end
|
28
|
+
|
29
|
+
def logger
|
30
|
+
context[:logger] ||= Logger.new($stdout).tap do |logger|
|
31
|
+
logger.formatter = proc { |severity, datetime, progname, msg| "#{msg}\n" }
|
32
|
+
end
|
29
33
|
end
|
30
34
|
end
|
31
35
|
end
|
@@ -36,44 +36,12 @@ module ThreeScaleToolbox
|
|
36
36
|
context[:delete_mapping_rules] = true
|
37
37
|
end
|
38
38
|
|
39
|
-
def source_metrics
|
40
|
-
context[:source_metrics] ||= source.metrics
|
41
|
-
end
|
42
|
-
|
43
|
-
def source_hits
|
44
|
-
context[:source_hits] ||= source.hits
|
45
|
-
end
|
46
|
-
|
47
|
-
def source_methods
|
48
|
-
context[:source_methods] ||= source.methods(source_hits.fetch('id'))
|
49
|
-
end
|
50
|
-
|
51
39
|
def source_metrics_and_methods
|
52
|
-
|
53
|
-
end
|
54
|
-
|
55
|
-
def target_metrics
|
56
|
-
context[:target_metrics] ||= target.metrics
|
57
|
-
end
|
58
|
-
|
59
|
-
def target_hits
|
60
|
-
context[:target_hits] ||= target.hits
|
61
|
-
end
|
62
|
-
|
63
|
-
def target_methods
|
64
|
-
context[:target_methods] ||= target.methods(target_hits.fetch('id'))
|
40
|
+
source.metrics + source.methods
|
65
41
|
end
|
66
42
|
|
67
43
|
def target_metrics_and_methods
|
68
|
-
|
69
|
-
end
|
70
|
-
|
71
|
-
def invalidate_target_methods
|
72
|
-
context[:target_methods] = nil
|
73
|
-
end
|
74
|
-
|
75
|
-
def invalidate_target_metrics
|
76
|
-
context[:target_metrics] = nil
|
44
|
+
target.metrics + target.methods
|
77
45
|
end
|
78
46
|
|
79
47
|
def source_remote
|
@@ -92,6 +60,24 @@ module ThreeScaleToolbox
|
|
92
60
|
def option_target_system_name
|
93
61
|
context[:option_target_system_name]
|
94
62
|
end
|
63
|
+
|
64
|
+
def logger
|
65
|
+
context[:logger] ||= Logger.new($stdout).tap do |logger|
|
66
|
+
logger.formatter = proc { |severity, datetime, progname, msg| "#{msg}\n" }
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def plans_report
|
71
|
+
report['application_plans'] ||= {}
|
72
|
+
end
|
73
|
+
|
74
|
+
def activedocs_report
|
75
|
+
report['activedocs'] ||= {}
|
76
|
+
end
|
77
|
+
|
78
|
+
def report
|
79
|
+
context[:report] ||= {}
|
80
|
+
end
|
95
81
|
end
|
96
82
|
end
|
97
83
|
end
|
@@ -8,7 +8,7 @@ module ThreeScaleToolbox
|
|
8
8
|
Cri::Command.define do
|
9
9
|
name 'update'
|
10
10
|
usage 'update <sub-command> [options]'
|
11
|
-
summary '[
|
11
|
+
summary '[DEPRECATED] update super command'
|
12
12
|
description 'Update 3scale entities between tenants'
|
13
13
|
|
14
14
|
run do |_opts, _args, cmd|
|
@@ -11,9 +11,9 @@ module ThreeScaleToolbox
|
|
11
11
|
Cri::Command.define do
|
12
12
|
name 'service'
|
13
13
|
usage 'service [opts] -s <src> -d <dst> <src_service_id> <dst_service_id>'
|
14
|
-
summary '[
|
14
|
+
summary '[DEPRECATED] update service'
|
15
15
|
description <<-HEREDOC
|
16
|
-
This command has been deprecated. Use '3scale copy
|
16
|
+
This command has been deprecated. Use '3scale service copy' instead.
|
17
17
|
\n Update existing service, update proxy settings, metrics, methods, application plans and mapping rules.'
|
18
18
|
HEREDOC
|
19
19
|
|
@@ -30,6 +30,7 @@ module ThreeScaleToolbox
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def run
|
33
|
+
warn "\e[1m\e[31mThis command has been deprecated. Use '3scale service copy' instead\e[0m"
|
33
34
|
source_service = Entities::Service.new(
|
34
35
|
id: arguments[:src_service_id],
|
35
36
|
remote: threescale_client(fetch_required_option(:source))
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require '3scale_toolbox/crds/application_plan_dump'
|
2
|
+
require '3scale_toolbox/crds/backend_method_dump'
|
3
|
+
require '3scale_toolbox/crds/backend_mapping_rule_dump'
|
4
|
+
require '3scale_toolbox/crds/backend_metric_dump'
|
5
|
+
require '3scale_toolbox/crds/backend_dump'
|
6
|
+
require '3scale_toolbox/crds/backend_usage_dump'
|
7
|
+
require '3scale_toolbox/crds/limit_dump'
|
8
|
+
require '3scale_toolbox/crds/mapping_rule_dump'
|
9
|
+
require '3scale_toolbox/crds/method_dump'
|
10
|
+
require '3scale_toolbox/crds/metric_dump'
|
11
|
+
require '3scale_toolbox/crds/pricing_rule_dump'
|
12
|
+
require '3scale_toolbox/crds/product_dump'
|
13
|
+
require '3scale_toolbox/crds/product_deployment_parser'
|
14
|
+
require '3scale_toolbox/crds/backend_parser'
|
15
|
+
require '3scale_toolbox/crds/product_parser'
|
16
|
+
require '3scale_toolbox/crds/remote'
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module ThreeScaleToolbox
|
2
|
+
module CRD
|
3
|
+
module ApplicationPlanSerializer
|
4
|
+
def to_cr
|
5
|
+
{
|
6
|
+
'name' => name,
|
7
|
+
'appsRequireApproval' => approval_required?,
|
8
|
+
'trialPeriod' => trial_period_days,
|
9
|
+
'setupFee' => setup_fee,
|
10
|
+
'custom' => custom,
|
11
|
+
'state' => state,
|
12
|
+
'costMonth' => cost_per_month,
|
13
|
+
'pricingRules' => pricing_rules.map(&:to_cr),
|
14
|
+
'limits' => limits.map(&:to_cr)
|
15
|
+
}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module ThreeScaleToolbox
|
2
|
+
module CRD
|
3
|
+
module BackendSerializer
|
4
|
+
def to_cr
|
5
|
+
{
|
6
|
+
'apiVersion' => 'capabilities.3scale.net/v1beta1',
|
7
|
+
'kind' => 'Backend',
|
8
|
+
'metadata' => {
|
9
|
+
'annotations' => {
|
10
|
+
'3scale_toolbox_created_at' => Time.now.utc.iso8601,
|
11
|
+
'3scale_toolbox_version' => ThreeScaleToolbox::VERSION
|
12
|
+
},
|
13
|
+
'name' => cr_name
|
14
|
+
},
|
15
|
+
'spec' => {
|
16
|
+
'name' => name,
|
17
|
+
'systemName' => system_name,
|
18
|
+
'privateBaseURL' => private_endpoint,
|
19
|
+
'description' => description,
|
20
|
+
'mappingRules' => mapping_rules.map(&:to_cr),
|
21
|
+
'metrics' => metrics.each_with_object({}) do |metric, hash|
|
22
|
+
hash[metric.system_name] = metric.to_cr
|
23
|
+
end,
|
24
|
+
'methods' => methods.each_with_object({}) do |method, hash|
|
25
|
+
hash[method.system_name] = method.to_cr
|
26
|
+
end
|
27
|
+
}
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def cr_name
|
32
|
+
# Should be DNS1123 subdomain name
|
33
|
+
# TODO run validation for DNS1123
|
34
|
+
# https://kubernetes.io/docs/concepts/overview/working-with-objects/names/
|
35
|
+
"#{system_name.gsub(/[^[a-zA-Z0-9\-\.]]/, '.')}.#{Helper.random_lowercase_name}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module ThreeScaleToolbox
|
2
|
+
module CRD
|
3
|
+
module BackendMappingRuleSerializer
|
4
|
+
def to_cr
|
5
|
+
{
|
6
|
+
'httpMethod' => http_method,
|
7
|
+
'pattern' => pattern,
|
8
|
+
'metricMethodRef' => metric_method_ref,
|
9
|
+
'increment' => delta,
|
10
|
+
'last' => last,
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
def metric_method_ref
|
15
|
+
if (method = backend.methods.find { |m| m.id == metric_id })
|
16
|
+
method.system_name
|
17
|
+
elsif (metric = backend.metrics.find { |m| m.id == metric_id })
|
18
|
+
metric.system_name
|
19
|
+
else
|
20
|
+
raise ThreeScaleToolbox::Error, "Unexpected error. Backend #{backend.system_name} " \
|
21
|
+
"mapping rule #{id} referencing to metric id #{metric_id} which has not been found"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module ThreeScaleToolbox
|
2
|
+
module CRD
|
3
|
+
class BackendParser
|
4
|
+
Metric = Struct.new(:system_name, :friendly_name, :description, :unit)
|
5
|
+
Method = Struct.new(:system_name, :friendly_name, :description)
|
6
|
+
MappingRule = Struct.new(:metric_ref, :http_method, :pattern, :delta, :last)
|
7
|
+
|
8
|
+
attr_reader :cr
|
9
|
+
|
10
|
+
def initialize(cr)
|
11
|
+
@cr = cr
|
12
|
+
end
|
13
|
+
|
14
|
+
def system_name
|
15
|
+
cr.dig('spec', 'systemName')
|
16
|
+
end
|
17
|
+
|
18
|
+
def name
|
19
|
+
cr.dig('spec', 'name')
|
20
|
+
end
|
21
|
+
|
22
|
+
def description
|
23
|
+
cr.dig('spec', 'description')
|
24
|
+
end
|
25
|
+
|
26
|
+
def private_endpoint
|
27
|
+
cr.dig('spec', 'privateBaseURL')
|
28
|
+
end
|
29
|
+
|
30
|
+
def metrics
|
31
|
+
@metrics ||= (cr.dig('spec', 'metrics') || {}).map do |system_name, metric|
|
32
|
+
Metric.new(system_name, metric['friendlyName'], metric['description'], metric['unit'])
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def methods
|
37
|
+
@methods ||= (cr.dig('spec', 'methods') || {}).map do |system_name, method|
|
38
|
+
Method.new(system_name, method['friendlyName'], method['description'])
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def mapping_rules
|
43
|
+
@mapping_rules ||= (cr.dig('spec', 'mappingRules') || []).map do |mapping_rule|
|
44
|
+
MappingRule.new(mapping_rule['metricMethodRef'], mapping_rule['httpMethod'],
|
45
|
+
mapping_rule['pattern'], mapping_rule['increment'], mapping_rule['last'])
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Metrics and methods index by system_name
|
50
|
+
def metrics_index
|
51
|
+
@metrics_index ||= (methods + metrics).each_with_object({}) { |metric, h| h[metric.system_name] = metric }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module ThreeScaleToolbox
|
2
|
+
module CRD
|
3
|
+
module Limit
|
4
|
+
def to_cr
|
5
|
+
{
|
6
|
+
'period' => period,
|
7
|
+
'value' => value,
|
8
|
+
'metricMethodRef' => metric_system_name,
|
9
|
+
}
|
10
|
+
end
|
11
|
+
|
12
|
+
def metric_system_name
|
13
|
+
# Find in service methods
|
14
|
+
# Find in service metrics
|
15
|
+
# Find in backend methods
|
16
|
+
# Find in backend metrics
|
17
|
+
if (method = plan.service.methods.find { |m| m.id == metric_id })
|
18
|
+
{ 'systemName' => method.system_name }
|
19
|
+
elsif (metric = plan.service.metrics.find { |m| m.id == metric_id })
|
20
|
+
{ 'systemName' => metric.system_name }
|
21
|
+
elsif (backend = backend_from_metric)
|
22
|
+
if (backend_metric = backend.metrics.find { |m| m.id == metric_id })
|
23
|
+
{ 'systemName' => backend_metric.system_name, 'backend' => backend.system_name }
|
24
|
+
elsif (backend_method = backend.methods.find { |m| m.id == metric_id })
|
25
|
+
{ 'systemName' => backend_method.system_name, 'backend' => backend.system_name }
|
26
|
+
else
|
27
|
+
raise ThreeScaleToolbox::Error, "Unexpected error. Limit #{id} " \
|
28
|
+
"referencing to metric id #{metric_id} which has not been found"
|
29
|
+
end
|
30
|
+
else
|
31
|
+
raise ThreeScaleToolbox::Error, "Unexpected error. Limit #{id} " \
|
32
|
+
"referencing to metric id #{metric_id} which has not been found"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module ThreeScaleToolbox
|
2
|
+
module CRD
|
3
|
+
module MappingRuleSerializer
|
4
|
+
def to_cr
|
5
|
+
{
|
6
|
+
'httpMethod' => http_method,
|
7
|
+
'pattern' => pattern,
|
8
|
+
'metricMethodRef' => metric_method_ref,
|
9
|
+
'increment' => delta,
|
10
|
+
'last' => last,
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
def metric_method_ref
|
15
|
+
if (method = service.methods.find { |m| m.id == metric_id })
|
16
|
+
method.system_name
|
17
|
+
elsif (metric = service.metrics.find { |m| m.id == metric_id })
|
18
|
+
metric.system_name
|
19
|
+
else
|
20
|
+
raise ThreeScaleToolbox::Error, "Unexpected error. Service #{service.system_name} " \
|
21
|
+
"mapping rule #{id} referencing to metric id #{metric_id} which has not been found"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|