hybrid_platforms_conductor 32.10.0 → 32.11.0

Sign up to get free protection for your applications and to get access to all the features.
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