#!/bin/bash # Amazon EC2 Pandora FMS Server plugin # (c) Sancho Lerena 2011 # .. Config # location of default config file default_config_file=/usr/share/pandora_server/util/plugin/aws_plugin.conf default_java_home=/usr progname=`basename $0` # .. Functions function help { echo -e "Amazon EC2 Plugin for Pandora FMS Plugin server. http://pandorafms.com" echo " " echo "This plugin is used to get EC2 instance information via EC2 API" echo "Syntax:" echo " ./$progname [-A access-key -S secret-key][-R region] -f config -i instance-id -n field-name" echo -e "\t\t-f path of configu file" echo -e "\t\t-R Region, p.e us-east-1" echo -e "\t\t-A Access KEY ID, p.e AKIAILTVCAS26GTKLD4A" echo -e "\t\t-S Secret Access Key, p.e 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" echo -e "\t\t-i Instance ID, p.e i-9d0b4af1" echo -e "\t\t-n Field Name, p.e type, public-dns, .." echo -e "\t\t-h Show this messages" echo " " echo -e "\t\t field-nmae is one of following;" echo -e "\t\t\tami-id, public-dns, private-dns, state, type, available-zone," echo -e "\t\t\tpublic-ip, private-ip, block-devices, security-groups," echo -e "\t\t\ttag:\${your-tag-name}" echo "Samples:" echo " ./$progname -f /usr/share/pandora/util/plugin/ec2_plugin.conf -i i-9d0b4af1 -n public-dns" echo " ./$progname -f /usr/share/pandora/util/plugin/ec2_plugin.conf -i i-9d0b4af1 -n tag:Name" echo exit 0 } function check_required_variables { _result=OK; # .. EC2_HOME if [ ! -d "$EC2_HOME" ] || [ ! -x $EC2_HOME/bin/ec2-describe-instances ] then echo "You need to define EC2_HOME settings." _result=NG; fi export EC2_HOME # .. JAVA_HOME if [ -z "$JAVA_HOME" ] && [ -d "$default_java_home" ] && [ -x "$default_java_home/bin/java" ] then JAVA_HOME=$default_java_home fi if [ ! -d "$JAVA_HOME" ] || [ ! -x "$JAVA_HOME/bin/java" ] then echo "You need to define JAVA_HOME settings." _result=NG; fi export JAVA_HOME # .. AWS_CREDENTIAL_FILE (or specify AWS_ACCESS_KEY/OPT_SECRET_KEY pair) if [ -z "${OPT_ACCESS_KEY}" ] && [ -z "${OPT_SECRET_KEY}" ] then if [ ! -f "$AWS_CREDENTIAL_FILE" ] || [ ! -r "$AWS_CREDENTIAL_FILE" ] then echo "You need to specify AWS_ACCESS_KEY/OPT_SECRET_KEY pair or define AWS_CREDENTIAL_FILE settings." _result=NG; else AWS_ACCESS_KEY=`sed -n -e '/^AWSAccessKeyId=/{s/^AWSAccessKeyId=\([^ ]*\).*$/\1/p;q}' $AWS_CREDENTIAL_FILE` AWS_SECRET_KEY=`sed -n -e '/^AWSSecretKey=/{s/^AWSSecretKey=\([^ ]*\).*$/\1/p;q}' $AWS_CREDENTIAL_FILE` export AWS_ACCESS_KEY AWS_SECRET_KEY fi else if [ -z "${OPT_ACCESS_KEY}" ] || [ -z "${OPT_SECRET_KEY}" ] then echo "You need to specify AWS_ACCESS_KEY/OPT_SECRET_KEY pair or define AWS_CREDENTIAL_FILE settings." _result=NG; fi fi # .. EC2_REGION or EC2_URL if [ -z "$EC2_URL" ] && [ -z "$EC2_REGION" ] then echo "You need to define EC2_REGION or EC2_URL settings." _result=NG; fi if [ -z "$EC2_URL" ] then EC2_URL="http://ec2.${EC2_REGION}.amazonaws.com" fi export EC2_URL # check the result and abort if shomething wrong if [ "$_result" != "OK" ] then echo "Please read the documentation." echo "aborting..." exit 1; fi # optional settings... [ -n "$SERVICE_JVM_ARGS" ] && export SERVICE_JVM_ARGS } if [ $# -eq 0 ] then help fi TIMEOUT_CHECK=0 DOMAIN_CHECK="" IP_CHECK="" DNS_CHECK="" # Main parsing code while getopts ":hf:A:S:R:i:n:" optname do case "$optname" in "h") help ;; "f") arg_config_file="$OPTARG" ;; "A") OPT_ACCESS_KEY="--I $OPTARG" ;; "S") OPT_SECRET_KEY="--S $OPTARG" ;; "R") OPT_REGION="--region $OPTARG" ;; "i") target="$OPTARG" ;; "n") field="$OPTARG" ;; *) help ;; esac done shift `expr $OPTIND - 1` config_file=${arg_config_file:-$default_config_file} # Read config file if [ -f "$config_file" ] && [ -r "$config_file" ] then . $config_file else echo "Cannot read $config_file." fi check_required_variables if [ -z "$field" ] || [ -z "$target" ] then help fi description_lines=`${EC2_HOME}/bin/ec2-describe-instances ${OPT_ACCESS_KEY} ${OPT_SECRET_KEY} ${OPT_REGION} --show-empty-fields $target 2> /dev/null` case $field in ami-id|ami) echo "$description_lines" | grep "^INSTANCE" | cut -f 3;; public-dns) echo "$description_lines" | grep "^INSTANCE" | cut -f 4;; private-dns) echo "$description_lines" | grep "^INSTANCE" | cut -f 5;; state) echo "$description_lines" | grep "^INSTANCE" | cut -f 6;; type) echo "$description_lines" | grep "^INSTANCE" | cut -f 10;; available-zone|zone) echo "$description_lines" | grep "^INSTANCE" | cut -f 12;; public-ip) echo "$description_lines" | grep "^INSTANCE" | cut -f 17;; private-ip) echo "$description_lines" | grep "^INSTANCE" | cut -f 18;; block-devices) echo "$description_lines" | grep "^BLOCKDEVICE" | cut -f 2,3;; security-groups|groups) echo "$description_lines" | grep "^RESERVATION" | cut -f 4;; tag:*) target_tag=${field/tag:/} echo "$description_lines" | grep -i "^TAG instance $target $target_tag" | cut -f 5;; esac