3scale_toolbox 0.10.0 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +21 -144
  3. data/lib/3scale_toolbox.rb +0 -1
  4. data/lib/3scale_toolbox/commands.rb +12 -0
  5. data/lib/3scale_toolbox/commands/3scale_command.rb +1 -1
  6. data/lib/3scale_toolbox/commands/account_command.rb +23 -0
  7. data/lib/3scale_toolbox/commands/account_command/find_command.rb +41 -0
  8. data/lib/3scale_toolbox/commands/activedocs_command.rb +32 -0
  9. data/lib/3scale_toolbox/commands/activedocs_command/apply_command.rb +127 -0
  10. data/lib/3scale_toolbox/commands/activedocs_command/create_command.rb +65 -0
  11. data/lib/3scale_toolbox/commands/activedocs_command/delete_command.rb +49 -0
  12. data/lib/3scale_toolbox/commands/activedocs_command/list_command.rb +54 -0
  13. data/lib/3scale_toolbox/commands/application_command.rb +30 -0
  14. data/lib/3scale_toolbox/commands/application_command/apply_command.rb +179 -0
  15. data/lib/3scale_toolbox/commands/application_command/create_command.rb +110 -0
  16. data/lib/3scale_toolbox/commands/application_command/delete_command.rb +57 -0
  17. data/lib/3scale_toolbox/commands/application_command/list_command.rb +124 -0
  18. data/lib/3scale_toolbox/commands/application_command/show_command.rb +72 -0
  19. data/lib/3scale_toolbox/commands/copy_command/copy_service.rb +97 -28
  20. data/lib/3scale_toolbox/commands/import_command/import_csv.rb +16 -17
  21. data/lib/3scale_toolbox/commands/import_command/openapi.rb +14 -10
  22. data/lib/3scale_toolbox/commands/import_command/openapi/create_service_step.rb +3 -2
  23. data/lib/3scale_toolbox/commands/import_command/openapi/method.rb +0 -1
  24. data/lib/3scale_toolbox/commands/import_command/openapi/step.rb +8 -1
  25. data/lib/3scale_toolbox/commands/import_command/openapi/update_service_proxy_step.rb +17 -7
  26. data/lib/3scale_toolbox/commands/methods_command.rb +4 -4
  27. data/lib/3scale_toolbox/commands/methods_command/apply_command.rb +2 -2
  28. data/lib/3scale_toolbox/commands/methods_command/create_command.rb +1 -1
  29. data/lib/3scale_toolbox/commands/metrics_command.rb +4 -4
  30. data/lib/3scale_toolbox/commands/metrics_command/apply_command.rb +2 -2
  31. data/lib/3scale_toolbox/commands/metrics_command/create_command.rb +1 -1
  32. data/lib/3scale_toolbox/commands/plans_command/apply_command.rb +7 -7
  33. data/lib/3scale_toolbox/commands/plans_command/create_command.rb +5 -5
  34. data/lib/3scale_toolbox/commands/policy_registry_command.rb +22 -0
  35. data/lib/3scale_toolbox/commands/policy_registry_command/copy_command.rb +85 -0
  36. data/lib/3scale_toolbox/commands/proxy_config_command.rb +30 -0
  37. data/lib/3scale_toolbox/commands/proxy_config_command/list_command.rb +78 -0
  38. data/lib/3scale_toolbox/commands/proxy_config_command/promote_command.rb +68 -0
  39. data/lib/3scale_toolbox/commands/proxy_config_command/show_command.rb +88 -0
  40. data/lib/3scale_toolbox/commands/service_command.rb +34 -0
  41. data/lib/3scale_toolbox/commands/service_command/apply_command.rb +77 -0
  42. data/lib/3scale_toolbox/commands/service_command/create_command.rb +59 -0
  43. data/lib/3scale_toolbox/commands/service_command/delete_command.rb +49 -0
  44. data/lib/3scale_toolbox/commands/service_command/list_command.rb +50 -0
  45. data/lib/3scale_toolbox/commands/service_command/show_command.rb +63 -0
  46. data/lib/3scale_toolbox/commands/update_command/update_service.rb +6 -3
  47. data/lib/3scale_toolbox/entities.rb +4 -0
  48. data/lib/3scale_toolbox/entities/account.rb +63 -0
  49. data/lib/3scale_toolbox/entities/activedocs.rb +88 -0
  50. data/lib/3scale_toolbox/entities/application.rb +124 -0
  51. data/lib/3scale_toolbox/entities/application_plan.rb +28 -4
  52. data/lib/3scale_toolbox/entities/base_entity.rb +44 -0
  53. data/lib/3scale_toolbox/entities/proxy_config.rb +58 -0
  54. data/lib/3scale_toolbox/entities/service.rb +42 -8
  55. data/lib/3scale_toolbox/error.rb +8 -0
  56. data/lib/3scale_toolbox/tasks.rb +2 -1
  57. data/lib/3scale_toolbox/tasks/bump_proxy_version_task.rb +32 -0
  58. data/lib/3scale_toolbox/tasks/copy_service_settings_task.rb +38 -0
  59. data/lib/3scale_toolbox/version.rb +1 -1
  60. metadata +36 -5
  61. data/lib/3scale_toolbox/tasks/update_service_settings_task.rb +0 -49
