hybrid_platforms_conductor 32.16.3 → 33.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +42 -0
  3. data/README.md +6 -3
  4. data/bin/last_deploys +4 -1
  5. data/bin/nodes_to_deploy +5 -5
  6. data/docs/config_dsl.md +45 -1
  7. data/docs/executables.md +6 -7
  8. data/docs/executables/check-node.md +3 -3
  9. data/docs/executables/deploy.md +3 -3
  10. data/docs/executables/dump_nodes_json.md +3 -3
  11. data/docs/executables/test.md +3 -3
  12. data/docs/executables/topograph.md +3 -3
  13. data/docs/gen/mermaid/README.md-0.png +0 -0
  14. data/docs/gen/mermaid/docs/executables/check-node.md-0.png +0 -0
  15. data/docs/gen/mermaid/docs/executables/deploy.md-0.png +0 -0
  16. data/docs/gen/mermaid/docs/executables/free_ips.md-0.png +0 -0
  17. data/docs/gen/mermaid/docs/executables/get_impacted_nodes.md-0.png +0 -0
  18. data/docs/gen/mermaid/docs/executables/last_deploys.md-0.png +0 -0
  19. data/docs/gen/mermaid/docs/executables/nodes_to_deploy.md-0.png +0 -0
  20. data/docs/gen/mermaid/docs/executables/report.md-0.png +0 -0
  21. data/docs/gen/mermaid/docs/executables/run.md-0.png +0 -0
  22. data/docs/gen/mermaid/docs/executables/ssh_config.md-0.png +0 -0
  23. data/docs/gen/mermaid/docs/executables/test.md-0.png +0 -0
  24. data/docs/plugins.md +47 -0
  25. data/docs/plugins/connector/ssh.md +1 -1
  26. data/docs/plugins/log/remote_fs.md +26 -0
  27. data/docs/plugins/secrets_reader/cli.md +31 -0
  28. data/docs/plugins/secrets_reader/thycotic.md +46 -0
  29. data/docs/plugins/test/bitbucket_conf.md +1 -1
  30. data/docs/plugins/test/check_deploy_and_idempotence.md +1 -1
  31. data/docs/plugins/test/connection.md +1 -0
  32. data/docs/plugins/test/deploy_removes_root_access.md +1 -1
  33. data/docs/plugins/test/file_system.md +1 -0
  34. data/docs/plugins/test/github_ci.md +48 -0
  35. data/docs/plugins/test/hostname.md +1 -0
  36. data/docs/plugins/test/ip.md +1 -0
  37. data/docs/plugins/test/jenkins_ci_conf.md +1 -1
  38. data/docs/plugins/test/jenkins_ci_masters_ok.md +1 -1
  39. data/docs/plugins/test/local_users.md +1 -0
  40. data/docs/plugins/test/mounts.md +1 -0
  41. data/docs/plugins/test/orphan_files.md +1 -0
  42. data/docs/plugins/test/ports.md +1 -0
  43. data/docs/plugins/test/spectre.md +1 -0
  44. data/docs/plugins/test/vulnerabilities.md +1 -0
  45. data/lib/hybrid_platforms_conductor/actions_executor.rb +8 -1
  46. data/lib/hybrid_platforms_conductor/common_config_dsl/github.rb +62 -0
  47. data/lib/hybrid_platforms_conductor/deployer.rb +193 -141
  48. data/lib/hybrid_platforms_conductor/hpc_plugins/connector/ssh.rb +3 -3
  49. data/lib/hybrid_platforms_conductor/hpc_plugins/log/my_log_plugin.rb.sample +100 -0
  50. data/lib/hybrid_platforms_conductor/hpc_plugins/log/remote_fs.rb +179 -0
  51. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/cli.rb +75 -0
  52. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/my_secrets_reader_plugin.rb.sample +46 -0
  53. data/lib/hybrid_platforms_conductor/hpc_plugins/secrets_reader/thycotic.rb +87 -0
  54. data/lib/hybrid_platforms_conductor/hpc_plugins/test/check_deploy_and_idempotence.rb +1 -1
  55. data/lib/hybrid_platforms_conductor/hpc_plugins/test/connection.rb +3 -1
  56. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_freshness.rb +7 -20
  57. data/lib/hybrid_platforms_conductor/hpc_plugins/test/deploy_removes_root_access.rb +1 -1
  58. data/lib/hybrid_platforms_conductor/hpc_plugins/test/file_system.rb +2 -1
  59. data/lib/hybrid_platforms_conductor/hpc_plugins/test/github_ci.rb +32 -0
  60. data/lib/hybrid_platforms_conductor/hpc_plugins/test/hostname.rb +3 -1
  61. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ip.rb +3 -1
  62. data/lib/hybrid_platforms_conductor/hpc_plugins/test/local_users.rb +3 -1
  63. data/lib/hybrid_platforms_conductor/hpc_plugins/test/mounts.rb +3 -1
  64. data/lib/hybrid_platforms_conductor/hpc_plugins/test/orphan_files.rb +3 -1
  65. data/lib/hybrid_platforms_conductor/hpc_plugins/test/ports.rb +3 -1
  66. data/lib/hybrid_platforms_conductor/hpc_plugins/test/spectre.rb +3 -1
  67. data/lib/hybrid_platforms_conductor/hpc_plugins/test/vulnerabilities.rb +2 -1
  68. data/lib/hybrid_platforms_conductor/log.rb +31 -0
  69. data/lib/hybrid_platforms_conductor/plugins.rb +1 -0
  70. data/lib/hybrid_platforms_conductor/secrets_reader.rb +31 -0
  71. data/lib/hybrid_platforms_conductor/test_only_remote_node.rb +18 -0
  72. data/lib/hybrid_platforms_conductor/version.rb +1 -1
  73. data/spec/hybrid_platforms_conductor_test.rb +27 -6
  74. data/spec/hybrid_platforms_conductor_test/api/actions_executor/connectors/ssh/connections_spec.rb +3 -3
  75. data/spec/hybrid_platforms_conductor_test/api/deployer/config_dsl_spec.rb +46 -4
  76. data/spec/hybrid_platforms_conductor_test/api/deployer/deploy_spec.rb +187 -212
  77. data/spec/hybrid_platforms_conductor_test/api/deployer/log_plugins/remote_fs_spec.rb +223 -0
  78. data/spec/hybrid_platforms_conductor_test/api/deployer/provisioner_spec.rb +4 -4
  79. data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/cli_spec.rb +63 -0
  80. data/spec/hybrid_platforms_conductor_test/api/deployer/secrets_reader_plugins/thycotic_spec.rb +253 -0
  81. data/spec/hybrid_platforms_conductor_test/api/tests_runner/global_spec.rb +1 -1
  82. data/spec/hybrid_platforms_conductor_test/api/tests_runner/test_plugins/github_ci_spec.rb +72 -0
  83. data/spec/hybrid_platforms_conductor_test/executables/last_deploys_spec.rb +146 -98
  84. data/spec/hybrid_platforms_conductor_test/executables/nodes_to_deploy_spec.rb +240 -83
  85. data/spec/hybrid_platforms_conductor_test/executables/options/common_spec.rb +2 -1
  86. data/spec/hybrid_platforms_conductor_test/executables/options/deployer_spec.rb +0 -182
  87. data/spec/hybrid_platforms_conductor_test/helpers/connector_ssh_helpers.rb +1 -1
  88. data/spec/hybrid_platforms_conductor_test/helpers/deployer_helpers.rb +40 -53
  89. data/spec/hybrid_platforms_conductor_test/helpers/deployer_test_helpers.rb +251 -15
  90. data/spec/hybrid_platforms_conductor_test/test_log_no_read_plugin.rb +82 -0
  91. data/spec/hybrid_platforms_conductor_test/test_log_plugin.rb +103 -0
  92. data/spec/hybrid_platforms_conductor_test/test_secrets_reader_plugin.rb +45 -0
  93. metadata +41 -2
