~ubuntu-branches/ubuntu/maverick/cluster-agents/maverick-proposed

« back to all changes in this revision

Viewing changes to heartbeat/Delay

  • Committer: Bazaar Package Importer
  • Author(s): Ante Karamatic
  • Date: 2010-02-17 21:46:00 UTC
  • Revision ID: james.westby@ubuntu.com-20100217214600-g44grvtkw7jbpciz
Tags: upstream-1.0.2
ImportĀ upstreamĀ versionĀ 1.0.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/sh
 
2
#
 
3
#
 
4
# Support:      linux-ha@lists.linux-ha.org
 
5
# License:      GNU General Public License (GPL)
 
6
#
 
7
#       This script is a test resource for introducing delay.
 
8
#
 
9
#       usage: $0  {start|stop|status|monitor|meta-data}
 
10
#
 
11
#         OCF parameters are as below:
 
12
#               OCF_RESKEY_startdelay
 
13
#               OCF_RESKEY_stopdelay
 
14
#               OCF_RESKEY_mondelay
 
15
#
 
16
#       
 
17
#               OCF_RESKEY_startdelay defaults to 30 (seconds)
 
18
#               OCF_RESKEY_stopdelay defaults to $OCF_RESKEY_startdelay
 
19
#               OCF_RESKEY_mondelay defaults to $OCF_RESKEY_startdelay
 
20
#
 
21
#
 
22
#       This is really a test resource script.
 
23
#
 
24
 
 
25
#######################################################################
 
26
# Initialization:
 
27
 
 
28
: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/resource.d/heartbeat}
 
29
. ${OCF_FUNCTIONS_DIR}/.ocf-shellfuncs
 
30
 
 
31
#######################################################################
 
32
 
 
33
usage() {
 
34
  cat <<-!
 
35
        usage: $0 {start|stop|status|monitor|meta-data|validate-all}
 
36
        !
 
37
}
 
38
 
 
39
meta_data() {
 
40
        cat <<END
 
41
<?xml version="1.0"?>
 
42
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
 
43
<resource-agent name="Delay">
 
44
<version>1.0</version>
 
45
 
 
46
<longdesc lang="en">
 
47
This script is a test resource for introducing delay.
 
48
</longdesc>
 
49
<shortdesc lang="en">Waits for a defined timespan</shortdesc>
 
50
 
 
51
<parameters>
 
52
 
 
53
<parameter name="startdelay" unique="0" required="0">
 
54
<longdesc lang="en">
 
55
How long in seconds to delay on start operation.
 
56
</longdesc>
 
57
<shortdesc lang="en">Start delay</shortdesc>
 
58
<content type="integer" default="30" />
 
59
</parameter>
 
60
 
 
61
<parameter name="stopdelay" unique="0"  required="0">
 
62
<longdesc lang="en">
 
63
How long in seconds to delay on stop operation.
 
64
Defaults to "startdelay" if unspecified.
 
65
</longdesc>
 
66
<shortdesc lang="en">Stop delay</shortdesc>
 
67
<content type="integer" default="30" />
 
68
</parameter>
 
69
 
 
70
<parameter name="mondelay" unique="0"  required="0">
 
71
<longdesc lang="en">
 
72
How long in seconds to delay on monitor operation.
 
73
Defaults to "startdelay" if unspecified.
 
74
</longdesc>
 
75
<shortdesc lang="en">Monitor delay</shortdesc>
 
76
<content type="integer" default="30" />
 
77
</parameter>
 
78
</parameters>
 
79
 
 
80
<actions>
 
81
<action name="start" timeout="30" />
 
82
<action name="stop" timeout="30" />
 
83
<action name="status" depth="0" timeout="30" interval="10" />
 
84
<action name="monitor" depth="0" timeout="30" interval="10" />
 
85
<action name="meta-data" timeout="5" />
 
86
<action name="validate-all" timeout="5" />
 
87
</actions>
 
88
</resource-agent>
 
89
END
 
90
}
 
91
 
 
92
Delay_stat() {
 
93
        ha_pseudo_resource Delay_${OCF_RESOURCE_INSTANCE} monitor
 
94
}
 
95
 
 
96
Delay_Status() {
 
97
  if
 
98
    Delay_stat
 
99
  then
 
100
    ocf_log info "Delay is running OK"
 
101
    return $OCF_SUCCESS
 
102
  else
 
103
    ocf_log info "Delay is stopped"
 
104
    return $OCF_NOT_RUNNING
 
105
  fi
 
106
}
 
