3scale_toolbox 0.15.0 → 0.18.2

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 (151) hide show
  1. checksums.yaml +4 -4
  2. data/3scale_toolbox.gemspec +2 -2
  3. data/README.md +15 -9
  4. data/lib/3scale_toolbox.rb +3 -1
  5. data/lib/3scale_toolbox/3scale_client_factory.rb +3 -4
  6. data/lib/3scale_toolbox/cli.rb +4 -0
  7. data/lib/3scale_toolbox/cli/custom_table_printer.rb +32 -0
  8. data/lib/3scale_toolbox/cli/error_handler.rb +17 -14
  9. data/lib/3scale_toolbox/cli/json_printer.rb +13 -0
  10. data/lib/3scale_toolbox/cli/output_flag.rb +20 -0
  11. data/lib/3scale_toolbox/cli/yaml_printer.rb +13 -0
  12. data/lib/3scale_toolbox/commands.rb +7 -1
  13. data/lib/3scale_toolbox/commands/activedocs_command/apply_command.rb +33 -10
  14. data/lib/3scale_toolbox/commands/activedocs_command/create_command.rb +22 -7
  15. data/lib/3scale_toolbox/commands/activedocs_command/list_command.rb +10 -17
  16. data/lib/3scale_toolbox/commands/application_command/apply_command.rb +27 -4
  17. data/lib/3scale_toolbox/commands/application_command/create_command.rb +16 -1
  18. data/lib/3scale_toolbox/commands/application_command/list_command.rb +10 -13
  19. data/lib/3scale_toolbox/commands/application_command/show_command.rb +8 -14
  20. data/lib/3scale_toolbox/commands/backend_command.rb +22 -0
  21. data/lib/3scale_toolbox/commands/backend_command/copy_command.rb +65 -0
  22. data/lib/3scale_toolbox/commands/backend_command/copy_command/copy_mapping_rules_task.rb +36 -0
  23. data/lib/3scale_toolbox/commands/backend_command/copy_command/copy_methods_task.rb +35 -0
  24. data/lib/3scale_toolbox/commands/backend_command/copy_command/copy_metrics_task.rb +30 -0
  25. data/lib/3scale_toolbox/commands/backend_command/copy_command/create_or_update_target_backend_task.rb +46 -0
  26. data/lib/3scale_toolbox/commands/backend_command/copy_command/task.rb +67 -0
  27. data/lib/3scale_toolbox/commands/copy_command.rb +2 -2
  28. data/lib/3scale_toolbox/commands/copy_command/service_command.rb +40 -0
  29. data/lib/3scale_toolbox/commands/import_command/issuer_type_transformer.rb +16 -0
  30. data/lib/3scale_toolbox/commands/import_command/openapi.rb +6 -2
  31. data/lib/3scale_toolbox/commands/import_command/openapi/create_mapping_rule_step.rb +2 -1
  32. data/lib/3scale_toolbox/commands/import_command/openapi/create_method_step.rb +5 -14
  33. data/lib/3scale_toolbox/commands/import_command/openapi/step.rb +4 -0
  34. data/lib/3scale_toolbox/commands/import_command/openapi/update_service_proxy_step.rb +1 -0
  35. data/lib/3scale_toolbox/commands/methods_command/apply_command.rb +28 -8
  36. data/lib/3scale_toolbox/commands/methods_command/create_command.rb +23 -3
  37. data/lib/3scale_toolbox/commands/methods_command/delete_command.rb +1 -1
  38. data/lib/3scale_toolbox/commands/methods_command/list_command.rb +7 -13
  39. data/lib/3scale_toolbox/commands/metrics_command/apply_command.rb +26 -4
  40. data/lib/3scale_toolbox/commands/metrics_command/create_command.rb +23 -1
  41. data/lib/3scale_toolbox/commands/metrics_command/list_command.rb +7 -12
  42. data/lib/3scale_toolbox/commands/plans_command/apply_command.rb +36 -7
  43. data/lib/3scale_toolbox/commands/plans_command/create_command.rb +23 -1
  44. data/lib/3scale_toolbox/commands/plans_command/export/read_plan_limits_step.rb +1 -1
  45. data/lib/3scale_toolbox/commands/plans_command/export/read_plan_methods_step.rb +2 -2
  46. data/lib/3scale_toolbox/commands/plans_command/export/read_plan_metrics_step.rb +2 -2
  47. data/lib/3scale_toolbox/commands/plans_command/export/read_plan_pricing_rules_step.rb +1 -2
  48. data/lib/3scale_toolbox/commands/plans_command/export/step.rb +8 -20
  49. data/lib/3scale_toolbox/commands/plans_command/import/import_plan_limits_step.rb +12 -14
  50. data/lib/3scale_toolbox/commands/plans_command/import/import_plan_metrics_step.rb +6 -13
  51. data/lib/3scale_toolbox/commands/plans_command/import/import_plan_pricing_rules_step.rb +12 -20
  52. data/lib/3scale_toolbox/commands/plans_command/import/step.rb +2 -22
  53. data/lib/3scale_toolbox/commands/plans_command/list_command.rb +8 -13
  54. data/lib/3scale_toolbox/commands/plans_command/show_command.rb +7 -15
  55. data/lib/3scale_toolbox/commands/policies_command.rb +24 -0
  56. data/lib/3scale_toolbox/commands/policies_command/export_command.rb +98 -0
  57. data/lib/3scale_toolbox/commands/policies_command/import_command.rb +61 -0
  58. data/lib/3scale_toolbox/commands/product_command.rb +26 -0
  59. data/lib/3scale_toolbox/commands/product_command/copy_command.rb +82 -0
  60. data/lib/3scale_toolbox/commands/product_command/copy_command/copy_backends_task.rb +88 -0
  61. data/lib/3scale_toolbox/commands/product_command/copy_command/delete_target_backend_usages_task.rb +48 -0
  62. data/lib/3scale_toolbox/commands/product_command/export_command.rb +81 -0
  63. data/lib/3scale_toolbox/commands/product_command/import_command.rb +125 -0
  64. data/lib/3scale_toolbox/commands/proxy_config_command.rb +5 -0
  65. data/lib/3scale_toolbox/commands/proxy_config_command/deploy_command.rb +54 -0
  66. data/lib/3scale_toolbox/commands/proxy_config_command/export_command.rb +74 -0
  67. data/lib/3scale_toolbox/commands/proxy_config_command/helper.rb +15 -0
  68. data/lib/3scale_toolbox/commands/proxy_config_command/list_command.rb +13 -29
  69. data/lib/3scale_toolbox/commands/proxy_config_command/show_command.rb +20 -23
  70. data/lib/3scale_toolbox/commands/service_command.rb +7 -5
  71. data/lib/3scale_toolbox/commands/service_command/apply_command.rb +69 -58
  72. data/lib/3scale_toolbox/commands/service_command/copy_command.rb +95 -0
  73. data/lib/3scale_toolbox/commands/service_command/copy_command/bump_proxy_version_task.rb +36 -0
  74. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_activedocs_task.rb +49 -0
  75. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_app_plans_task.rb +35 -0
  76. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_limits_task.rb +38 -0
  77. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_mapping_rules_task.rb +35 -0
  78. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_methods_task.rb +37 -0
  79. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_metrics_task.rb +37 -0
  80. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_policies_task.rb +17 -0
  81. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_pricingrules_task.rb +41 -0
  82. data/lib/3scale_toolbox/commands/service_command/copy_command/copy_service_proxy_task.rb +32 -0
  83. data/lib/3scale_toolbox/commands/service_command/copy_command/create_or_update_service_task.rb +49 -0
  84. data/lib/3scale_toolbox/commands/service_command/copy_command/destroy_mapping_rules_task.rb +38 -0
  85. data/lib/3scale_toolbox/commands/service_command/copy_command/task.rb +85 -0
  86. data/lib/3scale_toolbox/commands/service_command/create_command.rb +58 -44
  87. data/lib/3scale_toolbox/commands/service_command/delete_command.rb +31 -33
  88. data/lib/3scale_toolbox/commands/service_command/list_command.rb +24 -34
  89. data/lib/3scale_toolbox/commands/service_command/show_command.rb +39 -44
  90. data/lib/3scale_toolbox/commands/update_command.rb +3 -3
  91. data/lib/3scale_toolbox/commands/update_command/{update_service.rb → service_command.rb} +22 -18
  92. data/lib/3scale_toolbox/commands/update_command/service_command/copy_service_settings_task.rb +35 -0
  93. data/lib/3scale_toolbox/commands/update_command/service_command/delete_activedocs_task.rb +24 -0
  94. data/lib/3scale_toolbox/crds.rb +16 -0
  95. data/lib/3scale_toolbox/crds/application_plan_dump.rb +19 -0
  96. data/lib/3scale_toolbox/crds/backend_dump.rb +39 -0
  97. data/lib/3scale_toolbox/crds/backend_mapping_rule_dump.rb +26 -0
  98. data/lib/3scale_toolbox/crds/backend_method_dump.rb +12 -0
  99. data/lib/3scale_toolbox/crds/backend_metric_dump.rb +13 -0
  100. data/lib/3scale_toolbox/crds/backend_parser.rb +55 -0
  101. data/lib/3scale_toolbox/crds/backend_usage_dump.rb +11 -0
  102. data/lib/3scale_toolbox/crds/limit_dump.rb +37 -0
  103. data/lib/3scale_toolbox/crds/mapping_rule_dump.rb +26 -0
  104. data/lib/3scale_toolbox/crds/method_dump.rb +12 -0
  105. data/lib/3scale_toolbox/crds/metric_dump.rb +13 -0
  106. data/lib/3scale_toolbox/crds/pricing_rule_dump.rb +38 -0
  107. data/lib/3scale_toolbox/crds/product_deployment_parser.rb +329 -0
  108. data/lib/3scale_toolbox/crds/product_dump.rb +157 -0
  109. data/lib/3scale_toolbox/crds/product_parser.rb +114 -0
  110. data/lib/3scale_toolbox/crds/remote.rb +682 -0
  111. data/lib/3scale_toolbox/entities.rb +8 -0
  112. data/lib/3scale_toolbox/entities/activedocs.rb +12 -0
  113. data/lib/3scale_toolbox/entities/application_plan.rb +74 -39
  114. data/lib/3scale_toolbox/entities/backend.rb +187 -0
  115. data/lib/3scale_toolbox/entities/backend_mapping_rule.rb +102 -0
  116. data/lib/3scale_toolbox/entities/backend_method.rb +99 -0
  117. data/lib/3scale_toolbox/entities/backend_metric.rb +98 -0
  118. data/lib/3scale_toolbox/entities/backend_usage.rb +105 -0
  119. data/lib/3scale_toolbox/entities/limit.rb +71 -0
  120. data/lib/3scale_toolbox/entities/mapping_rule.rb +90 -0
  121. data/lib/3scale_toolbox/entities/method.rb +33 -19
  122. data/lib/3scale_toolbox/entities/metric.rb +29 -18
  123. data/lib/3scale_toolbox/entities/pricing_rule.rb +63 -0
  124. data/lib/3scale_toolbox/entities/proxy_config.rb +0 -1
  125. data/lib/3scale_toolbox/entities/service.rb +166 -48
  126. data/lib/3scale_toolbox/error.rb +53 -0
  127. data/lib/3scale_toolbox/helper.rb +17 -0
  128. data/lib/3scale_toolbox/openapi/oas3.rb +1 -1
  129. data/lib/3scale_toolbox/proxy_logger.rb +5 -1
  130. data/lib/3scale_toolbox/remote_cache.rb +157 -0
  131. data/lib/3scale_toolbox/remotes.rb +2 -2
  132. data/lib/3scale_toolbox/version.rb +1 -1
  133. data/licenses.xml +113 -45
  134. metadata +75 -26
  135. data/lib/3scale_toolbox/commands/copy_command/copy_service.rb +0 -144
  136. data/lib/3scale_toolbox/tasks.rb +0 -15
  137. data/lib/3scale_toolbox/tasks/bump_proxy_version_task.rb +0 -32
  138. data/lib/3scale_toolbox/tasks/copy_activedocs_task.rb +0 -42
  139. data/lib/3scale_toolbox/tasks/copy_app_plans_task.rb +0 -31
  140. data/lib/3scale_toolbox/tasks/copy_limits_task.rb +0 -36
  141. data/lib/3scale_toolbox/tasks/copy_mapping_rules_task.rb +0 -32
  142. data/lib/3scale_toolbox/tasks/copy_methods_task.rb +0 -36
  143. data/lib/3scale_toolbox/tasks/copy_metrics_task.rb +0 -33
  144. data/lib/3scale_toolbox/tasks/copy_policies_task.rb +0 -13
  145. data/lib/3scale_toolbox/tasks/copy_pricingrules_task.rb +0 -41
  146. data/lib/3scale_toolbox/tasks/copy_service_proxy_task.rb +0 -13
  147. data/lib/3scale_toolbox/tasks/copy_service_settings_task.rb +0 -38
  148. data/lib/3scale_toolbox/tasks/copy_task.rb +0 -66
  149. data/lib/3scale_toolbox/tasks/delete_activedocs_task.rb +0 -22
  150. data/lib/3scale_toolbox/tasks/destroy_mapping_rules_task.rb +0 -22
  151. data/lib/3scale_toolbox/tasks/helper_task.rb +0 -25
