community.general.one_vm 模块 – 创建或终止 OpenNebula 实例

注意

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

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

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

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

概要

  • 管理 OpenNebula 实例

要求

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

  • pyone

参数

参数

注释

api_password

字符串

用户登录到 OpenNebula RPC 服务器的密码。如果未设置,则使用 ONE_PASSWORD 环境变量的值。如果 api_usernameapi_password 均未设置,则将尝试使用 ONE 身份验证文件进行身份验证。默认路径为“~/.one/one_auth”。

设置环境变量 ONE_AUTH 以覆盖此路径。

api_url

字符串

OpenNebula RPC 服务器的 URL。

建议使用 HTTPS,以便用户名/密码不会通过网络未加密传输。

如果未设置,则使用 ONE_URL 环境变量的值。

api_username

字符串

用户登录到 OpenNebula RPC 服务器的名称。如果未设置,则使用 ONE_USERNAME 环境变量的值。

attributes

字典

一个键/值属性字典,用于添加到新实例,或用于设置具有这些属性的实例的 state

键不区分大小写,OpenNebula 会自动将它们转换为大写。

请注意,NAME 是一个特殊属性,用于设置 VM 在部署时的名称。

# 字符可以附加到 NAME,并且该模块将自动为 VM 的名称添加索引。

例如:“ NAME':' foo-### 将创建名称为 foo-000foo-001、... 的 VM。

当与 count_attributesexact_count 一起使用时,该模块将匹配没有索引部分的基名称。

默认值: {}

count

整数

要启动的实例数

默认值: 1

count_attributes

字典

一个键/值属性字典,只能与 exact_count 一起使用,以确定应部署多少个基于特定属性条件的节点。这可以用多种方式表达,并在示例部分中显示。

count_labels

列表 / 元素=字符串

一个标签列表,只能与 exact_count 一起使用,以确定应部署多少个基于特定标签条件的节点。这可以用多种方式表达,并在示例部分中显示。

cpu

浮点数

新实例所需的 CPU 百分比除以 100。半个处理器写为 0.5。

datastore_id

整数

在 community.general 0.2.0 中添加

用于创建新实例的数据存储名称

datastore_name

字符串

在 community.general 0.2.0 中添加

用于创建新实例的数据存储名称

disk_saveas

字典

从 VM 磁盘创建映像。

它是一个字典,您必须在其中指定新映像的 name

或者,您可以指定要保存的磁盘的 disk_id。默认情况下,disk_id 为 0。

注意: 此操作将仅在第一个 VM(如果传递了多个 VM ID)上执行,并且 VM 必须处于 poweredoff 状态。

如果已存在具有指定 name 的镜像,此操作也会失败。

disk_size

列表 / 元素=字符串

为新实例创建的磁盘大小(以 MB、GB、TB 等为单位)。

注意:如果模板有多个磁盘,则大小的顺序与 template_id/template_name 中指定的顺序匹配。

exact_count

整数

指示应部署多少个匹配 count_attributescount_labels 参数的实例。实例会根据此值进行创建或终止。

注意:具有最小 ID 的实例将首先被终止。

group_id

整数

将设置为实例组的组 ID

hard

布尔值

hard 方式重启、关闭电源或终止实例。

选项

  • false ← (默认)

  • true

instance_ids

别名:ids

列表 / 元素=整数

用于状态的实例 ID 列表:absentrunningrebootedpoweredoff

labels

列表 / 元素=字符串

与新实例关联的标签列表,或用于设置具有这些标签的实例的 state

默认值: []

memory

字符串

新实例的内存大小(以 MB、GB 等为单位)

mode

字符串

以八进制格式设置实例的权限模式,例如 0600 以授予所有者 usemanage 权限,而不授予组和其他人任何权限。

networks

列表 / 元素=字典

包含网络参数的字典列表。有关更多详细信息,请参阅示例。

默认值: []

owner_id

整数

将设置为实例所有者的用户 ID

persistent

布尔值

在 community.general 0.2.0 中添加

创建模板的私有持久副本以及 DISK 中定义的任何镜像,并实例化该副本。

选项

  • false ← (默认)

  • true

state

字符串

present - 从使用 template_id/template_name 指定的模板创建实例。

running - 运行实例

poweredoff - 关闭实例电源

rebooted - 重启实例

absent - 终止实例

