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 界面开发中的排序问题的更多相关文章

  1. OpenStack 界面开发中response.body的中文编码问题

    Contents [hide] 1 问题的引入= 1.1 解决办法 2 用户限制输入中文 3 不限制用户输入,呈现上修改 问题的引入= G在我们创建虚拟机的时候,会设置虚拟机的名称,描述,如果没有限制 ...

  2. 如何在MFC界面开发中响应Button按钮的Down和Up事件

    通过尝试有两种方案可以解决这个问题,第一种方案是通过PreTranslateMessage函数在调度消息之前对消息类型进行筛选,第二种方案是重载CButton类,在重载后的类CForTestButto ...

  3. OpenWRT - WEB界面开发思路和基本方法

    想要对OpenWRT的WEB界面(*下称界面)进行修改.修改的目标是: 1.修改页面的样式,设计为企业的风格(stylesheet) 2.新建自己的功能,实现 访问页面后,用户就可以对配置文件(也就是 ...

  4. winform界面开发-HTML内容编辑控件

    参照及推荐博客:伍华聪 http://www.cnblogs.com/wuhuacong/archive/2009/07/07/1518346.html http://www.cnblogs.com/ ...

  5. 快速全面了解QT软件界面开发技术

    快速全面了解QT软件界面开发技术     目录 前言 一. 学习QT可能的目的是什么? 只想体验一下QT? 当前的项目选择了用QT. 为将来做QT技术储备. 二. QT的核心技术优势是什么? QT在软 ...

  6. IOS程序开发中-跳转到 发送短信界面 实现发短信

    前言:我发现我标题取的不好,谁帮我取个承接上下文的标题?评论一下,我改 项目需求:在程序开发中,我们需要在某个程序里面发送一些短信验证(不是接收短信验证,关于短信验证,传送门:http://www.c ...

  7. Android开发中使用Intent跳转到系统应用中的拨号界面、联系人界面、短信界面

    现在开发中的功能需要直接跳转到拨号.联系人.短信界面等等,查找了很多资料,自己整理了一下. 首先,我们先看拨号界面,代码如下: Intent intent =new Intent(); intent. ...

  8. JAVA 图形开发中组件对齐方法及界面开发

    /*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 在上篇博客中提到了JAVA图形界面开发时的两种布局,流式布局和边框布局. 在实际使用中可能会发现,往 ...

  9. 总结开发中基于DevExpress的Winform界面效果

    DevExpress是一家全球知名的控件开发公司, DevExpress 也特指此公司出品的控件集合或某系列控件或其中某控件.我们应用最为广泛的是基于Winform的DevExpress控件组,本篇随 ...

随机推荐

  1. Sparse Graph---hdu5876(set+bfs+补图求最短路)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5876 题意:有一个含有n个点的无向图,已知图的补图含有m条边u, v:求在原图中,起点s到 ...

  2. Sql server中左连接语句

    数据库中学生表和课程表如下: 左连接sql语句: select a.studentName,a.studentAge,b.courseName from student a left join cou ...

  3. tabBaritem的图片偏移

    tabBarItem.imageInsets = UIEdgeInsetsMake(-10, 0, 10, 0);

  4. Mysqldump 参数详解(全)

    Mysqldump 参数详解(全) http://www.open-open.com/lib/view/open1358172843762.html mysqldump -S /tmp/mysql33 ...

  5. docker:从 tomcat 容器连接到 mysql 容器

    docker 中的容器互联是一个较为复杂的话题,详细内容将在后续章节中介绍. 续前 2 个章节的内容,我们创建了一个 mysql 容器和一个 tomcat 容器,可以使用 「docker ps」来查看 ...

  6. PaySignKey

    关键词:微信支付 PaySignKey 原文:http://www.cnblogs.com/txw1958/p/weixin-paysignkey.html 微信支付现在分为v2版和v3版 2014年 ...

  7. Medical image computing

    Processing and analysis of medical images using computer comprises the following: image formation an ...

  8. Ubuntu 上安装 Freemind 并支持中文

    Ubuntu 上安装 Freemind 并支持中文 JAVA 运行时 Freemind 是一个使用 Java 编写的思维导图工具,在安装时,需要到 Java 运行时(使用 OpenJRE 或 Orac ...

  9. Java基础——数组Array

    一.数组基本概念 数组是相同类型数据的有序集合. 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成.其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们. 数组有三 ...

  10. Group的操作

    1. 概述 “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组 示例 2. group by的简单操作 3. Group By中Select指定的字段限制 select指定的 ...