@@ -54,7 +54,7 @@ module HybridPlatformsConductor
54
54
  instance.stop
55
55
  instance.with_running_instance(port: 22) do
56
56
 
57
- unless @nodes_handler.get_root_access_allowed_of(@node) == 'true'
57
+ unless @nodes_handler.get_root_access_allowed_of(@node)
58
58
  # ===== Deploy removes root access
59
59
  # Check that we can't connect with root
60
60
  ssh_ok = false
@@ -1,3 +1,5 @@
1
+ require 'hybrid_platforms_conductor/test_only_remote_node'
2
+
1
3
  module HybridPlatformsConductor
2
4
 
3
5
  module HpcPlugins
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
5
7
  module Test
6
8
 
7
9
  # Test that the connection works by simply outputing something
8
- class Connection < HybridPlatformsConductor::Test
10
+ class Connection < TestOnlyRemoteNode
9
11
 
10
12
  TEST_CONNECTION_STRING = 'Test connection - ok'
11
13
 
@@ -12,27 +12,14 @@ module HybridPlatformsConductor
12
12
  MAX_ACCEPTABLE_REFRESH_PERIOD_SECS = 3 * 31 * 24 * 60 * 60 # 3 months
13
13
 
14
14
  # Check my_test_plugin.rb.sample documentation for signature details.
