## root / doc / hooks.rst @ 1e82bc80

History | View | Annotate | Download (13.5 kB)

1 | 4d6443f4 | Iustin Pop | Ganeti customisation using hooks |
---|---|---|---|

2 | 4d6443f4 | Iustin Pop | ================================ |

3 | 4d6443f4 | Iustin Pop | |

4 | 4d6443f4 | Iustin Pop | Documents ganeti version 2.0 |

5 | 4d6443f4 | Iustin Pop | |

6 | 4d6443f4 | Iustin Pop | .. contents:: |

7 | 4d6443f4 | Iustin Pop | |

8 | 4d6443f4 | Iustin Pop | Introduction |

9 | 4d6443f4 | Iustin Pop | ------------ |

10 | 4d6443f4 | Iustin Pop | |

11 | 4d6443f4 | Iustin Pop | |

12 | 4d6443f4 | Iustin Pop | In order to allow customisation of operations, ganeti runs scripts |

13 | 4d6443f4 | Iustin Pop | under ``/etc/ganeti/hooks`` based on certain rules. |

14 | 4d6443f4 | Iustin Pop | |

15 | 4d6443f4 | Iustin Pop | |

16 | 4d6443f4 | Iustin Pop | This is similar to the ``/etc/network/`` structure present in Debian |

17 | 4d6443f4 | Iustin Pop | for network interface handling. |

18 | 4d6443f4 | Iustin Pop | |

19 | 4d6443f4 | Iustin Pop | Organisation |

20 | 4d6443f4 | Iustin Pop | ------------ |

21 | 4d6443f4 | Iustin Pop | |

22 | 4d6443f4 | Iustin Pop | For every operation, two sets of scripts are run: |

23 | 4d6443f4 | Iustin Pop | |

24 | 4d6443f4 | Iustin Pop | - pre phase (for authorization/checking) |

25 | 4d6443f4 | Iustin Pop | - post phase (for logging) |

26 | 4d6443f4 | Iustin Pop | |

27 | 4d6443f4 | Iustin Pop | Also, for each operation, the scripts are run on one or more nodes, |

28 | 4d6443f4 | Iustin Pop | depending on the operation type. |

29 | 4d6443f4 | Iustin Pop | |

30 | 4d6443f4 | Iustin Pop | Note that, even though we call them scripts, we are actually talking |

31 | 4d6443f4 | Iustin Pop | about any executable. |

32 | 4d6443f4 | Iustin Pop | |

33 | 4d6443f4 | Iustin Pop | *pre* scripts |

34 | 4d6443f4 | Iustin Pop | ~~~~~~~~~~~~~ |

35 | 4d6443f4 | Iustin Pop | |

36 | 4d6443f4 | Iustin Pop | The *pre* scripts have a definite target: to check that the operation |

37 | 4d6443f4 | Iustin Pop | is allowed given the site-specific constraints. You could have, for |

38 | 4d6443f4 | Iustin Pop | example, a rule that says every new instance is required to exists in |

39 | 4d6443f4 | Iustin Pop | a database; to implement this, you could write a script that checks |

40 | 4d6443f4 | Iustin Pop | the new instance parameters against your database. |

41 | 4d6443f4 | Iustin Pop | |

42 | 4d6443f4 | Iustin Pop | The objective of these scripts should be their return code (zero or |

43 | 4d6443f4 | Iustin Pop | non-zero for success and failure). However, if they modify the |

44 | 4d6443f4 | Iustin Pop | environment in any way, they should be idempotent, as failed |

45 | 4d6443f4 | Iustin Pop | executions could be restarted and thus the script(s) run again with |

46 | 4d6443f4 | Iustin Pop | exactly the same parameters. |

47 | 4d6443f4 | Iustin Pop | |

48 | 4d6443f4 | Iustin Pop | Note that if a node is unreachable at the time a hooks is run, this |

49 | 4d6443f4 | Iustin Pop | will not be interpreted as a deny for the execution. In other words, |

50 | 4d6443f4 | Iustin Pop | only an actual error returned from a script will cause abort, and not |

51 | 4d6443f4 | Iustin Pop | an unreachable node. |

52 | 4d6443f4 | Iustin Pop | |

53 | 4d6443f4 | Iustin Pop | Therefore, if you want to guarantee that a hook script is run and |

54 | 4d6443f4 | Iustin Pop | denies an action, it's best to put it on the master node. |

55 | 4d6443f4 | Iustin Pop | |

56 | 4d6443f4 | Iustin Pop | *post* scripts |

57 | 4d6443f4 | Iustin Pop | ~~~~~~~~~~~~~~ |

58 | 4d6443f4 | Iustin Pop | |

59 | 4d6443f4 | Iustin Pop | These scripts should do whatever you need as a reaction to the |

60 | 4d6443f4 | Iustin Pop | completion of an operation. Their return code is not checked (but |

61 | 4d6443f4 | Iustin Pop | logged), and they should not depend on the fact that the *pre* scripts |

62 | 4d6443f4 | Iustin Pop | have been run. |

63 | 4d6443f4 | Iustin Pop | |

64 | 4d6443f4 | Iustin Pop | Naming |

65 | 4d6443f4 | Iustin Pop | ~~~~~~ |

66 | 4d6443f4 | Iustin Pop | |

67 | 4d6443f4 | Iustin Pop | The allowed names for the scripts consist of (similar to *run-parts* ) |

