~ubuntu-branches/debian/jessie/resource-agents/jessie

« back to all changes in this revision

Viewing changes to .pc/02_spelling_fixes.patch/heartbeat/nfsserver

  • Committer: Bazaar Package Importer
  • Author(s): Martin Loschwitz
  • Date: 2011-10-20 12:10:13 UTC
  • Revision ID: james.westby@ubuntu.com-20111020121013-ficddzhosi473laz
Tags: 1:3.9.2-4
Adopted numerous changes from the Ubuntu packages, implemented by Andres 
Rodriguez to make co-maintaining these packages in Ubuntu and Debian a
bit easier.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/sh
 
2
# nfsserver
 
3
#
 
4
# Description: Manages nfs server as OCF resource
 
5
# by hxinwei@gmail.com
 
6
# License: GNU General Public License v2 (GPLv2) and later
 
7
 
 
8
if [ -n "$OCF_DEBUG_LIBRARY" ]; then
 
9
    . $OCF_DEBUG_LIBRARY
 
10
else
 
11
    : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat}
 
12
. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
 
13
fi
 
14
 
 
15
DEFAULT_INIT_SCRIPT="/etc/init.d/nfsserver"
 
16
DEFAULT_NOTIFY_CMD="/sbin/sm-notify"
 
17
 
 
18
nfsserver_meta_data() {
 
19
        cat <<END
 
20
<?xml version="1.0"?>
 
21
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
 
22
<resource-agent name="nfsserver">
 
23
<version>1.0</version>
 
24
 
 
25
<longdesc lang="en">
 
26
Nfsserver helps to manage the Linux nfs server as a failover-able resource in Linux-HA.
 
27
It depends on Linux specific NFS implementation details, so is considered not portable to other platforms yet.
 
28
</longdesc>
 
29
 
 
30
<shortdesc lang="en">Manages an NFS server</shortdesc>
 
31
 
 
32
<parameters>
 
33
 
 
34
<parameter name="nfs_init_script" unique="0" required="0">
 
35
<longdesc lang="en">
 
36
The default init script shipped with the Linux distro.
 
37
The nfsserver resource agent offloads the start/stop/monitor work to the init script because the procedure to start/stop/monitor nfsserver varies on different Linux distro.
 
38
</longdesc>
 
39
<shortdesc lang="en">
 
40
Init script for nfsserver
 
41
</shortdesc>
 
42
<content type="string" default="$DEFAULT_INIT_SCRIPT" />
 
43
</parameter>
 
44
 
 
45
<parameter name="nfs_notify_cmd" unique="0" required="0">
 
46
<longdesc lang="en">
 
47
The tool to send out NSM reboot notification.
 
48
Failover of nfsserver can be considered as rebooting to different machines.
 
49
The nfsserver resource agent use this command to notify all clients about the happening of failover.
 
50
</longdesc>
 
51
<shortdesc lang="en">
 
52
The tool to send out notification.
 
53
</shortdesc>
 
54
<content type="string" default="$DEFAULT_NOTIFY_CMD" />
 
55
</parameter>
 
56
 
 
57
<parameter name="nfs_shared_infodir" unique="0" required="1">
 
58
<longdesc lang="en">
 
59
The nfsserver resource agent will save nfs related information in this specific directory.
 
60
And this directory must be able to fail-over before nfsserver itself.
 
61
</longdesc>
 
62
<shortdesc lang="en">
 
63
Directory to store nfs server related information.
 
64
</shortdesc>
 
65
<content type="string" default="" />
 
66
</parameter>
 
67
 
 
68
<parameter name="nfs_ip" unique="0" required="1">
 
69
<longdesc lang="en">
 
70
The floating IP address used to access the nfs service
 
71
</longdesc>
 
72
<shortdesc lang="en">
 
73
IP address.
 
74
</shortdesc>
 
75
<content type="string"/>
 
76
</parameter>
 
77
 
 
78
</parameters>
 
79
 
 
80
<actions>
 
81
<action name="start"   timeout="40" />
 
82
<action name="stop"    timeout="20s" />
 
83
<action name="monitor" depth="0"  timeout="20s" interval="10" />
 
84
<action name="meta-data"  timeout="5" />
 
85
<action name="validate-all"  timeout="30" />
 
86
</actions>
 
87
</resource-agent>
 
88
END
 
89
 
 
90
return $OCF_SUCCESS
 
91
}
 
92
 
 
93
nfsserver_usage() {
 
94
        cat <<END
 
95
                usage: $0 {start|stop|monitor|status|validate-all|meta-data}
 
96
END
 
97
}
 
98
 
 
99
if [ $# -ne 1 ]; then
 
100
        nfsserver_usage
 
101
        exit $OCF_ERR_ARGS
 
102
fi
 
103
 
 
104
case $__OCF_ACTION in
 
105
        meta-data)  nfsserver_meta_data
 
106
                exit $OCF_SUCCESS
 
107
                ;;
 
108
        usage|help) nfsserver_usage
 
109
                exit $OCF_SUCCESS
 
110
                ;;
 
111
        *)
 
112
                ;;      
 
113
esac
 
114
 
 
115
fp="$OCF_RESKEY_nfs_shared_infodir"
 
116
: ${OCF_RESKEY_nfs_init_script="$DEFAULT_INIT_SCRIPT"}
 
117
: ${OCF_RESKEY_nfs_notify_cmd="$DEFAULT_NOTIFY_CMD"}
 
118
 
 
119
nfsserver_monitor ()
 