107
 
 
108
Delay_Monitor() {
 
109
  Delay_Validate_All -q
 
110
  sleep $OCF_RESKEY_mondelay
 
111
  Delay_Status
 
112
}
 
113
 
 
114
Delay_Start() {
 
115
  if
 
116
    Delay_stat
 
117
  then
 
118
    ocf_log info "Delay already running."
 
119
    return $OCF_SUCCESS
 
120
  else
 
121
    Delay_Validate_All -q
 
122
        ha_pseudo_resource Delay_${OCF_RESOURCE_INSTANCE} start
 
123
    rc=$?
 
124
    sleep $OCF_RESKEY_startdelay
 
125
    if
 
126
      [ $rc -ne 0 ]
 
127
    then
 
128
      return $OCF_ERR_PERM
 
129
    fi
 
130
    return $OCF_SUCCESS
 
131
  fi
 
132
}
 
133
 
 
134
Delay_Stop() {
 
135
  if
 
136
    Delay_stat
 
137
  then
 
138
    Delay_Validate_All -q
 
139
        ha_pseudo_resource Delay_${OCF_RESOURCE_INSTANCE} stop
 
140
    rc=$?
 
141
    sleep $OCF_RESKEY_stopdelay
 
142
    if
 
143
      [ $rc -ne 0 ]
 
144
    then
 
145
      return $OCF_ERR_PERM
 
146
    fi
 
147
    return $OCF_SUCCESS
 
148
  else
 
149
    ocf_log info "Delay already stopped."
 
150
    return $OCF_SUCCESS
 
151
  fi
 
152
}
 
153
 
 
154
# Check if all the arguments are valid numbers, a string is considered valid if:
 
155
# 1. It does not contain any character but digits and period ".";
 
156
# 2. The period "." does not occur more than once
 
157
 
 
158
Are_Valid_Numbers() {
 
159
  for i in "$@"; do
 
160
        echo $i |grep -v [^0-9.] |grep -q -v [.].*[.]
 
161
        if test $? -ne 0; then
 
162
          return $OCF_ERR_ARGS
 
163
        fi
 
164
  done
 
165
  return $OCF_SUCCESS
 
166
}
 
167
 
 
168
Delay_Validate_All() {
 
169
# Be quiet when specified -q option _and_ validation succeded
 
170
  getopts "q" option
 
171
 
 
172
  if test $option = "q"; then
 
173
        quiet=yes
 
174
  else
 
175
        quiet=no
 
176
  fi
 
177
  shift $(($OPTIND -1))
 
178
 
 
179
  if Are_Valid_Numbers $OCF_RESKEY_startdelay $OCF_RESKEY_stopdelay \
 
180
        $OCF_RESKEY_mondelay; then
 
181
    if test $quiet = "no"; then
 
182
        echo "Validate OK"
 
183
    fi
 
184
# _Return_ on validation success
 
185
        return $OCF_SUCCESS
 
186
  else
 
187
        echo "Some of the instance parameters are invalid"
 
188
# _Exit_ on validation failure
 
189
        exit $OCF_ERR_ARGS
 
190
  fi
 
191
}
 
192
 
 
193
if [ $# -ne 1 ]; then
 
194
  usage
 
195
  exit $OCF_ERR_ARGS
 
196
fi
 
197
 
 
198
: ${OCF_RESKEY_startdelay=30}
 
199
: ${OCF_RESKEY_stopdelay=$OCF_RESKEY_startdelay}
 
200
: ${OCF_RESKEY_mondelay=$OCF_RESKEY_startdelay}
 
201
 
 
202
case $1 in
 
203
  meta-data)            meta_data
 
204
                        exit $OCF_SUCCESS
 
205
                        ;;
 
206
  start)                Delay_Start
 
207
                        ;;
 
208
  stop)                 Delay_Stop
 
209
                        ;;
 
210
  monitor)              Delay_Monitor
 
211
                        ;;
 
212
  status)               Delay_Status
 
213
                        ;;
 
214
  validate-all)         Delay_Validate_All
 
215
                        ;;
 
216
  usage)                usage
 
217
                        exit $OCF_SUCCESS
 
218
                        ;;
 
219
  *)                    usage
 
220
                        exit $OCF_ERR_ARGS
 
221
                        ;;
 
222
esac
 
223
exit $?