The license would be GPL, I suppose, whatever enthusiasts and community contributors usually do. And yes, it would be fun to know I contributed something to the repo.
-- Eric Robinson > -----Original Message----- > From: Kristoffer Grönlund [mailto:kgronl...@suse.com] > Sent: Monday, September 18, 2017 3:10 AM > To: Eric Robinson <eric.robin...@psmnv.com>; Cluster Labs - All topics > related to open-source clustering welcomed <users@clusterlabs.org> > Subject: Re: [ClusterLabs] Azure Resource Agent > > Eric Robinson <eric.robin...@psmnv.com> writes: > > > This is obviously beta as it currently only works with a manual failover. I > need to add some code to handle an actual node crash or power-plug test. > > > > Feedback, suggestions, improvements are welcome. If someone who > knows awk wants to clean up my azure client calls, that would be a good > place to start. > > Hi, > > Great to see an initial agent for managing IPs on Azure! First of all, I would > ask: What is your license for the code? Would you be interested in getting an > agent based on this version included in the upstream resource-agents > repository? > > Cheers, > Kristoffer > > > > > -- > > > > #!/bin/sh > > # > > # OCF parameters are as below > > # OCF_RESKEY_ip > > > > > ########################################################## > ############ > > # > > # Initialization: > > > > : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} > > . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs > > DEBUG_LEVEL=2 > > MY_HOSTNAME=$(hostname -s) > > SCRIPT_NAME=$(basename $0) > > > > > ########################################################## > ############ > > # > > > > meta_data() { > > logIt "debug1: entered: meta_data()" > > cat <<END > > <?xml version="1.0"?> > > <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd"> <resource-agent > > name="AZaddr2"> <version>1.0</version> > > > > <longdesc lang="en"> > > Resource agent for managing IP configs in Azure. > > </longdesc> > > > > <shortdesc lang="en">Short descrption/</shortdesc> > > > > <parameters> > > > > <parameter name="ip" unique="1" required="1"> <longdesc lang="en"> > The > > IPv4 (dotted quad notation) example IPv4 "192.168.1.1". > > </longdesc> > > <shortdesc lang="en">IPv4 address</shortdesc> <content type="string" > > default="" /> </parameter> > > > > </parameters> > > <actions> > > <action name="start" timeout="20s" /> > > <action name="stop" timeout="20s" /> > > <action name="status" depth="0" timeout="20s" interval="10s" /> > > <action name="monitor" depth="0" timeout="20s" interval="10s" /> > > <action name="meta-data" timeout="5s" /> <action name="validate-all" > > timeout="20s" /> </actions> </resource-agent> END > > logIt "leaving: exiting: meta_data()" > > return $OCF_SUCCESS > > } > > > > azip_query() { > > > > logIt "debug1: entered: azip_query()" > > logIt "debug1: checking to determine if an Azure ipconfig > > named > '$AZ_IPCONFIG_NAME' exists for the interface" > > logIt "debug1: executing: az network nic ip-config show > > --name > $AZ_IPCONFIG_NAME --nic-name $AZ_NIC_NAME -g $AZ_RG_NAME 2>&1" > > R=$(az network nic ip-config show --name $AZ_IPCONFIG_NAME --nic- > name $AZ_NIC_NAME -g $AZ_RG_NAME 2>&1) > > logIt "debug2: $R" > > R2=$(echo "$R"|grep "does not exist") > > if [ -n "$R2" ]; then > > logIt "debug1: ipconfig named > > '$AZ_IPCONFIG_NAME' > does not exist" > > return $OCF_NOT_RUNNING > > else > > R2=$(echo "$R"|grep "Succeeded") > > if [ -n "$R2" ]; then > > logIt "debug1: ipconfig > > '$AZ_IPCONFIG_NAME' > exists" > > return $OCF_SUCCESS > > else > > logIt "debug1: not sure how > > this happens" > > return $OCF_ERR_GENERIC > > fi > > fi > > logIt "debug1: exiting: azip_query()" > > } > > > > azip_usage() { > > cat <<END > > usage: $0 {start|stop|status|monitor|validate-all|meta-data} > > > > Expects to have a fully populated OCF RA-compliant environment set. > > END > > return $OCF_SUCCESS > > } > > > > azip_start() { > > > > logIt "debug1: entered: azip_start()" > > > > #--if a matching ipconfig already exists in Azure, return > > success > > azip_query;RC=$? > > if [ $RC -eq 0 ]; then > > logIt "debug1: $OCF_RESKEY_ip is already > > associated" > > return $OCF_SUCCESS > > > > else > > #--create an interface ipconfig in Azure > > logIt "debug1: creating ipconfig > > '$AZ_IPCONFIG_NAME'" > > logIt "debug1: executing: az network nic > > ip-config create -- > name $AZ_IPCONFIG_NAME --nic-name $AZ_NIC_NAME --resource-group > $AZ_RG_NAME --private-ip-address $OCF_RESKEY_ip \ > > --subnet $AZ_SUBNET_NAME > > --vnet-name > $AZ_VNET_NAME" > > R=$(az network nic ip-config create --name > $AZ_IPCONFIG_NAME --nic-name $AZ_NIC_NAME --resource-group > $AZ_RG_NAME --private-ip-address $OCF_RESKEY_ip --subnet > $AZ_SUBNET_NAME --vnet-name $AZ_VNET_NAME) > > logIt "debug2: output: $R" > > R2=$(echo "$R"|grep Succeeded) > > if [ -n "$R2" ]; then > > logIt "debug1: > > $AZ_IPCONFIG_NAME created > successfully with ip address $OCF_RESKEY_ip" > > return $OCF_SUCCESS > > else > > logIt "debug1: failed to > > create ipconfig > $AZ_IPCONFIG_NAME" > > return $OCF_ERR_GENERIC > > fi > > fi > > > > logIt "debug1: exiting: azip_start()" > > > > } > > > > azip_stop() { > > > > logIt "debug1: entered: azip_stop()" > > > > #--if there is no matching ipconfig in Azure, exit with success > > azip_query;RC=$? > > if [ $RC -ne 0 ]; then > > logIt "debug1: $OCF_RESKEY_ip is not associated" > > return $OCF_SUCCESS > > else > > #--delete it > > logIt "deleting ipconfig > > '$AZ_IPCONFIG_NAME'" > > R=$(az network nic ip-config delete > > --name $AZ_IPCONFIG_NAME --nic-name $AZ_NIC_NAME --resource- > group > > $AZ_RG_NAME) > > > > #--verify that it was deleted > > logIt "verifying that ipconfig > > '$AZ_IPCONFIG_NAME' got > removed" > > azip_query;RC=$? > > if [ $RC -ne 0 ]; then > > logIt "debug1: ipconfig $AZ_IPCONFIG_NAME > > successfully > removed" > > return $OCF_SUCCESS > > else > > logIt "failed to remove > > $AZ_IPCONFIG_NAME." > > return $OCF_ERR_GENERIC > > fi > > fi > > > > logIt "debug1: exiting: azip_stop()" > > } > > > > azip_monitor() { > > > > logIt "debug1: entered: azip_monitor()" > > > > azip_query;RC=$? > > logIt "debug1: function azip_query() returned $RC" > > if [ $RC -eq 0 ]; then > > return $OCF_SUCCESS > > else > > return $OCF_NOT_RUNNING > > fi > > > > logIt "debug1: exiting: azip_monitor()" > > } > > > > logIt() { > > MSG=$1 > > if [ ${MSG:0:5} == "debug" ] > > then > > MSG_LEVEL=${MSG:5:1} > > if [ $MSG_LEVEL -le $DEBUG_LEVEL ]; then > > if [ $MSG_LEVEL -gt 1 ]; > > then > > logger > > "$SCRIPT_NAME > ($OCF_RESOURCE_INSTANCE): debug$MSG_LEVEL > ########################################################## > ##########" > > logger > > "$SCRIPT_NAME > ($OCF_RESOURCE_INSTANCE): $1" > > logger > > "$SCRIPT_NAME > ($OCF_RESOURCE_INSTANCE): debug$MSG_LEVEL > ########################################################## > ##########" > > else > > logger "$SCRIPT_NAME > ($OCF_RESOURCE_INSTANCE): $1" > > fi > > else > > return > > fi > > else > > logger "$SCRIPT_NAME ($OCF_RESOURCE_INSTANCE): $1" > > fi > > } > > > > logIt "debug1: agent was asked to $__OCF_ACTION resource > $OCF_RESOURCE_INSTANCE with IP address $OCF_RESKEY_ip" > > > > > > > ########################################################## > ############ > > # Azure Initialization > > > ########################################################## > ############ > > > > #--check if azure is enabled > > AZ_ENABLED=$(az account show|grep Enabled|sed "s/ *//g"|cut -d":" > > -f2|sed "s/\"//g"|sed "s/,//g") if [ -z "$AZ_ENABLED" ] then > > logIt "Azure account not detected" > > logIt "debug1: exiting $SCRIPT_NAME" > > exit $OCF_ERR_GENERIC > > else > > logIt "debug1: AZ_ENABLED=$AZ_ENABLED" > > fi > > > > #--set the ipconfig name > > AZ_IPCONFIG_NAME="ipconfig-""$OCF_RESKEY_ip" > > logIt "debug1: AZ_IPCONFIG_NAME=$AZ_IPCONFIG_NAME" > > > > #--get the resource group name > > AZ_RG_NAME=$(az group list|grep name|cut -d":" -f2|sed "s/ *//g"|sed > > "s/\"//g"|sed "s/,//g") if [ -z "$AZ_RG_NAME" ] then > > logIt "could not determine the Azure resource group name" > > exit $OCF_ERR_GENERIC > > else > > logIt "debug1: AZ_RG_NAME=$AZ_RG_NAME" > > fi > > > > #--get the nic name > > AZ_NIC_NAME=$(az vm nic list -g $AZ_RG_NAME --vm-name > > $MY_HOSTNAME|grep networkInterfaces|cut -d"/" -f9|sed "s/\",//g") if [ > > -z "$AZ_NIC_NAME" ] then > > echo "could not determine the Azure NIC name" > > exit $OCF_ERR_GENERIC > > else > > logIt "debug1: AZ_NIC_NAME=$AZ_NIC_NAME" > > fi > > > > #--get the vnet and subnet names > > R=$(az network nic show --name $AZ_NIC_NAME --resource-group > > $AZ_RG_NAME|grep -i subnets|head -1|sed "s/ */ /g"|cut -d"/" > > -f9,11|sed "s/\",//g") LDIFS=$IFS IFS="/" > > R_ARRAY=( $R ) > > AZ_VNET_NAME=${R_ARRAY[0]} > > AZ_SUBNET_NAME=${R_ARRAY[1]} > > if [ -z "$AZ_VNET_NAME" ] > > then > > logIt "could not determine Azure vnet name" > > exit $OCF_ERR_GENERIC > > else > > logIt "debug1: AZ_VNET_NAME=$AZ_VNET_NAME" > > fi > > if [ -z "$AZ_SUBNET_NAME" ] > > then > > logIt "could not determine the Azure subnet name" > > exit $OCF_ERR_GENERIC > > else > > logIt "debug1: AZ_SUBNET_NAME=$AZ_SUBNET_NAME" > > fi > > > > > ########################################################## > ############ > > # Actions > > > ########################################################## > ############ > > > > case $__OCF_ACTION in > > meta-data) meta_data > > RC=$? > > ;; > > usage|help) azip_usage > > RC=$? > > ;; > > start) azip_start > > RC=$? > > ;; > > stop) azip_stop > > RC=$? > > ;; > > status) azip_query > > RC=$? > > ;; > > monitor) azip_monitor > > RC=$? > > ;; > > validate-all) ;; > > *) azip_usage > > RC=$OCF_ERR_UNIMPLEMENTED > > ;; > > esac > > > > #--exit with return code > > logIt "debug1: exiting $SCRIPT_NAME with code $RC" > > exit $RC > > > > #--end > > > > -- > > Eric Robinson > > > > _______________________________________________ > > Users mailing list: Users@clusterlabs.org > > http://lists.clusterlabs.org/mailman/listinfo/users > > > > Project Home: http://www.clusterlabs.org Getting started: > > http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf > > Bugs: http://bugs.clusterlabs.org > > -- > // Kristoffer Grönlund > // kgronl...@suse.com _______________________________________________ Users mailing list: Users@clusterlabs.org http://lists.clusterlabs.org/mailman/listinfo/users Project Home: http://www.clusterlabs.org Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf Bugs: http://bugs.clusterlabs.org