Ganeti customisation using hooks
================================

Documents Ganeti version 2.9

.. contents::

Introduction
------------

In order to allow customisation of operations, Ganeti runs scripts in
sub-directories of ``@SYSCONFDIR@/ganeti/hooks``. These sub-directories
are named ``$hook-$phase.d``, where ``$phase`` is either ``pre`` or
``post`` and ``$hook`` matches the directory name given for a hook (e.g.
``cluster-verify-post.d`` or ``node-add-pre.d``).

This is similar to the ``/etc/network/`` structure present in Debian
for network interface handling.

Organisation
------------

For every operation, two sets of scripts are run:

- pre phase (for authorization/checking)
- post phase (for logging)

Also, for each operation, the scripts are run on one or more nodes,
depending on the operation type.

Note that, even though we call them scripts, we are actually talking
about any executable.

*pre* scripts
~~~~~~~~~~~~~

The *pre* scripts have a definite target: to check that the operation
is allowed given the site-specific constraints. You could have, for
example, a rule that says every new instance is required to exists in
a database; to implement this, you could write a script that checks
the new instance parameters against your database.

The objective of these scripts should be their return code (zero or
non-zero for success and failure). However, if they modify the
environment in any way, they should be idempotent, as failed
executions could be restarted and thus the script(s) run again with
exactly the same parameters.

Note that if a node is unreachable at the time a hooks is run, this
will not be interpreted as a deny for the execution. In other words,
only an actual error returned from a script will cause abort, and not
an unreachable node.

Therefore, if you want to guarantee that a hook script is run and
denies an action, it's best to put it on the master node.

*post* scripts
~~~~~~~~~~~~~~

These scripts should do whatever you need as a reaction to the
completion of an operation. Their return code is not checked (but
logged), and they should not depend on the fact that the *pre* scripts
have been run.

Naming
~~~~~~

The allowed names for the scripts consist of (similar to *run-parts*)
upper and lower case, digits, underscores and hyphens. In other words,
the regexp ``^[a-zA-Z0-9_-]+$``. Also, non-executable scripts will be
ignored.


Order of execution
~~~~~~~~~~~~~~~~~~

On a single node, the scripts in a directory are run in lexicographic
order (more exactly, the python string comparison order). It is
advisable to implement the usual *NN-name* convention where *NN* is a
two digit number.

For an operation whose hooks are run on multiple nodes, there is no
specific ordering of nodes with regard to hooks execution; you should
assume that the scripts are run in parallel on the target nodes
(keeping on each node the above specified ordering).  If you need any
kind of inter-node synchronisation, you have to implement it yourself
in the scripts.

Execution environment
~~~~~~~~~~~~~~~~~~~~~

The scripts will be run as follows:

- no command line arguments

- no controlling *tty*

- stdin is actually */dev/null*

- stdout and stderr are directed to files

- PATH is reset to :pyeval:`constants.HOOKS_PATH`

- the environment is cleared, and only ganeti-specific variables will
  be left


All information about the cluster is passed using environment
variables. Different operations will have sligthly different
environments, but most of the variables are common.

Operation list
--------------

Node operations
~~~~~~~~~~~~~~~

OP_NODE_ADD
+++++++++++

Adds a node to the cluster.

:directory: node-add
:env. vars: NODE_NAME, NODE_PIP, NODE_SIP, MASTER_CAPABLE, VM_CAPABLE
:pre-execution: all existing nodes
:post-execution: all nodes plus the new node


OP_NODE_REMOVE
++++++++++++++

Removes a node from the cluster. On the removed node the hooks are
called during the execution of the operation and not after its
completion.

:directory: node-remove
:env. vars: NODE_NAME
:pre-execution: all existing nodes except the removed node
:post-execution: all existing nodes

OP_NODE_SET_PARAMS
++++++++++++++++++

Changes a node's parameters.

:directory: node-modify
:env. vars: MASTER_CANDIDATE, OFFLINE, DRAINED, MASTER_CAPABLE, VM_CAPABLE
:pre-execution: master node, the target node
:post-execution: master node, the target node

