【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");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章