68 | 4d6443f4 | Iustin Pop | upper and lower case, digits, underscores and hyphens. In other words, |

69 | 4d6443f4 | Iustin Pop | the regexp ``^[a-zA-Z0-9_-]+$``. Also, non-executable scripts will be |

70 | 4d6443f4 | Iustin Pop | ignored. |

71 | 4d6443f4 | Iustin Pop | |

72 | 4d6443f4 | Iustin Pop | |

73 | 4d6443f4 | Iustin Pop | Order of execution |

74 | 4d6443f4 | Iustin Pop | ~~~~~~~~~~~~~~~~~~ |

75 | 4d6443f4 | Iustin Pop | |

76 | 4d6443f4 | Iustin Pop | On a single node, the scripts in a directory are run in lexicographic |

77 | 4d6443f4 | Iustin Pop | order (more exactly, the python string comparison order). It is |

78 | 4d6443f4 | Iustin Pop | advisable to implement the usual *NN-name* convention where *NN* is a |

79 | 4d6443f4 | Iustin Pop | two digit number. |

80 | 4d6443f4 | Iustin Pop | |

81 | 4d6443f4 | Iustin Pop | For an operation whose hooks are run on multiple nodes, there is no |

82 | 4d6443f4 | Iustin Pop | specific ordering of nodes with regard to hooks execution; you should |

83 | 4d6443f4 | Iustin Pop | assume that the scripts are run in parallel on the target nodes |

84 | 4d6443f4 | Iustin Pop | (keeping on each node the above specified ordering). If you need any |

85 | 4d6443f4 | Iustin Pop | kind of inter-node synchronisation, you have to implement it yourself |

86 | 4d6443f4 | Iustin Pop | in the scripts. |

87 | 4d6443f4 | Iustin Pop | |

88 | 4d6443f4 | Iustin Pop | Execution environment |

89 | 4d6443f4 | Iustin Pop | ~~~~~~~~~~~~~~~~~~~~~ |

90 | 4d6443f4 | Iustin Pop | |

91 | 4d6443f4 | Iustin Pop | The scripts will be run as follows: |

92 | 4d6443f4 | Iustin Pop | |

93 | 4d6443f4 | Iustin Pop | - no command line arguments |

94 | 4d6443f4 | Iustin Pop | |

95 | 4d6443f4 | Iustin Pop | - no controlling *tty* |

96 | 4d6443f4 | Iustin Pop | |

97 | 4d6443f4 | Iustin Pop | - stdin is actually */dev/null* |

98 | 4d6443f4 | Iustin Pop | |

99 | 4d6443f4 | Iustin Pop | - stdout and stderr are directed to files |

100 | 4d6443f4 | Iustin Pop | |

101 | 4d6443f4 | Iustin Pop | - PATH is reset to ``/sbin:/bin:/usr/sbin:/usr/bin`` |

102 | 4d6443f4 | Iustin Pop | |

103 | 4d6443f4 | Iustin Pop | - the environment is cleared, and only ganeti-specific variables will |

104 | 4d6443f4 | Iustin Pop | be left |

105 | 4d6443f4 | Iustin Pop | |

106 | 4d6443f4 | Iustin Pop | |

107 | 5bbd3f7f | Michael Hanselmann | All information about the cluster is passed using environment |

108 | 4d6443f4 | Iustin Pop | variables. Different operations will have sligthly different |

109 | 4d6443f4 | Iustin Pop | environments, but most of the variables are common. |

110 | 4d6443f4 | Iustin Pop | |

111 | 4d6443f4 | Iustin Pop | Operation list |

112 | 4d6443f4 | Iustin Pop | -------------- |

113 | 4d6443f4 | Iustin Pop | |

114 | 4d6443f4 | Iustin Pop | Node operations |

115 | 4d6443f4 | Iustin Pop | ~~~~~~~~~~~~~~~ |

116 | 4d6443f4 | Iustin Pop | |

117 | 4d6443f4 | Iustin Pop | OP_ADD_NODE |

118 | 4d6443f4 | Iustin Pop | +++++++++++ |

119 | 4d6443f4 | Iustin Pop | |

120 | 4d6443f4 | Iustin Pop | Adds a node to the cluster. |

121 | 4d6443f4 | Iustin Pop | |

122 | 4d6443f4 | Iustin Pop | :directory: node-add |

123 | 4d6443f4 | Iustin Pop | :env. vars: NODE_NAME, NODE_PIP, NODE_SIP |

124 | 4d6443f4 | Iustin Pop | :pre-execution: all existing nodes |

125 | 4d6443f4 | Iustin Pop | :post-execution: all nodes plus the new node |

126 | 4d6443f4 | Iustin Pop | |

127 | 4d6443f4 | Iustin Pop | |

128 | 4d6443f4 | Iustin Pop | OP_REMOVE_NODE |

129 | 4d6443f4 | Iustin Pop | ++++++++++++++ |

130 | 4d6443f4 | Iustin Pop | |

131 | 4d6443f4 | Iustin Pop | Removes a node from the cluster. |

132 | 4d6443f4 | Iustin Pop | |

133 | 4d6443f4 | Iustin Pop | :directory: node-remove |

134 | 4d6443f4 | Iustin Pop | :env. vars: NODE_NAME |

135 | 4d6443f4 | Iustin Pop | :pre-execution: all existing nodes except the removed node |

136 | 4d6443f4 | Iustin Pop | :post-execution: all existing nodes except the removed node |

