OpenDaylight Potassiumでプラグイン開発 (開発環境構築編)
はじめに
OpenDaylight(ODL)は、OSSのSDNコントローラーフレームワークです。2013年より開発が始まり、現在はLF Networkingのプロジェクトのひとつとして開発が進められています。ODLはJavaベースで開発されているフレームワークで、実態はbundleと呼ばれるプラグイン群で構成されています。今回は、現時点(2024年3月)での最新版であるOpenDaylight Potassium-SR2上で動作するプラグインの開発を試していきたいと思います。
以下の記事に分けて説明していきます。今回は開発環境構築編になります。
- 開発環境構築
- RestconfでCRUD処理実装
- DataTreeChangeListenerを使ったイベント駆動処理実装
- Notification処理実装
環境
以下の環境で試しています。
上記ツールのインストール方法に関しては公式ページを参考にしてください。
項目 | 内容 |
---|---|
OS | ubuntu 20.04 |
Java | openjdk 17.0.10 |
Maven | 3.9.5 |
Maven設定
Mavenで各種ライブラリ管理していますが、一部ODL専用のリポジトリを使うため、設定を変更しておきます。設定ファイルは公式が用意してくれているので、そのまま使うことが出来ます。
cp -n ~/.m2/settings.xml{,.orig} wget -q -O - https://raw.githubusercontent.com/opendaylight/odlparent/master/settings.xml > ~/.m2/settings.xml
Archetypes
Mavenにはプロジェクトの雛形を作成するためにArchetypesという仕組みがあります。ODL公式からもプラグイン開発用のArchetypesが提供されていますが、情報が若干古いため動作しません。
そこで公式のArchetypesを参考に、最新(Potassium)で動作するプラグイン用のArchetypesを以下に公開しました。今回はこちらを使って開発していきます。
https://github.com/t-matz/archetypes
独自のArchetypesを使うには、ローカルにインストールする必要がありますので、以下の通りインストールします。
そこで公式のArchetypesを参考に、最新(Potassium)で動作するプラグイン用のArchetypesを以下に公開しました。今回はこちらを使って開発していきます。
https://github.com/t-matz/archetypes
独自のArchetypesを使うには、ローカルにインストールする必要がありますので、以下の通りインストールします。
git clone https://github.com/t-matz/archetypes cd archetypes/opendaylight-startup mvn install「BUILD SUCCESS」と表示されたらインストール完了です。
雛形の作成
上記で作成したArchetypesを使って、プラグイン開発用のプロジェクトを作成していきます。Archetypesを実行すると、プロジェクト用のディレクトリが生成されるので、適切な場所で以下の通り実行してください。
mvn archetype:generate -DarchetypeGroupId=org.opendaylight.archetypes -DarchetypeArtifactId=opendaylight-startup-archetype -DarchetypeVersion=1.8.0-SNAPSHOT初回はいくつかのライブラリダウンロードで時間がかかりますが、しばらくすると以下のようにいくつか質問されるので、自分の環境に応じて適宜回答していきます。 本記事では、以下の想定で回答しました。
項目 | 内容 | 説明 |
copyright | APRESIA Systems, Ltd. | ソースコードのヘッダに記載される著作権表示 |
groupId | jp.apresia.techblog | プロジェクトのgroupId。 javaのpackage名になる |
artifactId | odlsample | プロジェクトのartifactId。各サブプロジェクトはこちらの名前をベースに生成される。また、プロジェクトのディレクトリ名にも利用される |
[INFO] Generating project in Interactive mode [INFO] Archetype repository not defined. Using the one from [org.opendaylight.archetypes:opendaylight-startup-archetype:1.2.2] found in catalog remote Define value for property 'copyright': APRESIA Systems, Ltd. [INFO] Using property: copyrightYear = 2024 [INFO] Using property: version = 0.1.0-SNAPSHOT Define value for property 'groupId': jp.apresia.techblog Define value for property 'artifactId': odlsample Define value for property 'package' jp.apresia.techblog: : Define value for property 'classPrefix' Odlsample: : Confirm properties configuration: copyright: APRESIA Systems, Ltd. copyrightYear: 2024 version: 0.1.0-SNAPSHOT groupId: jp.apresia.techblog artifactId: odlsample package: jp.apresia.techblog classPrefix: Odlsample Y: : [INFO] ----------------------------------------------------------------------------「BUILD SUCCESS」の文字と、実行したパスの直下にodlsampleという名前のディレクトリが生成されていれば成功です。
ビルドの確認
上記で雛形の作成に成功したら、一度そのままの状態でビルドしてみます。以下のコマンドを実行します。
cd odlsample mvn clean install「BUILD SUCCESS」と表示されたらビルド成功です。
OpenDaylightのダウンロードと設定
上記でビルドしたプラグインをOpenDaylight上で動作させるために、OpenDaylight本体を準備します。
OpenDaylightは公式からダウンロードします。動作環境に応じて適切なファイルタイプをダウンロードしてください。今回はubuntu上で動作させたいので、Tar形式のものをダウンロードしました。
OpenDaylightは公式からダウンロードします。動作環境に応じて適切なファイルタイプをダウンロードしてください。今回はubuntu上で動作させたいので、Tar形式のものをダウンロードしました。
wget https://nexus.opendaylight.org/content/repositories/opendaylight.release/org/opendaylight/integration/karaf/0.19.2/karaf-0.19.2.tar.gz tar xvf karaf-0.19.2.tar.gz cd karaf-0.19.2デフォルト状態の場合、ローカルのmavenリポジトリを参照してくれないので、以下を書き換えておきます。
vi etc/org.ops4j.pax.url.mvn.cfg以下行をコメントアウト
org.ops4j.pax.url.mvn.localRepository=${karaf.home}/${karaf.default.repository} ↓↓ #org.ops4j.pax.url.mvn.localRepository=${karaf.home}/${karaf.default.repository}
プラグインのインストール
ODLに先ほどビルドしたプラグインをインストールします。プラグインのインストールはODLのコマンドライン上で実施可能です。
ODLは以下で起動できます。(まっさらな環境で立ち上げるためにcleanオプションを付与しています)
プラグインをインストールするために、自作プラグイン用のfeatureカタログを追加します。
今回開発するプラグインのfeature(それぞれのbundleが固まったもの)をインストールします。
「XXXXX Session Initiated」というログが確認できたら、プラグイン読み込み成功です。
以上で、環境構築は一通り完了となります。次回から自作プラグインに機能を追加していきたいと思います。
ODLは以下で起動できます。(まっさらな環境で立ち上げるためにcleanオプションを付与しています)
./bin/karaf clean上記実行すると、ODLのプロンプト入力待ち状態となり、ODLのコマンド実行が可能になります。
プラグインをインストールするために、自作プラグイン用のfeatureカタログを追加します。
opendaylight-user@root>feature:repo-add mvn:jp.apresia.techblog/odlsample-features/0.1.0-SNAPSHOT/xml/features Adding feature url mvn:jp.apresia.techblog/odlsample-features/0.1.0-SNAPSHOT/xml/features※コマンド内の
jp.apresia.techblog
はArchetypesで回答したgroupId、 odlsample-features
はArchetypesで回答したartifactIdを一部使って<artifactId>-features
にそれぞれ置き換えてください。
今回開発するプラグインのfeature(それぞれのbundleが固まったもの)をインストールします。
opendaylight-user@root>feature:install odlsample-featuresプラグインが読み込まれているかどうか、ログで確認します。
opendaylight-user@root>log:display jp.apresia.techblog 16:27:46.644 INFO [features-3-thread-1] OdlsampleProvider Session Initiated※同様にコマンド内の
jp.apresia.techblog
はArchetypesで回答したgroupIdに置き換えてください。
「XXXXX Session Initiated」というログが確認できたら、プラグイン読み込み成功です。
以上で、環境構築は一通り完了となります。次回から自作プラグインに機能を追加していきたいと思います。
おまけ
ODLプラグインはMavenプロジェクトであり、Javaベースで開発します。Javaを書く環境は何を使っても問題ありませんが、本記事ではVisual Studio CodeのExtension Pack for Javaを利用して開発しました。