てくなべ (tekunabe)

ansible / network automation / 学習メモ

[NetBox] ちょっとした連携に便利なカスタムリンクの作成方法

はじめに

NetBox には、各オブジェクトの画面ごとにカスタムリンクを作成できます。

netbox.readthedocs.io

f:id:akira6592:20201011143420p:plain
カスタムリンク

他のシステムへのリンクも作成できます。また、リンクやテキストにはオブジェクトの名前やJinja2構文を使って動的に変えることもできます。

活用例

例えば、以下のようなことが実現できます。

  • 例1. Git 系サービスへのリンク
    • 予め、GitHubhttps://github.com/ユーザー名/config/デバイス名.txt にデバイスのコンフィグを配置しておく
    • 予め、NetBox のデバイス画面に、現在開いているデバイス名を含む上記の URL のカスタムリンクを作成しておく
    • NetBox 利用者は、上記のカスタムリンクをクリックして現在開いているデバイスのコンフィグを GitHub 上で表示する
      • (この例に限って言えば NAPALM 連携でも似たようなことを実現可能です。)
  • 例2. デバイスの Web GUI へのリンク
    • 予め、NetBox のデバイス画面に、現在開いているデバイスの管理IPアドレス含むURL(https://{{ obj.primary_ip4.address.ip }})のカスタムリンクを作成しておく
    • NetBox 利用者は、現在開いているデバイスのWeb GUI を、上記のカスタムリンクをクリックして表示する

この記事では、カスタムリンクの作成方法をご紹介します。

  • 動作確認環境
    • NetBox 2.8.9


■ 基本的なカスタムリンクの作成方法

バイスの管理画面に、そのデバイスのコンフィグを表示するためののリンク(GitHub リポジトリ上)を作る例をもとに、カスタムリンクの作成方法を説明します。

カスタムフィールド追加画面を開く

ここでは、カスタムフィールドの追加と同様に admin ユーザーで作業します。ログイン後、右上のメニューから Admin をクリックします。

f:id:akira6592:20201011141808p:plain:w400
Admin をクリック

全体の管理画面で、Custom links をクリックします。

f:id:akira6592:20201011141936p:plain:w400
Custom links をクリック

カスタムフィールド一覧画面で ADD CUSTOM LINK をクリックします。

f:id:akira6592:20201011142025p:plain:w400
ADD CUSTOM LINK をクリック

カスタムフィールド追加画面が表示されます。

f:id:akira6592:20201011142101p:plain:w400
カスタムフィールド追加画面

カスタムリンクの内容を入力する

カスタムフィールド追加画面で内容を追加します

Content type

Content type では、カスタムリンクを作成したい対象のオブジェクトの種類を選択します。

f:id:akira6592:20201011142341p:plain:w400
対象オブジェクトを選択

例えばデバイスの画面に作成したい場合は dcim > devie を、IP アドレス画面に作成したい場合は、ipam > IP Address を選択します。

ここでは、dcim > devie を選択します。

Name

Name では、カスタムリンクの名前を入力します。リンクのテキストではなく、カスタムリンクそのものを区別するための名前です。

ここでは、config と入力します。

Group name (任意)

Group name では、このリンクを含めるグループの名前を入力します。

同じグループのリンクは、同じドロップダウンリストの 1つの項目になります。

以下の図は 、Group nameSelect link を入力して複数のカスタムリンクをまとめた場合の例です。

f:id:akira6592:20201011142508p:plain:w400
グループはドロップダウンリストになる

Group name を入力しない場合は、横並びの独立したリンクになります。

ここでは、未入力にします。

Weight

Weight では、同じ画面に複数のカスタムリンクを作成する場合の表示順を指定します。

Weight が小さいリンクが左に、大きいリンクが右に表示されます。

f:id:akira6592:20201011142615p:plain:w400
Weight 大きいものは右に

ここでは、デフォルトの 100 のままにします。

Button class

Button class では、リンクのボタンの意味合いや色を指定します。

選択できる class と実際の表示は以下の通りです。

f:id:akira6592:20201011142845p:plain
意味合いと色

ここでは、デフォルトの Default のままとします。

New window

New window では、リンクを新しいウィンドウ(タブ)で開くかどうかを指定します。デフォルトはオフなので、同じ画面で開きます。

ここでは、チェックをいれます。

Text

Text では、リンクの表示上の文字列を指定します。

オブジェクトの名前などの情報や、Jinja2 構文が利用して、動的に内容を変更できます。

画面内の説明には、Reference the object as {{ obj }}. とあり、 {{ obj }} でオブジェクト名(例えばデバイス名)を参照できます。

Jinja2 のフィルターを併用して、例えば、{{ obj | replace('-', '_') }} とすると、core-rt-01core_rt_01 になります。

他にも条件式や、ユーザー、権限情報も利用できるようです。詳細は公式ドキュメントを参照してください。

他、obj でオブジェクトのどんな情報が使えるかは、以下の記事を参照してください。

tekunabe.hatenablog.jp

ここでは config と入力します。

URL

URL では、実際のリンク先の URL を指定します。

http(s):// から始めると、外部のURLになります。

/hoge のように、/ から始めると、自サイトからのルートの指定になります。 例えば、http://netbox.example.com/dcim/devices/1/ を開いている場合は、リンクは http://netbox.example.com/hoge になります。

hoge のように、単純な文字列の指定だと、現在開いている URL の末尾に付加した URL になります。 例えば、http://netbox.example.com/dcim/devices/1/ を開いている場合は、リンクは http://netbox.example.com/dcim/devices/1/hoge になります。

また,先程の Text と同様に、オブジェクトの情報や Jinja2 構文が利用できます。

ここでは、https://github.com/akira6592/tekunabe/blob/master/config/{{ obj }}.txt を入力します。

この指定により、デバイス名が rt01 であれば{{{ obj }}.txt の部分が rt01.txt になります。

確認する

先程デバイス画面に対して作成したカスタムリンクを確認します。

任意のデバイス画面を開きます。画面右にカスタムリンクがあることを確認します。

f:id:akira6592:20201011143054p:plain
カスタムリンク `config` が追加された

リンクを開くと、デバイス名を含む URL が新しい開いたことを確認します。

f:id:akira6592:20201011143153p:plain
別サイト(GitHub)で対象デバイスのコンフィグが表示された

※ このファイルはあとで削除するかもしれません。


■ おわりに

リンクがあるだけで、他システムとの連携がある程度できることもあるので、カスタムリンクは便利な機能だと思いました。