使用 OpenStack Compute

在使用 Compute 服务之前,您需要通过遵循 连接 用户指南来创建与您的 OpenStack 云的连接。这将为您提供在以下示例中使用的 conn 变量。

Compute 服务的核心资源是服务器。

列出服务器

一个 服务器 是一台虚拟机,它提供对云提供商正在运行的计算实例的访问。

def list_servers(conn):
    print("List Servers:")

    for server in conn.compute.servers():
        print(server)

完整示例:compute 资源列表

列出镜像

一个 镜像 是您希望用于服务器的操作系统。

def list_images(conn):
    print("List Images:")

    for image in conn.compute.images():
        print(image)

完整示例:compute 资源列表

列出风味

一个 风味 是服务器的资源配置。每个风味都是磁盘、内存、vCPU 和网络带宽的独特组合。

def list_flavors(conn):
    print("List Flavors:")

    for flavor in conn.compute.flavors():
        print(flavor)

完整示例:compute 资源列表

列出网络

一个 网络 为服务器提供连接性。

def list_networks(conn):
    print("List Networks:")

    for network in conn.network.networks():
        print(network)

完整示例:network 资源列表

创建密钥对

一个 密钥对公钥密码学 的公钥和私钥。它们用于加密和解密连接到服务器时的登录信息。

def create_keypair(conn):
    keypair = conn.compute.find_keypair(KEYPAIR_NAME)

    if not keypair:
        print("Create Key Pair:")

        keypair = conn.compute.create_keypair(name=KEYPAIR_NAME)

        print(keypair)

        try:
            os.mkdir(SSH_DIR)
        except OSError as e:
            if e.errno != errno.EEXIST:
                raise e

        with open(PRIVATE_KEYPAIR_FILE, 'w') as f:
            f.write(str(keypair.private_key))

        os.chmod(PRIVATE_KEYPAIR_FILE, 0o400)

    return keypair

完整示例:compute 资源创建

创建服务器

最少情况下,服务器在创建时需要一个名称、一个镜像、一个风味和一个网络。您可以列出它们(如上所示)以发现这些属性的名称和 ID,然后使用 find 方法获取适当的资源。

理想情况下,您还应该使用密钥对创建服务器,以便可以使用私钥登录该服务器。

服务器启动需要时间,因此我们调用 wait_for_server 来等待它变为活动状态。

def create_server(conn):
    print("Create Server:")

    image = conn.image.find_image(IMAGE_NAME)
    flavor = conn.compute.find_flavor(FLAVOR_NAME)
    network = conn.network.find_network(NETWORK_NAME)
    keypair = create_keypair(conn)

    server = conn.compute.create_server(
        name=SERVER_NAME,
        image_id=image.id,
        flavor_id=flavor.id,
        networks=[{"uuid": network.id}],
        key_name=keypair.name,
    )

    server = conn.compute.wait_for_server(server)

    print(f"ssh -i {PRIVATE_KEYPAIR_FILE} root@{server.access_ipv4}")

完整示例:compute 资源创建