137 | 4d6443f4 | Iustin Pop | |

138 | 4d6443f4 | Iustin Pop | OP_NODE_SET_PARAMS |

139 | 4d6443f4 | Iustin Pop | ++++++++++++++++++ |

140 | 4d6443f4 | Iustin Pop | |

141 | 4d6443f4 | Iustin Pop | Changes a node's parameters. |

142 | 4d6443f4 | Iustin Pop | |

143 | 4d6443f4 | Iustin Pop | :directory: node-modify |

144 | 4d6443f4 | Iustin Pop | :env. vars: MASTER_CANDIDATE, OFFLINE, DRAINED |

145 | 4d6443f4 | Iustin Pop | :pre-execution: master node, the target node |

146 | 4d6443f4 | Iustin Pop | :post-execution: master node, the target node |

147 | 4d6443f4 | Iustin Pop | |

148 | 7ffc5a86 | Michael Hanselmann | OP_NODE_EVACUATE |

149 | 7ffc5a86 | Michael Hanselmann | ++++++++++++++++ |

150 | 7ffc5a86 | Michael Hanselmann | |

151 | 7ffc5a86 | Michael Hanselmann | Relocate secondary instances from a node. |

152 | 7ffc5a86 | Michael Hanselmann | |

153 | 7ffc5a86 | Michael Hanselmann | :directory: node-evacuate |

154 | 7ffc5a86 | Michael Hanselmann | :env. vars: NEW_SECONDARY, NODE_NAME |

155 | 7ffc5a86 | Michael Hanselmann | :pre-execution: master node, target node |

156 | 7ffc5a86 | Michael Hanselmann | :post-execution: master node, target node |

157 | 7ffc5a86 | Michael Hanselmann | |

158 | 4d6443f4 | Iustin Pop | |

159 | 4d6443f4 | Iustin Pop | Instance operations |

160 | 4d6443f4 | Iustin Pop | ~~~~~~~~~~~~~~~~~~~ |

161 | 4d6443f4 | Iustin Pop | |

162 | 4d6443f4 | Iustin Pop | All instance operations take at least the following variables: |

163 | 4d6443f4 | Iustin Pop | INSTANCE_NAME, INSTANCE_PRIMARY, INSTANCE_SECONDARIES, |

164 | 4d6443f4 | Iustin Pop | INSTANCE_OS_TYPE, INSTANCE_DISK_TEMPLATE, INSTANCE_MEMORY, |

165 | 4d6443f4 | Iustin Pop | INSTANCE_DISK_SIZES, INSTANCE_VCPUS, INSTANCE_NIC_COUNT, |

166 | 4d6443f4 | Iustin Pop | INSTANCE_NICn_IP, INSTANCE_NICn_BRIDGE, INSTANCE_NICn_MAC, |

167 | 4d6443f4 | Iustin Pop | INSTANCE_DISK_COUNT, INSTANCE_DISKn_SIZE, INSTANCE_DISKn_MODE. |

168 | 4d6443f4 | Iustin Pop | |

169 | 4d6443f4 | Iustin Pop | The INSTANCE_NICn_* and INSTANCE_DISKn_* variables represent the |

170 | 4d6443f4 | Iustin Pop | properties of the *n* -th NIC and disk, and are zero-indexed. |

171 | 4d6443f4 | Iustin Pop | |

172 | 4d6443f4 | Iustin Pop | |

173 | 4d6443f4 | Iustin Pop | OP_INSTANCE_ADD |

174 | 4d6443f4 | Iustin Pop | +++++++++++++++ |

175 | 4d6443f4 | Iustin Pop | |

176 | 4d6443f4 | Iustin Pop | Creates a new instance. |

177 | 4d6443f4 | Iustin Pop | |

178 | 4d6443f4 | Iustin Pop | :directory: instance-add |

179 | 4d6443f4 | Iustin Pop | :env. vars: ADD_MODE, SRC_NODE, SRC_PATH, SRC_IMAGES |

180 | 4d6443f4 | Iustin Pop | :pre-execution: master node, primary and secondary nodes |

181 | 4d6443f4 | Iustin Pop | :post-execution: master node, primary and secondary nodes |

182 | 4d6443f4 | Iustin Pop | |

183 | 4d6443f4 | Iustin Pop | OP_INSTANCE_REINSTALL |

184 | 4d6443f4 | Iustin Pop | +++++++++++++++++++++ |

185 | 4d6443f4 | Iustin Pop | |

186 | 4d6443f4 | Iustin Pop | Reinstalls an instance. |

187 | 4d6443f4 | Iustin Pop | |

188 | 4d6443f4 | Iustin Pop | :directory: instance-reinstall |

189 | 4d6443f4 | Iustin Pop | :env. vars: only the standard instance vars |

190 | 4d6443f4 | Iustin Pop | :pre-execution: master node, primary and secondary nodes |

191 | 4d6443f4 | Iustin Pop | :post-execution: master node, primary and secondary nodes |

192 | 4d6443f4 | Iustin Pop | |

193 | 4d6443f4 | Iustin Pop | OP_BACKUP_EXPORT |

194 | 4d6443f4 | Iustin Pop | ++++++++++++++++ |

195 | 4d6443f4 | Iustin Pop | |

196 | 4d6443f4 | Iustin Pop | Exports the instance. |

197 | 4d6443f4 | Iustin Pop | |

198 | 4d6443f4 | Iustin Pop | |

