diff --git a/modules/libs/lib/facter/is_pveceph_mds.rb b/modules/libs/lib/facter/is_pveceph_mds.rb new file mode 100644 index 0000000..3a07db1 --- /dev/null +++ b/modules/libs/lib/facter/is_pveceph_mds.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +require 'facter' + +Facter.add('is_pveceph_mds') do + confine enc_role: 'roles::infra::proxmox::node' + setcode do + system('pgrep -x ceph-mds > /dev/null 2>&1') + end +end diff --git a/modules/libs/lib/facter/is_pveceph_osd.rb b/modules/libs/lib/facter/is_pveceph_osd.rb new file mode 100644 index 0000000..52ddf2c --- /dev/null +++ b/modules/libs/lib/facter/is_pveceph_osd.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +require 'facter' + +Facter.add('is_pveceph_osd') do + confine enc_role: 'roles::infra::proxmox::node' + setcode do + system('pgrep -x ceph-osd > /dev/null 2>&1') + end +end diff --git a/site/profiles/manifests/proxmox/consul.pp b/site/profiles/manifests/proxmox/consul.pp new file mode 100644 index 0000000..9911a87 --- /dev/null +++ b/site/profiles/manifests/proxmox/consul.pp @@ -0,0 +1,36 @@ +# profiles::proxmox::consul +class profiles::proxmox::consul { + + $services = { + 'mon' => { 'port' => 6789, 'service_name' => 'ceph-mon', 'fact' => 'is_pveceph_mon' }, + 'osd' => { 'port' => 6800, 'service_name' => 'ceph-osd', 'fact' => 'is_pveceph_osd' }, + 'mds' => { 'port' => 6800, 'service_name' => 'ceph-mds', 'fact' => 'is_pveceph_mds' }, + 'mgr' => { 'port' => 9283, 'service_name' => 'ceph-mgr', 'fact' => 'is_pveceph_mgr' }, + } + + file { '/usr/local/bin/check_ceph_service.sh': + ensure => file, + mode => '0755', + content => template('profiles/proxmox/check_ceph_service.sh.erb'), + } + + $services.each |$key, $value| { + if $facts[$value['fact']] { + consul::service { "ceph-${key}": + service_name => $value['service_name'], + tags => ['proxmox', 'ceph', $key], + address => $facts['networking']['ip'], + port => $value['port'], + checks => [ + { + id => "pveceph_${key}_check", + name => "PVECeph ${key} Check", + script => "/usr/local/bin/check_ceph_service.sh ${key}", + interval => '10s', + timeout => '1s', + } + ], + } + } + } +} diff --git a/site/profiles/manifests/proxmox/init.pp b/site/profiles/manifests/proxmox/init.pp index 1d90b3d..79b879c 100644 --- a/site/profiles/manifests/proxmox/init.pp +++ b/site/profiles/manifests/proxmox/init.pp @@ -8,6 +8,7 @@ class profiles::proxmox::init { include profiles::proxmox::ceph include profiles::proxmox::config include profiles::proxmox::weblb + include profiles::proxmox::consul Class['profiles::proxmox::repos'] -> Class['profiles::proxmox::install'] diff --git a/site/profiles/templates/proxmox/check_ceph_service.sh.erb b/site/profiles/templates/proxmox/check_ceph_service.sh.erb new file mode 100644 index 0000000..ecbd6ae --- /dev/null +++ b/site/profiles/templates/proxmox/check_ceph_service.sh.erb @@ -0,0 +1,10 @@ +#!/bin/bash +if [ $# -eq 0 ]; then + echo "No service specified" + exit 1 +fi +if systemctl is-active --quiet $1; then + exit 0 +else + exit 2 +fi