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

来源:互联网 发布:单片机电子琴设计 编辑:程序博客网 时间:2024/05/18 02:33

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

建立该工程的目的是使得用户可以通过OpenDaylight的北向接口获取OpenStack中虚拟机、镜像、类型模板和网络等信息,并且在OpenStack中动态的创建虚拟机、网络及子网。这里的OpenDaylight模拟以后开发中Orchestrator的功能。

流程框图

 OpenDaylight和----建立odlops工程(一)




参考文献

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':  org.opendaylight.odlops::

Define value for property'classPrefix':  Odlops

Define value for property 'copyright': : Yoyodyne,Inc.

2、构建‘odlops‘工程:

mvn clean install

3 检查基本功能:

cd karaf/target/assembly/bin

      ./karaf

    这时会出现opendaylight用户命令行:

      opendaylight-user@root>

    通过检查log确认’odlops’已经被加载:

      log:display| grep Hello

    关闭karaf并返回odlops目录:

      cd../../../../

4 修改YANG文件

      vim  api/src/main/yang/odlops.yang

     修改成如下文件

 

  • 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;
  •        }
  •      }
  •   }
  • }

    返回odlops/api目录并构建API:

      cd../../../

      mvnclean install

 

 5、实现odl RPC API

      cd../impl/src/main/java/org/opendaylight/odlops/impl/

     创建OdlImpl.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();
  •        odlBuilder.setGreeting("Hello " +input.getOperation());
  •        returnRpcResultBuilder.success(odlBuilder.build()).buildFuture();
  •     }
  • }

     如果相对用户的输入进行判断,那么就在这里增加判断语句,并通过OPSRestful API进行对应的操作。

 6、修改Odlopsprovider注册在odlops.yang中创建的RPC

 

  • 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");
  •     }
  • }

 7、在BluePrint中注册自己的RPC.API

     跳转到odlops/impl/src/main/resources/org/opendaylight/blueprint

       vimimpl-blueprint.xml

     修改为如下:

 

  •              
  •  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">
  •    
  •    
  •  
  •  

     如果今后想修改YANG文件及相应的函数,可以参考这两个文档:

       RFC6020- YANG语言标准中文:http://blog.csdn.net/ohohoohoho/article/details/52129076

      YANGto JAVAmapping:              https://wiki.opendaylight.org/view/Yang_Tools:Code_Generation_Demo:YANG2JAVA_Mapping

 8、通过Rest测试‘odlops’RPC

      访问http://localhost:8181/apidoc/explorer/index.html

     点击odlops,然后点

       POST/operations/odlops:odl

     输入值:

       {"input":{ "operation":"createservers"}}

     返回值应该为:

        {

                   "output": {

                        "greeting": "Hello createservers"

                 }

}

原创粉丝点击