# Non-interactive configuration via preseed YAML The `lxd init` command supports a `--preseed` command line flag that makes it possible to fully configure LXD daemon settings, storage pools, network devices and profiles, in a non-interactive way. For example, starting from a brand new LXD installation, the command line: ```bash cat <<EOF | lxd init --preseed config: core.https_address: 192.168.1.1:9999 images.auto_update_interval: 15 networks: - name: lxdbr0 type: bridge config: ipv4.address: auto ipv6.address: none EOF ``` will configure the LXD daemon to listen for HTTPS connections on port 9999 of the 192.168.1.1 address, to automatically update images every 15 hours, and to create a network bridge device named `lxdbr0`, which will get assigned an IPv4 address automatically. ## Configure a brand new LXD If you are configuring a brand new LXD instance, then the preseed command will always succeed and apply the desired configuration (as long as the given YAML contains valid keys and values), since there is no existing state that might conflict with the desired one. ## Re-configuring an existing LXD If you are re-configuring an existing LXD instance using the preseed command, then the provided YAML configuration is meant to completely overwrite existing entities (if the provided entities do not exist, they will just be created, as in the brand new LXD case). In case you are overwriting an existing entity you must provide the full configuration of the new desired state for the entity (i.e. the semantics is the same as a `PUT` request in the [RESTful API](rest-api.md)). ### Rollback If some parts of the new desired configuration conflict with the existing state (for example they try to change the driver of a storage pool from `dir` to `zfs`), then the preseed command will fail and will automatically try its best to rollback any change that was applied so far. For example it will delete entities that were created by the new configuration and revert overwritten entities back to their original state. Failure modes when overwriting entities are the same as `PUT` requests in the [RESTful API](rest-api.md). Note however, that the rollback itself might potentially fail as well, although rarely (typically due to backend bugs or limitations). Thus care must be taken when trying to reconfigure a LXD daemon via preseed. ## Default profile Differently from the interactive init mode, the `lxd init --preseed` command line will not modify the default profile in any particular way, unless you explicitly express that in the provided YAML payload. For instance, you will typically want to attach a root disk device and a network interface to your default profile. See below for an example. ## Configuration format The supported keys and values of the various entities are the same as the ones documented in the [RESTful API](rest-api.md), but converted to YAML for easier reading (however you can use JSON too, since YAML is a superset of JSON). Here follows an example of a preseed payload containing most of the possible configuration knobs. You can use it as a template for your own one, and add, change or remove what you need: ```yaml # Daemon settings config: core.https_address: 192.168.1.1:9999 core.trust_password: sekret images.auto_update_interval: 6 # Storage pools storage_pools: - name: data driver: zfs config: source: my-zfs-pool/my-zfs-dataset # Network devices networks: - name: lxd-my-bridge type: bridge config: ipv4.address: auto ipv6.address: none # Profiles profiles: - name: default devices: root: path: / pool: data type: disk - name: test-profile description: "Test profile" config: limits.memory: 2GB devices: test0: name: test0 nictype: bridged parent: lxd-my-bridge type: nic ```