Revision 0c39d5eb

b/.gitignore
38 38

  
39 39
# daemons
40 40
/daemons/daemon-util
41
/daemons/ensure-dirs
42 41
/daemons/ganeti-cleaner
43 42
/daemons/ganeti-confd
44 43
/daemons/ganeti-masterd
b/Makefile.am
125 125
	epydoc.conf \
126 126
	autotools/replace_vars.sed \
127 127
	daemons/daemon-util \
128
	daemons/ensure-dirs \
129 128
	daemons/ganeti-cleaner \
130 129
	devel/upload \
131 130
	doc/examples/bash_completion \
......
484 483

  
485 484
pkglib_SCRIPTS = \
486 485
	daemons/daemon-util \
487
	daemons/ensure-dirs \
488 486
	tools/kvm-ifup \
489 487
	$(pkglib_python_scripts)
490 488

  
......
507 505
	autotools/testrunner \
508 506
	$(RUN_IN_TEMPDIR) \
509 507
	daemons/daemon-util.in \
510
	daemons/ensure-dirs.in \
511 508
	daemons/ganeti-cleaner.in \
512 509
	$(pkglib_python_scripts) \
513 510
	devel/upload.in \
/dev/null
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 "$@"

Also available in: Unified diff