Class: HybridPlatformsConductor::PlatformsHandler
- Inherits:
-
Object
- Object
- HybridPlatformsConductor::PlatformsHandler
- Includes:
- LoggerHelpers
- Defined in:
- lib/hybrid_platforms_conductor/platforms_handler.rb
Overview
Provide an API to access information given by Platform Handlers
Defined Under Namespace
Modules: ConfigDSLExtension
Constant Summary
Constants included from LoggerHelpers
LoggerHelpers::LEVELS_MODIFIERS, LoggerHelpers::LEVELS_TO_STDERR
Instance Method Summary collapse
-
#initialize(logger: Logger.new(STDOUT), logger_stderr: Logger.new(STDERR), config: Config.new, cmd_runner: CmdRunner.new) ⇒ PlatformsHandler
constructor
Constructor.
-
#inject_dependencies(nodes_handler: NodesHandler.new, actions_executor: ActionsExecutor.new) ⇒ Object
Inject dependencies that can’t be set at initialization time.
-
#known_platforms(platform_type: nil) ⇒ Object
Get the list of known platforms.
-
#platform(platform_name) ⇒ Object
Return the platform handler for a given platform name.
-
#platform_types ⇒ Object
The list of registered platform handler classes, per platform type.
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) ⇒ PlatformsHandler
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): Command executor to be used. [default: CmdRunner.new]
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/hybrid_platforms_conductor/platforms_handler.rb', line 34 def initialize( logger: Logger.new(STDOUT), logger_stderr: Logger.new(STDERR), config: Config.new, cmd_runner: CmdRunner.new ) init_loggers(logger, logger_stderr) @config = config @cmd_runner = cmd_runner @platform_types = Plugins.new(:platform_handler, logger: @logger, logger_stderr: @logger_stderr) # Keep a list of instantiated platform handlers per platform type # Hash<Symbol, Array<PlatformHandler> > @platform_handlers = {} # Read all platforms from the config @config.platform_dirs.each do |platform_type, repositories| repositories.each do |repository_path| platform_handler = @platform_types[platform_type].new( platform_type, repository_path, logger: @logger, logger_stderr: @logger_stderr, config: @config, cmd_runner: @cmd_runner ) # Check that this platform has unique name raise "Platform name #{platform_handler.name} is declared several times." if @platform_handlers.values.flatten.any? { |known_platform| known_platform.name == platform_handler.name } @platform_handlers[platform_type] = [] unless @platform_handlers.key?(platform_type) @platform_handlers[platform_type] << platform_handler end end end |
Instance Method Details
#inject_dependencies(nodes_handler: NodesHandler.new, actions_executor: ActionsExecutor.new) ⇒ Object
Inject dependencies that can’t be set at initialization time. This is due to the fact that a PlatformHandler is a single plugin handling both inventory and services from a single repository. If we split those plugins into an inventory-type plugin and service-type plugin, each part could be initialized without having cyclic dependencies. The inventory-type part does not need NodesHandler nor ActionsExecutor (as it would be used by NodesHandler). The service-type part would use NodesHandler and ActionsExecutor given to its initializer. TODO: Split this plugin type in 2 to avoid this late dependency injection.
- Parameters
-
nodes_handler (NodesHandler): Nodes handler to be used. [default: NodesHandler.new]
-
actions_executor (ActionsExecutor): Actions Executor to be used. [default: ActionsExecutor.new]
104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/hybrid_platforms_conductor/platforms_handler.rb', line 104 def inject_dependencies( nodes_handler: NodesHandler.new, actions_executor: ActionsExecutor.new ) @nodes_handler = nodes_handler @actions_executor = actions_executor @platform_handlers.values.flatten.each do |platform| platform.nodes_handler = @nodes_handler platform.actions_executor = @actions_executor end end |
#known_platforms(platform_type: nil) ⇒ Object
Get the list of known platforms
- Parameters
-
platform_type (Symbol or nil): Filter only platforms of a given platform type, or nil for all platforms [default: nil]
- Result
-
Array<PlatformHandler>: List of platform handlers
80 81 82 |
# File 'lib/hybrid_platforms_conductor/platforms_handler.rb', line 80 def known_platforms(platform_type: nil) (platform_type.nil? ? @platform_handlers.keys : [platform_type]).map { |platform_type| (@platform_handlers[platform_type] || []) }.flatten end |
#platform(platform_name) ⇒ Object
Return the platform handler for a given platform name
- Parameters
-
platform_name (String): The platform name
- Result
-
PlatformHandler or nil: Corresponding platform handler, or nil if none
90 91 92 |
# File 'lib/hybrid_platforms_conductor/platforms_handler.rb', line 90 def platform(platform_name) @platform_handlers.values.flatten.find { |known_platform| known_platform.name == platform_name } end |
#platform_types ⇒ Object
The list of registered platform handler classes, per platform type.
- Result
-
Hash<Symbol,Class>: The list of registered platform handler classes, per platform type.
70 71 72 |
# File 'lib/hybrid_platforms_conductor/platforms_handler.rb', line 70 def platform_types @platform_types.to_hash end |