LXD¶
The following page documents the LXD cloud integration in pycloudlib.
Launching Instances¶
Launching instances with LXD only requires an instance name and a release name by default.
lxd.launch('my-instance', 'bionic')
Instances can be initialized or launched. The difference is initializing involves getting the required image and setting up the instance, but not starting it. The following is the same as the above command.
inst = lxd.init('my-instance', 'bionic')
inst.start()
Launch Options¶
Instances can take a large number of settings and options. Consult the API for a full list, however here are a few examples showing different image remotes, ephemeral instance creation, and custom settings.
lxd.launch(
'pycloudlib-ephemeral', 'bionic', image_remote='ubuntu', ephemeral=True
)
lxd.launch(
'pycloudlib-custom-hw', 'ubuntu/xenial', image_remote='images',
network='lxdbr0', storage='default', inst_type='t2.micro', wait=False
)
Snapshots¶
Snapshots allow for saving and reverting to a particular point in time.
instance.snapshot(snapshot_name)
instance.restore(snapshot_name)
Snapshots can at as a base for creating new instances at a pre-configured state. See the cloning section below.
Cloning¶
Cloning instances allows for copying an existing instance or snapshot of an instance to a new container. This is useful when wanting to setup a instance with a particular state and then re-use that state over and over to avoid needing to repeat the steps to get to the initial state.
lxd.launch_snapshot('instance', new_instance_name)
lxd.launch_snapshot('instance\snapshot', new_instance_name)
Unique Operations¶
Enable KVM¶
Enabling KVM to work properly inside a container requires passing the /dev/kvm
device to the container. This can be done by creating a profile and then using that profile when launching instances.
lxc profile create kvm
Add the /dev/kvm
device to the profile.
devices:
kvm:
path: /dev/kvm
type: unix-char
Then launch the instance using the default and the KVM profiles.
lxd.launch(
'pycloudlib-kvm', RELEASE, profile_list=['default', 'kvm']
)
Nested instances¶
To enable nested instances of LXD containers requires making the container a privileged containers. This can be achieved by setting the appropriate configuration options.
lxd.launch(
'pycloudlib-privileged',
'bionic,
config_dict={
'security.nesting': 'true',
'security.privileged': 'true'
}
)