はじめに
今更ですがNetBox v3.5.0でRemote Data Sources
機能がリリースされました。
ドキュメントでは、以下説明があります。
A data source represents some external repository of data which NetBox can consume, such as a git repository.
Files within the data source are synchronized to NetBox by saving them in the database as data file objects.
簡潔に説明すると、Local
,Git
,Amazon S3
のようなデータソースのファイル(とその中身)をNetBoxに同期して管理できるようです。
同期したファイルの活用方法や既存データとどう組み合わせるかはまだ検討段階のようですが
現状、Scripts
機能で使うスクリプトファイルやConfig Contexts
のデータを管理することができるようになっています。
本記事では、Remote Data Sources
の説明も兼ね
Scripts
機能と連携してデータとスクリプトをGitで管理し、データ同期するような仕組みを作ってみました。
全体構成
構成は以下の図の通り。
GitHubレポジトリにNetBoxデータとスクリプトを配置します。
NetBox側ではRemote Data Sources
でGitHubからデータを同期し、
Scripts
でPythonスクリプトを実行してNetBoxデータオブジェクトを作成・更新します。
今回は、Sitesオブジェクトのみを同期します。
GitHub
今回作った構成用のレポジトリ。
同じレポジトリにスクリプトとデータファイルを配置しています。
- スクリプトファイル:
scripts/load_data_sources.py
- データファイル(Sites情報):
netbox_data.yml
NetBox
Resource Data Sources
まずは、Data Sources
より、GitHubに公開したレポジトリを登録します。
Ignore rules
では、同期対象外のファイルを正規表現で指定することができます。
今回はすべてのファイルを同期対象にするため未記載です。
プライベートレポジトリであればオプションでGitユーザ、パスワードも指定できます。
パスワードは暗号化されず、Web上もマスクされないので注意
Save
を押してオブジェクトを作成し、Sync
ボタンよりデータを同期します。
数秒でファイルが同期され、NetBox上からファイルの中身や変更日が確認できます。
同期は、現状手動しか対応指定なさそうです。
そのため、定期的に自動同期をしたい場合はScripts
機能でスケジュール設定をした上でAPIを叩く必要がありそうです。
Scripts
次にスクリプトを登録します。
Scripts
より、先ほど登録したData Sources
のスクリプトファイル(今回だと、scripts/load_data_sources.py
)を選択します。
Auto sync enabled
にチェックを入れると、Remote Data Sources
の同期を行った際にスクリプト側のファイルも更新されるようです。
Scriptsオブジェクトができれば、選択してスクリプトを実行します。
Data Source
, Data File
でnetbox_data.yml
を選択してRun
を押すとスクリプトが実行されてSiteデータが作成されます。
おわりに
今まで、Scripts
の機能はユースケースが見いだせずに使っていませんでしたがRemote Data Sources
機能ができたことで、外部データ連携が容易になり色々と使えそうなので、今後も何か思いつき次第検証します。
また、Data Sources機能についても今後FTPやHTTPを外部ソースとして使えるようにしていくらしいのでそちらの動向も待ちたいと思います。
NetBoxから他のデータソースを統合して管理することができることにより、NetBoxがSSOTとして更に進化したと感じました。
まだデータの活用方法がスクリプトありきですが、開発が進まり抽象化したうえで万人には使いやすくなればと思います。