hybrid_platforms_conductor 32.3.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|