community.general.lxc_container 模块 – 管理 LXC 容器

注意

此模块是 community.general 集合(版本 10.1.0)的一部分。

如果您正在使用 ansible 包,您可能已经安装了此集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install community.general。您需要进一步的要求才能使用此模块,请参阅 要求 了解详细信息。

要在 playbook 中使用它,请指定:community.general.lxc_container

概要

  • 管理 LXC 容器。

要求

以下要求需要在执行此模块的主机上满足。

  • lxc >= 2.0 # 操作系统软件包

  • python3 >= 3.5 # 操作系统软件包

  • python3-lxc # 操作系统软件包

参数

参数

注释

archive

布尔值

创建一个容器的存档。

这将创建一个运行中容器的 tarball。

选项

  • false ← (默认)

  • true

archive_compression

字符串

创建运行中容器的存档时要使用的压缩类型。

选项

  • "gzip" ← (默认)

  • "bzip2"

  • "none"

archive_path

路径

保存存档容器的路径。

如果该路径不存在,则存档方法将尝试创建它。

backing_store

字符串

容器的后端存储类型。

选项

  • "dir" ← (默认)

  • "lvm"

  • "loop"

  • "btrfs"

  • "overlayfs"

  • "zfs"

clone_name

字符串

新克隆的服务器的名称。

仅当状态为 clone 时使用。

clone_snapshot

布尔值

克隆时创建容器的快照。

并非所有容器存储后端都支持此功能。

如果后端存储不支持快照,则启用此功能可能会失败。

选项

  • false ← (默认)

  • true

config

路径

LXC 配置文件的路径。

container_command

字符串

在容器内运行命令。

container_config

列表 / 元素=字符串

配置容器时要使用的 key=value 选项列表。

container_log

布尔值

为容器启用主机操作的容器日志。

选项

  • false ← (默认)

  • true

container_log_level

字符串

设置容器的日志级别,其中设置了 container_log

选项

  • "Info"

  • "info"

  • "INFO" ← (默认)

  • "Error"

  • "error"

  • "ERROR"

  • "Debug"

  • "debug"

  • "DEBUG"

directory

路径

将 rootfs 目录置于 DIR 下。

fs_size

字符串

文件系统大小。

默认值: "5G"

fs_type

字符串

创建 fstype TYPE。

默认值: "ext4"

lv_name

字符串

逻辑卷的名称,默认为容器名称。

如果未指定,则默认为 $CONTAINER_NAME

lxc_path

路径

将容器放置在 PATH 下。

name

字符串 / 必需

容器的名称。

state

字符串

定义容器的状态。

如果您使用 clone_name 克隆容器,则新克隆的容器将创建为停止状态。

正在运行的容器将在克隆操作期间停止,并且在克隆完成后,将恢复原始容器状态。

选项

  • "started" ← (默认)

  • "stopped"

  • "restarted"

  • "absent"

  • "frozen"

  • "clone"

template

字符串

在 LXC 创建中使用的模板的名称。

默认值: "ubuntu"

template_options

字符串

构建容器时的模板选项。

thinpool

字符串

使用名为 TP 的 LVM 精简池。

vg_name

字符串

如果后端存储是 lvm,请指定卷组的名称。

默认值: "lxc"

zfs_root

字符串

在给定的 zfsroot 下创建 zfs。

属性

属性

支持

描述

check_mode

支持:

可以在 check_mode 中运行,并返回已更改的状态预测,而无需修改目标。

diff_mode

支持:

当处于差异模式时,将返回更改的详细信息(或者在 check_mode 中可能需要更改的内容)。

注意

注意

  • 容器必须具有唯一的名称。如果您尝试创建一个与用户命名空间中已存在的名称相同的容器,则模块将直接返回 “unchanged”(未更改)。

  • container_command 可以与除 absent 之外的任何状态一起使用。如果与状态 stopped 一起使用,容器将 started,执行命令,然后再次 stopped 容器。同样,如果 state=stopped 且容器不存在,则会先创建容器,started,执行命令,然后 stopped。如果在变量中使用 “|”,则可以在变量本身中使用常见的脚本格式。 container_command 选项始终以 BASH 执行。当使用 container_command 时,会在 /tmp/ 目录中创建一个日志文件,其中包含任何执行命令的 stdoutstderr

  • 如果 archive=true,系统将尝试创建运行中容器的压缩 tarball。 archive 选项支持 LVM 支持的容器,并在创建存档时创建运行中容器的快照。

  • 如果您的发行版没有 python3-lxc 的软件包,这是此模块的必需项,则可以从 https://github.com/lxc/python3-lxc 的源代码安装,也可以使用包名 lxc 通过 pip 安装。

示例

- name: Create a started container
  community.general.lxc_container:
    name: test-container-started
    container_log: true
    template: ubuntu
    state: started
    template_options: --release trusty

- name: Create a stopped container
  community.general.lxc_container:
    name: test-container-stopped
    container_log: true
    template: ubuntu
    state: stopped
    template_options: --release trusty

- name: Create a frozen container
  community.general.lxc_container:
    name: test-container-frozen
    container_log: true
    template: ubuntu
    state: frozen
    template_options: --release trusty
    container_command: |
      echo 'hello world.' | tee /opt/started-frozen