@@ -0,0 +1,46 @@
1
+ module ThreeScaleToolbox
2
+ module Commands
3
+ module BackendCommand
4
+ module CopyCommand
5
+ class CreateOrUpdateTargetBackendTask
6
+ include Task
7
+
8
+ # entrypoint
9
+ def run
10
+ backend = Entities::Backend.find(remote: target_remote, ref: target_backend_ref)
11
+
12
+ if backend.nil?
13
+ backend = Entities::Backend.create(remote: target_remote,
14
+ attrs: create_attrs)
15
+ elsif backend == source_backend
16
+ message = 'source and destination backends are the same: ' \
17
+ "ID: #{source_backend.id} system_name: #{source_backend.attrs['system_name']}"
18
+ warn "\e[1m\e[31mWarning: #{message}\e[0m"
19
+ else
20
+ backend.update update_attrs
21
+ end
22
+
23
+ # assign target backend for other tasks to have it available
24
+ self.target_backend = backend
25
+
26
+ logger.info "source backend ID: #{source_backend.id} system_name: #{source_backend.system_name}"
27
+ logger.info "target backend ID: #{target_backend.id} system_name: #{target_backend.system_name}"
28
+ report['backend_id'] = target_backend.id
29
+ end
30
+
31
+ def create_attrs
32
+ source_backend.attrs.merge('system_name' => target_backend_ref)
33
+ end
34
+
35
+ def update_attrs
36
+ source_backend.attrs.merge('system_name' => target_backend_ref)
37
+ end
38
+
39
+ def target_backend_ref
40
+ option_target_system_name || source_backend.attrs.fetch('system_name')
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,67 @@
1
+ module ThreeScaleToolbox
2
+ module Commands
3
+ module BackendCommand
4
+ module CopyCommand
5
+ module Task
6
+ attr_reader :context
7
+
8
+ def initialize(context)
9
+ @context = context
10
+ end
11
+
12
+ def call
13
+ run
14
+ end
15
+
16
+ def target_backend=(target)
17
+ context[:target_backend] = target
18
+ end
19
+
20
+ def target_backend
21
+ context[:target_backend] ||= raise ThreeScaleToolbox::Error, 'Unexpected error. ' \
22
+ 'Target backend should have been created or updated'
23
+ end
24
+
25
+ def source_backend
26
+ context[:source_backend] ||= find_source_backend
27
+ end
28
+
29
+ def source_remote
30
+ context[:source_remote]
31
+ end
32
+
33
+ def target_remote
34
+ context[:target_remote]
35
+ end
36
+
37
+ def source_backend_ref
38
+ context[:source_backend_ref] ||= raise ThreeScaleToolbox::Error, 'Unexpected error. ' \
39
+ 'source_backend_ref not found'
40
+ end
41
+
42
+ def option_target_system_name
43
+ context[:option_target_system_name]
44
+ end
45
+
46
+ def logger
47
+ context[:logger] ||= Logger.new($stdout).tap do |logger|
48
+ logger.formatter = proc { |severity, datetime, progname, msg| "#{msg}\n" }
49
+ end
50
+ end
51
+
52
+ def report
53
+ context[:report] ||= {}
54
+ end
55
+
56
+ private
57
+
58
+ def find_source_backend
59
+ Entities::Backend.find(remote: source_remote, ref: source_backend_ref).tap do |backend|
60
+ raise ThreeScaleToolbox::Error, "Backend #{source_backend_ref} does not exist" if backend.nil?
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -1,4 +1,4 @@
1
- require '3scale_toolbox/commands/copy_command/copy_service'
1
+ require '3scale_toolbox/commands/copy_command/service_command'
2
2
 
