diff --git a/README.md b/README.md index e624738c..35c5e651 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,18 @@ 3scale toolbox is a set of tools to help you manage your 3scale product. Using the [3scale API Ruby Client](https://github.com/3scale/3scale-api-ruby). -## Installation - +## Table of contents +* [Installation](#installation) +* [Usage](#usage) + * [Copy a service](#copy-a-service) + * [Update a service](#update-a-service) + * [Import from CSV](#import-from-csv) +* [Development](#development) +* [Plugins](#plugins) +* [Troubleshooting](#troubleshooting) +* [Contributing](#contributing) +## Installation Install the CLI: $ gem install 3scale_toolbox @@ -12,20 +21,150 @@ Install the CLI: ## Usage ```shell -3scale help +$ 3scale help +NAME + 3scale - 3scale CLI Toolbox + +USAGE + 3scale [options] + +DESCRIPTION + 3scale CLI tools to manage your API from the terminal. + +COMMANDS + copy 3scale copy command + help show help + import 3scale import command + update 3scale update command + +OPTIONS + -k --insecure Proceed and operate even for server connections + otherwise considered insecure + -v --version Prints the version of this command ``` ### Copy a service +Will create a new services, copy existing proxy settings, metrics, methods, application plans and mapping rules. -Will create a new service, copy existing methods, metrics, application plans and their usage limits. +Help message: + +```shell +$ 3scale copy service --help +NAME + service - Copy service + +USAGE + 3scale copy service [opts] -s -d + + +DESCRIPTION + Will create a new services, copy existing proxy settings, metrics, + methods, application plans and mapping rules. + +OPTIONS + -d --destination= 3scale target instance. Format: + "http[s]://@3scale_url" + -s --source= 3scale source instance. Format: + "http[s]://@3scale_url" + -t --target_system_name= Target system name + +OPTIONS FOR COPY + -h --help show help for this command + -k --insecure Proceed and operate even for server + connections otherwise considered + insecure + -v --version Prints the version of this command +``` ```shell 3scale copy service NUMBER --source=https://provider_key@foo-admin.3scale.net --destination=https://provider_key@foo2-admin.3scale.net ``` +### Update a service + +Will update existing service, update proxy settings, metrics, methods, application plans and mapping rules. + +Help message: + +```shell +NAME + service - Update service + +USAGE + 3scale update service [opts] -s -d + + +DESCRIPTION + Will update existing service, update proxy settings, metrics, methods, + application plans and mapping rules. + +OPTIONS + -d --destination= 3scale target instance. Format: + "http[s]://@3scale_url" + -f --force Overwrites the mapping rules by deleting + all rules from target service first + -r --rules-only Updates only the mapping rules + -s --source= 3scale source instance. Format: + "http[s]://@3scale_url" + +OPTIONS FOR UPDATE + -h --help show help for this command + -k --insecure Proceed and operate even for server + connections otherwise considered insecure + -v --version Prints the version of this command +``` + +Example: + +```shell +$ 3scale update service -s https://9874598743@source.example.com -d https://2342342342342@destination.example.com 3 2 +``` + ### Import from CSV -Will create a new services, metrics, methods and mapping rules. +Will create new services, metrics, methods, and mapping rules having as source comma separated values (CSV) formatted file. + +CSV header + +```csv +service_name,endpoint_name,endpoint_http_method,endpoint_path,auth_mode,endpoint_system_name,type +``` + +File example + +```csv +service_name,endpoint_name,endpoint_http_method,endpoint_path,auth_mode,endpoint_system_name,type +Movies ,Movies (Biography),GET,/movies/biography/,api_key,movies_biography,metric +Movies ,Movies (Drama),GET,/movies/drama/,api_key,movies_drama,method +``` + +Help message: + +```shell +$ 3scale import csv -h +NAME + csv - Import csv file + +USAGE + 3scale import csv [opts] -d -f + +DESCRIPTION + Create new services, metrics, methods and mapping rules from CSV + formatted file + +OPTIONS + -d --destination= 3scale target instance. Format: + "http[s]://@3scale_url" + -f --file= CSV formatted file + +OPTIONS FOR IMPORT + -h --help show help for this command + -k --insecure Proceed and operate even for server + connections otherwise considered insecure + -v --version Prints the version of this command +``` + +Example: ```shell 3scale import csv --destination=https://provider_key@user-admin.3scale.net --file=examples/import_example.csv diff --git a/lib/3scale_toolbox/commands/3scale_command.rb b/lib/3scale_toolbox/commands/3scale_command.rb index 103d5ad7..63a51b92 100644 --- a/lib/3scale_toolbox/commands/3scale_command.rb +++ b/lib/3scale_toolbox/commands/3scale_command.rb @@ -17,6 +17,10 @@ def self.command exit end flag :k, :insecure, 'Proceed and operate even for server connections otherwise considered insecure' + flag :h, :help, 'show help for this command' do |_, cmd| + puts cmd.help + exit 0 + end end end end diff --git a/lib/3scale_toolbox/commands/copy_command.rb b/lib/3scale_toolbox/commands/copy_command.rb index da0836e6..2d48ddea 100644 --- a/lib/3scale_toolbox/commands/copy_command.rb +++ b/lib/3scale_toolbox/commands/copy_command.rb @@ -10,12 +10,8 @@ def self.command Cri::Command.define do name 'copy' usage 'copy [options]' - summary '3scale CLI copy' - description '3scale CLI copy tools to manage your API from the terminal.' - flag :h, :help, 'show help for this command' do |_, cmd| - puts cmd.help - exit 0 - end + summary '3scale copy command' + description '3scale copy command.' end end add_subcommand(CopyServiceSubcommand) diff --git a/lib/3scale_toolbox/commands/copy_command/copy_service.rb b/lib/3scale_toolbox/commands/copy_command/copy_service.rb index ed334dc9..dcf4cf90 100644 --- a/lib/3scale_toolbox/commands/copy_command/copy_service.rb +++ b/lib/3scale_toolbox/commands/copy_command/copy_service.rb @@ -9,17 +9,12 @@ module CopyServiceSubcommand def self.command Cri::Command.define do name 'service' - usage 'service [options] ' - summary '3scale CLI copy service' - description '3scale CLI copy service tool' + usage 'service [opts] -s -d ' + summary 'Copy service' + description 'Will create a new services, copy existing proxy settings, metrics, methods, application plans and mapping rules.' - flag :h, :help, 'show help for this command' do |_, cmd| - puts cmd.help - exit 0 - end - - required :s, :source, 'Source' - required :d, :destination, 'Destination' + required :s, :source, '3scale source instance. Format: "http[s]://@3scale_url"' + required :d, :destination, '3scale target instance. Format: "http[s]://@3scale_url"' required :t, 'target_system_name', 'Target system name' run do |opts, args, _| diff --git a/lib/3scale_toolbox/commands/import_command.rb b/lib/3scale_toolbox/commands/import_command.rb index 854b82da..4521b54c 100644 --- a/lib/3scale_toolbox/commands/import_command.rb +++ b/lib/3scale_toolbox/commands/import_command.rb @@ -10,13 +10,8 @@ def self.command Cri::Command.define do name 'import' usage 'import [options]' - summary '3scale CLI import' - description '3scale CLI import tools to manage your API from the terminal.' - - flag :h, :help, 'show help for this command' do |_, cmd| - puts cmd.help - exit 0 - end + summary '3scale import command' + description '3scale import command.' end end add_subcommand(ImportCsvSubcommand) diff --git a/lib/3scale_toolbox/commands/import_command/import_csv.rb b/lib/3scale_toolbox/commands/import_command/import_csv.rb index 977bcd7a..376ea439 100644 --- a/lib/3scale_toolbox/commands/import_command/import_csv.rb +++ b/lib/3scale_toolbox/commands/import_command/import_csv.rb @@ -12,17 +12,12 @@ module ImportCsvSubcommand def self.command Cri::Command.define do name 'csv' - usage 'csv [options]' - summary '3scale CLI import csv' - description '3scale CLI import csv tool' + usage 'csv [opts] -d -f ' + summary 'Import csv file' + description 'Create new services, metrics, methods and mapping rules from CSV formatted file' - flag :h, :help, 'show help for this command' do |_, cmd| - puts cmd.help - exit 0 - end - - required :d, :destination, 'Destination' - required :f, 'file', 'File' + required :d, :destination, '3scale target instance. Format: "http[s]://@3scale_url"' + required :f, 'file', 'CSV formatted file' run do |opts, args, _| ImportCsvSubcommand.run opts, args diff --git a/lib/3scale_toolbox/commands/update_command.rb b/lib/3scale_toolbox/commands/update_command.rb index d0b0903e..dd6d44ca 100644 --- a/lib/3scale_toolbox/commands/update_command.rb +++ b/lib/3scale_toolbox/commands/update_command.rb @@ -10,13 +10,8 @@ def self.command Cri::Command.define do name 'update' usage 'update [options]' - summary '3scale CLI update' - description '3scale CLI update tools to manage your API from the terminal.' - - flag :h, :help, 'show help for this command' do |_, cmd| - puts cmd.help - exit 0 - end + summary '3scale update command' + description '3scale update command.' end end add_subcommand(UpdateServiceSubcommand) diff --git a/lib/3scale_toolbox/commands/update_command/update_service.rb b/lib/3scale_toolbox/commands/update_command/update_service.rb index ec722409..0191330c 100644 --- a/lib/3scale_toolbox/commands/update_command/update_service.rb +++ b/lib/3scale_toolbox/commands/update_command/update_service.rb @@ -9,19 +9,13 @@ module UpdateServiceSubcommand def self.command Cri::Command.define do name 'service' - usage 'service [options] ' - summary '3scale CLI update service' - description '3scale CLI update service tool' + usage 'service [opts] -s -d ' + summary 'Update service' + description 'Will update existing service, update proxy settings, metrics, methods, application plans and mapping rules.' - flag :h, :help, 'show help for this command' do |_, cmd| - puts cmd.help - exit 0 - end - - required :s, :source, 'Source' - required :d, :destination, 'Destination' + required :s, :source, '3scale source instance. Format: "http[s]://@3scale_url"' + required :d, :destination, '3scale target instance. Format: "http[s]://@3scale_url"' flag :f, :force, 'Overwrites the mapping rules by deleting all rules from target service first' - # TODO: parametrize what parts of service need to be copied flag :r, 'rules-only', 'Updates only the mapping rules' run do |opts, args, _|