OpenStack 界面开发中的排序问题
Contents [hide] |
---|
需求
获取主机列表的时候,希望能够对主机列表能分组显示,比如网络,一组网络段希望在一起显示
调研
openstack的nova list接口提供如:
1
|
nova list --fields networks |
但是,这个是novaclient提供的,而不是在nova server提供的。所以,我们在实现的时候,需要对nova list返回的数据进行自解析排序
排序的办法
由于nova list返回的数据结构及其复杂,而该数据也会因为我们创建虚拟机选择不同而变化,所以我们的原则是尽量不从新定义该接口的数据结构,因为如果重新定义结构,可能有我们未知的key和value。 所以我们这里采用python的map的update方式,增加一条。增加一个ip_addr,然后在形如[{"ip_addr":"172.17.39.3"},{},{}]的数据结构中对ip_addr进行json排序。
解决代码
python 端
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
def handler(self): httpclient = HTTPClient() #获取所有的计算节点 headers = { "X-Auth-Project-Id" :self.tenant_name, "User-Agent" : "python-novaclient" , "Accept" : "application/json" , "X-Auth-Token" :self.token_id, } method = "GET" url = setting.hyper_vm_url + "/" + self.tenant_id + "/servers/detail?all_tenants=1" try: response = httpclient.fetch(url,method=method, headers = headers) except Exception, e: return { "code" :e.code} #{"hypervisors": [{"id": 1, "hypervisor_hostname": "node-7.domain.tld"}]} body = eval (response.body.replace( "null" , "None" )).get( "servers" ) servers = {} for b in body: print "*" *50 ip_keys = b[ "addresses" ].keys() try: for ip_key in ip_keys: for address_ip in b[ "addresses" ][ip_key]: if address_ip[ "OS-EXT-IPS:type" ] == "fixed" : print address_ip[ "addr" ] b.update({ "ip_addr" :address_ip[ "addr" ]}) raise ValueError except: continue all_servers = { "servers" :body} return all_servers |
json 前端:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
function groupby_network(){ $.ajax({ url: "/api" , type : "POST" , data: "type=instance_list_with_network" , success: function (t){ debugger; var json_list = sortByKey(t.servers, "ip_addr" ); instance_list_handler({ "servers" :json_list}); } }) } function sortByKey(array, key) { return array. sort ( function (a, b) { var x = a[key]; var y = b[key]; return ((x < y) ? -1 : ((x > y) ? 1 : 0)); }); } |
最终实现按网络分组显示的效果.
OpenStack 界面开发中的排序问题的更多相关文章
- OpenStack 界面开发中response.body的中文编码问题
Contents [hide] 1 问题的引入= 1.1 解决办法 2 用户限制输入中文 3 不限制用户输入,呈现上修改 问题的引入= G在我们创建虚拟机的时候,会设置虚拟机的名称,描述,如果没有限制 ...
- 如何在MFC界面开发中响应Button按钮的Down和Up事件
通过尝试有两种方案可以解决这个问题,第一种方案是通过PreTranslateMessage函数在调度消息之前对消息类型进行筛选,第二种方案是重载CButton类,在重载后的类CForTestButto ...
- OpenWRT - WEB界面开发思路和基本方法
想要对OpenWRT的WEB界面(*下称界面)进行修改.修改的目标是: 1.修改页面的样式,设计为企业的风格(stylesheet) 2.新建自己的功能,实现 访问页面后,用户就可以对配置文件(也就是 ...
- winform界面开发-HTML内容编辑控件
参照及推荐博客:伍华聪 http://www.cnblogs.com/wuhuacong/archive/2009/07/07/1518346.html http://www.cnblogs.com/ ...
- 快速全面了解QT软件界面开发技术
快速全面了解QT软件界面开发技术 目录 前言 一. 学习QT可能的目的是什么? 只想体验一下QT? 当前的项目选择了用QT. 为将来做QT技术储备. 二. QT的核心技术优势是什么? QT在软 ...
- IOS程序开发中-跳转到 发送短信界面 实现发短信
前言:我发现我标题取的不好,谁帮我取个承接上下文的标题?评论一下,我改 项目需求:在程序开发中,我们需要在某个程序里面发送一些短信验证(不是接收短信验证,关于短信验证,传送门:http://www.c ...
- Android开发中使用Intent跳转到系统应用中的拨号界面、联系人界面、短信界面
现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 首先,我们先看拨号界面,代码如下: Intent intent =new Intent(); intent. ...
- JAVA 图形开发中组件对齐方法及界面开发
/*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 在上篇博客中提到了JAVA图形界面开发时的两种布局,流式布局和边框布局. 在实际使用中可能会发现,往 ...
- 总结开发中基于DevExpress的Winform界面效果
DevExpress是一家全球知名的控件开发公司, DevExpress 也特指此公司出品的控件集合或某系列控件或其中某控件.我们应用最为广泛的是基于Winform的DevExpress控件组,本篇随 ...
随机推荐
- C#类的继承
public class Animal { public string word=""; //virtual表示虚方法,用以被重写 public virtual void say( ...
- 利用utl_file来读取文件.
以前写过用external table来加载trace文件,详情参考下面链接. http://www.cnblogs.com/princessd8251/p/3779145.html 今天要做到是用U ...
- 四元数(Quaternion)和旋转(转)
http://blog.csdn.net/candycat1992/article/details/41254799 四元数介绍 旋转,应该是三种坐标变换--缩放.旋转和平移,中最复杂的一种了.大家应 ...
- nginx源码学习----内存池
最近在进行监控平台的设计,之前一直觉得C/C++中最棘手的部分是内存的管理上,远不止new/delete.malloc/free这么简单.随着代码量的递增,程序结构复杂度的提高.各种内存方面的问题悄然 ...
- CAD出图
今天帮着客户输出图纸,用打印命令,设置打印参数,选择dwg到pdf打印机.设置图纸大小等参数 CAD满图纸输出 按照比例尺输出 plot,一般图纸绘制是已经有一个比例尺,所以按照1:1输出,如果图纸是 ...
- 无法打开内核设备“\\.\Global\vmx86”: 系统找不到指定的文件。您在安装 VMware Workstation 后是否进行了重新引导?
解决方法宿主机中执行如下命令重新启动: net start vmci net start vmx86 net start VMnetuserif sc config vmci=auto sc conf ...
- 计算NSString含有多少个相同字符串
// // NSString+NSStringExt.m // 01-NSString类 // // Created by apple on 14-3-20. // Copyright (c) ...
- Java基础之读文件——使用通道随机读写文件(RandomReadWrite)
控制台程序,使用通道随机读写primes_backup.bin文件. import static java.nio.file.StandardOpenOption.*; import java.nio ...
- linux:档案与目录管理
几个常见的目录处理命令: cd(change directory):变更目录 pwd(print working directory):显示当前目录[目录为连结档,则只显示连结档的路径]([-P]不以 ...
- PostgreSQL Errors and Messages
使用RAISE语句来报告消息并抛出错误 RAISE [ level ] ’format’ [, expression [, ... ]] [ USING option = expression [, ...