216 lines
7.6 KiB
Bash
Executable File
216 lines
7.6 KiB
Bash
Executable File
#!/bin/bash
|
||
###################################################################
|
||
#
|
||
# Скрипт для работы с Zabbix Rest API
|
||
# Позволяет создавать группу узлов, шаблон, узел.
|
||
# Создан по мотивам
|
||
# https://www.reddit.com/r/zabbix/comments/bhdhgq/zabbix_api_example_using_just_bash_curl_and_jq/
|
||
#
|
||
# Автор: Сергей Калинин
|
||
# https://nuk-svk.ru
|
||
# svk@nuk-svk.ru
|
||
#####################################################################
|
||
#
|
||
# Использование:
|
||
# ./zabbix_create_host.sh
|
||
#
|
||
# Запуск без параметров создаст группу узлов, шаблон и узел если они
|
||
# отсутствуют. Данные берутся из переменных окружения
|
||
#####################################################################
|
||
|
||
|
||
#####################################################################
|
||
# Custom variables
|
||
|
||
BIN_DIR=${BIN_DIR:-/usr/local/bin}
|
||
ETC_DIR=${ETC_DIR:-/usr/local/etc}
|
||
LIB_DIR=${LIB_DIR:-/usr/local/lib}
|
||
|
||
zabbixServer=${ZABBIX_SERVER:-'http://zabbix.example.com'}
|
||
zabbixUsername=${ZABBIX_USER}
|
||
zabbixPassword=${ZABBIX_PASSWORD}
|
||
zabbixHostGroup=${ZABBIX_HOST_GROUP:-'Virtual Hosts'}
|
||
ZABBIX_HOST_NAME=${ZABBIX_HOST:-"Test Virtual Host"}
|
||
ZABBIX_TEMPLATE_NAME=${ZABBIX_TEMPLATE_NAME:-"Some_Template"}
|
||
|
||
#End of custom variables
|
||
#####################################################################
|
||
|
||
header='Content-Type:application/json'
|
||
zabbixApiUrl="$zabbixServer/api_jsonrpc.php"
|
||
|
||
function exit_with_error() {
|
||
echo '********************************'
|
||
echo "$errorMessage"
|
||
echo '--------------------------------'
|
||
echo 'INPUT'
|
||
echo '--------------------------------'
|
||
echo "$json"
|
||
echo '--------------------------------'
|
||
echo 'OUTPUT'
|
||
echo '--------------------------------'
|
||
echo "$result"
|
||
echo '********************************'
|
||
exit 1
|
||
}
|
||
|
||
#####################################################################
|
||
# Auth to zabbix
|
||
# https://www.zabbix.com/documentation/3.4/manual/api/reference/user/login
|
||
function auth() {
|
||
errorMessage='*ERROR* - Unable to get Zabbix authorization token'
|
||
json=$(cat ${LIB_DIR}/user.login.json)
|
||
json=${json/USER/$zabbixUsername}
|
||
json=${json/PASSWORD/$zabbixPassword}
|
||
#echo $json
|
||
result=$(curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl)
|
||
|
||
auth=$(echo $result | jq '.result')
|
||
echo "Auth: $auth"
|
||
if [ -z "$auth" ]; then
|
||
exit_with_error
|
||
fi
|
||
echo "Login successful - Auth ID: $auth"
|
||
}
|
||
|
||
#####################################################################
|
||
# Create hostgroup
|
||
function create_host_group() {
|
||
if [ -z "$auth" ]; then
|
||
auth
|
||
fi
|
||
errorMessage="*ERROR* - Unable to create hostgroup ID for host group named '$zabbixHostGroup'"
|
||
json=`cat ${LIB_DIR}/hostgroup.create.json`
|
||
json=${json/HOSTGROUP/$zabbixHostGroup}
|
||
json=${json/AUTHID/$auth}
|
||
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
|
||
HOSTGROUP_ID=`echo $result | jq -r '.result | .groupids | .[0]'`
|
||
if [ "$HOSTGROUP_ID" == "null" ]; then
|
||
exit_with_error
|
||
fi
|
||
echo "Hostgroup '$zabbixHostGroup' was created with ID: $HOSTGROUP_ID"
|
||
}
|
||
|
||
|
||
#####################################################################
|
||
# Get hostgroup
|
||
function get_host_group() {
|
||
if [ -z "$auth" ]; then
|
||
auth
|
||
fi
|
||
errorMessage="*ERROR* - Unable to get hostgroup ID for host group named '$zabbixHostGroup'"
|
||
json=`cat ${LIB_DIR}/hostgroup.get.json`
|
||
json=${json/HOSTGROUP/$zabbixHostGroup}
|
||
json=${json/AUTHID/$auth}
|
||
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
|
||
HOSTGROUP_ID=`echo $result | jq -r '.result | .[0] | .groupid'`
|
||
if [ "$HOSTGROUP_ID" == "null" ]; then
|
||
create_host_group
|
||
fi
|
||
echo "Hostgroup ID for '$zabbixHostGroup': $HOSTGROUP_ID"
|
||
}
|
||
|
||
#####################################################################
|
||
# Create template
|
||
function create_template(){
|
||
if [ -z "$auth" ]; then
|
||
auth
|
||
fi
|
||
echo "Creating zabbix template '$ZABBIX_TEMPLATE_NAME'"
|
||
errorMessage="*ERROR* - Unable to create Template ID for '$ZABBIX_TEMPLATE_NAME'"
|
||
json=`cat ${LIB_DIR}/template.create.json`
|
||
TEMPLATE_XML=$(cat ${LIB_DIR}/$ZABBIX_TEMPLATE_NAME.xml)
|
||
TEMPLATE_XML="$(echo $TEMPLATE_XML | sed 's/"/\\"/g')"
|
||
json=${json/XMLSTRING/$TEMPLATE_XML}
|
||
json=${json/AUTHID/$auth}
|
||
#echo $json
|
||
#echo "curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl"
|
||
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
|
||
#echo $result
|
||
#exit
|
||
#RESULT=`echo $result | jq -r '.result'`
|
||
if [ "$RESULT" == "null" ]; then
|
||
exit_with_error
|
||
else
|
||
get_template
|
||
#echo "Template '$ZABBIX_TEMPLATE_NAME' was created with ID: $TEMPLATE_ID"
|
||
fi
|
||
}
|
||
|
||
#####################################################################
|
||
# Get template
|
||
function get_template(){
|
||
if [ -z "$auth" ]; then
|
||
auth
|
||
fi
|
||
errorMessage="*ERROR* - Unable to get Template ID for '$ZABBIX_TEMPLATE_NAME'"
|
||
json=`cat ${LIB_DIR}/template.get.json`
|
||
json=${json/TEMPLATE_NAME/$ZABBIX_TEMPLATE_NAME}
|
||
json=${json/AUTHID/$auth}
|
||
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
|
||
TEMPLATE_ID=`echo $result | jq -r '.result | .[0] | .templateid'`
|
||
if [ "$TEMPLATE_ID" == "null" ]; then
|
||
create_template
|
||
fi
|
||
echo "Template ID for '$ZABBIX_TEMPLATE_NAME': $TEMPLATE_ID"
|
||
}
|
||
|
||
#####################################################################
|
||
# Get host
|
||
function get_host() {
|
||
if [ -z "$auth" ]; then
|
||
auth
|
||
fi
|
||
# Проверяем наличие узла если он есть возвращаем ID если нет - создаем
|
||
errorMessage="*ERROR* - Unable to get host ID for host '$zabbixHost'"
|
||
json=`cat ${LIB_DIR}/host.get.json`
|
||
json=${json/HOSTNAME/$ZABBIX_HOST_NAME}
|
||
json=${json/AUTHID/$auth}
|
||
#echo $json
|
||
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
|
||
#echo $result
|
||
hostId=`echo $result | jq -r '.result | .[0] | .hostid'`
|
||
# if [ "$hostId" == "null" ]; then exit_with_error; fi
|
||
# echo "Host ID for '$zabbixHost': $hostId"
|
||
if [ "$hostId" == "null" ]; then
|
||
create_host
|
||
#exit_with_error
|
||
else
|
||
echo "Host ID for '$zabbixHost': $hostId"
|
||
fi
|
||
}
|
||
|
||
#####################################################################
|
||
# Create host
|
||
function create_host() {
|
||
if [ -z "$auth" ]; then
|
||
auth
|
||
fi
|
||
# Проверяем наличие шаблона если он есть возвращаем ID если нет - создаем
|
||
if [ -z "$TEMPLATE_ID" ]; then
|
||
get_template
|
||
fi
|
||
# Проверяем наличие группы узлов если она есть возвращаем ID если нет - создаем
|
||
if [ -z "$HOSTGROUP_ID" ]; then
|
||
get_host_group
|
||
fi
|
||
|
||
echo "Create host \"$ZABBIX_HOST_NAME\""
|
||
errorMessage="*ERROR* - Host '$zabbixHost' does not created"
|
||
json=$(cat ${LIB_DIR}/host.create.json)
|
||
json=${json/HOSTNAME/$ZABBIX_HOST_NAME}
|
||
json=${json/HOSTGROUPID/$HOSTGROUP_ID}
|
||
json=${json/TEMPLATE_ID/$TEMPLATE_ID}
|
||
json=${json/AUTHID/$auth}
|
||
#echo $json
|
||
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
|
||
#echo $result
|
||
HOST_ID=`echo $result | jq -r '.result | .hostids | .[0]'`
|
||
if [ -z "$HOST_ID" ]; then
|
||
exit_with_error
|
||
else
|
||
echo "Host \"${ZABBIX_HOST_NAME}\" was created with id $HOST_ID"
|
||
fi
|
||
}
|
||
|
||
get_host |