cloudscale_ch.cloud.server 模块 – 管理 cloudscale.ch IaaS 服务上的服务器

注意

此模块是 cloudscale_ch.cloud 集合 (版本 2.4.0) 的一部分。

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

要安装它,请使用: ansible-galaxy collection install cloudscale_ch.cloud

要在 playbook 中使用它,请指定: cloudscale_ch.cloud.server

cloudscale_ch.cloud 1.0.0 中的新增功能

概要

  • 在 cloudscale.ch IaaS 服务上创建、更新、启动、停止和删除服务器。

别名:cloudscale_server

参数

参数

注释

api_timeout

整数

调用 cloudscale.ch API 的超时时间(秒)。

这也可以在 CLOUDSCALE_API_TIMEOUT 环境变量中传递。

默认值: 45

api_token

字符串 / 必填

cloudscale.ch API 令牌。

这也可以在 CLOUDSCALE_API_TOKEN 环境变量中传递。

api_url

字符串

cloudscale_ch.cloud 1.3.0 中新增

cloudscale.ch API URL。

这也可以在 CLOUDSCALE_API_URL 环境变量中传递。

默认值: "https://api.cloudscale.ch/v1"

bulk_volume_size_gb

整数

大容量存储卷的大小(GB)。

如果未设置,则没有大容量存储卷。

flavor

字符串

服务器的类型。

force

布尔值

允许在必要时停止正在运行的服务器以进行更新。

选项

  • false ← (默认)

  • true

image

字符串

用于创建服务器的镜像。

interfaces

列表 / 元素=字典

cloudscale_ch.cloud 1.4.0 中新增

指定要附加到服务器的接口的网络接口对象列表。有关更多详细信息,请参见 https://www.cloudscale.ch/en/api/v1/#interfaces-attribute-specification

addresses

列表 / 元素=字典

附加专用网络接口并配置子网和/或 IP 地址。

address

字符串

接口的静态 IP 地址。使用 '[]' 可避免通过 DHCP 分配 IP 地址。

subnet

字符串

将从中分配地址的子网的 UUID。

network

字符串

在由 UUID 标识的网络上创建网络接口。使用“public”代替 UUID 来附加公共网络接口。如果在 addresses 下提供了子网,则可以省略。

name

字符串

服务器名称。

需要 *name* 或 *uuid* 之一。

password

字符串

服务器密码。

server_groups

列表 / 元素=字符串

服务器组的 UUID 或名称列表。

ssh_keys

列表 / 元素=字符串

SSH 公钥列表。

在此处使用 .pub 文件的完整内容。

state

字符串

服务器的状态。

选项

  • "running" ← (默认)

  • "stopped"

  • "absent"

tags

字典

与服务器关联的标签。将其设置为 {} 可清除所有标签。

use_ipv6

布尔值

在公共网络接口上启用 IPv6。

选项

  • false

  • true ← (默认)

use_private_network

布尔值

将专用网络接口附加到服务器。

选项

  • false

  • true

use_public_network

布尔值

将公共网络接口附加到服务器。

选项

  • false

  • true

user_data

字符串

要用于服务器的 Cloud-init 配置 (cloud-config) 数据。

uuid

字符串

服务器的 UUID。

需要 *name* 或 *uuid* 之一。

volume_size_gb

整数

根卷的大小(GB)。

默认值: 10

zone

字符串

服务器所在的区域(例如 lpg1rma1)。

备注

注意

  • 如果提供了 *uuid* 选项,则它优先于 *name* 用于服务器选择。这允许更新服务器的名称。

  • 如果没有提供 *uuid* 选项,则 *name* 用于服务器选择。如果存在多个具有此名称的服务器,则执行将中止。

  • 只有 *name* 和 *flavor* 会在更新时进行评估。

  • 必须给出 *force=true* 选项才能允许重新引导现有的正在运行的服务器以应用更改。

  • 所有操作均使用 cloudscale.ch 公共 API v1 执行。

  • 有关详细信息,请参阅完整的 API 文档:https://www.cloudscale.ch/en/api/v1

  • 所有操作都需要有效的 API 令牌。您可以使用 cloudscale.ch 控制面板在 https://control.cloudscale.ch 创建任意数量的令牌。

示例

# Create and start a server with an existing server group (shiny-group)
- name: Start cloudscale.ch server
  cloudscale_ch.cloud.server:
    name: my-shiny-cloudscale-server
    image: debian-10
    flavor: flex-4-4
    ssh_keys:
      - ssh-rsa XXXXXXXXXX...XXXX ansible@cloudscale
    server_groups: shiny-group
    zone: lpg1
    use_private_network: true
    bulk_volume_size_gb: 100
    api_token: xxxxxx

# Start another server in anti-affinity (server group shiny-group)
- name: Start second cloudscale.ch server
  cloudscale_ch.cloud.server:
    name: my-other-shiny-server
    image: ubuntu-16.04
    flavor: flex-8-2
    ssh_keys:
      - ssh-rsa XXXXXXXXXX...XXXX ansible@cloudscale
    server_groups: shiny-group
    zone: lpg1
    api_token: xxxxxx