OP_NODE_MIGRATE
++++++++++++++++

Relocate secondary instances from a node.

:directory: node-migrate
:env. vars: NODE_NAME
:pre-execution: master node
:post-execution: master node


Node group operations
~~~~~~~~~~~~~~~~~~~~~

OP_GROUP_ADD
++++++++++++

Adds a node group to the cluster.

:directory: group-add
:env. vars: GROUP_NAME
:pre-execution: master node
:post-execution: master node

OP_GROUP_SET_PARAMS
+++++++++++++++++++

Changes a node group's parameters.

:directory: group-modify
:env. vars: GROUP_NAME, NEW_ALLOC_POLICY
:pre-execution: master node
:post-execution: master node

OP_GROUP_REMOVE
+++++++++++++++

Removes a node group from the cluster. Since the node group must be
empty for removal to succeed, the concept of "nodes in the group" does
not exist, and the hook is only executed in the master node.

:directory: group-remove
:env. vars: GROUP_NAME
:pre-execution: master node
:post-execution: master node

OP_GROUP_RENAME
+++++++++++++++

Renames a node group.

:directory: group-rename
:env. vars: OLD_NAME, NEW_NAME
:pre-execution: master node and all nodes in the group
:post-execution: master node and all nodes in the group

OP_GROUP_EVACUATE
+++++++++++++++++

Evacuates a node group.

:directory: group-evacuate
:env. vars: GROUP_NAME, TARGET_GROUPS
:pre-execution: master node and all nodes in the group
:post-execution: master node and all nodes in the group

Network operations
~~~~~~~~~~~~~~~~~~

OP_NETWORK_ADD
++++++++++++++

Adds a network to the cluster.

:directory: network-add
:env. vars: NETWORK_NAME, NETWORK_SUBNET, NETWORK_GATEWAY, NETWORK_SUBNET6,
            NETWORK_GATEWAY6, NETWORK_MAC_PREFIX, NETWORK_TAGS
:pre-execution: master node
:post-execution: master node

OP_NETWORK_REMOVE
+++++++++++++++++

Removes a network from the cluster.

:directory: network-remove
:env. vars: NETWORK_NAME
:pre-execution: master node
:post-execution: master node

OP_NETWORK_CONNECT
++++++++++++++++++

Connects a network to a nodegroup.

:directory: network-connect
:env. vars: GROUP_NAME, NETWORK_NAME,
            GROUP_NETWORK_MODE, GROUP_NETWORK_LINK,
            NETWORK_SUBNET, NETWORK_GATEWAY, NETWORK_SUBNET6,
            NETWORK_GATEWAY6, NETWORK_MAC_PREFIX, NETWORK_TAGS
:pre-execution: nodegroup nodes
:post-execution: nodegroup nodes


OP_NETWORK_DISCONNECT
+++++++++++++++++++++

Disconnects a network from a nodegroup.

:directory: network-disconnect
:env. vars: GROUP_NAME, NETWORK_NAME,
            GROUP_NETWORK_MODE, GROUP_NETWORK_LINK,
            NETWORK_SUBNET, NETWORK_GATEWAY, NETWORK_SUBNET6,
            NETWORK_GATEWAY6, NETWORK_MAC_PREFIX, NETWORK_TAGS
:pre-execution: nodegroup nodes
:post-execution: nodegroup nodes


OP_NETWORK_SET_PARAMS
+++++++++++++++++++++

Modifies a network.

:directory: network-modify
:env. vars: NETWORK_NAME, NETWORK_SUBNET, NETWORK_GATEWAY, NETWORK_SUBNET6,
            NETWORK_GATEWAY6, NETWORK_MAC_PREFIX, NETWORK_TAGS
:pre-execution: master node
:post-execution: master node


Instance operations
~~~~~~~~~~~~~~~~~~~