120
{
 
121
        fn=`mktemp`
 
122
        ${OCF_RESKEY_nfs_init_script} status > $fn 2>&1 
 
123
        rc=$?
 
124
        ocf_log debug `cat $fn`
 
125
        rm -f $fn
 
126
 
 
127
#Adapte LSB status code to OCF return code
 
128
        if [ $rc -eq 0 ]; then
 
129
                return $OCF_SUCCESS
 
130
        elif [ $rc -eq 3 ]; then
 
131
                return $OCF_NOT_RUNNING
 
132
        else
 
133
                return $OCF_ERR_GENERIC
 
134
        fi
 
135
}
 
136
 
 
137
prepare_directory ()
 
138
{
 
139
        [ -d "$fp" ] || mkdir -p $fp
 
140
        [ -d "$fp/rpc_pipefs" ] || mkdir -p $fp/rpc_pipefs
 
141
        [ -d "$fp/sm" ] || mkdir -p $fp/sm
 
142
        [ -d "$fp/sm.ha" ] || mkdir -p $fp/sm.ha
 
143
        [ -d "$fp/sm.bak" ] || mkdir -p $fp/sm.bak
 
144
        [ -d "$fp/v4recovery" ] || mkdir -p $fp/v4recovery
 
145
}
 
146
 
 
147
is_bound ()
 
148
{
 
149
        mount | grep -q "$1 on $2 type none (.*bind)"
 
150
        return $?
 
151
}
 
152
 
 
153
bind_tree ()
 
154
{
 
155
        if is_bound $fp /var/lib/nfs; then
 
156
                ocf_log debug "$fp is already bound to /var/lib/nfs"
 
157
                return 0
 
158
        fi
 
159
        mount --bind $fp /var/lib/nfs
 
160
}
 
161
 
 
162
unbind_tree ()
 
163
{
 
164
        if `mount | grep -q "rpc_pipefs on /var/lib/nfs/rpc_pipefs"`; then
 
165
                umount /var/lib/nfs/rpc_pipefs
 
166
        fi
 
167
        if is_bound $fp /var/lib/nfs; then
 
168
                umount /var/lib/nfs
 
169
        fi
 
170
}
 
171
 
 
172
nfsserver_start ()
 
173
{
 
174
        prepare_directory
 
175
        bind_tree
 
176
 
 
177
        rm -f /var/lib/nfs/sm.ha/* > /dev/null 2>&1
 
178
        cp -f /var/lib/nfs/sm/* /var/lib/nfs/sm.ha > /dev/null 2>&1
 
179
 
 
180
        ocf_log info "Starting NFS server ..."
 
181
 
 
182
        fn=`mktemp`
 
183
        ${OCF_RESKEY_nfs_init_script} start > $fn 2>&1
 
184
        rc=$?
 
185
        ocf_log debug `cat $fn`
 
186
        rm -f $fn
 
187
 
 
188
        if [ $rc -ne 0 ]; then
 
189
                ocf_log err "Failed to start NFS server"
 
190
                return $rc
 
191
        fi      
 
192
 
 
193
        #Notify the nfs server has been moved or rebooted
 
194
        #The init script do that already, but with the hostname, which may be ignored by client
 
195
        #we have to do it again with the nfs_ip 
 
196
        local opts="-v"
 
197
        echo $OCF_RESKEY_nfs_notify_cmd | grep -qws rpc.statd &&
 
198
                opts=""
 
199
        ${OCF_RESKEY_nfs_notify_cmd} $opts $OCF_RESKEY_nfs_ip -P /var/lib/nfs/sm.ha
 
200
 
 
201
        ocf_log info "NFS server started"
 
202
        return $OCF_SUCCESS
 
203
}
 
204
 
 
205
nfsserver_stop ()
 
206
{
 
207
        ocf_log info "Stopping NFS server ..."
 
208
 
 
209
        fn=`mktemp`
 
210
        ${OCF_RESKEY_nfs_init_script} stop > $fn 2>&1
 
211
        rc=$?
 
212
        ocf_log debug `cat $fn`
 
213
        rm -f $fn
 
214
 
 
215
        if [ $rc -eq 0 ]; then
 
216
                unbind_tree 
 
217
                ocf_log info "NFS server stopped"
 
218
                return $OCF_SUCCESS
 
219
        fi
 
220
        ocf_log err "Failed to stop NFS server"
 
221
        return $rc
 
222
}
 
223
 
 
224
nfsserver_validate ()
 
225
{
 
226
        check_binary ${OCF_RESKEY_nfs_init_script}
 
227
        check_binary ${OCF_RESKEY_nfs_notify_cmd}
 
228
 
 
229
        if [ -z ${OCF_RESKEY_nfs_ip} ]; then
 
230
                ocf_log err "nfs_ip not set"
 
231
                exit $OCF_ERR_CONFIGURED
 
232
        fi
 
233
 
 
234
        if [ x = "x$OCF_RESKEY_nfs_shared_infodir" ]; then
 
235
                ocf_log err "nfs_shared_infodir not set"
 
236
                exit $OCF_ERR_CONFIGURED
 
237
        fi
 
238
 
 
239
        return $OCF_SUCCESS
 
240
}
 
241
 
 
242
if [ -n "$OCF_RESKEY_CRM_meta_clone" ]; then
 
243
        ocf_log err "THIS RA DO NOT SUPPORT CLONE MODE!"
 
244
        exit $OCF_ERR_CONFIGURED
 
245
fi
 
246
 
 
247
nfsserver_validate
 
248
 
 
249
case $__OCF_ACTION in
 
250
        start)      nfsserver_start
 
251
                ;;
 
252
        stop)       nfsserver_stop
 
253
                ;;
 
254
        monitor)    nfsserver_monitor
 
255
                ;;
 
256
        validate-all)   nfsserver_validate
 
257
                ;;
 
258
        *)      nfsserver_usage
 
259
        exit $OCF_ERR_UNIMPLEMENTED
 
260
        ;;
 
261
esac
 
262