-
Notifications
You must be signed in to change notification settings - Fork 2
/
eip
executable file
·128 lines (110 loc) · 3.44 KB
/
eip
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/bin/sh
#
#
# Resource Agent for AWS EC2 EIP
#
# Copyright (c) 2014 mooapp All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of version 2 of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# Further, this software is distributed without any warranty that it is
# free of the rightful claim of any third person regarding infringement
# or the like. Any license provided herein, whether implied or
# otherwise, applies only to this software file. Patent licenses, if
# any, provided herein do not apply to combinations of this program with
# other software, or any other product whatsoever.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
#
#######################################################################
# Initialization:
: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat}
. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
#######################################################################
meta_data() {
cat <<END
<?xml version="1.0"?>
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
<resource-agent name="eip" version="0.9">
<version>1.0</version>
<longdesc lang="en">
This is a Resource Agent for AWS EC2 EIP (Elastic IP Address).
</longdesc>
<shortdesc lang="en">AWS EC2 EIP resource agent</shortdesc>
<parameters>
<parameter name="elastic_ip" required="1">
<longdesc lang="en">
The Elastic IP address
</longdesc>
<shortdesc lang="en">EIP</shortdesc>
<content type="string" />
</parameter>
</parameters>
<actions>
<action name="start" timeout="20" />
<action name="stop" timeout="20" />
<action name="monitor" timeout="20" interval="10" depth="0" />
<action name="meta-data" timeout="5" />
<action name="validate-all" timeout="20" />
</actions>
</resource-agent>
END
}
#######################################################################
eip_usage() {
cat <<END
usage: $0 {start|stop|monitor|validate-all|meta-data}
Expects to have a fully populated OCF RA-compliant environment set.
END
}
eip_start() {
eip_monitor
if [ $? = $OCF_SUCCESS ]; then
return $OCF_SUCCESS
fi
/usr/bin/aws ec2 associate-address --public-ip ${OCF_RESKEY_elastic_ip} --instance-id ${instance_id}
}
eip_stop() {
eip_monitor
if [ $? = $OCF_SUCCESS ]; then
/usr/bin/aws ec2 disassociate-address --public-ip ${OCF_RESKEY_elastic_ip}
fi
return $OCF_SUCCESS
}
eip_monitor() {
mon=`/usr/bin/aws ec2 describe-addresses --public-ips ${OCF_RESKEY_elastic_ip} --filters "Name=instance-id,Values=${instance_id}" --output json | grep ${instance_id} | wc -l`
if [ $mon -ne 0 ]; then
return $OCF_SUCCESS
fi
return $OCF_NOT_RUNNING
}
eip_validate() {
return $OCF_SUCCESS
}
instance_id=`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id`
case $__OCF_ACTION in
meta-data) meta_data
exit $OCF_SUCCESS
;;
start) eip_start;;
stop) eip_stop;;
monitor) eip_monitor;;
validate-all) eip_validate;;
usage|help) eip_usage
exit $OCF_SUCCESS
;;
*) eip_usage
exit $OCF_ERR_UNIMPLEMENTED
;;
esac
rc=$?
ocf_log debug "${OCF_RESOURCE_INSTANCE} $__OCF_ACTION : $rc"
exit $rc