#!/bin/sh # shell function for the NITRO API of a NetScaler ADC # usage: # #NSIP="192.168.23.42" #NSUSER="nsroot" #NSPASS="secret" #nitro "$NSIP" "POST" "login" "username" "$NSUSER" "password" "$NSPASS" "session_name" #nitro "session_name" "POST" "sslcertkey" "certkey" "www.ogris.de" "cert" "www.ogris.de.cer" "key" "www.ogris.de.key" #nitro "session_name" "POST" "sslcertkey" "certkey" "www.ogris.de" "linkcertkeyname" "some_root_ca" "link" #nitro "session_name" "PUT" "sslcertkey" "certkey" "www.ogris.de" #nitro "session_name" "PUT" "policystringmap_pattern_binding" "name" "mystringmap" "key" "12345" "value" "abcdef" #nitro "session_name" "DELETE" "policystringmap_pattern_binding" "name:mystringmap,key:12345" #nitro "session_name" "POST" "nsconfig" "save" #nitro "session_name" "POST" "logout" # # session_name may arbitrarily be chosen # two environment variables will be set: NITRO_NSIP_${session_name} and NITRO_COOKIES_${session_name} # cookies will be stored to /tmp/nitro_cookies.XXXXXX with XXXXXX replaced by random characters # that file gets deleted after logout from the NITRO API nitro () { local nsip_or_session local method local resource local payload local query_or_session local nsip local cookies local query nsip_or_session="$1" shift method="$1" shift resource="$1" shift payload="" while [ -n "$1" -a -n "$2" ]; do [ -n "$payload" ] && payload="$payload," payload="$payload\"$1\":\"$2\"" shift shift done payload="{\"$resource\":{$payload}}" query_or_session="$1" shift if [ "$resource" = "login" ]; then nsip="$nsip_or_session" cookies=`mktemp /tmp/nitro_cookies.XXXXXX` eval "NITRO_NSIP_${query_or_session}=\"${nsip}\"" eval "NITRO_COOKIES_${query_or_session}=\"${cookies}\"" else eval "nsip=\"\${NITRO_NSIP_${nsip_or_session}}\"" eval "cookies=\"\${NITRO_COOKIES_${nsip_or_session}}\"" if [ -n "$query_or_session" ]; then [ "$method" = "POST" ] && query="?action=$query_or_session" [ "$method" = "DELETE" ] && query="?args=$query_or_session" [ "$method" = "GET" ] && query="?attrs=$query_or_session" fi fi curl -X "$method" -c "$cookies" -b "$cookies" \ -H "Content-Type:application/vnd.com.citrix.netscaler.${resource}+json" \ -d "$payload" "http://$nsip/nitro/v1/config/$resource$query" if [ "$resource" = "logout" ]; then rm -v "$cookies" eval "unset NITRO_NSIP_${nsip_or_session}" eval "unset NITRO_COOKIES_${nsip_or_session}" fi }