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,145 @@
|
|
|
1
|
+
require 'optparse'
|
|
2
|
+
require 'logger'
|
|
3
|
+
require 'hybrid_platforms_conductor/config'
|
|
4
|
+
require 'hybrid_platforms_conductor/platforms_handler'
|
|
5
|
+
require 'hybrid_platforms_conductor/nodes_handler'
|
|
6
|
+
require 'hybrid_platforms_conductor/actions_executor'
|
|
7
|
+
require 'hybrid_platforms_conductor/cmd_runner'
|
|
8
|
+
require 'hybrid_platforms_conductor/deployer'
|
|
9
|
+
require 'hybrid_platforms_conductor/json_dumper'
|
|
10
|
+
require 'hybrid_platforms_conductor/reports_handler'
|
|
11
|
+
require 'hybrid_platforms_conductor/tests_runner'
|
|
12
|
+
require 'hybrid_platforms_conductor/topographer'
|
|
13
|
+
require 'hybrid_platforms_conductor/logger_helpers'
|
|
14
|
+
require 'hybrid_platforms_conductor/current_dir_monitor'
|
|
15
|
+
|
|
16
|
+
module HybridPlatformsConductor
|
|
17
|
+
|
|
18
|
+
# Give a common executable interface to all our executables
|
|
19
|
+
class Executable
|
|
20
|
+
|
|
21
|
+
include LoggerHelpers
|
|
22
|
+
|
|
23
|
+
# Give the list of selected nodes, if the option was offered. Check NodesHandler#select_nodes to know which kind of nodes description exist.
|
|
24
|
+
# Array<Object>
|
|
25
|
+
attr_reader :selected_nodes
|
|
26
|
+
|
|
27
|
+
# Constructor
|
|
28
|
+
#
|
|
29
|
+
# Parameters::
|
|
30
|
+
# * *check_options* (Boolean): Do we offer check/why-run options? [default: true]
|
|
31
|
+
# * *nodes_selection_options* (Boolean): Do we offer nodes selection options? [default: true]
|
|
32
|
+
# * *parallel_options* (Boolean): Do we offer parallel options? [default: true]
|
|
33
|
+
# * *timeout_options* (Boolean): Do we offer timeout options? [default: true]
|
|
34
|
+
# * *deploy_options* (Boolean): Do we offer deploy options? [default: true]
|
|
35
|
+
# * *logger* (Logger): The stdout logger to be used [default: Logger.new(STDOUT, level: :info)]
|
|
36
|
+
# * *logger_stderr* (Logger): The stderr logger to be used [default: Logger.new(STDERR, level: :info)]
|
|
37
|
+
# * *opts_block* (Proc): Optional code called to register main options
|
|
38
|
+
# * Parameters::
|
|
39
|
+
# * *opts* (OptionsParser): The options parser to complete
|
|
40
|
+
def initialize(
|
|
41
|
+
check_options: true,
|
|
42
|
+
nodes_selection_options: true,
|
|
43
|
+
parallel_options: true,
|
|
44
|
+
timeout_options: true,
|
|
45
|
+
deploy_options: true,
|
|
46
|
+
logger: Logger.new(STDOUT, level: :info),
|
|
47
|
+
logger_stderr: Logger.new(STDERR, level: :info),
|
|
48
|
+
&opts_block
|
|
49
|
+
)
|
|
50
|
+
init_loggers(logger, logger_stderr)
|
|
51
|
+
@check_options = check_options
|
|
52
|
+
@nodes_selection_options = nodes_selection_options
|
|
53
|
+
@parallel_options = parallel_options
|
|
54
|
+
@timeout_options = timeout_options
|
|
55
|
+
@deploy_options = deploy_options
|
|
56
|
+
@opts_block = opts_block
|
|
57
|
+
# List of nodes description selected
|
|
58
|
+
@selected_nodes = []
|
|
59
|
+
# Possible Conductor components this executable can use
|
|
60
|
+
@instantiated_components = {}
|
|
61
|
+
# Initialize the loggers
|
|
62
|
+
# We set the debug format right now before calling the options parser, just in case some option parsing needs debugging (like plugins discovery)
|
|
63
|
+
self.log_level = :debug if ARGV.include?('--debug') || ARGV.include?('-d')
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Define all the dependency injection rules between the various APIs.
|
|
67
|
+
# Singleton accessors for each one of those components will be generated automatically based on these definitions.
|
|
68
|
+
{
|
|
69
|
+
config: [],
|
|
70
|
+
cmd_runner: [],
|
|
71
|
+
platforms_handler: %i[config cmd_runner],
|
|
72
|
+
nodes_handler: %i[config cmd_runner platforms_handler],
|
|
73
|
+
actions_executor: %i[config cmd_runner nodes_handler],
|
|
74
|
+
services_handler: %i[config cmd_runner platforms_handler nodes_handler actions_executor],
|
|
75
|
+
deployer: %i[config cmd_runner nodes_handler actions_executor services_handler],
|
|
76
|
+
json_dumper: %i[config nodes_handler deployer],
|
|
77
|
+
reports_handler: %i[config platforms_handler nodes_handler],
|
|
78
|
+
tests_runner: %i[config cmd_runner platforms_handler nodes_handler actions_executor deployer],
|
|
79
|
+
topographer: %i[nodes_handler json_dumper]
|
|
80
|
+
}.each do |component, dependencies|
|
|
81
|
+
|
|
82
|
+
# Has a singleton been instantiated for this component?
|
|
83
|
+
#
|
|
84
|
+
# Result::
|
|
85
|
+
# * Boolean: Has a singleton been instantiated for this component?
|
|
86
|
+
define_method("#{component}_instantiated?".to_sym) do
|
|
87
|
+
@instantiated_components.key?(component)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# Get a singleton for this component
|
|
91
|
+
#
|
|
92
|
+
# Result::
|
|
93
|
+
# * Object: The corresponding component
|
|
94
|
+
define_method(component) do
|
|
95
|
+
@instantiated_components[component] = HybridPlatformsConductor.const_get(component.to_s.split('_').collect(&:capitalize).join.to_sym).new(
|
|
96
|
+
logger: @logger,
|
|
97
|
+
logger_stderr: @logger_stderr,
|
|
98
|
+
**Hash[dependencies.map { |dependency| [dependency, send(dependency)] }]
|
|
99
|
+
) unless @instantiated_components.key?(component)
|
|
100
|
+
@instantiated_components[component]
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Parse options for this executable.
|
|
106
|
+
# Use options for any Hybrid Platforms Conductor component that has been accessed through the above methods.
|
|
107
|
+
# Handle common options (like logging and help).
|
|
108
|
+
def parse_options!
|
|
109
|
+
OptionParser.new do |opts|
|
|
110
|
+
opts.banner = "Usage: #{$0} [options]"
|
|
111
|
+
opts.separator ''
|
|
112
|
+
opts.separator 'Main options:'
|
|
113
|
+
opts.on('-d', '--debug', 'Activate debug mode') do
|
|
114
|
+
self.log_level = :debug
|
|
115
|
+
end
|
|
116
|
+
opts.on('-h', '--help', 'Display help and exit') do
|
|
117
|
+
out opts
|
|
118
|
+
exit 0
|
|
119
|
+
end
|
|
120
|
+
@opts_block.call(opts) if @opts_block
|
|
121
|
+
nodes_handler.options_parse(opts) if nodes_handler_instantiated?
|
|
122
|
+
nodes_handler.options_parse_nodes_selectors(opts, @selected_nodes) if @nodes_selection_options
|
|
123
|
+
cmd_runner.options_parse(opts) if cmd_runner_instantiated?
|
|
124
|
+
actions_executor.options_parse(opts, parallel: @parallel_options) if actions_executor_instantiated?
|
|
125
|
+
deployer.options_parse(
|
|
126
|
+
opts,
|
|
127
|
+
parallel_switch: @parallel_options,
|
|
128
|
+
timeout_options: @timeout_options,
|
|
129
|
+
why_run_switch: @check_options
|
|
130
|
+
) if deployer_instantiated? && @deploy_options
|
|
131
|
+
json_dumper.options_parse(opts) if json_dumper_instantiated?
|
|
132
|
+
reports_handler.options_parse(opts) if reports_handler_instantiated?
|
|
133
|
+
tests_runner.options_parse(opts) if tests_runner_instantiated?
|
|
134
|
+
topographer.options_parse(opts) if topographer_instantiated?
|
|
135
|
+
end.parse!
|
|
136
|
+
actions_executor.validate_params if actions_executor_instantiated?
|
|
137
|
+
deployer.validate_params if deployer_instantiated?
|
|
138
|
+
reports_handler.validate_params if reports_handler_instantiated?
|
|
139
|
+
topographer.validate_params if topographer_instantiated?
|
|
140
|
+
raise "Unknown options: #{ARGV.join(' ')}" unless ARGV.empty?
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module HybridPlatformsConductor
|
|
2
|
+
|
|
3
|
+
module HpcPlugins
|
|
4
|
+
|
|
5
|
+
module Action
|
|
6
|
+
|
|
7
|
+
# Execute Bash commands locally
|
|
8
|
+
class Bash < 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
|
+
# * *cmd* (String): The bash command to execute
|
|
18
|
+
def setup(cmd)
|
|
19
|
+
@cmd = cmd
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Execute the action
|
|
23
|
+
# [API] - This method is mandatory
|
|
24
|
+
# [API] - @cmd_runner is accessible
|
|
25
|
+
# [API] - @actions_executor is accessible
|
|
26
|
+
# [API] - @action_info is accessible with the action details
|
|
27
|
+
# [API] - @node (String) can be used to know on which node the action is to be executed
|
|
28
|
+
# [API] - @connector (Connector or nil) can be used to access the node's connector if the action needs remote connection
|
|
29
|
+
# [API] - @timeout (Integer) should be used to make sure the action execution does not get past this number of seconds
|
|
30
|
+
# [API] - @stdout_io can be used to log stdout messages
|
|
31
|
+
# [API] - @stderr_io can be used to log stderr messages
|
|
32
|
+
# [API] - run_cmd(String) method can be used to execute a command. See CmdRunner#run_cmd to know about the result's signature.
|
|
33
|
+
def execute
|
|
34
|
+
log_debug "[#{@node}] - Execute local Bash commands \"#{@cmd}\"..."
|
|
35
|
+
run_cmd @cmd
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module HybridPlatformsConductor
|
|
2
|
+
|
|
3
|
+
module HpcPlugins
|
|
4
|
+
|
|
5
|
+
module Action
|
|
6
|
+
|
|
7
|
+
# Execute an interactive session on the remote node
|
|
8
|
+
class Interactive < HybridPlatformsConductor::Action
|
|
9
|
+
|
|
10
|
+
# Do we need a connector to execute this action on a node?
|
|
11
|
+
#
|
|
12
|
+
# Result::
|
|
13
|
+
# * Boolean: Do we need a connector to execute this action on a node?
|
|
14
|
+
def need_connector?
|
|
15
|
+
true
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Execute the action
|
|
19
|
+
# [API] - This method is mandatory
|
|
20
|
+
# [API] - @cmd_runner is accessible
|
|
21
|
+
# [API] - @actions_executor is accessible
|
|
22
|
+
# [API] - @action_info is accessible with the action details
|
|
23
|
+
# [API] - @node (String) can be used to know on which node the action is to be executed
|
|
24
|
+
# [API] - @connector (Connector or nil) can be used to access the node's connector if the action needs remote connection
|
|
25
|
+
# [API] - @timeout (Integer) should be used to make sure the action execution does not get past this number of seconds
|
|
26
|
+
# [API] - @stdout_io can be used to log stdout messages
|
|
27
|
+
# [API] - @stderr_io can be used to log stderr messages
|
|
28
|
+
# [API] - run_cmd(String) method can be used to execute a command. See CmdRunner#run_cmd to know about the result's signature.
|
|
29
|
+
def execute
|
|
30
|
+
log_debug "[#{@node}] - Run interactive remote session..."
|
|
31
|
+
if @cmd_runner.dry_run
|
|
32
|
+
log_debug "[#{@node}] - Won't execute interactive shell in dry_run mode."
|
|
33
|
+
else
|
|
34
|
+
@connector.remote_interactive
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
module HybridPlatformsConductor
|
|
2
|
+
|
|
3
|
+
module HpcPlugins
|
|
4
|
+
|
|
5
|
+
module Action
|
|
6
|
+
|
|
7
|
+
# Example of an action plugin
|
|
8
|
+
class MyAction < HybridPlatformsConductor::Action
|
|
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
|
+
true
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Add a Mixin to the DSL parsing the platforms configuration file.
|
|
20
|
+
# This can be used by any plugin to add plugin-specific configuration getters and setters, accessible later from NodesHandler instances.
|
|
21
|
+
# An optional initializer can also be given.
|
|
22
|
+
# [API] - Those calls are optional
|
|
23
|
+
module MyDSLExtension
|
|
24
|
+
|
|
25
|
+
attr_accessor :my_property
|
|
26
|
+
|
|
27
|
+
# Initialize the DSL
|
|
28
|
+
def init_my_dsl_extension
|
|
29
|
+
@my_property = 42
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
self.extend_config_dsl_with MyDSLExtension, :init_my_dsl_extension
|
|
34
|
+
|
|
35
|
+
# Setup the action.
|
|
36
|
+
# This is called by the constructor itself, when an action is instantiated to be executed for a node.
|
|
37
|
+
# [API] - This method is optional
|
|
38
|
+
# [API] - @cmd_runner is accessible
|
|
39
|
+
# [API] - @actions_executor is accessible
|
|
40
|
+
#
|
|
41
|
+
# Parameters::
|
|
42
|
+
# * *action_info* (Object): The action info
|
|
43
|
+
def setup(action_info)
|
|
44
|
+
@action_info[:message] = 'Default message' unless @action_info.key?(:message)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Do we need a connector to execute this action on a node?
|
|
48
|
+
# [API] - This method is optional
|
|
49
|
+
# [API] - @cmd_runner is accessible
|
|
50
|
+
# [API] - @actions_executor is accessible
|
|
51
|
+
#
|
|
52
|
+
# Result::
|
|
53
|
+
# * Boolean: Do we need a connector to execute this action on a node?
|
|
54
|
+
def need_connector?
|
|
55
|
+
true
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Execute the action
|
|
59
|
+
# [API] - This method is mandatory
|
|
60
|
+
# [API] - @cmd_runner is accessible
|
|
61
|
+
# [API] - @actions_executor is accessible
|
|
62
|
+
# [API] - @action_info is accessible with the action details
|
|
63
|
+
# [API] - @node (String) can be used to know on which node the action is to be executed
|
|
64
|
+
# [API] - @connector (Connector or nil) can be used to access the node's connector if the action needs remote connection
|
|
65
|
+
# [API] - @timeout (Integer) should be used to make sure the action execution does not get past this number of seconds
|
|
66
|
+
# [API] - @stdout_io can be used to log stdout messages
|
|
67
|
+
# [API] - @stderr_io can be used to log stderr messages
|
|
68
|
+
# [API] - run_cmd(String) method can be used to execute a command. See CmdRunner#run_cmd to know about the result's signature.
|
|
69
|
+
def execute
|
|
70
|
+
run_cmd "echo #{@action_info[:message]} on #{@node}"
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
module HybridPlatformsConductor
|
|
2
|
+
|
|
3
|
+
module HpcPlugins
|
|
4
|
+
|
|
5
|
+
module Action
|
|
6
|
+
|
|
7
|
+
# Execute a bash command on the remote node
|
|
8
|
+
class RemoteBash < 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
|
+
# * *remote_bash* (Array< Hash<Symbol, Object> or Array<String> or String>): List of bash actions to execute. Each action can have the following properties:
|
|
18
|
+
# * *commands* (Array<String> or String): List of bash commands to execute (can be a single one). This is the default property also that allows to not use the Hash form for brevity.
|
|
19
|
+
# * *file* (String): Name of file from which commands should be taken.
|
|
20
|
+
# * *env* (Hash<String, String>): Environment variables to be set before executing those commands.
|
|
21
|
+
def setup(remote_bash)
|
|
22
|
+
@remote_bash = remote_bash
|
|
23
|
+
# Normalize the parameters
|
|
24
|
+
@remote_bash = [@remote_bash] if @remote_bash.is_a?(String)
|
|
25
|
+
@remote_bash = { commands: @remote_bash } if @remote_bash.is_a?(Array)
|
|
26
|
+
@remote_bash[:commands] = [@remote_bash[:commands]] if @remote_bash[:commands].is_a?(String)
|
|
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
|
+
bash_commands = (@remote_bash[:env] || {}).map { |var_name, var_value| "export #{var_name}='#{var_value}'" }
|
|
50
|
+
bash_commands.concat(@remote_bash[:commands].clone) if @remote_bash.key?(:commands)
|
|
51
|
+
bash_commands << File.read(@remote_bash[:file]) if @remote_bash.key?(:file)
|
|
52
|
+
bash_str = bash_commands.join("\n")
|
|
53
|
+
log_debug "[#{@node}] - Execute remote Bash commands \"#{bash_str}\"..."
|
|
54
|
+
@connector.remote_bash bash_str
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
module HybridPlatformsConductor
|
|
2
|
+
|
|
3
|
+
module HpcPlugins
|
|
4
|
+
|
|
5
|
+
module Action
|
|
6
|
+
|
|
7
|
+
# Execute Ruby commands locally
|
|
8
|
+
class Ruby < 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
|
+
# * *info* (Hash<Symbol, Object>): Properties for the Ruby action:
|
|
18
|
+
# * *code* (Proc): Ruby code to be executed.
|
|
19
|
+
# This is the default property, and can be given directly without using a Hash.
|
|
20
|
+
# * Parameters::
|
|
21
|
+
# * *stdout* (IO): Stream in which stdout of this action should be written.
|
|
22
|
+
# * *stderr* (IO): Stream in which stderr of this action should be written.
|
|
23
|
+
# * *action* (Action): Action we can use to access other context-specific methods, such as run_cmd.
|
|
24
|
+
# * *connector* (Connector or nil): The connector to the node, or nil if none.
|
|
25
|
+
# * *need_remote* (Boolean): Do we need a remote connection to the node for this code to run? [default = false]
|
|
26
|
+
def setup(info)
|
|
27
|
+
info = { code: info } if info.is_a?(Proc)
|
|
28
|
+
@need_remote = info[:need_remote] || false
|
|
29
|
+
@code = info[:code]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Do we need a connector to execute this action on a node?
|
|
33
|
+
#
|
|
34
|
+
# Result::
|
|
35
|
+
# * Boolean: Do we need a connector to execute this action on a node?
|
|
36
|
+
def need_connector?
|
|
37
|
+
@need_remote
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Execute the action
|
|
41
|
+
# [API] - This method is mandatory
|
|
42
|
+
# [API] - @cmd_runner is accessible
|
|
43
|
+
# [API] - @actions_executor is accessible
|
|
44
|
+
# [API] - @action_info is accessible with the action details
|
|
45
|
+
# [API] - @node (String) can be used to know on which node the action is to be executed
|
|
46
|
+
# [API] - @connector (Connector or nil) can be used to access the node's connector if the action needs remote connection
|
|
47
|
+
# [API] - @timeout (Integer) should be used to make sure the action execution does not get past this number of seconds
|
|
48
|
+
# [API] - @stdout_io can be used to log stdout messages
|
|
49
|
+
# [API] - @stderr_io can be used to log stderr messages
|
|
50
|
+
# [API] - run_cmd(String) method can be used to execute a command. See CmdRunner#run_cmd to know about the result's signature.
|
|
51
|
+
def execute
|
|
52
|
+
log_debug "[#{@node}] - Execute local Ruby code #{@code}..."
|
|
53
|
+
# TODO: Handle timeout without using Timeout which is harmful when dealing with SSH connections and multithread.
|
|
54
|
+
@code.call @stdout_io, @stderr_io, self, @connector
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Make the run_cmd method public for this action as it can be used by client procs
|
|
58
|
+
public :run_cmd
|
|
59
|
+
|
|
60
|
+
# Give access to the node so that action can use it
|
|
61
|
+
attr_reader :node
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
end
|