Skip to content

Commit 86942b2

Browse files
committed
Base classification on availability group
Previous to this, utility plan update_classification made unnecessary assumptions about primaries and replicas. This commit ensure those assumptions are not made and classification is based solely on availability group letter.
1 parent f29abaa commit 86942b2

File tree

2 files changed

+54
-35
lines changed

2 files changed

+54
-35
lines changed

plans/add_replica.pp

+4-2
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,10 @@
7373
}
7474

7575
run_plan('peadm::util::update_classification', $primary_target,
76-
replica_host => $replica_host,
77-
internal_compiler_b_pool_address => $replica_host,
76+
server_a_host => $replica_avail_group_letter ? { 'A' => $replica_host, default => undef },
77+
server_b_host => $replica_avail_group_letter ? { 'B' => $replica_host, default => undef },
78+
internal_compiler_a_pool_address => $replica_avail_group_letter ? { 'A' => $replica_host, default => undef },
79+
internal_compiler_b_pool_address => $replica_avail_group_letter ? { 'B' => $replica_host, default => undef }
7880
)
7981

8082
# Provision the new system as a replica

plans/util/update_classification.pp

+50-33
Original file line numberDiff line numberDiff line change
@@ -6,71 +6,88 @@
66
# Standard
77
Peadm::SingleTargetSpec $targets,
88
Optional[Hash] $peadm_config = undef,
9-
Optional[Peadm::SingleTargetSpec] $replica_host = undef,
9+
Optional[Peadm::SingleTargetSpec] $server_a_host = undef,
10+
Optional[Peadm::SingleTargetSpec] $server_b_host = undef,
1011

1112
# Extra Large
12-
Optional[Peadm::SingleTargetSpec] $primary_postgresql_host = undef,
13-
Optional[Peadm::SingleTargetSpec] $replica_postgresql_host = undef,
13+
Optional[Peadm::SingleTargetSpec] $postgresql_a_host = undef,
14+
Optional[Peadm::SingleTargetSpec] $postgresql_b_host = undef,
1415

1516
# Common Configuration
1617
Optional[String] $compiler_pool_address = undef,
1718
Optional[String] $internal_compiler_a_pool_address = undef,
1819
Optional[String] $internal_compiler_b_pool_address = undef,
1920
) {
2021

21-
# Convert inputs into targets.
22-
$primary_target = peadm::get_targets($targets, 1)
23-
$replica_target = peadm::get_targets($replica_host, 1)
24-
$primary_postgresql_target = peadm::get_targets($primary_postgresql_host, 1)
25-
$replica_postgresql_target = peadm::get_targets($replica_postgresql_host, 1)
22+
$primary_target = peadm::get_targets($targets, 1)
2623

2724
# Makes this more easily usable outside a plan
2825
if $peadm_config {
29-
$current = $peadm_config['params']
26+
$current = $peadm_config
3027
} else {
31-
$current = run_task('peadm::get_peadm_config', $primary_target).first.value['params']
28+
$current = run_task('peadm::get_peadm_config', $primary_target).first.value
3229
}
3330

31+
out::verbose('Current config is...')
32+
out::verbose($current)
33+
3434
# When a replica in configured, the B side of the deployment requires that
3535
# replica_postgresql_host to be set, if it is not then PuppetDB will be left
3636
# non-functional. Doing this will allow both sides of the deployment to start
3737
# up and be functional until the second PostgreSQL node can be provisioned and configured.
38-
if (! $replica_postgresql_target.peadm::certname()) and $current['replica_host'] {
39-
out::message('Overriding replica_postgresql_host while in transitive state')
40-
$overridden_replica_postgresql_target = $primary_postgresql_target
41-
} else {
42-
$overridden_replica_postgresql_target = $replica_postgresql_target
43-
}
38+
# if (! $replica_postgresql_target.peadm::certname()) and $current['replica_host'] {
39+
# out::message('Overriding replica_postgresql_host while in transitive state')
40+
# $overridden_replica_postgresql_target = $primary_postgresql_target
41+
# } else {
42+
# $overridden_replica_postgresql_target = $replica_postgresql_target
43+
# }
4444

45-
$filtered = {
46-
'primary_host' => $primary_target.peadm::certname(),
47-
'replica_host' => $replica_target.peadm::certname(),
48-
'primary_postgresql_host' => $primary_postgresql_target.peadm::certname(),
49-
'replica_postgresql_host' => $overridden_replica_postgresql_target.peadm::certname(),
50-
'compiler_pool_address' => $compiler_pool_address,
45+
$filtered_params = {
46+
'compiler_pool_address' => $compiler_pool_address,
5147
'internal_compiler_a_pool_address' => $internal_compiler_a_pool_address,
5248
'internal_compiler_b_pool_address' => $internal_compiler_b_pool_address
5349
}.filter |$parameter| { $parameter[1] }
5450

55-
$new = merge($current, $filtered)
51+
$filtered_server = {
52+
'A' => $server_a_host,
53+
'B' => $server_b_host
54+
}.filter |$parameter| { $parameter[1] }
55+
56+
$filtered_psql = {
57+
'A' => $postgresql_a_host,
58+
'B' => $postgresql_b_host
59+
}.filter |$parameter| { $parameter[1] }
60+
61+
$filtered = {
62+
'params' => $filtered_params,
63+
'role-letter' => {
64+
'server' => $filtered_server,
65+
'postgresql' => $filtered_psql
66+
}
67+
}
68+
69+
out::verbose('New values are...')
70+
out::verbose($filtered)
71+
72+
$new = deep_merge($current, $filtered)
5673

57-
out::message('Classification to be updated using the following hash...')
58-
out::message($new)
74+
out::verbose('Updating classification to...')
75+
out::verbose($new)
5976

6077
apply($primary_target) {
6178
class { 'peadm::setup::node_manager_yaml':
6279
primary_host => $primary_target.peadm::certname(),
6380
}
6481

6582
class { 'peadm::setup::node_manager':
66-
primary_host => $new['primary_host'],
67-
server_a_host => $new['primary_host'],
68-
server_b_host => $new['replica_host'],
69-
postgresql_a_host => $new['primary_postgresql_host'],
70-
postgresql_b_host => $new['replica_postgresql_host'],
71-
compiler_pool_address => $new['compiler_pool_address'],
72-
internal_compiler_a_pool_address => $new['internal_compiler_a_pool_address'],
73-
internal_compiler_b_pool_address => $new['internal_compiler_b_pool_address'],
83+
primary_host => $primary_target.peadm::certname(),
84+
server_a_host => $new['role-letter']['server']['A'],
85+
server_b_host => $new['role-letter']['server']['B'],
86+
postgresql_a_host => $new['role-letter']['postgresql']['A'],
87+
postgresql_b_host => $new['role-letter']['postgresql']['B'],
88+
compiler_pool_address => $new['params']['compiler_pool_address'],
89+
internal_compiler_a_pool_address => $new['params']['internal_compiler_a_pool_address'],
90+
internal_compiler_b_pool_address => $new['params']['internal_compiler_b_pool_address'],
7491
require => Class['peadm::setup::node_manager_yaml'],
7592
}
7693
}

0 commit comments

Comments
 (0)