hybrid_platforms_conductor 32.10.0 → 32.11.0
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/lib/hybrid_platforms_conductor/common_config_dsl/idempotence_tests.rb +23 -1
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/check_deploy_and_idempotence.rb +4 -1
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/divergence.rb +16 -1
- data/lib/hybrid_platforms_conductor/hpc_plugins/test/idempotence.rb +4 -1
- data/lib/hybrid_platforms_conductor/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 465192e04717236671a6794a0c114d0aa862d5b6305d6554feff5590ced3cf5d
|
4
|
+
data.tar.gz: f6df3a500c30840ea8f151dcd4a290a05a1b0ad6a1884641721e91b8fc558f67
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bac26c60bb434dee2d2bae35a4c652abf4d4fcd5aed9cd13fb494fd6661ef0c7cc93f54aa3b52bc3e4458773228644233aaaa50ca0fc48815c43e5edba6b8043
|
7
|
+
data.tar.gz: e2a5dc1e158bcd70317c1bf6eba19cba6b3068bf1c334ed31b0a1e377194a41312e967974df5365a549bbe55711c938580d320c206af051247e5e254f44f1322
|
@@ -11,13 +11,24 @@ module HybridPlatformsConductor
|
|
11
11
|
# Array< Hash<Symbol, Object> >
|
12
12
|
attr_reader :ignored_idempotence_tasks
|
13
13
|
|
14
|
-
#
|
14
|
+
# List of ignored tasks info. Each info has the following properties:
|
15
|
+
# * *nodes_selectors_stack* (Array<Object>): Stack of nodes selectors impacted by this rule
|
16
|
+
# * *ignored_tasks* (Hash<String, String>): List of task names for which we ignore divergence errors, with the corresponding descriptive reason for ignore.
|
17
|
+
# Array< Hash<Symbol, Object> >
|
18
|
+
attr_reader :ignored_divergent_tasks
|
19
|
+
|
20
|
+
# Initialize the DSL
|
15
21
|
def init_idempotence_tests
|
16
22
|
# List of ignored tasks info. Each info has the following properties:
|
17
23
|
# * *nodes_selectors_stack* (Array<Object>): Stack of nodes selectors impacted by this rule
|
18
24
|
# * *ignored_tasks* (Hash<String, String>): List of task names for which we ignore idempotence errors, with the corresponding descriptive reason for ignore.
|
19
25
|
# Array< Hash<Symbol, Object> >
|
20
26
|
@ignored_idempotence_tasks = []
|
27
|
+
# List of ignored tasks info. Each info has the following properties:
|
28
|
+
# * *nodes_selectors_stack* (Array<Object>): Stack of nodes selectors impacted by this rule
|
29
|
+
# * *ignored_tasks* (Hash<String, String>): List of task names for which we ignore divergence errors, with the corresponding descriptive reason for ignore.
|
30
|
+
# Array< Hash<Symbol, Object> >
|
31
|
+
@ignored_divergent_tasks = []
|
21
32
|
end
|
22
33
|
|
23
34
|
# Ignore idempotence errors on a set of tasks
|
@@ -31,6 +42,17 @@ module HybridPlatformsConductor
|
|
31
42
|
}
|
32
43
|
end
|
33
44
|
|
45
|
+
# Ignore idempotence errors on a set of tasks
|
46
|
+
#
|
47
|
+
# Parameters::
|
48
|
+
# * *tasks_to_ignore* (Hash<String, String>): Set of tasks to ignore, along with the reason
|
49
|
+
def ignore_divergent_tasks(tasks_to_ignore)
|
50
|
+
@ignored_divergent_tasks << {
|
51
|
+
ignored_tasks: tasks_to_ignore,
|
52
|
+
nodes_selectors_stack: current_nodes_selectors_stack,
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
34
56
|
end
|
35
57
|
|
36
58
|
end
|
@@ -81,7 +81,10 @@ module HybridPlatformsConductor
|
|
81
81
|
exit_status, stdout, stderr = deployer.deploy_on(@node)[@node]
|
82
82
|
assert_equal exit_status, 0, "Check-node after deployment returned error code #{exit_status}", log_debug? ? nil : deployer.stdouts_to_s
|
83
83
|
# Check that the output of the check-node returns no changes.
|
84
|
-
ignored_tasks =
|
84
|
+
ignored_tasks = (
|
85
|
+
@nodes_handler.select_confs_for_node(@node, @config.ignored_idempotence_tasks) +
|
86
|
+
@nodes_handler.select_confs_for_node(@node, @config.ignored_divergent_tasks)
|
87
|
+
).inject({}) do |merged_ignored_tasks, conf|
|
85
88
|
merged_ignored_tasks.merge(conf[:ignored_tasks])
|
86
89
|
end
|
87
90
|
@deployer.parse_deploy_output(@node, stdout, stderr).each do |task_info|
|
@@ -11,8 +11,23 @@ module HybridPlatformsConductor
|
|
11
11
|
|
12
12
|
# Check my_test_plugin.rb.sample documentation for signature details.
|
13
13
|
def test_on_check_node(stdout, stderr, exit_status)
|
14
|
+
# Check that the output of the check-node returns no changes.
|
15
|
+
ignored_tasks = @nodes_handler.select_confs_for_node(@node, @config.ignored_divergent_tasks).inject({}) do |merged_ignored_tasks, conf|
|
16
|
+
merged_ignored_tasks.merge(conf[:ignored_tasks])
|
17
|
+
end
|
14
18
|
@deployer.parse_deploy_output(@node, stdout, stderr).each do |task_info|
|
15
|
-
|
19
|
+
if task_info[:status] == :changed
|
20
|
+
if ignored_tasks.key?(task_info[:name])
|
21
|
+
# It was expected that this task is not idempotent
|
22
|
+
log_debug "Task #{task_info[:name]} was expected to be divergent. Reason: #{ignored_tasks[task_info[:name]]}"
|
23
|
+
else
|
24
|
+
extra_details = task_info.slice(*(task_info.keys - %i[name status diffs]))
|
25
|
+
error_details = []
|
26
|
+
error_details << "----- Changes:\n#{task_info[:diffs].strip}\n-----" if task_info[:diffs]
|
27
|
+
error_details << "----- Additional details:\n#{JSON.pretty_generate(extra_details)}\n-----" unless extra_details.empty?
|
28
|
+
error "Task #{task_info[:name]} has diverged", error_details.empty? ? nil : error_details.join("\n")
|
29
|
+
end
|
30
|
+
end
|
16
31
|
end
|
17
32
|
end
|
18
33
|
|
@@ -43,7 +43,10 @@ module HybridPlatformsConductor
|
|
43
43
|
assert_equal tested_node, @node, "Wrong node being tested: #{tested_node} should be #{@node}"
|
44
44
|
assert_equal exit_status, 0, "Check-node returned error code #{exit_status}"
|
45
45
|
# Check that the output of the check-node returns no changes.
|
46
|
-
ignored_tasks =
|
46
|
+
ignored_tasks = (
|
47
|
+
@nodes_handler.select_confs_for_node(@node, @config.ignored_idempotence_tasks) +
|
48
|
+
@nodes_handler.select_confs_for_node(@node, @config.ignored_divergent_tasks)
|
49
|
+
).inject({}) do |merged_ignored_tasks, conf|
|
47
50
|
merged_ignored_tasks.merge(conf[:ignored_tasks])
|
48
51
|
end
|
49
52
|
@deployer.parse_deploy_output(@node, stdout, stderr).each do |task_info|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hybrid_platforms_conductor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 32.
|
4
|
+
version: 32.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Muriel Salvan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-03-
|
11
|
+
date: 2021-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: range_operators
|