hybrid_platforms_conductor 32.17.0 → 33.0.2
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 +4 -4
- data/CHANGELOG.md +36 -0
- data/README.md +6 -3
- data/bin/check-node +0 -1
- data/bin/deploy +0 -1
- data/bin/get_impacted_nodes +0 -1
- data/bin/last_deploys +12 -8
- data/bin/nodes_to_deploy +6 -6
- data/bin/setup +6 -6
- data/bin/topograph +1 -1
- data/docs/config_dsl.md +45 -1
- data/docs/executables.md +6 -7
- data/docs/executables/check-node.md +3 -3
- data/docs/executables/deploy.md +3 -3
- data/docs/executables/dump_nodes_json.md +3 -3
- data/docs/executables/test.md +3 -3
- data/docs/executables/topograph.md +3 -3
- data/docs/gen/mermaid/README.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/check-node.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/deploy.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/free_ips.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/get_impacted_nodes.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/last_deploys.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/nodes_to_deploy.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/report.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/run.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/ssh_config.md-0.png +0 -0
- data/docs/gen/mermaid/docs/executables/test.md-0.png +0 -0
- data/docs/plugins.md +46 -0
- data/docs/plugins/connector/ssh.md +1 -1
- data/docs/plugins/log/remote_fs.md +26 -0
- data/docs/plugins/secrets_reader/cli.md +31 -0
- data/docs/plugins/secrets_reader/thycotic.md +46 -0
- data/docs/plugins/test/check_deploy_and_idempotence.md +1 -1
- data/docs/plugins/test/connection.md +1 -0
- data/docs/plugins/test/deploy_removes_root_access.md +1 -1
- data/docs/plugins/test/file_system.md +1 -0
- data/docs/plugins/test/hostname.md +1 -0
- data/docs/plugins/test/ip.md +1 -0
- data/docs/plugins/test/local_users.md +1 -0
- data/docs/plugins/test/mounts.md +1 -0
- data/docs/plugins/test/orphan_files.md +1 -0
- data/docs/plugins/test/ports.md +1 -0
- data/docs/plugins/test/spectre.md +1 -0
- data/docs/plugins/test/vulnerabilities.md +1 -0
- data/lib/hybrid_platforms_conductor/action.rb +4 -4
- data/lib/hybrid_platforms_conductor/actions_executor.rb +45 -43
- data/lib/hybrid_platforms_conductor/bitbucket.rb +5 -4
- data/lib/hybrid_platforms_conductor/cmd_runner.rb +13 -12
- data/lib/hybrid_platforms_conductor/cmdb.rb +2 -2
- data/lib/hybrid_platforms_conductor/common_config_dsl/bitbucket.rb +2 -1
- data/lib/hybrid_platforms_conductor/common_config_dsl/confluence.rb +2 -1
- data/lib/hybrid_platforms_conductor/common_config_dsl/file_system_tests.rb +5 -4
- data/lib/hybrid_platforms_conductor/common_config_dsl/github.rb +4 -3
- data/lib/hybrid_platforms_conductor/common_config_dsl/idempotence_tests.rb +2 -2
- data/lib/hybrid_platforms_conductor/config.rb +8 -4
- data/lib/hybrid_platforms_conductor/confluence.rb +1 -1
- data/lib/hybrid_platforms_conductor/connector.rb +5 -2
- data/lib/hybrid_platforms_conductor/core_extensions/cleanroom/fix_kwargs.rb +116 -0
- data/lib/hybrid_platforms_conductor/core_extensions/symbol/zero.rb +24 -0
- data/lib/hybrid_platforms_conductor/credentials.rb +39 -36
- data/lib/hybrid_platforms_conductor/current_dir_monitor.rb +4 -1
- data/lib/hybrid_platforms_conductor/deployer.rb +275 -224
- data/lib/hybrid_platforms_conductor/executable.rb +20 -15
- data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/config.rb +10 -7
- data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_ip.rb +1 -1
- data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/host_keys.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/cmdb/platform_handlers.rb +4 -4
- data/lib/hybrid_platforms_conductor/hpc_plugins/connector/local.rb +2 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/connector/ssh.rb +45 -49
- data/lib/hybrid_platforms_conductor/hpc_plugins/log/my_log_plugin.rb.sample +100 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/log/remote_fs.rb +180 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef.rb +68 -66
- data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/dsl_parser.rb +13 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/serverless_chef/recipes_tree_builder.rb +39 -38
- data/lib/hybrid_platforms_conductor/hpc_plugins/platform_handler/yaml_inventory.rb +5 -4
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/docker.rb +43 -45
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/podman.rb +18 -20
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox.rb +118 -117
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/proxmox_waiter.rb +39 -43
- data/lib/hybrid_platforms_conductor/hpc_plugins/provisioner/proxmox/reserve_proxmox_container +9 -13
- data/lib/hybrid_platforms_conductor/hpc_plugins/report/confluence.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/report/mediawiki.rb +28 -21
- data/lib/hybrid_platforms_conductor/hpc_plugins/report/stdout.rb +26 -22
- data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/cli.rb +77 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/my_secrets_reader_plugin.rb.sample +46 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/thycotic.rb +90 -0
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/bitbucket_conf.rb +3 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/check_deploy_and_idempotence.rb +4 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/connection.rb +3 -1
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_freshness.rb +7 -21
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_removes_root_access.rb +21 -19
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/divergence.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/executables.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system.rb +21 -22
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system_hdfs.rb +19 -21
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/github_ci.rb +2 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/hostname.rb +3 -1
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/idempotence.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/ip.rb +4 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_conf.rb +21 -22
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/jenkins_ci_masters_ok.rb +10 -12
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/linear_strategy.rb +9 -9
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/local_users.rb +5 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/mounts.rb +5 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/orphan_files.rb +13 -10
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/ports.rb +5 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/private_ips.rb +5 -5
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/public_ips.rb +5 -5
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/spectre.rb +7 -7
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/veids.rb +3 -3
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/vulnerabilities.rb +27 -25
- data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/confluence.rb +2 -2
- data/lib/hybrid_platforms_conductor/hpc_plugins/test_report/stdout.rb +8 -6
- data/lib/hybrid_platforms_conductor/io_router.rb +14 -13
- data/lib/hybrid_platforms_conductor/json_dumper.rb +2 -2
- data/lib/hybrid_platforms_conductor/log.rb +31 -0
- data/lib/hybrid_platforms_conductor/logger_helpers.rb +19 -16
- data/lib/hybrid_platforms_conductor/nodes_handler.rb +89 -71
- data/lib/hybrid_platforms_conductor/parallel_threads.rb +7 -11
- data/lib/hybrid_platforms_conductor/platform_handler.rb +7 -7
- data/lib/hybrid_platforms_conductor/platforms_handler.rb +5 -3
- data/lib/hybrid_platforms_conductor/plugin.rb +2 -2
- data/lib/hybrid_platforms_conductor/plugins.rb +14 -8
- data/lib/hybrid_platforms_conductor/provisioner.rb +4 -4
- data/lib/hybrid_platforms_conductor/report.rb +2 -2
- data/lib/hybrid_platforms_conductor/reports_handler.rb +3 -2
- data/lib/hybrid_platforms_conductor/secrets_reader.rb +31 -0
- data/lib/hybrid_platforms_conductor/services_handler.rb +32 -29
- data/lib/hybrid_platforms_conductor/test_only_remote_node.rb +18 -0
- data/lib/hybrid_platforms_conductor/test_report.rb +15 -18
- data/lib/hybrid_platforms_conductor/tests_runner.rb +116 -118
- data/lib/hybrid_platforms_conductor/thycotic.rb +28 -19
- data/lib/hybrid_platforms_conductor/topographer.rb +200 -190
- data/lib/hybrid_platforms_conductor/topographer/plugins/graphviz.rb +8 -8
- data/lib/hybrid_platforms_conductor/topographer/plugins/json.rb +4 -4
- data/lib/hybrid_platforms_conductor/version.rb +1 -1
- data/spec/hybrid_platforms_conductor_test.rb +33 -12
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/bash_spec.rb +18 -11
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/interactive_spec.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/remote_bash_spec.rb +32 -21
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/ruby_spec.rb +75 -49
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions/scp_spec.rb +27 -15
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/actions_spec.rb +90 -59
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connection_spec.rb +46 -44
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/connectable_nodes_spec.rb +12 -8
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/local/remote_actions_spec.rb +4 -7
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/cli_options_spec.rb +21 -22
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/config_dsl_spec.rb +23 -24
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connectable_nodes_spec.rb +10 -6
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connections_spec.rb +106 -75
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/global_helpers_spec.rb +145 -126
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/node_helpers_spec.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/remote_actions_spec.rb +29 -25
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/logging_spec.rb +167 -142
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/parallel_spec.rb +272 -244
- data/spec/hybrid_platforms_conductor_test/api/actions_executor/timeout_spec.rb +16 -16
- data/spec/hybrid_platforms_conductor_test/api/cmd_runner_spec.rb +36 -36
- data/spec/hybrid_platforms_conductor_test/api/config_spec.rb +24 -22
- data/spec/hybrid_platforms_conductor_test/api/deployer/check_spec.rb +4 -2
- data/spec/hybrid_platforms_conductor_test/api/deployer/config_dsl_spec.rb +43 -5
- data/spec/hybrid_platforms_conductor_test/api/deployer/deploy_spec.rb +199 -216
- data/spec/hybrid_platforms_conductor_test/api/deployer/log_plugins/remote_fs_spec.rb +223 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/parse_deploy_output_spec.rb +55 -59
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioner_spec.rb +36 -62
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/podman_spec.rb +17 -17
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/config_dsl_spec.rb +4 -4
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/create_spec.rb +44 -51
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/destroy_spec.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/ip_spec.rb +12 -16
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/destroy_vm_spec.rb +31 -19
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/expired_containers_spec.rb +324 -266
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/ips_assignment_spec.rb +89 -61
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/other_lxc_containers_resources_spec.rb +117 -93
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/pve_node_resources_spec.rb +71 -54
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/retries_spec.rb +10 -8
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/reserve_proxmox_container/vm_ids_assignment_spec.rb +80 -60
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/start_spec.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/state_spec.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/api/deployer/provisioners/proxmox/stop_spec.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/cli_spec.rb +64 -0
- data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/thycotic_spec.rb +268 -0
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/config_spec.rb +8 -10
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_ip_spec.rb +33 -24
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/host_keys_spec.rb +64 -51
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs/platform_handlers_spec.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/cmdbs_plugins_api_spec.rb +50 -51
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/common_spec.rb +91 -81
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/config_dsl_spec.rb +14 -16
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/git_diff_impacts_spec.rb +51 -75
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/nodes_selectors_spec.rb +35 -26
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/platform_handlers_plugins_api_spec.rb +24 -16
- data/spec/hybrid_platforms_conductor_test/api/nodes_handler/several_platforms_spec.rb +29 -19
- data/spec/hybrid_platforms_conductor_test/api/platform_handler_spec.rb +4 -4
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/config_dsl_spec.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/deploy_output_parsing_spec.rb +6 -6
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/diff_impacts_spec.rb +57 -99
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/inventory_spec.rb +4 -4
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/packaging_spec.rb +32 -35
- data/spec/hybrid_platforms_conductor_test/api/platform_handlers/serverless_chef/services_deployment_spec.rb +10 -10
- data/spec/hybrid_platforms_conductor_test/api/platforms_handler_spec.rb +38 -27
- data/spec/hybrid_platforms_conductor_test/api/plugins_spec.rb +46 -52
- data/spec/hybrid_platforms_conductor_test/api/reports_handler_spec.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/api/services_handler/actions_to_deploy_spec.rb +90 -58
- data/spec/hybrid_platforms_conductor_test/api/services_handler/deploy_allowed_spec.rb +38 -34
- data/spec/hybrid_platforms_conductor_test/api/services_handler/log_info_spec.rb +11 -9
- data/spec/hybrid_platforms_conductor_test/api/services_handler/package_spec.rb +193 -171
- data/spec/hybrid_platforms_conductor_test/api/services_handler/parse_deploy_output_spec.rb +66 -54
- data/spec/hybrid_platforms_conductor_test/api/services_handler/prepare_for_deploy_spec.rb +147 -133
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/common_spec.rb +69 -49
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/global_spec.rb +5 -4
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_check_spec.rb +8 -5
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_spec.rb +8 -5
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/node_ssh_spec.rb +30 -27
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/platform_spec.rb +12 -9
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/reports_spec.rb +48 -47
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/bitbucket_conf_spec.rb +5 -5
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/github_ci_spec.rb +5 -5
- data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_reports_plugins/confluence_spec.rb +5 -5
- data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb.rb +9 -9
- data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb2.rb → test_cmdb_2.rb} +6 -6
- data/spec/hybrid_platforms_conductor_test/cmdb_plugins/test_cmdb_others.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/cmdb_plugins/{test_cmdb_others2.rb → test_cmdb_others_2.rb} +2 -2
- data/spec/hybrid_platforms_conductor_test/docs_spec.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/executables/{check-node_spec.rb → check_node_spec.rb} +4 -6
- data/spec/hybrid_platforms_conductor_test/executables/deploy_spec.rb +4 -6
- data/spec/hybrid_platforms_conductor_test/executables/get_impacted_nodes_spec.rb +76 -77
- data/spec/hybrid_platforms_conductor_test/executables/last_deploys_spec.rb +159 -113
- data/spec/hybrid_platforms_conductor_test/executables/nodes_to_deploy_spec.rb +299 -160
- data/spec/hybrid_platforms_conductor_test/executables/options/actions_executor_spec.rb +4 -6
- data/spec/hybrid_platforms_conductor_test/executables/options/cmd_runner_spec.rb +3 -5
- data/spec/hybrid_platforms_conductor_test/executables/options/common_spec.rb +8 -8
- data/spec/hybrid_platforms_conductor_test/executables/options/deployer_spec.rb +12 -196
- data/spec/hybrid_platforms_conductor_test/executables/options/nodes_handler_spec.rb +9 -10
- data/spec/hybrid_platforms_conductor_test/executables/options/nodes_selectors_spec.rb +9 -10
- data/spec/hybrid_platforms_conductor_test/executables/options/reports_handler_spec.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/executables/options/tests_runner_spec.rb +22 -22
- data/spec/hybrid_platforms_conductor_test/executables/report_spec.rb +22 -16
- data/spec/hybrid_platforms_conductor_test/executables/run_spec.rb +32 -32
- data/spec/hybrid_platforms_conductor_test/executables/ssh_config_spec.rb +7 -9
- data/spec/hybrid_platforms_conductor_test/executables/test_spec.rb +3 -5
- data/spec/hybrid_platforms_conductor_test/helpers/actions_executor_helpers.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/helpers/cmd_runner_helpers.rb +4 -3
- data/spec/hybrid_platforms_conductor_test/helpers/cmdb_helpers.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/helpers/config_helpers.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/helpers/connector_ssh_helpers.rb +12 -13
- data/spec/hybrid_platforms_conductor_test/helpers/deployer_helpers.rb +245 -56
- data/spec/hybrid_platforms_conductor_test/helpers/executables_helpers.rb +11 -11
- data/spec/hybrid_platforms_conductor_test/helpers/nodes_handler_helpers.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/helpers/platforms_handler_helpers.rb +39 -28
- data/spec/hybrid_platforms_conductor_test/helpers/plugins_helpers.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/helpers/provisioner_proxmox_helpers.rb +86 -111
- data/spec/hybrid_platforms_conductor_test/helpers/reports_handler_helpers.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/helpers/serverless_chef_helpers.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/helpers/services_handler_helpers.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/helpers/tests_runner_helpers.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem/hpc_plugins/test_plugin_type/{test_plugin_id1.rb → test_plugin_id_1.rb} +0 -0
- data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem/hpc_plugins/test_plugin_type/{test_plugin_id2.rb → test_plugin_id_2.rb} +0 -0
- data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem2/sub_dir/hpc_plugins/test_plugin_type/{test_plugin_id3.rb → test_plugin_id_3.rb} +0 -0
- data/spec/hybrid_platforms_conductor_test/mocked_lib/my_test_gem2/sub_dir/hpc_plugins/{test_plugin_type2/test_plugin_id4.rb → test_plugin_type_2/test_plugin_id_4.rb} +0 -0
- data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/test.rb +1 -1
- data/spec/hybrid_platforms_conductor_test/platform_handler_plugins/{test2.rb → test_2.rb} +0 -0
- data/spec/hybrid_platforms_conductor_test/rubocop_spec.rb +31 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/1_node/nodes/node.json +3 -3
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/data_bags/nodes/node.json +3 -3
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/recipes/cookbooks/test_cookbook_2/libraries/default.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/serverless_chef_repositories/several_cookbooks/other_cookbooks/test_cookbook_2/libraries/default.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/shared_examples/deployer.rb +952 -0
- data/spec/hybrid_platforms_conductor_test/test_connector.rb +3 -3
- data/spec/hybrid_platforms_conductor_test/test_log_no_read_plugin.rb +84 -0
- data/spec/hybrid_platforms_conductor_test/test_log_plugin.rb +105 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/global.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/node.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/node_check.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/platform.rb +1 -0
- data/spec/hybrid_platforms_conductor_test/test_plugins/several_checks.rb +2 -2
- data/spec/hybrid_platforms_conductor_test/test_secrets_reader_plugin.rb +45 -0
- data/spec/hybrid_platforms_conductor_test/tests_report_plugin.rb +5 -6
- data/spec/spec_helper.rb +17 -18
- data/tools/check_md +16 -20
- data/tools/generate_mermaid +1 -1
- metadata +195 -144
- data/spec/hybrid_platforms_conductor_test/helpers/deployer_test_helpers.rb +0 -916
|
@@ -3,9 +3,13 @@ require 'tempfile'
|
|
|
3
3
|
require 'tty-command'
|
|
4
4
|
require 'hybrid_platforms_conductor/logger_helpers'
|
|
5
5
|
require 'hybrid_platforms_conductor/io_router'
|
|
6
|
+
require 'hybrid_platforms_conductor/core_extensions/symbol/zero'
|
|
7
|
+
|
|
8
|
+
Symbol.include HybridPlatformsConductor::CoreExtensions::Symbol::Zero
|
|
6
9
|
|
|
7
10
|
module HybridPlatformsConductor
|
|
8
11
|
|
|
12
|
+
# API to execute local commands, with IO control over files, stdout, timeouts, exceptions.
|
|
9
13
|
class CmdRunner
|
|
10
14
|
|
|
11
15
|
class UnexpectedExitCodeError < StandardError
|
|
@@ -21,7 +25,7 @@ module HybridPlatformsConductor
|
|
|
21
25
|
# Result::
|
|
22
26
|
# * String: The executable prefix
|
|
23
27
|
def self.executables_prefix
|
|
24
|
-
$
|
|
28
|
+
$PROGRAM_NAME.include?('/') ? "#{File.dirname($PROGRAM_NAME)}/" : ''
|
|
25
29
|
end
|
|
26
30
|
|
|
27
31
|
# Dry-run switch. When true, then commands are just printed out without being executed.
|
|
@@ -33,7 +37,7 @@ module HybridPlatformsConductor
|
|
|
33
37
|
# Parameters::
|
|
34
38
|
# * *logger* (Logger): Logger to be used [default = Logger.new(STDOUT)]
|
|
35
39
|
# * *logger_stderr* (Logger): Logger to be used for stderr [default = Logger.new(STDERR)]
|
|
36
|
-
def initialize(logger: Logger.new(
|
|
40
|
+
def initialize(logger: Logger.new($stdout), logger_stderr: Logger.new($stderr))
|
|
37
41
|
init_loggers(logger, logger_stderr)
|
|
38
42
|
@dry_run = false
|
|
39
43
|
end
|
|
@@ -42,8 +46,7 @@ module HybridPlatformsConductor
|
|
|
42
46
|
#
|
|
43
47
|
# Parameters::
|
|
44
48
|
# * *options_parser* (OptionParser): The option parser to complete
|
|
45
|
-
|
|
46
|
-
def options_parse(options_parser, parallel: true)
|
|
49
|
+
def options_parse(options_parser)
|
|
47
50
|
options_parser.separator ''
|
|
48
51
|
options_parser.separator 'Command runner options:'
|
|
49
52
|
options_parser.on('-s', '--show-commands', 'Display the commands that would be run instead of running them') do
|
|
@@ -86,7 +89,7 @@ module HybridPlatformsConductor
|
|
|
86
89
|
expected_code = [expected_code] unless expected_code.is_a?(Array)
|
|
87
90
|
if @dry_run
|
|
88
91
|
out cmd
|
|
89
|
-
|
|
92
|
+
[expected_code.first, '', '']
|
|
90
93
|
else
|
|
91
94
|
log_debug "#{timeout.nil? ? '' : "[ Timeout #{timeout} ] - "}#{cmd.light_cyan.bold}"
|
|
92
95
|
exit_status = nil
|
|
@@ -100,15 +103,13 @@ module HybridPlatformsConductor
|
|
|
100
103
|
FileUtils.mkdir_p(File.dirname(log_to_file))
|
|
101
104
|
File.open(log_to_file, 'w')
|
|
102
105
|
end
|
|
103
|
-
else
|
|
104
|
-
nil
|
|
105
106
|
end
|
|
106
107
|
start_time = Time.now if log_debug?
|
|
107
108
|
bash_file = nil
|
|
108
109
|
if force_bash
|
|
109
110
|
bash_file = Tempfile.new('hpc_bash')
|
|
110
111
|
bash_file.write(cmd)
|
|
111
|
-
bash_file.chmod
|
|
112
|
+
bash_file.chmod 0o700
|
|
112
113
|
bash_file.close
|
|
113
114
|
cmd = "/bin/bash -c #{bash_file.path}"
|
|
114
115
|
end
|
|
@@ -149,10 +150,10 @@ module HybridPlatformsConductor
|
|
|
149
150
|
rescue
|
|
150
151
|
exit_status = :command_error
|
|
151
152
|
cmd_stdout = cmd_result_stdout
|
|
152
|
-
cmd_stderr = "#{cmd_result_stderr.empty? ? '' : "#{cmd_result_stderr}\n"}#{
|
|
153
|
+
cmd_stderr = "#{cmd_result_stderr.empty? ? '' : "#{cmd_result_stderr}\n"}#{$ERROR_INFO}\n#{$ERROR_INFO.backtrace.join("\n")}"
|
|
153
154
|
ensure
|
|
154
|
-
file_output
|
|
155
|
-
bash_file
|
|
155
|
+
file_output&.close
|
|
156
|
+
bash_file&.unlink
|
|
156
157
|
end
|
|
157
158
|
if log_debug?
|
|
158
159
|
elapsed = Time.now - start_time
|
|
@@ -169,7 +170,7 @@ module HybridPlatformsConductor
|
|
|
169
170
|
raise exit_status == :timeout ? TimeoutError : UnexpectedExitCodeError, error_title
|
|
170
171
|
end
|
|
171
172
|
end
|
|
172
|
-
|
|
173
|
+
[exit_status, cmd_stdout, cmd_stderr]
|
|
173
174
|
end
|
|
174
175
|
end
|
|
175
176
|
|
|
@@ -16,8 +16,8 @@ module HybridPlatformsConductor
|
|
|
16
16
|
# * *platforms_handler* (PlatformsHandler): Platforms Handler to be used. [default: PlatformsHandler.new]
|
|
17
17
|
# * *nodes_handler* (NodesHandler): Nodes Handler to be used. [default: NodesHandler.new]
|
|
18
18
|
def initialize(
|
|
19
|
-
logger: Logger.new(
|
|
20
|
-
logger_stderr: Logger.new(
|
|
19
|
+
logger: Logger.new($stdout),
|
|
20
|
+
logger_stderr: Logger.new($stderr),
|
|
21
21
|
config: Config.new,
|
|
22
22
|
cmd_runner: CmdRunner.new,
|
|
23
23
|
platforms_handler: PlatformsHandler.new,
|
|
@@ -4,9 +4,10 @@ module HybridPlatformsConductor
|
|
|
4
4
|
|
|
5
5
|
module CommonConfigDsl
|
|
6
6
|
|
|
7
|
+
# Add common Bitbucket config DSL to declare known Bitbucket repositories
|
|
7
8
|
module Bitbucket
|
|
8
9
|
|
|
9
|
-
# Initialize the DSL
|
|
10
|
+
# Initialize the DSL
|
|
10
11
|
def init_bitbucket
|
|
11
12
|
# List of Bitbucket repositories definitions
|
|
12
13
|
# Array< Hash<Symbol, Object> >
|
|
@@ -2,9 +2,10 @@ module HybridPlatformsConductor
|
|
|
2
2
|
|
|
3
3
|
module CommonConfigDsl
|
|
4
4
|
|
|
5
|
+
# Add common Confluence config DSL to declare known Confluence installations
|
|
5
6
|
module Confluence
|
|
6
7
|
|
|
7
|
-
# Initialize the DSL
|
|
8
|
+
# Initialize the DSL
|
|
8
9
|
def init_confluence
|
|
9
10
|
# Confluence configuration (can be nil if none)
|
|
10
11
|
# Hash<Symbol, Object> or nil. See #confluence_info to know details.
|
|
@@ -19,7 +19,7 @@ module HybridPlatformsConductor
|
|
|
19
19
|
# Array< Hash<Symbol, Object> >
|
|
20
20
|
attr_reader :fs_paths_rules
|
|
21
21
|
|
|
22
|
-
# Initialize the DSL
|
|
22
|
+
# Initialize the DSL
|
|
23
23
|
def init_file_system_tests
|
|
24
24
|
@fs_paths_rules = []
|
|
25
25
|
@context = {
|
|
@@ -49,7 +49,7 @@ module HybridPlatformsConductor
|
|
|
49
49
|
paths: paths.flatten,
|
|
50
50
|
nodes_selectors_stack: current_nodes_selectors_stack,
|
|
51
51
|
context: @context.clone,
|
|
52
|
-
state: :present
|
|
52
|
+
state: :present
|
|
53
53
|
}
|
|
54
54
|
end
|
|
55
55
|
|
|
@@ -84,7 +84,7 @@ module HybridPlatformsConductor
|
|
|
84
84
|
select_confs_for_node(node, fs_paths_rules).
|
|
85
85
|
inject({}) do |merged_paths, paths_info|
|
|
86
86
|
if paths_info[:context][:file_system_type] == file_system_type
|
|
87
|
-
merged_paths.merge(
|
|
87
|
+
merged_paths.merge(paths_info[:paths].map do |path|
|
|
88
88
|
[
|
|
89
89
|
path,
|
|
90
90
|
{
|
|
@@ -92,9 +92,10 @@ module HybridPlatformsConductor
|
|
|
92
92
|
context: paths_info[:context]
|
|
93
93
|
}
|
|
94
94
|
]
|
|
95
|
-
end
|
|
95
|
+
end.to_h) do |path, rule_info_1, rule_info_2|
|
|
96
96
|
# Just check that configuration is not inconsistent
|
|
97
97
|
raise "Inconsistent rule for #{file_system_type} file system checks in configuration for #{node}: #{path} is marked as being both #{rule_info_1[:state]} and #{rule_info_2[:state]}" if rule_info_1[:state] != rule_info_2[:state]
|
|
98
|
+
|
|
98
99
|
rule_info_2
|
|
99
100
|
end
|
|
100
101
|
else
|
|
@@ -5,9 +5,10 @@ module HybridPlatformsConductor
|
|
|
5
5
|
|
|
6
6
|
module CommonConfigDsl
|
|
7
7
|
|
|
8
|
+
# Add common Github config DSL to declare known Github repositories
|
|
8
9
|
module Github
|
|
9
10
|
|
|
10
|
-
# Initialize the DSL
|
|
11
|
+
# Initialize the DSL
|
|
11
12
|
def init_github
|
|
12
13
|
# List of Github repositories definitions
|
|
13
14
|
# Array< Hash<Symbol, Object> >
|
|
@@ -18,10 +19,10 @@ module HybridPlatformsConductor
|
|
|
18
19
|
# Register new Github repositories
|
|
19
20
|
#
|
|
20
21
|
# Parameters::
|
|
21
|
-
# * *url* (String): URL to the Github API [default: 'https://api.github.com']
|
|
22
22
|
# * *user* (String): User or organization name, storing repositories
|
|
23
|
+
# * *url* (String): URL to the Github API [default: 'https://api.github.com']
|
|
23
24
|
# * *repos* (Array<String> or Symbol): List of repository names from this project, or :all for all [default: :all]
|
|
24
|
-
def github_repos(url: 'https://api.github.com',
|
|
25
|
+
def github_repos(user:, url: 'https://api.github.com', repos: :all)
|
|
25
26
|
@github_repos << {
|
|
26
27
|
url: url,
|
|
27
28
|
user: user,
|
|
@@ -38,7 +38,7 @@ module HybridPlatformsConductor
|
|
|
38
38
|
def ignore_idempotence_tasks(tasks_to_ignore)
|
|
39
39
|
@ignored_idempotence_tasks << {
|
|
40
40
|
ignored_tasks: tasks_to_ignore,
|
|
41
|
-
nodes_selectors_stack: current_nodes_selectors_stack
|
|
41
|
+
nodes_selectors_stack: current_nodes_selectors_stack
|
|
42
42
|
}
|
|
43
43
|
end
|
|
44
44
|
|
|
@@ -49,7 +49,7 @@ module HybridPlatformsConductor
|
|
|
49
49
|
def ignore_divergent_tasks(tasks_to_ignore)
|
|
50
50
|
@ignored_divergent_tasks << {
|
|
51
51
|
ignored_tasks: tasks_to_ignore,
|
|
52
|
-
nodes_selectors_stack: current_nodes_selectors_stack
|
|
52
|
+
nodes_selectors_stack: current_nodes_selectors_stack
|
|
53
53
|
}
|
|
54
54
|
end
|
|
55
55
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'cleanroom'
|
|
2
|
+
require 'hybrid_platforms_conductor/core_extensions/cleanroom/fix_kwargs'
|
|
2
3
|
require 'git'
|
|
3
4
|
require 'ice_cube'
|
|
4
5
|
require 'hybrid_platforms_conductor/plugins'
|
|
@@ -8,7 +9,8 @@ module HybridPlatformsConductor
|
|
|
8
9
|
# Object used to access the whole configuration
|
|
9
10
|
class Config
|
|
10
11
|
|
|
11
|
-
include
|
|
12
|
+
include Cleanroom
|
|
13
|
+
include LoggerHelpers
|
|
12
14
|
|
|
13
15
|
class << self
|
|
14
16
|
|
|
@@ -35,6 +37,7 @@ module HybridPlatformsConductor
|
|
|
35
37
|
# Directory of the definition of the platforms
|
|
36
38
|
# String
|
|
37
39
|
attr_reader :hybrid_platforms_dir
|
|
40
|
+
|
|
38
41
|
expose :hybrid_platforms_dir
|
|
39
42
|
|
|
40
43
|
# List of expected failures info. Each info has the following properties:
|
|
@@ -60,7 +63,7 @@ module HybridPlatformsConductor
|
|
|
60
63
|
# Parameters::
|
|
61
64
|
# * *logger* (Logger): Logger to be used [default = Logger.new(STDOUT)]
|
|
62
65
|
# * *logger_stderr* (Logger): Logger to be used for stderr [default = Logger.new(STDERR)]
|
|
63
|
-
def initialize(logger: Logger.new(
|
|
66
|
+
def initialize(logger: Logger.new($stdout), logger_stderr: Logger.new($stderr))
|
|
64
67
|
init_loggers(logger, logger_stderr)
|
|
65
68
|
@hybrid_platforms_dir = File.expand_path(ENV['hpc_platforms'].nil? ? '.' : ENV['hpc_platforms'])
|
|
66
69
|
# Stack of the nodes selectors scopes
|
|
@@ -94,7 +97,7 @@ module HybridPlatformsConductor
|
|
|
94
97
|
end
|
|
95
98
|
# Call initializers if needed
|
|
96
99
|
Config.mixin_initializers.each do |mixin_init_method|
|
|
97
|
-
|
|
100
|
+
send(mixin_init_method)
|
|
98
101
|
end
|
|
99
102
|
include_config_from "#{@hybrid_platforms_dir}/hpc_config.rb"
|
|
100
103
|
end
|
|
@@ -105,7 +108,7 @@ module HybridPlatformsConductor
|
|
|
105
108
|
# * *dsl_file* (String): Path to the DSL file
|
|
106
109
|
def include_config_from(dsl_file)
|
|
107
110
|
log_debug "Include config from #{dsl_file}"
|
|
108
|
-
|
|
111
|
+
evaluate_file(dsl_file)
|
|
109
112
|
end
|
|
110
113
|
expose :include_config_from
|
|
111
114
|
|
|
@@ -116,6 +119,7 @@ module HybridPlatformsConductor
|
|
|
116
119
|
# * *dir* (String): Directory containing the Dockerfile defining the image
|
|
117
120
|
def os_image(image, dir)
|
|
118
121
|
raise "OS image #{image} already defined to #{@os_images[image]}" if @os_images.key?(image)
|
|
122
|
+
|
|
119
123
|
@os_images[image] = dir
|
|
120
124
|
end
|
|
121
125
|
expose :os_image
|
|
@@ -34,7 +34,7 @@ module HybridPlatformsConductor
|
|
|
34
34
|
# * *confluence_password* (String): Confluence password to be used when querying the API
|
|
35
35
|
# * *logger* (Logger): Logger to be used [default = Logger.new(STDOUT)]
|
|
36
36
|
# * *logger_stderr* (Logger): Logger to be used for stderr [default = Logger.new(STDERR)]
|
|
37
|
-
def initialize(confluence_url, confluence_user_name, confluence_password, logger: Logger.new(
|
|
37
|
+
def initialize(confluence_url, confluence_user_name, confluence_password, logger: Logger.new($stdout), logger_stderr: Logger.new($stderr))
|
|
38
38
|
init_loggers(logger, logger_stderr)
|
|
39
39
|
@confluence_url = confluence_url
|
|
40
40
|
@confluence_user_name = confluence_user_name
|
|
@@ -15,8 +15,8 @@ module HybridPlatformsConductor
|
|
|
15
15
|
# * *cmd_runner* (CmdRunner): Command executor to be used. [default: CmdRunner.new]
|
|
16
16
|
# * *nodes_handler* (NodesHandler): NodesHandler to be used. [default: NodesHandler.new]
|
|
17
17
|
def initialize(
|
|
18
|
-
logger: Logger.new(
|
|
19
|
-
logger_stderr: Logger.new(
|
|
18
|
+
logger: Logger.new($stdout),
|
|
19
|
+
logger_stderr: Logger.new($stderr),
|
|
20
20
|
config: Config.new,
|
|
21
21
|
cmd_runner: CmdRunner.new,
|
|
22
22
|
nodes_handler: NodesHandler.new
|
|
@@ -45,8 +45,10 @@ module HybridPlatformsConductor
|
|
|
45
45
|
@stderr_io = stderr_io
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
+
# rubocop:disable Lint/UnusedMethodArgument
|
|
48
49
|
# Prepare connections to a given set of nodes.
|
|
49
50
|
# Useful to prefetch metadata or open bulk connections.
|
|
51
|
+
# This method is supposed to be overridden by sub-classes (hence the rubocop exception).
|
|
50
52
|
#
|
|
51
53
|
# Parameters::
|
|
52
54
|
# * *nodes* (Array<String>): Nodes to prepare the connection to
|
|
@@ -57,6 +59,7 @@ module HybridPlatformsConductor
|
|
|
57
59
|
def with_connection_to(nodes, no_exception: false)
|
|
58
60
|
yield nodes
|
|
59
61
|
end
|
|
62
|
+
# rubocop:enable Lint/UnusedMethodArgument
|
|
60
63
|
|
|
61
64
|
private
|
|
62
65
|
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# This is a patch of cleanroom Rubygem v1.0.0 that adds kwargs support for Ruby 3.
|
|
2
|
+
# TODO: Remove this patch when the following code will be merged in a new version of cleanroom:
|
|
3
|
+
# https://github.com/sethvargo/cleanroom/compare/master...Muriel-Salvan:handle_kwargs?expand=1
|
|
4
|
+
|
|
5
|
+
module Cleanroom
|
|
6
|
+
|
|
7
|
+
# Add kwargs support
|
|
8
|
+
module ClassMethods
|
|
9
|
+
|
|
10
|
+
#
|
|
11
|
+
# Expose the given method to the DSL.
|
|
12
|
+
#
|
|
13
|
+
# @param [Symbol] name
|
|
14
|
+
#
|
|
15
|
+
def expose(name)
|
|
16
|
+
raise NameError, "undefined method `#{name}' for class `#{self.name}'" unless public_method_defined?(name)
|
|
17
|
+
|
|
18
|
+
exposed_methods_with_kwargs[name] = true if instance_method(name).parameters.any? { |(arg_type, _arg_name)| KWARGS_TYPES.include?(arg_type) }
|
|
19
|
+
exposed_methods[name] = true
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
# Define the types of argument types that point kwargs arguments.
|
|
25
|
+
# Useful to treat them differently as when defining a method with kwargs, Ruby will pass parameters having a to_hash method differently to such methods:
|
|
26
|
+
#
|
|
27
|
+
# See this example illustrating the difference in treatment with and without kwargs in the method definition:
|
|
28
|
+
# def without_kwargs(*args)
|
|
29
|
+
# p args
|
|
30
|
+
# end
|
|
31
|
+
# def with_kwargs(*args, **kwargs)
|
|
32
|
+
# p args
|
|
33
|
+
# p kwargs
|
|
34
|
+
# end
|
|
35
|
+
# s_without_to_hash = 'Without to_hash'
|
|
36
|
+
# s_with_to_hash = 'With to_hash'
|
|
37
|
+
# s_with_to_hash.define_singleton_method(:to_hash) { { string: self.to_s } }
|
|
38
|
+
# without_kwargs(s_without_to_hash)
|
|
39
|
+
# ["Without to_hash"]
|
|
40
|
+
# without_kwargs(s_with_to_hash)
|
|
41
|
+
# ["With to_hash"]
|
|
42
|
+
# with_kwargs(s_without_to_hash)
|
|
43
|
+
# ["Without to_hash"]
|
|
44
|
+
# {}
|
|
45
|
+
# with_kwargs(s_with_to_hash)
|
|
46
|
+
# []
|
|
47
|
+
# {:string=>"With to_hash"}
|
|
48
|
+
KWARGS_TYPES = %i[key keyreq]
|
|
49
|
+
|
|
50
|
+
#
|
|
51
|
+
# The list of exposed methods with kwargs.
|
|
52
|
+
#
|
|
53
|
+
# @return [Hash]
|
|
54
|
+
#
|
|
55
|
+
def exposed_methods_with_kwargs
|
|
56
|
+
@exposed_methods_with_kwargs ||= from_superclass(:exposed_methods_with_kwargs, {}).dup
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
#
|
|
60
|
+
# The cleanroom instance for this class. This method is intentionally
|
|
61
|
+
# NOT cached!
|
|
62
|
+
#
|
|
63
|
+
# @return [Class]
|
|
64
|
+
#
|
|
65
|
+
def cleanroom
|
|
66
|
+
exposed = exposed_methods.keys
|
|
67
|
+
exposed_with_kwargs = exposed_methods_with_kwargs.keys
|
|
68
|
+
parent = name || 'Anonymous'
|
|
69
|
+
|
|
70
|
+
Class.new(Object) do
|
|
71
|
+
class << self
|
|
72
|
+
|
|
73
|
+
def class_eval
|
|
74
|
+
raise Cleanroom::InaccessibleError.new(:class_eval, self)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def instance_eval
|
|
78
|
+
raise Cleanroom::InaccessibleError.new(:instance_eval, self)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
define_method(:initialize) do |instance|
|
|
84
|
+
define_singleton_method(:__instance__) do
|
|
85
|
+
raise Cleanroom::InaccessibleError.new(:__instance__, self) unless caller[0].include?(__FILE__)
|
|
86
|
+
|
|
87
|
+
instance
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
(exposed - exposed_with_kwargs).each do |exposed_method|
|
|
92
|
+
define_method(exposed_method) do |*args, &block|
|
|
93
|
+
__instance__.public_send(exposed_method, *args, &block)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
exposed_with_kwargs.each do |exposed_method|
|
|
98
|
+
define_method(exposed_method) do |*args, **kwargs, &block|
|
|
99
|
+
__instance__.public_send(exposed_method, *args, **kwargs, &block)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
define_method(:class_eval) do
|
|
104
|
+
raise Cleanroom::InaccessibleError.new(:class_eval, self)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
define_method(:inspect) do
|
|
108
|
+
"#<#{parent} (Cleanroom)>"
|
|
109
|
+
end
|
|
110
|
+
alias_method :to_s, :inspect
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module HybridPlatformsConductor
|
|
2
|
+
|
|
3
|
+
module CoreExtensions
|
|
4
|
+
|
|
5
|
+
module Symbol
|
|
6
|
+
|
|
7
|
+
# As it is better to test status code 0 with zero? and as we use status codes as symbols in case of errors, make the zero? call return appropriately.
|
|
8
|
+
module Zero
|
|
9
|
+
|
|
10
|
+
# Does the symbol equal zero?
|
|
11
|
+
#
|
|
12
|
+
# Result::
|
|
13
|
+
# * false: It does not.
|
|
14
|
+
def zero?
|
|
15
|
+
false
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|