OpenDaylight开发----建立odlops工程
建立该工程的目的是使得用户可以通过OpenDaylight的北向接口获取OpenStack中虚拟机、镜像、类型模板和网络等信息,并且在OpenStack中动态的创建虚拟机、网络及子网。这里的OpenDaylight模拟以后开发中Orchestrator的功能。
流程框图
参考文献
OpenStack API文档:https://developer.openstack.org/api-guide/quick-start/
OpenDaylight MDSAL启动项目原型:
https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:Startup_Project_Archetype
开发配置
这里实现的场景是用户给OpenDaylight发送创建虚拟机请求,OpenStack创建网络并自动添加子网,然后添加三个虚拟机到这个子网上。这种场景会涵盖OpenStack中一些基本接口的调用。
一、创建启动项目原型:
1、运行原型并创建”odlops”项目
mvn archetype:generate-DarchetypeGroupId=org.opendaylight.controller-DarchetypeArtifactId=opendaylight-startup-archetype \
-DarchetypeRepository=http://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/
-DarchetypeCatalog=http://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/archetype-catalog.xml
Define value for property 'groupId': :org.opendaylight.odlops
Define value for property 'artifactId': :odlops
Define value for property 'version':1.0-SNAPSHOT
Define value for property'package':
Define value for property'classPrefix':
Define value for property 'copyright': : Yoyodyne,Inc.
2、构建‘odlops‘工程:
mvn clean install
3、
cd karaf/target/assembly/bin
4、
- module odlops {
-
yang-version 1; -
namespace"urn:opendaylight:params:xml:ns:yang:odlops"; -
prefix "odlops"; -
-
revision "2015-01-05" { -
description "Initial revision of odlopsmodel"; -
} -
rpc odl { -
input{ -
leaf operation { -
typestring; -
} -
} -
-
output{ -
leaf greeting { -
typestring; -
} -
} -
} - }
- 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(); -
odlBuilder.setGreeting("Hello " +input.getOperation()); -
returnRpcResultBuilder.success(odlBuilder.build()).buildFuture(); -
} - }
- package org.opendaylight.odlops.impl;
-
- importorg.opendaylight.controller.md.sal.binding.api.DataBroker;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- importorg.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
- importorg.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration;
- importorg.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.odlops.rev150105.OdlopsService;
-
- public class OdlopsProvider {
-
-
private static finalLogger LOG = LoggerFactory.getLogger(OdlopsProvider.class); -
-
private final DataBrokerdataBroker; -
private finalRpcProviderRegistry rpcProviderRegistry; -
private RpcRegistrationserviceRegistration; -
-
publicOdlopsProvider(final DataBroker dataBroker,RpcProviderRegistryrpcProviderRegistry) { -
this.dataBroker = dataBroker; -
this.rpcProviderRegistry =rpcProviderRegistry; -
} -
-
-
public void init() { -
serviceRegistration =rpcProviderRegistry.addRpcImplementation(OdlopsService.class, newOdlImpl()); -
LOG.info("OdlopsProvider SessionInitiated"); -
//serviceRegistration =rpcProviderRegistry.addRpcImplementation(OdlopsService.class, newOdlImpl()); -
} -
-
-
public void close(){ -
serviceRegistration.close(); -
LOG.info("OdlopsProvider Closed"); -
} - }
-
-
xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0" -
odl:use-default-for-reference-types="true"> -
-
-
interface="org.opendaylight.controller.md.sal.binding.api.DataBroker" -
odl:type="default"/> -
-
-
interface="org.opendaylight.controller.sal.binding.api.RpcProviderRegistry"/> -
-
-
class="org.opendaylight.odlops.impl.OdlopsProvider" -
init-method="init"destroy-method="close"> -
-
-
-
}