AKAI TSUKI

System development or Technical something

try to use zabbix api on bash

I created this script to add host/host group by Zabbix API.

#!/bin/bash
set -x

### config
user_name=user01
user_pass=pass_string
zabbix_url=http://localhost/zabbix/api_jsonrpc.php

header="Content-Type: application/json-rpc"


# ------------------------------------------
# set token
# ------------------------------------------
function set_token() {

local json_data=$(cat << EOS
{
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "${user_name}",
        "password": "${user_pass}"
    },
    "id": 1,
    "auth": null
}
EOS
)

token=`curl -s -H "${header}" ${zabbix_url} -d "${json_data}" | jq -r .result`

}


# ------------------------------------------
# get host
# ------------------------------------------
function get_host() {

json_data=$(cat << EOS
{
    "jsonrpc": "2.0",
    "method": "host.get",
    "params": {
      "output": [
        "hostid",
        "host"
      ],
      "selectInterfaces": [
        "interfaceid",
        "ip"
      ]
    },
    "id": 2,
    "auth": "${token}"
}
EOS
)

result=`curl -s -d  ${json_data} -H "${header}" ${zabbix_url} | jq -r .result`

}


# ------------------------------------------
# add host group
#   $1 - host group name
# ------------------------------------------
function add_host_group() {

local json_data=$(cat << EOS
{
    "jsonrpc": "2.0",
    "method": "hostgroup.create",
    "params": {
        "name": "$1"
    },
    "auth": "${token}",
    "id": 3
}
EOS
)

# echo "${json_data}"
ret_value=`curl -s -H "${header}" ${zabbix_url} -d "${json_data}" | jq -r .result.groupids[0]`

}


# ------------------------------------------
# get host group
#   $1 - host group name
# ------------------------------------------
function get_host_group() {

local json_data=$(cat << EOS
{
    "jsonrpc": "2.0",
    "method": "hostgroup.get",
    "params": {
        "output": "extend",
        "filter": {
            "name": [
                "$1"
            ]
        }
    },
    "auth": "${token}",
    "id": 4
}
EOS
)

# echo "${json_data}"
ret_value=`curl -s -H "${header}" ${zabbix_url} -d "${json_data}" | jq -r .result[0].groupid`
echo $ret_value

}


# ------------------------------------------
# add host
#   $1 - host name
#   $2 - host group id
#   $3 - ip
# ------------------------------------------
function add_host() {

local json_data=$(cat << EOS
{
    "jsonrpc": "2.0",
    "method": "host.create",
    "params": {
        "host": "$1",
        "interfaces": [
            {
                "type": 1,
                "main": 1,
                "useip": 1,
                "ip": "$3",
                "dns": "",
                "port": "10050"
            }
        ],
        "groups": [
            {
                "groupid": "$2"
            }
        ],
        "templates": [
            {
                "templateid": "10001"
            }
        ]
    },
    "auth": "${token}",
    "id": 5
}
EOS
)

# echo "${json_data}"
ret_value=`curl -s -H "${header}" ${zabbix_url} -d "${json_data}" | jq .result`
echo $ret_value

}


# ------------------------------------------
# MAIN
# ------------------------------------------

set_token
echo $token

# add group
group_name="test group33"
get_host_group "${group_name}"

if [ "null" = "${ret_value}" ]; then
  # add host group
  add_host_group "${group_name}"
  group_id=${ret_value}

else
  # already added
  group_id=${ret_value}

fi

echo ${group_id}

# add host
host_name="test_host1"
ip_address="192.168.100.10"
add_host "${host_name}" "${group_id}" "${ip_address}"