The data source
LXD allows the user to provide custom user-data,
vendor-data, meta-data and network-config to the instance without running
a network service (or even without having a network at all). This datasource
performs HTTP GETs against the LXD socket device which is provided to each
running LXD container and VM as
/dev/lxd/sock and represents all
instance-metadata as versioned HTTP routes such as:
The LXD socket device
/dev/lxd/sock is only present on containers and VMs
when the instance configuration has
security.devlxd configuration setting at initial launch will
ensure that cloud-init uses the NoCloud datasource.
security.devlxd over the life of the container will result in
warnings from cloud-init and cloud-init will keep the originally detected LXD
The LXD datasource is detected as viable by
ds-identify during systemd
generator time when either
/dev/lxd/sock exists or
/sys/class/dmi/id/board_name matches “LXD”.
The LXD datasource provides cloud-init the ability to react to meta-data, vendor-data, user-data and network-config changes and render the updated configuration across a system reboot.
To modify what meta-data, vendor-data or user-data are provided to the
launched container, use either LXD profiles or
lxc launch ... -c <key>="<value>" at initial container launch setting one
of the following keys:
user.meta-data: YAML metadata which will be appended to base meta-data
user.vendor-data: YAML which overrides any meta-data values
user.user-data: YAML which takes preference and overrides both meta-data and vendor-data values
user.any-key: Custom user configuration key and value pairs can be passed to cloud-init. Those keys/values will be present in instance-data which can be used by both #template: jinja #cloud-config templates and the cloud-init query command.
Note: LXD version 4.22 introduced a new scope of config keys prefaced by
cloud-init. which are preferred above the related
By default, network configuration from this datasource will be:
version: 1 config: - type: physical name: eth0 subnets: - type: dhcp control: auto
This datasource is intended to replace NoCloud datasource for LXD instances with a more direct support for LXD APIs instead of static NoCloud seed files.
Network hotplug functionality is supported for the LXD datasource as described in the Events and Updates documentation. As hotplug functionality relies on the cloud provided network metadata, the LXD datasource will only meaningfully react to a hotplug event if it has the configuration necessary to respond to the change has been provided to LXD. Practically, this means that even with hotplug enabled, the default behavior for adding a new virtual NIC will result no change.
To update the configuration to be used by hotplug, first pass the network
configuration via the
user.network-config on older versions).
For example, given an LXD instance named
my-lxd with hotplug enabled and
an LXD bridge named
my-bridge, the following will allow for additional
DHCP configuration of
$ cat /tmp/cloud-network-config.yaml version: 2 ethernets: eth0: dhcp4: true eth1: dhcp4: true $ lxc config set my-lxd cloud-init.network-config="$(cat /tmp/cloud-network-config.yaml)" $ lxc config device add my-lxd eth1 nic name=eth1 nictype=bridged parent=my-bridge Device eth1 added to my-lxd