# Force to update the flavor of a running server
- name: Start cloudscale.ch server
  cloudscale_ch.cloud.server:
    name: my-shiny-cloudscale-server
    image: debian-10
    flavor: flex-8-2
    force: true
    ssh_keys:
      - ssh-rsa XXXXXXXXXX...XXXX ansible@cloudscale
    use_private_network: true
    bulk_volume_size_gb: 100
    api_token: xxxxxx
  register: server1

# Stop the first server
- name: Stop my first server
  cloudscale_ch.cloud.server:
    uuid: '{{ server1.uuid }}'
    state: stopped
    api_token: xxxxxx

# Delete my second server
- name: Delete my second server
  cloudscale_ch.cloud.server:
    name: my-other-shiny-server
    state: absent
    api_token: xxxxxx

# Start a server and wait for the SSH host keys to be generated
- name: Start server and wait for SSH host keys
  cloudscale_ch.cloud.server:
    name: my-cloudscale-server-with-ssh-key
    image: debian-10
    flavor: flex-4-2
    ssh_keys:
      - ssh-rsa XXXXXXXXXX...XXXX ansible@cloudscale
    api_token: xxxxxx
  register: server
  until: server is not failed
  retries: 5
  delay: 2

# Start a server with two network interfaces:
#
#    A public interface with IPv4/IPv6
#    A private interface on a specific private network with an IPv4 address

- name: Start a server with a public and private network interface
  cloudscale_ch.cloud.server:
    name: my-cloudscale-server-with-two-network-interfaces
    image: debian-10
    flavor: flex-4-2
    ssh_keys:
      - ssh-rsa XXXXXXXXXX...XXXX ansible@cloudscale
    api_token: xxxxxx
    interfaces:
      - network: 'public'
      - addresses:
        - subnet: UUID_of_private_subnet

# Start a server with a specific IPv4 address from subnet range
- name: Start a server with a specific IPv4 address from subnet range
  cloudscale_ch.cloud.server:
    name: my-cloudscale-server-with-specific-address
    image: debian-10
    flavor: flex-4-2
    ssh_keys:
      - ssh-rsa XXXXXXXXXX...XXXX ansible@cloudscale
    api_token: xxxxxx
    interfaces:
      - addresses:
        - subnet: UUID_of_private_subnet
          address: 'A.B.C.D'

# Start a server with two network interfaces:
#
#    A public interface with IPv4/IPv6
#    A private interface on a specific private network with no IPv4 address

- name: Start a server with a private network interface and no IP address
  cloudscale_ch.cloud.server:
    name: my-cloudscale-server-with-specific-address
    image: debian-10
    flavor: flex-4-2
    ssh_keys:
      - ssh-rsa XXXXXXXXXX...XXXX ansible@cloudscale
    api_token: xxxxxx
    interfaces:
      - network: 'public'
      - network: UUID_of_private_network
        addresses: []

返回值

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

Key

描述

flavor

字典

此服务器使用的类型

返回值:当 state != absent 时返回成功

示例: {"memory_gb": 4, "name": "Flex-4-2", "slug": "flex-4-2", "vcpu_count": 2}

href

字符串

获取此服务器详细信息的API URL

返回值:当 state != absent 时返回成功

示例: "https://api.cloudscale.ch/v1/servers/cfde831a-4e87-4a75-960f-89b0148aa2cc"

image

字典

用于启动此服务器的镜像

返回值:当 state != absent 时返回成功

示例: {"default_username": "ubuntu", "name": "Ubuntu 18.04 LTS", "operating_system": "Ubuntu", "slug": "ubuntu-18.04"}

interfaces

列表 / 元素=字符串

连接到服务器的网络端口列表

返回值:当 state != absent 时返回成功

示例: [{"addresses": ["..."], "type": "public"}]

name

字符串

服务器的显示名称

返回值:成功

示例: "its-a-me-mario.cloudscale.ch"

server_groups

列表 / 元素=字符串

服务器组列表

返回值:当 state != absent 时返回成功

示例: [{"href": "https://api.cloudscale.ch/v1/server-groups/...", "name": "db-group", "uuid": "..."}]

ssh_fingerprints

列表 / 元素=字符串

SSH主机密钥指纹列表。在从服务器检索主机密钥之前,将为null。

返回值:当 state != absent 时返回成功

示例: ["ecdsa-sha2-nistp256 SHA256:XXXX", "..."]

ssh_host_keys

列表 / 元素=字符串

SSH主机密钥列表。在从服务器检索主机密钥之前,将为null。

返回值:当 state != absent 时返回成功

示例: ["ecdsa-sha2-nistp256 XXXXX", "..."]

state

字符串

服务器的当前状态

返回值:成功

示例: "running"

tags

字典

与服务器关联的标签。

返回值:成功

示例: {"project": "my project"}

uuid

字符串

此服务器的唯一标识符

返回值:成功

示例: "cfde831a-4e87-4a75-960f-89b0148aa2cc"

volumes

列表 / 元素=字符串

连接到服务器的卷列表

返回值:当 state != absent 时返回成功

示例: [{"device": "/dev/vda", "size_gb": "50", "type": "ssd"}]

zone

字典

用于启动此服务器的区域

返回值:当 state != absent 时返回成功

示例: {"slug": "lpg1"}

作者

  • Gaudenz Steinlin (@gaudenz)

  • René Moser (@resmo)

  • Denis Krienbühl (@href)