3
3
  module ThreeScaleToolbox
4
4
  module Commands
@@ -16,7 +16,7 @@ module ThreeScaleToolbox
16
16
  end
17
17
  end
18
18
  end
19
- add_subcommand(CopyServiceSubcommand)
19
+ add_subcommand(ServiceSubcommand)
20
20
  end
21
21
  end
22
22
  end
@@ -0,0 +1,40 @@
1
+ module ThreeScaleToolbox
2
+ module Commands
3
+ module CopyCommand
4
+ class ServiceSubcommand < Cri::CommandRunner
5
+ include ThreeScaleToolbox::Command
6
+
7
+ def self.command
8
+ Cri::Command.define do
9
+ name 'service'
10
+ usage 'service [opts] -s <src> -d <dst> <source-service>'
11
+ summary 'copy service'
12
+ description <<-HEREDOC
13
+ This command makes a copy of the referenced service.
14
+ Target service will be searched by source service system name. System name can be overriden with `--target_system_name` option.
15
+ If a service with the selected `system_name` is not found, it will be created.
16
+ \n Components of the service being copied:
17
+ \nservice settings
18
+ \nproxy settings
19
+ \npricing rules
20
+ \nactivedocs
21
+ \nmetrics
22
+ \nmethods
23
+ \napplication plans
24
+ \nmapping rules
25
+ HEREDOC
26
+
27
+ option :s, :source, '3scale source instance. Url or remote name', argument: :required
28
+ option :d, :destination, '3scale target instance. Url or remote name', argument: :required
29
+ option :t, 'target_system_name', 'Target system name. Default to source system name', argument: :required
30
+ flag :f, :force, 'Overwrites the mapping rules by deleting all rules from target service first'
31
+ flag :r, 'rules-only', 'Only mapping rules are copied'
32
+ param :source_service
33
+
34
+ runner Commands::ServiceCommand::CopySubcommand
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,16 @@
1
+ module ThreeScaleToolbox
2
+ module Commands
3
+ module ImportCommand
4
+ module OpenAPI
5
+ # Helper class to validate values for the oidc-issuer-type argument of the import openapi command
6
+ class IssuerTypeTransformer
7
+ def call(issuer_type)
8
+ raise unless %w[rest keycloak].include?(issuer_type)
9
+
10
+ issuer_type
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -9,6 +9,7 @@ require '3scale_toolbox/commands/import_command/openapi/create_activedocs_step'
9
9
  require '3scale_toolbox/commands/import_command/openapi/update_service_proxy_step'
