class K8sInternalLb::Services::TCP

Attributes

addresses[RW]
timeout[RW]

Public Class Methods

new(addresses:, timeout: 1, **params) click to toggle source
Calls superclass method K8sInternalLb::Service::new
# File lib/k8s_internal_lb/services/tcp.rb, line 11
def initialize(addresses:, timeout: 1, **params)
  super

  @addresses = addresses
  @timeout = timeout
end

Public Instance Methods

update() click to toggle source
# File lib/k8s_internal_lb/services/tcp.rb, line 18
def update
  raise 'No TCP ports provided' if ports.select(&:tcp?).empty?

  @endpoints = addresses.map do |addr|
    ports.select(&:tcp?).map do |port|
      available = \
        begin
          Timeout.timeout(timeout) do
            begin
              TCPSocket.new(addr.ip.to_s, port.port).close
              true
            rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
              false
            end
          end
        rescue Timeout::Error
          false
        end

      Endpoint.new address: addr, port: port, status: available
    end
  end.flatten

  true
end