19 lines
399 B
Ruby
19 lines
399 B
Ruby
# frozen_string_literal: true
|
|
|
|
class PortPool
|
|
PORT_RANGE = DockerClient.config[:ports]
|
|
|
|
@available_ports = PORT_RANGE.to_a
|
|
@mutex = Mutex.new
|
|
|
|
def self.available_port
|
|
@mutex.synchronize do
|
|
@available_ports.delete(@available_ports.sample)
|
|
end
|
|
end
|
|
|
|
def self.release(port)
|
|
@available_ports << port if PORT_RANGE.include?(port) && @available_ports.exclude?(port)
|
|
end
|
|
end
|