10
10
  require '3scale_toolbox/commands/import_command/openapi/update_service_oidc_conf_step'
11
11
  require '3scale_toolbox/commands/import_command/openapi/update_policies_step'
12
+ require '3scale_toolbox/commands/import_command/issuer_type_transformer'
12
13
 
13
14
  module ThreeScaleToolbox
14
15
  module Commands
@@ -30,6 +31,7 @@ module ThreeScaleToolbox
30
31
  flag nil, 'activedocs-hidden', 'Create ActiveDocs in hidden state'
31
32
  flag nil, 'skip-openapi-validation', 'Skip OpenAPI schema validation'
32
33
  flag nil, 'prefix-matching', 'Use prefix matching instead of strict matching on mapping rules derived from openapi operations'
34
+ option nil, 'oidc-issuer-type', 'OIDC Issuer Type (rest, keycloak)', argument: :required, transform: IssuerTypeTransformer.new
33
35
  option nil, 'oidc-issuer-endpoint', 'OIDC Issuer Endpoint', argument: :required
34
36
  option nil, 'default-credentials-userkey', 'Default credentials policy userkey', argument: :required
35
37
  option nil, 'override-private-basepath', 'Override the basepath for the private URLs', argument: :required
@@ -51,7 +53,7 @@ module ThreeScaleToolbox
51
53
  # other tasks might read proxy settings (CreateActiveDocsStep does)
