community / community.general / 3.8.10 / module / lxd_container Manage LXD Containers Authors: Hiroaki Nakamura (@hnakamur)community.general.lxd_container (3.8.10) — module
Install with ansible-galaxy collection install community.general:==3.8.10
collections: - name: community.general version: 3.8.10
Management of LXD containers
# An example for creating a Ubuntu container and install python - hosts: localhost connection: local tasks: - name: Create a started container community.general.lxd_container: name: mycontainer ignore_volatile_options: true state: started source: type: image mode: pull server: https://images.linuxcontainers.org protocol: lxd # if you get a 404, try setting protocol: simplestreams alias: ubuntu/xenial/amd64 profiles: ["default"] wait_for_ipv4_addresses: true timeout: 600 - name: Check python is installed in container delegate_to: mycontainer ansible.builtin.raw: dpkg -s python register: python_install_check failed_when: python_install_check.rc not in [0, 1] changed_when: false - name: Install python in container delegate_to: mycontainer ansible.builtin.raw: apt-get install -y python when: python_install_check.rc == 1
# An example for creating an Ubuntu 14.04 container using an image fingerprint. # This requires changing 'server' and 'protocol' key values, replacing the # 'alias' key with with 'fingerprint' and supplying an appropriate value that # matches the container image you wish to use. - hosts: localhost connection: local tasks: - name: Create a started container community.general.lxd_container: name: mycontainer ignore_volatile_options: true state: started source: type: image mode: pull # Provides current (and older) Ubuntu images with listed fingerprints server: https://cloud-images.ubuntu.com/releases # Protocol used by 'ubuntu' remote (as shown by 'lxc remote list') protocol: simplestreams # This provides an Ubuntu 14.04 LTS amd64 image from 20150814. fingerprint: e9a8bdfab6dc profiles: ["default"] wait_for_ipv4_addresses: true timeout: 600
# An example for deleting a container - hosts: localhost connection: local tasks: - name: Delete a container community.general.lxd_container: name: mycontainer state: absent
# An example for restarting a container - hosts: localhost connection: local tasks: - name: Restart a container community.general.lxd_container: name: mycontainer state: restarted
# An example for restarting a container using https to connect to the LXD server - hosts: localhost connection: local tasks: - name: Restart a container community.general.lxd_container: url: https://127.0.0.1:8443 # These client_cert and client_key values are equal to the default values. #client_cert: "{{ lookup('env', 'HOME') }}/.config/lxc/client.crt" #client_key: "{{ lookup('env', 'HOME') }}/.config/lxc/client.key" trust_password: mypassword name: mycontainer state: restarted
# Note your container must be in the inventory for the below example. # # [containers] # mycontainer ansible_connection=lxd # - hosts: - mycontainer tasks: - name: Copy /etc/hosts in the created container to localhost with name "mycontainer-hosts" ansible.builtin.fetch: src: /etc/hosts dest: /tmp/mycontainer-hosts flat: true
# An example for LXD cluster deployments. This example will create two new container on specific # nodes - 'node01' and 'node02'. In 'target:', 'node01' and 'node02' are names of LXD cluster # members that LXD cluster recognizes, not ansible inventory names, see: 'lxc cluster list'. # LXD API calls can be made to any LXD member, in this example, we send API requests to #'node01.example.com', which matches ansible inventory name. - hosts: node01.example.com tasks: - name: Create LXD container community.general.lxd_container: name: new-container-1 ignore_volatile_options: true state: started source: type: image mode: pull alias: ubuntu/xenial/amd64 target: node01 - name: Create container on another node community.general.lxd_container: name: new-container-2 ignore_volatile_options: true state: started source: type: image mode: pull alias: ubuntu/xenial/amd64 target: node02
url: default: unix:/var/lib/lxd/unix.socket description: - The unix domain socket path or the https URL for the LXD server. required: false type: str name: description: - Name of a container. required: true type: str state: choices: - started - stopped - restarted - absent - frozen default: started description: - Define the state of a container. required: false type: str config: description: - 'The config for the container (for example C({"limits.cpu": "2"})). See U(https://github.com/lxc/lxd/blob/master/doc/rest-api.md#post-1).' - If the container already exists and its "config" values in metadata obtained from GET /1.0/containers/<name> U(https://github.com/lxc/lxd/blob/master/doc/rest-api.md#10containersname) are different, this module tries to apply the configurations. - The keys starting with C(volatile.) are ignored for this comparison when I(ignore_volatile_options=true). required: false type: dict source: description: - 'The source for the container (e.g. { "type": "image", "mode": "pull", "server": "https://images.linuxcontainers.org", "protocol": "lxd", "alias": "ubuntu/xenial/amd64" }).' - See U(https://github.com/lxc/lxd/blob/master/doc/rest-api.md#post-1) for complete API documentation. - 'Note that C(protocol) accepts two choices: C(lxd) or C(simplestreams).' required: false type: dict target: description: - For cluster deployments. Will attempt to create a container on a target node. If container exists elsewhere in a cluster, then container will not be replaced or moved. The name should respond to same name of the node you see in C(lxc cluster list). required: false type: str version_added: 1.0.0 version_added_collection: community.general devices: description: - 'The devices for the container (for example C({ "rootfs": { "path": "/dev/kvm", "type": "unix-char" }})). See U(https://github.com/lxc/lxd/blob/master/doc/rest-api.md#post-1).' required: false type: dict timeout: default: 30 description: - A timeout for changing the state of the container. - This is also used as a timeout for waiting until IPv4 addresses are set to the all network interfaces in the container after starting or restarting. required: false type: int profiles: description: - Profile to be used by the container. elements: str type: list snap_url: default: unix:/var/snap/lxd/common/lxd/unix.socket description: - The unix domain socket path when LXD is installed by snap package manager. required: false type: str ephemeral: description: - Whether or not the container is ephemeral (for example C(true) or C(false)). See U(https://github.com/lxc/lxd/blob/master/doc/rest-api.md#post-1). required: false type: bool client_key: aliases: - key_file description: - The client certificate key file path. - If not specified, it defaults to C(${HOME}/.config/lxc/client.key). required: false type: path force_stop: default: false description: - If this is true, the C(lxd_container) forces to stop the container when it stops or restarts the container. required: false type: bool client_cert: aliases: - cert_file description: - The client certificate file path. - If not specified, it defaults to C(${HOME}/.config/lxc/client.crt). required: false type: path architecture: description: - The architecture for the container (for example C(x86_64) or C(i686)). See U(https://github.com/lxc/lxd/blob/master/doc/rest-api.md#post-1). required: false type: str trust_password: description: - The client trusted password. - 'You need to set this password on the LXD server before running this module using the following command: C(lxc config set core.trust_password <some random password>). See U(https://www.stgraber.org/2016/04/18/lxd-api-direct-interaction/).' - If trust_password is set, this module send a request for authentication before sending any requests. required: false type: str ignore_volatile_options: default: true description: - If set to C(true), options starting with C(volatile.) are ignored. As a result, they are reapplied for each execution. - This default behavior can be changed by setting this option to C(false). - The default value C(true) will be deprecated in community.general 4.0.0, and will change to C(false) in community.general 5.0.0. required: false type: bool version_added: 3.7.0 version_added_collection: community.general wait_for_ipv4_addresses: default: false description: - If this is true, the C(lxd_container) waits until IPv4 addresses are set to the all network interfaces in the container after starting or restarting. required: false type: bool
actions: description: List of actions performed for the container. returned: success sample: '["create", "start"]' type: list addresses: description: Mapping from the network device name to a list of IPv4 addresses in the container returned: when state is started or restarted sample: eth0: - 10.155.92.191 type: dict logs: description: The logs of requests and responses. returned: when ansible-playbook is invoked with -vvvv. sample: (too long to be placed here) type: list old_state: description: The old state of the container returned: when state is started or restarted sample: stopped type: str