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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7d350aa81076d2c5a6837b7184bf903640fb0be35aae2b22f596b870b56a53b8
4
- data.tar.gz: d75bebd5e1f6b12b30ea6f62c01c835bc9f89fba9ed3a208b3fd2dd0bc021328
3
+ metadata.gz: 465192e04717236671a6794a0c114d0aa862d5b6305d6554feff5590ced3cf5d
4
+ data.tar.gz: f6df3a500c30840ea8f151dcd4a290a05a1b0ad6a1884641721e91b8fc558f67
5
5
  SHA512:
6
- metadata.gz: 37c23ac804c359f5875cb9f77f3e639b1711dc967ae664554d50b6e8aeefe26f59385a786c8ff31f56f5a3fc9eb55aaf65cfdc2946fa4c7e8b4b4372fa1ac3e0
7
- data.tar.gz: a558f9c2b88b4a69110a870ba27549315823f2fab6c91c61068f3be1b10c7f2482d18b33883b0762d9cf2ac787fe61616b81d08535b1bc5d352e29e914a0519c
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
- # Initialize the DSL
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 = @nodes_handler.select_confs_for_node(@node, @config.ignored_idempotence_tasks).inject({}) do |merged_ignored_tasks, conf|
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
- error "Task #{task_info[:name]} has diverged", JSON.pretty_generate(task_info) if task_info[:status] == :changed
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 = @nodes_handler.select_confs_for_node(@node, @config.ignored_idempotence_tasks).inject({}) do |merged_ignored_tasks, conf|
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|
@@ -1,5 +1,5 @@
1
1
  module HybridPlatformsConductor
2
2
 
3
- VERSION = '32.10.0'
3
+ VERSION = '32.11.0'
4
4
 
5
5
  end
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.10.0
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-24 00:00:00.000000000 Z
11
+ date: 2021-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: range_operators