(ref-ams-configuration)=
# AMS configuration
The Anbox Management Service (AMS) provides various configuration items to customise its behaviour. The following table lists the available configuration items and their meaning.
| Name
*(Type, Default)* | Description |
|-----|-----------------------|
| `agent.api.fingerprint`
*(string, N/A)* | Fingerprint of certificate in the AMS trust store which is trusted when communicating with the stream agent|
| `agent.api.token`
*(string, N/A)* | Token to be used for API authentication with stream agent|
| `agent.api.url`
*(string, N/A)* | URL for stream agent API endpoint.|
| `application.addons`
*(string, N/A)* | Comma-separated list of addons that every application managed by AMS will use. See {ref}`howto-enable-addons-globally`. |
| `application.auto_publish`
*(boolean, True)* | If set to `true`, AMS automatically published new application versions when the bootstrap process is finished. `false` disables this. See {ref}`sec-publish-app-versions`. |
| `application.auto_update`
*(boolean, True)* | If set to `true`, AMS automatically updates applications whenever any dependencies (parent image, addons, global configuration) change. `false` disables this. See {ref}`sec-configure-automatic-app-updates`. |
| `application.default_abi`
*(string, N/A)* | Default Android ABI that applications should use. See [Android ABIs](https://developer.android.com/ndk/guides/abis) for a list of available ABIs.|
| `application.max_published_versions`
*(integer, 3)* | Maximum number of published versions per application. If the number of versions of an application exceeds this configuration, AMS will automatically clean up older versions.|
| `container.apt_mirror`
*(string, N/A)*
*(Deprecated in 1.20)* | *(Deprecated)* APT mirror to use within the containers. This configuration item is deprecated since 1.20, use `instance.apt_mirror` instead.|
| `container.default_platform`
*(string, null)*
*(Deprecated in 1.20)* | *(Deprecated)* The name of the platform that Anbox Cloud uses by default to launch containers. This configuration item is deprecated since 1.20, use `instance.default_platform` instead.|
| `container.features`
*(string, N/A)*
*(Deprecated in 1.20)* | "*(Deprecated)* Comma-separated list of features to enable. This configuration item is deprecated since 1.20, use `instance.features` instead."|
| `container.security_updates`
*(boolean, True)*
*(Deprecated in 1.20)* | *(Deprecated)* If set to `true`, automatic Ubuntu security updates are applied during the application bootstrap process. `false` disables this.|
| `core.debug_address`
*(string, N/A)* | Address used to expose debug information on|
| `core.proxy_http`
*(string, N/A)* | HTTP proxy to use for HTTP requests that AMS performs.|
| `core.proxy_https`
*(string, N/A)* | HTTPS proxy to use for HTTPS requests that AMS performs.|
| `core.proxy_ignore_hosts`
*(string, N/A)* | Comma-separated list that defines the hosts for which a configured proxy is not used.|
| `core.trust_password`
*(string, N/A)* | Trust password used to add remote clients. AMS does not expose the actual password but only the fact that it is set or not.|
| `cpu.limit_mode`
*(string, scheduler)* | The mode AMS uses to limit CPU access for an instance. Possible values are: `scheduler`, `pinning`. See {ref}`exp-performance`. |
| `gpu.allocation_mode`
*(string, single)* | Method of allocating GPUs: `all` tells AMS to allocate all available GPUs on a system to an instance. `single` allocates only a single GPU.|
| `gpu.type`
*(string, none)* | Type of GPU: `none`, `intel`, `nvidia`, `amd`|
| `images.allow_insecure`
*(boolean, N/A)* | If set to `true`, AMS allows accepting untrusted certificates provided by the configured image server."|
| `images.auth`
*(string, N/A)* | Authentication details for AMS to access the image server. When reading this configuration, a Boolean value that indicates whether the item is set is returned, to avoid exposing credentials.|
| `images.update_interval`
*(string, 5m)* | Frequency of image updates (for example: 1h, 30m).|
| `images.url`
*(string, https://images.anbox-cloud.io/stable/)* | URL of the image server to use.|
| `images.version_lockstep`
*(boolean, True)* | Whether to put the version of the latest pulled image and the AMS version in a lockstep. This ensures that a deployment is not automatically updated to newer image versions if AMS is still at an older version. This only applies for new major and minor but not patch version updates.|
| `instance.apt_mirror`
*(string, N/A)* | APT mirror to use within the instances.|
| `instance.default_platform`
*(string, null)* | The name of the platform that Anbox Cloud uses by default to launch instances.|
| `instance.features`
*(string, N/A)* | Comma-separated list of features to enable.|
| `instance.network_proxy`
*(string, N/A)* | Network proxy to use inside the instances. This value must have the format `:`|
| `instance.security_updates`
*(boolean, True)* | If set to `true`, automatic Ubuntu security updates are applied during the application bootstrap process. `false` disables this.|
| `load_balancer.url`
*(string, N/A)* | URL of the load balancer behind which AMS sits. The URL is handed to instances started by AMS to allow them to contact AMS through the load balancer and not via the address of an individual AMS instance.|
| `node.queue_size`
*(integer, 100)* | Maximum size of the queue containing requests to start and stop instances per LXD node. Changing the value requires a restart of AMS.|
| `node.workers_per_queue`
*(integer, 4)* | Number of workers processing instance start and stop requests. Changing the value requires a restart of AMS.|
| `registry.filter`
*(string, N/A)* | Comma-separated list of tags to filter for when applications are fetched from aar. If empty, no filter is applied. See {ref}`exp-aar`. |
| `registry.fingerprint`
*(string, N/A)* | Fingerprint of the certificate that the AAR uses to TLS-secure its HTTPS endpoint. This is used by AMS for mutual TLS authentication with the registry. See {ref}`exp-aar`. |
| `registry.mode`
*(string, pull)* | Mode in which the AAR client in AMS operates: `manual`, `pull`, `push`. See {ref}`exp-aar`. |
| `registry.update_interval`
*(string, 1h)* | Frequency of AAR updates (for example: 1h, 30m). See {ref}`exp-aar`. |
| `registry.url`
*(string, N/A)* | URL of the AAR to use. See {ref}`exp-aar`. |
| `scheduler.strategy`
*(string, spread)* | Strategy that the internal instance scheduler in AMS uses to distribute instances across available LXD nodes: `binpack`, `spread`
Choose a scheduling strategy that best suits your needs:
- `spread` provides a distributed workload, picking the node with the most free resources.
- `binpack` is useful when you are working with a small cluster as it picks the node that is most used until it is out of capacity before moving on to the next node.|
(sec-node-configuration)=
## Node-specific configuration
In a cluster setup, there are configuration items that can be customised for each node. The following table lists the available configuration items and their meaning.
| Name
*(Type, Default)* | Description |
|--------------------------|-------------------------|
| `cpu-allocation-rate`
*(number, N/A)* | CPU allocation rate used for over-committing resources See {ref}`sec-over-committing`. |
| `cpus`
*(integer, N/A)* | Number of CPUs dedicated to instances. |
| `gpu-encoder-slots`
*(integer, N/A)* | Number of GPU encoder slots available on the node. `0` for nodes without GPU `32` for nodes with NVIDIA GPU `10` for nodes with AMD or Intel GPU See {ref}`sec-gpu-slots`. |
| `gpu-slots`
*(integer, N/A)* | Update the number of GPU slots to configure on the node |
| `gpus..encoder-slots`
*(integer, N/A)* | Update the number of GPU encoder slots |
| `gpus..slots`
*(integer, N/A)* | Update the number of the GPU slots available on the Node |
| `memory`
*(string, N/A)* | Update the memory (in GB) for the node |
| `memory-allocation-rate`
*(number, N/A)* | Memory allocation rate used for over-committing resources. See {ref}`sec-over-committing`. |
| `public-address`
*(string, N/A)* | The public, reachable address of the node. |
| `subnet`
*(string, N/A)* | The network subnet of the machine where the node runs. |
| `unscheduable`
*(boolean, N/A)*
*(Deprecated in 1.20)* | DEPRECATED Flag in favour of `unschedulable` flag |
| `unschedulable`
*(boolean, N/A)* | When set to `true`, the node cannot be scheduled, which prevents new instances from being launched on it. |
See {ref}`howto-configure-cluster-nodes` for instructions on how to set these configuration items.
## Objects managed by AMS
AMS manages various objects such as applications, images, instances, nodes and addons.
The object names must adhere to the following criteria:
* Minimum character limit: 3
* Maximum character limit: 255
* Can contain:
- Alphabets (a-z, A-Z)
- Numbers (0-9)
- Allowed special characters: `-` (hyphen), `_` (underscore), `:` (colon), `.` (period).
When you create an instance, the same criteria apply to the following options as well:
* `boot_activity`
* `platform`
* `boot_package`
The object ids are generated by AMS and have a length of 20 characters.