199 | 4d6443f4 | Iustin Pop | :directory: instance-export |

200 | 4d6443f4 | Iustin Pop | :env. vars: EXPORT_NODE, EXPORT_DO_SHUTDOWN |

201 | 4d6443f4 | Iustin Pop | :pre-execution: master node, primary and secondary nodes |

202 | 4d6443f4 | Iustin Pop | :post-execution: master node, primary and secondary nodes |

203 | 4d6443f4 | Iustin Pop | |

204 | 4d6443f4 | Iustin Pop | OP_INSTANCE_START |

205 | 4d6443f4 | Iustin Pop | +++++++++++++++++ |

206 | 4d6443f4 | Iustin Pop | |

207 | 4d6443f4 | Iustin Pop | Starts an instance. |

208 | 4d6443f4 | Iustin Pop | |

209 | 4d6443f4 | Iustin Pop | :directory: instance-start |

210 | 4d6443f4 | Iustin Pop | :env. vars: INSTANCE_NAME, INSTANCE_PRIMARY, INSTANCE_SECONDARIES, FORCE |

211 | 4d6443f4 | Iustin Pop | :pre-execution: master node, primary and secondary nodes |

212 | 4d6443f4 | Iustin Pop | :post-execution: master node, primary and secondary nodes |

213 | 4d6443f4 | Iustin Pop | |

214 | 4d6443f4 | Iustin Pop | OP_INSTANCE_SHUTDOWN |

215 | 4d6443f4 | Iustin Pop | ++++++++++++++++++++ |

216 | 4d6443f4 | Iustin Pop | |

217 | 4d6443f4 | Iustin Pop | Stops an instance. |

218 | 4d6443f4 | Iustin Pop | |

219 | 4d6443f4 | Iustin Pop | :directory: instance-shutdown |

220 | 4d6443f4 | Iustin Pop | :env. vars: INSTANCE_NAME, INSTANCE_PRIMARY, INSTANCE_SECONDARIES |

221 | 4d6443f4 | Iustin Pop | :pre-execution: master node, primary and secondary nodes |

222 | 4d6443f4 | Iustin Pop | :post-execution: master node, primary and secondary nodes |

223 | 4d6443f4 | Iustin Pop | |

224 | 4d6443f4 | Iustin Pop | OP_INSTANCE_REBOOT |

225 | 4d6443f4 | Iustin Pop | ++++++++++++++++++ |

226 | 4d6443f4 | Iustin Pop | |

227 | 4d6443f4 | Iustin Pop | Reboots an instance. |

228 | 4d6443f4 | Iustin Pop | |

229 | 4d6443f4 | Iustin Pop | :directory: instance-reboot |

230 | 4d6443f4 | Iustin Pop | :env. vars: IGNORE_SECONDARIES, REBOOT_TYPE |

231 | 4d6443f4 | Iustin Pop | :pre-execution: master node, primary and secondary nodes |

232 | 4d6443f4 | Iustin Pop | :post-execution: master node, primary and secondary nodes |

233 | 4d6443f4 | Iustin Pop | |

234 | 4d6443f4 | Iustin Pop | OP_INSTANCE_MODIFY |

235 | 4d6443f4 | Iustin Pop | ++++++++++++++++++ |

236 | 4d6443f4 | Iustin Pop | |

237 | 4d6443f4 | Iustin Pop | Modifies the instance parameters. |

238 | 4d6443f4 | Iustin Pop | |

239 | 4d6443f4 | Iustin Pop | :directory: instance-modify |

240 | 4d6443f4 | Iustin Pop | :env. vars: INSTANCE_NAME, MEM_SIZE, VCPUS, INSTANCE_IP |

241 | 4d6443f4 | Iustin Pop | :pre-execution: master node, primary and secondary nodes |

242 | 4d6443f4 | Iustin Pop | :post-execution: master node, primary and secondary nodes |

243 | 4d6443f4 | Iustin Pop | |

244 | 4d6443f4 | Iustin Pop | OP_INSTANCE_FAILOVER |

245 | 4d6443f4 | Iustin Pop | ++++++++++++++++++++ |

246 | 4d6443f4 | Iustin Pop | |

247 | 4d6443f4 | Iustin Pop | Failovers an instance. |

248 | 4d6443f4 | Iustin Pop | |

249 | 4d6443f4 | Iustin Pop | :directory: instance-failover |

250 | 4d6443f4 | Iustin Pop | :env. vars: IGNORE_CONSISTENCY |

251 | 4d6443f4 | Iustin Pop | :pre-execution: master node, secondary node |

252 | 4d6443f4 | Iustin Pop | :post-execution: master node, secondary node |

253 | 4d6443f4 | Iustin Pop | |

254 | 4d6443f4 | Iustin Pop | OP_INSTANCE_MIGRATE |

255 | 4d6443f4 | Iustin Pop | ++++++++++++++++++++ |

256 | 4d6443f4 | Iustin Pop | |

257 | 4d6443f4 | Iustin Pop | Migrates an instance. |

258 | 4d6443f4 | Iustin Pop | |

259 | 4d6443f4 | Iustin Pop | :directory: instance-failover |

260 | 4d6443f4 | Iustin Pop | :env. vars: INSTANCE_MIGRATE_LIVE, INSTANCE_MIGRATE_CLEANUP |

261 | 4d6443f4 | Iustin Pop | :pre-execution: master node, secondary node |

262 | 4d6443f4 | Iustin Pop | :post-execution: master node, secondary node |

