hybrid_platforms_conductor 32.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/check-node +24 -0
- data/bin/deploy +12 -0
- data/bin/dump_nodes_json +12 -0
- data/bin/free_ips +23 -0
- data/bin/free_veids +17 -0
- data/bin/get_impacted_nodes +43 -0
- data/bin/last_deploys +56 -0
- data/bin/nodes_to_deploy +104 -0
- data/bin/report +10 -0
- data/bin/run +39 -0
- data/bin/setup +11 -0
- data/bin/ssh_config +14 -0
- data/bin/test +13 -0
- data/bin/topograph +54 -0
- data/lib/hybrid_platforms_conductor/action.rb +82 -0
- data/lib/hybrid_platforms_conductor/actions_executor.rb +307 -0
- data/lib/hybrid_platforms_conductor/bitbucket.rb +123 -0
- data/lib/hybrid_platforms_conductor/cmd_runner.rb +188 -0
- data/lib/hybrid_platforms_conductor/cmdb.rb +34 -0
- data/lib/hybrid_platforms_conductor/common_config_dsl/bitbucket.rb +78 -0
- data/lib/hybrid_platforms_conductor/common_config_dsl/confluence.rb +43 -0
- data/lib/hybrid_platforms_conductor/common_config_dsl/file_system_tests.rb +110 -0
- data/lib/hybrid_platforms_conductor/common_config_dsl/idempotence_tests.rb +38 -0
- data/lib/hybrid_platforms_conductor/config.rb +263 -0
- data/lib/hybrid_platforms_conductor/confluence.rb +119 -0
- data/lib/hybrid_platforms_conductor/connector.rb +84 -0
- data/lib/hybrid_platforms_conductor/credentials.rb +127 -0
- data/lib/hybrid_platforms_conductor/current_dir_monitor.rb +42 -0
- data/lib/hybrid_platforms_conductor/deployer.rb +598 -0
- data/lib/hybrid_platforms_conductor/executable.rb +145 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/action/bash.rb +44 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/action/interactive.rb +44 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/action/my_action.rb.sample +79 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/action/remote_bash.rb +63 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/action/ruby.rb +69 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/action/scp.rb +61 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/config.rb +78 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_ip.rb +104 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_keys.rb +114 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/my_cmdb.rb.sample +129 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/platform_handlers.rb +66 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/connector/my_connector.rb.sample +156 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/connector/ssh.rb +702 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/platform_handler_plugin.rb.sample +292 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/docker.rb +148 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/my_provisioner.rb.sample +103 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/podman.rb +125 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox.rb +522 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/proxmox_waiter.rb +707 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/reserve_proxmox_container +122 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/report/confluence.rb +69 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/report/mediawiki.rb +164 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/report/my_report_plugin.rb.sample +88 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/report/stdout.rb +61 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/report/templates/confluence_inventory.html.erb +33 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/bitbucket_conf.rb +137 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/can_be_checked.rb +21 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/check_deploy_and_idempotence.rb +112 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/check_from_scratch.rb +35 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/connection.rb +28 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_freshness.rb +44 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_from_scratch.rb +36 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_removes_root_access.rb +49 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/divergence.rb +25 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/executables.rb +46 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system.rb +45 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system_hdfs.rb +45 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/hostname.rb +25 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/idempotence.rb +77 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/ip.rb +38 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_conf.rb +56 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_masters_ok.rb +54 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/linear_strategy.rb +47 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/local_users.rb +82 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/mounts.rb +120 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/my_test_plugin.rb.sample +143 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/orphan_files.rb +74 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/ports.rb +85 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/private_ips.rb +38 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/public_ips.rb +38 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/spectre-meltdown-checker.sh +1930 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/spectre.rb +56 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/veids.rb +31 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/vulnerabilities.rb +159 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/confluence.rb +122 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/my_test_report.rb.sample +48 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/stdout.rb +120 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/templates/_confluence_errors_status.html.erb +46 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/templates/_confluence_gauge.html.erb +49 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/templates/confluence.html.erb +242 -0
- data/lib/hybrid_platforms_conductor/io_router.rb +70 -0
- data/lib/hybrid_platforms_conductor/json_dumper.rb +88 -0
- data/lib/hybrid_platforms_conductor/logger_helpers.rb +319 -0
- data/lib/hybrid_platforms_conductor/mutex_dir +76 -0
- data/lib/hybrid_platforms_conductor/nodes_handler.rb +597 -0
- data/lib/hybrid_platforms_conductor/parallel_threads.rb +97 -0
- data/lib/hybrid_platforms_conductor/platform_handler.rb +188 -0
- data/lib/hybrid_platforms_conductor/platforms_handler.rb +118 -0
- data/lib/hybrid_platforms_conductor/plugin.rb +53 -0
- data/lib/hybrid_platforms_conductor/plugins.rb +101 -0
- data/lib/hybrid_platforms_conductor/provisioner.rb +181 -0
- data/lib/hybrid_platforms_conductor/report.rb +31 -0
- data/lib/hybrid_platforms_conductor/reports_handler.rb +84 -0
- data/lib/hybrid_platforms_conductor/services_handler.rb +274 -0
- data/lib/hybrid_platforms_conductor/test.rb +141 -0
- data/lib/hybrid_platforms_conductor/test_by_service.rb +22 -0
- data/lib/hybrid_platforms_conductor/test_report.rb +282 -0
- data/lib/hybrid_platforms_conductor/tests_runner.rb +590 -0
- data/lib/hybrid_platforms_conductor/thycotic.rb +92 -0
- data/lib/hybrid_platforms_conductor/topographer.rb +859 -0
- data/lib/hybrid_platforms_conductor/topographer/plugin.rb +20 -0
- data/lib/hybrid_platforms_conductor/topographer/plugins/graphviz.rb +127 -0
- data/lib/hybrid_platforms_conductor/topographer/plugins/json.rb +72 -0
- data/lib/hybrid_platforms_conductor/topographer/plugins/my_topographer_output_plugin.rb.sample +37 -0
- data/lib/hybrid_platforms_conductor/topographer/plugins/svg.rb +30 -0
- data/lib/hybrid_platforms_conductor/version.rb +5 -0
- data/spec/hybrid_platforms_conductor_test.rb +159 -0
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/bash_spec.rb +43 -0
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/interactive_spec.rb +18 -0
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/remote_bash_spec.rb +102 -0
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/ruby_spec.rb +108 -0
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/scp_spec.rb +79 -0
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions_spec.rb +199 -0
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connection_spec.rb +212 -0
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/cli_options_spec.rb +125 -0
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/config_dsl_spec.rb +50 -0
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connectable_nodes_spec.rb +28 -0
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connections_spec.rb +448 -0
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/global_helpers_spec.rb +313 -0
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/node_helpers_spec.rb +32 -0
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/remote_actions_spec.rb +134 -0
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/logging_spec.rb +256 -0
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/parallel_spec.rb +338 -0
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/timeout_spec.rb +101 -0
- data/spec/hybrid_platforms_conductor_test/api/cmd_runner_spec.rb +165 -0
- data/spec/hybrid_platforms_conductor_test/api/config_spec.rb +238 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/check_spec.rb +9 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/deploy_spec.rb +243 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/parse_deploy_output_spec.rb +104 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioner_spec.rb +131 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/docker/Dockerfile +10 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/docker_spec.rb +123 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/podman_spec.rb +211 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/config_dsl_spec.rb +126 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/create_spec.rb +290 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/destroy_spec.rb +43 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/ip_spec.rb +60 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/proxmox.json +3 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/destroy_vm_spec.rb +82 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/expired_containers_spec.rb +786 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/ips_assignment_spec.rb +112 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/other_lxc_containers_resources_spec.rb +190 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/pve_node_resources_spec.rb +200 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/retries_spec.rb +35 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/vm_ids_assignment_spec.rb +67 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/start_spec.rb +79 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/state_spec.rb +28 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/stop_spec.rb +41 -0
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/config_spec.rb +33 -0
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_ip_spec.rb +64 -0
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_keys_spec.rb +133 -0
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/platform_handlers_spec.rb +19 -0
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs_plugins_api_spec.rb +446 -0
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/common_spec.rb +127 -0
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/git_diff_impacts_spec.rb +318 -0
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/nodes_selectors_spec.rb +132 -0
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/platform_handlers_plugins_api_spec.rb +60 -0
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/several_platforms_spec.rb +58 -0
- data/spec/hybrid_platforms_conductor_test/api/platform_handler_spec.rb +97 -0
- data/spec/hybrid_platforms_conductor_test/api/platforms_handler_spec.rb +104 -0
- data/spec/hybrid_platforms_conductor_test/api/plugins_spec.rb +243 -0
- data/spec/hybrid_platforms_conductor_test/api/reports_handler_spec.rb +44 -0
- data/spec/hybrid_platforms_conductor_test/api/services_handler/actions_to_deploy_spec.rb +121 -0
- data/spec/hybrid_platforms_conductor_test/api/services_handler/deploy_allowed_spec.rb +142 -0
- data/spec/hybrid_platforms_conductor_test/api/services_handler/log_info_spec.rb +101 -0
- data/spec/hybrid_platforms_conductor_test/api/services_handler/package_spec.rb +388 -0
- data/spec/hybrid_platforms_conductor_test/api/services_handler/parse_deploy_output_spec.rb +274 -0
- data/spec/hybrid_platforms_conductor_test/api/services_handler/prepare_for_deploy_spec.rb +264 -0
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/common_spec.rb +194 -0
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/global_spec.rb +37 -0
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_check_spec.rb +194 -0
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_spec.rb +137 -0
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_ssh_spec.rb +257 -0
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/platform_spec.rb +110 -0
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/reports_spec.rb +367 -0
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/bitbucket_conf_spec.rb +111 -0
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_reports_plugins/confluence_spec.rb +29 -0
- data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb.rb +166 -0
- data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb2.rb +93 -0
- data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb_others.rb +60 -0
- data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb_others2.rb +58 -0
- data/spec/hybrid_platforms_conductor_test/executables/check-node_spec.rb +35 -0
- data/spec/hybrid_platforms_conductor_test/executables/deploy_spec.rb +35 -0
- data/spec/hybrid_platforms_conductor_test/executables/get_impacted_nodes_spec.rb +158 -0
- data/spec/hybrid_platforms_conductor_test/executables/last_deploys_spec.rb +173 -0
- data/spec/hybrid_platforms_conductor_test/executables/nodes_to_deploy_spec.rb +283 -0
- data/spec/hybrid_platforms_conductor_test/executables/options/actions_executor_spec.rb +28 -0
- data/spec/hybrid_platforms_conductor_test/executables/options/cmd_runner_spec.rb +28 -0
- data/spec/hybrid_platforms_conductor_test/executables/options/common_spec.rb +67 -0
- data/spec/hybrid_platforms_conductor_test/executables/options/deployer_spec.rb +251 -0
- data/spec/hybrid_platforms_conductor_test/executables/options/nodes_handler_spec.rb +111 -0
- data/spec/hybrid_platforms_conductor_test/executables/options/nodes_selectors_spec.rb +71 -0
- data/spec/hybrid_platforms_conductor_test/executables/options/reports_handler_spec.rb +54 -0
- data/spec/hybrid_platforms_conductor_test/executables/options/tests_runner_spec.rb +139 -0
- data/spec/hybrid_platforms_conductor_test/executables/report_spec.rb +60 -0
- data/spec/hybrid_platforms_conductor_test/executables/run_spec.rb +173 -0
- data/spec/hybrid_platforms_conductor_test/executables/ssh_config_spec.rb +35 -0
- data/spec/hybrid_platforms_conductor_test/executables/test_spec.rb +41 -0
- data/spec/hybrid_platforms_conductor_test/helpers/actions_executor_helpers.rb +98 -0
- data/spec/hybrid_platforms_conductor_test/helpers/cmd_runner_helpers.rb +92 -0
- data/spec/hybrid_platforms_conductor_test/helpers/cmdb_helpers.rb +37 -0
- data/spec/hybrid_platforms_conductor_test/helpers/config_helpers.rb +20 -0
- data/spec/hybrid_platforms_conductor_test/helpers/connector_ssh_helpers.rb +130 -0
- data/spec/hybrid_platforms_conductor_test/helpers/deployer_helpers.rb +149 -0
- data/spec/hybrid_platforms_conductor_test/helpers/deployer_test_helpers.rb +812 -0
- data/spec/hybrid_platforms_conductor_test/helpers/executables_helpers.rb +96 -0
- data/spec/hybrid_platforms_conductor_test/helpers/nodes_handler_helpers.rb +20 -0
- data/spec/hybrid_platforms_conductor_test/helpers/platform_handler_helpers.rb +35 -0
- data/spec/hybrid_platforms_conductor_test/helpers/platforms_handler_helpers.rb +127 -0
- data/spec/hybrid_platforms_conductor_test/helpers/plugins_helpers.rb +48 -0
- data/spec/hybrid_platforms_conductor_test/helpers/provisioner_proxmox_helpers.rb +789 -0
- data/spec/hybrid_platforms_conductor_test/helpers/reports_handler_helpers.rb +29 -0
- data/spec/hybrid_platforms_conductor_test/helpers/services_handler_helpers.rb +20 -0
- data/spec/hybrid_platforms_conductor_test/helpers/tests_runner_helpers.rb +38 -0
- data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem/hpc_plugins/test_plugin_type/test_plugin_id1.rb +22 -0
- data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem/hpc_plugins/test_plugin_type/test_plugin_id2.rb +22 -0
- data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem2/sub_dir/hpc_plugins/test_plugin_type/test_plugin_id3.rb +26 -0
- data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem2/sub_dir/hpc_plugins/test_plugin_type2/test_plugin_id4.rb +26 -0
- data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/test.rb +225 -0
- data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/test2.rb +11 -0
- data/spec/hybrid_platforms_conductor_test/report_plugin.rb +35 -0
- data/spec/hybrid_platforms_conductor_test/test_action.rb +66 -0
- data/spec/hybrid_platforms_conductor_test/test_connector.rb +151 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/global.rb +30 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/node.rb +53 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/node_check.rb +47 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/node_ssh.rb +42 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/platform.rb +50 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/several_checks.rb +50 -0
- data/spec/hybrid_platforms_conductor_test/test_provisioner.rb +95 -0
- data/spec/hybrid_platforms_conductor_test/tests_report_plugin.rb +49 -0
- data/spec/spec_helper.rb +111 -0
- metadata +566 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
module HybridPlatformsConductor
|
|
2
|
+
|
|
3
|
+
module HpcPlugins
|
|
4
|
+
|
|
5
|
+
module Action
|
|
6
|
+
|
|
7
|
+
# Copy files and directories from the local host to the remote one
|
|
8
|
+
class Scp < HybridPlatformsConductor::Action
|
|
9
|
+
|
|
10
|
+
# Setup the action.
|
|
11
|
+
# This is called by the constructor itself, when an action is instantiated to be executed for a node.
|
|
12
|
+
# [API] - This method is optional
|
|
13
|
+
# [API] - @cmd_runner is accessible
|
|
14
|
+
# [API] - @actions_executor is accessible
|
|
15
|
+
#
|
|
16
|
+
# Parameters::
|
|
17
|
+
# * *mappings* (Hash<String or Symbol, Object>): Set of couples source => destination_dir to copy files or directories from the local file system to the remote file system.
|
|
18
|
+
# The following properties can also be used:
|
|
19
|
+
# * *sudo* (Boolean): Do we use sudo to make the copy? [default: false]
|
|
20
|
+
# * *owner* (String or nil): Owner to use for files, or nil to use current one [default: nil]
|
|
21
|
+
# * *group* (String or nil): Group to use for files, or nil to use current one [default: nil]
|
|
22
|
+
def setup(mappings)
|
|
23
|
+
@mappings = mappings
|
|
24
|
+
@sudo = @mappings.delete(:sudo) || false
|
|
25
|
+
@owner = @mappings.delete(:owner)
|
|
26
|
+
@group = @mappings.delete(:group)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Do we need a connector to execute this action on a node?
|
|
30
|
+
#
|
|
31
|
+
# Result::
|
|
32
|
+
# * Boolean: Do we need a connector to execute this action on a node?
|
|
33
|
+
def need_connector?
|
|
34
|
+
true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Execute the action
|
|
38
|
+
# [API] - This method is mandatory
|
|
39
|
+
# [API] - @cmd_runner is accessible
|
|
40
|
+
# [API] - @actions_executor is accessible
|
|
41
|
+
# [API] - @action_info is accessible with the action details
|
|
42
|
+
# [API] - @node (String) can be used to know on which node the action is to be executed
|
|
43
|
+
# [API] - @connector (Connector or nil) can be used to access the node's connector if the action needs remote connection
|
|
44
|
+
# [API] - @timeout (Integer) should be used to make sure the action execution does not get past this number of seconds
|
|
45
|
+
# [API] - @stdout_io can be used to log stdout messages
|
|
46
|
+
# [API] - @stderr_io can be used to log stderr messages
|
|
47
|
+
# [API] - run_cmd(String) method can be used to execute a command. See CmdRunner#run_cmd to know about the result's signature.
|
|
48
|
+
def execute
|
|
49
|
+
@mappings.each do |from, to|
|
|
50
|
+
log_debug "[#{@node}] - Copy to remote \"#{from}\" => \"#{to}\""
|
|
51
|
+
@connector.remote_copy from, to, sudo: @sudo, owner: @owner, group: @group
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
module HybridPlatformsConductor
|
|
2
|
+
|
|
3
|
+
module HpcPlugins
|
|
4
|
+
|
|
5
|
+
module Cmdb
|
|
6
|
+
|
|
7
|
+
# CMDB getting metadata from the Config DSL
|
|
8
|
+
class Config < HybridPlatformsConductor::Cmdb
|
|
9
|
+
|
|
10
|
+
# Extend the Config DSL
|
|
11
|
+
module ConfigDSLExtension
|
|
12
|
+
|
|
13
|
+
# List of metadata to be set. Each info has the following properties:
|
|
14
|
+
# * *nodes_selectors_stack* (Array<Object>): Stack of nodes selectors impacted by this rule.
|
|
15
|
+
# * *metadata* (Hash<Symbol,Object>): Metadata to associate to the nodes.
|
|
16
|
+
# Array< Hash<Symbol, Object> >
|
|
17
|
+
attr_reader :nodes_metadata
|
|
18
|
+
|
|
19
|
+
# Mixin initializer
|
|
20
|
+
def init_cmdb_config
|
|
21
|
+
@nodes_metadata = []
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Set metadata associated to the nodes
|
|
25
|
+
#
|
|
26
|
+
# Parameters::
|
|
27
|
+
# * *metadata* (Hash<Symbol,Object>): Metadata to associate to the nodes.
|
|
28
|
+
def set_metadata(metadata)
|
|
29
|
+
@nodes_metadata << {
|
|
30
|
+
metadata: metadata,
|
|
31
|
+
nodes_selectors_stack: current_nodes_selectors_stack
|
|
32
|
+
}
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
extend_config_dsl_with ConfigDSLExtension, :init_cmdb_config
|
|
38
|
+
|
|
39
|
+
# get_* methods are automatically detected as possible metadata properties this plugin can fill.
|
|
40
|
+
# The property name filled by such method is given by the method's name: get_my_property will fill the :my_property metadata.
|
|
41
|
+
# The method get_others is used specifically to return properties whose name is unknown before fetching them.
|
|
42
|
+
|
|
43
|
+
# Get other properties for a given set of nodes.
|
|
44
|
+
# It's better to not use this method and prefer using methods naming the property being returned.
|
|
45
|
+
# As the nodes_handler can't know in advance which properties will be returned, it will call it every time there is a missing property.
|
|
46
|
+
# If this method always returns the same values, it would be clever to cache it here.
|
|
47
|
+
# [API] - This method is optional.
|
|
48
|
+
# [API] - @platforms_handler can be used.
|
|
49
|
+
# [API] - @nodes_handler can be used.
|
|
50
|
+
# [API] - @cmd_runner can be used.
|
|
51
|
+
#
|
|
52
|
+
# Parameters::
|
|
53
|
+
# * *nodes* (Array<String>): The nodes to lookup the property for.
|
|
54
|
+
# * *metadata* (Hash<String, Hash<Symbol,Object> >): Existing metadata for each node. Dependent properties should be present here.
|
|
55
|
+
# Result::
|
|
56
|
+
# * Hash<String, Hash<Symbol,Object> >: The corresponding properties, per required node.
|
|
57
|
+
# Nodes for which the property can't be fetched can be ommitted.
|
|
58
|
+
def get_others(nodes, metadata)
|
|
59
|
+
# Keep metadata values in a cache, per node
|
|
60
|
+
@cached_metadata = {} unless defined?(@cached_metadata)
|
|
61
|
+
nodes.each do |node|
|
|
62
|
+
unless @cached_metadata.key?(node)
|
|
63
|
+
@cached_metadata[node] = @nodes_handler.
|
|
64
|
+
select_confs_for_node(node, @config.nodes_metadata).
|
|
65
|
+
map { |nodes_metadata_info| nodes_metadata_info[:metadata] }.
|
|
66
|
+
inject({}) { |merged_metadata, metadata| merged_metadata.merge(metadata) }
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
@cached_metadata.slice(*nodes)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
require 'hybrid_platforms_conductor/parallel_threads'
|
|
2
|
+
|
|
3
|
+
module HybridPlatformsConductor
|
|
4
|
+
|
|
5
|
+
module HpcPlugins
|
|
6
|
+
|
|
7
|
+
module Cmdb
|
|
8
|
+
|
|
9
|
+
# Get the host IP
|
|
10
|
+
class HostIp < HybridPlatformsConductor::Cmdb
|
|
11
|
+
|
|
12
|
+
include ParallelThreads
|
|
13
|
+
|
|
14
|
+
# get_* methods are automatically detected as possible metadata properties this plugin can fill.
|
|
15
|
+
# The property name filled by such method is given by the method's name: get_my_property will fill the :my_property metadata.
|
|
16
|
+
# The method get_others is used specifically to return properties whose name is unknown before fetching them.
|
|
17
|
+
|
|
18
|
+
# Return possible dependencies between properties.
|
|
19
|
+
# A property can need another property to be set before.
|
|
20
|
+
# For example an IP would need first to have the hostname to be known in order to be looked up.
|
|
21
|
+
# [API] - This method is optional
|
|
22
|
+
#
|
|
23
|
+
# Result::
|
|
24
|
+
# * Hash<Symbol, Symbol or Array<Symbol> >: The list of necessary properties (or single one) that should be set, per property name (:others can also be used here)
|
|
25
|
+
def property_dependencies
|
|
26
|
+
{
|
|
27
|
+
host_ip: :hostname
|
|
28
|
+
}
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Get a specific property for a given set of nodes.
|
|
32
|
+
# [API] - @platforms_handler can be used.
|
|
33
|
+
# [API] - @nodes_handler can be used.
|
|
34
|
+
# [API] - @cmd_runner can be used.
|
|
35
|
+
#
|
|
36
|
+
# Parameters::
|
|
37
|
+
# * *nodes* (Array<String>): The nodes to lookup the property for.
|
|
38
|
+
# * *metadata* (Hash<String, Hash<Symbol,Object> >): Existing metadata for each node. Dependent properties should be present here.
|
|
39
|
+
# Result::
|
|
40
|
+
# * Hash<String, Object>: The corresponding property, per required node.
|
|
41
|
+
# Nodes for which the property can't be fetched can be ommitted.
|
|
42
|
+
def get_host_ip(nodes, metadata)
|
|
43
|
+
updated_metadata = {}
|
|
44
|
+
# Get the list of nodes, per hostname (just in case several nodes share the same hostname)
|
|
45
|
+
# Hash<String, Array<String> >
|
|
46
|
+
hostnames = Hash.new { |hash, key| hash[key] = [] }
|
|
47
|
+
metadata.each do |node, node_metadata|
|
|
48
|
+
hostnames[node_metadata[:hostname]] << node if node_metadata[:hostname]
|
|
49
|
+
end
|
|
50
|
+
unless hostnames.empty?
|
|
51
|
+
ip_for(*hostnames.keys).each do |hostname, ip|
|
|
52
|
+
hostnames[hostname].each do |node|
|
|
53
|
+
updated_metadata[node] = ip
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
updated_metadata
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
private
|
|
61
|
+
|
|
62
|
+
# Timeout (in seconds) to use getent, per host
|
|
63
|
+
TIMEOUT_GETENT = 30
|
|
64
|
+
# Number of threads max to use for getent calls
|
|
65
|
+
MAX_THREADS_GETENT = 32
|
|
66
|
+
|
|
67
|
+
# Discover the real IPs associated to a list of hosts.
|
|
68
|
+
#
|
|
69
|
+
# Parameters::
|
|
70
|
+
# * *hosts* (Array<String>): The hosts to check for
|
|
71
|
+
# Result::
|
|
72
|
+
# * Hash<String, String or nil>: The corresponding IP (or nil if none), per host name
|
|
73
|
+
def ip_for(*hosts)
|
|
74
|
+
results = {}
|
|
75
|
+
log_debug "Get IPs of #{hosts.size} hosts..."
|
|
76
|
+
for_each_element_in(
|
|
77
|
+
hosts,
|
|
78
|
+
parallel: true,
|
|
79
|
+
nbr_threads_max: MAX_THREADS_GETENT,
|
|
80
|
+
progress: log_debug? ? 'Gather IPs' : nil
|
|
81
|
+
) do |host|
|
|
82
|
+
_exit_status, stdout, _stderr = @cmd_runner.run_cmd(
|
|
83
|
+
"getent hosts #{host}",
|
|
84
|
+
timeout: TIMEOUT_GETENT,
|
|
85
|
+
log_to_stdout: log_debug?,
|
|
86
|
+
no_exception: true
|
|
87
|
+
)
|
|
88
|
+
ip = stdout.strip.split(/\s+/).first
|
|
89
|
+
if ip.nil?
|
|
90
|
+
log_warn "Host #{host} has no IP."
|
|
91
|
+
else
|
|
92
|
+
results[host] = ip
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
results
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
require 'hybrid_platforms_conductor/parallel_threads'
|
|
2
|
+
|
|
3
|
+
module HybridPlatformsConductor
|
|
4
|
+
|
|
5
|
+
module HpcPlugins
|
|
6
|
+
|
|
7
|
+
module Cmdb
|
|
8
|
+
|
|
9
|
+
# Get the needed host keys to nodes
|
|
10
|
+
class HostKeys < HybridPlatformsConductor::Cmdb
|
|
11
|
+
|
|
12
|
+
include ParallelThreads
|
|
13
|
+
|
|
14
|
+
# get_* methods are automatically detected as possible metadata properties this plugin can fill.
|
|
15
|
+
# The property name filled by such method is given by the method's name: get_my_property will fill the :my_property metadata.
|
|
16
|
+
# The method get_others is used specifically to return properties whose name is unknown before fetching them.
|
|
17
|
+
|
|
18
|
+
# Return possible dependencies between properties.
|
|
19
|
+
# A property can need another property to be set before.
|
|
20
|
+
# For example an IP would need first to have the hostname to be known in order to be looked up.
|
|
21
|
+
# [API] - This method is optional
|
|
22
|
+
#
|
|
23
|
+
# Result::
|
|
24
|
+
# * Hash<Symbol, Symbol or Array<Symbol> >: The list of necessary properties (or single one) that should be set, per property name (:others can also be used here)
|
|
25
|
+
def property_dependencies
|
|
26
|
+
{
|
|
27
|
+
host_keys: %i[hostname host_ip]
|
|
28
|
+
}
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Get a specific property for a given set of nodes.
|
|
32
|
+
# [API] - @platforms_handler can be used.
|
|
33
|
+
# [API] - @nodes_handler can be used.
|
|
34
|
+
# [API] - @cmd_runner can be used.
|
|
35
|
+
#
|
|
36
|
+
# Parameters::
|
|
37
|
+
# * *nodes* (Array<String>): The nodes to lookup the property for.
|
|
38
|
+
# * *metadata* (Hash<String, Hash<Symbol,Object> >): Existing metadata for each node. Dependent properties should be present here.
|
|
39
|
+
# Result::
|
|
40
|
+
# * Hash<String, Object>: The corresponding property, per required node.
|
|
41
|
+
# Nodes for which the property can't be fetched can be ommitted.
|
|
42
|
+
def get_host_keys(nodes, metadata)
|
|
43
|
+
updated_metadata = {}
|
|
44
|
+
# Get the list of nodes, per hostname (just in case several nodes share the same hostname)
|
|
45
|
+
# Hash<String, Array<String> >
|
|
46
|
+
hostnames = Hash.new { |hash, key| hash[key] = [] }
|
|
47
|
+
metadata.each do |node, node_metadata|
|
|
48
|
+
if node_metadata[:host_ip]
|
|
49
|
+
hostnames[node_metadata[:host_ip]] << node
|
|
50
|
+
elsif node_metadata[:hostname]
|
|
51
|
+
hostnames[node_metadata[:hostname]] << node
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
unless hostnames.empty?
|
|
55
|
+
host_keys_for(*hostnames.keys).each do |hostname, ip|
|
|
56
|
+
hostnames[hostname].each do |node|
|
|
57
|
+
updated_metadata[node] = ip
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
updated_metadata
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
|
|
66
|
+
# Timeout (in seconds) to use ssh-keyscan, per host
|
|
67
|
+
TIMEOUT_SSH_KEYSCAN = 30
|
|
68
|
+
# Number of threads max to use for ssh-keyscan calls
|
|
69
|
+
MAX_THREADS_SSH_KEY_SCAN = 32
|
|
70
|
+
|
|
71
|
+
# Discover the host keys associated to a list of hosts.
|
|
72
|
+
#
|
|
73
|
+
# Parameters::
|
|
74
|
+
# * *hosts* (Array<String>): The hosts to check for
|
|
75
|
+
# Result::
|
|
76
|
+
# * Hash<String, Array<String> >: The corresponding host keys, per host name
|
|
77
|
+
def host_keys_for(*hosts)
|
|
78
|
+
results = {}
|
|
79
|
+
log_debug "Get host keys of #{hosts.size} hosts..."
|
|
80
|
+
for_each_element_in(
|
|
81
|
+
hosts,
|
|
82
|
+
parallel: true,
|
|
83
|
+
nbr_threads_max: MAX_THREADS_SSH_KEY_SCAN,
|
|
84
|
+
progress: log_debug? ? 'Gather host keys' : nil
|
|
85
|
+
) do |host|
|
|
86
|
+
exit_status, stdout, _stderr = @cmd_runner.run_cmd(
|
|
87
|
+
"ssh-keyscan #{host}",
|
|
88
|
+
timeout: TIMEOUT_SSH_KEYSCAN,
|
|
89
|
+
log_to_stdout: log_debug?,
|
|
90
|
+
no_exception: true
|
|
91
|
+
)
|
|
92
|
+
if exit_status == 0
|
|
93
|
+
found_keys = []
|
|
94
|
+
stdout.split("\n").each do |line|
|
|
95
|
+
unless line =~ /^# .*$/
|
|
96
|
+
_host, type, key = line.split(/\s+/)
|
|
97
|
+
found_keys << "#{type} #{key}"
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
results[host] = found_keys.sort unless found_keys.empty?
|
|
101
|
+
else
|
|
102
|
+
log_warn "Unable to get host key for #{host}. Ignoring it. Accessing #{host} might require manual acceptance of its host key."
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
results
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
end
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
module HybridPlatformsConductor
|
|
2
|
+
|
|
3
|
+
module HpcPlugins
|
|
4
|
+
|
|
5
|
+
module Cmdb
|
|
6
|
+
|
|
7
|
+
# Example of a CMDB plugin
|
|
8
|
+
class MyCmdb < HybridPlatformsConductor::Cmdb
|
|
9
|
+
|
|
10
|
+
# Are dependencies met before using this plugin?
|
|
11
|
+
# [API] - This method is optional
|
|
12
|
+
#
|
|
13
|
+
# Result::
|
|
14
|
+
# * Boolean: Are dependencies met before using this plugin?
|
|
15
|
+
def self.valid?
|
|
16
|
+
begin
|
|
17
|
+
@cmd_runner.run_cmd 'command -v getent'
|
|
18
|
+
rescue
|
|
19
|
+
false
|
|
20
|
+
end
|
|
21
|
+
true
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Add a Mixin to the DSL parsing the platforms configuration file.
|
|
25
|
+
# This can be used by any plugin to add plugin-specific configuration getters and setters, accessible later from NodesHandler instances.
|
|
26
|
+
# An optional initializer can also be given.
|
|
27
|
+
# [API] - Those calls are optional
|
|
28
|
+
module MyDSLExtension
|
|
29
|
+
|
|
30
|
+
attr_accessor :my_property
|
|
31
|
+
|
|
32
|
+
# Initialize the DSL
|
|
33
|
+
def init_my_dsl_extension
|
|
34
|
+
@my_property = 42
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
self.extend_config_dsl_with MyDSLExtension, :init_my_dsl_extension
|
|
39
|
+
|
|
40
|
+
# get_* methods are automatically detected as possible metadata properties this plugin can fill.
|
|
41
|
+
# The property name filled by such method is given by the method's name: get_my_property will fill the :my_property metadata.
|
|
42
|
+
# The method get_others is used specifically to return properties whose name is unknown before fetching them.
|
|
43
|
+
|
|
44
|
+
# Return possible dependencies between properties.
|
|
45
|
+
# A property can need another property to be set before.
|
|
46
|
+
# For example an IP would need first to have the hostname to be known in order to be looked up.
|
|
47
|
+
# [API] - This method is optional
|
|
48
|
+
#
|
|
49
|
+
# Result::
|
|
50
|
+
# * Hash<Symbol, Symbol or Array<Symbol> >: The list of necessary properties (or single one) that should be set, per property name (:others can also be used here)
|
|
51
|
+
def property_dependencies
|
|
52
|
+
{
|
|
53
|
+
ip: :hostname
|
|
54
|
+
}
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Get a specific property for a given set of nodes.
|
|
58
|
+
# [API] - @platforms_handler can be used.
|
|
59
|
+
# [API] - @nodes_handler can be used.
|
|
60
|
+
# [API] - @cmd_runner can be used.
|
|
61
|
+
#
|
|
62
|
+
# Parameters::
|
|
63
|
+
# * *nodes* (Array<String>): The nodes to lookup the property for.
|
|
64
|
+
# * *metadata* (Hash<String, Hash<Symbol,Object> >): Existing metadata for each node. Dependent properties should be present here.
|
|
65
|
+
# Result::
|
|
66
|
+
# * Hash<String, Object>: The corresponding property, per required node.
|
|
67
|
+
# Nodes for which the property can't be fetched can be ommitted.
|
|
68
|
+
def get_ip(nodes, metadata)
|
|
69
|
+
Hash[nodes.map do |node|
|
|
70
|
+
_exit_status, stdout = @cmd_runner.run_cmd "getent hosts #{metadata[node][:hostname]}"
|
|
71
|
+
[node, stdout.strip.split(/\s+/).first]
|
|
72
|
+
end]
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Get a specific property for a given set of nodes.
|
|
76
|
+
# [API] - @platforms_handler can be used.
|
|
77
|
+
# [API] - @nodes_handler can be used.
|
|
78
|
+
# [API] - @cmd_runner can be used.
|
|
79
|
+
#
|
|
80
|
+
# Parameters::
|
|
81
|
+
# * *nodes* (Array<String>): The nodes to lookup the property for.
|
|
82
|
+
# * *metadata* (Hash<String, Hash<Symbol,Object> >): Existing metadata for each node. Dependent properties should be present here.
|
|
83
|
+
# Result::
|
|
84
|
+
# * Hash<String, Object>: The corresponding property, per required node.
|
|
85
|
+
# Nodes for which the property can't be fetched can be ommitted.
|
|
86
|
+
def get_description(nodes, metadata)
|
|
87
|
+
descriptions = {}
|
|
88
|
+
nodes.each do |node|
|
|
89
|
+
# Let's say the description of a node is stored in a text file of the node's name
|
|
90
|
+
desc_file = "/path/to/descriptions/#{node}.txt"
|
|
91
|
+
descriptions[node] = File.read(desc_file) if File.exist?(desc_file)
|
|
92
|
+
end
|
|
93
|
+
descriptions
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Get other properties for a given set of nodes.
|
|
97
|
+
# It's better to not use this method and prefer using methods naming the property being returned.
|
|
98
|
+
# As the nodes_handler can't know in advance which properties will be returned, it will call it every time there is a missing property.
|
|
99
|
+
# If this method always returns the same values, it would be clever to cache it here.
|
|
100
|
+
# [API] - This method is optional.
|
|
101
|
+
# [API] - @platforms_handler can be used.
|
|
102
|
+
# [API] - @nodes_handler can be used.
|
|
103
|
+
# [API] - @cmd_runner can be used.
|
|
104
|
+
#
|
|
105
|
+
# Parameters::
|
|
106
|
+
# * *nodes* (Array<String>): The nodes to lookup the property for.
|
|
107
|
+
# * *metadata* (Hash<String, Hash<Symbol,Object> >): Existing metadata for each node. Dependent properties should be present here.
|
|
108
|
+
# Result::
|
|
109
|
+
# * Hash<String, Hash<Symbol,Object> >: The corresponding properties, per required node.
|
|
110
|
+
# Nodes for which the property can't be fetched can be ommitted.
|
|
111
|
+
def get_others(nodes, metadata)
|
|
112
|
+
Hash[nodes.map do |node|
|
|
113
|
+
[
|
|
114
|
+
node,
|
|
115
|
+
{
|
|
116
|
+
property1: 42,
|
|
117
|
+
property2: 666
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
end]
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
end
|