Cross model relations (CMR) enable relations to span models, clouds and controllers. Intended use cases include:
- use a central vault server for shared secrets
- maintaining a data warehouse centrally, making it accessible to others
- using a central identity service, such as Keystone, in multiple models
- using multiple models to support different components of a single OpenStack instance
Example usage
As a simple example, let’s say that we want a single certificate authority to issue certificates for all models under our control. The ~containers/easyrsa charm is well suited for that task. As an implementation detail, it requires very few system resources and therefore we specify very small minimal application constraints:
Step 1: Add model
Issue the add-model command:
juju add-model ca
Output:
Added 'ca' model on <cloud>/<region> with credential <credential> for user <user>
Step 3: Deploy application
Issue the deploy command with the ~containers/easyrsa. (The tilde sigil indicates user account).
juju deploy ~containers/easyrsa --constraints="mem=128 cores=1"
Producing:
Located charm "cs:~containers/easyrsa-278".
Deploying charm "cs:~containers/easyrsa-278".
Step 4: Offer relation
To make the relation available to other models, use juju offer. juju offer requires that the endpoint is specified explicitly, as many charms support multiple relation endpoints.
juju offer easyrsa:client
Output:
Application "easyrsa" endpoints [client] available at "<user>/ca.easyrsa"
Step 5: Check
The export-bundle command produces a YAML file that is able to be used to inspect the entire deployment.
juju export-bundle
series: bionic
applications:
easyrsa:
charm: cs:~containers/easyrsa-278
num_units: 1
to:
- "0"
constraints: cpu-cores=1 mem=128
machines:
"0":
constraints: cpu-cores=1 mem=128
--- # overlay.yaml
applications:
easyrsa:
offers:
easyrsa:
endpoints:
- client
acl:
admin: admin
The overlay.yaml section now includes an offer from the easyrsa application. “Overlay” is a term that originates from “overlay bundles” which enable bundles to be customised without altering the original.
Step 6: Relate from another model
Similar to step 1, we start with a fresh model:
juju add-model message-bus
Produces:
Added 'message-bus' model on <cloud>/<region> with credential <credential> for user <user>
Let’s deploy our dummy workload - a RabbitMQ instance:
juju deploy rabbitmq-server
Located charm "cs:rabbitmq-server-95".
Deploying charm "cs:rabbitmq-server-95".
Now use the consume command to relate the two applications:
juju consume <user>/ca.easyrsa
After a few seconds, you should receive this output:
Added <user>/ca.easyrsa as easyrsa
Check relation status
juju export-bundle
series: bionic
saas:
easyrsa:
url: can-tsm:admin/yaml-ex.easyrsa
applications:
rabbitmq-server:
charm: cs:rabbitmq-server-95
num_units: 1
to:
- "0"
machines:
"0": {}
Learn more
Further reading, including links to discussions about users putting this into practice:
