blob: 1565e5f3301b1c9b1ae1243ab2c6c5aa205edd98 [file] [log] [blame]
Adam Israeldcdf82b2017-08-15 15:26:43 -04001Applications
2============
3For api docs, see :class:`juju.application.Application`.
4
5
6Deploying
7---------
8To deploy a new application, connect a model and then call its
9:meth:`~juju.model.Model.deploy` method. An
10:class:`~juju.application.Application` instance is returned.
11
12.. code:: python
13
14 from juju.model import Model
15
16 model = Model()
17 await model.connect_current()
18
19 mysql_app = await model.deploy(
20 # If a revision number is not included in the charm url,
21 # the latest revision from the Charm Store will be used.
22 'cs:mysql-55',
23 application_name='mysql',
24 series='trusty',
25 channel='stable',
26 config={
27 'tuning-level': 'safest',
28 },
29 constraints={
30 'mem': 256 * MB,
31 },
32 )
33
34
35Deploying a Local Charm
36-----------------------
37To deploy a local charm, pass the charm directory path to
38`Model.deploy()`.
39
40.. code:: python
41
42 from juju.model import Model
43
44 model = Model()
45 await model.connect_current()
46
47 # Deploy a local charm using a path to the charm directory
48 await model.deploy(
49 '/home/tvansteenburgh/src/charms/ubuntu',
50 application_name='ubuntu',
51 series='trusty',
52 )
53
54
55Adding Units
56------------
57To add units to a deployed application, use the
58:meth:`juju.application.Application.add_units` method. A list of the newly
59added units (:class:`~juju.unit.Unit` objects) is returned.
60
61.. code:: python
62
63 ubuntu_app = await model.deploy(
64 'ubuntu',
65 application_name='ubuntu',
66 series='trusty',
67 channel='stable',
68 )
69
70 unit_a, unit_b = await ubuntu_app.add_units(count=2)
71
72
73Updating Config and Constraints
74-------------------------------
75Example showing how to update configuration and constraints on a deployed
76application. The `mysql_app` object is an instance of
77:class:`juju.application.Application`.
78
79.. code:: python
80
81 MB = 1024 * 1024
82
83 # Update and check app config
84 await mysql_app.set_config({'tuning-level': 'fast'})
85 config = await mysql_app.get_config()
86
87 assert(config['tuning-level']['value'] == 'fast')
88
89 # update and check app constraints
90 await mysql_app.set_constraints({'mem': 512 * MB})
91 constraints = await mysql_app.get_constraints()
92
93 assert(constraints['mem'] == 512 * MB)
94
95
96Adding and Removing Relations
97-----------------------------
98The :meth:`juju.application.Application.add_relation` method returns a
99:class:`juju.relation.Relation` instance.
100
101.. code:: python
102
103 from juju.model import Model
104
105 model = Model()
106 await model.connect_current()
107
108 # Deploy mysql-master application
109 mysql_master = await model.deploy(
110 'cs:mysql-55',
111 application_name='mysql-master',
112 series='trusty',
113 channel='stable',
114 )
115
116 # Deploy mysql-slave application
117 mysql_slave = await model.deploy(
118 'cs:mysql-55',
119 application_name='mysql-slave',
120 series='trusty',
121 channel='stable',
122 )
123
124 # Add the master-slave relation
125 relation = await mysql_master.add_relation(
126 # Name of the relation on the local (mysql-master) side
127 'master',
128 # Name of the app:relation on the remote side
129 'mysql-slave:slave',
130 )
131
132 # Remove the relation
133 await mysql_master.remove_relation(
134 'master',
135 'mysql-slave:slave',
136 )