``chacractl``
-------------
A client interface to interact with the ``chacra`` service
(http://github.com/ceph/chacra).


configuration
-------------
The client writes a configuration file at ``$HOME/.chacractl`` with some needed
information::

    # This file was automatically generated by the chacractl CLI
    # make sure to update it with the correct user and key to talk to the API

    url = "http://example/"
    user = "admin"
    key = "secret"
    ssl_verify = True

These values need to be modified so that the CLI can interact with the remote
API.

binaries
--------
The CLI allows for a few interactions with binaries, depending on the action
needed the requirements may change. For example when trying to upload a binary,
the tool can accept either ``stdin`` or an actual file input.

create
^^^^^^
For POSTing a binary, if posting a single binary it is best to just pass the
full path as the last argument to the ``binary`` subcommand::

    chacractl binary create project/ref/distro/distro-version/arch /path/to/binary.rpm

But for convenience, if sending many files, it can also accept them from stdin,
usually with the output of a ``find`` command that can be filtered with
``grep`` or similar.

Below is an example of such a command for a project like ``ceph-deploy``::

    find ~/repos | grep ceph-deploy | grep rpm | grep noarch | grep el6
    | chacractl binary create ceph-deploy/master/centos/6/noarch


If a binary already exists and there is a need to re-upload it, the ``--force``
flag must be used. In that case the request will be a ``PUT`` and the resource
will be overwritten in the API.

exists
------
Check whether a given url endpoint exists or not. This subcommand requires the
full url part (as opposed to other subcommands that require the url starting
from the project name)::

    chacractl exists repos/ceph-deploy/master/centos/7

If the endpoint is not found it will return a non-zero exit status


repos
-----
Repositories can be updated or fully re-created. This is useful when the API
changes and the repository creation wasn't triggered.

recreate
^^^^^^^^
A ``recreate`` call will fully remove a repository on disc and will instruct
the API to queue a repo creation. These actions are not immediate: the removal
of the repository will happen as soon as the request is processed and the
repository creation will be done when the queue does the job (possibly after
a configured timeout)

A simple call would look like::

    chacractl repo recreate ceph/infernalis/debian/jessie

Note how the full path to the distribution version is needed.

update
^^^^^^
Similar to ``recreate``, but it will not remove the actual repository on disc
before queuing the request. It is useful when a binary has been added and the
client wants to ensure it is added to the repo::

    chacractl repo update ceph/infernalis/debian/jessie

set-raw
^^^^^^^
Repos have a "type" inferred from the binaries they contain; if rpms
are uploaded, the repo will be created as an rpm repo; if debs, a Debian
repo will result.  'Raw' repos are simple containers for binaries that
need no further processing into repositories, such as .zip files or
other binary products that will be simply downloaded.  For such repos,
use set-raw to set the type of the repo so that no asynchronous repo
construction is requested.

    chacractl repo set-raw ceph/infernalis/windows/1809