52
54
  tasks << UpdateServiceProxyStep.new(context)
53
55
  tasks << CreateMethodsStep.new(context)
54
- tasks << Tasks::DestroyMappingRulesTask.new(context)
56
+ tasks << ThreeScaleToolbox::Commands::ServiceCommand::CopyCommand::DestroyMappingRulesTask.new(context)
55
57
  tasks << CreateMappingRulesStep.new(context)
56
58
  tasks << CreateActiveDocsStep.new(context)
57
59
  tasks << UpdateServiceOidcConfStep.new(context)
@@ -61,7 +63,7 @@ module ThreeScaleToolbox
61
63
  tasks.each(&:call)
62
64
 
63
65
  # This should be the last step
64
- Tasks::BumpProxyVersionTask.new(service: context[:target]).call
66
+ ThreeScaleToolbox::Commands::ServiceCommand::CopyCommand::BumpProxyVersionTask.new(service: context[:target]).call
65
67
  end
66
68
 
67
69
  private
@@ -77,6 +79,7 @@ module ThreeScaleToolbox
77
79
  threescale_client: threescale_client(fetch_required_option(:destination)),
78
80
  target_system_name: options[:target_system_name],
79
81
  activedocs_published: !options[:'activedocs-hidden'],
82
+ oidc_issuer_type: options[:'oidc-issuer-type'],
80
83
  oidc_issuer_endpoint: options[:'oidc-issuer-endpoint'],
