Skip to content

Commit 8e43b1c

Browse files
committed
Add function to check if nodes are reachable via bolt
At the moment the plans assume that all nodes are available. I had a few customer setups where one of the compilers wasn't reachable during a convert/upgrade. To not put the PE infra into an undefined state, it makes sense to check the availability before running the plans.
1 parent a99cb66 commit 8e43b1c

File tree

5 files changed

+59
-0
lines changed

5 files changed

+59
-0
lines changed

REFERENCE.md

+25
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
* [`peadm::assert_supported_pe_version`](#peadm--assert_supported_pe_version): Assert that the PE version given is supported by PEAdm
2121
* [`peadm::bolt_version`](#peadm--bolt_version)
2222
* [`peadm::certname`](#peadm--certname): Return the certname of the given target-like input
23+
* [`peadm::check_availability`](#peadm--check_availability): check if a group of targets are reachable for bolt
2324
* [`peadm::check_version_and_known_hosts`](#peadm--check_version_and_known_hosts): Checks PE verison and warns about setting r10k_known_hosts
2425
* [`peadm::convert_hash`](#peadm--convert_hash): converts two arrays into hash
2526
* [`peadm::convert_status`](#peadm--convert_status): Transforms a value in a human readable status with or without colors
@@ -266,6 +267,30 @@ Variant[Target,
266267

267268

268269

270+
### <a name="peadm--check_availability"></a>`peadm::check_availability`
271+
272+
Type: Puppet Language
273+
274+
check if a group of targets are reachable for bolt
275+
276+
#### `peadm::check_availability(TargetSpec $targets, Boolean $output_details = true)`
277+
278+
The peadm::check_availability function.
279+
280+
Returns: `Integer` counter for unavailable nodes
281+
282+
##### `targets`
283+
284+
Data type: `TargetSpec`
285+
286+
list of targets that are going to be checked
287+
288+
##### `output_details`
289+
290+
Data type: `Boolean`
291+
292+
flag to enable/disable error output for failed nodes
293+
269294
### <a name="peadm--check_version_and_known_hosts"></a>`peadm::check_version_and_known_hosts`
270295

271296
Type: Puppet Language

functions/check_availability.pp

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#
2+
# @summary check if a group of targets are reachable for bolt
3+
#
4+
# @param targets list of targets that are going to be checked
5+
# @param output_details flag to enable/disable error output for failed nodes
6+
#
7+
# @return counter for unavailable nodes
8+
#
9+
# @author Tim Meusel <[email protected]>
10+
#
11+
function peadm::check_availability(
12+
TargetSpec $targets,
13+
Boolean $output_details = true
14+
) >> Integer {
15+
$check_result = wait_until_available($targets, wait_time => 2, _catch_errors => true)
16+
if $check_result.ok {
17+
} else {
18+
$messages = $check_result.error_set.map |$result| {
19+
"## node ${result.target} has connection error '${result.error.kind}' with message '${result.error.msg}'"
20+
}
21+
$end_message = "${check_result.error_set.count} targets are not reachable, stopping plan"
22+
$fail_message = $output_details ? {
23+
true => "${messages.join("\n")}\n${end_message}",
24+
false => $end_message,
25+
}
26+
fail_plan($fail_message)
27+
}
28+
29+
return $check_result.error_set.count
30+
}

plans/convert.pp

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
)
5757

5858
out::message('# Gathering information')
59+
peadm::check_availability($pe_installer_targets)
5960

6061
# Get trusted fact information for all compilers. Use peadm::certname() as
6162
# the hash key because the apply block below will break trying to parse the

plans/install.pp

+2
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@
7676
) {
7777
peadm::assert_supported_bolt_version()
7878

79+
out::message('# Gathering information')
80+
peadm::check_availability($pe_installer_targets)
7981
peadm::assert_supported_pe_version($version, $permit_unsafe_versions)
8082

8183
$install_result = run_plan('peadm::subplans::install',

plans/upgrade.pp

+1
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@
9898
])
9999

100100
out::message('# Gathering information')
101+
peadm::check_availability($pe_installer_targets)
101102

102103
# lint:ignore:strict_indent
103104
$primary_target.peadm::fail_on_transport('pcp', @(HEREDOC/n))

0 commit comments

Comments
 (0)