self.parse_options

in files/gitlab-ctl-commands-ee/lib/geo.rb [18:70]


  def self.parse_options(args)
    loop do
      break if args.shift == 'geo'
    end

    options = {}

    global = OptionParser.new do |opts|
      opts.banner = 'geo [options] command [options]'

      opts.on('-q', '--quiet', 'Silent or quiet mode') do |q|
        options[:quiet] = q
      end

      opts.on('-v', '--verbose', 'Verbose or debug mode') do |v|
        options[:verbose] = v
      end

      opts.on('-h', '--help', 'Usage help') do
        Utils.warn_and_exit usage
      end
    end

    commands = {
      'promote' => OptionParser.new do |opts|
        opts.on('-h', '--help', 'Prints this help') do
          Utils.warn_and_exit opts
        end

        opts.on('--enable-silent-mode', 'Enable GitLab Silent Mode') do |e|
          options[:enable_silent_mode] = e
        end

        opts.on('-f', '--force', 'Proceed with no confirmation') do |f|
          options[:force] = f
        end
      end
    }

    global.order! args
    command = args.shift

    raise OptionParser::ParseError, "Geo command is not specified." \
      if command.nil? || command.empty?

    raise OptionParser::ParseError, "Unknown Geo command: #{command}" \
      unless commands.key? command

    options[:command] = command
    commands[command].order! args
    options
  end