15
- def test_on_node
15
+ def test_for_node
16
16
  now = Time.now
17
- {
18
- "#{@nodes_handler.sudo_on(@node)} ls -t /var/log/deployments" => proc do |stdout|
19
- if stdout.empty?
20
- error 'Node has never been deployed using deploy (/var/log/deployments is empty)'
21
- elsif stdout.first =~ /No such file or directory/
22
- error 'Node has never been deployed using deploy (/var/log/deployments does not exist)'
23
- else
24
- # Expecting following file names
25
- # node-name_2017-12-01_093418_user-name
26
- file_match = stdout.first.match(/^#{Regexp.escape(@node)}_(\d{4}-\d{2}-\d{2})_.+$/)
27
- if file_match.nil?
28
- error "Invalid chef deployment log file found: #{stdout.first}"
29
- else
30
- last_deploy_time = Time.parse(file_match[1])
31
- error "Last deployment has been done on #{last_deploy_time.strftime('%F')}. Should refresh it." if now - last_deploy_time > MAX_ACCEPTABLE_REFRESH_PERIOD_SECS
32
- end
33
- end
34
- end
35
- }
17
+ deploy_info = @deployer.deployment_info_from(@node)[@node]
18
+ if deploy_info.key?(:error)
19
+ error "Error while getting deployment info: #{deploy_info[:error]}"
20
+ elsif Time.now.utc - deploy_info[:deployment_info][:date] > MAX_ACCEPTABLE_REFRESH_PERIOD_SECS
21
+ error "Last deployment has been done on #{deploy_info[:deployment_info][:date].strftime('%F')}. Should refresh it."
22
+ end
36
23
  end
37
24
 
38
25
  end
@@ -12,7 +12,7 @@ module HybridPlatformsConductor
12
12
 
13
13
  # Check my_test_plugin.rb.sample documentation for signature details.
14
14
  def test_for_node
15
- unless @nodes_handler.get_root_access_allowed_of(@node) == 'true'
15
+ unless @nodes_handler.get_root_access_allowed_of(@node)
16
16
  @deployer.with_test_provisioned_instance(@config.tests_provisioner_id, @node, environment: 'deploy_removes_root_access', reuse_instance: log_debug?) do |deployer, instance|
17
17
  # Check that we can connect with root
18
18
  ssh_ok = false
@@ -1,3 +1,4 @@
1
+ require 'hybrid_platforms_conductor/test_only_remote_node'
1
2
  require 'hybrid_platforms_conductor/common_config_dsl/file_system_tests'
2
3
 
3
4
  module HybridPlatformsConductor
@@ -7,7 +8,7 @@ module HybridPlatformsConductor
7
8
  module Test
8
9
 
9
10
  # Perform various tests on a node's file system
10
- class FileSystem < HybridPlatformsConductor::Test
11
+ class FileSystem < TestOnlyRemoteNode
11
12
 
12
13
  self.extend_config_dsl_with CommonConfigDsl::FileSystemTests, :init_file_system_tests
13
14
 
@@ -0,0 +1,32 @@
1
+ require 'hybrid_platforms_conductor/common_config_dsl/github'
2
+
3
+ module HybridPlatformsConductor
4
+
5
+ module HpcPlugins
6
+
7
+ module Test
8
+
9
+ # Check that all repositories have a successful Github CI
10
+ class GithubCi < HybridPlatformsConductor::Test
11
+
12
+ self.extend_config_dsl_with CommonConfigDsl::Github, :init_github
13
+
14
+ # Check my_test_plugin.rb.sample documentation for signature details.
15
+ def test
16
+ @config.for_each_github_repo do |client, repo_info|
17
+ log_debug "Checking CI for Github repository #{repo_info[:slug]}"
18
+ last_status = client.repository_workflow_runs(repo_info[:slug])[:workflow_runs].
19
+ select { |run| run[:head_branch] == 'master' }.
20
+ sort_by { |run| run[:created_at] }.
21
+ last[:conclusion]
22
+ error "Last workflow status for repository #{repo_info[:slug]} is #{last_status}" unless last_status == 'success'
23
+ end
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+
32
+ end
@@ -1,3 +1,5 @@
1
+ require 'hybrid_platforms_conductor/test_only_remote_node'
2
+
1
3
  module HybridPlatformsConductor
2
4
 
3
5
  module HpcPlugins
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
5
7
  module Test
6
8
 
7
9
  # Test that the hostname is correct
8
- class Hostname < HybridPlatformsConductor::Test
10
+ class Hostname < TestOnlyRemoteNode
9
11
 
10
12
  # Check my_test_plugin.rb.sample documentation for signature details.
11
13
  def test_on_node
@@ -1,3 +1,5 @@
1
+ require 'hybrid_platforms_conductor/test_only_remote_node'
2
+
1
3
  module HybridPlatformsConductor
2
4
 
3
5
  module HpcPlugins
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
5
7
  module Test
6
8
 
7
9
  # Test that the private IP address is correct
8
- class Ip < HybridPlatformsConductor::Test
10
+ class Ip < TestOnlyRemoteNode
9
11
 
10
12
  # Check my_test_plugin.rb.sample documentation for signature details.
11
13
  def test_on_node
@@ -1,3 +1,5 @@
1
+ require 'hybrid_platforms_conductor/test_only_remote_node'
2
+
1
3
  module HybridPlatformsConductor
2
4
 
3
5
  module HpcPlugins
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
5
7
  module Test
6
8
 
7
9
  # Test that the node's local users
8
- class LocalUsers < HybridPlatformsConductor::Test
10
+ class LocalUsers < TestOnlyRemoteNode
9
11
 
10
12
  # Config DSL extension for this test plugin
11
13
  module ConfigDslExtension
@@ -1,3 +1,5 @@
1
+ require 'hybrid_platforms_conductor/test_only_remote_node'
2
+
1
3
  module HybridPlatformsConductor
2
4
 
3
5
  module HpcPlugins
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
5
7
  module Test
6
8
 
7
9
  # Various tests on mounts
8
- class Mounts < HybridPlatformsConductor::Test
10
+ class Mounts < TestOnlyRemoteNode
9
11
 
10
12
  # Config DSL extension for this test plugin
11
13
  module ConfigDslExtension
@@ -1,3 +1,5 @@
1
+ require 'hybrid_platforms_conductor/test_only_remote_node'
2
+
1
3
  module HybridPlatformsConductor
2
4
 
3
5
  module HpcPlugins
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
5
7
  module Test
6
8
 
7
9
  # Test that the node has no orphan files
8
- class OrphanFiles < HybridPlatformsConductor::Test
10
+ class OrphanFiles < TestOnlyRemoteNode
9
11
 
10
12
  # Config DSL extension for this test plugin
11
13
  module ConfigDslExtension
@@ -1,3 +1,5 @@
1
+ require 'hybrid_platforms_conductor/test_only_remote_node'
2
+
1
3
  module HybridPlatformsConductor
2
4
 
3
5
  module HpcPlugins
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
5
7
  module Test
6
8
 
7
9
  # Various tests on ports
8
- class Ports < HybridPlatformsConductor::Test
10
+ class Ports < TestOnlyRemoteNode
9
11
 
10
12
  # Config DSL extension for this test plugin
11
13
  module ConfigDslExtension
@@ -1,3 +1,5 @@
1
+ require 'hybrid_platforms_conductor/test_only_remote_node'
2
+
1
3
  module HybridPlatformsConductor
2
4
 
3
5
  module HpcPlugins
@@ -5,7 +7,7 @@ module HybridPlatformsConductor
5
7
  module Test
6
8
 
7
9
  # Test that the vulnerabilities Spectre and Meltdown are patched
8
- class Spectre < HybridPlatformsConductor::Test
10
+ class Spectre < TestOnlyRemoteNode
9
11
 
10
12
  VULNERABILITIES_TO_CHECK = {
11
13
  'CVE-2017-5753' => 'Spectre Variant 1',
@@ -1,4 +1,5 @@
1
1
  require 'nokogiri'
2
+ require 'hybrid_platforms_conductor/test_only_remote_node'
2
3
 
3
4
  module HybridPlatformsConductor
4
5
 
@@ -17,7 +18,7 @@ module HybridPlatformsConductor
17
18
  # Each final OVAL URL can be directly an XML file, either raw or compressed with .gz or .bz2.
18
19
  # This is useful to follow repository links, such as jFrog or web servers serving common file systems structure storing several versions of the OVAL file.
19
20
  # * *reported_severities* (Array<String> or nil): List of severities to report, if any (use Unknown when the severity is not known), or nil for all [default: nil]
20
- class Vulnerabilities < HybridPlatformsConductor::Test
21
+ class Vulnerabilities < TestOnlyRemoteNode
21
22
 
22
23
  # Known compression methods, per file extension, and their corresponding uncompress bash script
23
24
  KNOWN_COMPRESSIONS = {
@@ -0,0 +1,31 @@
1
+ require 'hybrid_platforms_conductor/logger_helpers'
2
+ require 'hybrid_platforms_conductor/plugin'
3
+
4
+ module HybridPlatformsConductor
5
+
6
+ # Ancestor of all log plugins
7
+ class Log < Plugin
8
+
9
+ # Constructor
10
+ #
11
+ # Parameters::
12
+ # * *logger* (Logger): Logger to be used [default: Logger.new(STDOUT)]
13
+ # * *logger_stderr* (Logger): Logger to be used for stderr [default: Logger.new(STDERR)]
14
+ # * *config* (Config): Config to be used. [default: Config.new]
15
+ # * *nodes_handler* (NodesHandler): Nodes handler to be used. [default: NodesHandler.new]
16
+ # * *actions_executor* (ActionsExecutor): Actions executor to be used. [default: ActionsExecutor.new]
17
+ def initialize(
18
+ logger: Logger.new(STDOUT),
19
+ logger_stderr: Logger.new(STDERR),
20
+ config: Config.new,
21
+ nodes_handler: NodesHandler.new,
22
+ actions_executor: ActionsExecutor.new
23
+ )
24
+ super(logger: logger, logger_stderr: logger_stderr, config: config)
25
+ @nodes_handler = nodes_handler
26
+ @actions_executor = actions_executor
27
+ end
28
+
29
+ end
30
+
31
+ end
@@ -38,6 +38,7 @@ module HybridPlatformsConductor
38
38
  []
39
39
  each
40
40
  empty?
41
+ find
41
42
  key?
42
43
  keys
43
44
  select
@@ -0,0 +1,31 @@
1
+ require 'hybrid_platforms_conductor/logger_helpers'
2
+ require 'hybrid_platforms_conductor/plugin'
3
+
4
+ module HybridPlatformsConductor
5
+
6
+ # Ancestor of all secrets reader plugins
7
+ class SecretsReader < Plugin
8
+
9
+ # Constructor
10
+ #
11
+ # Parameters::
12
+ # * *logger* (Logger): Logger to be used [default: Logger.new(STDOUT)]
13
+ # * *logger_stderr* (Logger): Logger to be used for stderr [default: Logger.new(STDERR)]
14
+ # * *config* (Config): Config to be used. [default: Config.new]
15
+ # * *cmd_runner* (CmdRunner): CmdRunner to be used. [default: CmdRunner.new]
16
+ # * *nodes_handler* (NodesHandler): Nodes handler to be used. [default: NodesHandler.new]
17
+ def initialize(
18
+ logger: Logger.new(STDOUT),
19
+ logger_stderr: Logger.new(STDERR),
20
+ config: Config.new,
21
+ cmd_runner: CmdRunner.new,
22
+ nodes_handler: NodesHandler.new
23
+ )
24
+ super(logger: logger, logger_stderr: logger_stderr, config: config)
25
+ @cmd_runner = cmd_runner
26
+ @nodes_handler = nodes_handler
27
+ end
28
+
29
+ end
30
+
31
+ end
@@ -0,0 +1,18 @@
1
+ module HybridPlatformsConductor
2
+
3
+ # Ancestor for all tests that should be run just on remote nodes
4
+ class TestOnlyRemoteNode < Test
5
+
6
+ # Limit the list of nodes for these tests.
7
+ #
8
+ # Result::
9
+ # * 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.
10
+ def self.only_on_nodes
11
+ # Just 1 node per service and platform
12
+ Test.nodes_handler.prefetch_metadata_of Test.nodes_handler.known_nodes, :local_node
13
+ Test.nodes_handler.known_nodes.select { |node| !Test.nodes_handler.get_local_node_of(node) }
14
+ end
15
+
16
+ end
17
+
18
+ end
@@ -1,5 +1,5 @@
1
1
  module HybridPlatformsConductor
2
2
 
3
- VERSION = '32.16.3'
3
+ VERSION = '33.0.0'
4
4
 
5
5
  end
@@ -4,7 +4,9 @@ require 'hybrid_platforms_conductor/config'
4
4
  require 'hybrid_platforms_conductor/platforms_handler'
5
5
  require 'hybrid_platforms_conductor/actions_executor'
6
6
  require 'hybrid_platforms_conductor/cmd_runner'
7
+ require 'hybrid_platforms_conductor/credentials'
7
8
  require 'hybrid_platforms_conductor/deployer'
9
+ require 'hybrid_platforms_conductor/log'
8
10
  require 'hybrid_platforms_conductor/nodes_handler'
9
11
  require 'hybrid_platforms_conductor/platform_handler'
10
12
  require 'hybrid_platforms_conductor/provisioner'
@@ -43,6 +45,8 @@ require 'hybrid_platforms_conductor_test/platform_handler_plugins/test2'
43
45
  require 'hybrid_platforms_conductor_test/report_plugin'
44
46
  require 'hybrid_platforms_conductor_test/test_action'
45
47
  require 'hybrid_platforms_conductor_test/test_connector'
48
+ require 'hybrid_platforms_conductor_test/test_log_plugin'
49
+ require 'hybrid_platforms_conductor_test/test_log_no_read_plugin'
46
50
  require 'hybrid_platforms_conductor_test/test_plugins/global'
47
51
  require 'hybrid_platforms_conductor_test/test_plugins/node'
48
52
  require 'hybrid_platforms_conductor_test/test_plugins/node_check'
@@ -50,6 +54,7 @@ require 'hybrid_platforms_conductor_test/test_plugins/node_ssh'
50
54
  require 'hybrid_platforms_conductor_test/test_plugins/platform'
51
55
  require 'hybrid_platforms_conductor_test/test_plugins/several_checks'
52
56
  require 'hybrid_platforms_conductor_test/test_provisioner'
57
+ require 'hybrid_platforms_conductor_test/test_secrets_reader_plugin'
53
58
  require 'hybrid_platforms_conductor_test/tests_report_plugin'
54
59
 
55
60
  module HybridPlatformsConductorTest
@@ -128,16 +133,32 @@ module HybridPlatformsConductorTest
128
133
  HybridPlatformsConductorTest::TestPlugins::NodeCheck.only_on_platform_types = nil
129
134
  HybridPlatformsConductorTest::TestPlugins::NodeCheck.only_on_nodes = nil
130
135
  HybridPlatformsConductorTest::TestPlugins::SeveralChecks.runs = []
136
+ HybridPlatformsConductorTest::TestLogPlugin.calls = []
137
+ HybridPlatformsConductorTest::TestLogNoReadPlugin.calls = []
138
+ HybridPlatformsConductorTest::TestSecretsReaderPlugin.calls = []
139
+ HybridPlatformsConductorTest::TestSecretsReaderPlugin.deployer = nil
140
+ HybridPlatformsConductorTest::TestSecretsReaderPlugin.mocked_secrets = {}
131
141
  FileUtils.rm_rf './run_logs'
132
142
  FileUtils.rm_rf './testadmin.key.pub'
133
143
  FileUtils.rm_rf '/tmp/hpc_ssh'
144
+ register_plugins(
145
+ :log,
146
+ {
147
+ test_log: HybridPlatformsConductorTest::TestLogPlugin,
148
+ test_log_no_read: HybridPlatformsConductorTest::TestLogNoReadPlugin
149
+ },
150
+ replace: false
151
+ )
134
152
  # Make sure CMDB plugin classes loaded by test framework are not added automatically
135
- register_plugins(:cmdb, {
136
- config: HybridPlatformsConductor::HpcPlugins::Cmdb::Config,
137
- host_ip: HybridPlatformsConductor::HpcPlugins::Cmdb::HostIp,
138
- host_keys: HybridPlatformsConductor::HpcPlugins::Cmdb::HostKeys,
139
- platform_handlers: HybridPlatformsConductor::HpcPlugins::Cmdb::PlatformHandlers
140
- })
153
+ register_plugins(
154
+ :cmdb,
155
+ {
156
+ config: HybridPlatformsConductor::HpcPlugins::Cmdb::Config,
157
+ host_ip: HybridPlatformsConductor::HpcPlugins::Cmdb::HostIp,
158
+ host_keys: HybridPlatformsConductor::HpcPlugins::Cmdb::HostKeys,
159
+ platform_handlers: HybridPlatformsConductor::HpcPlugins::Cmdb::PlatformHandlers
160
+ }
161
+ )
141
162
  end
142
163
  end
143
164
 
@@ -29,7 +29,7 @@ describe HybridPlatformsConductor::ActionsExecutor do
29
29
  end
30
30
 
31
31
  it 'creates an SSH master to 1 node not having Session Exec capabilities' do
32
- with_test_platform(nodes: { 'node' => { meta: { host_ip: '192.168.42.42', ssh_session_exec: 'false' } } }) do
32
+ with_test_platform(nodes: { 'node' => { meta: { host_ip: '192.168.42.42', ssh_session_exec: false } } }) do
33
33
  with_cmd_runner_mocked(
34
34
  [
35
35
  ['which env', proc { [0, "/usr/bin/env\n", ''] }],
@@ -45,7 +45,7 @@ describe HybridPlatformsConductor::ActionsExecutor do
45
45
  end
46
46
 
47
47
  it 'can\'t create an SSH master to 1 node not having Session Exec capabilities when hpc_interactive is false' do
48
- with_test_platform(nodes: { 'node' => { meta: { host_ip: '192.168.42.42', ssh_session_exec: 'false' } } }) do
48
+ with_test_platform(nodes: { 'node' => { meta: { host_ip: '192.168.42.42', ssh_session_exec: false } } }) do
49
49
  ENV['hpc_interactive'] = 'false'
50
50
  with_cmd_runner_mocked(
51
51
  [
@@ -69,7 +69,7 @@ describe HybridPlatformsConductor::ActionsExecutor do
69
69
  it 'fails without creating exception when creating an SSH master to 1 node not having Session Exec capabilities when hpc_interactive is false and we use no_exception' do
70
70
  with_test_platform(nodes: {
71
71
  'node1' => { meta: { host_ip: '192.168.42.1' } },
72
- 'node2' => { meta: { host_ip: '192.168.42.2', ssh_session_exec: 'false' } },
72
+ 'node2' => { meta: { host_ip: '192.168.42.2', ssh_session_exec: false } },
73
73
  'node3' => { meta: { host_ip: '192.168.42.3' } }
74
74
  }) do
75
75
  ENV['hpc_interactive'] = 'false'
@@ -3,10 +3,52 @@ describe HybridPlatformsConductor::Deployer do
3
3
  context 'checking deployer specific config DSL' do
4
4
 
5
5
  it 'declares a packaging timeout' do
6
- with_repository do |repository|
7
- with_platforms('packaging_timeout 666') do
8
- expect(test_config.packaging_timeout_secs).to eq 666
9
- end
6
+ with_platforms('packaging_timeout 666') do
7
+ expect(test_config.packaging_timeout_secs).to eq 666
8
+ end
9
+ end
10
+
11
+ it 'declares log plugins to be used' do
12
+ with_test_platforms(
13
+ { nodes: { 'node1' => {}, 'node2' => {} } },
14
+ false,
15
+ <<~EOS
16
+ send_logs_to %i[log_plugin_1 log_plugin_2]
17
+ for_nodes('node2') { send_logs_to :log_plugin_3 }
18
+ EOS
19
+ ) do
20
+ expect(test_config.deployment_logs).to eq [
21
+ {
22
+ nodes_selectors_stack: [],
23
+ log_plugins: %i[log_plugin_1 log_plugin_2]
24
+ },
25
+ {
26
+ nodes_selectors_stack: %w[node2],
27
+ log_plugins: %i[log_plugin_3]
28
+ }
29
+ ]
30
+ end
31
+ end
32
+
33
+ it 'declares secrets readers plugins to be used' do
34
+ with_test_platforms(
35
+ { nodes: { 'node1' => {}, 'node2' => {} } },
36
+ false,
37
+ <<~EOS
38
+ read_secrets_from %i[secrets_reader_plugin_1 secrets_reader_plugin_2]
39
+ for_nodes('node2') { read_secrets_from :secrets_reader_plugin_3 }
40
+ EOS
41
+ ) do
42
+ expect(test_config.secrets_readers).to eq [
43
+ {
44
+ nodes_selectors_stack: [],
45
+ secrets_readers: %i[secrets_reader_plugin_1 secrets_reader_plugin_2]
46
+ },
47
+ {
48
+ nodes_selectors_stack: %w[node2],
49
+ secrets_readers: %i[secrets_reader_plugin_3]
50
+ }
51
+ ]
10
52
  end
11
53
  end
12
54