`
haoningabc
  • 浏览: 1445071 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

openstack的topo图

阅读更多
http://haoningabc.iteye.com/blog/2317951装完openstack
http://haoningabc.iteye.com/blog/2322169做完neutron的试验
复杂的网络关系还是无法获取,
做个topo图

写个脚本查看nova和neutron的表的结构
mysql_openstack.sh:
#!/bin/sh    
#for i  in `awk ' {if(NR>4 && NR<40)print $2};' a.log `    
  
mysql_user=root  
mysql_password=haoning  
mysql_host=mcon  
  
if [ "$1" =  "" ]  
then  
        echo "please use ./mysql_openstack.sh [dbname],  for example: ./mysql_openstack.sh keystone";  
        echo "this will exit."    
        exit 0;  
fi  
  
echo "use db " $1    
  
for i  in ` mysql -u$mysql_user -h$mysql_host -p$mysql_password  $1  -e "show tables" |awk ' {if(NR>1)print $1};'`  
do  
        if [ $i != "ml2_vxlan_allocations" ]  
        then  
                echo "mysql -u$mysql_user -h$mysql_host -p$mysql_password $1 -e \"select * from \`$i\`\"";  
                mysql -u$mysql_user -h$mysql_host -p$mysql_password $1 -e "select * from \`$i\`";  
        fi  
done  

./mysql_openstack.sh neutron
./mysql_openstack.sh nova

观察得到 nova库的instance
neutron库的,networks,routers,subnets,ports
这几个表看明白就理解neutron的基础概念了
网络,子网,路由器,端口

其实就是linux的
brctl show
ip netns
bridge fdb
ip neigh

veth pair,tap,桥,vxlan
等概念的组合
如果使用openstack命令
nova list
neutron net-list
neutron subnet-list
neutron router-list
neutron port-list


简单写个java的demo,
生成固定格式的json,
传给noflo显示成topo图
package openstacktopo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

//import net.sf.json.JSONObject;
//https://sourceforge.net/projects/json-lib/files/json-lib/json-lib-2.4/
public class Topo {
	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static Connection getConnection(String db) {
		String url = "jdbc:mysql://192.168.139.251:3306/"+db;
		String username = "root";
		String password = "haoning";
		Connection con = null;
		try {
			con = DriverManager.getConnection(url, username, password);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return con;
	}
	public  Map getInstances() {//获取实例
		Map vm_processes=new HashMap();
		ResultSet rs = null;
		Connection con = null;
		try {
			con = getConnection("nova");
			PreparedStatement ps = null;
			String sql = "select i.uuid,i.display_name,i.launched_on,i.vm_state from  instances i where  deleted =0 ";
			ps = (PreparedStatement) con.prepareStatement(sql);
			if (ps.execute()) {	
				rs = ps.getResultSet();
				StringBuffer b = new StringBuffer();
				while (rs.next()) {
					JSONObject instance=new JSONObject();
					JSONObject metadata=new JSONObject();
					//System.out.println(rs.getString("uuid")+"\t");
					//System.out.println(rs.getString("display_name")+"\t");
					instance.put("component", "vm/"+rs.getString("uuid"));
					metadata.put("type", "vm");
					metadata.put("vm_id", rs.getString("uuid"));
					metadata.put("vm_status", rs.getString("vm_state"));
					metadata.put("label", rs.getString("display_name"));
					instance.put("metadata", metadata);
					//System.out.println(instance);
					vm_processes.put("vm/"+rs.getString("uuid"), instance);
				}
			} else {
				int i = ps.getUpdateCount();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				rs.close();
				con.close();
			} catch (Exception e2) {}		
		}
		return vm_processes;
	}
	public  List<JSONObject> get_instance_net() {//获取vm和网络的关系
		List list_i_net=new ArrayList();
		ResultSet rs = null;
		Connection con = null;
		try {
			con = getConnection("nova");
			PreparedStatement ps = null;
			String sql = "select iic.network_info,i.uuid,i.display_name,i.launched_on from instance_info_caches iic ,  instances i where i.id=iic.id and  i.deleted = 0";
			ps = (PreparedStatement) con.prepareStatement(sql);
			if (ps.execute()) {
				rs = ps.getResultSet();
				StringBuffer b = new StringBuffer();
				while (rs.next()) {
					//System.out.println(rs.getString("uuid")+"\t");//vm-id
					//System.out.println(rs.getString("display_name")+"\t");//vm-name
					String network_info = rs.getString("network_info");
					//System.out.println(rs.getString("network_info"));
					JSONArray ja = new JSONArray().fromObject(network_info);
					for(int i=0;i<ja.size();i++){
						JSONObject jo= (JSONObject) ja.get(i);
						//System.out.println(jo.get("id"));//port-id ★★★★★
						JSONObject network= (JSONObject) jo.get("network");
						//System.out.println("---------");
						//System.out.println(((JSONObject)((JSONArray)((JSONObject)((JSONArray)(network.get("subnets"))).get(0)).get("ips")).get(0)).get("address"));
						//System.out.println(((JSONObject)(((JSONObject)((JSONArray)(network.get("subnets"))).get(0)).get("meta"))).get("dhcp_server"));
						String dhcp_server = (String) ((JSONObject)(((JSONObject)((JSONArray)(network.get("subnets"))).get(0)).get("meta"))).get("dhcp_server");
						String vm_address = (String) ((JSONObject)((JSONArray)((JSONObject)((JSONArray)(network.get("subnets"))).get(0)).get("ips")).get(0)).get("address");
						//System.out.println(network.get("id"));//network-id
						//System.out.println(network.get("label"));//network-name
						//System.out.println(network);
						JSONObject one_connection=new JSONObject();
						one_connection.put("src", new JSONObject().fromObject("{\"process\":\"switch/"+network.get("id")+"\",\"port\":\""+dhcp_server+"\"}"));//有port
						one_connection.put("tgt", new JSONObject().fromObject("{\"process\":\"vm/"+rs.getString("uuid")+"\",\"port\":\""+vm_address+"\"}"));
					//	System.out.println(one_connection);
						list_i_net.add(one_connection);
					}
					//System.out.println();
				}
				
			} else {
				int i = ps.getUpdateCount();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				rs.close();
				con.close();
			} catch (Exception e2) {}		
		}
		return list_i_net;
	}
	public  List<JSONObject> get_router_net() {//获取router和网络的关系
		List list_router_net=new ArrayList();
		ResultSet rs = null;
		Connection con = null;
		try {
			con = getConnection("neutron");
			PreparedStatement ps = null;
			String sql = "select * from routerports rp ,ports p,ipallocations i where rp.port_id=p.id and i.port_id=p.id";
			ps = (PreparedStatement) con.prepareStatement(sql);
			if (ps.execute()) {
				rs = ps.getResultSet();
				StringBuffer b = new StringBuffer();
				while (rs.next()) {
					JSONObject one_connection=new JSONObject();
					String ip_address = rs.getString("ip_address");
					if("network:router_interface".equals(rs.getString("port_type"))){
						one_connection.put("src", new JSONObject().fromObject("{\"process\":\"router/"+rs.getString("router_id")+"\",\"port\":\""+ip_address+"\"}"));
						one_connection.put("tgt", new JSONObject().fromObject("{\"process\":\"switch/"+rs.getString("network_id")+"\",\"port\":\""+"in"+"\"}"));
										
					}else{//network:router_gateway
						//one_connection.put("src", new JSONObject().fromObject("{\"process\":\"router/"+rs.getString("router_id")+"\",\"port\":\""+jo.get("port_id")+"\"}"));
						one_connection.put("src", new JSONObject().fromObject("{\"process\":\"switch/"+rs.getString("network_id")+"\",\"port\":\""+"out"+"\"}"));
						one_connection.put("tgt", new JSONObject().fromObject("{\"process\":\"router/"+rs.getString("router_id")+"\",\"port\":\""+ip_address+"\"}"));	
					}
					//System.out.println(one_connection);
					list_router_net.add(one_connection);
						
					//System.out.println();
				}
				
			} else {
				int i = ps.getUpdateCount();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				rs.close();
				con.close();
			} catch (Exception e2) {}		
		}
		return list_router_net;
	}
	public  Map<String,JSONObject> getRouters() {
		Map<String,JSONObject>  routers=new HashMap<String,JSONObject>();
		Connection con = null;
		ResultSet rs = null;
		try {
			con = getConnection("neutron");
			PreparedStatement ps = null;
			String sql = "select * from routers";
			ps = (PreparedStatement) con.prepareStatement(sql);
			if (ps.execute()) {
				rs = ps.getResultSet();
				StringBuffer b = new StringBuffer();
				while (rs.next()) {
					JSONObject instance=new JSONObject();
					JSONObject metadata=new JSONObject();
					instance.put("component", "router/"+rs.getString("id"));
					metadata.put("type", "router");
					metadata.put("router_id", rs.getString("id"));
					metadata.put("router_status", rs.getString("status"));
					metadata.put("label", rs.getString("name"));
					instance.put("metadata", metadata);
					//System.out.println(instance);
					routers.put("router/"+rs.getString("id"), instance);
				}
			} else {
				int i = ps.getUpdateCount();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				rs.close();
				con.close();
			} catch (Exception e2) {}		
		}
		return routers;
	}
	public  Map getNetworkExternal() {//获取网络是外部网络的集合
		Map external_map = new HashMap();
		Connection con = null;
		ResultSet rs = null;
		try {
			con = getConnection("neutron");
			PreparedStatement ps = null;
			String sql = "select * from networkrbacs where action='access_as_external'";//where tenant_id= scsssdfs;
			ps = (PreparedStatement) con.prepareStatement(sql);
			if (ps.execute()) {
				rs = ps.getResultSet();
				StringBuffer b = new StringBuffer();
				while (rs.next()) {
					external_map.put(rs.getString("object_id"),"access_as_external");
				}
			} else {
				int i = ps.getUpdateCount();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				rs.close();
				con.close();
			} catch (Exception e2) {}		
		}
		//System.out.println(external_map.size());
		return external_map;
	}
	public  Map getNetworkShared() {//获取网络是共享网络的集合
		Map shared_map = new HashMap();
		Connection con = null;
		ResultSet rs = null;
		try {
			con = getConnection("neutron");
			PreparedStatement ps = null;
			String sql = "select * from networkrbacs where action='access_as_shared'";//where tenant_id= scsssdfs;
			ps = (PreparedStatement) con.prepareStatement(sql);
			if (ps.execute()) {
				rs = ps.getResultSet();
				StringBuffer b = new StringBuffer();
				while (rs.next()) {
					shared_map.put(rs.getString("object_id"), "access_as_shared");
				}
			} else {
				int i = ps.getUpdateCount();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				rs.close();
				con.close();
			} catch (Exception e2) {}		
		}
		//System.out.println(shared_map.size());
		return shared_map;
	}
	public  Map getSwitchs() {
		Map<String,JSONObject> switchs=new HashMap<String,JSONObject>();
		Connection con = null;
		ResultSet rs = null;
		Map shared_map = getNetworkShared();
		Map external_map = getNetworkExternal();
		try {
			con = getConnection("neutron");
			PreparedStatement ps = null;
			String sql = "select * from networks";//where tenant_id= scsssdfs;
			ps = (PreparedStatement) con.prepareStatement(sql);
			if (ps.execute()) {
				rs = ps.getResultSet();
				StringBuffer b = new StringBuffer();
				while (rs.next()) {
					JSONObject instance=new JSONObject();
					JSONObject metadata=new JSONObject();
					instance.put("component", "switch/"+rs.getString("id"));
					metadata.put("type", "switch");
					metadata.put("switch_id", rs.getString("id"));
					metadata.put("switch_status", rs.getString("status"));
					metadata.put("label", rs.getString("name"));
					if(shared_map.get(rs.getString("id"))!=null){
						metadata.put("shared", "true");
					}
					if(external_map.get(rs.getString("id"))!=null){
						metadata.put("router_external", "true");
					}
					instance.put("metadata", metadata);
					//System.out.println(instance);
					switchs.put("switch/"+rs.getString("id"), instance);
				}
			} else {
				int i = ps.getUpdateCount();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				rs.close();
				con.close();
			} catch (Exception e2) {}		
		}
		return switchs;
	}
	public  JSONObject getTopo(){
		JSONObject topojson = new JSONObject();
		JSONObject processes = new JSONObject();
		Map ins	=getInstances();
		Iterator<Map.Entry<String, JSONObject>> it = ins.entrySet().iterator();
		while (it.hasNext()) {
		   Map.Entry<String, JSONObject> entry = it.next();
		   processes.put(entry.getKey(), entry.getValue());
		}
		Map routers= getRouters();
		Iterator<Map.Entry<String, JSONObject>> router = routers.entrySet().iterator();
		while (router.hasNext()) {
		   Map.Entry<String, JSONObject> entry = router.next();
		   processes.put(entry.getKey(), entry.getValue());
		}
		Map switchs= getSwitchs();
		Iterator<Map.Entry<String, JSONObject>> switcher = switchs.entrySet().iterator();
		while (switcher.hasNext()) {
		   Map.Entry<String, JSONObject> entry = switcher.next();
		   processes.put(entry.getKey(), entry.getValue());
		}
		topojson.put("processes", processes);

		List<JSONObject> lin = get_instance_net();
		List<JSONObject> lrn = get_router_net();
		for(int i=0;i<lin.size();i++){
			lrn.add(lin.get(i));
		}
		topojson.put("connections", lrn);
		System.out.println(topojson);
		return topojson;
	}
	public static void main(String[] args) {
		JSONObject jo = new JSONObject();
		//get_instance_net();
		//getInstances();
		//getRouters();
		//getSwitchs();
		//get_router_net();
		Topo topo=new Topo();
		topo.getTopo();
	}


}



  • 大小: 23.4 KB
分享到:
评论

相关推荐

    openstack拓扑图.xmind

    o p e n s t a c k 拓扑图

    Openstack图文安装详细步骤教程(亲自安装并截图整理).pdf

    最终经过夜以继日的尝试和配置,终于在某一天的深夜,安装成功了,我把安装成功的过程和配置以及图片都一步一步的记录下来,希望能报道大家。 ps: 安装过程中,需要注意的地方均以使用红色高亮字体标出, 切记一定...

    openstack设计与实现

    《Open Stack设计与实现》是一本介绍OpenStack设计与实现原理的书。《Open Stack设计与实现》以Juno版本为基础,覆盖了OpenStack的学习方法到设计与实现等各个方面内容,致力于帮助读者形成OpenStack及其各个主要...

    OpenStack论文以及搭建OpenStack的过程.docx

    计算已成为IT业界出现频率最高的热门词语之...包括OpenStack计算(代号为Nova),OpenStack对象存储(代号为Swift),并OpenStack镜像服务(代号Glance)的集合。OpenStack提供了一个操作平台,或工具包,用于编排云。

    Mastering.OpenStack.178439564

    Design, deploy, and manage a scalable OpenStack infrastructure About This Book Learn how to design and deploy an OpenStack private cloud using automation tools and best practices Gain valuable ...

    openstack 计费方式探讨

    openstack 计费模块设计与SSH实现

    Common OpenStack Deployments pdf

    OpenStack is today’s leading technology for building and integrating public and private clouds. Common OpenStack Deployments is a complete, practical guide to deploying OpenStack and understanding ...

    openstack.xmind

    Openstack

    华为基于OpenStack的华为FusionSphere解决方案培训.rar

    2.1_什么是OpenStack(2017.5.30) 2.2_OpenStack之于虚拟化(2017.5.30) 2.3_OpenStack之于云计算(2017.5.30) 2.4_OpenStack发展历程(2017.5.30) 2.5_OpenStack的设计准则(2017.5.30) 2.6_OpenStack的架构(2017.5...

    OpenStack.Trove.Essentials.1785285610.pdf

    Build your own cloud based Database as a Service using OpenStack Trove About This Book Familiarize yourself with the concept of Database as a Service and make your existing system scalable and ...

    华为FusionSphere Openstack云数据中心资料汇总集【视频 PDF】.rar

    FusionSphere_OpenStack_云数据中心拓扑图_ 发布版.pdf FusionSphere_OpenStack_云数据中心架构概要-发布版.pdf FusionSphere_OpenStack_云数据中心部署36计-发布版.pdf ManageOne ServiceCenter_V100R002C30SPC200_...

    Openstack组件卸载命令

    Openstack组件卸载命令,跟上面的Openstack实验相对应的卸载文档。http://download.csdn.net/detail/u014028392/9161039

    Openstack Trove概要 .docx

    Openstack Trove概要Openstack Trove概要Openstack Trove概要Openstack Trove概要Openstack Trove概要Openstack Trove概要Openstack Trove概要Openstack Trove概要Openstack Trove概要Openstack Trove概要Openstack ...

    I版openstack网络结构图

    I版openstack网络结构图,描述了I版openstack的网络结构,便于调节其网络

    云计算OpenStack Cloud Computing Cookbook 英文电子书

    云计算OpenStack Cloud Computing Cookbook 英文电子书.pdf Openstack以Python编程语言+Twisted软件框架编写。整合Tornado网页服务器、Nebula运算平台。遵循Open Virtualization Format、AMQP、SQLAlchemy等标准。所...

    Openstack M版安装

    手动安装openstack Mitaka版

    OpenStack Cloud Computing Cookbook

    The Fourth Edition of the industry-acclaimed OpenStack Cloud Computing Cookbook, from four recognized experts, updated to the latest OpenStack build including Cinder, Nova, and Neutron. Key Features ...

Global site tag (gtag.js) - Google Analytics