os-faults/doc/source/usage.rst
Anton Studenov 3954065549 Allow usage of multiple power drivers at once
* Deprecated power_management parameter.
* Added power_managements to configuration.
* Removed power_management variable from NodeCollection
  and Service.
* Added PowerManager class that controls running of
  power drivers.
* Updated docs.

Change-Id: Idabcb1fb907022f0d556667cbf3c36326f526a08
2017-01-25 12:58:36 +03:00

167 lines
4.4 KiB
ReStructuredText

=====
Usage
=====
Configuration
-------------
The cloud deployment configuration schema is an extension to the cloud config
used by the `os-client-config <https://github.com/openstack/os-client-config>`_
library:
.. code-block:: python
cloud_config = {
'cloud_management': {
'driver': 'devstack',
'args': {
'address': 'devstack.local',
'username': 'root',
}
},
'power_managements': [
{
'driver': 'libvirt',
'args': {
'connection_uri': 'qemu+unix:///system',
}
}
]
}
Establish a connection to the cloud and verify it:
.. code-block:: python
destructor = os_faults.connect(cloud_config)
destructor.verify()
The library can also read configuration from a file and the file can be in the
following three formats: os-faults.{json,yaml,yml}. The configuration file can
be specified in the `OS_FAULTS_CONFIG` environment variable or can be read from
one of the default locations:
* current directory
* ~/.config/os-faults
* /etc/openstack
Make some destructive actions:
.. code-block:: python
destructor.get_service(name='keystone').restart()
The library operates with 2 types of objects:
* `service` - is a software that runs in the cloud, e.g. `nova-api`
* `nodes` - nodes that host the cloud, e.g. a hardware server with a hostname
Simplified API
--------------
Simplified API is used to inject faults in a human-friendly form.
**Service-oriented** command performs specified `action` against `service` on
all, on one random node or on the node specified by FQDN::
<action> <service> service [on (random|one|single|<fqdn> node[s])]
Examples:
* `Restart Keystone service` - restarts Keystone service on all nodes.
* `kill nova-api service on one node` - restarts Nova API on one
randomly-picked node.
**Node-oriented** command performs specified `action` on node specified by FQDN
or set of service's nodes::
<action> [random|one|single|<fqdn>] node[s] [with <service> service]
Examples:
* `Reboot one node with mysql` - reboots one random node with MySQL.
* `Reset node-2.domain.tld node` - reset node `node-2.domain.tld`.
**Network-oriented** command is a subset of node-oriented and performs network
management operation on selected nodes::
<action> <network> network on [random|one|single|<fqdn>] node[s]
[with <service> service]
Examples:
* `Disconnect management network on nodes with rabbitmq service` - shuts
down management network interface on all nodes where rabbitmq runs.
* `Connect storage network on node-1.domain.tld node` - enables storage
network interface on node-1.domain.tld.
Extended API
------------
1. Service actions
~~~~~~~~~~~~~~~~~~
Get a service and restart it:
.. code-block:: python
destructor = os_faults.connect(cloud_config)
service = destructor.get_service(name='glance-api')
service.restart()
Available actions:
* `start` - start Service
* `terminate` - terminate Service gracefully
* `restart` - restart Service
* `kill` - terminate Service abruptly
* `unplug` - unplug Service out of network
* `plug` - plug Service into network
2. Node actions
~~~~~~~~~~~~~~~
Get all nodes in the cloud and reboot them:
.. code-block:: python
nodes = destructor.get_nodes()
nodes.reboot()
Available actions:
* `reboot` - reboot all nodes gracefully
* `poweroff` - power off all nodes abruptly
* `reset` - reset (cold restart) all nodes
* `oom` - fill all node's RAM
* `disconnect` - disable network with the specified name on all nodes
* `connect` - enable network with the specified name on all nodes
3. Operate with nodes
~~~~~~~~~~~~~~~~~~~~~
Get all nodes where a service runs, pick one of them and reset:
.. code-block:: python
nodes = service.get_nodes()
one = nodes.pick()
one.reset()
Get nodes where l3-agent runs and disable the management network on them:
.. code-block:: python
fqdns = neutron.l3_agent_list_hosting_router(router_id)
nodes = destructor.get_nodes(fqdns=fqdns)
nodes.disconnect(network_name='management')
4. Operate with services
~~~~~~~~~~~~~~~~~~~~~~~~
Restart a service on a single node:
.. code-block:: python
service = destructor.get_service(name='keystone')
nodes = service.get_nodes().pick()
service.restart(nodes)