Thanks for the reply Dejan. I've added code for the status action but still no luck. So my script is now:

###################################################################################################
usage() {
    echo "usage: $0 start|stop"
    exit 1
}
associate() {
CURRENT_IP=`curl -s http://169.254.169.254/latest/meta-data/public-ipv4 ` ELASTIC_IP=`head -n 1 /etc/loadbalancer.org/aws/elasticip | tr -d '\n'`
    if [ "$CURRENT_IP" != "$ELASTIC_IP" ]; then
INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id ` ec2-associate-address -i $INSTANCE_ID $ELASTIC_IP > /dev/null 2>&1 & #re-associate the elastic ip with THIS instance
        exit 0
    else #do nothing and exit, as associating twice causes problems!
        exit 0
    fi
}
disassociate() {
ELASTIC_IP=`head -n 1 /etc/loadbalancer.org/aws/elasticip | tr -d '\n'`
    ec2-disassociate-address $ELASTIC_IP > /dev/null 2>&1 &
sleep 3 #put a small delay in to make sure that this IP will definitely be disassociated by the time '$0 start' runs
    exit 0
}

get_status() {
CURRENT_IP=`curl -s http://169.254.169.254/latest/meta-data/public-ipv4 ` ELASTIC_IP=`head -n 1 /etc/loadbalancer.org/aws/elasticip | tr -d '\n'`
    if [ "$CURRENT_IP" = "$ELASTIC_IP" ]; then
        echo "Elastic IP Running OK"
        exit 0
    else
        echo "Elastic IP is stopped."
        exit 0
    fi

}

if [ $# != 1 ]; then
    usage
fi

case "$1" in
"start" ) associate;;
"stop"  ) disassociate;;
"status" ) get_status;;
*       ) usage;;
esac

####################################################################################################

here is a section of the heartbeat log:


heartbeat[23277]: 2008/12/02_03:24:47 info: Comm_now_up(): updating status to active heartbeat[23277]: 2008/12/02_03:24:47 info: Local status now set to: 'active' heartbeat[23277]: 2008/12/02_03:24:47 WARN: No STONITH device configured. heartbeat[23277]: 2008/12/02_03:24:47 WARN: Shared disks are not protected. heartbeat[23277]: 2008/12/02_03:24:47 info: Resources being acquired from lbslave. harc[23286]: 2008/12/02_03:24:47 info: Running /etc/ha.d/rc.d/status status mach_down[23315]: 2008/12/02_03:24:47 info: /usr/share/heartbeat/ mach_down: nice_failback: foreign resources acquired mach_down[23315]: 2008/12/02_03:24:47 info: mach_down takeover complete for node lbslave.
heartbeat[23277]: 2008/12/02_03:24:47 info: mach_down takeover complete.
heartbeat[23277]: 2008/12/02_03:24:47 info: Initial resource acquisition complete (mach_down) heartbeat[23287]: 2008/12/02_03:24:47 info: Local Resource acquisition completed. harc[23377]: 2008/12/02_03:24:47 info: Running /etc/ha.d/rc.d/ip- request-resp ip-request-resp ip-request-resp[23377]: 2008/12/02_03:24:47 received ip-request-resp elastic OK yes ResourceManager[23398]: 2008/12/02_03:24:47 info: Acquiring resource group: lbmaster elastic ResourceManager[23398]: 2008/12/02_03:24:47 info: Running /etc/ha.d/ resource.d/elastic start heartbeat[23277]: 2008/12/02_03:24:57 info: Local Resource acquisition completed. (none) heartbeat[23277]: 2008/12/02_03:24:57 info: local resource transition completed.


As before, If I run '/etc/ha.d/resource.d/elastic start' manually, then the script works as expected. My haresources is simply:
        master elastic

where master is the local hostname.




--
Regards

James Little

Loadbalancer.org Limited
+44 (0)870 443 8779
www.loadbalancer.org



On 1 Dec 2008, at 21:19, Dejan Muhamedagic wrote:

Hi,

On Mon, Dec 01, 2008 at 01:47:56PM +0800, James Little wrote:
Hi all,

I'm currently working with heartbeat in the Amazon cloud and (for those
that are familiar with Amazon EC2), I'm trying to use heartbeat to
re-allocate an elastic IP on detection of node failure. I'm not experienced with writing my own heartbeat resource scripts, but this is what I have:

usage() {
   echo "usage: $0 start|stop"
   exit 1
}
associate() {
   CURRENT_IP=`curl -s
http://169.254.169.254/latest/meta-data/public-ipv4`
ELASTIC_IP=`head -n 1 /etc/loadbalancer.org/aws/elasticip | tr - d '\n'`
   if [ "$CURRENT_IP" != "$ELASTIC_IP" ]; then
       INSTANCE_ID=`curl -s
http://169.254.169.254/latest/meta-data/instance-id`
ec2-associate-address -i $INSTANCE_ID $ELASTIC_IP > /dev/ null 2>&1
& #re-associate the elastic ip with THIS instance
       exit 0
   else #do nothing and exit, as associating twice causes problems!
       exit 0
   fi
}
disassociate() {
ELASTIC_IP=`head -n 1 /etc/loadbalancer.org/aws/elasticip | tr - d '\n'`
   ec2-disassociate-address $ELASTIC_IP > /dev/null 2>&1 &
sleep 3 #put a small delay in to make sure that this IP will definitely
be disassociated by the time '$0 start' runs
   exit 0
}

if [ $# != 1 ]; then
   usage
fi

case "$1" in
"start" ) associate;;
"stop"  ) disassociate;;
*       ) usage;;
esac


The RA must support the status action. You already have code for
it in the start action. See:

http://www.linux-ha.org/HeartbeatResourceAgent

Thanks,

Dejan


and I've simply put this script in /etc/ha.d/resource.d. The script
definitely runs (via heartbeat) and I have put some debug stuff in to
confirm this (piping output to files etc.) but for some reason the
ec2-associate-address and ec2-disassociate-address commands have no effect, but when tested manually these commands work ok. In fact this whole script, when ran manually, behaves as expected. The heartbeat log indicates that
the script has ran.

I'm running heartbeat v2.1.3, but have not enabled CRM. I did think it may be a timeout because the ec2 commands take a few seconds to run, but I
tested a trivial resource script that did 'sleep 10; echo 'stuff' >
test-file' and that ran without problems, despite the 10 second sleep.


Any help greatly appreciated; thanks in advance...



--
Regards

James Little

Loadbalancer.org Limited
+44 (0)870 443 8779
www.loadbalancer.org



_______________________________________________
Linux-HA mailing list
[email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha
See also: http://linux-ha.org/ReportingProblems
_______________________________________________
Linux-HA mailing list
[email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha
See also: http://linux-ha.org/ReportingProblems

_______________________________________________
Linux-HA mailing list
[email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha
See also: http://linux-ha.org/ReportingProblems

Reply via email to