Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

Vinllen Chen


To be a better coder

在OpenDaylight DLUX中添加新的模块

  本文主要介绍如何在DLUX中添加一个模块,加完后我们可以通过http://[host-ip]:8181/index.html的左边侧导航栏访问到我们的页面。添加过程需要对ODL,DLUX和一堆前端的框架比较熟悉,否则会碰到一堆问题,折腾了我好长一段时间,现记录如下,也给有同样问题的人一点帮助。
  以下是我从头开始操作的过程以及遇到的问题,注意,本文不是直接安装,而是通过源码编译进行安装。

  • 提前安装软件:grunt、npm、bower。
  • 在github上下载controller,dlux和odlparent,切换到同一分支,然后执行mvn clean install -DskipTests进行分别编译,需要首先安装odlparent,再controller和dlux。此处,注意分支要一致。对于controller和odlparent编译错误较少,以下主要记录dlux的安装过程。
  • 如果碰到以下错误:
Failed to execute goal com.github.eirslett:frontend-maven-plugin:0.0.24:bower (bower) on project dlux-web: Failed to run task: 'bower install' failed. (error code 1) -> [Help 1]  

根据提示,安装bower即可:npm install -g bower。bower是一个前端软件包(html, js, css等)的管理软件。

  • 继续编译,可能还会碰到以下问题:
[ERROR] node-pre-gyp ERR! Tried to download: https://fsevents-binaries.s3-us-west-2.amazonaws.com/v1.0.14/fse-v1.0.14-node-v14-linux-x64.tar.gz
[ERROR] node-pre-gyp ERR! Pre-built binaries not found for fsevents@1.0.14 and node@0.12.7 (node-v14 ABI) (falling back to source compile with node-gyp)
[ERROR] Usage: gyp_main.py [options ...] [build_file ...]
[ERROR]
[ERROR] gyp_main.py: error: no such option: --no-parallel
[ERROR] gyp ERR! configure error
[ERROR] gyp ERR! stack Error: `gyp` failed with exit code: 2
[ERROR] gyp ERR! stack     at ChildProcess.onCpExit (/home/chenxing05/beryllium/dlux/dlux-web/node/npm/node_modules/node-gyp/lib/configure.js:357:16)
…
[ERROR] Failed to execute goal com.github.eirslett:frontend-maven-plugin:0.0.24:grunt (grunt) on project dlux-web: Failed to run task: 'grunt --no-color' failed. (error code 3) -> [Help 1]

此处,首先报错的ERROR为下载失败,然而这个tar.gz是在Mac中才用到的,而我的环境是Centos环境,所以这个问题可以忽略。另外,对于存在升级的问题,可以调用npm install xxx --save-dev对相应软件进行升级,安装到本地的node_modules下。还有,对于PhantomJS 1.9.8 (Linux 0.0.0) ERROR: 'There is no timestamp for /base/vendor/angular-ui-date/src/date.spec!’错误,此处为angular-ui-date,我们需要修改bower.json文件中的angular-ui-date:latest~0.0.11。如果还有别的版本问题,修改package.json中的软件版本。

  • 在karaf下输入kar:install file:[dlux的kar包]进行安装。由于我们下载的controller代码中集成了部分dlux功能,而controller貌似存在问题,一集成之后在feature:list -i | grep dlux显示有两个重合的dlux版本。此时,我们需要调用feature:repo_remove移除自带的dlux源。

  • 移除自带的dlux源后,可能还存在问题,我修改了topology的页面代码,但一直没有生效,此处是controller的bug无疑。后来我对dlux中的模块进行修改:
    1)对controller/karaf/opendaylight-karaf/pom.xml文件进行更改:去掉带有dlux的依赖

     <dependency>
      <groupId>org.opendaylight.dlux</groupId>
      <artifactId>features-dlux</artifactId>
      <version>0.3.0-Beryllium</version>
      <classifier>features</classifier>
      <type>xml</type>
      <scope>runtime</scope>
    </dependency>

2)以及controller/opendaylight/archetypes/opendaylight-startup/src/main/resources/archetype-resources/features/pom.xml
中带有dlux的部分:

<dlux.version>0.3.0-Beryllium</dlux.version>  
和
    <dependency>
      <groupId>org.opendaylight.dlux</groupId>
      <artifactId>features-dlux</artifactId>
      <classifier>features</classifier>
      <version>${dlux.version}</version>
      <type>xml</type>
      <scope>runtime</scope>
    </dependency>

完了重新编译,再用kar安装。

mvn archetype:generate -DarchetypeGroupId=org.opendaylight.dlux -DarchetypeArtifactId=dlux-app \  
-DarchetypeRepository=http://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/ \
-DarchetypeCatalog=http://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/archetype-catalog.xml

目录位于dlux/modules,当然,也可以不放在modules下面,而在外部目录。完了以后,修改3个pom文件:dlux/pom.xml、dlux/modules/pom.xml和dlux/dlux-web/pom.xml,按照官网最后提供的进行修改即可,需要注意的是groupid和artifactid可能不同,根据自己项目名字进行修改,切记一定要对上才行,我就是因为这个错误折腾了好久。最后,进行mvn install,如果可能失败,根据错误提示进行修改,通常是版本号的问题。

  • 对于jshint中报的各种错误,比如:Expected an assignment or function call and instead saw an expressionDon't make functions within a loopExpected '{' and instead saw ‘return’等等,参考jshint官方文档在对应的js文件中加入注释即可,比如,对于Expected '{' and instead saw ‘return’要求任何while,if语句都要有大括号包围,如果想去掉,则加入/* jshint curly:false*/

  • 最后把整个dlux的kar包安装到karaf后,还需要在kar下进行bundle安装:bundle:install -s file:[对应的bundle],bundle路径位于dlux/modules/[你的feature]/[你的feature]-bundle/路径下。注意此处需要有-s选项。重新打开页面,这时候OK了。

  • DLUX还提供了grunt进行部署,该软件可以使得controller和dlux进行分离,通常用于调试你的代码,否则写一次,编译,再部署一次人力成本过大。在dlux-web目录下(调试目录),运行grunt live即可,打开页面:http://[host-ip]:9000即可。每一次编辑保存,都将直接生效。

  • DLUX 显示 "unable to login",尝试把依赖切换到同一个版本,如果还不行,尝试把包切换到最新版本。

  接下来的博客我将介绍如何把DLUX和NeXt进行融合,用于展示强大的拓扑。

参考

https://wiki.opendaylight.org/view/OpenDaylight_dlux:Beryllium_Create_A_Module
https://wiki.opendaylight.org/view/OpenDaylight_DLUX:Create_application_with_archetype
https://wiki.opendaylight.org/view/OpenDaylight_dlux:Add_new_application
https://lists.opendaylight.org/pipermail/dlux-dev/2016-March/000639.html
https://git.opendaylight.org/gerrit/#/c/35745/

说明

转载请注明出处:http://vinllen.com/zai-opendaylight-dluxzhong-tian-jia-xin-de-mo-kuai/


About the author

vinllen chen

Beijing, China

格物致知


Discussions

comments powered by Disqus