【Openstack 4j】如何指定Nova的版本

背景

在使用openstack4j的过程中,发现openstack的版本和文档有一些问题。

openstack4j 通过Identity服务返回的catalog信息,获取Endpoint节点,访问例如nova-compute的服务。

而由于openstack的某些版本,例如yoga,它的compute服务版本是2.1,因此无法使用一些高版本的参数。

例如:

{ "badRequest": 
  {
    "code": 400, "message": "Invalid input for field/attribute 0. Value:{'device_name': 'local0', 'source_type': 'blank', 'destination_type': 'volume', 
    'volume_size': 200, 'delete_on_termination': True, 'volume_type': 'slankka-ssd'}. 
   Additional properties are not allowed ('volume_type' was unexpected)"
  }
}

调查

通过查阅资料,发现社区也有类似得需求。

Openstack4j-PR-132
MicroVersions

Openstack4j的文档也没说Openstack怎么使用不同的子版本,还是藏在一个没有被合并的PR中。

分析

OSClientSession.headers() (and OSClientSession.getHeaders()).

  • 使用 OSClientSession类的headers获取已经存在的 Map<String, String>
  • 使用 OSClientSession类的headers(...) 设置要存储的Headers

具体切换版本的方法如Openstack文档所说:

X-OpenStack-Nova-API-Version: 2.4
通过Openstack的API查阅支持的版本范围:

别请求这个服务,因为是示例

curl openstack.slankka.com:8774

得出

{
    "versions": [
        {
            "id": "v2.0",
            "status": "SUPPORTED",
            "version": "",
            "min_version": "",
            "updated": "2011-01-21T11:33:21Z",
            "links": [
                {
                    "rel": "self",
                    "href": "http://openstack.slankka.com:8774/v2/"
                }
            ]
        },
        {
            "id": "v2.1",
            "status": "CURRENT",
            "version": "2.90",
            "min_version": "2.1",
            "updated": "2013-07-23T11:33:21Z",
            "links": [
                {
                    "rel": "self",
                    "href": "http://openstack.slankka.com:8774/v2.1/"
                }
            ]
        }
    ]
}

因此支持的范围是 2.1~2.90

结论

使用Openstack4j的API:

OSClientSessionV3是OSClientSession的子类,如果没有getHeaders,可以向上转型
实际使用中,发现getHeaders没有值,因此可以直接headers传入最新 Map<String,String>

Map<String,String> versions = new HashMap<>();
versions.put("X-OpenStack-Nova-API-Version", "2.90");
posted @ 2023-07-04 11:25  一杯半盏  阅读(148)  评论(0编辑  收藏  举报