diff --git a/REFERENCE.md b/REFERENCE.md
index 2951060f..526c843c 100644
--- a/REFERENCE.md
+++ b/REFERENCE.md
@@ -35,6 +35,7 @@
* [`peadm::migration_opts_default`](#peadm--migration_opts_default)
* [`peadm::node_manager_yaml_location`](#peadm--node_manager_yaml_location)
* [`peadm::oid`](#peadm--oid)
+* [`peadm::pe_db_names`](#peadm--pe_db_names)
* [`peadm::plan_step`](#peadm--plan_step)
* [`peadm::recovery_opts_all`](#peadm--recovery_opts_all)
* [`peadm::recovery_opts_default`](#peadm--recovery_opts_default)
@@ -823,6 +824,24 @@ Data type: `String`
+### `peadm::pe_db_names`
+
+Type: Puppet Language
+
+The peadm::pe_db_names function.
+
+#### `peadm::pe_db_names(String $pe_ver)`
+
+The peadm::pe_db_names function.
+
+Returns: `Array`
+
+##### `pe_ver`
+
+Data type: `String`
+
+
+
### `peadm::plan_step`
Type: Ruby 4.x API
diff --git a/functions/pe_db_names.pp b/functions/pe_db_names.pp
new file mode 100644
index 00000000..bc1137ec
--- /dev/null
+++ b/functions/pe_db_names.pp
@@ -0,0 +1,33 @@
+function peadm::pe_db_names (
+ String $pe_ver,
+) >> Array {
+ $original_db_names = [
+ 'pe-activity',
+ 'pe-classifier',
+ 'pe-inventory',
+ 'pe-orchestrator',
+ 'pe-rbac',
+ ]
+
+ $pe_2025_or_later = SemVerRange('>= 2025.0.0')
+ $pe_2023_8_or_later = SemVerRange('>= 2023.8.0')
+
+ case $pe_ver {
+ # The patching service was added in 2025.0.0
+ $pe_2025_or_later: {
+ $original_db_names + [
+ 'pe-hac',
+ 'pe-patching',
+ ]
+ }
+
+ # The host-action-collector (hac) was added in 2023.8
+ $pe_2023_8_or_later: {
+ $original_db_names + ['pe-hac']
+ }
+
+ default: {
+ $original_db_names
+ }
+ }
+}
diff --git a/plans/add_database.pp b/plans/add_database.pp
index 6219bde8..72860bba 100644
--- a/plans/add_database.pp
+++ b/plans/add_database.pp
@@ -18,6 +18,7 @@
# Get current peadm config before making modifications and shutting down
# PuppetDB
$peadm_config = run_task('peadm::get_peadm_config', $primary_target).first.value
+ $pe_ver = $peadm_config['pe_version']
$compilers = $peadm_config['params']['compilers']
@@ -41,7 +42,7 @@
$operating_mode = $mode
out::message("Operating mode overridden by parameter mode set to ${mode}")
} else {
- # If array is empty then no external databases were previously configured
+ # If array is empty then no external databases were previously configured
$no_external_db = peadm::flatten_compact([
$postgresql_a_host,
$postgresql_b_host,
@@ -87,7 +88,7 @@
peadm::plan_step('init-db-node') || {
# Install PSQL on new node to be used as external PuppetDB backend by using
- # puppet in lieu of installer
+ # puppet in lieu of installer
run_plan('peadm::subplans::component_install', $postgresql_target,
primary_host => $primary_target,
avail_group_letter => $avail_group_letter,
@@ -162,16 +163,10 @@
if $operating_mode == 'init' {
# Clean up old puppetdb database on primary and those which were copied to
# new host.
- $target_db_purge = [
- 'pe-activity',
- 'pe-classifier',
- 'pe-inventory',
- 'pe-orchestrator',
- 'pe-rbac',
- ]
+ $target_db_purge = peadm::pe_db_names($pe_ver)
# If a primary replica exists then pglogical is enabled and will prevent
- # the clean up of databases on our target because it opens a connection.
+ # the clean up of databases on our target because it opens a connection.
if $replica_host {
run_plan('peadm::util::db_disable_pglogical', $postgresql_target, databases => $target_db_purge)
}