Puppet Plan: peadm::convert_compiler_to_legacy

Defined in:
plans/convert_compiler_to_legacy.pp

Overview

Parameters:

  • primary_host (Peadm::SingleTargetSpec)
  • legacy_hosts (TargetSpec)
  • remove_pdb (Optional[Boolean]) (defaults to: true)


2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'plans/convert_compiler_to_legacy.pp', line 2

plan peadm::convert_compiler_to_legacy (
  Peadm::SingleTargetSpec $primary_host,
  TargetSpec              $legacy_hosts,
  Optional[Boolean]       $remove_pdb = true,
) {
  $primary_target            = peadm::get_targets($primary_host, 1)
  $convert_legacy_compiler_targets   = peadm::get_targets($legacy_hosts)

  $cluster = run_task('peadm::get_peadm_config', $primary_host).first.value
  $error = getvar('cluster.error')
  if $error {
    fail_plan($error)
  }

  apply($primary_target) {
    class { 'peadm::setup::node_manager_yaml':
      primary_host => $primary_target.peadm::certname() ? {
        undef   => $primary_target,
        default => $primary_target.peadm::certname(),
      },
    }

    class { 'peadm::setup::legacy_compiler_group':
      primary_host                     => $primary_target.peadm::certname() ? {
        undef   => $primary_target,
        default => $primary_target.peadm::certname(),
      },
      internal_compiler_a_pool_address => getvar('cluster.params.internal_compiler_a_pool_address'),
      internal_compiler_b_pool_address => getvar('cluster.params.internal_compiler_b_pool_address'),
      require                          => Class['peadm::setup::node_manager_yaml'],
    }
  }

  $replica_host = getvar('cluster.params.replica_host')
  $primary_postgresql_host = getvar('cluster.params.primary_postgresql_host')
  $replica_postgresql_host = getvar('cluster.params.replica_postgresql_host')
  $compiler_hosts = getvar('cluster.params.compiler_hosts')
  $legacy_compilers = getvar('cluster.params.legacy_hosts')

  $replica_target = peadm::get_targets($replica_host, 1)
  $primary_postgresql_target = peadm::get_targets($primary_postgresql_host, 1)
  $replica_postgresql_target = peadm::get_targets($replica_postgresql_host, 1)
  $compiler_targets = peadm::get_targets($compiler_hosts) - $convert_legacy_compiler_targets
  $legacy_targets = peadm::get_targets($legacy_compilers) + $convert_legacy_compiler_targets

  $all_targets = peadm::flatten_compact([
      $primary_target,
      $replica_target,
      $primary_postgresql_target,
      $replica_postgresql_target,
      $compiler_targets,
      $legacy_targets,
  ])

  # Ensure input valid for a supported architecture
  $arch = peadm::assert_supported_architecture(
    $primary_host,
    $replica_host,
    $primary_postgresql_host,
    $replica_postgresql_host,
    $compiler_hosts,
    $legacy_compilers,
  )

  if $arch['disaster-recovery'] {
    # Gather certificate extension information from all systems
    $cert_extensions = run_task('peadm::cert_data', $legacy_targets).reduce({}) |$memo,$result| {
      $memo + { $result.target.peadm::certname => $result['extensions'] }
    }
    $legacy_compiler_a_targets = $convert_legacy_compiler_targets.filter |$index,$target| {
      $exts = $cert_extensions[$target.peadm::certname()]
      if ($exts[peadm::oid('peadm_availability_group')] in ['A', 'B']) {
        $exts[peadm::oid('peadm_availability_group')] == 'A'
      }
      elsif ($exts[peadm::oid('pp_cluster')] in ['A', 'B']) {
        $exts[peadm::oid('pp_cluster')] == 'A'
      }
      else {
        $index % 2 == 0
      }
    }
    $legacy_compiler_b_targets = $convert_legacy_compiler_targets.filter |$index,$target| {
      $exts = $cert_extensions[$target.peadm::certname()]
      if ($exts[peadm::oid('peadm_availability_group')] in ['A', 'B']) {
        $exts[peadm::oid('peadm_availability_group')] == 'B'
      }
      elsif ($exts[peadm::oid('pp_cluster')] in ['A', 'B']) {
        $exts[peadm::oid('pp_cluster')] == 'B'
      }
      else {
        $index % 2 != 0
      }
    }
  } else {
    $legacy_compiler_a_targets = $convert_legacy_compiler_targets
    $legacy_compiler_b_targets = []
  }

  wait([
      background('modify-compilers-certs') || {
        run_plan('peadm::modify_certificate', $compiler_targets,
          primary_host   => $primary_target,
          add_extensions => {
            peadm::oid('peadm_legacy_compiler')    => 'false',
          },
        )
      },
      background('modify-compilers-a-certs') || {
        run_plan('peadm::modify_certificate', $legacy_compiler_a_targets,
          primary_host   => $primary_target,
          add_extensions => {
            peadm::oid('pp_auth_role')             => 'pe_compiler',
            peadm::oid('peadm_availability_group') => 'A',
            peadm::oid('peadm_legacy_compiler')    => 'true',
          },
        )
      },
      background('modify-compilers-b-certs') || {
        run_plan('peadm::modify_certificate', $legacy_compiler_b_targets,
          primary_host   => $primary_target,
          add_extensions => {
            peadm::oid('pp_auth_role')             => 'pe_compiler',
            peadm::oid('peadm_availability_group') => 'B',
            peadm::oid('peadm_legacy_compiler')    => 'true',
          },
        )
      },
  ])

  if $remove_pdb {
    run_command('puppet resource service puppet ensure=stopped', $convert_legacy_compiler_targets)
    run_command('puppet resource service pe-puppetdb ensure=stopped enable=false', $convert_legacy_compiler_targets)
  }

  run_task('peadm::puppet_runonce', $convert_legacy_compiler_targets)
  run_task('peadm::puppet_runonce', $compiler_targets)
  run_task('peadm::puppet_runonce', $primary_target)
  run_task('peadm::puppet_runonce', $all_targets)

  if $remove_pdb {
    run_command('puppet resource package pe-puppetdb ensure=purged', $convert_legacy_compiler_targets)
    run_command('puppet resource user pe-puppetdb ensure=absent', $convert_legacy_compiler_targets)

    run_command('rm -rf /etc/puppetlabs/puppetdb', $convert_legacy_compiler_targets)
    run_command('rm -rf /var/log/puppetlabs/puppetdb', $convert_legacy_compiler_targets)
    run_command('rm -rf /opt/puppetlabs/server/data/puppetdb', $convert_legacy_compiler_targets)
  }

  run_command('systemctl start pe-puppetserver.service', $convert_legacy_compiler_targets)
  run_command('puppet resource service puppet ensure=running', $convert_legacy_compiler_targets)

  return("Converted host ${convert_legacy_compiler_targets} to legacy compiler.")
}