【问题标题】:Programmatically setting instance name with the OpenStack Nova API使用 OpenStack Nova API 以编程方式设置实例名称
【发布时间】:2012-06-04 21:15:50
【问题描述】:

我已经接受了这样一个事实,即 EC2 用户习惯的许多功能(特别是标记)在 OpenStack 中并不存在。然而,有一个功能的缺失让我抓狂。

虽然 OpenStack 不完全支持实例标签(就像 EC2 一样),但它确实具有实例名称的概念。此名称由 Web UI 公开,您甚至可以设置它:

此名称也通过nova list 命令行实用程序公开。

但是(这是我的问题)该字段没有通过nova-ec2 API 层公开。他们将其与现有 EC2 平台工具集成的最简洁方法是模拟名称为“Name”的实例标签,但他们不这样做。更重要的是,我无法弄清楚我可以使用哪个 Nova API 端点来读取和写入名称(它似乎没有记录在 API reference 上);但当然它必须以某种方式成为可能,因为网络客户端和nova-client 都可以以某种方式做到这一点。

目前,每次启动新实例时,我都不得不从网站手动更改它。 (我不能在实例创建过程中这样做,因为我使用的是nova-ec2 API,而不是nova 命令行客户端)。

我的问题是:

  1. 有没有办法通过 EC2 API 层读取/写入实例名称?
  2. 如果不这样做,以编程方式设置它的 REST 端点是什么?
  3. (奖励):Nova 在支持通用实例标记方面取得了哪些进展?

【问题讨论】:

    标签: amazon-ec2 cloud openstack


    【解决方案1】:

    Python novaclient.v1_1 包在 server 对象上有一个方法:

    def update(self, server, name=None):
        """
        Update the name or the password for a server.
    
        :param server: The :class:`Server` (or its ID) to update.
        :param name: Update the server's name.
        """
        if name is None:
            return
    
        body = {
            "server": {
                "name": name,
            },
        }
    
        self._update("/servers/%s" % base.getid(server), body)
    

    这表示您可以通过 POST-ing 更新服务器的名称 以下 JSON 转至http://nova-api:port/v2.0/servers/{server-id}

    {
      "server": {
          "name": "new_name"
      }
    }
    

    当然,所有常见的身份验证标头(即X-Auth-Token 来自您的 Keystone 服务器)仍然是必需的,因此可能更容易 使用您喜欢的任何语言的客户端库来管理所有这些。

    【讨论】:

    • 谢谢,这行得通(我最终只使用 Python novaclient。所以我现在有两个不同的客户端库来访问同一个 API。哦,好吧!)
    • 为了回答您的第三个问题,它已被添加到错误愿望清单中。 bugs.launchpad.net/nova/+bug/770070
    • @EverettToews:谢谢;但是,考虑到这是一年多前提交的,而且似乎什么都没有发生,我没有屏住呼吸 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多