选项

  • "present" ← (默认)

  • "absent"

  • "running"

  • "rebooted"

  • "poweredoff"

template_id

整数

用于创建新实例的虚拟机模板 ID

template_name

字符串

用于创建新实例的虚拟机模板名称

updateconf

字典

在 community.general 6.3.0 中添加

当提供 instance_ids 时,使用 updateconf API 调用更新正在运行的虚拟机。

当创建新虚拟机时,通过直接模板合并来模拟 updateconf API 调用。

允许完全修改 CONTEXT 属性。

vcpu

整数

新虚拟机将拥有的 CPU(核心)数量。

vm_start_on_hold

布尔值

设置为 true 可在创建时将虚拟机置于保持状态

选项

  • false ← (默认)

  • true

wait

布尔值

等待实例达到其所需状态后再返回。请记住,如果您正在等待实例处于运行状态,这并不意味着您将能够通过 SSH 连接到该计算机,仅表示该实例上的启动过程已开始,有关详细信息,请参阅“wait_for”示例。

选项

  • false

  • true ← (默认)

wait_timeout

整数

等待放弃前的超时时间,以秒为单位

默认值: 300

属性

属性

支持

描述

check_mode

支持:完全

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

diff_mode

支持:

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

示例

- name: Create a new instance
  community.general.one_vm:
    template_id: 90
  register: result

- name: Print VM properties
  ansible.builtin.debug:
    msg: result

- name: Deploy a new VM on hold
  community.general.one_vm:
    template_name: 'app1_template'
    vm_start_on_hold: 'True'

- name: Deploy a new VM and set its name to 'foo'
  community.general.one_vm:
    template_name: 'app1_template'
    attributes:
      name: foo

- name: Deploy a new VM and set its group_id and mode
  community.general.one_vm:
    template_id: 90
    group_id: 16
    mode: 660

- name: Deploy a new VM  as persistent
  community.general.one_vm:
    template_id: 90
    persistent: true

- name: Change VM's permissions to 640
  community.general.one_vm:
    instance_ids: 5
    mode: 640

- name: Deploy 2 new instances and set memory, vcpu, disk_size and 3 networks
  community.general.one_vm:
    template_id: 15
    disk_size: 35.2 GB
    memory: 4 GB
    vcpu: 4
    count: 2
    networks:
      - NETWORK_ID: 27
      - NETWORK: "default-network"
        NETWORK_UNAME: "app-user"
        SECURITY_GROUPS: "120,124"
      - NETWORK_ID: 27
        SECURITY_GROUPS: "10"

- name: Deploy a new instance which uses a Template with two Disks
  community.general.one_vm:
    template_id: 42
    disk_size:
      - 35.2 GB
      - 50 GB
    memory: 4 GB
    vcpu: 4
    count: 1
    networks:
      - NETWORK_ID: 27

- name: "Deploy an new instance with attribute 'bar: bar1' and set its name to 'foo'"
  community.general.one_vm:
    template_id: 53
    attributes:
      name: foo
      bar: bar1

- name: "Enforce that 2 instances with attributes 'foo1: app1' and 'foo2: app2' are deployed"
  community.general.one_vm:
    template_id: 53
    attributes:
      foo1: app1
      foo2: app2
    exact_count: 2
    count_attributes:
      foo1: app1
      foo2: app2

- name: Enforce that 4 instances with an attribute 'bar' are deployed
  community.general.one_vm:
    template_id: 53
    attributes:
      name: app
      bar: bar2
    exact_count: 4
    count_attributes:
      bar:

# Deploy 2 new instances with attribute 'foo: bar' and labels 'app1' and 'app2' and names in format 'fooapp-##'
# Names will be: fooapp-00 and fooapp-01
- name: Deploy 2 new instances
  community.general.one_vm:
    template_id: 53
    attributes:
      name: fooapp-##
      foo: bar
    labels:
      - app1
      - app2
    count: 2

# Deploy 2 new instances with attribute 'app: app1' and names in format 'fooapp-###'
# Names will be: fooapp-002 and fooapp-003
- name: Deploy 2 new instances
  community.general.one_vm:
    template_id: 53
    attributes:
      name: fooapp-###
      app: app1
    count: 2

# Reboot all instances with name in format 'fooapp-#'
# Instances 'fooapp-00', 'fooapp-01', 'fooapp-002' and 'fooapp-003' will be rebooted
- name: Reboot all instances with names in a certain format
  community.general.one_vm:
    attributes:
      name: fooapp-#
    state: rebooted

