本文主要介绍如何在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 [email protected] and [email protected] (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安装。
- 用kar安装后,还不行,因为安装的只是feature,而此处由于我们按官网提供的archetype模板进行构建:
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 expression
,Don't make functions within a loop
,Expected '{' 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/