@@ -0,0 +1,65 @@
1
+ module ThreeScaleToolbox
2
+ module Commands
3
+ module ActiveDocsCommand
4
+ module Create
5
+ class CreateSubcommand < Cri::CommandRunner
6
+ include ThreeScaleToolbox::Command
7
+ include ThreeScaleToolbox::ResourceReader
8
+
9
+ def self.command
10
+ Cri::Command.define do
11
+ name 'create'
12
+ usage 'create <remote> <activedocs-name> <spec>'
13
+ summary 'Create an ActiveDocs'
14
+ description 'Create an ActiveDocs'
15
+ runner CreateSubcommand
16
+
17
+ param :remote
18
+ param :activedocs_name
19
+ param :activedocs_spec
20
+
21
+ option :i, :'service-id', "Specify the Service ID associated to the ActiveDocs", argument: :required
22
+ option :p, :'published', "Specify it to publish the ActiveDoc on the Developer Portal. Otherwise it will be hidden", argument: :forbidden
23
+ option nil, :'skip-swagger-validations', "Specify it to skip validation of the Swagger specification", argument: :forbidden
24
+ option :d, :'description', "Specify the description of the ActiveDocs", argument: :required
25
+ option :s, :'system-name', "Specify the system-name of the ActiveDocs", argument: :required
26
+ end
27
+ end
28
+
29
+ def run
30
+ res = Entities::ActiveDocs::create(remote: remote, attrs: activedocs_attrs)
31
+ puts "ActiveDocs '#{activedocs_name}' has been created with ID: #{res.id}"
32
+ end
33
+
34
+ private
35
+
36
+ def activedocs_name
37
+ arguments[:activedocs_name]
38
+ end
39
+
40
+ def remote
41
+ @remote ||= threescale_client(arguments[:remote])
42
+ end
43
+
44
+ def activedocs_json_spec
45
+ activedoc_spec = arguments[:activedocs_spec]
46
+ activedoc_spec_content = load_resource(arguments[:activedocs_spec])
47
+ JSON.pretty_generate(activedoc_spec_content)
48
+ end
49
+
50
+ def activedocs_attrs
51
+ {
52
+ "service_id" => options[:'service-id'],
53
+ "published" => options[:'published'],
54
+ "skip_swagger_validations" => options[:'skip-swagger-validations'],
55
+ "description" => options[:'description'],
56
+ "system_name" => options[:'system-name'],
57
+ "name" => activedocs_name,
58
+ "body" => activedocs_json_spec,
59
+ }.compact
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,49 @@
1
+ module ThreeScaleToolbox
2
+ module Commands
3
+ module ActiveDocsCommand
4
+ module Delete
5
+ class DeleteSubcommand < Cri::CommandRunner
6
+ include ThreeScaleToolbox::Command
7
+
8
+ def self.command
9
+ Cri::Command.define do
10
+ name 'delete'
11
+ usage 'delete <remote> <activedocs-id_or-system-name>'
12
+ summary 'Delete an ActiveDocs'
13
+ description 'Remove an ActiveDocs'
14
+ runner DeleteSubcommand
15
+
16
+ param :remote
17
+ param :activedocs_id_or_system_name
18
+ end
19
+ end
20
+
21
+ def run
22
+ activedocs.delete
23
+ puts "ActiveDocs with id: #{activedocs.id} deleted"
24
+ end
25
+
26
+ private
27
+
28
+ def remote
29
+ @remote ||= threescale_client(arguments[:remote])
30
+ end
31
+
32
+ def ref
33
+ arguments[:activedocs_id_or_system_name]
34
+ end
35
+
36
+ def activedocs
37
+ @activedocs ||= find_activedocs
38
+ end
39
+
40
+ def find_activedocs
41
+ Entities::ActiveDocs.find(remote: remote, ref: ref).tap do |activedoc|
42
+ raise ThreeScaleToolbox::Error, "ActiveDocs #{ref} does not exist" if activedoc.nil?
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,54 @@
1
+ module ThreeScaleToolbox
2
+ module Commands
3
+ module ActiveDocsCommand
4
+ module List
5
+ class ListSubcommand < Cri::CommandRunner
6
+ include ThreeScaleToolbox::Command
7
+
8
+ def self.command
9
+ Cri::Command.define do
10
+ name 'list'
11
+ usage 'list <remote>'
12
+ summary 'List ActiveDocs'
13
+ description 'List all defined ActiveDocs'
14
+ runner ListSubcommand
15
+
16
+ param :remote
17
+ end
18
+ end
19
+
20
+ def run
21
+ activedocs = remote.list_activedocs
22
+ print_activedocs_data(activedocs, ACTIVEDOCS_FIELDS_TO_SHOW)
23
+ end
24
+
25
+ private
26
+
27
+ ACTIVEDOCS_FIELDS_TO_SHOW = %w[
28
+ id name system_name service_id published
29
+ skip_swagger_validations created_at updated_at
30
+ ]
31
+
32
+ def remote
33
+ @remote ||= threescale_client(arguments[:remote])
34
+ end
35
+
36
+ def print_activedocs_data(activedocs, fields_to_show)
37
+ print_header(fields_to_show)
38
+ print_results(activedocs, fields_to_show)
39
+ end
40
+
41
+ def print_header(fields_to_show)
42
+ puts fields_to_show.map { |e| e.upcase }.join("\t")
43
+ end
44
+
45
+ def print_results(activedocs, fields_to_show)
46
+ activedocs.each do |activedoc|
47
+ puts fields_to_show.map { |field| activedoc.fetch(field, '(empty)') }.join("\t")
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,30 @@
1
+ require '3scale_toolbox/commands/application_command/list_command'
2
+ require '3scale_toolbox/commands/application_command/create_command'
3
+ require '3scale_toolbox/commands/application_command/show_command'
4
+ require '3scale_toolbox/commands/application_command/apply_command'
5
+ require '3scale_toolbox/commands/application_command/delete_command'
6
+
7
+ module ThreeScaleToolbox
8
+ module Commands
9
+ module ApplicationCommand
10
+ include ThreeScaleToolbox::Command
11
+ def self.command
12
+ Cri::Command.define do
13
+ name 'application'
14
+ usage 'application <sub-command> [options]'
15
+ summary 'application super command'
16
+ description 'application commands'
17
+
18
+ run do |_opts, _args, cmd|
19
+ puts cmd.help
20
+ end
21
+ end
22
+ end
23
+ add_subcommand(List::ListSubcommand)
24
+ add_subcommand(Create::CreateSubcommand)
25
+ add_subcommand(Show::ShowSubcommand)
26
+ add_subcommand(Apply::ApplySubcommand)
27
+ add_subcommand(Delete::DeleteSubcommand)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,179 @@
1
+ module ThreeScaleToolbox
2
+ module Commands
3
+ module ApplicationCommand
4
+ module Apply
5
+ class ApplySubcommand < Cri::CommandRunner
6
+ include ThreeScaleToolbox::Command
7
+
8
+ def self.command
9
+ Cri::Command.define do
10
+ name 'apply'
11
+ usage 'apply [opts] <remote> <application>'
12
+ summary 'update (or create) application'
13
+ description <<-HEREDOC
14
+ Update (create if it does not exist) application'
15
+ \n Application param allows:
16
+ \n * Application internal id
17
+ \n * User_key (API key)
18
+ \n * App_id (from app_id/app_key pair)
19
+ \n * Client ID (for OAuth and OpenID Connect authentication modes)
20
+ HEREDOC
21
+
22
+ option nil, 'user-key', 'User Key (API Key) of the application to be created.', argument: :required
23
+ option nil, 'application-key', 'App Key(s) or Client Secret (for OAuth and OpenID Connect authentication modes) of the application to be created. Only used when application does not exist.' , argument: :required
24
+ option nil, :description, 'Application description', argument: :required
25
+ option nil, :name, 'Application name', argument: :required
26
+ option nil, :account, 'Application\'s account. Required when creating', argument: :required
27
+ option nil, :service, 'Application\'s service. Required when creating', argument: :required
28
+ option nil, :plan, 'Application\'s plan. Required when creating', argument: :required
29
+ flag nil, :resume, 'Resume a suspended application'
30
+ flag nil, :suspend, 'Suspends an application (changes the state to suspended)'
31
+ param :remote
32
+ param :application
33
+
34
+ runner ApplySubcommand
35
+ end
36
+ end
37
+
38
+ def run
39
+ validate_option_params
40
+
41
+ application = Entities::Application.find(remote: remote, ref: application_ref)
42
+ if application.nil?
43
+ validate_creation_option_params
44
+ application = Entities::Application.create(remote: remote,
45
+ account_id: account.id,
46
+ plan_id: plan.id,
47
+ app_attrs: create_app_attrs)
48
+ else
49
+ application.update(app_attrs) unless app_attrs.empty?
50
+ end
51
+
52
+ application.resume if option_resume
53
+ application.suspend if option_suspend
54
+ output_msg_array = ["Applied application id: #{application.id}"]
55
+ output_msg_array << 'Resumed' if option_resume
56
+ output_msg_array << 'Suspended' if option_suspend
57
+ puts output_msg_array.join('; ')
58
+ end
59
+
60
+ private
61
+
62
+ def validate_option_params
63
+ raise ThreeScaleToolbox::Error, '--resume and --suspend are mutually exclusive' \
64
+ if option_resume && option_suspend
65
+ end
66
+
67
+ def validate_creation_option_params
68
+ raise ThreeScaleToolbox::Error, "Application #{application_ref} does not exist." \
69
+ '--account is required to create' if option_account.nil?
70
+ raise ThreeScaleToolbox::Error, "Application #{application_ref} does not exist." \
71
+ '--service is required to create' if option_service.nil?
72
+ raise ThreeScaleToolbox::Error, "Application #{application_ref} does not exist." \
73
+ '--plan is required to create' if option_plan.nil?
74
+ raise ThreeScaleToolbox::Error, "Application #{application_ref} does not exist." \
75
+ '--name is required to create' if option_name.nil?
76
+ raise ThreeScaleToolbox::Error, "Application #{application_ref} does not exist." \
77
+ '--user-key option forbidden' unless option_user_key.nil?
78
+ end
79
+
80
+ def create_app_attrs
81
+ {
82
+ 'name' => option_name,
83
+ 'description' => description,
84
+ 'user_key' => application_ref,
85
+ 'application_id' => application_ref,
86
+ 'application_key' => option_app_key,
87
+ }.compact
88
+ end
89
+
90
+ def app_attrs
91
+ # This apply command does not update App Key (or Client Secret).
92
+ # Hence, not included.
93
+ {
94
+ 'name' => option_name,
95
+ 'description' => description,
96
+ 'user_key' => option_user_key,
97
+ }.compact
98
+ end
99
+
100
+ def account
101
+ @account ||= find_account
102
+ end
103
+
104
+ def find_account
105
+ Entities::Account.find(remote: remote,
106
+ ref: option_account).tap do |acc|
107
+ raise ThreeScaleToolbox::Error, "Account #{option_account} does not exist" if acc.nil?
108
+ end
109
+ end
110
+
111
+ def service
112
+ @service ||= find_service
113
+ end
114
+
115
+ def find_service
116
+ Entities::Service.find(remote: remote,
117
+ ref: option_service).tap do |svc|
118
+ raise ThreeScaleToolbox::Error, "Service #{option_service} does not exist" if svc.nil?
119
+ end
120
+ end
121
+
122
+ def plan
123
+ @plan ||= find_plan
124
+ end
125
+
126
+ def find_plan
127
+ Entities::ApplicationPlan.find(service: service, ref: option_plan).tap do |pl|
128
+ raise ThreeScaleToolbox::Error, "Application plan #{option_plan} does not exist" if pl.nil?
129
+ end
130
+ end
131
+
132
+ def remote
133
+ @remote ||= threescale_client(arguments[:remote])
134
+ end
135
+
136
+ def option_name
137
+ options[:name]
138
+ end
139
+
140
+ def description
141
+ options[:description] || option_name
142
+ end
143
+
144
+ def option_user_key
145
+ options[:'user-key']
146
+ end
147
+
148
+ def option_app_key
149
+ options[:'application-key']
150
+ end
151
+
152
+ def option_account
153
+ options[:account]
154
+ end
155
+
156
+ def option_service
157
+ options[:service]
158
+ end
159
+
160
+ def option_plan
161
+ options[:plan]
162
+ end
163
+
164
+ def option_resume
165
+ options.fetch(:resume, false)
166
+ end
167
+
168
+ def option_suspend
169
+ options.fetch(:suspend, false)
170
+ end
171
+
172
+ def application_ref
173
+ arguments[:application]
174
+ end
175
+ end
176
+ end
177
+ end
178
+ end
179
+ end
@@ -0,0 +1,110 @@
1
+ module ThreeScaleToolbox
2
+ module Commands
3
+ module ApplicationCommand
4
+ module Create
5
+ class CreateSubcommand < Cri::CommandRunner
6
+ include ThreeScaleToolbox::Command
7
+
8
+ def self.command
9
+ Cri::Command.define do
10
+ name 'create'
11
+ usage 'create [opts] <remote> <account> <service> <application-plan> <name>'
12
+ summary 'create one application'
13
+ description 'create one application linked to given account and application plan'
14
+
15
+ option nil, 'user-key', 'User Key (API Key) of the application to be created.', argument: :required
16
+ option nil, 'application-id', 'App ID or Client ID (for OAuth and OpenID Connect authentication modes) of the application to be created. ', argument: :required
17
+ option nil, 'application-key', 'App Key(s) or Client Secret (for OAuth and OpenID Connect authentication modes) of the application to be created.' , argument: :required
18
+ option nil, :description, 'Application description', argument: :required
19
+ param :remote
20
+ param :account
21
+ param :service
22
+ param :plan
23
+ param :name
24
+
25
+ runner CreateSubcommand
26
+ end
27
+ end
28
+
29
+ def run
30
+ application = ThreeScaleToolbox::Entities::Application.create(
31
+ remote: remote,
32
+ account_id: account.id,
33
+ plan_id: plan.id,
34
+ app_attrs: app_attrs
35
+ )
36
+
37
+ puts "Created application id: #{application.id}"
38
+ end
39
+
40
+ private
41
+
42
+ def app_attrs
43
+ {
44
+ 'name' => name,
45
+ 'description' => description,
46
+ 'user_key' => options[:'user-key'],
47
+ 'application_id' => options[:'application-id'],
48
+ 'application_key' => options[:'application-key']
49
+ }.compact
50
+ end
51
+
52
+ def description
53
+ options[:description] || name
54
+ end
55
+
56
+ def name
57
+ arguments[:name]
58
+ end
59
+
60
+ def account_ref
61
+ arguments[:account]
62
+ end
63
+
64
+ def account
65
+ @account ||= find_account
66
+ end
67
+
68
+ def find_account
69
+ Entities::Account.find(remote: remote,
70
+ ref: account_ref).tap do |acc|
71
+ raise ThreeScaleToolbox::Error, "Account #{account_ref} does not exist" if acc.nil?
72
+ end
73
+ end
74
+
75
+ def service_ref
76
+ arguments[:service]
77
+ end
78
+
79
+ def service
80
+ @service ||= find_service
81
+ end
82
+
83
+ def find_service
84
+ Entities::Service.find(remote: remote, ref: service_ref).tap do |svc|
85
+ raise ThreeScaleToolbox::Error, "Service #{service_ref} does not exist" if svc.nil?
86
+ end
87
+ end
88
+
89
+ def plan_ref
90
+ arguments[:plan]
91
+ end
92
+
93
+ def plan
94
+ @plan ||= find_plan
95
+ end
96
+
97
+ def find_plan
98
+ Entities::ApplicationPlan.find(service: service, ref: plan_ref).tap do |plan|
99
+ raise ThreeScaleToolbox::Error, "Application plan #{plan_ref} does not exist" if plan.nil?
100
+ end
101
+ end
102
+
103
+ def remote
104
+ @remote ||= threescale_client(arguments[:remote])
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end