# Enforce that only 1 instance with name in format 'fooapp-#' is deployed
# The task will delete oldest instances, so only the 'fooapp-003' will remain
- name: Enforce that only 1 instance with name in a certain format is deployed
  community.general.one_vm:
    template_id: 53
    exact_count: 1
    count_attributes:
      name: fooapp-#

- name: Deploy an new instance with a network
  community.general.one_vm:
    template_id: 53
    networks:
      - NETWORK_ID: 27
  register: vm

- name: Wait for SSH to come up
  ansible.builtin.wait_for_connection:
  delegate_to: '{{ vm.instances[0].networks[0].ip }}'

- name: Terminate VMs by ids
  community.general.one_vm:
    instance_ids:
      - 153
      - 160
    state: absent

- name: Reboot all VMs that have labels 'foo' and 'app1'
  community.general.one_vm:
    labels:
      - foo
      - app1
    state: rebooted

- name: "Fetch all VMs that have name 'foo' and attribute 'app: bar'"
  community.general.one_vm:
    attributes:
      name: foo
      app: bar
  register: results

- name: Deploy 2 new instances with labels 'foo1' and 'foo2'
  community.general.one_vm:
    template_name: app_template
    labels:
      - foo1
      - foo2
    count: 2

- name: Enforce that only 1 instance with label 'foo1' will be running
  community.general.one_vm:
    template_name: app_template
    labels:
      - foo1
    exact_count: 1
    count_labels:
      - foo1

- name: Terminate all instances that have attribute foo
  community.general.one_vm:
    template_id: 53
    exact_count: 0
    count_attributes:
      foo:

- name: "Power-off the VM and save VM's disk with id=0 to the image with name 'foo-image'"
  community.general.one_vm:
    instance_ids: 351
    state: poweredoff
    disk_saveas:
      name: foo-image

- name: "Save VM's disk with id=1 to the image with name 'bar-image'"
  community.general.one_vm:
    instance_ids: 351
    disk_saveas:
      name: bar-image
      disk_id: 1

- name: "Deploy 2 new instances with a custom 'start script'"
  community.general.one_vm:
    template_name: app_template
    count: 2
    updateconf:
      CONTEXT:
        START_SCRIPT: ip r r 169.254.16.86/32 dev eth0

- name: "Add a custom 'start script' to a running VM"
  community.general.one_vm:
    instance_ids: 351
    updateconf:
      CONTEXT:
        START_SCRIPT: ip r r 169.254.16.86/32 dev eth0

- name: "Update SSH public keys inside the VM's context"
  community.general.one_vm:
    instance_ids: 351
    updateconf:
      CONTEXT:
        SSH_PUBLIC_KEY: |-
          ssh-rsa ...
          ssh-ed25519 ...

返回值

通用返回值记录在此处,以下是此模块独有的字段

描述

instances

复杂

一个实例信息列表,这些实例的状态已更改,或者使用 instance_ids 选项获取。

返回: 成功

attributes

字典

与实例关联的键/值属性的字典

返回: 成功

示例: {"HYPERVISOR": "kvm", "LOGO": "images/logos/centos.png", "TE_GALAXY": "bar", "USER_INPUTS": null}

cpu

浮点数

CPU 百分比除以 100

返回: 成功

示例: 0.2

disk_size

字符串

磁盘大小,以 MB 为单位

返回: 成功

示例: "20480 MB"

group_id

整数

虚拟机的组 ID

返回: 成功

示例: 1

group_name

字符串

虚拟机的组名称

返回: 成功

示例: "one-users"

labels

列表 / 元素=字符串

与实例关联的字符串标签列表

返回: 成功

示例: ["foo", "spec-label"]

lcm_state

字符串

实例的 lcm 状态,仅当状态为 ACTIVE 时才相关

返回: 成功

示例: "RUNNING"

memory

字符串

内存大小,以 MB 为单位

返回: 成功

示例: "4096 MB"

mode

字符串

虚拟机的模式

返回: 成功

示例: "660"

networks

列表 / 元素=字符串

一个字典列表,其中包含每个 NIC 的 IP、NAME、MAC、SECURITY_GROUPS 信息

返回: 成功

