def add(host, add_options=nil)
      address = Address.new(host, options)
      if !addresses.include?(address)
        server = Server.new(address, self, @monitoring, event_listeners, options.merge(
          monitor: false))
        @update_lock.synchronize { @servers.push(server) }
        if add_options.nil? || add_options[:monitor] != false
          server.start_monitoring
        end
        server
      end
    end
def add(host, add_options=nil)
      address = Address.new(host, options)
      if !addresses.include?(address)
        server = Server.new(address, self, @monitoring, event_listeners, options.merge(
          monitor: false))
        @update_lock.synchronize { @servers.push(server) }
        if add_options.nil? || add_options[:monitor] != false
          server.start_monitoring
        end
        server
      end
    end
Add a server to the cluster with the provided address. Useful in
 auto-discovery of new servers when an existing server executes an ismaster
 and potentially non-configured servers were included.

 @example Add the server for the address to the cluster.
   cluster.add('127.0.0.1:27018')

 @param [ String ] host The address of the server to add.

 @option options [ Boolean ] :monitor For internal driver use only:
   whether to monitor the newly added server.

 @return [ Server ] The newly added server, if not present already.

 @since 2.0.0