Class: HybridPlatformsConductor::HpcPlugins::SecretsReader::Cli

Inherits:
SecretsReader show all
Defined in:
lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/cli.rb

Overview

Get secrets from the command-line

Constant Summary

Constants included from LoggerHelpers

LoggerHelpers::LEVELS_MODIFIERS, LoggerHelpers::LEVELS_TO_STDERR

Instance Method Summary collapse

Methods inherited from Plugin

extend_config_dsl_with, valid?

Methods included from LoggerHelpers

#err, #init_loggers, #log_component=, #log_debug?, #log_level=, #out, #section, #set_loggers_format, #stderr_device, #stderr_device=, #stderr_displayed?, #stdout_device, #stdout_device=, #stdout_displayed?, #stdouts_to_s, #with_progress_bar

Constructor Details

#initialize(logger: Logger.new($stdout), logger_stderr: Logger.new($stderr), config: Config.new, cmd_runner: CmdRunner.new, nodes_handler: NodesHandler.new) ⇒ Cli

Constructor

Parameters
  • logger (Logger): Logger to be used [default: Logger.new(STDOUT)]

  • logger_stderr (Logger): Logger to be used for stderr [default: Logger.new(STDERR)]

  • config (Config): Config to be used. [default: Config.new]

  • cmd_runner (CmdRunner): CmdRunner to be used. [default: CmdRunner.new]

  • nodes_handler (NodesHandler): Nodes handler to be used. [default: NodesHandler.new]



20
21
22
23
24
25
26
27
28
29
# File 'lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/cli.rb', line 20

def initialize(
  logger: Logger.new($stdout),
  logger_stderr: Logger.new($stderr),
  config: Config.new,
  cmd_runner: CmdRunner.new,
  nodes_handler: NodesHandler.new
)
  super
  @secrets_files = []
end

Instance Method Details

#options_parse(options_parser) ⇒ Object

Complete an option parser with options meant to control this secrets reader

API
  • This method is optional

Parameters
  • options_parser (OptionParser): The option parser to complete



36
37
38
39
40
# File 'lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/cli.rb', line 36

def options_parse(options_parser)
  options_parser.on('-e', '--secrets JSON_FILE', 'Specify a secrets location from a local JSON file. Can be specified several times.') do |file|
    @secrets_files << file
  end
end

#secrets_for(_node, _service) ⇒ Object

Return secrets for a given service to be deployed on a node.

API
  • This method is mandatory

API
  • The following API components are accessible:

  • *@config* (Config): Main configuration API.

  • *@cmd_runner* (CmdRunner): Command Runner API.

  • *@nodes_handler* (NodesHandler): Nodes handler API.

Parameters
  • node (String): Node to be deployed

  • service (String): Service to be deployed

Result
  • Hash: The secrets



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/cli.rb', line 54

def secrets_for(_node, _service)
  # As we are dealing with global secrets, cache the reading for performance between nodes and services.
  unless defined?(@secrets)
    @secrets = {}
    @secrets_files.each do |secrets_file|
      raise "Missing secrets file: #{secrets_file}" unless File.exist?(secrets_file)

      @secrets.merge!(JSON.parse(File.read(secrets_file))) do |key, value_1, value_2|
        raise "Secret #{key} has conflicting values between different secret JSON files." if value_1 != value_2

        value_1
      end
    end
  end
  @secrets
end