2d125487c3
ci/woodpecker/pr/ruby-validate Pipeline was successful
ci/woodpecker/pr/erb-validate Pipeline was successful
ci/woodpecker/pr/puppet-lint Pipeline was successful
ci/woodpecker/pr/bolt-validate Pipeline was successful
ci/woodpecker/pr/yamllint Pipeline was successful
ci/woodpecker/pr/epp-validate Pipeline was successful
ci/woodpecker/pr/ruby-check Pipeline was successful
ci/woodpecker/pr/puppet-validate Pipeline was successful
Bring the hand-maintained /etc/ceph/ceph.conf under Puppet on the prodnxsr ceph cluster (fsid de96a98f). The file is identified per host by role: k8s roles include profiles::ceph::osd only and get a [global] section; the incus node role also includes profiles::ceph::mds and additionally gets the [mds] + [mds.*] sections. - Add cluster topology as a single source of truth in common.yaml: cluster_public_ips (all 13 ceph host /32s), mon_initial_members, and the mds_instances map (two mds daemons per mon/mgr/mds host). - Render /etc/ceph/ceph.conf from that topology in the reworked client.conf.erb, preserving the live two-space indent and key order. - Gate the [mds] sections on render_mds_config, set true only in the incus node role hiera (the role that includes profiles::ceph::mds). - Drop the hard Package[ceph-common] dependency when the class does not manage the package (cephadm/profiles::packages deliver it on the k8s and incus hosts). - Enable manage_ceph_conf on the k8s and incus node roles. public_network is normalized to all 13 ceph host /32s on every host; this rewrites it on the mon/mgr/mds hosts (adding .1-.8) as the one intended content change. RGW hosts keep their profiles::ceph::conf variant and are untouched. Claude-Session: https://claude.ai/code/session_01JUoARVdmhxKQHyyyp1pxeT
81 lines
2.4 KiB
Puppet
81 lines
2.4 KiB
Puppet
# profiles::ceph::client
|
|
class profiles::ceph::client (
|
|
String $fsid,
|
|
Array[Stdlib::Host] $mons,
|
|
# cluster topology (single source of truth: hieradata/common.yaml)
|
|
Array[Stdlib::Host] $cluster_public_ips,
|
|
Array[Stdlib::Host] $mon_initial_members,
|
|
Stdlib::Absolutepath $config_file = '/etc/ceph/ceph.conf',
|
|
Boolean $manage_ceph_conf = true,
|
|
Boolean $manage_ceph_package = true,
|
|
Boolean $manage_ceph_paths = true,
|
|
String $owner = 'ceph',
|
|
String $group = 'ceph',
|
|
Stdlib::Filemode $mode = '0644',
|
|
Hash $keyrings = {},
|
|
# [global] tunables (defaults match the live hand-maintained ceph.conf)
|
|
String $auth_client_required = 'cephx',
|
|
String $auth_cluster_required = 'cephx',
|
|
String $auth_service_required = 'cephx',
|
|
Boolean $mon_allow_pool_delete = true,
|
|
Boolean $ms_bind_ipv4 = true,
|
|
Boolean $ms_bind_ipv6 = false,
|
|
Integer $osd_crush_chooseleaf_type = 1,
|
|
Integer $osd_pool_default_min_size = 2,
|
|
Integer $osd_pool_default_size = 3,
|
|
Integer $osd_pool_default_pg_num = 128,
|
|
# mds config sections; only rendered on mon/mgr/mds hosts (render_mds_config)
|
|
Boolean $render_mds_config = false,
|
|
Hash[String, Integer] $mds_instances = {},
|
|
Hash $mds_common = {
|
|
'keyring' => '/var/lib/ceph/mds/ceph-$id/keyring',
|
|
'mds_standby_replay' => true,
|
|
},
|
|
) {
|
|
|
|
# dont run this on proxmox nodes
|
|
if $facts['enc_role'] != 'roles::infra::proxmox::node' {
|
|
|
|
# install the ceph client package
|
|
if $manage_ceph_package {
|
|
package { 'ceph-common':
|
|
ensure => installed,
|
|
}
|
|
}
|
|
|
|
# only depend on the package when this class manages it; on the ceph
|
|
# hosts the package is delivered by cephadm / profiles::packages instead.
|
|
$config_require = $manage_ceph_package ? {
|
|
true => Package['ceph-common'],
|
|
default => undef,
|
|
}
|
|
|
|
# manage the ceph directory
|
|
if $manage_ceph_paths {
|
|
file { '/etc/ceph':
|
|
ensure => directory,
|
|
owner => $owner,
|
|
group => $group,
|
|
mode => $mode,
|
|
require => $config_require,
|
|
}
|
|
}
|
|
|
|
# render /etc/ceph/ceph.conf from cluster topology in hiera
|
|
if $manage_ceph_conf {
|
|
file { $config_file:
|
|
ensure => file,
|
|
owner => $owner,
|
|
group => $group,
|
|
mode => $mode,
|
|
content => template('profiles/ceph/client.conf.erb'),
|
|
require => $config_require,
|
|
}
|
|
}
|
|
|
|
# manage ceph keyrings
|
|
create_resources('profiles::ceph::keyring', $keyrings)
|
|
}
|
|
|
|
}
|