81
84
  default_credentials_userkey: options[:'default-credentials-userkey'],
82
85
  skip_openapi_validation: options[:'skip-openapi-validation'],
@@ -88,6 +91,7 @@ module ThreeScaleToolbox
88
91
  backend_api_secret_token: options[:'backend-api-secret-token'],
89
92
  backend_api_host_header: options[:'backend-api-host-header'],
90
93
  prefix_matching: options[:'prefix-matching'],
94
+ delete_mapping_rules: true,
91
95
  }
92
96
  end
93
97
 
@@ -7,7 +7,8 @@ module ThreeScaleToolbox
7
7
 
8
8
  def call
9
9
  operations.each do |op|
10
- service.create_mapping_rule(op.mapping_rule)
10
+ Entities::MappingRule.create(service: service,
11
+ attrs: op.mapping_rule)
11
12
  puts "Created #{op.http_method} #{op.pattern} endpoint"
12
13
  end
13
14
  end
@@ -7,18 +7,13 @@ module ThreeScaleToolbox
7
7
 
8
8
  def call
9
9
  missing_operations.each do |op|
10
- method = Entities::Method.create(service: service, parent_id: hits_metric_id,
11
- attrs: op.method)
10
+ method = Entities::Method.create(service: service, attrs: op.method)
12
11
  op.set(:metric_id, method.id)