All instance operations take at least the following variables:
INSTANCE_NAME, INSTANCE_PRIMARY, INSTANCE_SECONDARY,
INSTANCE_OS_TYPE, INSTANCE_DISK_TEMPLATE, INSTANCE_MEMORY,
INSTANCE_DISK_SIZES, INSTANCE_VCPUS, INSTANCE_NIC_COUNT,
INSTANCE_NICn_IP, INSTANCE_NICn_BRIDGE, INSTANCE_NICn_MAC,
INSTANCE_NICn_NETWORK,
INSTANCE_NICn_NETWORK_UUID, INSTANCE_NICn_NETWORK_SUBNET,
INSTANCE_NICn_NETWORK_GATEWAY, INSTANCE_NICn_NETWORK_SUBNET6,
INSTANCE_NICn_NETWORK_GATEWAY6, INSTANCE_NICn_NETWORK_MAC_PREFIX,
INSTANCE_DISK_COUNT, INSTANCE_DISKn_SIZE, INSTANCE_DISKn_MODE.

The INSTANCE_NICn_* and INSTANCE_DISKn_* variables represent the
properties of the *n* -th NIC and disk, and are zero-indexed.

The INSTANCE_NICn_NETWORK_* variables are only passed if a NIC's network
parameter is set (that is if the NIC is associated to a network defined
via ``gnt-network``)


OP_INSTANCE_CREATE
++++++++++++++++++

Creates a new instance.

:directory: instance-add
:env. vars: ADD_MODE, SRC_NODE, SRC_PATH, SRC_IMAGES
:pre-execution: master node, primary and secondary nodes
:post-execution: master node, primary and secondary nodes

OP_INSTANCE_REINSTALL
+++++++++++++++++++++

Reinstalls an instance.

:directory: instance-reinstall
:env. vars: only the standard instance vars
:pre-execution: master node, primary and secondary nodes
:post-execution: master node, primary and secondary nodes

OP_BACKUP_EXPORT
++++++++++++++++

Exports the instance.

:directory: instance-export
:env. vars: EXPORT_MODE, EXPORT_NODE, EXPORT_DO_SHUTDOWN, REMOVE_INSTANCE
:pre-execution: master node, primary and secondary nodes
:post-execution: master node, primary and secondary nodes

OP_INSTANCE_STARTUP
+++++++++++++++++++

Starts an instance.

:directory: instance-start
:env. vars: FORCE
:pre-execution: master node, primary and secondary nodes
:post-execution: master node, primary and secondary nodes

OP_INSTANCE_SHUTDOWN
++++++++++++++++++++

Stops an instance.

:directory: instance-stop
:env. vars: TIMEOUT
:pre-execution: master node, primary and secondary nodes
:post-execution: master node, primary and secondary nodes

OP_INSTANCE_REBOOT
++++++++++++++++++

Reboots an instance.

:directory: instance-reboot
:env. vars: IGNORE_SECONDARIES, REBOOT_TYPE, SHUTDOWN_TIMEOUT
:pre-execution: master node, primary and secondary nodes
:post-execution: master node, primary and secondary nodes

OP_INSTANCE_SET_PARAMS
++++++++++++++++++++++

Modifies the instance parameters.

:directory: instance-modify
:env. vars: NEW_DISK_TEMPLATE, RUNTIME_MEMORY
:pre-execution: master node, primary and secondary nodes
:post-execution: master node, primary and secondary nodes

OP_INSTANCE_FAILOVER
++++++++++++++++++++

Failovers an instance. In the post phase INSTANCE_PRIMARY and
INSTANCE_SECONDARY refer to the nodes that were repectively primary
and secondary before failover.

:directory: instance-failover
:env. vars: IGNORE_CONSISTENCY, SHUTDOWN_TIMEOUT, OLD_PRIMARY, OLD_SECONDARY, NEW_PRIMARY, NEW_SECONDARY
:pre-execution: master node, secondary node
:post-execution: master node, primary and secondary nodes

OP_INSTANCE_MIGRATE
++++++++++++++++++++

Migrates an instance. In the post phase INSTANCE_PRIMARY and
INSTANCE_SECONDARY refer to the nodes that were repectively primary
and secondary before migration.

:directory: instance-migrate
:env. vars: MIGRATE_LIVE, MIGRATE_CLEANUP, OLD_PRIMARY, OLD_SECONDARY, NEW_PRIMARY, NEW_SECONDARY
:pre-execution: master node, primary and secondary nodes
:post-execution: master node, primary and secondary nodes


