Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(#469) Assign correct environment to node groups #479

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions REFERENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
* [`peadm::file_or_content`](#peadm--file_or_content)
* [`peadm::flatten_compact`](#peadm--flatten_compact)
* [`peadm::generate_pe_conf`](#peadm--generate_pe_conf): Generate a pe.conf file in JSON format
* [`peadm::get_node_group_environment`](#peadm--get_node_group_environment): check if a custom PE environment is set in pe.conf
* [`peadm::get_pe_conf`](#peadm--get_pe_conf)
* [`peadm::get_targets`](#peadm--get_targets): Accept undef or a SingleTargetSpec, and return an Array[Target, 1, 0]. This differs from get_target() in that: - It returns an Array[Target
* [`peadm::migration_opts_default`](#peadm--migration_opts_default)
Expand Down Expand Up @@ -715,6 +716,24 @@ Data type: `Hash`
A hash of settings to set in the config file. Any keys that are set to
undef will not be included in the config file.

### <a name="peadm--get_node_group_environment"></a>`peadm::get_node_group_environment`

Type: Puppet Language

check if a custom PE environment is set in pe.conf

#### `peadm::get_node_group_environment(Peadm::SingleTargetSpec $primary)`

The peadm::get_node_group_environment function.

Returns: `String` the desired environment for PE specific node groups

##### `primary`

Data type: `Peadm::SingleTargetSpec`

the FQDN for the primary, here we will read the pe.conf from

### <a name="peadm--get_pe_conf"></a>`peadm::get_pe_conf`

Type: Puppet Language
Expand Down Expand Up @@ -1563,11 +1582,20 @@ The peadm::add_database class.

The following parameters are available in the `peadm::add_database` plan:

* [`node_group_environment`](#-peadm--add_database--node_group_environment)
* [`targets`](#-peadm--add_database--targets)
* [`primary_host`](#-peadm--add_database--primary_host)
* [`mode`](#-peadm--add_database--mode)
* [`begin_at_step`](#-peadm--add_database--begin_at_step)

##### <a name="-peadm--add_database--node_group_environment"></a>`node_group_environment`

Data type: `String[1]`

environment for the PEADM specific node groups, if not set it will be gathered from pe.conf or production

Default value: `peadm::get_node_group_environment($primary_host)`

##### <a name="-peadm--add_database--targets"></a>`targets`

Data type: `Peadm::SingleTargetSpec`
Expand Down Expand Up @@ -1692,6 +1720,7 @@ management using PEAdm.

The following parameters are available in the `peadm::convert` plan:

* [`node_group_environment`](#-peadm--convert--node_group_environment)
* [`primary_host`](#-peadm--convert--primary_host)
* [`replica_host`](#-peadm--convert--replica_host)
* [`compiler_hosts`](#-peadm--convert--compiler_hosts)
Expand All @@ -1703,6 +1732,14 @@ The following parameters are available in the `peadm::convert` plan:
* [`dns_alt_names`](#-peadm--convert--dns_alt_names)
* [`begin_at_step`](#-peadm--convert--begin_at_step)

##### <a name="-peadm--convert--node_group_environment"></a>`node_group_environment`

Data type: `String[1]`

environment for the PEADM specific node groups, if not set it will be gathered from pe.conf or production

Default value: `peadm::get_node_group_environment($primary_host)`

##### <a name="-peadm--convert--primary_host"></a>`primary_host`

Data type: `Peadm::SingleTargetSpec`
Expand Down Expand Up @@ -1805,6 +1842,7 @@ The following parameters are available in the `peadm::install` plan:
* [`final_agent_state`](#-peadm--install--final_agent_state)
* [`stagingdir`](#-peadm--install--stagingdir)
* [`uploaddir`](#-peadm--install--uploaddir)
* [`node_group_environment`](#-peadm--install--node_group_environment)
* [`primary_host`](#-peadm--install--primary_host)
* [`replica_host`](#-peadm--install--replica_host)
* [`compiler_hosts`](#-peadm--install--compiler_hosts)
Expand Down Expand Up @@ -1904,6 +1942,14 @@ for offline usage.

Default value: `undef`

##### <a name="-peadm--install--node_group_environment"></a>`node_group_environment`

Data type: `String[1]`

environment for the PEADM specific node groups, if not set it will be gathered from pe.conf or production

Default value: `peadm::get_node_group_environment($primary_host)`

##### <a name="-peadm--install--primary_host"></a>`primary_host`

Data type: `Peadm::SingleTargetSpec`
Expand Down Expand Up @@ -2277,6 +2323,7 @@ The following parameters are available in the `peadm::upgrade` plan:
* [`r10k_known_hosts`](#-peadm--upgrade--r10k_known_hosts)
* [`stagingdir`](#-peadm--upgrade--stagingdir)
* [`uploaddir`](#-peadm--upgrade--uploaddir)
* [`node_group_environment`](#-peadm--upgrade--node_group_environment)
* [`primary_host`](#-peadm--upgrade--primary_host)
* [`replica_host`](#-peadm--upgrade--replica_host)
* [`compiler_hosts`](#-peadm--upgrade--compiler_hosts)
Expand Down Expand Up @@ -2366,6 +2413,14 @@ for offline usage.

Default value: `'/tmp'`

##### <a name="-peadm--upgrade--node_group_environment"></a>`node_group_environment`

Data type: `String[1]`

environment for the PEADM specific node groups, if not set it will be gathered from pe.conf or production

Default value: `peadm::get_node_group_environment($primary_host)`

##### <a name="-peadm--upgrade--primary_host"></a>`primary_host`

Data type: `Peadm::SingleTargetSpec`
Expand Down
33 changes: 33 additions & 0 deletions functions/get_node_group_environment.pp
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#
# @summary check if a custom PE environment is set in pe.conf
#
# @param primary the FQDN for the primary, here we will read the pe.conf from
#
# @return [String] the desired environment for PE specific node groups
#
# @see https://www.puppet.com/docs/pe/latest/upgrade_pe#update_environment
#
# @author Tim Meusel <[email protected]>
#
function peadm::get_node_group_environment(Peadm::SingleTargetSpec $primary) {
$peconf = peadm::get_pe_conf(get_target($primary))
# if both are set, they need to be set to the same value
# if they are not set, we assume that the user runs their infra in production
$pe_install = $peconf['pe_install::install::classification::pe_node_group_environment']
$puppet_enterprise = $peconf['puppet_enterprise::master::recover_configuration::pe_environment']

# check if both are equal
# This also evaluates to true if both are undef
if $pe_install == $puppet_enterprise {
# check if the option isn't undef
# ToDo: A proper regex for allowed characters in an environment would be nice
# https://github.com/puppetlabs/puppet-docs/issues/1158
if $pe_install =~ String[1] {
return $pe_install
} else {
return 'production'
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could also return undef and then fallback to the default in the node_manager module: https://github.com/puppetlabs/puppetlabs-node_manager/blob/519bc30e0c68b11c86168868778afc37199fafc1/lib/puppet/type/node_group.rb#L124

}
} else {
fail("pe_install::install::classification::pe_node_group_environment and puppet_enterprise::master::recover_configuration::pe_environment need to be set to the same value, not '${pe_install}' and '${puppet_enterprise}'")
}
}
3 changes: 3 additions & 0 deletions manifests/setup/node_manager.pp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
# A load balancer address directing traffic to any of the "B" pool
# compilers. This is used for DR configuration in large and extra large
# architectures.
# @param node_group_environment the environment that will be assigned to all the PE Infra node groups
#
class peadm::setup::node_manager (
String[1] $primary_host,
Expand All @@ -36,6 +37,7 @@
Optional[String[1]] $compiler_pool_address = undef,
Optional[String[1]] $internal_compiler_a_pool_address = $server_a_host,
Optional[String[1]] $internal_compiler_b_pool_address = $server_b_host,
String[1] $node_group_environment = 'production',
) {
# "Not-configured" placeholder string. This will be used in places where we
# cannot set an explicit null, and need to supply some kind of value.
Expand All @@ -46,6 +48,7 @@
# else.
Node_group {
purge_behavior => none,
environment => $node_group_environment,
}

##################################################
Expand Down
20 changes: 13 additions & 7 deletions plans/add_database.pp
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
#
# @param node_group_environment environment for the PEADM specific node groups, if not set it will be gathered from pe.conf or production
#
plan peadm::add_database(
Peadm::SingleTargetSpec $targets,
Peadm::SingleTargetSpec $primary_host,
Expand All @@ -9,6 +12,7 @@
'update-db-settings',
'cleanup-db',
'finalize']] $begin_at_step = undef,
String[1] $node_group_environment = peadm::get_node_group_environment($primary_host),
) {
$primary_target = peadm::get_targets($primary_host, 1)
$postgresql_target = peadm::get_targets($targets, 1)
Expand Down Expand Up @@ -91,7 +95,7 @@
run_plan('peadm::subplans::component_install', $postgresql_target,
primary_host => $primary_target,
avail_group_letter => $avail_group_letter,
role => 'puppet/puppetdb-database'
role => 'puppet/puppetdb-database',
)
}

Expand Down Expand Up @@ -128,15 +132,17 @@
$host = pick($a_host, $b_host)
out::verbose("In transitive state, setting classification to ${host}")
run_plan('peadm::util::update_classification', $primary_target,
postgresql_a_host => $host,
postgresql_b_host => $host,
peadm_config => $peadm_config
postgresql_a_host => $host,
postgresql_b_host => $host,
peadm_config => $peadm_config,
node_group_environment => $node_group_environment,
)
} else {
run_plan('peadm::util::update_classification', $primary_target,
postgresql_a_host => $avail_group_letter ? { 'A' => $postgresql_host, default => undef },
postgresql_b_host => $avail_group_letter ? { 'B' => $postgresql_host, default => undef },
peadm_config => $peadm_config
postgresql_a_host => $avail_group_letter ? { 'A' => $postgresql_host, default => undef },
postgresql_b_host => $avail_group_letter ? { 'B' => $postgresql_host, default => undef },
peadm_config => $peadm_config,
node_group_environment => $node_group_environment,
)
}
}
Expand Down
7 changes: 5 additions & 2 deletions plans/add_replica.pp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
# @param replica_host - The hostname and certname of the replica VM
# @param replica_postgresql_host - The hostname and certname of the host with the replica PE-PosgreSQL database.
# @param token_file - (optional) the token file in a different location than the default.
#
# @param node_group_environment environment for the PEADM specific node groups, if not set it will be gathered from pe.conf or production
#
# Can be a separate host in an XL architecture, or undef in Standard or Large.
plan peadm::add_replica(
# Standard or Large
Expand All @@ -21,6 +22,7 @@

# Common Configuration
Optional[String] $token_file = undef,
String[1] $node_group_environment = peadm::get_node_group_environment($primary_host),
) {
$primary_target = peadm::get_targets($primary_host, 1)
$replica_target = peadm::get_targets($replica_host, 1)
Expand Down Expand Up @@ -94,7 +96,8 @@
server_b_host => $replica_avail_group_letter ? { 'B' => $replica_host, default => undef },
internal_compiler_a_pool_address => $replica_avail_group_letter ? { 'A' => $replica_host, default => undef },
internal_compiler_b_pool_address => $replica_avail_group_letter ? { 'B' => $replica_host, default => undef },
peadm_config => $peadm_config
peadm_config => $peadm_config,
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that puppet-lint doesn't detect the missing comma is a bug: https://github.com/puppetlabs/puppet-lint/issues/215

node_group_environment => $node_group_environment,
)

# Source list of files on Primary and synchronize to new Replica
Expand Down
6 changes: 6 additions & 0 deletions plans/convert.pp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
# This plan sets required certificate extensions on PE nodes, and configures
# the required PE node groups to make an existing cluster compatible with
# management using PEAdm.
#
# @param node_group_environment environment for the PEADM specific node groups, if not set it will be gathered from pe.conf or production
#
plan peadm::convert (
# Standard
Peadm::SingleTargetSpec $primary_host,
Expand All @@ -26,6 +29,8 @@
'modify-infra-certs',
'convert-node-groups',
'finalize']] $begin_at_step = undef,

String[1] $node_group_environment = peadm::get_node_group_environment($primary_host),
) {
peadm::assert_supported_bolt_version()

Expand Down Expand Up @@ -223,6 +228,7 @@
compiler_pool_address => $compiler_pool_address,
internal_compiler_a_pool_address => $internal_compiler_a_pool_address,
internal_compiler_b_pool_address => $internal_compiler_b_pool_address,
node_group_environment => $node_group_environment,
require => Class['peadm::setup::node_manager_yaml'],
}

Expand Down
4 changes: 4 additions & 0 deletions plans/install.pp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
# Directory the installer tarball will be uploaded to or expected to be in
# for offline usage.
#
# @param node_group_environment environment for the PEADM specific node groups, if not set it will be gathered from pe.conf or production
#
plan peadm::install (
# Standard
Peadm::SingleTargetSpec $primary_host,
Expand Down Expand Up @@ -73,6 +75,7 @@
Enum['direct', 'bolthost'] $download_mode = 'bolthost',
Boolean $permit_unsafe_versions = false,
String $token_lifetime = '1y',
String[1] $node_group_environment = peadm::get_node_group_environment($primary_host),
) {
peadm::assert_supported_bolt_version()

Expand Down Expand Up @@ -134,6 +137,7 @@
internal_compiler_b_pool_address => $internal_compiler_b_pool_address,
deploy_environment => $deploy_environment,
ldap_config => $ldap_config,
node_group_environment => $node_group_environment,

# Other
stagingdir => $stagingdir,
Expand Down
6 changes: 5 additions & 1 deletion plans/subplans/configure.pp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
# Configures the state the puppet agent should be in on infrastructure nodes
# after PE is configured successfully.
#
# @param node_group_environment environment for the PEADM specific node groups, if not set it will be gathered from pe.conf or production
#
plan peadm::subplans::configure (
# Standard
Peadm::SingleTargetSpec $primary_host,
Expand All @@ -42,7 +44,8 @@

# Other
String $stagingdir = '/tmp',
Enum['running', 'stopped'] $final_agent_state = 'running'
Enum['running', 'stopped'] $final_agent_state = 'running',
String[1] $node_group_environment = peadm::get_node_group_environment($primary_host),
) {
# TODO: get and validate PE version

Expand Down Expand Up @@ -102,6 +105,7 @@
compiler_pool_address => $compiler_pool_address,
internal_compiler_a_pool_address => $internal_compiler_a_pool_address,
internal_compiler_b_pool_address => $internal_compiler_b_pool_address,
node_group_environment => $node_group_environment,
require => Class['peadm::setup::node_manager_yaml'],
}
}
Expand Down
4 changes: 4 additions & 0 deletions plans/upgrade.pp
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
# Directory the installer tarball will be uploaded to or expected to be in
# for offline usage.
#
# @param node_group_environment environment for the PEADM specific node groups, if not set it will be gathered from pe.conf or production
#
plan peadm::upgrade (
# Standard
Peadm::SingleTargetSpec $primary_host,
Expand Down Expand Up @@ -66,6 +68,7 @@
'upgrade-replica',
'upgrade-replica-compilers',
'finalize']] $begin_at_step = undef,
String[1] $node_group_environment = peadm::get_node_group_environment($primary_host),
) {
# Ensure input valid for a supported architecture
$arch = peadm::assert_supported_architecture(
Expand Down Expand Up @@ -326,6 +329,7 @@
compiler_pool_address => $compiler_pool_address,
internal_compiler_a_pool_address => $internal_compiler_a_pool_address,
internal_compiler_b_pool_address => $internal_compiler_b_pool_address,
node_group_environment => $node_group_environment,
require => Class['peadm::setup::node_manager_yaml'],
}
}
Expand Down
4 changes: 4 additions & 0 deletions plans/util/update_classification.pp
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@
#
# @summary Configure classification
#
# @param node_group_environment environment for the PEADM specific node groups, if not set it will be gathered from pe.conf or production
#
plan peadm::util::update_classification (
# Standard
Peadm::SingleTargetSpec $targets,
String[1] $node_group_environment,
Optional[Hash] $peadm_config = undef,
Optional[Peadm::SingleTargetSpec] $server_a_host = undef,
Optional[Peadm::SingleTargetSpec] $server_b_host = undef,
Expand Down Expand Up @@ -76,6 +79,7 @@
compiler_pool_address => $new['params']['compiler_pool_address'],
internal_compiler_a_pool_address => $new['params']['internal_compiler_a_pool_address'],
internal_compiler_b_pool_address => $new['params']['internal_compiler_b_pool_address'],
node_group_environment => $node_group_environment,
require => Class['peadm::setup::node_manager_yaml'],
}
}
Expand Down
Loading
Loading