class OnContainer::Secrets::GoogleCloud::Fetcher

Constants

PROJECT_PATTERN
SECRET_NAME_PATTERN
SECRET_VERSION_PATTERN

Attributes

project[R]
secret_name[R]
secret_version[R]

Public Class Methods

new(given_key, client: nil) click to toggle source
# File lib/on_container/secrets/google_cloud/fetcher.rb, line 16
def initialize(given_key, client: nil)
  @client = client
  @project = extract_project given_key
  @secret_version = extract_secret_version given_key
  @secret_name = extract_secret_name given_key
end

Public Instance Methods

perform!() click to toggle source
# File lib/on_container/secrets/google_cloud/fetcher.rb, line 23
def perform!
  # Build the resource name of the secret version.
  name = client.secret_version_path project:        @project,
                                    secret:         @secret_name,
                                    secret_version: @secret_version
      
  version = client.access_secret_version name: name
      
  YAML.load version.payload.data
end

Protected Instance Methods

default_project() click to toggle source
# File lib/on_container/secrets/google_cloud/fetcher.rb, line 36
def default_project
  ENV['GOOGLE_CLOUD_PROJECT']
end
extract_project(given_key) click to toggle source
# File lib/on_container/secrets/google_cloud/fetcher.rb, line 40
def extract_project(given_key)
  match = given_key.match(PROJECT_PATTERN)
  return default_project unless match
    
  match.captures.first
end
extract_secret_name(given_key) click to toggle source
# File lib/on_container/secrets/google_cloud/fetcher.rb, line 54
def extract_secret_name(given_key)
  given_key
    .sub("projects/#{@project}/secrets/", '')
    .sub("/versions/#{@secret_version}", '')
end
extract_secret_version(given_key) click to toggle source
# File lib/on_container/secrets/google_cloud/fetcher.rb, line 47
def extract_secret_version(given_key)
  match = given_key.match(SECRET_VERSION_PATTERN)
  return 'latest' unless match
    
  match.captures.first
end