使用OpenStack Nova API以编程方式设置实例名称

Adr*_*scu 5 cloud amazon-ec2 openstack

我已经让自己认识到EC2用户习惯使用的许多功能(特别是标记)在OpenStack中不存在.然而,有一项功能的缺席让我发疯.

尽管OpenStack并不完全支持实例标签(如EC2那样),但它确实具有实例名称的概念.此UI名称由Web UI公开,甚至允许您设置它:

实例列表中的实例名称

编辑实例名称

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

但是(这是我的问题)此字段不会通过nova-ec2API层公开.他们将此与现有EC2平台工具集成的最简洁方法是模拟名称为"Name"的实例Tag,但他们不会这样做.更重要的是,我无法弄清楚我可以使用哪个Nova API端点来读取和写入名称(它似乎没有在API参考文档中记录); 但当然,自从Web客户端以来,它必须以某种方式可行,并且nova-client可以以某种方式实现它.

目前,我每次启动新实例时都被迫从网站上手动更改它.(我在实例创建期间无法执行此操作,因为我使用的是nova-ec2API,而不是nova命令行客户端).

我的问题是:

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

Dre*_*wch 4

Pythonnovaclient.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)
Run Code Online (Sandbox Code Playgroud)

这表示您可以通过将以下 JSON 发布到 来更新服务器的名称http://nova-api:port/v2.0/servers/{server-id}

{
  "server": {
      "name": "new_name"
  }
}
Run Code Online (Sandbox Code Playgroud)

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