Hallo Ralf,
wir machen das hier mit Puppet.
Die VMs werden angelegt und der Name im vCenter vergeben. Im Image wird
dann im ersten Puppet Lauf der Agent installiert und registriert.
Das Puppet File enthält dazu folgendes:
# Definition des Check_MK Agents
class profiles::infrastruktur::check_mk_agent (
$omd_server = hiera('check_mk::agent_bakery_server',
'<omd-server>'),
$omd_site = hiera('check_mk::agent_bakery_site', 'master'),
$omd_user = hiera('check_mk::user', 'tu_automation'),
$omd_user_secret = hiera('check_mk::user_secret'),
$omd_agent_package = hiera('check_mk::agent_package', 'check-mk-agent'),
$omd_agent_version = hiera('check_mk::agent_version',
'xxxxxxxxxxxxx'), # default versions String für Agent
){
$curl_cmd = '/usr/bin/curl --insecure'
$wato_api_url =
"https://${omd_server}/${omd_site}/check_mk/webapi.py"
$wato_user_params = "_username=${omd_user}&_secret=${omd_user_secret}"
$omd_agent_filename = "${omd_agent_package}_${omd_agent_version}_all.deb"
$known_functions = ['foreman', 'puppet', 'admin', 'api', 'app', 'archiv',
'backup',
# weitere tags
'vCenter', 'vmstats', 'vpn', 'vsm',
'web', 'webpagetest', 'wsus', 'www',
'zarafa']
$known_projects = ['agent',
# weitere tags
'telefonie',
'web', 'wiki']
$known_functions_s = join($known_functions, '|')
$known_projects_s = join($known_projects, '|')
# omd_host_tags: 0->funktion, 1->projekt, 2->umgebung
$host_name = downcase($::hostname)
$omd_host_tags = split($host_name, '-')
if $host_name !~ /^.+?-.+?(-.+?)?$/ {
$omd_host_tags[1] = 'unknown'
$omd_host_tags[2] = 'unknown'
}
if $omd_host_tags[0] =~ /^(.+?)\d{,4}$/ {
$omd_host_tags[0] = "#${1}"
}
if $omd_host_tags[0] =~ /^(docker|graphite|icinga|mysql|puppet|report)/ {
$omd_host_tags[0] = "#${1}"
}
if $omd_host_tags[0] !~ /^($known_functions_s)$/ {
$omd_host_tags[0] = 'unknown'
}
if $omd_host_tags[1] =~ /^(.+?)\d{,4}$/ {
$omd_host_tags[1] = "#${1}"
}
if $omd_host_tags[1] !~ /^($known_projects_s)$/ {
$omd_host_tags[1] = 'unknown'
}
#if $omd_host_tags[2] !~ /^(dev|test|prod)$/ {
# $omd_host_tags[2] = 'unknown'
#}
case $::environment {
'dev': { $env = 'dev' }
'test': { $env = 'test' }
'production': { $env = 'prod' }
default: { $env = 'unknown' }
}
case $::osfamily {
'Debian': { $agent_os = 'ht_os_ubuntu' }
'RedHat': { $agent_os = 'ht_os_rhel' }
'Suse': { $agent_os = 'ht_os_sles' }
default: { $agent_os = 'ht_os_unknown' }
}
$wato_api_get_request = "request={\"hostname\": \"${host_name}\"}"
$grep_rc = "/bin/grep -vq '\"result_code\": 0'"
$wato_api_add_request = join(['request={"attributes":{"tag_agent":
"cmk-agent",
"tag_criticality": "', $env, '",
"tag_tg_puppet_mgmt": "ht_puppet_mgmt",
"tag_tg_os": "',
$agent_os, '",
"ipaddress": "',
$::fqdn, '"},
"hostname": "', $host_name, '",
"folder": "/"}'
], '')
$register_params = ["--server ${omd_server} --site ${omd_site}
--protocol https --hostname ${host_name} ",
"--user ${omd_user} --secret ${omd_user_secret}"]
$cmd_act = "${curl_cmd}
'${wato_api_url}?action=activate_changes&${wato_user_params}&allow_foreign_changes=1'"
# Host in WATO anlegen + aktivieren
exec{ 'check_mk-agent-add2wato':
command => "${curl_cmd}
'${wato_api_url}?action=add_host&${wato_user_params}' -d
'${wato_api_add_request}' && ${cmd_act}",
onlyif => "${curl_cmd}
'${wato_api_url}?action=get_host&${wato_user_params}' -d
'${wato_api_get_request}' 2>/dev/null | ${grep_rc}",
}
# firewall input rules
firewall{ '100 allow check_mk agent access':
port => [6556],
proto => tcp,
action => accept,
before => Package['check-mk-agent'],
}
if $::osfamily == 'Debian' {
# install dependent + check_mk agent package
# we use a dpkg installation with local file to prevent issues with
different repo and agent bakery agent versions
package {'xinetd':
ensure => installed,
name => xinetd,
}
file{ ['/opt', '/opt/images']:
ensure => directory,
}
-> file{ "/opt/images/${omd_agent_filename}":
ensure => file,
owner => 'root',
group => 'root',
mode => '0640',
source =>
"puppet:///modules/profiles/infrastruktur/${omd_agent_filename}",
}
# Wegen moeglicher Agenten Updates per check_mk agent bakery kann
hier kein Bezug auf die Paket-Version eingefuegt werden
-> package{ 'check-mk-agent':
ensure => installed,
name => $omd_agent_package,
source => "/opt/images/${omd_agent_filename}",
provider => dpkg,
subscribe => Exec['check_mk-agent-add2wato'],
}
service{ 'xinetd':
ensure => true,
enable => true,
hasrestart => true,
hasstatus => true,
subscribe => Package['xinetd'],
}
# check_mk agent updater configuration + registration
file{ '/etc/check_mk/cmk-update-agent.cfg':
ensure => file,
owner => 'root',
group => 'root',
mode => '0640',
content => template('profiles/check_mk/cmk-update-agent.cfg.erb'),
subscribe => Package['check-mk-agent'],
}
# in profiles/check_mk/cmk-update-agent.cfg.erb liegen die
Certificate für die Registrierung.
$cmd = join\(\['/usr/bin/cmk\-update\-agent register',
join($register_params, '')], ' ')
# register, wenn die state-Datei nicht vorhanden ist
exec{ 'check_mk-agent-register':
command => $cmd,
onlyif => '/usr/bin/test ! -f /etc/cmk-update-agent.state',
notify => Exec['check_mk-agent-discover'],
require => File['/etc/check_mk/cmk-update-agent.cfg'],
}
# register, wenn die state-Datei vorhanden ist aber ein voriger
register nicht erfolgreich war
exec{ 'check_mk-agent-register-2':
command => $cmd,
onlyif => ["/bin/grep -q 'not registered'
/etc/cmk-update-agent.state",
'/usr/bin/test -f /etc/cmk-update-agent.state',],
notify => Exec['check_mk-agent-discover'],
require => File['/etc/check_mk/cmk-update-agent.cfg'],
}
\# services discovern \+ aktivieren
exec\{ 'check\_mk\-agent\-discover':
command => "$\{curl\_cmd\}
'${wato_api_url}?action=discover_services&${wato_user_params}&mode=refresh'
-d '${wato_api_get_request}'",
refreshonly => true,
}
exec{ 'check_mk-activate-changes':
command => $cmd_act,
refreshonly => true,
subscribe => Exec['check_mk-agent-discover'],
}
}
}
···
--
Mit freundlichem Gruß / Best regards
Ralf Meißner
Am 23.01.19 um 15:08 schrieb Ralf Prengel:
Hallo,
ich bin dabei die Installation des Linux-Clients und die Anmeldung an check-mk inc. bakery per Script zu automatisieren. Bisher haben wir nur mit sehr statischen System-Images und saltstack gearbeitet um anzupassen.
Ehe ich das Rad komplett neu erfinde die Frage nach Beispielen wie man per shell-script den Agent komplett installiert. In der Doku findet sich einiges zu den Einzelschritten aber halt kein kompletter Durchlauf (oder ich übersehe es).
Mich würde interessieren ob und wie ihr Rechnernamen erzeugt und welche Tags ihr grundsätzlich mitgebt damit die Nachkonfiguration über die Bakery erfolgen kann.
Gruss
Ralf
Von meinem iPad gesendet
_______________________________________________
checkmk-de mailing list
checkmk-de@lists.mathias-kettner.de
Verwaltung & Abmeldung unter
https://lists.mathias-kettner.de/cgi-bin/mailman/listinfo/checkmk-de