# Create filesystem container, configure it, and archive it, and start it.
- name: Create filesystem container
  community.general.lxc_container:
    name: test-container-config
    backing_store: dir
    container_log: true
    template: ubuntu
    state: started
    archive: true
    archive_compression: none
    container_config:
      - "lxc.aa_profile=unconfined"
      - "lxc.cgroup.devices.allow=a *:* rmw"
    template_options: --release trusty

# Create an lvm container, run a complex command in it, add additional
# configuration to it, create an archive of it, and finally leave the container
# in a frozen state. The container archive will be compressed using bzip2
- name: Create a frozen lvm container
  community.general.lxc_container:
    name: test-container-lvm
    container_log: true
    template: ubuntu
    state: frozen
    backing_store: lvm
    template_options: --release trusty
    container_command: |
      apt-get update
      apt-get install -y vim lxc-dev
      echo 'hello world.' | tee /opt/started
      if [[ -f "/opt/started" ]]; then
          echo 'hello world.' | tee /opt/found-started
      fi
    container_config:
      - "lxc.aa_profile=unconfined"
      - "lxc.cgroup.devices.allow=a *:* rmw"
    archive: true
    archive_compression: bzip2
  register: lvm_container_info

- name: Debug info on container "test-container-lvm"
  ansible.builtin.debug:
    var: lvm_container_info

- name: Run a command in a container and ensure its in a "stopped" state.
  community.general.lxc_container:
    name: test-container-started
    state: stopped
    container_command: |
      echo 'hello world.' | tee /opt/stopped

- name: Run a command in a container and ensure its it in a "frozen" state.
  community.general.lxc_container:
    name: test-container-stopped
    state: frozen
    container_command: |
      echo 'hello world.' | tee /opt/frozen

- name: Start a container
  community.general.lxc_container:
    name: test-container-stopped
    state: started

- name: Run a command in a container and then restart it
  community.general.lxc_container:
    name: test-container-started
    state: restarted
    container_command: |
      echo 'hello world.' | tee /opt/restarted

- name: Run a complex command within a "running" container
  community.general.lxc_container:
    name: test-container-started
    container_command: |
      apt-get update
      apt-get install -y curl wget vim apache2
      echo 'hello world.' | tee /opt/started
      if [[ -f "/opt/started" ]]; then
          echo 'hello world.' | tee /opt/found-started
      fi

# Create an archive of an existing container, save the archive to a defined
# path and then destroy it.
- name: Archive container
  community.general.lxc_container:
    name: test-container-started
    state: absent
    archive: true
    archive_path: /opt/archives

# Create a container using overlayfs, create an archive of it, create a
# snapshot clone of the container and and finally leave the container
# in a frozen state. The container archive will be compressed using gzip.
- name: Create an overlayfs container archive and clone it
  community.general.lxc_container:
    name: test-container-overlayfs
    container_log: true
    template: ubuntu
    state: started
    backing_store: overlayfs
    template_options: --release trusty
    clone_snapshot: true
    clone_name: test-container-overlayfs-clone-snapshot
    archive: true
    archive_compression: gzip
  register: clone_container_info

- name: Debug info on container "test-container"
  ansible.builtin.debug:
    var: clone_container_info

- name: Clone a container using snapshot
  community.general.lxc_container:
    name: test-container-overlayfs-clone-snapshot
    backing_store: overlayfs
    clone_name: test-container-overlayfs-clone-snapshot2
    clone_snapshot: true

- name: Create a new container and clone it
  community.general.lxc_container:
    name: test-container-new-archive
    backing_store: dir
    clone_name: test-container-new-archive-clone

- name: Archive and clone a container then destroy it
  community.general.lxc_container:
    name: test-container-new-archive
    state: absent
    clone_name: test-container-new-archive-destroyed-clone
    archive: true
    archive_compression: gzip

- name: Start a cloned container.
  community.general.lxc_container:
    name: test-container-new-archive-destroyed-clone
    state: started

- name: Destroy a container
  community.general.lxc_container:
    name: '{{ item }}'
    state: absent
  with_items:
    - test-container-stopped
    - test-container-started
    - test-container-frozen
    - test-container-lvm
    - test-container-config
    - test-container-overlayfs
    - test-container-overlayfs-clone
    - test-container-overlayfs-clone-snapshot
    - test-container-overlayfs-clone-snapshot2
    - test-container-new-archive
    - test-container-new-archive-clone
    - test-container-new-archive-destroyed-clone

返回值

常见返回值记录在 这里,以下是此模块特有的字段

描述

lxc_container

复杂

容器信息

返回: 成功

archive

字符串

容器的最终状态

返回: 成功,当 archive 为 true 时

示例: "/tmp/test-container-config.tar"

clone

布尔值

如果容器被克隆

返回: 成功,当指定 clone_name 时

示例: true

init_pid

整数

lxc 初始化进程的 pid

返回: 成功

示例: 19786

interfaces

列表 / 元素=字符串

容器网络接口的列表

返回: 成功

示例: ["eth0", "lo"]

ips

列表 / 元素=字符串

IP 列表

返回: 成功

示例: ["10.0.3.3"]

name

字符串

lxc 容器的名称

返回: 成功

示例: "test_host"

state

字符串

容器的最终状态

返回: 成功

示例: "running"

作者

  • Kevin Carter (@cloudnull)