| Applications |
| ============ |
| For api docs, see :class:`juju.application.Application`. |
| |
| |
| Deploying |
| --------- |
| To deploy a new application, connect a model and then call its |
| :meth:`~juju.model.Model.deploy` method. An |
| :class:`~juju.application.Application` instance is returned. |
| |
| .. code:: python |
| |
| from juju.model import Model |
| |
| model = Model() |
| await model.connect_current() |
| |
| mysql_app = await model.deploy( |
| # If a revision number is not included in the charm url, |
| # the latest revision from the Charm Store will be used. |
| 'cs:mysql-55', |
| application_name='mysql', |
| series='trusty', |
| channel='stable', |
| config={ |
| 'tuning-level': 'safest', |
| }, |
| constraints={ |
| 'mem': 256 * MB, |
| }, |
| ) |
| |
| |
| Deploying a Local Charm |
| ----------------------- |
| To deploy a local charm, pass the charm directory path to |
| `Model.deploy()`. |
| |
| .. code:: python |
| |
| from juju.model import Model |
| |
| model = Model() |
| await model.connect_current() |
| |
| # Deploy a local charm using a path to the charm directory |
| await model.deploy( |
| '/home/tvansteenburgh/src/charms/ubuntu', |
| application_name='ubuntu', |
| series='trusty', |
| ) |
| |
| |
| Adding Units |
| ------------ |
| To add units to a deployed application, use the |
| :meth:`juju.application.Application.add_units` method. A list of the newly |
| added units (:class:`~juju.unit.Unit` objects) is returned. |
| |
| .. code:: python |
| |
| ubuntu_app = await model.deploy( |
| 'ubuntu', |
| application_name='ubuntu', |
| series='trusty', |
| channel='stable', |
| ) |
| |
| unit_a, unit_b = await ubuntu_app.add_units(count=2) |
| |
| |
| Updating Config and Constraints |
| ------------------------------- |
| Example showing how to update configuration and constraints on a deployed |
| application. The `mysql_app` object is an instance of |
| :class:`juju.application.Application`. |
| |
| .. code:: python |
| |
| MB = 1024 * 1024 |
| |
| # Update and check app config |
| await mysql_app.set_config({'tuning-level': 'fast'}) |
| config = await mysql_app.get_config() |
| |
| assert(config['tuning-level']['value'] == 'fast') |
| |
| # update and check app constraints |
| await mysql_app.set_constraints({'mem': 512 * MB}) |
| constraints = await mysql_app.get_constraints() |
| |
| assert(constraints['mem'] == 512 * MB) |
| |
| |
| Adding and Removing Relations |
| ----------------------------- |
| The :meth:`juju.application.Application.add_relation` method returns a |
| :class:`juju.relation.Relation` instance. |
| |
| .. code:: python |
| |
| from juju.model import Model |
| |
| model = Model() |
| await model.connect_current() |
| |
| # Deploy mysql-master application |
| mysql_master = await model.deploy( |
| 'cs:mysql-55', |
| application_name='mysql-master', |
| series='trusty', |
| channel='stable', |
| ) |
| |
| # Deploy mysql-slave application |
| mysql_slave = await model.deploy( |
| 'cs:mysql-55', |
| application_name='mysql-slave', |
| series='trusty', |
| channel='stable', |
| ) |
| |
| # Add the master-slave relation |
| relation = await mysql_master.add_relation( |
| # Name of the relation on the local (mysql-master) side |
| 'master', |
| # Name of the app:relation on the remote side |
| 'mysql-slave:slave', |
| ) |
| |
| # Remove the relation |
| await mysql_master.remove_relation( |
| 'master', |
| 'mysql-slave:slave', |
| ) |