二、功能开发
- package org.opendaylight.odlops.impl;
-
- import java.io.BufferedReader;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- importjava.io.UnsupportedEncodingExcep
tion; - 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.setInstanceFollowRedirec ts(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 (UnsupportedEncodingExcep tion 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"
在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.UnsupportedEncodingExcep
tion; - 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.setInstanceFollowRedirec ts(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 (UnsupportedEncodingExcep tion 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.UnsupportedEncodingExcep
tion; - 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.setInstanceFollowRedirec ts(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 (UnsupportedEncodingExcep tion 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.UnsupportedEncodingExcep
tion; - 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.setInstanceFollowRedirec ts(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 (UnsupportedEncodingExcep tion 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.setInstanceFollowRedirec ts(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.setInstanceFollowRedirec ts(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 (UnsupportedEncodingExcep tion 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.UnsupportedEncodingExcep
tion; - 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.setInstanceFollowRedirec ts(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 (UnsupportedEncodingExcep tion 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、验证
该工程可以在github上下载:https://github.com/wuliheihei/odlops.git