puppet-prod/modules/redisha/manifests/redis.pp
Ben Vincent b7fc6a1993 feat: create redisha module
- manage redis/sentinel clusters
- ensure ulimit_managed is false
- dynamically find servers in role to identify master
- add redisadm and sentineladm commands
- add script to check if the current host in the master
2024-08-10 17:39:24 +10:00

60 lines
2.1 KiB
Puppet

class redisha::redis (
Boolean $manage_repo = $redisha::manage_repo,
Boolean $redisha_members_lookup = $redisha::redisha_members_lookup,
Optional[String] $redisha_members_role = $redisha::redisha_members_role,
Array $redisha_servers = $redisha::redisha_servers,
Stdlib::Host $redis_host = $redisha::params::redis_host,
Stdlib::Port $redis_port = $redisha::params::redis_port,
Optional[String] $requirepass = $redisha::params::requirepass,
Optional[String] $dnf_module_stream = $redisha::params::dnf_module_stream,
Integer[1] $databases = $redisha::params::databases,
Optional[Variant[String, Sensitive[String], Deferred]] $masterauth = $redisha::params::masterauth,
) inherits redisha::params {
# if lookup is enabled
if $redisha_members_lookup {
# check that the role is also set
unless !($redisha_members_role == undef) {
fail("redisha_members_role must be provided for ${title} when redisha_members_lookup is True")
}
# if it is, find hosts, sort them so they dont cause changes every run
$servers_array = sort(query_nodes("enc_role='${redisha_members_role}' and region='${facts['region']}'", 'networking.fqdn'))
# else use provided array from params
}else{
$servers_array = $redisha_servers
}
if length($servers_array) >= 3 {
# check if this is the master_node
if $servers_array[0] == $::facts['networking']['fqdn'] {
class { 'redis':
bind => $redis_host,
port => $redis_port,
databases => $databases,
requirepass => $requirepass,
masterauth => $masterauth,
dnf_module_stream => $dnf_module_stream,
ulimit_managed => false,
}
}else{
class { 'redis':
bind => $redis_host,
port => $redis_port,
databases => $databases,
requirepass => $requirepass,
masterauth => $masterauth,
dnf_module_stream => $dnf_module_stream,
ulimit_managed => false,
replicaof => "${servers_array[0]} ${redis_port}",
}
}
}
}