如何在openstack中由nova api确定可用区列表顺序?

时间:2017-01-24 05:03:23

标签: openstack

我想在我的openstack设置中更改可用区域的默认选项。但是,我无法找出确定nova api返回的可用区域顺序的内容。例如,运行openstack availability zone list我得到:

+--------------+-------------+
| Zone Name    | Zone Status |
+--------------+-------------+
| zone2        | available   |
| zone1        | available   |
| internal     | available   |
| zone3        | available   |
+--------------+-------------+

与地平线下拉框中的顺序相同。但是,直接查询数据库,我得到:

mysql> select * from aggregate_metadata;
+---------------------+------------+------------+----+--------------+-------------------+--------------+---------+
| created_at          | updated_at | deleted_at | id | aggregate_id | key               | value        | deleted |
+---------------------+------------+------------+----+--------------+-------------------+--------------+---------+
| 2015-06-12 08:43:07 | NULL       | NULL       |  1 |            1 | availability_zone | zone1 |       0 |
| 2015-06-12 08:43:08 | NULL       | NULL       |  2 |            2 | availability_zone | zone2 |       0 |
| 2015-10-26 05:30:15 | NULL       | NULL       |  3 |            3 | availability_zone | zone3 |       0 |
+---------------------+------------+------------+----+--------------+-------------------+--------------+---------+
3 rows in set (0.00 sec)

显然,openstack api在返回结果之前正在进行一些排序......但是,我无法弄清楚它是如何排序的,也不知道如何控制排序。

1 个答案:

答案 0 :(得分:0)

get_availability_zones是nova api用于收集可用区列表的函数。

此函数获取可用服务列表(基于id排序),添加可用区域名称添加到这些服务。

由于服务清单是第一步,因此它的ID定义了订单而不是区域名称。

可以根据需要以不同方式修改排序顺序。

  1. 在前端(地平线)排序顺序

    使用

    修改this line
    ng-options="zone.value as zone.label for zone in model.availabilityZones | orderBy:'value'"
  2. 在后端(nova-api)对订单进行排序

    在get_availability_zones函数

  3. 中的return语句之前添加

    available_zones.sort()
    not_available_zones.sort()