.. -*- coding: utf-8 -*-

.. _cubicweb-ctl:

``cubicweb-ctl`` tool
=====================

`cubicweb-ctl` is the swiss knife to manage *CubicWeb* instances.
The general syntax is ::

  cubicweb-ctl <command> [options command] <arguments commands>

To view available commands ::

  cubicweb-ctl
  cubicweb-ctl --help

Please note that the commands available depends on the *CubicWeb* packages
and cubes that have been installed.

To view the help menu on specific command ::

  cubicweb-ctl <command> --help

Command to create a cube
------------------------

* ``newcube``, create a new cube on the file system based on the name
  given in the parameters. This command create a cube from a skeleton
  that includes default files required for debian packaging.


Command to create an instance
-----------------------------
* ``create``, creates the files for the instance configuration
* ``db-create``, creates the system database of an instance (tables and
  extensions only)
* ``db-init``, initializes the system database of an instance
  (schema, groups, users, workflows...)

By default, those three commandes are encapsulated in ``create`` so
that they can be executed consecutively.

Command to create an instance for Google AppEngine datastore source
-------------------------------------------------------------------
* ``newgapp``, creates the configuration files for an instance

This command needs to be followed by the commands responsible for
the database initialization. As those are specific to the `datastore`,
specific Google AppEgine database, they are not available for now
in cubicweb-ctl, but they are available in the instance created.

For more details, please see :ref:`gaecontents` .

Commands to control instances
-----------------------------
* ``start``, starts one or more or all instances
* ``stop``, stops one or more or all instances
* ``restart``, restarts one or more or all instances
* ``status``, returns the status of the instance

Commands to maintain instances
------------------------------
* ``upgrade``, launches the existing instances migration when a new version
  of *CubicWeb* or the cubes installed is available
* ``shell``, opens a migration shell for manual maintenance of the instance
* ``db-dump``, creates a dump of the system database
* ``db-restore``, restores a dump of the system database
* ``db-check``, checks data integrity of an instance. If the automatic correction
  is activated, it is recommanded to create a dump before this operation.
* ``schema-sync``, synchronizes the persistent schema of an instance with
  the instance schema. It is recommanded to create a dump before this operation.

Commands to maintain i18n catalogs
----------------------------------
* ``i18ncubicweb``, regenerates messages catalogs of the *CubicWeb* library
* ``i18ncube``, regenerates the messages catalogs of a cube
* ``i18ninstance``, recompiles the messages catalogs of an instance.
  This is automatically done while upgrading.

See also chapter :ref:`internationalisation`.

Other commands
--------------
* ``list``, provides a list of the available configuration, cubes
  and instances.
* ``delete``, deletes an instance (configuration files and database)


Create an instance from an existing cube
````````````````````````````````````````

To create an instance from an existing cube, execute the following
command ::

   cubicweb-ctl create <cube_name> <instance_name>

This command will create the configuration files of an instance in
``~/etc/cubicweb.d/<instance_name>``.
The tool ``cubicweb-ctl`` allows you to execute the command ``db-create``
and ``db-init`` when you run ``create`` so that you can complete an
instance creation in a single command.

If you decide not to execut those commands while ``cubicweb-ctl create``,
then you will have to execute them seperately(``cubicweb-ctl db-create``,
``cubicweb-ctl db-init`` ) otherwise your installation will not be complete
and you will not be able to launch your instance.


Creation of an instance from a new cube
```````````````````````````````````````

Create first your new cube cube ::

   cubicweb-ctl newcube <mycube>

This will create a new cube in ``/path/to/forest/cubicweb/cubes/<mycube>``
for a Mercurial forest installation, or in ``/usr/share/cubicweb/cubes``
for a debian packages installation, and then create an instance as
explained just above.


