OpenDaylight开发----建立odlops工程(二)

OpenDaylight开发----建立odlops工程

二、功能开发

   想要实现上面的场景,那么ODL要首先从OPS中获取token,然后用这个token去创建网络,添加子网,获取镜像和类型模板,创建多个虚拟机。流程如下图所示:

OpenDaylight哈哈----建立odlops工程(二)
                      
  1、获取token

 

  • package org.opendaylight.odlops.impl;
  •  
  • import java.io.BufferedReader; 
  • import java.io.DataOutputStream; 
  • import java.io.IOException; 
  • import java.io.InputStreamReader; 
  • importjava.io.UnsupportedEncodingException; 
  • import java.net.HttpURLConnection; 
  • import java.net.MalformedURLException; 
  • import java.net.URL; 
  • import java.text.SimpleDateFormat; 
  • import java.util.Date; 
  •   
  • import org.json.JSONObject;
  •    
  •   
  • public class Client { 
  •     
  •     public static finalString ADD_URL ="http://192.168.1.103:5000/v2.0/tokens"; 
  •   
  •     public static Stringappadd() {
  •         String id = "";
  •  
  •         try{ 
  •           //创建连接 
  •            URL url =new URL(ADD_URL); 
  •           HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
  •           connection.setDoOutput(true); 
  •           connection.setDoInput(true); 
  •           connection.setRequestMethod("POST"); 
  •           connection.setUseCaches(false); 
  •           connection.setInstanceFollowRedirects(true); 
  •             
  •             
  •           connection.setRequestProperty("Content-Type","application/json;charset=UTF-8");
  •           connection.connect(); 
  •   
  •           //P请求 
  •           DataOutputStream out = newDataOutputStream(connection.getOutputStream()); 
  •            Stringpayload ="{\n    "auth":{\n        "passwordCredentials":{\n            "username":"admin",\n            "password":"bnibnibni"\n        },\n       "tenantName":"admin"\n    }\n}";
  •           
  •             
  •           out.write(payload.getBytes("UTF-8")); 
  •           out.flush(); 
  •           out.close(); 
  •             
  •           //读取响应 
  •           BufferedReader reader = new BufferedReader(newInputStreamReader( 
  •                 connection.getInputStream())); 
  •            Stringlines; 
  •           StringBuilder sb = new StringBuilder();
  •            while((lines = reader.readLine()) != null) { 
  •               lines = newString(lines.getBytes(), "utf-8"); 
  •              sb.append(lines); 
  •           
  •            JSONObjectjb = new JSONObject(sb.toString());
  •            id =jb.getJSONObject("access").getJSONObject("token").get("id").toString();
  •           reader.close(); 
  •           // 断开连接 
  •           connection.disconnect(); 
  •  
  •        } catch (MalformedURLException e) {
  •         // TODO Auto-generated catchblock 
  •           e.printStackTrace(); 
  •        } catch (UnsupportedEncodingException e){ 
  •            // TODOAuto-generated catch block 
  •           e.printStackTrace(); 
  •        } catch (IOException e) { 
  •            // TODOAuto-generated catch block 
  •           e.printStackTrace(); 
  •       
  •        return id;
  •     }  

这里我们需要引入json包,所以要在maven仓库网站上下载jsonjar包:

http://mvnrepository.com/artifact/org.json/json

然后再odlops/impl 的pom.xml文件中添加依赖:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
     </dependency>     

用maven命令将jar包引入maven本地仓库:

mvn install:install-file -Dfile="JSONPATH" -DgroupId=org.json -DartifactId=json-Dpackaging=jar

在OPSAPI介绍中会给出response的格式,例如返回的token就是一个JSONObject,那么就可以用JSON给出的函数进行数据的解析。

JSON用法可以参考:http://blog.csdn.net/jediael_lu/article/details/25779087

上面的代码获取了token的ID。我们可以用这个ID来进行之后的操作。


2、获取flavor ID

  • package org.opendaylight.odlops.impl;
  •  
  • import java.io.BufferedReader; 
  • import java.io.DataOutputStream; 
  • import java.io.IOException; 
  • import java.io.InputStreamReader; 
  • importjava.io.UnsupportedEncodingException; 
  • import java.net.HttpURLConnection; 
  • import java.net.MalformedURLException; 
  • import java.net.URL; 
  • import java.text.SimpleDateFormat; 
  • import java.util.Date; 
  •   
  • import org.json.JSONObject;  
  • import org.json.JSONArray;
  •   
  • public class Flavors { 
  •     public static finalString ADD_URL = "http://192.168.1.103:8774/v2/flavors";
  •     
  •     public static StringgetFlavorsList(String token) {
  •        
  •        //StringBuilder sb = new StringBuilder();
  •        //JSONObject jb = null;
  •        String flavorId = "";
  •  
  •         try{ 
  •           //创建连接 
  •            URL url =new URL(ADD_URL); 
  •           HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
  •           connection.setDoOutput(true); 
  •           connection.setDoInput(true); 
  •           connection.setRequestMethod("GET"); 
  •           connection.setUseCaches(false); 
  •           connection.setInstanceFollowRedirects(true); 
  •             
  •             
  •           connection.setRequestProperty("X-Auth-Token", token);
  •           connection.connect(); 
  •   
  •           //请求 
  •           //DataOutputStream out = newDataOutputStream(connection.getOutputStream()); 
  •            
  •           //out.write(); 
  •           //out.flush(); 
  •           //out.close(); 
  •             
  •           //读取响应 
  •           BufferedReader reader = new BufferedReader(newInputStreamReader( 
  •                 connection.getInputStream())); 
  •            Stringlines; 
  •           StringBuilder sb = new StringBuilder();
  •            while((lines = reader.readLine()) != null) { 
  •               lines = newString(lines.getBytes(), "utf-8"); 
  •              sb.append(lines); 
  •           
  •            JSONObjectjb = new JSONObject(sb.toString());
  •           
  •            JSONArrayja = jb.getJSONArray("flavors");
  •           
  •            flavorId =ja.getJSONObject(0).get("id").toString();
  •           
  •           reader.close(); 
  •           // 断开连接 
  •           connection.disconnect(); 
  •  
  •        } catch (MalformedURLException e) {
  •         // TODO Auto-generated catchblock 
  •           e.printStackTrace(); 
  •        } catch (UnsupportedEncodingException e){ 
  •            // TODOAuto-generated catch block 
  •           e.printStackTrace(); 
  •        } catch (IOException e) { 
  •            // TODOAuto-generated catch block 
  •           e.printStackTrace(); 
  •       
  •        return flavorId;
  •  
  •     }
  •   

3、获取Image ID

  • package org.opendaylight.odlops.impl;
  •  
  • import java.io.BufferedReader; 
  • import java.io.DataOutputStream; 
  • import java.io.IOException; 
  • import java.io.InputStreamReader; 
  • importjava.io.UnsupportedEncodingException; 
  • import java.net.HttpURLConnection; 
  • import java.net.MalformedURLException; 
  • import java.net.URL; 
  • import java.text.SimpleDateFormat; 
  • import java.util.Date; 
  •   
  • import org.json.JSONObject;  
  • import org.json.JSONArray;
  •   
  • public class Images { 
  •     public static finalString ADD_URL = "http://192.168.1.103:9292/v2/images";
  •     
  •     public static StringgetImagesList(String token) {
  •        
  •        //StringBuilder sb = new StringBuilder();
  •        //JSONObject jb = null;
  •        String imagesId = "";
  •         try{ 
  •           //创建连接 
  •            URL url =new URL(ADD_URL); 
  •           HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
  •           connection.setDoOutput(true); 
  •           connection.setDoInput(true); 
  •           connection.setRequestMethod("GET"); 
  •           connection.setUseCaches(false); 
  •           connection.setInstanceFollowRedirects(true); 
  •             
  •             
  •           connection.setRequestProperty("X-Auth-Token", token);
  •           connection.connect(); 
  •   
  •           //请求 
  •           //DataOutputStream out = newDataOutputStream(connection.getOutputStream()); 
  •            
  •           //out.write(); 
  •           //out.flush(); 
  •           //out.close(); 
  •             
  •           //读取响应 
  •           BufferedReader reader = new BufferedReader(newInputStreamReader( 
  •                 connection.getInputStream())); 
  •            Stringlines; 
  •           StringBuilder sb = new StringBuilder();
  •            while((lines = reader.readLine()) != null) { 
  •               lines = newString(lines.getBytes(), "utf-8"); 
  •              sb.append(lines); 
  •           
  •            JSONObjectjb = new JSONObject(sb.toString());
  •           
  •            JSONArrayja = jb.getJSONArray("images");
  •           
  •            imagesId =ja.getJSONObject(0).get("id").toString();
  •           reader.close(); 
  •           // 断开连接 
  •           connection.disconnect(); 
  •  
  •        } catch (MalformedURLException e) {
  •         // TODO Auto-generated catchblock 
  •           e.printStackTrace(); 
  •        } catch (UnsupportedEncodingException e){ 
  •            // TODOAuto-generated catch block 
  •           e.printStackTrace(); 
  •        } catch (IOException e) { 
  •            // TODOAuto-generated catch block 
  •           e.printStackTrace(); 
  •       
  •        return imagesId;
  •  
  •     }
  •   

4、创建网络并添加子网

 

  • package org.opendaylight.odlops.impl;
  •  
  • import java.io.BufferedReader; 
  • import java.io.DataOutputStream; 
  • import java.io.IOException; 
  • import java.io.InputStreamReader; 
  • importjava.io.UnsupportedEncodingException; 
  • import java.net.HttpURLConnection; 
  • import java.net.MalformedURLException; 
  • import java.net.URL; 
  • import java.text.SimpleDateFormat; 
  • import java.util.Date; 
  •   
  • import org.json.JSONObject;  
  • import org.json.JSONArray;
  •   
  • public class Network { 
  •     public static finalString ADD_URL = "http://192.168.1.103:9696/v2.0/networks";
  •     public static finalString ADD_URL1 = "http://192.168.1.103:9696/v2.0/subnets";
  •     
  •  
  •     public static StringgetNetworkList(String token) {
  •        
  •        StringBuilder sb = new StringBuilder();
  •        //JSONObject jb = null;
  •  
  •         try{ 
  •           //创建连接 
  •            URL url =new URL(ADD_URL); 
  •           HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
  •           connection.setDoOutput(true); 
  •           connection.setDoInput(true); 
  •           connection.setRequestMethod("GET"); 
  •           connection.setUseCaches(false); 
  •           connection.setInstanceFollowRedirects(true); 
  •             
  •             
  •           connection.setRequestProperty("X-Auth-Token", token);
  •           connection.connect(); 
  •   
  •           //请求 
  •           //DataOutputStream out = newDataOutputStream(connection.getOutputStream()); 
  •            
  •           //out.write(); 
  •           //out.flush(); 
  •           //out.close(); 
  •             
  •           //读取响应 
  •           BufferedReader reader = new BufferedReader(newInputStreamReader( 
  •                 connection.getInputStream())); 
  •            Stringlines; 
  •           
  •            while((lines = reader.readLine()) != null) { 
  •               lines = newString(lines.getBytes(), "utf-8"); 
  •              sb.append(lines); 
  •           
  •            //jb = newJSONObject(sb.toString());
  •            //id =jb.getJSONObject("access").getJSONObject("token").get("id").toString();
  •           reader.close(); 
  •           // 断开连接 
  •           connection.disconnect(); 
  •  
  •        } catch (MalformedURLException e) {
  •         // TODO Auto-generated catchblock 
  •           e.printStackTrace(); 
  •        } catch (UnsupportedEncodingException e){ 
  •            // TODOAuto-generated catch block 
  •           e.printStackTrace(); 
  •        } catch (IOException e) { 
  •            // TODOAuto-generated catch block 
  •           e.printStackTrace(); 
  •       
  •        return sb.toString();
  •  
  •     }
  •     
  •     public static StringcreateNetwork(String token) {
  •        
  •        StringBuilder sb1 = new StringBuilder();
  •        JSONObject jb = null;
  •        String networkId = "";
  •        String ip_pool = "";
  •       
  •        try{ 
  •           //创建连接 
  •            URL url =new URL(ADD_URL); 
  •           HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
  •           connection.setDoOutput(true); 
  •           connection.setDoInput(true); 
  •           connection.setRequestMethod("POST"); 
  •           connection.setUseCaches(false); 
  •           connection.setInstanceFollowRedirects(true); 
  •             
  •             
  •           connection.setRequestProperty("X-Auth-Token", token);
  •           connection.connect(); 
  •  
  •           //请求
  •            Stringname = "net" + String.valueOf((int)(Math.random()*100));
  •           DataOutputStream out = newDataOutputStream(connection.getOutputStream()); 
  •            Stringpayload ="{\n    "network":{\n        "admin_state_up":true,\n        "name":""+ name +"",\n        "provider:network_type":"vxlan"\n   }\n}";
  •           out.write(payload.getBytes("UTF-8")); 
  •           out.flush(); 
  •           out.close(); 
  •             
  •           //读取响应 
  •           BufferedReader reader = new BufferedReader(newInputStreamReader( 
  •                 connection.getInputStream())); 
  •            Stringlines; 
  •           StringBuilder sb = new StringBuilder();
  •            while((lines = reader.readLine()) != null) { 
  •               lines = newString(lines.getBytes(), "utf-8"); 
  •              sb.append(lines); 
  •           
  •            jb = newJSONObject(sb.toString());
  •           
  •            JSONArrayja = new JSONArray("[" + jb.getJSONObject("network").toString() +"]");
  •            int l =ja.length();
  •            for (int i= 0; i < l; i++){
  •               if(ja.getJSONObject(i).get("name").toString().equals(name)) {
  •                  networkId =ja.getJSONObject(i).get("id").toString();
  •                  break;
  •               }
  •            }
  •  
  •           reader.close();
  •           connection.disconnect(); 
  •            //subnet
  •            URL url1 =new URL(ADD_URL1); 
  •           HttpURLConnection connection1 = (HttpURLConnection)url1.openConnection(); 
  •           connection1.setDoOutput(true); 
  •           connection1.setDoInput(true); 
  •           connection1.setRequestMethod("POST"); 
  •           connection1.setUseCaches(false); 
  •           connection1.setInstanceFollowRedirects(true); 
  •             
  •           connection1.setRequestProperty("X-Auth-Token", token);
  •           connection1.connect(); 
  •           DataOutputStream out1 = newDataOutputStream(connection1.getOutputStream()); 
  •            Stringpayload1 ="{\n    "subnet":{\n        "network_id":"" + networkId +"",\n        "ip_version":4,\n        "cidr":"192.168." + String.valueOf((int)(Math.random()*255)) +".0/24"\n    }\n}";
  •           out1.write(payload1.getBytes("UTF-8")); 
  •           out1.flush(); 
  •           out1.close();
  •  
  •           BufferedReader reader1 = new BufferedReader(newInputStreamReader( 
  •                 connection1.getInputStream())); 
  •            Stringlines1; 
  •            while((lines1 = reader1.readLine()) != null) { 
  •               lines1 = newString(lines1.getBytes(), "utf-8"); 
  •              sb1.append(lines1); 
  •           
  •            
  •            JSONObjectjb1 = new JSONObject(sb1.toString());
  •            ip_pool =jb1.getJSONObject("subnet").get("allocation_pools").toString();
  •  
  •           reader1.close();
  •           connection1.disconnect();
  •  
  •        } catch (MalformedURLException e) {
  •            // TODOAuto-generated catch block 
  •           e.printStackTrace(); 
  •        } catch (UnsupportedEncodingException e){ 
  •            // TODOAuto-generated catch block 
  •           e.printStackTrace(); 
  •        } catch (IOException e) { 
  •            // TODOAuto-generated catch block 
  •           e.printStackTrace(); 
  •       
  •        return networkId; 
  •   
  •     }
  •   

5、创建虚拟机

 

  • package org.opendaylight.odlops.impl;
  •  
  • import java.io.BufferedReader; 
  • import java.io.DataOutputStream; 
  • import java.io.IOException; 
  • import java.io.InputStreamReader; 
  • importjava.io.UnsupportedEncodingException; 
  • import java.net.HttpURLConnection; 
  • import java.net.MalformedURLException; 
  • import java.net.URL; 
  • import java.text.SimpleDateFormat; 
  • import java.util.Date; 
  •   
  • import org.json.JSONObject;  
  •   
  • public class ServersService { 
  •     public static finalString ADD_URL ="http://192.168.1.103:8774/v2/servers"; 
  •  
  • public static String createServers(String token) {
  •        
  •        StringBuilder sb = new StringBuilder();
  •        //JSONObject jb = null;
  •        String networkId = "";
  •        String flavorId = "";
  •        String imageId = "";
  •        try{ 
  •  
  •            //bulidnetwork
  •            Network n= new Network();
  •            networkId= n.createNetwork(token);
  •  
  •           //images
  •            Images i =new Images();
  •            imageId =i.getImagesList(token);
  •  
  •           //flavors
  •            Flavors f= new Flavors();
  •            flavorId =f.getFlavorsList(token);
  •  
  •            URL url =new URL(ADD_URL); 
  •           HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
  •           connection.setDoOutput(true); 
  •           connection.setDoInput(true); 
  •           connection.setRequestMethod("POST"); 
  •           connection.setUseCaches(false); 
  •           connection.setInstanceFollowRedirects(true); 
  •             
  •             
  •           connection.setRequestProperty("X-Auth-Token", token);
  •           connection.setRequestProperty("Content-Type","application/json");
  •           connection.connect(); 
  •  
  •           //请求
  •           DataOutputStream out = newDataOutputStream(connection.getOutputStream()); 
  •            Stringpayload ="{\n    "server":{\n        "name":"haha",\n        "imageRef": "" + imageId +"",\n        "flavorRef": "" + flavorId +"",\n       "availability_zone":"nova",\n        "networks":[\n            {\n               "uuid":"" + networkId +""\n            }\n        ],\n        "security_groups":[\n            {\n                "name":"default"\n            }\n        ],\n       "min_count":"2",\n        "max_count":"3"\n    }\n}";
  •           out.write(payload.getBytes("UTF-8")); 
  •           out.flush(); 
  •           out.close(); 
  •             
  •           //读取响应 
  •           BufferedReader reader = new BufferedReader(newInputStreamReader( 
  •                 connection.getInputStream())); 
  •            Stringlines; 
  •           
  •            while((lines = reader.readLine()) != null) { 
  •               lines = newString(lines.getBytes(), "utf-8"); 
  •              sb.append(lines); 
  •           
  •           reader.close();
  •           connection.disconnect(); 
  •  
  •        } catch (MalformedURLException e) {
  •            // TODOAuto-generated catch block 
  •           e.printStackTrace(); 
  •        } catch (UnsupportedEncodingException e){ 
  •            // TODOAuto-generated catch block 
  •           e.printStackTrace(); 
  •        } catch (IOException e) { 
  •            // TODOAuto-generated catch block 
  •           e.printStackTrace(); 
  •       
  •        return sb.toString();
  •     }

6、修改OdlImps.java文件

  • package org.opendaylight.odlops.impl;
  •  
  • import java.util.concurrent.Future;
  •  
  • importorg.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odlops.rev150105.OdlopsService;
  • importorg.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odlops.rev150105.OdlInput;
  • importorg.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odlops.rev150105.OdlOutput;
  • importorg.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odlops.rev150105.OdlOutputBuilder;
  • import org.opendaylight.yangtools.yang.common.RpcResult;
  • importorg.opendaylight.yangtools.yang.common.RpcResultBuilder;
  •  
  • public class OdlImpl implements OdlopsService {
  •  
  •            @Override
  •     public Future>odl(OdlInput input) {
  •        OdlOutputBuilder odlBuilder = newOdlOutputBuilder();
  •  Client c = new Client();
  •  if(input.getOperation().equals("createservers")){
  •   ServersService s = newServersService();
  • odlBuilder.setGreeting(s.createServers(c.appadd()));
  •  }
  •        returnRpcResultBuilder.success(odlBuilder.build()).buildFuture();
  •     }
  • }

7、验证

      验证操作与上面建立工程时一样,也可以通过openstackdashboard界面看虚拟机及网络是否建立成功。

      该工程可以在github上下载:https://github.com/wuliheihei/odlops.git

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值