263 | 4d6443f4 | Iustin Pop | |

264 | 4d6443f4 | Iustin Pop | |

265 | 4d6443f4 | Iustin Pop | OP_INSTANCE_REMOVE |

266 | 4d6443f4 | Iustin Pop | ++++++++++++++++++ |

267 | 4d6443f4 | Iustin Pop | |

268 | 4d6443f4 | Iustin Pop | Remove an instance. |

269 | 4d6443f4 | Iustin Pop | |

270 | 4d6443f4 | Iustin Pop | :directory: instance-remove |

271 | 4d6443f4 | Iustin Pop | :env. vars: INSTANCE_NAME, INSTANCE_PRIMARY, INSTANCE_SECONDARIES |

272 | 4d6443f4 | Iustin Pop | :pre-execution: master node |

273 | 4d6443f4 | Iustin Pop | :post-execution: master node |

274 | 4d6443f4 | Iustin Pop | |

275 | 4d6443f4 | Iustin Pop | OP_INSTANCE_REPLACE_DISKS |

276 | 4d6443f4 | Iustin Pop | +++++++++++++++++++++++++ |

277 | 4d6443f4 | Iustin Pop | |

278 | 4d6443f4 | Iustin Pop | Replace an instance's disks. |

279 | 4d6443f4 | Iustin Pop | |

280 | 4d6443f4 | Iustin Pop | :directory: mirror-replace |

281 | 4d6443f4 | Iustin Pop | :env. vars: MODE, NEW_SECONDARY, OLD_SECONDARY |

282 | 4d6443f4 | Iustin Pop | :pre-execution: master node, primary and secondary nodes |

283 | 4d6443f4 | Iustin Pop | :post-execution: master node, primary and secondary nodes |

284 | 4d6443f4 | Iustin Pop | |

285 | 4d6443f4 | Iustin Pop | OP_INSTANCE_GROW_DISK |

286 | 4d6443f4 | Iustin Pop | +++++++++++++++++++++ |

287 | 4d6443f4 | Iustin Pop | |

288 | 4d6443f4 | Iustin Pop | Grows the disk of an instance. |

289 | 4d6443f4 | Iustin Pop | |

290 | 4d6443f4 | Iustin Pop | :directory: disk-grow |

291 | 4d6443f4 | Iustin Pop | :env. vars: DISK, AMOUNT |

292 | 4d6443f4 | Iustin Pop | :pre-execution: master node, primary node |

293 | 4d6443f4 | Iustin Pop | :post-execution: master node, primary node |

294 | 4d6443f4 | Iustin Pop | |

295 | 4d6443f4 | Iustin Pop | OP_INSTANCE_RENAME |

296 | 4d6443f4 | Iustin Pop | ++++++++++++++++++ |

297 | 4d6443f4 | Iustin Pop | |

298 | 4d6443f4 | Iustin Pop | Renames an instance. |

299 | 4d6443f4 | Iustin Pop | |

300 | 4d6443f4 | Iustin Pop | :directory: instance-rename |

301 | 4d6443f4 | Iustin Pop | :env. vars: INSTANCE_NEW_NAME |

302 | 4d6443f4 | Iustin Pop | :pre-execution: master node, primary and secondary nodes |

303 | 4d6443f4 | Iustin Pop | :post-execution: master node, primary and secondary nodes |

304 | 4d6443f4 | Iustin Pop | |

305 | 4d6443f4 | Iustin Pop | Cluster operations |

306 | 4d6443f4 | Iustin Pop | ~~~~~~~~~~~~~~~~~~ |

307 | 4d6443f4 | Iustin Pop | |

308 | 4d6443f4 | Iustin Pop | OP_CLUSTER_VERIFY |

309 | 4d6443f4 | Iustin Pop | +++++++++++++++++ |

310 | 4d6443f4 | Iustin Pop | |

311 | 4d6443f4 | Iustin Pop | Verifies the cluster status. This is a special LU with regard to |

312 | 4d6443f4 | Iustin Pop | hooks, as the result of the opcode will be combined with the result of |

313 | 4d6443f4 | Iustin Pop | post-execution hooks, in order to allow administrators to enhance the |

314 | 4d6443f4 | Iustin Pop | cluster verification procedure. |

315 | 4d6443f4 | Iustin Pop | |

316 | 4d6443f4 | Iustin Pop | :directory: cluster-verify |

317 | 35e994e9 | Iustin Pop | :env. vars: CLUSTER, MASTER, CLUSTER_TAGS, NODE_TAGS_<name> |

318 | 4d6443f4 | Iustin Pop | :pre-execution: none |

319 | 4d6443f4 | Iustin Pop | :post-execution: all nodes |

320 | 4d6443f4 | Iustin Pop | |

321 | 4d6443f4 | Iustin Pop | OP_CLUSTER_RENAME |

322 | 4d6443f4 | Iustin Pop | +++++++++++++++++ |

323 | 4d6443f4 | Iustin Pop | |

324 | 4d6443f4 | Iustin Pop | Renames the cluster. |

325 | 4d6443f4 | Iustin Pop | |

326 | 4d6443f4 | Iustin Pop | :directory: cluster-rename |

327 | 4d6443f4 | Iustin Pop | :env. vars: NEW_NAME |

328 | 4d6443f4 | Iustin Pop | :pre-execution: master-node |

329 | 4d6443f4 | Iustin Pop | :post-execution: master-node |