OP_INSTANCE_REMOVE
++++++++++++++++++

Remove an instance.

:directory: instance-remove
:env. vars: SHUTDOWN_TIMEOUT
:pre-execution: master node
:post-execution: master node, primary and secondary nodes

OP_INSTANCE_GROW_DISK
+++++++++++++++++++++

Grows the disk of an instance.

:directory: disk-grow
:env. vars: DISK, AMOUNT
:pre-execution: master node, primary and secondary nodes
:post-execution: master node, primary and secondary nodes

OP_INSTANCE_RENAME
++++++++++++++++++

Renames an instance.

:directory: instance-rename
:env. vars: INSTANCE_NEW_NAME
:pre-execution: master node, primary and secondary nodes
:post-execution: master node, primary and secondary nodes

OP_INSTANCE_MOVE
++++++++++++++++

Move an instance by data-copying.

:directory: instance-move
:env. vars: TARGET_NODE, SHUTDOWN_TIMEOUT
:pre-execution: master node, primary and target nodes
:post-execution: master node, primary and target nodes

OP_INSTANCE_RECREATE_DISKS
++++++++++++++++++++++++++

Recreate an instance's missing disks.

:directory: instance-recreate-disks
:env. vars: only the standard instance vars
:pre-execution: master node, primary and secondary nodes
:post-execution: master node, primary and secondary nodes

OP_INSTANCE_REPLACE_DISKS
+++++++++++++++++++++++++

Replace the disks of an instance.

:directory: mirrors-replace
:env. vars: MODE, NEW_SECONDARY, OLD_SECONDARY
:pre-execution: master node, primary and new secondary nodes
:post-execution: master node, primary and new secondary nodes

OP_INSTANCE_CHANGE_GROUP
++++++++++++++++++++++++

Moves an instance to another group.

:directory: instance-change-group
:env. vars: TARGET_GROUPS
:pre-execution: master node
:post-execution: master node


Cluster operations
~~~~~~~~~~~~~~~~~~

OP_CLUSTER_POST_INIT
++++++++++++++++++++

This hook is called via a special "empty" LU right after cluster
initialization.

:directory: cluster-init
:env. vars: none
:pre-execution: none
:post-execution: master node

OP_CLUSTER_DESTROY
++++++++++++++++++

The post phase of this hook is called during the execution of destroy
operation and not after its completion.

:directory: cluster-destroy
:env. vars: none
:pre-execution: none
:post-execution: master node

OP_CLUSTER_VERIFY_GROUP
+++++++++++++++++++++++

Verifies all nodes in a group. This is a special LU with regard to
hooks, as the result of the opcode will be combined with the result of
post-execution hooks, in order to allow administrators to enhance the
cluster verification procedure.

:directory: cluster-verify
:env. vars: CLUSTER, MASTER, CLUSTER_TAGS, NODE_TAGS_<name>
:pre-execution: none
:post-execution: all nodes in a group

OP_CLUSTER_RENAME
+++++++++++++++++

Renames the cluster.

:directory: cluster-rename
:env. vars: NEW_NAME
:pre-execution: master-node
:post-execution: master-node

OP_CLUSTER_SET_PARAMS
+++++++++++++++++++++

Modifies the cluster parameters.

:directory: cluster-modify
:env. vars: NEW_VG_NAME
:pre-execution: master node
:post-execution: master node

Virtual operation :pyeval:`constants.FAKE_OP_MASTER_TURNUP`
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

This doesn't correspond to an actual op-code, but it is called when the
master IP is activated.

:directory: master-ip-turnup
:env. vars: MASTER_NETDEV, MASTER_IP, MASTER_NETMASK, CLUSTER_IP_VERSION
:pre-execution: master node
:post-execution: master node

Virtual operation :pyeval:`constants.FAKE_OP_MASTER_TURNDOWN`
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

This doesn't correspond to an actual op-code, but it is called when the
master IP is deactivated.

