diff --git a/REFERENCE.md b/REFERENCE.md index e09e7f17..173ab89d 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -20,6 +20,7 @@ * [`peadm::assert_supported_pe_version`](#peadm--assert_supported_pe_version): Assert that the PE version given is supported by PEAdm * [`peadm::bolt_version`](#peadm--bolt_version) * [`peadm::certname`](#peadm--certname): Return the certname of the given target-like input +* [`peadm::check_availability`](#peadm--check_availability): check if a group of targets are reachable for bolt * [`peadm::check_version_and_known_hosts`](#peadm--check_version_and_known_hosts): Checks PE verison and warns about setting r10k_known_hosts * [`peadm::convert_hash`](#peadm--convert_hash): converts two arrays into hash * [`peadm::convert_status`](#peadm--convert_status): Transforms a value in a human readable status with or without colors @@ -266,6 +267,30 @@ Variant[Target, +### `peadm::check_availability` + +Type: Puppet Language + +check if a group of targets are reachable for bolt + +#### `peadm::check_availability(TargetSpec $targets, Boolean $output_details = true)` + +The peadm::check_availability function. + +Returns: `Integer` counter for unavailable nodes + +##### `targets` + +Data type: `TargetSpec` + +list of targets that are going to be checked + +##### `output_details` + +Data type: `Boolean` + +flag to enable/disable error output for failed nodes + ### `peadm::check_version_and_known_hosts` Type: Puppet Language diff --git a/functions/check_availability.pp b/functions/check_availability.pp new file mode 100644 index 00000000..f29bc3c6 --- /dev/null +++ b/functions/check_availability.pp @@ -0,0 +1,22 @@ +# +# @summary check if a group of targets are reachable for bolt +# +# @param targets list of targets that are going to be checked +# @param output_details flag to enable/disable error output for failed nodes +# +# @return counter for unavailable nodes +# +# @author Tim Meusel +# +function peadm::check_availability( + TargetSpec $targets, + Boolean $output_details = true +) >> Integer { + $check_result = wait_until_available($targets, wait_time => 2, _catch_errors => true) + unless $check_result.ok { + $end_message = "${check_result.error_set.count} targets are not reachable, stopping plan" + fail_plan($end_message, 'peadm/unreachable-nodes', error_set => $check_result.error_set) + } + + return $check_result.error_set.count +} diff --git a/plans/convert.pp b/plans/convert.pp index 1995a0b0..310212dd 100644 --- a/plans/convert.pp +++ b/plans/convert.pp @@ -56,6 +56,7 @@ ) out::message('# Gathering information') + peadm::check_availability($all_targets) # Get trusted fact information for all compilers. Use peadm::certname() as # the hash key because the apply block below will break trying to parse the diff --git a/plans/install.pp b/plans/install.pp index 1f131533..d742e765 100644 --- a/plans/install.pp +++ b/plans/install.pp @@ -76,6 +76,15 @@ ) { peadm::assert_supported_bolt_version() + out::message('# Gathering information') + $all_targets = peadm::flatten_compact([ + $primary_host, + $replica_host, + $replica_postgresql_host, + $compiler_hosts, + $primary_postgresql_host, + ]) + peadm::check_availability($all_targets) peadm::assert_supported_pe_version($version, $permit_unsafe_versions) $install_result = run_plan('peadm::subplans::install', diff --git a/plans/upgrade.pp b/plans/upgrade.pp index 06ac068d..2e03b724 100644 --- a/plans/upgrade.pp +++ b/plans/upgrade.pp @@ -98,6 +98,7 @@ ]) out::message('# Gathering information') + peadm::check_availability($all_targets) # lint:ignore:strict_indent $primary_target.peadm::fail_on_transport('pcp', @(HEREDOC/n)) diff --git a/spec/plans/install_spec.rb b/spec/plans/install_spec.rb index 1e7c05ef..96f5b342 100644 --- a/spec/plans/install_spec.rb +++ b/spec/plans/install_spec.rb @@ -5,6 +5,7 @@ describe 'basic functionality' do it 'runs successfully with the minimum required parameters' do + allow_out_message expect_plan('peadm::subplans::install') expect_plan('peadm::subplans::configure') expect(run_plan('peadm::install', 'primary_host' => 'primary', 'console_password' => 'puppetlabs', 'version' => '2021.7.7')).to be_ok