330 | 4d6443f4 | Iustin Pop | |

331 | 4d6443f4 | Iustin Pop | OP_CLUSTER_SET_PARAMS |

332 | 4d6443f4 | Iustin Pop | +++++++++++++++++++++ |

333 | 4d6443f4 | Iustin Pop | |

334 | 4d6443f4 | Iustin Pop | Modifies the cluster parameters. |

335 | 4d6443f4 | Iustin Pop | |

336 | 4d6443f4 | Iustin Pop | :directory: cluster-modify |

337 | 4d6443f4 | Iustin Pop | :env. vars: NEW_VG_NAME |

338 | 4d6443f4 | Iustin Pop | :pre-execution: master node |

339 | 4d6443f4 | Iustin Pop | :post-execution: master node |

340 | 4d6443f4 | Iustin Pop | |

341 | 4d6443f4 | Iustin Pop | |

342 | 4d6443f4 | Iustin Pop | Obsolete operations |

343 | 4d6443f4 | Iustin Pop | ~~~~~~~~~~~~~~~~~~~ |

344 | 4d6443f4 | Iustin Pop | |

345 | 4d6443f4 | Iustin Pop | The following operations are no longer present or don't execute hooks |

346 | 4d6443f4 | Iustin Pop | anymore in Ganeti 2.0: |

347 | 4d6443f4 | Iustin Pop | |

348 | 4d6443f4 | Iustin Pop | - OP_INIT_CLUSTER |

349 | 4d6443f4 | Iustin Pop | - OP_MASTER_FAILOVER |

350 | 4d6443f4 | Iustin Pop | - OP_INSTANCE_ADD_MDDRBD |

351 | 4d6443f4 | Iustin Pop | - OP_INSTANCE_REMOVE_MDDRBD |

352 | 4d6443f4 | Iustin Pop | |

353 | 4d6443f4 | Iustin Pop | |

354 | 4d6443f4 | Iustin Pop | Environment variables |

355 | 4d6443f4 | Iustin Pop | --------------------- |

356 | 4d6443f4 | Iustin Pop | |

357 | 4d6443f4 | Iustin Pop | Note that all variables listed here are actually prefixed with |

358 | 4d6443f4 | Iustin Pop | *GANETI_* in order to provide a clear namespace. |

359 | 4d6443f4 | Iustin Pop | |

360 | 4d6443f4 | Iustin Pop | Common variables |

361 | 4d6443f4 | Iustin Pop | ~~~~~~~~~~~~~~~~ |

362 | 4d6443f4 | Iustin Pop | |

363 | 4d6443f4 | Iustin Pop | This is the list of environment variables supported by all operations: |

364 | 4d6443f4 | Iustin Pop | |

365 | 4d6443f4 | Iustin Pop | HOOKS_VERSION |

366 | 4d6443f4 | Iustin Pop | Documents the hooks interface version. In case this doesnt match |

367 | 4d6443f4 | Iustin Pop | what the script expects, it should not run. The documents conforms |

368 | 4d6443f4 | Iustin Pop | to the version 2. |

369 | 4d6443f4 | Iustin Pop | |

370 | 4d6443f4 | Iustin Pop | HOOKS_PHASE |

371 | 4d6443f4 | Iustin Pop | One of *PRE* or *POST* denoting which phase are we in. |

372 | 4d6443f4 | Iustin Pop | |

373 | 4d6443f4 | Iustin Pop | CLUSTER |

374 | 4d6443f4 | Iustin Pop | The cluster name. |

375 | 4d6443f4 | Iustin Pop | |

376 | 4d6443f4 | Iustin Pop | MASTER |

377 | 4d6443f4 | Iustin Pop | The master node. |

378 | 4d6443f4 | Iustin Pop | |

379 | 4d6443f4 | Iustin Pop | OP_CODE |

380 | 4d6443f4 | Iustin Pop | One of the *OP_* values from the list of operations. |

381 | 4d6443f4 | Iustin Pop | |

382 | 4d6443f4 | Iustin Pop | OBJECT_TYPE |

383 | 4d6443f4 | Iustin Pop | One of ``INSTANCE``, ``NODE``, ``CLUSTER``. |

384 | 4d6443f4 | Iustin Pop | |

385 | 4d6443f4 | Iustin Pop | DATA_DIR |

386 | 4d6443f4 | Iustin Pop | The path to the Ganeti configuration directory (to read, for |

387 | 4d6443f4 | Iustin Pop | example, the *ssconf* files). |

388 | 4d6443f4 | Iustin Pop | |

389 | 4d6443f4 | Iustin Pop | |

390 | 4d6443f4 | Iustin Pop | Specialised variables |

391 | 4d6443f4 | Iustin Pop | ~~~~~~~~~~~~~~~~~~~~~ |

392 | 4d6443f4 | Iustin Pop | |

393 | 4d6443f4 | Iustin Pop | This is the list of variables which are specific to one or more |

394 | 4d6443f4 | Iustin Pop | operations. |

395 | 4d6443f4 | Iustin Pop | |

396 | 4d6443f4 | Iustin Pop | INSTANCE_NAME |

397 | 4d6443f4 | Iustin Pop | The name of the instance which is the target of the operation. |

398 | 4d6443f4 | Iustin Pop | |

399 | 4d6443f4 | Iustin Pop | INSTANCE_DISK_TEMPLATE |

400 | 4d6443f4 | Iustin Pop | The disk type for the instance. |

