parse_options!

in files/gitlab-ctl-commands-ee/replicate_geo_database.rb [43:117]


  def parse_options!
    opts_parser = OptionParser.new do |opts|
      opts.banner = 'Usage: gitlab-ctl replicate-geo-database [options]'

      opts.separator ''
      opts.separator 'Specific @options:'

      opts.on('--host=HOST', 'Hostname address of the primary node') do |host|
        @options[:host] = host
      end

      opts.on('--user[=USER]', 'Specify a different replication user') do |user|
        @options[:user] = user
      end

      opts.on('--port[=PORT]', 'Specify a different PostgreSQL port') do |port|
        @options[:port] = port
      end

      opts.on('--slot-name[=SLOT-NAME]', 'PostgreSQL replication slot name') do |slot_name|
        @options[:slot_name] = slot_name
      end

      opts.on('--no-wait', 'Do not ask for confirmation before starting the replication process') do
        @options[:now] = true
      end

      opts.on('--backup-timeout[=BACKUP_TIMEOUT]', 'Specify the timeout for the initial database backup from the primary') do |backup_timeout|
        @options[:backup_timeout] = backup_timeout.to_i
      end

      opts.on('--force', 'Disable existing database even if instance is not empty') do
        @options[:force] = true
      end

      opts.on('--skip-backup', 'Skip the backup before starting the replication process') do
        @options[:skip_backup] = true
      end

      opts.on('--skip-replication-slot', 'Skip the check and creation of replication slot') do
        @options[:skip_replication_slot] = true
      end

      opts.on('--sslmode=MODE', 'Choose the level of protection the connection between primary and secondary has') do |sslmode|
        @options[:sslmode] = sslmode
      end

      opts.on('--sslcompression=1', 'Enable SSL compression (disabled by default for performance and security)') do |sslcompression|
        @options[:sslcompression] = sslcompression.to_i
      end

      opts.on('--recovery-target-timeline=latest', 'Specify the PostgreSQL recovery target timeline (see https://www.postgresql.org/docs/12/recovery-target-settings.html)') do |timeline|
        @options[:recovery_target_timeline] = timeline
      end

      opts.on('--db_name=gitlabhq_production', 'Specify the database name') do |db_name|
        @options[:db_name] = db_name
      end

      opts.on_tail('-h', '--help', 'Show this message') do
        puts opts
        exit
      end
    end

    opts_parser.parse!(arguments)

    raise OptionParser::MissingArgument, :host unless @options.fetch(:host)
    raise OptionParser::MissingArgument, '--slot-name' unless @options[:skip_replication_slot] || @options.fetch(:slot_name)
  rescue OptionParser::InvalidOption, OptionParser::MissingArgument
    puts $ERROR_INFO.to_s
    puts opts_parser
    exit 1
  end