:directory: master-ip-turndown
:env. vars: MASTER_NETDEV, MASTER_IP, MASTER_NETMASK, CLUSTER_IP_VERSION
:pre-execution: master node
:post-execution: master node


Obsolete operations
~~~~~~~~~~~~~~~~~~~

The following operations are no longer present or don't execute hooks
anymore in Ganeti 2.0:

- OP_INIT_CLUSTER
- OP_MASTER_FAILOVER
- OP_INSTANCE_ADD_MDDRBD
- OP_INSTANCE_REMOVE_MDDRBD


Environment variables
---------------------

Note that all variables listed here are actually prefixed with *GANETI_*
in order to provide a clear namespace. In addition, post-execution
scripts receive another set of variables, prefixed with *GANETI_POST_*,
representing the status after the opcode executed.

Common variables
~~~~~~~~~~~~~~~~

This is the list of environment variables supported by all operations:

HOOKS_VERSION
  Documents the hooks interface version. In case this doesnt match
  what the script expects, it should not run. The documents conforms
  to the version 2.

HOOKS_PHASE
  One of *PRE* or *POST* denoting which phase are we in.

CLUSTER
  The cluster name.

MASTER
  The master node.

OP_CODE
  One of the *OP_* values from the list of operations.

OBJECT_TYPE
  One of ``INSTANCE``, ``NODE``, ``CLUSTER``.

DATA_DIR
  The path to the Ganeti configuration directory (to read, for
  example, the *ssconf* files).


Specialised variables
~~~~~~~~~~~~~~~~~~~~~

This is the list of variables which are specific to one or more
operations.

CLUSTER_IP_VERSION
  IP version of the master IP (4 or 6)

INSTANCE_NAME
  The name of the instance which is the target of the operation.

INSTANCE_BE_x,y,z,...
  Instance BE params. There is one variable per BE param. For instance, GANETI_INSTANCE_BE_auto_balance

INSTANCE_DISK_TEMPLATE
  The disk type for the instance.

NEW_DISK_TEMPLATE
  The new disk type for the instance.

INSTANCE_DISK_COUNT
  The number of disks for the instance.

INSTANCE_DISKn_SIZE
  The size of disk *n* for the instance.

INSTANCE_DISKn_MODE
  Either *rw* for a read-write disk or *ro* for a read-only one.

INSTANCE_HV_x,y,z,...
  Instance hypervisor options. There is one variable per option. For instance, GANETI_INSTANCE_HV_use_bootloader

INSTANCE_HYPERVISOR
  The instance hypervisor.

INSTANCE_NIC_COUNT
  The number of NICs for the instance.

INSTANCE_NICn_BRIDGE
  The bridge to which the *n* -th NIC of the instance is attached.

INSTANCE_NICn_IP
  The IP (if any) of the *n* -th NIC of the instance.

INSTANCE_NICn_MAC
  The MAC address of the *n* -th NIC of the instance.

INSTANCE_NICn_MODE
  The mode of the *n* -th NIC of the instance.

INSTANCE_OS_TYPE
  The name of the instance OS.

INSTANCE_PRIMARY
  The name of the node which is the primary for the instance. Note that
  for migrations/failovers, you shouldn't rely on this variable since
  the nodes change during the exectution, but on the
  OLD_PRIMARY/NEW_PRIMARY values.

INSTANCE_SECONDARY
  Space-separated list of secondary nodes for the instance. Note that
  for migrations/failovers, you shouldn't rely on this variable since
  the nodes change during the exectution, but on the
  OLD_SECONDARY/NEW_SECONDARY values.

INSTANCE_MEMORY
  The memory size (in MiBs) of the instance.

INSTANCE_VCPUS
  The number of virtual CPUs for the instance.

INSTANCE_STATUS
  The run status of the instance.

MASTER_CAPABLE
  Whether a node is capable of being promoted to master.

VM_CAPABLE
  Whether the node can host instances.

MASTER_NETDEV
  Network device of the master IP

MASTER_IP
  The master IP

MASTER_NETMASK
  Netmask of the master IP

INSTANCE_TAGS
  A space-delimited list of the instance's tags.

NODE_NAME
  The target node of this operation (not the node on which the hook
  runs).

