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,47 @@
|
|
|
1
|
+
module HybridPlatformsConductor
|
|
2
|
+
|
|
3
|
+
module HpcPlugins
|
|
4
|
+
|
|
5
|
+
module Test
|
|
6
|
+
|
|
7
|
+
# Check that the repository is having a Git linear strategy on master.
|
|
8
|
+
class LinearStrategy < HybridPlatformsConductor::Test
|
|
9
|
+
|
|
10
|
+
# Number of seconds of the period after which we tolerate non-linear history in git
|
|
11
|
+
LOOKING_PERIOD = 6 * 31 * 24 * 60 * 60 # 6 months
|
|
12
|
+
|
|
13
|
+
# Check my_test_plugin.rb.sample documentation for signature details.
|
|
14
|
+
def test_on_platform
|
|
15
|
+
_exit_status, stdout, _stderr = @cmd_runner.run_cmd(
|
|
16
|
+
"cd #{@platform.repository_path} && git --no-pager log --merges --pretty=format:\"%H\"",
|
|
17
|
+
log_to_stdout: log_debug?
|
|
18
|
+
)
|
|
19
|
+
stdout.split("\n").each do |merge_commit_id|
|
|
20
|
+
_exit_status, stdout, _stderr = @cmd_runner.run_cmd(<<~EOS, log_to_stdout: log_debug?, no_exception: true, expected_code: [0, 1])
|
|
21
|
+
cd #{@platform.repository_path} && \
|
|
22
|
+
git --no-pager log \
|
|
23
|
+
$(git merge-base \
|
|
24
|
+
--octopus \
|
|
25
|
+
$(git --no-pager log #{merge_commit_id} --max-count 1 --pretty=format:\"%P\") \
|
|
26
|
+
)..#{merge_commit_id} \
|
|
27
|
+
--pretty=format:\"%H\" \
|
|
28
|
+
--graph \
|
|
29
|
+
| grep '|'
|
|
30
|
+
EOS
|
|
31
|
+
if !stdout.empty?
|
|
32
|
+
_exit_status, stdout, _stderr = @cmd_runner.run_cmd(
|
|
33
|
+
"cd #{@platform.repository_path} && git --no-pager log #{merge_commit_id} --pretty=format:%aI",
|
|
34
|
+
log_to_stdout: log_debug?
|
|
35
|
+
)
|
|
36
|
+
error "Git history is not linear because of Merge commit #{merge_commit_id}" if Time.now - Time.parse(stdout.strip) < LOOKING_PERIOD
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
module HybridPlatformsConductor
|
|
2
|
+
|
|
3
|
+
module HpcPlugins
|
|
4
|
+
|
|
5
|
+
module Test
|
|
6
|
+
|
|
7
|
+
# Test that the node's local users
|
|
8
|
+
class LocalUsers < HybridPlatformsConductor::Test
|
|
9
|
+
|
|
10
|
+
# Config DSL extension for this test plugin
|
|
11
|
+
module ConfigDslExtension
|
|
12
|
+
|
|
13
|
+
# List of users that should be absent from local users. Each info has the following properties:
|
|
14
|
+
# * *nodes_selectors_stack* (Array<Object>): Stack of nodes selectors impacted by this rule
|
|
15
|
+
# * *users* (Array<String>): List of users.
|
|
16
|
+
# Array< Hash<Symbol, Object> >
|
|
17
|
+
attr_reader :users_that_should_be_absent
|
|
18
|
+
|
|
19
|
+
# List of users that should be present from local users. Each info has the following properties:
|
|
20
|
+
# * *nodes_selectors_stack* (Array<Object>): Stack of nodes selectors impacted by this rule
|
|
21
|
+
# * *users* (Array<String>): List of users.
|
|
22
|
+
# Array< Hash<Symbol, Object> >
|
|
23
|
+
attr_reader :users_that_should_be_present
|
|
24
|
+
|
|
25
|
+
# Initialize the DSL
|
|
26
|
+
def init_local_users_test
|
|
27
|
+
@users_that_should_be_absent = []
|
|
28
|
+
@users_that_should_be_present = []
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Set a list of local users that should be absent.
|
|
32
|
+
#
|
|
33
|
+
# Parameters::
|
|
34
|
+
# * *users* (String or Array<String>): List of (or single) users
|
|
35
|
+
def check_local_users_do_not_exist(users)
|
|
36
|
+
@users_that_should_be_absent << {
|
|
37
|
+
nodes_selectors_stack: current_nodes_selectors_stack,
|
|
38
|
+
users: users.is_a?(Array) ? users : [users]
|
|
39
|
+
}
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Set a list of local users that should be present.
|
|
43
|
+
#
|
|
44
|
+
# Parameters::
|
|
45
|
+
# * *users* (String or Array<String>): List of (or single) users
|
|
46
|
+
def check_local_users_do_exist(users)
|
|
47
|
+
@users_that_should_be_present << {
|
|
48
|
+
nodes_selectors_stack: current_nodes_selectors_stack,
|
|
49
|
+
users: users.is_a?(Array) ? users : [users]
|
|
50
|
+
}
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
self.extend_config_dsl_with ConfigDslExtension, :init_local_users_test
|
|
56
|
+
|
|
57
|
+
# Check my_test_plugin.rb.sample documentation for signature details.
|
|
58
|
+
def test_on_node
|
|
59
|
+
{
|
|
60
|
+
"sudo cat /etc/passwd" => proc do |stdout|
|
|
61
|
+
passwd_users = stdout.map { |passwd_line| passwd_line.split(':').first }
|
|
62
|
+
missing_users = @nodes_handler.
|
|
63
|
+
select_confs_for_node(@node, @config.users_that_should_be_present).
|
|
64
|
+
inject([]) { |merged_users, users_info| merged_users + users_info[:users] }.
|
|
65
|
+
uniq - passwd_users
|
|
66
|
+
error "Missing local users that should be present: #{missing_users.join(', ')}" unless missing_users.empty?
|
|
67
|
+
extra_users = passwd_users & @nodes_handler.
|
|
68
|
+
select_confs_for_node(@node, @config.users_that_should_be_absent).
|
|
69
|
+
inject([]) { |merged_users, users_info| merged_users + users_info[:users] }.
|
|
70
|
+
uniq
|
|
71
|
+
error "Extra local users that should be absent: #{extra_users.join(', ')}" unless extra_users.empty?
|
|
72
|
+
end
|
|
73
|
+
}
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
module HybridPlatformsConductor
|
|
2
|
+
|
|
3
|
+
module HpcPlugins
|
|
4
|
+
|
|
5
|
+
module Test
|
|
6
|
+
|
|
7
|
+
# Various tests on mounts
|
|
8
|
+
class Mounts < HybridPlatformsConductor::Test
|
|
9
|
+
|
|
10
|
+
# Config DSL extension for this test plugin
|
|
11
|
+
module ConfigDslExtension
|
|
12
|
+
|
|
13
|
+
# List of mount rules that should be absent. Each info has the following properties:
|
|
14
|
+
# * *nodes_selectors_stack* (Array<Object>): Stack of nodes selectors impacted by this rule
|
|
15
|
+
# * *mount_rules* (Hash<String or Regexp, String or Regexp>): List of rules to check for absence.
|
|
16
|
+
# Array< Hash<Symbol, Object> >
|
|
17
|
+
attr_reader :mount_rules_that_should_be_absent
|
|
18
|
+
|
|
19
|
+
# List of mount rules that should be present. Each info has the following properties:
|
|
20
|
+
# * *nodes_selectors_stack* (Array<Object>): Stack of nodes selectors impacted by this rule
|
|
21
|
+
# * *mount_rules* (Hash<String or Regexp, String or Regexp>): List of rules to check for presence.
|
|
22
|
+
# Array< Hash<Symbol, Object> >
|
|
23
|
+
attr_reader :mount_rules_that_should_be_present
|
|
24
|
+
|
|
25
|
+
# Initialize the DSL
|
|
26
|
+
def init_mounts_test
|
|
27
|
+
@mount_rules_that_should_be_absent = []
|
|
28
|
+
@mount_rules_that_should_be_present = []
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Give a list of mounts rules to check for absence
|
|
32
|
+
#
|
|
33
|
+
# Parameters::
|
|
34
|
+
# * *mount_rules* (Hash<String or Regexp, String or Regexp>):
|
|
35
|
+
# List of (or single) sets of { source => destination } mounts that should not be present.
|
|
36
|
+
# Each source or destination can be a string for exact match, or a regexp to match a pattern on the mounts done on the node.
|
|
37
|
+
def check_mounts_do_not_include(mount_rules)
|
|
38
|
+
@mount_rules_that_should_be_absent << {
|
|
39
|
+
mount_rules: mount_rules,
|
|
40
|
+
nodes_selectors_stack: current_nodes_selectors_stack
|
|
41
|
+
}
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Give a list of mounts rules to check for presence
|
|
45
|
+
#
|
|
46
|
+
# Parameters::
|
|
47
|
+
# * *mount_rules* (Hash<String or Regexp, String or Regexp>):
|
|
48
|
+
# List of (or single) sets of { source => destination } mounts that should be present.
|
|
49
|
+
# Each source or destination can be a string for exact match, or a regexp to match a pattern on the mounts done on the node.
|
|
50
|
+
def check_mounts_do_include(mount_rules)
|
|
51
|
+
@mount_rules_that_should_be_present << {
|
|
52
|
+
mount_rules: mount_rules,
|
|
53
|
+
nodes_selectors_stack: current_nodes_selectors_stack
|
|
54
|
+
}
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
self.extend_config_dsl_with ConfigDslExtension, :init_mounts_test
|
|
60
|
+
|
|
61
|
+
# Check my_test_plugin.rb.sample documentation for signature details.
|
|
62
|
+
def test_on_node
|
|
63
|
+
{
|
|
64
|
+
'sudo mount' => proc do |stdout|
|
|
65
|
+
mounts_info = stdout.map do |line|
|
|
66
|
+
fields = line.split
|
|
67
|
+
{
|
|
68
|
+
src: fields[0],
|
|
69
|
+
dst: fields[2],
|
|
70
|
+
type: fields[4],
|
|
71
|
+
options: fields[5][1..-2].split(',')
|
|
72
|
+
}
|
|
73
|
+
end
|
|
74
|
+
# Check all mount rules
|
|
75
|
+
@nodes_handler.select_confs_for_node(@node, @config.mount_rules_that_should_be_present).each do |mount_rules_info|
|
|
76
|
+
mount_rules_info[:mount_rules].each do |rule_src, rule_dst|
|
|
77
|
+
error "Missing mount matching #{rule_src} => #{rule_dst}", "Mounts: #{JSON.pretty_generate(mounts_info)}" unless mounts_info.any? { |mount_info| mount_matches?(mount_info, rule_src, rule_dst) }
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
@nodes_handler.select_confs_for_node(@node, @config.mount_rules_that_should_be_absent).each do |mount_rules_info|
|
|
81
|
+
mount_rules_info[:mount_rules].each do |rule_src, rule_dst|
|
|
82
|
+
extra_mounts = mounts_info.select { |mount_info| mount_matches?(mount_info, rule_src, rule_dst) }
|
|
83
|
+
error "The following mounts should not be present: #{extra_mounts.map { |mount_info| "#{mount_info[:src]} => #{mount_info[:dst]}" }.join(', ')} as forbidden by the rule #{rule_src} => #{rule_dst}", "Mounts: #{JSON.pretty_generate(mounts_info)}" unless extra_mounts.empty?
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
}
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
private
|
|
91
|
+
|
|
92
|
+
# Does a given mount info matches a rule source and destination?
|
|
93
|
+
#
|
|
94
|
+
# Parameters::
|
|
95
|
+
# * *mount_info* (Hash<Symbol,Object>): The mount info
|
|
96
|
+
# * *src* (String): Mount source
|
|
97
|
+
# * *dst* (String): Mount destination
|
|
98
|
+
# * *type* (String): Mount type
|
|
99
|
+
# * *options* (Array<String>): Mount options
|
|
100
|
+
# * *rule_src* (String or Regexp): Rule source
|
|
101
|
+
# * *rule_dst* (String or Regexp): Rule destination
|
|
102
|
+
# Result::
|
|
103
|
+
# * Boolean: Does a given mount info matches a rule source and destination?
|
|
104
|
+
def mount_matches?(mount_info, rule_src, rule_dst)
|
|
105
|
+
(
|
|
106
|
+
(rule_src.is_a?(String) && mount_info[:src] == rule_src) ||
|
|
107
|
+
(rule_src.is_a?(Regexp) && mount_info[:src] =~ rule_src)
|
|
108
|
+
) && (
|
|
109
|
+
(rule_dst.is_a?(String) && mount_info[:dst] == rule_dst) ||
|
|
110
|
+
(rule_dst.is_a?(Regexp) && mount_info[:dst] =~ rule_dst)
|
|
111
|
+
)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
end
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# This file is an example of a generic Test plugin.
|
|
2
|
+
# The MyTestPlugin example contains example of code that could be used to write a plugin for new tests.
|
|
3
|
+
module HybridPlatformsConductor
|
|
4
|
+
|
|
5
|
+
module HpcPlugins
|
|
6
|
+
|
|
7
|
+
module Test
|
|
8
|
+
|
|
9
|
+
# Brief description of the plugin here.
|
|
10
|
+
# The name should match the file name.
|
|
11
|
+
# It should always inherit from Tests::Test.
|
|
12
|
+
#
|
|
13
|
+
# A test plugin can define 1 or several test methods, whose name will drive the way the test is run:
|
|
14
|
+
# * test: Global test run once.
|
|
15
|
+
# * test_for_platform: Platform-specific test run once per platform.
|
|
16
|
+
# * test_for_node: Node-specific test run once per node.
|
|
17
|
+
# * test_on_node: Node-specific test that test some SSH command execution directly on the node.
|
|
18
|
+
# * test_on_check_node: Node-specific test that test the result of a why-run deployment on the node.
|
|
19
|
+
# * self.only_on_platforms: Give a list of the platform types this test is supposed to run on. If nil, it means all.
|
|
20
|
+
# * self.only_on_nodes: Give a list of the node names this test is supposed to run on. If nil, it means all.
|
|
21
|
+
#
|
|
22
|
+
# In all instance methods of a test plugin, the following variables are accessible:
|
|
23
|
+
# * @nodes_handler (NodesHandler): Nodes handler used to access information about the platforms
|
|
24
|
+
# * @deployer (Deployer): Deployer used to deploy or check on the platforms
|
|
25
|
+
# In all instance methods of a test plugin, the following methods can be used for assertions (see their description in the file test.rb):
|
|
26
|
+
# * assert_equal(tested_object, expected_object, error_msg): Check equality between 2 objects and logs an error in case of mismatch.
|
|
27
|
+
# * assert_match(tested_object, expected_object, error_msg): Check string Regexp matching and logs an error in case of mismatch.
|
|
28
|
+
# * error(message): Log an error.
|
|
29
|
+
class MyTestPlugin < HybridPlatformsConductor::Test
|
|
30
|
+
|
|
31
|
+
# Are dependencies met before using this plugin?
|
|
32
|
+
# [API] - This method is optional
|
|
33
|
+
#
|
|
34
|
+
# Result::
|
|
35
|
+
# * Boolean: Are dependencies met before using this plugin?
|
|
36
|
+
def self.valid?
|
|
37
|
+
true
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Add a Mixin to the DSL parsing the platforms configuration file.
|
|
41
|
+
# This can be used by any plugin to add plugin-specific configuration getters and setters, accessible later from NodesHandler instances.
|
|
42
|
+
# An optional initializer can also be given.
|
|
43
|
+
# [API] - Those calls are optional
|
|
44
|
+
module MyDSLExtension
|
|
45
|
+
|
|
46
|
+
attr_accessor :my_property
|
|
47
|
+
|
|
48
|
+
# Initialize the DSL
|
|
49
|
+
def init_my_dsl_extension
|
|
50
|
+
@my_property = 42
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
54
|
+
self.extend_config_dsl_with MyDSLExtension, :init_my_dsl_extension
|
|
55
|
+
|
|
56
|
+
# Run test
|
|
57
|
+
def test
|
|
58
|
+
# If this method is defined, it will be simply run as is.
|
|
59
|
+
# This is useful to code global tests, that are not specific to 1 node or 1 platform.
|
|
60
|
+
assert_equal 2 + 2, 4, 'If this is displayed, it\'s serious!'
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Run test for each platform
|
|
64
|
+
# [API] - @platform can be used to adapt the code with the platform handling this node.
|
|
65
|
+
def test_for_platform
|
|
66
|
+
# If this method is defined, it will be used to execute once per platform to be tested.
|
|
67
|
+
assert_match @platform.repository_path, /my_platform_.+/, 'Platform name does not follow naming convention'
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Run test for each node
|
|
71
|
+
# [API] - @node can be used to adapt the code with the node.
|
|
72
|
+
def test_for_node
|
|
73
|
+
# If this method is defined, it will be used to execute once per node to be tested.
|
|
74
|
+
assert_match @node, /my_node_.+/, 'Node name does not follow naming convention'
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Run test using SSH commands on the node.
|
|
78
|
+
# Instead of executing the SSH commands directly on each node for each test, this method returns the list of commands to run and the test framework then groups them in 1 SSH connection.
|
|
79
|
+
# [API] - @node can be used to adapt the command with the node.
|
|
80
|
+
#
|
|
81
|
+
# Result::
|
|
82
|
+
# * Hash<String,Object>: For each command to execute, information regarding the assertion.
|
|
83
|
+
# * Values can be:
|
|
84
|
+
# * Proc: The code block making the test given the stdout of the command. Here is the Proc description:
|
|
85
|
+
# * Parameters::
|
|
86
|
+
# * *stdout* (Array<String>): List of lines of the stdout of the command.
|
|
87
|
+
# * *stderr* (Array<String>): List of lines of the stderr of the command.
|
|
88
|
+
# * *return_code* (Integer): The return code of the command.
|
|
89
|
+
# * Hash<Symbol,Object>: More complete information, that can contain the following keys:
|
|
90
|
+
# * *validator* (Proc): The proc containing the assertions to perform (as described above). This key is mandatory.
|
|
91
|
+
# * *timeout* (Integer): Timeout to wait for this command to execute.
|
|
92
|
+
def test_on_node
|
|
93
|
+
# If this method is defined, it will be used to execute SSH commands on each node that is being tested.
|
|
94
|
+
# For each SSH command, a validator code block will be called with the stdout of the command run remotely on the node.
|
|
95
|
+
# In place of a simple validator code block, a more complex structure can be used to give more info (for example timeout).
|
|
96
|
+
{
|
|
97
|
+
'echo 1' => proc do |stdout|
|
|
98
|
+
assert_equal stdout.first, '1', 'Echo did not return 1 on the node!!!'
|
|
99
|
+
end,
|
|
100
|
+
"./longer_test_that_should_return_success.sh --hostname #{@node}" => {
|
|
101
|
+
validator: proc do |stdout|
|
|
102
|
+
error 'Test run but failed' if stdout.first == 'Start test' && !(stdout.last =~ /Success/)
|
|
103
|
+
end,
|
|
104
|
+
timeout: 30 # If the SSH session does not return in less than 30 seconds, we consider the test failed.
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Perform some testing on the check-node output.
|
|
110
|
+
# [API] - @node can be used to know for which node the test is being run.
|
|
111
|
+
#
|
|
112
|
+
# Parameters::
|
|
113
|
+
# * *stdout* (String): The check-node output
|
|
114
|
+
# * *stderr* (String): The check-node standard error
|
|
115
|
+
# * *exit_status* (Integer): The check-node exit status
|
|
116
|
+
def test_on_check_node(stdout, stderr, exit_status)
|
|
117
|
+
# If this method is defined, the tests runner will execute a why-run deploy on the node and call this method to have assertions on the stdout of the why-run deploy.
|
|
118
|
+
assert_match stdout.split("\n").last, /Success/, 'check-node did not end correctly'
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Limit the list of platform types for these tests.
|
|
122
|
+
#
|
|
123
|
+
# Result::
|
|
124
|
+
# * Array<Symbol> or nil: List of platform types allowed for this test, or nil for all
|
|
125
|
+
def self.only_on_platforms
|
|
126
|
+
[:chef]
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# Limit the list of nodes for these tests.
|
|
130
|
+
#
|
|
131
|
+
# Result::
|
|
132
|
+
# * Array<String or Regex> or nil: List of nodes allowed for this test, or nil for all. Regular expressions matching node names can also be used.
|
|
133
|
+
def self.only_on_nodes
|
|
134
|
+
[/^xaehpc.+/, 'project-pinger']
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
module HybridPlatformsConductor
|
|
2
|
+
|
|
3
|
+
module HpcPlugins
|
|
4
|
+
|
|
5
|
+
module Test
|
|
6
|
+
|
|
7
|
+
# Test that the node has no orphan files
|
|
8
|
+
class OrphanFiles < HybridPlatformsConductor::Test
|
|
9
|
+
|
|
10
|
+
# Config DSL extension for this test plugin
|
|
11
|
+
module ConfigDslExtension
|
|
12
|
+
|
|
13
|
+
# List of paths to ignore info. Each info has the following properties:
|
|
14
|
+
# * *nodes_selectors_stack* (Array<Object>): Stack of nodes selectors impacted by this rule
|
|
15
|
+
# * *ignored_paths* (Array<String>): List of paths to ignore.
|
|
16
|
+
# Array< Hash<Symbol, Object> >
|
|
17
|
+
attr_reader :ignored_orphan_files_paths
|
|
18
|
+
|
|
19
|
+
# Initialize the DSL
|
|
20
|
+
def init_orphan_files_test
|
|
21
|
+
# List of paths to ignore info. Each info has the following properties:
|
|
22
|
+
# * *nodes_selectors_stack* (Array<Object>): Stack of nodes selectors impacted by this rule
|
|
23
|
+
# * *ignored_paths* (Array<String>): List of paths to ignore.
|
|
24
|
+
# Array< Hash<Symbol, Object> >
|
|
25
|
+
@ignored_orphan_files_paths = []
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Ignore a list of paths for orphan files testing
|
|
29
|
+
#
|
|
30
|
+
# Parameters::
|
|
31
|
+
# * *paths_to_ignore* (String or Array<String>): List of paths to ignore
|
|
32
|
+
def ignore_orphan_files_from(paths_to_ignore)
|
|
33
|
+
@ignored_orphan_files_paths << {
|
|
34
|
+
ignored_paths: paths_to_ignore.is_a?(Array) ? paths_to_ignore : [paths_to_ignore],
|
|
35
|
+
nodes_selectors_stack: current_nodes_selectors_stack,
|
|
36
|
+
}
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
self.extend_config_dsl_with ConfigDslExtension, :init_orphan_files_test
|
|
42
|
+
|
|
43
|
+
# List of directories to always ignore
|
|
44
|
+
DIRECTORIES_TO_ALWAYS_IGNORE = [
|
|
45
|
+
'/proc',
|
|
46
|
+
'/sys/kernel/debug',
|
|
47
|
+
'/sys/kernel/slab'
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
# Check my_test_plugin.rb.sample documentation for signature details.
|
|
51
|
+
def test_on_node
|
|
52
|
+
{
|
|
53
|
+
"sudo /usr/bin/find / \\( #{@nodes_handler.
|
|
54
|
+
select_confs_for_node(@node, @config.ignored_orphan_files_paths).
|
|
55
|
+
inject(DIRECTORIES_TO_ALWAYS_IGNORE) { |merged_paths, paths_to_ignore_info| merged_paths + paths_to_ignore_info[:ignored_paths] }.
|
|
56
|
+
uniq.
|
|
57
|
+
map { |dir| "-path #{dir}" }.
|
|
58
|
+
join(' -o ')
|
|
59
|
+
} \\) -prune -o -nogroup -nouser -print" => {
|
|
60
|
+
validator: proc do |stdout|
|
|
61
|
+
assert_equal stdout, [], "#{stdout.size} orphan files found.", stdout.join("\n")
|
|
62
|
+
end,
|
|
63
|
+
timeout: 300
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|