<a id="command-jaas-add-cloud"></a>

# jaas add-cloud

## Summary

Add cloud to specific controller in jimm

## Usage

`juju jaas add-cloud [options] <controller_name> <cloud_name>`

### Options

| Flag                       | Default   | Usage                                                                                |
|----------------------------|-----------|--------------------------------------------------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication                                            |
| `--cloud`                  |           | The path to the cloud’s definition file. The cloud name must be present in the file. |
| `--force`                  | false     | Forces the cloud to be added to the controller                                       |
| `--format`                 | yaml      | Specify output format (json|yaml)                                                    |
| `-o`, `--output`           |           | Specify an output file                                                               |

## Examples

```none
juju add-cloud mycontroller mycloud
juju add-cloud mycontroller mycloud --cloud=./cloud-definition.yaml
```

## Details

Adds the specified cloud to a specific controller on JIMM.

One can specify a cloud definition via a yaml file passed with the –cloud
flag. If the flag is missing, the command will assume the cloud definition
is already known and will error otherwise.

<a id="command-jaas-add-controller-profile"></a>

# jaas add-controller-profile

## Summary

Add a controller profile.

## Usage

`juju jaas add-controller-profile [options] <name>`

### Options

| Flag                       | Default   | Usage                                                                       |
|----------------------------|-----------|-----------------------------------------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication                                   |
| `--file`                   |           | Specify a file-path for the controller profile, use ‘-’ to read from stdin. |
| `--format`                 | yaml      | Specify output format (json|yaml)                                           |
| `-o`, `--output`           |           | Specify an output file                                                      |

## Examples

```none
juju jaas add-controller-profile my-profile --file ./profile.yaml
cat profile.yaml | juju jaas add-controller-profile my-profile --file -
```

## Details

Adds a controller profile.

The controller profile definition is read from a YAML file or from stdin.
The command argument sets the saved profile name.

The YAML schema mirrors the saved controller profile payload:

description: Production AWS bootstrap defaults
juju-version: 3.6
cloud:
name: aws
region:
name: eu-west-1
bootstrap-options:
bootstrap-base: ubuntu@24.04
bootstrap-constraints:
mem: 8G
model-constraints:
arch: amd64
model-default:
logging-config: <root>=INFO
storage-pool:
name: controller-pool
type: ebs
attributes:
volume-type: gp3
bootstrap-config:
controller-service-type: loadbalancer
controller-config:
audit-log-enabled: “true”
controller-model-config:
automatically-retry-hooks: “false”

<a id="command-jaas-add-group"></a>

# jaas add-group

## Summary

Add group to jimm.

## Usage

`juju jaas add-group [options] <name>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | yaml      | Specify output format (json|yaml)         |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju add-group
```

## Details

Adds a group.

<a id="command-jaas-add-model"></a>

# jaas add-model

## Summary

Adds a model to a specific controller.

## Usage

`juju jaas add-model [options] <model name> [cloud|region|(cloud/region)]`

### Options

| Flag                       | Default   | Usage                                                                                                                                     |
|----------------------------|-----------|-------------------------------------------------------------------------------------------------------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication                                                                                                 |
| `-c`, `--controller`       |           | Controller to operate in                                                                                                                  |
| `--config`                 |           | Specify the path to a YAML model configuration file or individual configuration options (`--config config.yaml [--config key=value ...]`) |
| `--credential`             |           | Specify the credential to be used by the model                                                                                            |
| `--no-switch`              | false     | Choose not to switch to the newly created model                                                                                           |
| `--owner`                  |           | Specify the user who will own the model, if not the current user                                                                          |
| `--target-controller`      |           | Target controller for the model                                                                                                           |

## Examples

```none
juju [jaas] add-model mymodel mycloud --target-controller jaas-controller-1
juju [jaas] add-model mymodel us-east-1 --target-controller jaas-controller-1
juju [jaas] add-model mymodel aws/us-east-1 --target-controller jaas-controller-2 --credential mycred
juju [jaas] add-model mymodel --target-controller jaas-controller-3 --config key=value
```

## Details

Adds a model to a specific controller.

This command creates a new hosted model on the specified controller.

<a id="command-jaas-add-permission"></a>

# jaas add-permission

## Summary

Add relation to JIMM.

## Usage

`juju jaas add-permission [options] <object> <relation> <target_object>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `-f`                       |           | file location of JSON encoded tuples      |
| `--format`                 | yaml      | Specify output format (json|yaml)         |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju add-permission user-alice@canonical.com member group-mygroup
juju add-permission group-MyTeam#member admin model-mymodel
juju add-permission -f /path/to/file.yaml
```

## Details

Grants access to a resource.

This command works at a low-level and commands like ‘juju grant’
should be preferred in most cases.

Permissions in JIMM consist of an object, a relation and a target object.
These are used to define access control between resources.

The object and target object must be of the form <tag>-<objectname> or <tag>-<object-uuid>
E.g. “user-Alice” or “controller-MyController”

Certain reserved tags exist to denote specific resource types:

- The user-everyone@external tag represents all users.
- The controller-jimm tag represents the JIMM controller itself.

