てくなべ (tekunabe)

ansible / network / automation

[NetBox] カスタムフィールドで独自の設定項目を追加する

はじめに

NetBox はオープンソースの IPAM、DCIM です。

github.com

たとえば、ネットワーク機器の情報を登録して、インターフェースへ IP アドレスを登録したりできます。

デフォルトでも様々な設定項目がありますが、必要に応じて追加できます。それがカスタムフィールドです。

netbox.readthedocs.io

この記事ではかんたんなサンプルで、カスタムフィールドの追加方法を紹介します。

  • 動作確認環境
    • NetBox 2.8.9


カスタムフィールドを追加する

ここでは admin ユーザーで作業します。ログイン後、右上のメニューから Admin をクリックします。

f:id:akira6592:20200912124743p:plain
Admin をクリック

Admin 画面の Custom fieldsAdd をクリックします。

f:id:akira6592:20200912124808p:plain
Custom fields の Add をクリック

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

Object(s) では、カスタムフィールドを追加したい対象のオブジェクトを選択します。複数選択もできます。

f:id:akira6592:20200912124851p:plain
対象オブジェクトの選択肢(複数選択可)

ここではデバイスに追加するものとして、dcim > device を選択します。

例1: 数値項目の追加

バイスbgp_asn というカスタムフィールドを追加します。

AS番号は数値なので、TypeInteger を選択します。

f:id:akira6592:20200912125416p:plain
数値項目の追加

なお Type は以下から選択できます。

  • Text (デフォルト)
  • Integer
  • Boolean (true/false)
  • Date
  • Selection

入力を終えたら、ページ下部の Save and another ボタンをクリックして、次のカスタムフィールドを追加する画面にうつります。

f:id:akira6592:20200912125602p:plain
保存して次の項目を設定へ

例2: 選択項目の追加

バイスに、select_hoge というカスタムフィールドを追加します。 選択肢としていくつか追加します。

TypeSelection を選択すます。

f:id:akira6592:20200912125656p:plain
選択項目の追加

あわせて、ページ下部の CUSTOM FIELD CHOICES 欄で選択肢を入力します。

f:id:akira6592:20200912125757p:plain
選択肢の追加

ページ下部の Save ボタンをクリックして、カスタムフィールドの追加作業をおえます。


バイスへのカスタムフィールドの値の設定

ここまでで、カスタムフィールドの追加ができました。データベースの列を追加したイメージです。まだ各行(ここではデバイスごと)に実際の値は入っていません。

ここから実際に、既存のデバイスにカスタムフィールドの値を設定します。

Admin 画面を抜け、通常の NetBox の画面から、対象のデバイス設定変更画面を開きます。

Customom fields 欄に、追加カスタムフィールドが2つ表示されます。(新規追加画面にも表示されます)

f:id:akira6592:20200912125923p:plain
カスタムフィールドの入力部分

カスタムフィールド設定画面で設定した LabelDescirption は画面でも確認できます。Name については画面には表示されずウラで管理のために利用さているイメージのようです。

select_hoge の方は Name のに設定して、LabelDesciption は設定しませんでしたが、微妙に整形されて Select hoge というラベルととして表示されました。

ためしに、適当な値を入力、選択して保存します。

f:id:akira6592:20200912130002p:plain
カスタムフィールドの入力


確認

設定したカスタムフィールドの値を確認します。

バイスの情報表画面には以下のように表示されます。

f:id:akira6592:20200912130050p:plain
バイスの表示画面のカスタムフィールドの値

API でこのデバイスの情報を GET すると、以下のようになりました。JSON 上のキーは、カスタムフィールドの Name が使用されています。されています。選択肢の項目は、valuelabel に分かれるようです。value はなんでしょうこれは・・。インデックスだと思うのですが、0オリジンでも1オリジンでもなく、2オリジンのように見えます。value ではなく label だけ意識すればよさそうです。

{
  "count": 1,
  "next": null,
  "previous": null,
  "results": [
    {
      "id": 1,
      "name": "rt01",
      "display_name": "rt01",
      // (略)
      "custom_fields": {
        "bgp_asn": 65001,
        "select_hoge": {
          "value": 3,
          "label": "piyo2"
        }
      },
      // (略)
    }
  ]
}


おわりに

NetBox を使ってみたいけど、ちょっとだけ管理項目が足りないというときに、カスタムフィールドは便利そうです。