config/puppet-manifests/src/modules/platform/manifests/drbd.pp

594 lines
15 KiB
Puppet

class platform::drbd::params (
$link_speed,
$link_util,
$num_parallel,
$rtt_ms,
$automount = false,
$ha_primary = false,
$initial_setup = false,
$fs_type = 'ext4',
$cpumask = false,
) {
include ::platform::params
$host1 = $::platform::params::controller_0_hostname
$host2 = $::platform::params::controller_1_hostname
include ::platform::network::mgmt::params
include ::platform::network::infra::params
if $::platform::network::infra::params::interface_name {
$ip1 = $::platform::network::infra::params::controller0_address
$ip2 = $::platform::network::infra::params::controller1_address
} else {
$ip1 = $::platform::network::mgmt::params::controller0_address
$ip2 = $::platform::network::mgmt::params::controller1_address
}
$manage = str2bool($::is_initial_config)
}
define platform::drbd::filesystem (
$lv_name,
$vg_name,
$lv_size,
$port,
$device,
$mountpoint,
$resync_after = undef,
$sm_service = $title,
$ha_primary_override = undef,
$initial_setup_override = undef,
$automount_override = undef,
$manage_override = undef,
$ip2_override = undef,
) {
if $manage_override == undef {
$drbd_manage = $::platform::drbd::params::manage
} else {
$drbd_manage = $manage_override
}
if $ha_primary_override == undef {
$drbd_primary = $::platform::drbd::params::ha_primary
} else {
$drbd_primary = $ha_primary_override
}
if $initial_setup_override == undef {
$drbd_initial = $::platform::drbd::params::initial_setup
} else {
$drbd_initial = $initial_setup_override
}
if $automount_override == undef {
$drbd_automount = $::platform::drbd::params::automount
} else {
$drbd_automount = $automount_override
}
if $ip2_override == undef {
$ip2 = $::platform::drbd::params::ip2
} else {
$ip2 = $ip2_override
}
logical_volume { $lv_name:
ensure => present,
volume_group => $vg_name,
size => "${lv_size}G",
size_is_minsize => true,
}
-> drbd::resource { $title:
disk => "/dev/${vg_name}/${lv_name}",
port => $port,
device => $device,
mountpoint => $mountpoint,
handlers => {
before-resync-target =>
"/usr/local/sbin/sm-notify -s ${sm_service} -e sync-start",
after-resync-target =>
"/usr/local/sbin/sm-notify -s ${sm_service} -e sync-end",
},
host1 => $::platform::drbd::params::host1,
host2 => $::platform::drbd::params::host2,
ip1 => $::platform::drbd::params::ip1,
ip2 => $ip2,
manage => $drbd_manage,
ha_primary => $drbd_primary,
initial_setup => $drbd_initial,
automount => $drbd_automount,
fs_type => $::platform::drbd::params::fs_type,
link_util => $::platform::drbd::params::link_util,
link_speed => $::platform::drbd::params::link_speed,
num_parallel => $::platform::drbd::params::num_parallel,
rtt_ms => $::platform::drbd::params::rtt_ms,
cpumask => $::platform::drbd::params::cpumask,
resync_after => $resync_after,
}
if str2bool($::is_initial_config_primary) {
# NOTE: The DRBD file system can only be resized immediately if not peering,
# otherwise it must wait for the peer backing storage device to be
# resized before issuing the resize locally.
Drbd::Resource[$title]
-> exec { "drbd resize ${title}":
command => "drbdadm -- --assume-peer-has-space resize ${title}",
}
-> exec { "resize2fs ${title}":
command => "resize2fs ${device}",
}
}
}
class platform::drbd::pgsql::params (
$device = '/dev/drbd0',
$lv_name = 'pgsql-lv',
$lv_size = '2',
$mountpoint = '/var/lib/postgresql',
$port = '7789',
$resource_name = 'drbd-pgsql',
$vg_name = 'cgts-vg',
) {}
class platform::drbd::pgsql (
) inherits ::platform::drbd::pgsql::params {
platform::drbd::filesystem { $resource_name:
vg_name => $vg_name,
lv_name => $lv_name,
lv_size => $lv_size,
port => $port,
device => $device,
mountpoint => $mountpoint,
sm_service => 'drbd-pg',
}
}
class platform::drbd::rabbit::params (
$device = '/dev/drbd1',
$lv_name = 'rabbit-lv',
$lv_size = '2',
$mountpoint = '/var/lib/rabbitmq',
$port = '7799',
$resource_name = 'drbd-rabbit',
$vg_name = 'cgts-vg',
) {}
class platform::drbd::rabbit ()
inherits ::platform::drbd::rabbit::params {
platform::drbd::filesystem { $resource_name:
vg_name => $vg_name,
lv_name => $lv_name,
lv_size => $lv_size,
port => $port,
device => $device,
mountpoint => $mountpoint,
resync_after => 'drbd-pgsql',
}
}
class platform::drbd::platform::params (
$device = '/dev/drbd2',
$lv_name = 'platform-lv',
$lv_size = '2',
$mountpoint = '/opt/platform',
$port = '7790',
$vg_name = 'cgts-vg',
$resource_name = 'drbd-platform',
) {}
class platform::drbd::platform ()
inherits ::platform::drbd::platform::params {
platform::drbd::filesystem { $resource_name:
vg_name => $vg_name,
lv_name => $lv_name,
lv_size => $lv_size,
port => $port,
device => $device,
mountpoint => $mountpoint,
resync_after => 'drbd-rabbit',
}
}
class platform::drbd::cgcs::params (
$device = '/dev/drbd3',
$lv_name = 'cgcs-lv',
$lv_size = '2',
$mountpoint = '/opt/cgcs',
$port = '7791',
$resource_name = 'drbd-cgcs',
$vg_name = 'cgts-vg',
) {}
class platform::drbd::cgcs ()
inherits ::platform::drbd::cgcs::params {
platform::drbd::filesystem { $resource_name:
vg_name => $vg_name,
lv_name => $lv_name,
lv_size => $lv_size,
port => $port,
device => $device,
mountpoint => $mountpoint,
resync_after => 'drbd-platform',
}
}
class platform::drbd::extension::params (
$device = '/dev/drbd5',
$lv_name = 'extension-lv',
$lv_size = '1',
$mountpoint = '/opt/extension',
$port = '7793',
$resource_name = 'drbd-extension',
$vg_name = 'cgts-vg',
) {}
class platform::drbd::extension (
) inherits ::platform::drbd::extension::params {
include ::platform::params
include ::platform::drbd::cgcs::params
if str2bool($::is_primary_disk_rotational) {
$resync_after = $::platform::drbd::cgcs::params::resource_name
} else {
$resync_after = undef
}
platform::drbd::filesystem { $resource_name:
vg_name => $vg_name,
lv_name => $lv_name,
lv_size => $lv_size,
port => $port,
device => $device,
mountpoint => $mountpoint,
resync_after => $resync_after,
}
}
class platform::drbd::patch_vault::params (
$service_enabled = false,
$device = '/dev/drbd6',
$lv_name = 'patch-vault-lv',
$lv_size = '1',
$mountpoint = '/opt/patch-vault',
$port = '7794',
$resource_name = 'drbd-patch-vault',
$vg_name = 'cgts-vg',
) {}
class platform::drbd::patch_vault (
) inherits ::platform::drbd::patch_vault::params {
if str2bool($::is_initial_config_primary) {
$drbd_primary = true
$drbd_initial = true
$drbd_automount = true
$drbd_manage = true
} else {
$drbd_primary = undef
$drbd_initial = undef
$drbd_automount = undef
$drbd_manage = undef
}
if $service_enabled {
platform::drbd::filesystem { $resource_name:
vg_name => $vg_name,
lv_name => $lv_name,
lv_size => $lv_size,
port => $port,
device => $device,
mountpoint => $mountpoint,
resync_after => 'drbd-extension',
manage_override => $drbd_manage,
ha_primary_override => $drbd_primary,
initial_setup_override => $drbd_initial,
automount_override => $drbd_automount,
}
}
}
class platform::drbd::etcd::params (
#$service_enable = false,
$device = '/dev/drbd7',
$lv_name = 'etcd-lv',
$lv_size = '5',
$mountpoint = '/opt/etcd',
$port = '7797',
$resource_name = 'drbd-etcd',
$vg_name = 'cgts-vg',
) {}
class platform::drbd::etcd (
) inherits ::platform::drbd::etcd::params {
if str2bool($::is_initial_config_primary) {
$drbd_primary = true
$drbd_initial = true
$drbd_automount = true
$drbd_manage = true
} else {
$drbd_primary = undef
$drbd_initial = undef
$drbd_automount = undef
$drbd_manage = undef
}
platform::drbd::filesystem { $resource_name:
vg_name => $vg_name,
lv_name => $lv_name,
lv_size => $lv_size,
port => $port,
device => $device,
mountpoint => $mountpoint,
resync_after => undef,
manage_override => $drbd_manage,
ha_primary_override => $drbd_primary,
initial_setup_override => $drbd_initial,
automount_override => $drbd_automount,
}
}
class platform::drbd::etcd::bootstrap (
) inherits ::platform::drbd::etcd::params {
$drbd_primary = true
$drbd_initial = true
$drbd_automount = true
$drbd_manage = true
platform::drbd::filesystem { $resource_name:
vg_name => $vg_name,
lv_name => $lv_name,
lv_size => $lv_size,
port => $port,
device => $device,
mountpoint => $mountpoint,
resync_after => undef,
manage_override => $drbd_manage,
ha_primary_override => $drbd_primary,
initial_setup_override => $drbd_initial,
automount_override => $drbd_automount,
}
}
class platform::drbd::dockerdistribution::params (
$device = '/dev/drbd8',
$lv_name = 'dockerdistribution-lv',
$lv_size = '1',
$mountpoint = '/var/lib/docker-distribution',
$port = '7798',
$resource_name = 'drbd-dockerdistribution',
$vg_name = 'cgts-vg',
) {}
class platform::drbd::dockerdistribution ()
inherits ::platform::drbd::dockerdistribution::params {
if str2bool($::is_initial_config_primary) {
$drbd_primary = true
$drbd_initial = true
$drbd_automount = true
$drbd_manage = true
} else {
$drbd_primary = undef
$drbd_initial = undef
$drbd_automount = undef
$drbd_manage = undef
}
platform::drbd::filesystem { $resource_name:
vg_name => $vg_name,
lv_name => $lv_name,
lv_size => $lv_size,
port => $port,
device => $device,
mountpoint => $mountpoint,
resync_after => undef,
manage_override => $drbd_manage,
ha_primary_override => $drbd_primary,
initial_setup_override => $drbd_initial,
automount_override => $drbd_automount,
}
}
class platform::drbd::dockerdistribution::bootstrap ()
inherits ::platform::drbd::dockerdistribution::params {
$drbd_primary = true
$drbd_initial = true
$drbd_automount = true
$drbd_manage = true
platform::drbd::filesystem { $resource_name:
vg_name => $vg_name,
lv_name => $lv_name,
lv_size => $lv_size,
port => $port,
device => $device,
mountpoint => $mountpoint,
resync_after => undef,
manage_override => $drbd_manage,
ha_primary_override => $drbd_primary,
initial_setup_override => $drbd_initial,
automount_override => $drbd_automount,
}
}
class platform::drbd::cephmon::params (
$device = '/dev/drbd9',
$lv_name = 'ceph-mon-lv',
$mountpoint = '/var/lib/ceph/mon',
$port = '7788',
$resource_name = 'drbd-cephmon',
$vg_name = 'cgts-vg',
) {}
class platform::drbd::cephmon ()
inherits ::platform::drbd::cephmon::params {
include ::platform::ceph::params
$system_mode = $::platform::params::system_mode
$system_type = $::platform::params::system_type
#TODO: This will change once we remove the native cinder service
if (str2bool($::is_initial_config_primary) or
(str2bool($::is_controller_active) and str2bool($::is_initial_cinder_ceph_config))
){
# Active controller, first time configuration.
$drbd_primary = true
$drbd_initial = true
$drbd_automount = true
} elsif str2bool($::is_standalone_controller){
# Active standalone controller, successive reboots.
$drbd_primary = true
$drbd_initial = undef
$drbd_automount = true
} else {
# Node unlock, reboot or standby configuration
# Do not mount ceph
$drbd_primary = undef
$drbd_initial = undef
$drbd_automount = undef
}
if ($::platform::ceph::params::service_enabled and
$system_type == 'All-in-one' and 'duplex' in $system_mode) {
platform::drbd::filesystem { $resource_name:
vg_name => $vg_name,
lv_name => $lv_name,
lv_size => $::platform::ceph::params::mon_lv_size,
port => $port,
device => $device,
mountpoint => $mountpoint,
resync_after => undef,
manage_override => true,
ha_primary_override => $drbd_primary,
initial_setup_override => $drbd_initial,
automount_override => $drbd_automount,
} -> Class['::ceph']
}
}
class platform::drbd(
$service_enable = false,
$service_ensure = 'stopped',
) {
if (str2bool($::is_initial_config_primary)
){
# Enable DRBD at config_controller
class { '::drbd':
service_enable => true,
service_ensure => 'running',
}
} else {
class { '::drbd':
service_enable => $service_enable,
service_ensure => $service_ensure,
}
include ::drbd
}
include ::platform::drbd::params
include ::platform::drbd::pgsql
include ::platform::drbd::rabbit
include ::platform::drbd::platform
include ::platform::drbd::cgcs
include ::platform::drbd::extension
include ::platform::drbd::patch_vault
include ::platform::drbd::etcd
include ::platform::drbd::dockerdistribution
include ::platform::drbd::cephmon
# network changes need to be applied prior to DRBD resources
Anchor['platform::networking']
-> Drbd::Resource <| |>
-> Anchor['platform::services']
}
class platform::drbd::bootstrap {
class { '::drbd':
service_enable => true,
service_ensure => 'running'
}
# override the defaults to initialize and activate the file systems
class { '::platform::drbd::params':
ha_primary => true,
initial_setup => true,
automount => true,
}
include ::platform::drbd::pgsql
include ::platform::drbd::rabbit
include ::platform::drbd::platform
include ::platform::drbd::cgcs
include ::platform::drbd::extension
}
class platform::drbd::runtime {
class { '::platform::drbd':
service_enable => true,
service_ensure => 'running',
}
}
class platform::drbd::pgsql::runtime {
include ::platform::drbd::params
include ::platform::drbd::pgsql
}
class platform::drbd::cgcs::runtime {
include ::platform::drbd::params
include ::platform::drbd::cgcs
}
class platform::drbd::extension::runtime {
include ::platform::drbd::params
include ::platform::drbd::extension
}
class platform::drbd::patch_vault::runtime {
include ::platform::drbd::params
include ::platform::drbd::patch_vault
}
class platform::drbd::etcd::runtime {
include ::platform::drbd::params
include ::platform::drbd::etcd
}
class platform::drbd::dockerdistribution::runtime {
include ::platform::drbd::params
include ::platform::drbd::dockerdistribution
}
class platform::drbd::cephmon::runtime {
include ::platform::drbd::params
include ::platform::drbd::cephmon
}