NODE_PIP
  The primary IP of the target node (the one over which inter-node
  communication is done).

NODE_SIP
  The secondary IP of the target node (the one over which drbd
  replication is done). This can be equal to the primary ip, in case
  the cluster is not dual-homed.

FORCE
  This is provided by some operations when the user gave this flag.

IGNORE_CONSISTENCY
  The user has specified this flag. It is used when failing over
  instances in case the primary node is down.

ADD_MODE
  The mode of the instance create: either *create* for create from
  scratch or *import* for restoring from an exported image.

SRC_NODE, SRC_PATH, SRC_IMAGE
  In case the instance has been added by import, these variables are
  defined and point to the source node, source path (the directory
  containing the image and the config file) and the source disk image
  file.

NEW_SECONDARY
  The name of the node on which the new mirror component is being
  added (for replace disk). This can be the name of the current
  secondary, if the new mirror is on the same secondary. For
  migrations/failovers, this is the old primary node.

OLD_SECONDARY
  The name of the old secondary in the replace-disks command. Note that
  this can be equal to the new secondary if the secondary node hasn't
  actually changed. For migrations/failovers, this is the new primary
  node.

OLD_PRIMARY, NEW_PRIMARY
  For migrations/failovers, the old and respectively new primary
  nodes. These two mirror the NEW_SECONDARY/OLD_SECONDARY variables

EXPORT_MODE
  The instance export mode. Either "remote" or "local".

EXPORT_NODE
  The node on which the exported image of the instance was done.

EXPORT_DO_SHUTDOWN
  This variable tells if the instance has been shutdown or not while
  doing the export. In the "was shutdown" case, it's likely that the
  filesystem is consistent, whereas in the "did not shutdown" case,
  the filesystem would need a check (journal replay or full fsck) in
  order to guarantee consistency.

REMOVE_INSTANCE
  Whether the instance was removed from the node.

SHUTDOWN_TIMEOUT
  Amount of time to wait for the instance to shutdown.

TIMEOUT
  Amount of time to wait before aborting the op.

OLD_NAME, NEW_NAME
  Old/new name of the node group.

GROUP_NAME
  The name of the node group.

NEW_ALLOC_POLICY
  The new allocation policy for the node group.

CLUSTER_TAGS
  The list of cluster tags, space separated.

NODE_TAGS_<name>
  The list of tags for node *<name>*, space separated.

Examples
--------

The startup of an instance will pass this environment to the hook
script::

  GANETI_CLUSTER=cluster1.example.com
  GANETI_DATA_DIR=/var/lib/ganeti
  GANETI_FORCE=False
  GANETI_HOOKS_PATH=instance-start
  GANETI_HOOKS_PHASE=post
  GANETI_HOOKS_VERSION=2
  GANETI_INSTANCE_DISK0_MODE=rw
  GANETI_INSTANCE_DISK0_SIZE=128
  GANETI_INSTANCE_DISK_COUNT=1
  GANETI_INSTANCE_DISK_TEMPLATE=drbd
  GANETI_INSTANCE_MEMORY=128
  GANETI_INSTANCE_NAME=instance2.example.com
  GANETI_INSTANCE_NIC0_BRIDGE=xen-br0
  GANETI_INSTANCE_NIC0_IP=
  GANETI_INSTANCE_NIC0_MAC=aa:00:00:a5:91:58
  GANETI_INSTANCE_NIC_COUNT=1
  GANETI_INSTANCE_OS_TYPE=debootstrap
  GANETI_INSTANCE_PRIMARY=node3.example.com
  GANETI_INSTANCE_SECONDARY=node5.example.com
  GANETI_INSTANCE_STATUS=down
  GANETI_INSTANCE_VCPUS=1
  GANETI_MASTER=node1.example.com
  GANETI_OBJECT_TYPE=INSTANCE
  GANETI_OP_CODE=OP_INSTANCE_STARTUP
  GANETI_OP_TARGET=instance2.example.com

.. vim: set textwidth=72 :
.. Local Variables:
.. mode: rst
.. fill-column: 72
.. End:
