120 lines
7.7 KiB
Bash
120 lines
7.7 KiB
Bash
#!/bin/bash
|
|
|
|
# make sure we are running as sudo
|
|
if [ "$EUID" -ne 0 ]; then
|
|
echo "Please run as root"
|
|
exit
|
|
fi
|
|
|
|
# ask for the domain, username, and password
|
|
read -e -p "Enter Checkmk Server: " -i "gauntcheckmk.home.johnhgaunt.com" CHECK_MK_SERVER
|
|
read -e -p "Enter Checkmk Site Name: " -i "gaunt" SITE_NAME
|
|
read -e -p "Enter Checkmk Username: " -i "automation" USERNAME
|
|
read -e -s -p "Enter ${USERNAME}'s Password (Blank enter for tang decryption): " PASSWORD
|
|
|
|
if [ -z "${PASSWORD}" ]; then
|
|
PASSWORD=$(echo "eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoic3NzIiwic3NzIjp7Imp3ZSI6WyJleUpoYkdjaU9pSkZRMFJJTFVWVElpd2lZMnhsZG1seklqcDdJbkJwYmlJNkluUmhibWNpTENKMFlXNW5JanA3SW1Ga2RpSTZleUpyWlhseklqcGJleUpoYkdjaU9pSkZVelV4TWlJc0ltTnlkaUk2SWxBdE5USXhJaXdpYTJWNVgyOXdjeUk2V3lKMlpYSnBabmtpWFN3aWEzUjVJam9pUlVNaUxDSjRJam9pUVVSeVpXTnJaRUpzWlY5Tk1rUlNVRVZ1UWxZMlZ6SlNaMmcwUW5OVVNtUkNMVGRuUW5NM01uVTRWR3hsVVRWVFpUUTBZV2hYYjIxUmIwdGFjWE5oT0dwdWNXNDVWbVExWDJSTllVZFdjMEpJWTBkaGRIWmhkU0lzSW5raU9pSkJSRWR0ZUU1ME9HbHNRek5TYzNka2NXbEVVV2x2VVROUVpVRnJiVlJoT0hFNWVtb3lNSE5LZG5acldrOUVjbXBuU0hJNFJrcHNSVVEyY3pKd2MwZDFUazlITUV4SVpubzVVM2hVYlc5eFFXRjFNek5NV25keEluMHNleUpoYkdjaU9pSkZRMDFTSWl3aVkzSjJJam9pVUMwMU1qRWlMQ0pyWlhsZmIzQnpJanBiSW1SbGNtbDJaVXRsZVNKZExDSnJkSGtpT2lKRlF5SXNJbmdpT2lKQllXOHhXSEJ6UlY4emVrSlVkR2x6TWxsVE9HVkRiQzFCYWpsV09YTlVVRGRmUm1GRWIzaHRZemxFYVhkU1RXSTBWR016T0ZOcGFrZDVObTVETkVab1pYZFNWRWxqTkVwSU1uWlFNM1pYU3pSR1VFbFlZVmxCSWl3aWVTSTZJa0ZNVkdOUFNXWk5ObXBNUWtwV2NGbzVSbGRJT0hGUVdWOURZMVJaTUhkZlRVRnVOR280VmpSMFVUaGlOMU56WWtSV1pFcFZiVFl3VEZwUFluTlJhazFFUkMxcmFIZFhRVXRLVVRNNVZIVTJUMVU1WTFWMlFVNGlmVjE5TENKMWNtd2lPaUpuWVhWdWRHdGxlV0ZqWTJWemN6QXpMbWh2YldVdWFtOW9ibWhuWVhWdWRDNWpiMjBpZlgwc0ltVnVZeUk2SWtFeU5UWkhRMDBpTENKbGNHc2lPbnNpWTNKMklqb2lVQzAxTWpFaUxDSnJkSGtpT2lKRlF5SXNJbmdpT2lKQlNFUnhaelZJYmxBMWVUSlFObGhXWVhwVWNsUlBNR3cxTTFvek1FWkNVRTF3TkVscGFXWlBaM0ppYkdGd1gwZHlVblJIU0RSbGJYZHNTVll0Vm5wSmMxQlNhR1p0VGxwRWVWRmFRekpEWVhrMk1GOHRObU51SWl3aWVTSTZJa0ZJVVc5cVpuZE9ZemxCUWtSbE1rbFVUMEpqWm5velFWWnZlVWM0VG1JM2JFNUVTRFYxTWpSSVNYQlpPRUpxWVVoU2EwTllPRnBDWjJGclNHOXVZM1I0VUZoWlNWOVJYMnRNZG5vNVVrWlpORVpoVFdkVWNuZ2lmU3dpYTJsa0lqb2lVM0JzWm1RM2MyNTNUM1JGU0hGS04zQlRVVEZ4ZURaVFNHUlpMVTlPUWpocVN6ZzFVRGhPVTJSS2J5SjkuLk1tOU5hVDRiaFFlWm9FOUQueDlPUDd4cVV3QXB1NXc1OXBhVF91QnhrRVZ4UDQxYmx5c3FpTFF4cmQwNkMxLVU5YUdHTW5pdmdJdXhmRjJYNW5HTVlDZmMxaWtFQktPd0NPTXdrQ3cuZ2lVYlZ6ZTRVREVNeFVMR251RDhsdyIsImV5SmhiR2NpT2lKRlEwUklMVVZUSWl3aVkyeGxkbWx6SWpwN0luQnBiaUk2SW5SaGJtY2lMQ0owWVc1bklqcDdJbUZrZGlJNmV5SnJaWGx6SWpwYmV5SmhiR2NpT2lKRlV6VXhNaUlzSW1OeWRpSTZJbEF0TlRJeElpd2lhMlY1WDI5d2N5STZXeUoyWlhKcFpua2lYU3dpYTNSNUlqb2lSVU1pTENKNElqb2lRVmxYV1dReVZrNVZNSHBtVUU1QmExRTVPRUV4UVhaeFNWTjVUazFsZEhFM1NYaEhVRWREY0VWR2MwSlpOVkJhTVdoeFNYQnFXVFpzWVROM1oxVXhZbkpCVFVSSE1VOXVZbk5YWkRjd2VXSmFMVlpOZVRCdVNDSXNJbmtpT2lKQlluRjVOVEZrYWpaTFFWQnRia1pvV0VScU4ySmFVSFp1YUVWQmFYZHlVVmRrUW1WcU9XOXhjMEppWmtJd2FWcFZSVk5KYzIwMGVtOHlhSGxZVEZSTmFUbFlXVXRTWlRReU5VMVpUWFJRTVhKcWVIVTNWbW81SW4wc2V5SmhiR2NpT2lKRlEwMVNJaXdpWTNKMklqb2lVQzAxTWpFaUxDSnJaWGxmYjNCeklqcGJJbVJsY21sMlpVdGxlU0pkTENKcmRIa2lPaUpGUXlJc0luZ2lPaUpCUlVWRFRYcFdXR3hLZG1NdGRYQnVZemxOUTBKSFJURndjMFZWY0ZKb2FXdGFSRGg0WnpKMVZEZHdiVmxRUzJsS2VqVmFTMlpPWlhGd1FVTjFablZLYlRKUFJFWmxXbXBIT0doc1QxSmtSV0Y2WTB4WVh6WlhJaXdpZVNJNklrRlJhR2N0VFU5alpYZE5ha0ZsVTNjeVJqRnVRV2RZWkZacGQybGFVMkoyTlZaclNWYzBkbUZtT0ZwYWVIVm5jMDh5V0c5NVJ6QkJXamRXVld0ZlR6UnFWSFp2VWpOd1VFMU1TbmxMVm1oNGNuUlVZbDl2UkV3aWZWMTlMQ0oxY213aU9pSm5ZWFZ1ZEhSaGJtY3dNUzVvYjIxbExtcHZhRzVvWjJGMWJuUXVZMjl0SW4xOUxDSmxibU1pT2lKQk1qVTJSME5OSWl3aVpYQnJJanA3SW1OeWRpSTZJbEF0TlRJeElpd2lhM1I1SWpvaVJVTWlMQ0o0SWpvaVFVWTJVMU15Um1oUGJIUkpObFIzVG5FM2FWWnJUR2hvV1hWc1pqbFBabWRPWTBsblkwdzNVRkZ5UmpGSk5ITkRlR3h4UXpKMU1IRTNkVnB1U0c1cU1rZFJUSEJqVVdGRWRrcE1ZalJoYVMxMFpHUm9aRTF4WVNJc0lua2lPaUpCV2tNMFEwNTJWa05OWVhGcVdtTnJOemRtTFRoMWRVTkJYMGRqV0VoaVRISjNVVEpwZVhONE1qZERRVlZJUm5OSlgxVk9XRFpTYzBWclNsUk1TMUJNYTBaaVQwZHdRMmRvTWs1aVRFTXdValJHWkRGUFYyOUhJbjBzSW10cFpDSTZJbEp2TFVnNVVEWkRia0pwU1ZsaVlVbEZhbTkzU0ZWaVdIbENPREZGTlVWQ1ZtMXFjMDFvTWtOVU5rMGlmUS4uLV9TbC11eGdwNVBUSy1RSi5LVzRYQnEwWEJuX3diOFlEVHBDSzZZRmNlYk91R1JOS3U2U3BaV0RzVlVob3ctR1htQUhBV1VvR2dRY0htN0J3cUFIdjNGVzltOXhfa21vRDB0d2NtUS5xYnd5cWMzQlZRWS10WHhKUlBvRDlRIl0sInAiOiJfdXRwQTZXMDNGM09PNGU3bWhQMlFWVURXY1llYlNxZGdYMVgxUE1TTDFNIiwidCI6MX19LCJlbmMiOiJBMjU2R0NNIn0..lPoNWYGXOsZgFy50.FziHrlOD6CKMh_RbRd0VVLgZFJa0.9BLNQBg6WEcoI7ARMSw2pw" | clevis decrypt)
|
|
fi
|
|
|
|
|
|
# get OS ditro and version
|
|
OS=$(hostnamectl | awk '/Operating System/ {print $3}')
|
|
VM=$(hostnamectl | awk '/Virtualization/ {print $2}')
|
|
if [ ${OS} == 'Ubuntu' ]; then
|
|
OS_VERSION=$(hostnamectl | awk '/Operating System/ {print $4}')
|
|
else
|
|
OS_VERSION=$(hostnamectl | awk '/Operating System/ {print $5}')
|
|
fi
|
|
|
|
if [ "${VM}" == "vmware" ] || [ "${VM}" == "kvm" ] ; then
|
|
VM="true"
|
|
else
|
|
VM="false"
|
|
fi
|
|
|
|
set -e
|
|
# set -x
|
|
|
|
API_URL="http://${CHECK_MK_SERVER}/${SITE_NAME}/check_mk/api/1.0"
|
|
AUTHORIZATION_HEADER="Authorization: Bearer ${USERNAME} ${PASSWORD}"
|
|
read -e -p "Enter Hostname: " -i "$(cat /etc/hostname)" HOSTNAME
|
|
|
|
tmpdir=$(mktemp -d)
|
|
|
|
if [ -x /usr/bin/dpkg ]; then
|
|
tmpfile=${tmpdir}/checkmkagent.deb
|
|
wget -O ${tmpfile} --header="${AUTHORIZATION_HEADER}" "${API_URL}/domain-types/agent/actions/download/invoke?os_type=linux_deb"
|
|
if dpkg -l check-mk-agent > /dev/null; then
|
|
dpkg -P check-mk-agent
|
|
fi
|
|
apt-get install xinetd curl -y
|
|
dpkg -i ${tmpfile}
|
|
# Apt
|
|
wget -O /usr/lib/check_mk_agent/plugins/mk_apt http://${CHECK_MK_SERVER}/${SITE_NAME}/check_mk/agents/plugins/mk_apt
|
|
chmod +x /usr/lib/check_mk_agent/plugins/mk_apt
|
|
elif [ -x /usr/bin/rpm -o -x /bin/rpm ]; then
|
|
tmpfile=${tmpdir}/checkmkagent.rpm
|
|
wget -O ${tmpfile} --header="${AUTHORIZATION_HEADER}" "${API_URL}/domain-types/agent/actions/download/invoke?os_type=linux_rpm"
|
|
if rpm -q check-mk-agent > /dev/null; then
|
|
rpm -e check-mk-agent
|
|
# RPM
|
|
#wget -O /usr/lib/check_mk_agent/plugins/mk_apt http://${CHECK_MK_SERVER}/${SITE_NAME}/check_mk/agents/plugins/mk_apt
|
|
#chmod +x /usr/lib/check_mk_agent/plugins/mk_apt
|
|
fi
|
|
if [ -x /usr/bin/zypper ]; then
|
|
zypper install xinetd curl
|
|
elif [ -x /usr/bin/yum ]; then
|
|
yum install xinetd curl
|
|
fi
|
|
rpm -i ${tmpfile}
|
|
else
|
|
echo "Unknown package system"
|
|
exit 1
|
|
fi
|
|
|
|
rm -rfv ${tmpdir}
|
|
rm -fv /etc/cmk-update-agent.state
|
|
|
|
curl --header "Content-Type: application/json" \
|
|
--header "${AUTHORIZATION_HEADER}" \
|
|
--request POST \
|
|
--data "{\"host_name\": \"${HOSTNAME}\", \"folder\": \"~servers\"}" \
|
|
${API_URL}/domain-types/host_config/collections/all
|
|
|
|
ETAG=$(curl --header "Content-Type: application/json" \
|
|
--header "${AUTHORIZATION_HEADER}" \
|
|
--request GET \
|
|
-I \
|
|
${API_URL}/domain-types/activation_run/collections/pending_changes | \
|
|
grep -Fi etag | sed -r 's/.*"(.*)".*/\1/')
|
|
|
|
curl --header "Content-Type: application/json" \
|
|
--header "${AUTHORIZATION_HEADER}" \
|
|
--header "If-Match: ${ETAG}" \
|
|
--request POST \
|
|
${API_URL}/domain-types/activation_run/actions/activate-changes/invoke
|
|
|
|
|
|
# test if not a VM and if so, install the smartctl stuff
|
|
if [ "${VM}" == "false" ]; then
|
|
# hardware inventory script
|
|
wget -O /usr/lib/check_mk_agent/plugins/mk_inventory.linux http://${CHECK_MK_SERVER}/${SITE_NAME}/check_mk/agents/plugins/mk_inventory.linux
|
|
chmod +x /usr/lib/check_mk_agent/plugins/mk_inventory.linux
|
|
# Smart script for hard drives
|
|
wget -O /usr/lib/check_mk_agent/plugins/smart http://${CHECK_MK_SERVER}/${SITE_NAME}/check_mk/agents/plugins/smart
|
|
chmod +x /usr/lib/check_mk_agent/plugins/smart
|
|
fi
|
|
|
|
/usr/bin/cmk-agent-ctl register --hostname ${HOSTNAME} \
|
|
--server ${CHECK_MK_SERVER} --site ${SITE_NAME} \
|
|
--user ${USERNAME} --password ${PASSWORD} \
|
|
--trust-cert
|
|
|
|
sleep 15s
|
|
|
|
curl --header "Content-Type: application/json" \
|
|
--header "${AUTHORIZATION_HEADER}" \
|
|
--request POST \
|
|
--data "{\"host_name\": \"${HOSTNAME}\", \"mode\": \"refresh\"}" \
|
|
${API_URL}/domain-types/service_discovery_run/actions/start/invoke
|