root / daemons / ensure-dirs.in @ 2237687b
History | View | Annotate | Download (4.5 kB)
1 |
#!/bin/bash |
---|---|
2 |
|
3 |
set -e |
4 |
|
5 |
LIBDIR="@LOCALSTATEDIR@/lib" |
6 |
DATADIR="${LIBDIR}/ganeti" |
7 |
RUNDIR="@LOCALSTATEDIR@/run" |
8 |
GNTRUNDIR="${RUNDIR}/ganeti" |
9 |
LOGDIR="@LOCALSTATEDIR@/log" |
10 |
GNTLOGDIR="${LOGDIR}/ganeti" |
11 |
LOCKDIR="@LOCALSTATEDIR@/lock" |
12 |
|
13 |
_fileset_owner() { |
14 |
case "$1" in |
15 |
masterd) |
16 |
echo "@GNTMASTERUSER@:@GNTMASTERDGROUP@" |
17 |
;; |
18 |
confd) |
19 |
echo "@GNTCONFDUSER@:@GNTCONFDGROUP@" |
20 |
;; |
21 |
rapi) |
22 |
echo "@GNTRAPIUSER@:@GNTRAPIGROUP@" |
23 |
;; |
24 |
noded) |
25 |
echo "root:@GNTMASTERDGROUP@" |
26 |
;; |
27 |
daemons) |
28 |
echo "@GNTMASTERUSER@:@GNTDAEMONSGROUP@" |
29 |
;; |
30 |
masterd-confd) |
31 |
echo "@GNTMASTERUSER@:@GNTCONFDGROUP@" |
32 |
;; |
33 |
*) |
34 |
echo "root:root" |
35 |
;; |
36 |
esac |
37 |
} |
38 |
|
39 |
_ensure_file() { |
40 |
local file="$1" |
41 |
local perm="$2" |
42 |
local owner="$3" |
43 |
|
44 |
[[ -e "${file}" ]] || return 1 |
45 |
chmod ${perm} "${file}" |
46 |
|
47 |
if ! [[ -z "${owner}" ]]; then |
48 |
chown ${owner} "${file}" |
49 |
fi |
50 |
|
51 |
return 0 |
52 |
} |
53 |
|
54 |
_ensure_dir() { |
55 |
local dir="$1" |
56 |
local perm="$2" |
57 |
local owner="$3" |
58 |
|
59 |
[[ -d "${dir}" ]] || mkdir "${dir}" |
60 |
|
61 |
_ensure_file "${dir}" "${perm}" "${owner}" |
62 |
} |
63 |
|
64 |
_gather_files() { |
65 |
local path="$1" |
66 |
local perm="$2" |
67 |
local user="$3" |
68 |
local group="$4" |
69 |
|
70 |
shift 4 |
71 |
|
72 |
find "${path}" -type f "(" "!" -perm ${perm} -or "(" "!" -user ${user} -or \ |
73 |
"!" -group ${group} ")" ")" "$@" |
74 |
} |
75 |
|
76 |
_ensure_datadir() { |
77 |
local full_run="$1" |
78 |
|
79 |
_ensure_dir ${DATADIR} 0755 "$(_fileset_owner masterd)" |
80 |
_ensure_dir ${DATADIR}/queue 0700 "$(_fileset_owner masterd)" |
81 |
_ensure_dir ${DATADIR}/queue/archive 0700 "$(_fileset_owner masterd)" |
82 |
_ensure_dir ${DATADIR}/uidpool 0750 "$(_fileset_owner noded)" |
83 |
_ensure_dir ${DATADIR}/rapi 0750 "$(_fileset_owner rapi)" |
84 |
|
85 |
# We ignore these files if they don't exists (incomplete setup) |
86 |
_ensure_file ${DATADIR}/cluster-domain-secret 0640 \ |
87 |
"$(_fileset_owner masterd)" || : |
88 |
_ensure_file ${DATADIR}/config.data 0640 "$(_fileset_owner masterd-confd)" || : |
89 |
_ensure_file ${DATADIR}/hmac.key 0440 "$(_fileset_owner confd)" || : |
90 |
_ensure_file ${DATADIR}/known_hosts 0644 "$(_fileset_owner masterd)" || : |
91 |
_ensure_file ${DATADIR}/rapi.pem 0440 "$(_fileset_owner rapi)" || : |
92 |
_ensure_file ${DATADIR}/rapi/users 0640 "$(_fileset_owner rapi)" || : |
93 |
_ensure_file ${DATADIR}/server.pem 0440 "$(_fileset_owner masterd)" || : |
94 |
_ensure_file ${DATADIR}/queue/serial 0600 "$(_fileset_owner masterd)" || : |
95 |
|
96 |
# To not change the utils.LockFile object |
97 |
touch ${DATADIR}/queue/lock |
98 |
_ensure_file ${DATADIR}/queue/lock 0600 "$(_fileset_owner masterd)" |
99 |
|
100 |
if ! [[ -z "${full_run}" ]]; then |
101 |
local queue_owner="$(_fileset_owner masterd)" |
102 |
local ssconf_owner="$(_fileset_owner noded)" |
103 |
|
104 |
_gather_files ${DATADIR}/queue 0600 @GNTMASTERUSER@ @GNTMASTERDGROUP@ | \ |
105 |
while read path; do |
106 |
_ensure_file "$path" 0600 "$queue_owner" |
107 |
done |
108 |
|
109 |
_gather_files ${DATADIR} 0600 root @GNTMASTERDGROUP@ -name 'ssconf_*' | \ |
110 |
while read path; do |
111 |
_ensure_file "$path" 0444 "$ssconf_owner" |
112 |
done |
113 |
fi |
114 |
} |
115 |
|
116 |
_ensure_rundir() { |
117 |
_ensure_dir ${GNTRUNDIR} 0775 "$(_fileset_owner daemons)" |
118 |
_ensure_dir ${GNTRUNDIR}/socket 0750 "$(_fileset_owner daemons)" |
119 |
_ensure_dir ${GNTRUNDIR}/bdev-cache 0755 "$(_fileset_owner noded)" |
120 |
_ensure_dir ${GNTRUNDIR}/instance-disks 0755 "$(_fileset_owner noded)" |
121 |
_ensure_dir ${GNTRUNDIR}/crypto 0700 "$(_fileset_owner noded)" |
122 |
_ensure_dir ${GNTRUNDIR}/import-export 0755 "$(_fileset_owner noded)" |
123 |
|
124 |
# We ignore this file if it don't exists (not yet start up) |
125 |
_ensure_file ${GNTRUNDIR}/socket/ganeti-master 0770 \ |
126 |
"$(_fileset_owner daemons)" || : |
127 |
} |
128 |
|
129 |
_ensure_logdir() { |
130 |
_ensure_dir ${GNTLOGDIR} 0770 "$(_fileset_owner daemons)" |
131 |
_ensure_dir ${GNTLOGDIR}/os 0750 "$(_fileset_owner daemons)" |
132 |
|
133 |
# We ignore these files if they don't exists (incomplete setup) |
134 |
_ensure_file ${GNTLOGDIR}/master-daemon.log 0600 "$(_fileset_owner masterd)" || : |
135 |
_ensure_file ${GNTLOGDIR}/conf-daemon.log 0600 "$(_fileset_owner confd)" || : |
136 |
_ensure_file ${GNTLOGDIR}/node-daemon.log 0600 "$(_fileset_owner noded)" || : |
137 |
_ensure_file ${GNTLOGDIR}/rapi-daemon.log 0600 "$(_fileset_owner rapi)" || : |
138 |
} |
139 |
|
140 |
_ensure_lockdir() { |
141 |
_ensure_dir ${LOCKDIR} 1777 "" |
142 |
} |
143 |
|
144 |
_operate_while_hold() { |
145 |
local fn=$1 |
146 |
local path=$2 |
147 |
shift 2 |
148 |
|
149 |
(cd ${path}; |
150 |
${fn} "$@") |
151 |
} |
152 |
|
153 |
main() { |
154 |
local full_run |
155 |
|
156 |
while getopts "f" OPTION; do |
157 |
case ${OPTION} in |
158 |
f) full_run=1 ;; |
159 |
esac |
160 |
done |
161 |
|
162 |
_operate_while_hold "_ensure_datadir" ${DATADIR} ${full_run} |
163 |
_operate_while_hold "_ensure_rundir" ${RUNDIR} |
164 |
_operate_while_hold "_ensure_logdir" ${LOGDIR} |
165 |
_operate_while_hold "_ensure_lockdir" @LOCALSTATEDIR@ |
166 |
} |
167 |
|
168 |
main "$@" |