401 | 4d6443f4 | Iustin Pop | |

402 | 4d6443f4 | Iustin Pop | INSTANCE_DISK_COUNT |

403 | 4d6443f4 | Iustin Pop | The number of disks for the instance. |

404 | 4d6443f4 | Iustin Pop | |

405 | 4d6443f4 | Iustin Pop | INSTANCE_DISKn_SIZE |

406 | 4d6443f4 | Iustin Pop | The size of disk *n* for the instance. |

407 | 4d6443f4 | Iustin Pop | |

408 | 4d6443f4 | Iustin Pop | INSTANCE_DISKn_MODE |

409 | 4d6443f4 | Iustin Pop | Either *rw* for a read-write disk or *ro* for a read-only one. |

410 | 4d6443f4 | Iustin Pop | |

411 | 4d6443f4 | Iustin Pop | INSTANCE_NIC_COUNT |

412 | 4d6443f4 | Iustin Pop | The number of NICs for the instance. |

413 | 4d6443f4 | Iustin Pop | |

414 | 4d6443f4 | Iustin Pop | INSTANCE_NICn_BRIDGE |

415 | 4d6443f4 | Iustin Pop | The bridge to which the *n* -th NIC of the instance is attached. |

416 | 4d6443f4 | Iustin Pop | |

417 | 4d6443f4 | Iustin Pop | INSTANCE_NICn_IP |

418 | 4d6443f4 | Iustin Pop | The IP (if any) of the *n* -th NIC of the instance. |

419 | 4d6443f4 | Iustin Pop | |

420 | 4d6443f4 | Iustin Pop | INSTANCE_NICn_MAC |

421 | 4d6443f4 | Iustin Pop | The MAC address of the *n* -th NIC of the instance. |

422 | 4d6443f4 | Iustin Pop | |

423 | 4d6443f4 | Iustin Pop | INSTANCE_OS_TYPE |

424 | 4d6443f4 | Iustin Pop | The name of the instance OS. |

425 | 4d6443f4 | Iustin Pop | |

426 | 4d6443f4 | Iustin Pop | INSTANCE_PRIMARY |

427 | 4d6443f4 | Iustin Pop | The name of the node which is the primary for the instance. |

428 | 4d6443f4 | Iustin Pop | |

429 | 4d6443f4 | Iustin Pop | INSTANCE_SECONDARIES |

430 | 4d6443f4 | Iustin Pop | Space-separated list of secondary nodes for the instance. |

431 | 4d6443f4 | Iustin Pop | |

432 | 4d6443f4 | Iustin Pop | INSTANCE_MEMORY |

433 | 4d6443f4 | Iustin Pop | The memory size (in MiBs) of the instance. |

434 | 4d6443f4 | Iustin Pop | |

435 | 4d6443f4 | Iustin Pop | INSTANCE_VCPUS |

436 | 4d6443f4 | Iustin Pop | The number of virtual CPUs for the instance. |

437 | 4d6443f4 | Iustin Pop | |

438 | 4d6443f4 | Iustin Pop | INSTANCE_STATUS |

439 | 4d6443f4 | Iustin Pop | The run status of the instance. |

440 | 4d6443f4 | Iustin Pop | |

441 | 4d6443f4 | Iustin Pop | NODE_NAME |

442 | 4d6443f4 | Iustin Pop | The target node of this operation (not the node on which the hook |

443 | 4d6443f4 | Iustin Pop | runs). |

444 | 4d6443f4 | Iustin Pop | |

445 | 4d6443f4 | Iustin Pop | NODE_PIP |

446 | 4d6443f4 | Iustin Pop | The primary IP of the target node (the one over which inter-node |

447 | 4d6443f4 | Iustin Pop | communication is done). |

448 | 4d6443f4 | Iustin Pop | |

449 | 4d6443f4 | Iustin Pop | NODE_SIP |

450 | 4d6443f4 | Iustin Pop | The secondary IP of the target node (the one over which drbd |

451 | 4d6443f4 | Iustin Pop | replication is done). This can be equal to the primary ip, in case |

452 | 4d6443f4 | Iustin Pop | the cluster is not dual-homed. |

453 | 4d6443f4 | Iustin Pop | |

454 | 4d6443f4 | Iustin Pop | FORCE |

455 | 4d6443f4 | Iustin Pop | This is provided by some operations when the user gave this flag. |

456 | 4d6443f4 | Iustin Pop | |

457 | 4d6443f4 | Iustin Pop | IGNORE_CONSISTENCY |

458 | 4d6443f4 | Iustin Pop | The user has specified this flag. It is used when failing over |

459 | 4d6443f4 | Iustin Pop | instances in case the primary node is down. |

460 | 4d6443f4 | Iustin Pop | |

461 | 4d6443f4 | Iustin Pop | ADD_MODE |

462 | 4d6443f4 | Iustin Pop | The mode of the instance create: either *create* for create from |

463 | 4d6443f4 | Iustin Pop | scratch or *import* for restoring from an exported image. |

464 | 4d6443f4 | Iustin Pop | |

465 | 4d6443f4 | Iustin Pop | SRC_NODE, SRC_PATH, SRC_IMAGE |

466 | 4d6443f4 | Iustin Pop | In case the instance has been added by import, these variables are |

467 | 4d6443f4 | Iustin Pop | defined and point to the source node, source path (the directory |

468 | 4d6443f4 | Iustin Pop | containing the image and the config file) and the source disk image |

