class ThreeScaleToolbox::Commands::ServiceCommand::CopySubcommand

Public Class Methods

command() click to toggle source
# File lib/3scale_toolbox/commands/service_command/copy_command.rb, line 21
        def self.command
          Cri::Command.define do
            name        'copy'
            usage       'copy [opts] -s <src> -d <dst> <source-service>'
            summary     'Copy service'
            description <<-HEREDOC
            This command makes a copy of the referenced service.
            Target service will be searched by source service system name. System name can be overriden with `--target_system_name` option.
            If a service with the selected `system_name` is not found, it will be created.
            \n Components of the service being copied:
            \nservice settings
            \nproxy settings
            \npricing rules
            \nactivedocs
            \nmetrics
            \nmethods
            \napplication plans
            \nmapping rules
            HEREDOC

            option  :s, :source, '3scale source instance. Url or remote name', argument: :required
            option  :d, :destination, '3scale target instance. Url or remote name', argument: :required
            option  :t, 'target_system_name', 'Target system name. Default to source system name', argument: :required
            flag    :f, :force, 'Overwrites the mapping rules by deleting all rules from target service first'
            flag    :r, 'rules-only', 'Only mapping rules are copied'
            param   :source_service

            runner CopySubcommand
          end
        end

Public Instance Methods

run() click to toggle source
# File lib/3scale_toolbox/commands/service_command/copy_command.rb, line 52
def run
  tasks = []
  unless option_rules_only
    tasks << CopyCommand::CreateOrUpdateTargetServiceTask.new(context)
    tasks << CopyCommand::CopyServiceProxyTask.new(context)
    tasks << CopyCommand::CopyMethodsTask.new(context)
    tasks << CopyCommand::CopyMetricsTask.new(context)
    tasks << CopyCommand::CopyApplicationPlansTask.new(context)
    tasks << CopyCommand::CopyLimitsTask.new(context)
    tasks << CopyCommand::CopyPoliciesTask.new(context)
    tasks << CopyCommand::CopyPricingRulesTask.new(context)
    tasks << CopyCommand::CopyActiveDocsTask.new(context)
  end
  tasks << CopyCommand::DestroyMappingRulesTask.new(context)
  tasks << CopyCommand::CopyMappingRulesTask.new(context)
  tasks.each(&:call)

  # This should be the last step
  CopyCommand::BumpProxyVersionTask.new(service: context[:target]).call
end

Private Instance Methods

context() click to toggle source
# File lib/3scale_toolbox/commands/service_command/copy_command.rb, line 75
def context
  @context ||= create_context
end
create_context() click to toggle source
# File lib/3scale_toolbox/commands/service_command/copy_command.rb, line 79
def create_context
  {
    source_remote: threescale_client(fetch_required_option(:source)),
    target_remote: threescale_client(fetch_required_option(:destination)),
    source_service_ref: arguments[:source_service],
    option_target_system_name: options[:target_system_name],
    delete_mapping_rules: options[:force]
  }
end
option_rules_only() click to toggle source
# File lib/3scale_toolbox/commands/service_command/copy_command.rb, line 89
def option_rules_only
  options[:'rules-only']
end