**hbal**
cluster balancer
+**hcheck**
+ cluster checker
+
**hspace**
cluster capacity computation
**hscan**
saves cluster state for later reuse
+**hinfo**
+ cluster information printer
+
+**hroller**
+ cluster rolling maintenance scheduler
DESCRIPTION
-----------
-
``htools`` is a suite of tools designed to help with allocation/movement
of instances and balancing of Ganeti clusters. ``htools`` is also the
generic binary that must be symlinked or hardlinked under each tool's
Installed as ``hbal``, it computes and optionally executes a suite of
instance moves in order to balance the cluster.
+Installed as ``hcheck``, it preforms cluster checks and optionally
+simulates rebalancing with all the ``hbal`` options available.
+
Installed as ``hspace``, it computes how many additional instances can
be fit on a cluster, while maintaining N+1 status. It can run on models
of existing clusters or of simulated clusters.
Installed as ``hscan``, it scans the local or remote cluster state and
saves it to files which can later be reused by the other roles.
+Installed as ``hinfo``, it prints information about the current cluster
+state.
+
+Installed as ``hroller``, it helps scheduling maintenances that require
+node reboots on a cluster.
+
COMMON OPTIONS
--------------
Options behave the same in all program modes, but not all program modes
support all options. Some common options are:
--p, --print-nodes
+-p, \--print-nodes
Prints the node status, in a format designed to allow the user to
understand the node's most important parameters. If the command in
question makes a cluster transition (e.g. balancing or allocation),
lNet
the dynamic net load (if the information is available)
--v, --verbose
+-t *datafile*, \--text-data=*datafile*
+ Backend specification: the name of the file holding node and instance
+ information (if not collecting via RAPI or LUXI). This or one of the
+ other backends must be selected. The option is described in the man
+ page **htools**(1).
+
+ The file should contain text data, line-based, with two empty lines
+ separating sections. The lines themselves are column-based, with the
+ pipe symbol (``|``) acting as separator.
+
+ The first section contains group data, with two columns:
+
+ - group name
+ - group uuid
+
+ The second sections contains node data, with the following columns:
+
+ - node name
+ - node total memory
+ - node free memory
+ - node total disk
+ - node free disk
+ - node physical cores
+ - offline field (as ``Y`` or ``N``)
+ - group UUID
+ - node spindle count
+
+ The third section contains instance data, with the fields:
+
+ - instance name
+ - instance memory
+ - instance disk size
+ - instance vcpus
+ - instance status (in Ganeti's format, e.g. ``running`` or ``ERROR_down``)
+ - instance ``auto_balance`` flag (see man page **gnt-instance** (7))
+ - instance primary node
+ - instance secondary node(s), if any
+ - instance disk type (e.g. ``plain`` or ``drbd``)
+ - instance tags
+
+ The fourth section contains the cluster tags, with one tag per line
+ (no columns/no column processing).
+
+ The fifth section contains the ipolicies of the cluster and the node
+ groups, in the following format (separated by ``|``):
+
+ - owner (empty if cluster, group name otherwise)
+ - standard, min, max instance specs, containing the following values
+ separated by commas:
+ - memory size
+ - cpu count
+ - disk size
+ - disk count
+ - nic count
+ - disk templates
+ - vcpu ratio
+ - spindle ratio
+
+-m *cluster*
+ Backend specification: collect data directly from the *cluster* given
+ as an argument via RAPI. If the argument doesn't contain a colon (:),
+ then it is converted into a fully-built URL via prepending
+ ``https://`` and appending the default RAPI port, otherwise it is
+ considered a fully-specified URL and used as-is.
+
+-L [*path*]
+ Backend specification: collect data directly from the master daemon,
+ which is to be contacted via LUXI (an internal Ganeti protocol). An
+ optional *path* argument is interpreted as the path to the unix socket
+ on which the master daemon listens; otherwise, the default path used
+ by Ganeti (configured at build time) is used.
+
+-I|\--ialloc-src *path*
+ Backend specification: load data directly from an iallocator request
+ (as produced by Ganeti when doing an iallocator call). The iallocator
+ request is read from specified path.
+
+\--simulate *description*
+ Backend specification: instead of using actual data, build an empty
+ cluster given a node description. The *description* parameter must be
+ a comma-separated list of five elements, describing in order:
+
+ - the allocation policy for this node group (*preferred*, *allocable*
+ or *unallocable*, or alternatively the short forms *p*, *a* or *u*)
+ - the number of nodes in the cluster
+ - the disk size of the nodes (default in mebibytes, units can be used)
+ - the memory size of the nodes (default in mebibytes, units can be used)
+ - the cpu core count for the nodes
+ - the spindle count for the nodes
+
+ An example description would be **preferred,20,100G,16g,4,2**
+ describing a 20-node cluster where each node has 100GB of disk space,
+ 16GiB of memory, 4 CPU cores and 2 disk spindles. Note that all nodes
+ must have the same specs currently.
+
+ This option can be given multiple times, and each new use defines a
+ new node group. Hence different node groups can have different
+ allocation policies and node count/specifications.
+
+-v, \--verbose
Increase the output verbosity. Each usage of this option will
increase the verbosity (currently more than 2 doesn't make sense)
from the default of one.
--q, --quiet
+-q, \--quiet
Decrease the output verbosity. Each usage of this option will
decrease the verbosity (less than zero doesn't make sense) from the
default of one.
--V, --version
+-V, \--version
Just show the program version and exit.
UNITS