469 | 4d6443f4 | Iustin Pop | file. |

470 | 4d6443f4 | Iustin Pop | |

471 | 4d6443f4 | Iustin Pop | NEW_SECONDARY |

472 | 4d6443f4 | Iustin Pop | The name of the node on which the new mirror component is being |

473 | 4d6443f4 | Iustin Pop | added. This can be the name of the current secondary, if the new |

474 | 4d6443f4 | Iustin Pop | mirror is on the same secondary. |

475 | 4d6443f4 | Iustin Pop | |

476 | 4d6443f4 | Iustin Pop | OLD_SECONDARY |

477 | 4d6443f4 | Iustin Pop | The name of the old secondary in the replace-disks command Note that |

478 | 4d6443f4 | Iustin Pop | this can be equal to the new secondary if the secondary node hasn't |

479 | 4d6443f4 | Iustin Pop | actually changed. |

480 | 4d6443f4 | Iustin Pop | |

481 | 4d6443f4 | Iustin Pop | EXPORT_NODE |

482 | 4d6443f4 | Iustin Pop | The node on which the exported image of the instance was done. |

483 | 4d6443f4 | Iustin Pop | |

484 | 4d6443f4 | Iustin Pop | EXPORT_DO_SHUTDOWN |

485 | 4d6443f4 | Iustin Pop | This variable tells if the instance has been shutdown or not while |

486 | 4d6443f4 | Iustin Pop | doing the export. In the "was shutdown" case, it's likely that the |

487 | 4d6443f4 | Iustin Pop | filesystem is consistent, whereas in the "did not shutdown" case, |

488 | 4d6443f4 | Iustin Pop | the filesystem would need a check (journal replay or full fsck) in |

489 | 4d6443f4 | Iustin Pop | order to guarantee consistency. |

490 | 4d6443f4 | Iustin Pop | |

491 | 35e994e9 | Iustin Pop | CLUSTER_TAGS |

492 | 35e994e9 | Iustin Pop | The list of cluster tags, space separated. |

493 | 35e994e9 | Iustin Pop | |

494 | 35e994e9 | Iustin Pop | NODE_TAGS_<name> |

495 | 35e994e9 | Iustin Pop | The list of tags for node *<name>*, space separated. |

496 | 35e994e9 | Iustin Pop | |

497 | 4d6443f4 | Iustin Pop | Examples |

498 | 4d6443f4 | Iustin Pop | -------- |

499 | 4d6443f4 | Iustin Pop | |

500 | 4d6443f4 | Iustin Pop | The startup of an instance will pass this environment to the hook |

501 | 4d6443f4 | Iustin Pop | script:: |

502 | 4d6443f4 | Iustin Pop | |

503 | 4d6443f4 | Iustin Pop | GANETI_CLUSTER=cluster1.example.com |

504 | 4d6443f4 | Iustin Pop | GANETI_DATA_DIR=/var/lib/ganeti |

505 | 4d6443f4 | Iustin Pop | GANETI_FORCE=False |

506 | 4d6443f4 | Iustin Pop | GANETI_HOOKS_PATH=instance-start |

507 | 4d6443f4 | Iustin Pop | GANETI_HOOKS_PHASE=post |

508 | 4d6443f4 | Iustin Pop | GANETI_HOOKS_VERSION=2 |

509 | 4d6443f4 | Iustin Pop | GANETI_INSTANCE_DISK0_MODE=rw |

510 | 4d6443f4 | Iustin Pop | GANETI_INSTANCE_DISK0_SIZE=128 |

511 | 4d6443f4 | Iustin Pop | GANETI_INSTANCE_DISK_COUNT=1 |

512 | 4d6443f4 | Iustin Pop | GANETI_INSTANCE_DISK_TEMPLATE=drbd |

513 | 4d6443f4 | Iustin Pop | GANETI_INSTANCE_MEMORY=128 |

514 | 4d6443f4 | Iustin Pop | GANETI_INSTANCE_NAME=instance2.example.com |

515 | 4d6443f4 | Iustin Pop | GANETI_INSTANCE_NIC0_BRIDGE=xen-br0 |

516 | 4d6443f4 | Iustin Pop | GANETI_INSTANCE_NIC0_IP= |

517 | 4d6443f4 | Iustin Pop | GANETI_INSTANCE_NIC0_MAC=aa:00:00:a5:91:58 |

518 | 4d6443f4 | Iustin Pop | GANETI_INSTANCE_NIC_COUNT=1 |

519 | 4d6443f4 | Iustin Pop | GANETI_INSTANCE_OS_TYPE=debootstrap |

520 | 4d6443f4 | Iustin Pop | GANETI_INSTANCE_PRIMARY=node3.example.com |

521 | 4d6443f4 | Iustin Pop | GANETI_INSTANCE_SECONDARIES=node5.example.com |

522 | 4d6443f4 | Iustin Pop | GANETI_INSTANCE_STATUS=down |

523 | 4d6443f4 | Iustin Pop | GANETI_INSTANCE_VCPUS=1 |

524 | 4d6443f4 | Iustin Pop | GANETI_MASTER=node1.example.com |

525 | 4d6443f4 | Iustin Pop | GANETI_OBJECT_TYPE=INSTANCE |

526 | 4d6443f4 | Iustin Pop | GANETI_OP_CODE=OP_INSTANCE_STARTUP |

527 | 4d6443f4 | Iustin Pop | GANETI_OP_TARGET=instance2.example.com |