-f    Read from a file where filename is the location of a JSON encoded file of the form:
[
{
“object”:”user-mike”,
“relation”:”member”,
“target_object”:”group-yellow”
},
{
“object”:”user-alice”,
“relation”:”member”,
“target_object”:”group-yellow”
}
]

Certain constraints apply when creating/removing permissions, namely:
Resources may be one of:

```none
user tag                = "user-<name>"
group tag               = "group-<name>"
idp group tag           = "idpgroup-&lt;id&gt;"
role tag 			    = "role-&lt;name&gt;"
controller tag          = "controller-<name>"
model tag               = "model-<name>"
cloud tag			    = "cloud-&lt;name&gt;"
application-offer tag   = "applicationoffer-<name>"
```

If target_object is a group, the relation can only be:

```none
member
```

If target_object is a role, the relation can only be:

```none
assignee
```

If target_object is a controller, the relation can be one of:

```none
audit_log_viewer (only relevent for the JIMM controller)
can_addmodel
administrator
```

If target_object is a model, the relation can be one of:

```none
reader
writer
administrator
```

If target_object is a cloud, the relation can be one of:

```none
administrator
can_addmodel
```

If target_object is an application offer, the relation can be one of:

```none
reader
consumer
administrator
```

If the object is a group, a userset must be applied by adding #member as follows.
This will grant/revoke access to all users within TeamA:

```none
group-TeamA#member administrator controller-MyController
```

IDP-owned groups use the idpgroup tag and also require the #member userset:

```none
idpgroup-external-team-id#member administrator controller-MyController
```

Similarly if the object is a role, a userset must be applied by adding #member as follows.

```none
role-Auditor#assignee audit_log_viewer controller-MyController
```

<a id="command-jaas-add-role"></a>

# jaas add-role

## Summary

Add role to jimm.

## Usage

`juju jaas add-role [options] <role name>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | yaml      | Specify output format (json|yaml)         |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju add-role myrole
```

## Details

Adds a role.

<a id="command-jaas-bootstrap"></a>

# jaas bootstrap

## Summary

Bootstrap a Juju controller via JIMM

## Usage

`juju jaas bootstrap [options] <cloud name>[/region] <controller name> <juju version>`

### Options

