-
René Nussbaumer authored
Signed-off-by:
René Nussbaumer <rn@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
553cb5f7
Ganeti remote API
Documents Ganeti version |version|
Contents
- Introduction
- Users and passwords
- Protocol
- PUT or POST?
- Generic parameter types
- Generic parameters
- Parameter details
- Usage examples
-
Resources
/
/2
-
/2/info
-
/2/redistribute-config
/2/features
-
/2/modify
-
/2/groups
-
/2/groups/[group_name]
-
/2/groups/[group_name]/modify
-
/2/groups/[group_name]/rename
-
/2/groups/[group_name]/assign-nodes
-
/2/groups/[group_name]/tags
-
/2/instances
-
/2/instances/[instance_name]
-
/2/instances/[instance_name]/info
-
/2/instances/[instance_name]/reboot
-
/2/instances/[instance_name]/shutdown
-
/2/instances/[instance_name]/startup
-
/2/instances/[instance_name]/reinstall
-
/2/instances/[instance_name]/replace-disks
-
/2/instances/[instance_name]/activate-disks
-
/2/instances/[instance_name]/deactivate-disks
-
/2/instances/[instance_name]/recreate-disks
-
/2/instances/[instance_name]/disk/[disk_index]/grow
-
/2/instances/[instance_name]/prepare-export
-
/2/instances/[instance_name]/export
-
/2/instances/[instance_name]/migrate
-
/2/instances/[instance_name]/failover
-
/2/instances/[instance_name]/rename
-
/2/instances/[instance_name]/modify
-
/2/instances/[instance_name]/console
-
/2/instances/[instance_name]/tags
-
/2/jobs
-
/2/jobs/[job_id]
/2/jobs/[job_id]/wait
-
/2/nodes
/2/nodes/[node_name]
-
/2/nodes/[node_name]/powercycle
-
/2/nodes/[node_name]/evacuate
-
/2/nodes/[node_name]/migrate
-
/2/nodes/[node_name]/role
-
/2/nodes/[node_name]/modify
-
/2/nodes/[node_name]/storage
-
/2/nodes/[node_name]/storage/modify
-
/2/nodes/[node_name]/storage/repair
-
/2/nodes/[node_name]/tags
-
/2/query/[resource]
-
/2/query/[resource]/fields
-
/2/os
-
/2/tags
-
/version
Introduction
Ganeti supports a remote API for enable external tools to easily
retrieve information about a cluster's state. The remote API daemon,
ganeti-rapi, is automatically started on the master node. By default
it runs on TCP port 5080, but this can be changed either in
.../constants.py
or via the command line parameter -p. SSL mode,
which is used by default, can also be disabled by passing command line
parameters.
Users and passwords
ganeti-rapi
reads users and passwords from a file (usually
/var/lib/ganeti/rapi/users
) on startup. Changes to the file will be
read automatically.
Each line consists of two or three fields separated by whitespace. The
first two fields are for username and password. The third field is
optional and can be used to specify per-user options. Currently,
write
is the only option supported and enables the user to execute
operations modifying the cluster. Lines starting with the hash sign
(#
) are treated as comments.
Passwords can either be written in clear text or as a hash. Clear text
passwords may not start with an opening brace ({
) or they must be
prefixed with {cleartext}
. To use the hashed form, get the MD5 hash
of the string $username:Ganeti Remote API:$password
(e.g. echo -n
'jack:Ganeti Remote API:abc123' | openssl md5
) [1] and prefix
it with {ha1}
. Using the scheme prefix for all passwords is
recommended. Scheme prefixes are not case sensitive.
Example:
# Give Jack and Fred read-only access
jack abc123
fred {cleartext}foo555
# Give write access to an imaginary instance creation script
autocreator xyz789 write
# Hashed password for Jessica
jessica {HA1}7046452df2cbb530877058712cf17bd4 write
[1] | Using the MD5 hash of username, realm and password is
described in RFC 2617 ("HTTP Authentication"), sections 3.2.2.2
and 3.3. The reason for using it over another algorithm is forward
compatibility. If ganeti-rapi were to implement HTTP Digest
authentication in the future, the same hash could be used.
In the current version ganeti-rapi 's realm, Ganeti Remote
API , can only be changed by modifying the source code. |
Protocol
The protocol used is JSON over HTTP designed after the REST principle. HTTP Basic authentication as per RFC 2617 is supported.
HTTP requests with a body (e.g. PUT
or POST
) require the request
header Content-type
be set to application/json
(see RFC 2616
(HTTP/1.1), section 7.2.1).