13
12
  end
14
13
 
15
14
  existing_operations.each do |op|
16
- method_attrs = methods_index.fetch(op.method['system_name'])
17
- method = Entities::Method.new(
18
- id: method_attrs.fetch('id'),
19
- parent_id: hits_metric_id,
20
- service: service
21
- )
15
+ method_attrs = methods_index.fetch(op.method['system_name']).attrs
16
+ method = Entities::Method.new(id: method_attrs.fetch('id'), service: service)
22
17
  method.update(op.method)
23
18
  op.set(:metric_id, method.id)
24
19
  end
@@ -26,13 +21,9 @@ module ThreeScaleToolbox
26
21
 
27
22
  private
28
23
 
29
- def hits_metric_id
30
- @hits_metric_id ||= service.hits['id']
31
- end
32
-
33
24
  def methods_index
34
- @methods_index ||= service.methods(hits_metric_id).each_with_object({}) do |method, acc|
35
- acc[method['system_name']] = method
25
+ @methods_index ||= service.methods.each_with_object({}) do |method, acc|
26
+ acc[method.system_name] = method
36
27
  end
37
28
  end
38
29
 
@@ -57,6 +57,10 @@ module ThreeScaleToolbox
57
57
  context[:api_spec_resource]
58
58
  end
59
59
 
60
+ def oidc_issuer_type
61
+ context[:oidc_issuer_type]
62
+ end
63
+
60
64
  def oidc_issuer_endpoint
61
65
  context[:oidc_issuer_endpoint]
62
66
  end
@@ -52,6 +52,7 @@ module ThreeScaleToolbox
52
52
  case (type = api_spec.security[:type])
53
53
  when 'oauth2'
54
54
  settings[:credentials_location] = 'headers'
55
+ settings[:oidc_issuer_type] = oidc_issuer_type unless oidc_issuer_type.nil?
55
56
  settings[:oidc_issuer_endpoint] = oidc_issuer_endpoint unless oidc_issuer_endpoint.nil?
56
57
  when 'apiKey'
57
58
  settings[:credentials_location] = credentials_location
@@ -2,6 +2,24 @@ module ThreeScaleToolbox
2
2
  module Commands
3
3
  module MethodsCommand
4
4
  module Apply
5
+ class CustomPrinter
6
+ attr_reader :option_disabled, :option_enabled
7
+
8
+ def initialize(options)
9
+ @option_disabled = options[:disabled]
10
+ @option_enabled = options[:enabled]
11
+ end
12
+
13
+ def print_record(method)
14
+ output_msg_array = ["Applied method id: #{method['id']}"]
15
+ output_msg_array << 'Disabled' if option_disabled
16
+ output_msg_array << 'Enabled' if option_enabled
17
+ puts output_msg_array.join('; ')
18
+ end
19
+
20
+ def print_collection(collection) end
21
+ end
22
+
5
23
  class ApplySubcommand < Cri::CommandRunner
6
24
  include ThreeScaleToolbox::Command
7
25
 
@@ -16,6 +34,8 @@ module ThreeScaleToolbox
16
34
  flag nil, :disabled, 'Disables this method in all application plans'
17
35
  flag nil, :enabled, 'Enables this method in all application plans'
18
36
  option nil, :description, 'Method description', argument: :required
37
+ ThreeScaleToolbox::CLI.output_flag(self)
38
+
19
39
  param :remote
20
40
  param :service_ref
21
41
  param :method_ref
@@ -27,11 +47,9 @@ module ThreeScaleToolbox
27
47
  def run
28
48
  validate_option_params
29
49
  hits = service.hits