| Flag                       | Default   | Usage                                                                                                                                                                                        |
|----------------------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication                                                                                                                                                    |
| `--bootstrap-base`         |           | Specify the base of the bootstrap machine.                                                                                                                                                   |
| `--bootstrap-constraints`  | []        | Specify bootstrap machine constraints.                                                                                                                                                       |
| `--config`                 |           | Specify a configuration file, or one or more configuration options.     (`--config config.yaml [--config key=value ...])`                                                                    |
| `--constraints`            | []        | Set model constraints                                                                                                                                                                        |
| `--credential`             |           | The name of the cloud credential to use for bootstrapping. Only required if more than one credential is available for the cloud.                                                             |
| `--detach`                 | false     | If set, the command will start the bootstrap job and return immediately with the job ID, without waiting for the job to complete.                                                            |
| `--format`                 | json      | Specify output format (json|yaml)                                                                                                                                                            |
| `--model-default`          |           | Specify a configuration file, or one or more configuration options to be set for all models, unless otherwise specified.     (`--model-default config.yaml [--model-default key=value ...])` |
| `-o`, `--output`           |           | Specify an output file                                                                                                                                                                       |
| `--profile`                |           | Apply a saved controller profile before processing explicit bootstrap flags. Explicit command line values override the profile.                                                              |
| `--storage-pool`           |           | Specify options for an initial storage pool. ‘name’ and ‘type’ are required, plus any additional attributes.     (`--storage-pool pool-config.yaml [--storage-pool key=value ...])`          |

## Examples

```none
juju [jaas] bootstrap <cloud[/region]> <controller name> <controller version>
juju [jaas] bootstrap mycloud/region mycontroller 3.6.8
juju [jaas] bootstrap mycloud/region mycontroller 3.6.8 --profile production-aws
juju [jaas] bootstrap mycloud/region mycontroller 3.6.8 --config controller-service-type=loadbalancer
juju [jaas] bootstrap mycloud/region mycontroller 3.6.8 --bootstrap-base ubuntu@24.04 --bootstrap-constraints mem=8G --constraints arch=amd64
juju [jaas] bootstrap mycloud/region mycontroller 3.6.8 --storage-pool name=controller-pool --storage-pool type=ebs --config audit-log-enabled=true
```

## Details

Requests the JIMM server to bootstrap a Juju controller.
The controller will be created asychronously on the specificed
cloud and region.

Saved controller profiles can be applied with –profile. The profile’s saved
cloud definition and bootstrap options are used as defaults, and any explicit
command line arguments or flags override those saved values.

By default the command will wait for the bootstrap job to complete
while printing the job logs. Note that the logs will not follow the
–output flag and will always be printed to stdout. This can allow
you to send the initial output with the job ID to a file, while the
logs are streamed to stdout.

Use the –detach flag to start the bootstrap job and return immediately,
printing only the job ID, without waiting for the job to complete.

The final argument, version, denotes the Juju controller to be bootstrapped.

Config options for the bootstrap process can be specified via one or more
–config options. Each –config option can either be a path to a YAML file
containing config options, or a key=value pair. If multiple –config options
are specified, they will be merged together, with later options taking
precedence over earlier ones. Key=value pairs will take precedence over
file contents.

These config options must match the config options supported by the Juju CLI
for the version of Juju being bootstrapped. See the Juju documentation for
the version specified for the full list of supported bootstrap config
options. Additional bootstrap settings can be supplied with –bootstrap-base,
–bootstrap-constraints, –constraints, –model-default, and –storage-pool,
these align with the corresponding Juju CLI options.

Note that some config options will be automatically set but can be overriden.
These are:

- login-token-refresh-url

Bootstrapping to a k8s cluster requires that the service set up to handle
requests to the controller be accessible outside the cluster. Typically this
means a service type of LoadBalancer is needed, and Juju does create such a
service if it knows it is supported by the cluster. This is performed by
interrogating the cluster for a well known managed deployment such as microk8s,
GKE or EKS.

See the Juju bootstrap documentation for more details and how to configure
bootstrap for a Kubernetes cluster Juju does not recognise.

Note that JIMM will internally do the following:

- download the juju CLI matching the desired controller version
- bootstrap a new controller
- register the controller with JIMM

<a id="command-jaas-bootstrap-status"></a>

# jaas bootstrap-status

**Aliases:** destroy-status

## Summary

Displays logs for a bootstrap/destroy job

## Usage

`juju jaas bootstrap-status [options] <job id>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `-f`                       | false     | follow the logs                           |

## Examples

```none
juju bootstrap-status <id>
juju destroy-status <id>
```

## Details

Displays logs for a bootstrap or destroy-controller job.

<a id="command-jaas-bootstrap-stop"></a>

# jaas bootstrap-stop

## Summary

Stop an in-progress bootstrap job

## Usage

`juju jaas bootstrap-stop [options] <job id>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |

## Examples

```none
juju bootstrap-stop <id>
```

## Details

Stop a bootstrap job.

<a id="command-jaas-check-permission"></a>

# jaas check-permission

## Summary

Check access to a resource.

## Usage

`juju jaas check-permission [options] <object> <relation> <target_object>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | smart     | Specify output format (json|smart|yaml)   |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju check-permission user-alice@canonical.com administrator controller-aws-controller-1
```

## Details

Verifies access to a resource.

<a id="command-jaas-controllers"></a>

# jaas controllers

**Aliases:** list-controllers

## Summary

Lists all controllers known to JIMM.

## Usage

`juju jaas controllers [options] `

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | yaml      | Specify output format (json|yaml)         |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju controllers
juju controllers --format json
```

## Details

Displays controller information for all controllers known to JIMM.

For JAAS admins, this will also display controllers that are in the process of being bootstrapped.

<a id="command-jaas-destroy-controller"></a>

# jaas destroy-controller

## Summary

Destroy a Juju controller via JIMM

## Usage

`juju jaas destroy-controller [options] <controller name>`

### Options

| Flag                       | Default   | Usage                                                                                                                                      |
|----------------------------|-----------|--------------------------------------------------------------------------------------------------------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication                                                                                                  |
| `--detach`                 | false     | If set, the command will start the destroy-controller job and return immediately with the job ID, without waiting for the job to complete. |
| `--format`                 | yaml      | Specify output format (json|yaml)                                                                                                          |
| `--no-prompt`              | false     | If set, the command will not prompt the user for the controller name before proceeding                                                     |
| `-o`, `--output`           |           | Specify an output file                                                                                                                     |

## Examples

```none
juju [jaas] destroy-controller <controller name>
juju [jaas] destroy-controller mycontroller
juju [jaas] destroy-controller mycontorller --no-prompt
```

## Details

Requests the JIMM server to destroy a Juju controller.
The controller will be destroyed asynchronously.

By default the command will wait for the destroy-controller job to complete
while printing the job logs. Note that the logs will not follow the
–output flag and will always be printed to stdout. This can allow
you to send the initial output with the job ID to a file, while the
logs are streamed to stdout.

Use the –detach flag to start the bootstrap job and return immediately,
printing only the job ID, without waiting for the job to complete.

The argument denotes the name of the Juju controller to be destroyed.

Note that JIMM will internally do the following:

- download the juju CLI matching the controller version
- destroy the controller
- unregister the controller from JIMM

Destroying controllers on k8s clouds will only work on uju 3.6.10 or newer.
As a workaround, you can first unregister the controller and then destroy
it separately.

<a id="command-jaas-documentation"></a>

# jaas documentation

## Summary

Generate the documentation for all commands

## Usage

`juju jaas documentation [options] --out <target-folder> --no-index --split --url <base-url> --discourse-ids <filepath>`

### Options

| Flag              | Default   | Usage                                                                                    |
|-------------------|-----------|------------------------------------------------------------------------------------------|
| `--discourse-ids` |           | File containing a mapping of commands and their discourse ids                            |
| `--no-index`      | false     | Do not generate the commands index                                                       |
| `--out`           |           | Documentation output folder if not set the result is displayed using the standard output |
| `--split`         | false     | Generate a separate Markdown file for each command                                       |
| `--url`           |           | Documentation host URL                                                                   |

## Examples

```none
juju documentation
juju documentation --split 
juju documentation --split --no-index --out /tmp/docs
```

To render markdown documentation using a list of existing
commands, you can use a file with the following syntax

```none
command1: id1
command2: id2
commandN: idN
```

For example:

```none
add-cloud: 1183
add-secret: 1284
remove-cloud: 4344
```

Then, the urls will be populated using the ids indicated
in the file above.

```none
juju documentation --split --no-index --out /tmp/docs --discourse-ids /tmp/docs/myids
```

## Details

This command generates a markdown formatted document with all the commands, their descriptions, arguments, and examples.

<a id="command-jaas-grant-audit-log"></a>

# jaas grant-audit-log

## Summary

Grants access to audit logs.

## Usage

`juju jaas grant-audit-log [options] <username>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |

## Examples

```none
juju grant-audit-log <username>
```

## Details

Grants a user access to read audit logs.

<a id="command-jaas-help"></a>

# jaas help

## Summary

Show help on a command or other topic.

## Usage

`juju jaas help [flags] [topic]`

## Details

See also: topics

<a id="command-jaas-import-model"></a>

# jaas import-model

**Aliases:** register-model

## Summary

Import a model to jimm.

## Usage

`juju jaas import-model [options] <controller name> <model uuid>`

### Options

| Flag                       | Default   | Usage                                      |
|----------------------------|-----------|--------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication  |
| `--owner`                  |           | switch the model owner to the desired user |

## Examples

```none
juju import-model mycontroller ac30d6ae-0bed-4398-bba7-75d49e39f189
juju import-model mycontroller ac30d6ae-0bed-4398-bba7-75d49e39f189 --owner user@canonical.com
```

## Details

Imports a model running on a controller into JIMM’s state.

When importing, it is necessary for JIMM to contain a set of cloud credentials
that represent a user’s access to the incoming model’s cloud.

The –owner command is necessary when importing a model created by a
local user and it will switch the model owner to the desired external user.

<a id="command-jaas-list-audit-events"></a>

# jaas list-audit-events

**Aliases:** audit-events

## Summary

Displays audit events

## Usage

`juju jaas list-audit-events [options] `

### Options

| Flag                       | Default   | Usage                                                                     |
|----------------------------|-----------|---------------------------------------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication                                 |
| `--after`                  |           | display events that happened after a specified time, formatted as RFC3339 |
| `--before`                 |           | display events that happened before specified time, formatted as RFC3339  |
| `--format`                 | yaml      | Specify output format (json|tabular|yaml)                                 |
| `--limit`                  | 0         | limit the maximum number of returned audit events                         |
| `--method`                 |           | display events for a specific method call                                 |
| `--model`                  |           | display events for a specific model (model name is controller/model)      |
| `-o`, `--output`           |           | Specify an output file                                                    |
| `--offset`                 | 0         | offset the set of returned audit events                                   |
| `--reverse`                | false     | reverse the order of logs, showing the most recent first                  |
| `--user-tag`               |           | display events performed by authenticated user                            |

## Examples

```none
juju list-audit-events --after 2020-01-01T15:00:00 --before 2020-01-01T15:00:00 --user-tag user@canonical.com --limit 50
juju list-audit-events --method CreateModel
juju audit-events --after 2020-01-01T15:00:00 --format yaml
```

## Details

Returns audit log events.

<a id="command-jaas-list-controller-profiles"></a>

# jaas list-controller-profiles

## Summary

List saved controller profiles.

## Usage

`juju jaas list-controller-profiles [options] `

### Options

| Flag                       | Default   | Usage                                                            |
|----------------------------|-----------|------------------------------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication                        |
| `--format`                 | yaml      | Specify output format (json|tabular|yaml)                        |
| `--juju-version`           |           | Only return profiles compatible with the specified Juju version. |
| `-o`, `--output`           |           | Specify an output file                                           |

## Examples

```none
juju jaas list-controller-profiles
juju jaas list-controller-profiles --juju-version 3.6.4
```

## Details

Lists saved controller profiles.

<a id="command-jaas-list-groups"></a>

# jaas list-groups

**Aliases:** groups

## Summary

List all groups.

## Usage

`juju jaas list-groups [options] `

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | yaml      | Specify output format (json|yaml)         |
| `--limit`                  | 0         | The maximum number of groups to return    |
| `-o`, `--output`           |           | Specify an output file                    |
| `--offset`                 | 0         | The offset to use when requesting groups  |

## Examples

```none
juju list-groups
```

## Details

Lists all groups.

<a id="command-jaas-list-migration-targets"></a>

# jaas list-migration-targets

## Summary

List migration targets for internal model migration.

## Usage

`juju jaas list-migration-targets [options] <model uuid>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | yaml      | Specify output format (json|yaml)         |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju list-migration-targets bb933db6-b151-417f-9a62-e3e80b4ebc9b
```

## Details

Requests a list of controllers connected to JIMM that are valid migration
targets for the specified model.

This is useful to obtain a filtered list of controllers that meets the following
criteria:

- The controller is not the current controller for the model.
- The controller can deploy to the the same cloud/region as the current controller.
- The controller is running a compatible Juju version i.e. newer than or equal to
  the current controller.

<a id="command-jaas-list-permissions"></a>

# jaas list-permissions

**Aliases:** permissions

## Summary

List relations.

## Usage

`juju jaas list-permissions [options] `

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | yaml      | Specify output format (json|tabular|yaml) |
| `-o`, `--output`           |           | Specify an output file                    |
| `--object`                 |           | relation object                           |
| `--relation`               |           | relation name                             |
| `--resolve`                | true      | resolves UUIDs to human readable tags     |
| `--target`                 |           | relation target object                    |

## Examples

List all permissions

```none
juju list-permissions
```

List permissions where the target object match

```none
juju list-permissions --target model-mymodel
```

List permissions where the target object and relation match

```none
juju list-permissions --target model-mymodel  --relation admin
```

## Details

List permissions known to JIMM. Using the “target”, “relation” and “object” flags,
only those permissions matching the filter will be returned.

<a id="command-jaas-list-roles"></a>

# jaas list-roles

**Aliases:** roles

## Summary

List all roles.

## Usage

`juju jaas list-roles [options] `

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | yaml      | Specify output format (json|yaml)         |
| `--limit`                  | 0         | The maximum number of roles to return     |
| `-o`, `--output`           |           | Specify an output file                    |
| `--offset`                 | 0         | The offset to use when requesting roles   |

## Examples

```none
juju list-roles list
```

## Details

Lists all roles.

<a id="command-jaas-migrate"></a>

# jaas migrate

## Summary

Migrate models to JAAS, targetting the desired managed controller.

## Usage

`juju jaas migrate [options] <model-name> <jaas-name>`

### Options

| Flag                       | Default   | Usage                                                                   |
|----------------------------|-----------|-------------------------------------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication                               |
| `--backing-controller`     |           | Specify the name of the controller that will host the model in JIMM.    |
| `--format`                 | yaml      | Specify output format (json|yaml)                                       |
| `-o`, `--output`           |           | Specify an output file                                                  |
| `--user-mapping`           |           | Specify a comma-separated user mapping of local users to external users |

## Examples

```none
juju migrate alice/my-model my-jaas --backing-controller=controller-1 --user-mapping=./user-mapping.yaml
```

## Details

The migrate command migrates a model to JIMM.

This command is useful to take a model that is already running on a Juju controller
and migrate it to JIMM. During this process JIMM will modify the details of the model
to remove any local users with access to the model and replace the model owner with
an external user i.e. from alice -> [alice@canonical.com](mailto:alice@canonical.com).

In order to determine the new model owner and to handle any existing application-offers
that have already been consumed with local users, you must specify a user mapping file
with the –user-mapping flag. This should point to a yaml file with a mapping of local
users to external users.
For example:

my-user-mapping.yaml:
‘’’
alice: [alice@canonical.com](mailto:alice@canonical.com)
bob: [bob@canonical.com](mailto:bob@canonical.com)
‘’’

The mapping must contain entries for all users that have access to the model and any offers
hosted within that model.
You can use the “juju show-model <model-name>” command to see the users that have access to
the model.
You can also use the “juju list-offers” command alongside “juju show-offer <offer-name>”
to see the users that have access to each offer.

Any users that you do not wish to be mapped must still be included with a null value or empty
string in place of the external user. This indicates that you are intentionally skipping this
local user, for example:
‘’’
alice: [alice@canonical.com](mailto:alice@canonical.com)
bob: null # or “”
‘’’

The user mapping is consulted when relations are periodically validated. I.e. if an offer
was consumed by user “alice”, when JIMM validates the relation it will understand that user
“alice” has been mapped and checks that “alice@canonical” still has access to the offer.
Revoking access from “[alice@canonical.com](mailto:alice@canonical.com)” will result in the relation encountering an error.

It may not be possible to know all users that have have consumed offers from a model, but using
“juju show-offer <offer-name> –format yaml” you can see all users that have access to the
offer. This list should help determine which users to map in the user mapping file.

Any tools/scripts that refer to models by their full name (owner/name) will need to be
updated after migration to use the new external username or refer to models by their UUID.

<a id="command-jaas-migrate-internal"></a>

# jaas migrate-internal

## Summary

migrate models to another controller within JAAS

## Usage

`juju jaas migrate-internal [options] <controller name> <model uuid> [<model uuid>...]`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | yaml      | Specify output format (json|yaml)         |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju migrate-internal mycontroller 2cb433a6-04eb-4ec4-9567-90426d20a004 fd469983-27c2-423b-bebf-84f616fb036b ...
juju migrate-internal mycontroller user@domain.com/model-a user@domain.com/model-b ...
juju migrate-internal mycontroller user@domain.com/model-a fd469983-27c2-423b-bebf-84f616fb036b ...
```

## Details

The migrate-internal command migrates a model(s) between two controllers
in your JAAS system. This performs a model migration, but is named
“migrate-internal” to avoid confusion with the “migrate” command which migrates
a model to JAAS.

You may specify a model name (of the form owner/name) or model UUID.

<a id="command-jaas-model-status"></a>

# jaas model-status

## Summary

Displays full model status

## Usage

`juju jaas model-status [options] <model uuid>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | yaml      | Specify output format (json|yaml)         |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju model-status 2cb433a6-04eb-4ec4-9567-90426d20a004
juju model-status 2cb433a6-04eb-4ec4-9567-90426d20a004 --format yaml
```

## Details

Displays full model status.

<a id="command-jaas-models"></a>

# jaas models

**Aliases:** list-models

## Summary

Lists all models accessible via JIMM.

## Usage

`juju jaas models [options] `

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | yaml      | Specify output format (json|tabular|yaml) |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju models
juju models --format json
```

## Details

Displays model and controller information for all models accessible to the authenticated user.

<a id="command-jaas-purge-audit-logs"></a>

# jaas purge-audit-logs

## Summary

purge audit logs from the database before the given date

## Usage

`juju jaas purge-audit-logs [options] <date>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | yaml      | Specify output format (json|yaml)         |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju purge-audit-logs 2021-02-03
juju purge-audit-logs 2021-02-03T00
juju purge-audit-logs 2021-02-03T15:04:05Z
```

## Details

Purges logs from the database before the given date.

The provided date must be formatted as an ISO8601 date string.

<a id="command-jaas-query-models"></a>

# jaas query-models

## Summary

Query model statuses

## Usage

`juju jaas query-models [options] <query>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | json      | Specify output format (json|yaml)         |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju query-models '.applications | with_entries(select(.key=="nginx-ingress-integrator"))'
```

## Details

Queries all models available to the current user performing the
query against each model status individually, returning the
collated query responses for each model.

The query runs against the output of “juju status –format json”,
as such you can format your query against an output like this.

The queries expect a JQ query string.

<a id="command-jaas-recover-model-credential"></a>

# jaas recover-model-credential

## Summary

Recover a lost cloud credential from a controller.

## Usage

`juju jaas recover-model-credential [options] [<cloud>/<owner>/<name>]`

### Options

| Flag                       | Default   | Usage                                                           |
|----------------------------|-----------|-----------------------------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication                       |
| `--all`                    | false     | recover every cloud credential known to JIMM                    |
| `--dry-run`                | false     | check that credentials can be fetched without writing them back |

## Examples

```none
jaas recover-model-credential aws/alice@canonical.com/default
jaas recover-model-credential cloudcred-aws_alice@canonical.com_default
jaas recover-model-credential --all
jaas recover-model-credential --all --dry-run
```

## Details

Recovers a lost cloud credential (for example after a Vault outage) by fetching
the credential’s secret contents from a controller that hosts a model using the
credential, and storing them back into JIMM’s credential store.

This is a disaster-recovery operation and requires JIMM admin access. For a
credential to be recoverable:

- its metadata must still exist in JIMM’s database,
- at least one model must still be using it, and
- the controller hosting that model must be reachable and must still return
  the credential’s secrets (some providers, e.g. LXD ‘certificate’
  credentials, never expose secrets over the API and cannot be recovered).

Only cloud credentials can be recovered this way. Controller credentials (the
login JIMM uses to reach a Juju controller) cannot be read back from the
controller and must be reset separately.

The credential is identified either by its short form “<cloud>/<owner>/<name>”
or by its full tag “cloudcred-<cloud> *<owner>*<name>”.

Use –all to recover every cloud credential known to JIMM in one pass.

Use –dry-run to verify that credentials can be fetched from their controllers
without actually writing anything back to JIMM’s credential store. The output
shows which credentials would be recovered.

<a id="command-jaas-register-controller"></a>

# jaas register-controller

## Summary

Add controller to jimm

## Usage

`juju jaas register-controller [options] <filepath>`

### Options

| Flag                       | Default   | Usage                                                                                                |
|----------------------------|-----------|------------------------------------------------------------------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication                                                            |
| `--dry-run`                | false     | Dry-run enabled will only print the controller details.                                              |
| `--file`                   |           | Specify a file-path for controller details, use ‘-’ to read from stdin.                              |
| `--format`                 | yaml      | Specify output format (json|yaml)                                                                    |
| `--local`                  | false     | If local flag is specified, then the local API addresses and CA cert of the controller will be used. |
| `-o`, `--output`           |           | Specify an output file                                                                               |
| `--public-address`         |           | Specify a custom public address to use for dialing the controller.                                   |
| `--tls-hostname`           |           | Specify the hostname for TLS verification.                                                           |

## Examples

```none
juju register-controller mycontroller
juju register-controller mycontroller --local
```

## Details

Registers a controller with JIMM.

Using the controller name provided, this command will inspect your
Juju client store for details on the specified controller.

Note that by default, this command assumes the controller has the public-hostname
field set, which will define the preferred address JIMM will use to contact the
controller. Use of a public address will also ignore any custom CA cert in your
local client store and assumes the server is secured with a public certificate.

Use the –local flag if the server is not configured with a public address or to
ignore the controller’s public-hostname and use the custom CA of the controller.

A yaml formatted file can also be used as input for cases where the controller
is not available on the client. Using the –file will validate that the provided
controller name matches the name in the yaml file.
Using –file will ignore other flags like –public-address and –local.

Use the –dry-run flag to generate a sample file without registering the controller.
This can be used later as input to register-controller.

<a id="command-jaas-remove-cloud"></a>

# jaas remove-cloud

## Summary

Remove cloud from specific controller in jimm

## Usage

`juju jaas remove-cloud [options] <controller_name> <cloud_name>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | yaml      | Specify output format (json|yaml)         |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju remove-cloud mycontroller mycloud
```

## Details

Removes the specified cloud from the specified controller in JIMM.

<a id="command-jaas-remove-controller-profile"></a>

# jaas remove-controller-profile

## Summary

Remove a saved controller profile.

## Usage

`juju jaas remove-controller-profile [options] <name>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--force`                  | false     | delete controller profile without prompt  |

## Examples

```none
juju jaas remove-controller-profile my-profile
juju jaas remove-controller-profile my-profile --force
```

## Details

Removes a saved controller profile.

<a id="command-jaas-remove-group"></a>

# jaas remove-group

## Summary

Remove a group.

## Usage

`juju jaas remove-group [options] <name>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--force`                  | false     | delete group without prompt               |
| `--format`                 | smart     | Specify output format (smart)             |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju remove-group mygroup
```

## Details

Removes a group.

<a id="command-jaas-remove-permission"></a>

# jaas remove-permission

## Summary

Remove relation from JIMM.

## Usage

`juju jaas remove-permission [options] <object> <relation> <target_object>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `-f`                       |           | file location of JSON encoded tuples      |
| `--format`                 | yaml      | Specify output format (json|yaml)         |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju remove-permission user-alice@canonical.com member group-mygroup
juju remove-permission group-MyTeam#member admin model-mymodel
juju remove-permission -f /path/to/file.yaml
```

## Details

Revokes access to a resource.

This command works at a low-level and commands like ‘juju grant’
should be preferred in most cases.

Permissions in JIMM consist of an object, a relation and a target object.
These are used to define access control between resources.

The object and target object must be of the form <tag>-<objectname> or <tag>-<object-uuid>
E.g. “user-Alice” or “controller-MyController”

Certain reserved tags exist to denote specific resource types:

- The user-everyone@external tag represents all users.
- The controller-jimm tag represents the JIMM controller itself.

-f    Read from a file where filename is the location of a JSON encoded file of the form:
[
{
“object”:”user-mike”,
“relation”:”member”,
“target_object”:”group-yellow”
},
{
“object”:”user-alice”,
“relation”:”member”,
“target_object”:”group-yellow”
}
]

Certain constraints apply when creating/removing permissions, namely:
Resources may be one of:

```none
user tag                = "user-<name>"
group tag               = "group-<name>"
idp group tag           = "idpgroup-&lt;id&gt;"
role tag 			    = "role-&lt;name&gt;"
controller tag          = "controller-<name>"
model tag               = "model-<name>"
cloud tag			    = "cloud-&lt;name&gt;"
application-offer tag   = "applicationoffer-<name>"
```

If target_object is a group, the relation can only be:

```none
member
```

If target_object is a role, the relation can only be:

```none
assignee
```

If target_object is a controller, the relation can be one of:

```none
audit_log_viewer (only relevent for the JIMM controller)
can_addmodel
administrator
```

If target_object is a model, the relation can be one of:

```none
reader
writer
administrator
```

If target_object is a cloud, the relation can be one of:

```none
administrator
can_addmodel
```

If target_object is an application offer, the relation can be one of:

```none
reader
consumer
administrator
```

If the object is a group, a userset must be applied by adding #member as follows.
This will grant/revoke access to all users within TeamA:

```none
group-TeamA#member administrator controller-MyController
```

IDP-owned groups use the idpgroup tag and also require the #member userset:

```none
idpgroup-external-team-id#member administrator controller-MyController
```

Similarly if the object is a role, a userset must be applied by adding #member as follows.

```none
role-Auditor#assignee audit_log_viewer controller-MyController
```

<a id="command-jaas-remove-role"></a>

# jaas remove-role

## Summary

Remove a role.

## Usage

`juju jaas remove-role [options] <role name>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | smart     | Specify output format (smart)             |
| `-o`, `--output`           |           | Specify an output file                    |
| `-y`                       | false     | delete role without prompt                |

## Examples

```none
juju remove-role remove myrole
```

## Details

Removes a role.

<a id="command-jaas-rename-group"></a>

# jaas rename-group

## Summary

Rename a group.

## Usage

`juju jaas rename-group [options] <name> <new name>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |

## Examples

```none
juju rename-group mygroup newgroup
```

## Details

Renames a group.

<a id="command-jaas-rename-role"></a>

# jaas rename-role

## Summary

Rename a role.

## Usage

`juju jaas rename-role [options] <role name> <new role name>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |

## Examples

```none
juju rename-role myrole newrolename
```

## Details

Renames a role.

<a id="command-jaas-revoke-audit-log"></a>

# jaas revoke-audit-log

## Summary

revokes access to audit logs.

## Usage

`juju jaas revoke-audit-log [options] <user>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |

## Examples

```none
juju revoke-audit-log user@canonical.com
```

## Details

Revokes user access to audit logs.

<a id="command-jaas-set-controller-deprecated"></a>

# jaas set-controller-deprecated

## Summary

Sets controller deprecated status.

## Usage

`juju jaas set-controller-deprecated [options] <controller name>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | yaml      | Specify output format (json|yaml)         |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju set-controller-deprecated mycontroller
```

## Details

Sets the deprecated status of a controller.

<a id="command-jaas-show-controller"></a>

# jaas show-controller

## Summary

Displays information about a controller

## Usage

`juju jaas show-controller [options] <controller name>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | yaml      | Specify output format (json|yaml)         |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju jaas show-controller my-controller
juju jaas show-controller my-controller --format json
```

## Details

Displays information about a controller known to JIMM.

For controllers with an active bootstrap status, some fields will be empty/missing.

<a id="command-jaas-show-controller-profile"></a>

# jaas show-controller-profile

## Summary

Show a saved controller profile.

## Usage

`juju jaas show-controller-profile [options] <name>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | yaml      | Specify output format (json|yaml)         |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju jaas show-controller-profile my-profile
juju jaas show-controller-profile my-profile --format json
```

## Details

Shows a saved controller profile.

<a id="command-jaas-show-model"></a>

# jaas show-model

## Summary

Displays information about a model and its controller

## Usage

`juju jaas show-model [options] <model>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | tabular   | Specify output format (json|tabular|yaml) |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
jaas show-model 2cb433a6-04eb-4ec4-9567-90426d20a004
jaas show-model alice@canonical.com/my-model
jaas show-model alice@canonical.com/my-model --format json
jaas show-model alice@canonical.com/my-model --format yaml
```

## Details

Displays information about which controller the specified model is running on.

The model can be specified using either:

- Model UUID (e.g., “2cb433a6-04eb-4ec4-9567-90426d20a004”)
- Owner and model name (e.g., “[alice@canonical.com](mailto:alice@canonical.com)/my-model”)

The output includes the model name, model UUID, controller name, and controller UUID.

<a id="command-jaas-unregister-controller"></a>

# jaas unregister-controller

## Summary

Remove controller from jimm

## Usage

`juju jaas unregister-controller [options] <name>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--force`                  | false     | force unregister a controller             |
| `--format`                 | yaml      | Specify output format (json|yaml)         |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju unregister-controller mycontroller
juju unregister-controller mycontroller --force
```

## Details

Deregisters a controller from JIMM.

<a id="command-jaas-update-controller-profile"></a>

# jaas update-controller-profile

## Summary

Update a saved controller profile.

## Usage

`juju jaas update-controller-profile [options] <name>`

### Options

| Flag                       | Default   | Usage                                                                       |
|----------------------------|-----------|-----------------------------------------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication                                   |
| `--file`                   |           | Specify a file-path for the controller profile, use ‘-’ to read from stdin. |
| `--format`                 | yaml      | Specify output format (json|yaml)                                           |
| `-o`, `--output`           |           | Specify an output file                                                      |

## Examples

```none
juju jaas update-controller-profile my-profile --file ./profile.yaml
cat profile.yaml | juju jaas update-controller-profile my-profile --file -
```

## Details

Updates a saved controller profile.

The controller profile definition is read from a YAML file or from stdin.
The same YAML schema accepted by add-controller-profile is used here.

The command argument sets the profile name.

<a id="command-jaas-update-migrated-model"></a>

# jaas update-migrated-model

## Summary

Update the controller running a model.

## Usage

`juju jaas update-migrated-model [options] <controller name> <model uuid>`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |

## Examples

```none
juju update-migrated-model mycontroller e0bf3abf-7029-4e48-9c26-68a7b6e02947
```

## Details

Updates a model known to JIMM that has been migrated
externally to a different JAAS controller.

<a id="command-jaas-upgrade-controller"></a>

# jaas upgrade-controller

## Summary

Upgrades the agent of a backing Juju controller

## Usage

`juju jaas upgrade-controller [options] <controller-name>`

### Options

| Flag                       | Default   | Usage                                                              |
|----------------------------|-----------|--------------------------------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication                          |
| `--agent-stream`           |           | Check this agent stream for upgrades                               |
| `--dry-run`                | false     | Don’t change anything, just report what version would be chosen    |
| `--ignore-agent-versions`  | false     | Don’t check if all agents have already reached the current version |
| `--target-version`         |           | Upgrade to this specific version                                   |

## Examples

```none
jaas upgrade-controller mycontroller
jaas upgrade-controller mycontroller --target-version 3.6.8
jaas upgrade-controller mycontroller --dry-run
```

## Details

Upgrades the Juju agent running on the named backing controller to the next
available patch release. If –target-version is specified, upgrades to that
exact version instead.

The command requires the caller to be a JIMM admin.

<a id="command-jaas-upgrade-to"></a>

# jaas upgrade-to

## Summary

Upgrades a model

## Usage

`juju jaas upgrade-to [options] <controller-name> <model-uuid> [<model-uuid>...]`

### Options

| Flag                       | Default   | Usage                                     |
|----------------------------|-----------|-------------------------------------------|
| `-B`, `--no-browser-login` | false     | Do not use web browser for authentication |
| `--format`                 | tabular   | Specify output format (json|tabular|yaml) |
| `-o`, `--output`           |           | Specify an output file                    |

## Examples

```none
juju upgrade-to myController 2cb433a6-04eb-4ec4-9567-90426d20a004
juju upgrade-to myController 2cb433a6-04eb-4ec4-9567-90426d20a004 83cf3d62-ab16-4cb2-8e2f-df111fca1a32
```

## Details

Upgrades models by migrating them to a specific controller
and upgrades the models to the controller’s version.