示例: [{"ip": "10.120.5.33", "mac": "02:00:0a:78:05:21", "name": "default-test-private", "security_groups": "0,10"}, {"ip": "10.120.5.34", "mac": "02:00:0a:78:05:22", "name": "default-test-private", "security_groups": "0"}]

owner_id

整数

虚拟机的所有者 ID

返回: 成功

示例: 143

owner_name

字符串

虚拟机的所有者名称

返回: 成功

示例: "app-user"

state

字符串

实例的状态

返回: 成功

示例: "ACTIVE"

template_id

整数

虚拟机的模板 ID

返回: 成功

示例: 153

updateconf

字典

在 community.general 6.3.0 中添加

使用 updateconf API 调用设置的键/值属性字典。

返回: 成功

示例: {"CONTEXT": {"SSH_PUBLIC_KEY": "ssh-rsa ...\nssh-ed25519 ...", "START_SCRIPT": "ip r r 169.254.16.86/32 dev eth0"}, "OS": {"ARCH": "x86_64"}}

uptime_h

整数

实例的正常运行时间,以小时为单位

返回: 成功

示例: 35

vcpu

整数

CPU(核心)数量

返回: 成功

示例: 2

vm_id

整数

虚拟机 ID

返回: 成功

示例: 153

vm_name

字符串

虚拟机名称

返回: 成功

示例: "foo"

instances_ids

列表 / 元素=字符串

一个实例 ID 列表,这些实例的状态已更改,或者使用 instance_ids 选项获取。

返回: 成功

示例: [1234, 1235]

tagged_instances

复杂

基于特定属性和/或

使用 count_attributescount_labels 指定的标签的实例信息列表

选项。

返回: 成功

attributes

字典

与实例关联的键/值属性的字典

返回: 成功

示例: {"HYPERVISOR": "kvm", "LOGO": "images/logos/centos.png", "TE_GALAXY": "bar", "USER_INPUTS": null}

cpu

浮点数

CPU 百分比除以 100

返回: 成功

示例: 0.2

disk_size

列表 / 元素=字符串

磁盘大小,以 MB 为单位

返回: 成功

示例: ["20480 MB", "10240 MB"]

group_id

整数

虚拟机的组 ID

返回: 成功

示例: 1

group_name

字符串

虚拟机的组名称

返回: 成功

示例: "one-users"

labels

列表 / 元素=字符串

与实例关联的字符串标签列表

返回: 成功

示例: ["foo", "spec-label"]

lcm_state

字符串

实例的 lcm 状态,仅当状态为 ACTIVE 时才相关

返回: 成功

示例: "RUNNING"

memory

字符串

内存大小,以 MB 为单位

返回: 成功

示例: "4096 MB"

mode

字符串

虚拟机的模式

返回: 成功

示例: "660"

networks

列表 / 元素=字符串

一个字典列表,其中包含每个 NIC 的 IP、NAME、MAC、SECURITY_GROUPS 信息

返回: 成功

示例: [{"ip": "10.120.5.33", "mac": "02:00:0a:78:05:21", "name": "default-test-private", "security_groups": "0,10"}, {"ip": "10.120.5.34", "mac": "02:00:0a:78:05:22", "name": "default-test-private", "security_groups": "0"}]

owner_id

整数

虚拟机的用户 ID

返回: 成功

示例: 143

owner_name

字符串

虚拟机的用户名

返回: 成功

示例: "app-user"

state

字符串

实例的状态

返回: 成功

示例: "ACTIVE"

template_id

整数

虚拟机的模板 ID

返回: 成功

示例: 153

updateconf

字典

在 community.general 6.3.0 中添加

一个键值属性字典,这些属性通过 updateconf API 调用设置。

返回: 成功

示例: {"CONTEXT": {"SSH_PUBLIC_KEY": "ssh-rsa ...\nssh-ed25519 ...", "START_SCRIPT": "ip r r 169.254.16.86/32 dev eth0"}, "OS": {"ARCH": "x86_64"}}

uptime_h

整数

实例的正常运行时间,以小时为单位

返回: 成功

示例: 35

vcpu

整数

CPU(核心)数量

返回: 成功

示例: 2

vm_id

整数

虚拟机 ID

返回: 成功

示例: 153

vm_name

字符串

虚拟机名称

返回: 成功

示例: "foo"

作者

  • Milan Ilic (@ilicmilan)

  • Jan Meerkamp (@meerkampdvv)