f65bc3b264 | ||
---|---|---|
.. | ||
tasks | ||
templates | ||
README.md |
README.md
Ansible Role: LXD
Installs the latest version of lxd
.
Requirements
- Linux: distributions that support
snap
- Tested on Debian, Ubuntu, Pop!_OS
Role Variables
Settable Variables
lxd:
host: # targets a LXD host installation
preseed:
... # the elements found in an LXD preseed configuration
... # see: https://linuxcontainers.org/lxd/docs/master/preseed/
extra_profiles: # list of profile objects
... # see: https://docs.ansible.com/ansible/latest/collections/community/general/lxd_profile_module.html#parameters
instance: # targets a LXD container/VM installation
create_mode: # mandatory, one of ['skip','build']
name: # the name of the lxc instance
dns_address: # DNS or IP address of the instance
type: # see: https://docs.ansible.com/ansible/latest/collections/community/general/lxd_container_module.html#parameter-type
server: # URL of LXC image host, defaults to https://images.linuxcontainers.org
alias: # as listed when running command `lxc image list images:`
protocol: # defaults to 'simplestreams', one of ['simplestreams','lxd']
devices:
... # see: https://linuxcontainers.org/lxd/docs/master/instances/#devices-configuration
... # see: https://docs.ansible.com/ansible/latest/collections/community/general/lxd_container_module.html#parameter-devices
profiles: # list of the names of profile names declared on the host
config:
... # see: https://linuxcontainers.org/lxd/docs/master/instances/#key-value-configuration
... # see: https://docs.ansible.com/ansible/latest/collections/community/general/lxd_container_module.html#parameter-config
# note that the following fields are mapped onto the above `config`, after converted from human-intuitive description. Any preexisting `config` value will be overridden.
cpu_mem:
cpus: # list of logical core ids
# becomes: `config.limits.cpu`
# ids increment by logical cores, grouped by physical core
# ie. [P0L0,P0L1,P1L0,P1L1] = [0,1,2,3]
memory: # human friendly amount, eg 4GiB
# becomes: `config.limits.memory`
hugepages: # boolean, source memory from hugepages reservation
# becomes: `config.limits.memory.hugepages`
priority: # 1-10, shared CPU scheduling priority
# becomes: `config.limits.cpu.priority`
host_idmap: # names of user and group IDs to map from host to guest
# becomes: `config.raw.idmap`
both: # only for when user and group ID are same value
users: # for just user names
groups: # for just group names
Note: for any pre-existing lxd.host.preseed.storage_pools
declared, having driver == 'zfs'
, the entire dataset will be destroyed and recreated in the parent zpool.
Note: for any LXC instance, when create_mode == 'build'
, any pre-existing instance (vm or container) will be deleted to make way for the new one.
Dependencies
Ansible collection community.general
>= 4.1.0
- This role requires
community.general.lxd_container
Ansible module, that is version 4.1.0 or newer. This is because v4.1.0 enables thetype
option, which allows the module to specify a virtual machine under QEMU. - Note: The version of
community.general
that comes with Ansible CORE may not be recent, and must be upgraded. Run the following command to upgrade:
ansible-galaxy collection install community.general --upgrade
- See relevant documentation using:
ansible-doc community.general.lxd_container
Example Playbook
Host example
- hosts: servers
roles:
- role: lxd
vars:
lxd:
host:
preseed:
networks: []
storage_pools:
- name: default
description: "default storage pool (zfs)"
driver: zfs
config:
source: tank/lxc
profiles:
- name: default
description: "default profile"
config: {}
devices:
root:
path: /
pool: default
type: disk
eth0:
name: eth0
nictype: bridged
parent: br0
type: nic
extra_profiles:
- name: docker_support
description: basic support for docker
config:
security.nesting: "true"
Instance example
- hosts: lxd_containers
roles:
- role: lxd
vars:
lxd:
instance:
create_mode: build
name: mylxc
dns_address: mylxc.home.lan
alias: ubuntu/focal/cloud/amd64
devices:
eth0:
name: eth0
nictype: bridged
parent: br0
type: nic
hwaddr: F1-09-CE-07-C0-70
profiles:
- default
- docker_support
config:
boot.autostart: "true"
host_idmap:
both:
- root
License
MIT
TODO:
- Enhance support for
qemu
virtual machines - Virtual machine feature parity with
libvirt
role - Run, backup, snapshot, restore to/from ZFS
- --> update ZFS trim & FSTrim roles