30
- method = Entities::Method.find(service: service, parent_id: hits.fetch('id'),
31
- ref: method_ref)
50
+ method = Entities::Method.find(service: service, ref: method_ref)
32
51
  if method.nil?
33
- method = Entities::Method.create(service: service, parent_id: hits.fetch('id'),
34
- attrs: create_method_attrs)
52
+ method = Entities::Method.create(service: service, attrs: create_method_attrs)
35
53
  else
36
54
  method.update(method_attrs) unless method_attrs.empty?
37
55
  end
@@ -39,10 +57,7 @@ module ThreeScaleToolbox
39
57
  method.disable if option_disabled
40
58
  method.enable if option_enabled
41
59
 
42
- output_msg_array = ["Applied method id: #{method.id}"]
43
- output_msg_array << 'Disabled' if option_disabled
44
- output_msg_array << 'Enabled' if option_enabled
45
- puts output_msg_array.join('; ')
60
+ printer.print_record method.attrs
46
61
  end
47
62
 
48
63
  private
@@ -94,6 +109,11 @@ module ThreeScaleToolbox
94
109
  def method_ref
95
110
  arguments[:method_ref]
96
111
  end
112
+
113
+ def printer
114
+ # keep backwards compatibility
115
+ options.fetch(:output, CustomPrinter.new(disabled: option_disabled, enabled: option_enabled))
116
+ end
97
117
  end
98
118
  end
99
119
  end
@@ -2,6 +2,20 @@ module ThreeScaleToolbox
2
2
  module Commands
3
3
  module MethodsCommand
4
4
  module Create
5
+ class CustomPrinter
6
+ attr_reader :option_disabled
7
+
8
+ def initialize(options)
9
+ @option_disabled = options[:disabled]
10
+ end
11
+
12
+ def print_record(method)
13
+ puts "Created method id: #{method['id']}. Disabled: #{option_disabled}"
14
+ end
15
+
16
+ def print_collection(collection) end
17
+ end
18
+
5
19
  class CreateSubcommand < Cri::CommandRunner
6
20
  include ThreeScaleToolbox::Command
7
21
 
@@ -15,6 +29,8 @@ module ThreeScaleToolbox
15
29
  option :t, 'system-name', 'Method system name', argument: :required
16
30
  flag nil, :disabled, 'Disables this method in all application plans'
17
31
  option nil, :description, 'Method description', argument: :required
32
+ ThreeScaleToolbox::CLI.output_flag(self)
33
+
18
34
  param :remote
19
35
  param :service_ref
20
36
  param :method_name
@@ -24,14 +40,13 @@ module ThreeScaleToolbox
24
40
  end
25
41
 
26
42
  def run
27
- hits = service.hits
28
43
  method = ThreeScaleToolbox::Entities::Method.create(
29
44
  service: service,
30
- parent_id: hits.fetch('id'),
31
45
  attrs: method_attrs
32
46
  )
33
47
  method.disable if option_disabled
34
- puts "Created method id: #{method.id}. Disabled: #{option_disabled}"
48
+
49
+ printer.print_record method.attrs
35
50
  end
36
51
 
37
52
  private
@@ -66,6 +81,11 @@ module ThreeScaleToolbox
66
81
  def service_ref
67
82
  arguments[:service_ref]
68
83
  end
84
+
85
+ def printer
86
+ # keep backwards compatibility
87
+ options.fetch(:output, CustomPrinter.new(disabled: option_disabled))
88
+ end
69
89
  end
70
90
  end
71
91
  end
@@ -44,7 +44,7 @@ module ThreeScaleToolbox
44
44
 
45
45
  def find_method
46
46
  hits = service.hits
47
- Entities::Method.find(service: service, parent_id: hits.fetch('id'), ref: method_ref).tap do |p|
47
+ Entities::Method.find(service: service, ref: method_ref).tap do |p|
48
48
  raise ThreeScaleToolbox::Error, "Method #{method_ref} does not exist" if p.nil?
49
49
  end
50
50
  end