Class: Kettle::Family::Secrets::Broker

Inherits:
Object
  • Object
show all
Defined in:
lib/kettle/family/secrets_broker.rb

Overview

Serves release secret requests from member kettle-release processes. The family owns the configured provider and serializes all requests so one release session is shared across sequential and parallel waves.

Constant Summary collapse

OPERATIONS =
%w[gem_signing_passphrase rubygems_otp].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(provider:, root:) ⇒ Broker

Returns a new instance of Broker.



19
20
21
22
23
24
25
26
# File 'lib/kettle/family/secrets_broker.rb', line 19

def initialize(provider:, root:)
  @provider = provider
  directory = File.join(root, "tmp", "kettle-family")
  FileUtils.mkdir_p(directory, mode: 0o700)
  @path = File.join(directory, "secrets-#{SecureRandom.hex(8)}.sock")
  @mutex = Mutex.new
  @closed = false
end

Instance Attribute Details

#pathObject (readonly)

Returns the value of attribute path.



17
18
19
# File 'lib/kettle/family/secrets_broker.rb', line 17

def path
  @path
end

Instance Method Details

#closeObject



38
39
40
41
42
43
44
45
# File 'lib/kettle/family/secrets_broker.rb', line 38

def close
  @closed = true
  @server&.close
  @thread&.join(1)
ensure
  @thread&.kill if @thread&.alive?
  FileUtils.rm_f(@path)
end

#startObject



28
29
30
31
32
33
34
35
36
# File 'lib/kettle/family/secrets_broker.rb', line 28

def start
  @server = UNIXServer.new(@path)
  File.chmod(0o600, @path)
  @thread = Thread.new { serve } # rubocop:disable ThreadSafety/NewThread -- Broker owns one listener for the family release session.
  self
rescue
  close
  raise
end