mdadm: extend uci config support
[openwrt/openwrt.git] / package / utils / mdadm / files / mdadm.init
1 #!/bin/sh /etc/rc.common
2
3 START=13
4 STOP=98
5
6 USE_PROCD=1
7 PROG=/sbin/mdadm
8 NAME=mdadm
9
10 CONF="/var/etc/mdadm.conf"
11
12 append_list_item() {
13 append "$2" "$1" "$3"
14 }
15
16 append_option() {
17 local var="$1"
18 local cfg="$2"
19 local opt="$3"
20 local name="$4"
21 local sep="$5"
22 local str
23
24 if [ -n "$sep" ]; then
25 config_list_foreach "$cfg" "$opt" append_list_item str "$sep"
26 else
27 config_get str "$cfg" "$opt"
28 fi
29
30 [ -n "$str" ] && append "$var" $(printf "%s=%s" "${name:-${opt//_/-}}" "$str")
31 }
32
33 mdadm_common() {
34 local cfg="$1"
35 local email devices
36
37 if [ -x /sbin/sendmail ]; then
38 append_option email "$cfg" email "MAILADDR"
39
40 fi
41
42 append_option devices "$cfg" devices DEVICE " "
43
44 printf "%s\n%s\n" "$email" "$devices" >> $CONF
45 }
46
47 mdadm_array() {
48 local cfg="$1"
49 local uuid device devices name array
50
51 config_get uuid "$cfg" uuid
52 config_get name "$cfg" name
53 config_get device "$cfg" device
54
55 if [ -z "$device" ] || [ -z "$uuid$name" ]; then
56 echo "Skipping array without device, uuid or name" >&2
57 return
58 fi
59
60 [ -n "$uuid" ] && append array "uuid=$uuid"
61 [ -n "$name" ] && append array "name=$name"
62
63 append_option array "$cfg" super_minor
64 append_option array "$cfg" spares
65 append_option array "$cfg" spare_group
66 append_option array "$cfg" bitmap
67 append_option array "$cfg" container
68 append_option array "$cfg" member
69 append_option array "$cfg" devices devices ","
70
71 printf "ARRAY %s %s\n" "$device" "$array" >> $CONF
72 }
73
74 start_service() {
75 local email
76
77 mkdir -p "${CONF%/*}"
78 printf "# Autogenerated from /etc/config/mdadm, do not edit!\n" > $CONF
79
80 config_load mdadm
81 config_foreach mdadm_common mdadm
82 config_foreach mdadm_array array
83
84 $PROG --assemble --scan --config="$CONF"
85
86 procd_open_instance
87 procd_set_param command "$PROG" --monitor --syslog --scan --config="$CONF"
88 procd_close_instance
89 }
90
91 stop_service() {
92 $PROG --stop --scan
93 }
94