Shumoku
NetBox 統合

NetBox 統合

NetBox の DCIM/IPAM からデバイス・ケーブルを取得し、Shumoku ダイアグラムを自動生成

NetBox プラグインは NetBox の DCIM/IPAM からデバイス・仮想マシン・インターフェース・ケーブルを取得し、Shumoku のトポロジーを自動生成します。

利用方法は2つあります:

  • Shumoku サーバー(推奨) — NetBox をデータソースとして追加すると、トポロジーが自動生成され、同期され続けます。設定はサーバードキュメントを参照してください。
  • ライブラリshumoku-plugin-netbox の API クライアントとコンバーターを直接コードから使います。

サーバーにはこのプラグインがバンドルされているため、別途インストールは不要です。このページの以降はライブラリとしての利用方法を説明します。

インストール

npm install shumoku-plugin-netbox @shumoku/renderer-svg
yarn add shumoku-plugin-netbox @shumoku/renderer-svg
pnpm add shumoku-plugin-netbox @shumoku/renderer-svg
bun add shumoku-plugin-netbox @shumoku/renderer-svg

クイックスタート

NetBox からデータを取得し、NetworkGraph に変換してレンダリングします:

import { NetBoxClient, convertToNetworkGraph } from 'shumoku-plugin-netbox'
import { renderGraphToSvg } from '@shumoku/renderer-svg'

// NetBox クライアントを作成
const client = new NetBoxClient({
  url: 'https://netbox.example.com',
  token: 'your-api-token',
})

// デバイス・インターフェース・ケーブルを取得
const { devices, interfaces, cables } = await client.fetchAll()

// Shumoku の NetworkGraph に変換してレンダリング
const graph = convertToNetworkGraph(devices, interfaces, cables, { groupBy: 'site' })
const svg = await renderGraphToSvg(graph)

仮想マシンも含める場合は client.fetchAllWithVMs()convertToNetworkGraphWithVMs() を使います。インタラクティブな出力には @shumoku/renderer-htmlrenderGraphToHtml を使ってください。

グループ化とフィルタリング

デバイスは tag / site / location / prefix でサブグラフにグループ化でき(none でグループ化なし)、サイト・タグ・ロールでフィルタリングできます。Shumoku サーバーではデータソースのオプションとして UI から設定します:

オプション説明
groupByノードのグループ化方法: tag(デフォルト), site, location, prefix, none
siteFilter指定したサイトのみ含める
tagFilter指定したタグのみ含める
roleFilter指定したデバイスロールのみ含める
excludeRoleFilter指定したロールを除外
excludeTagFilter指定したタグを除外

ライブラリとして使う場合は、groupByコンバーターオプションとして渡し、フィルタリングには各 fetch メソッドのクエリパラメータを使います。

NetBox のセットアップ

API トークンの取得

  1. NetBox にログイン
  2. 右上のユーザーメニュー → API Tokens
  3. Add a token をクリック
  4. 必要な権限を設定してトークンを作成

必要な権限

読み取り専用の場合、以下の権限が必要です:

  • dcim.view_device
  • dcim.view_cable
  • dcim.view_site
  • dcim.view_interface

データマッピング

NetBox のデータは以下のように Shumoku に変換されます:

NetBoxShumoku
DeviceNode
CableLink
Site / Location / Tag / PrefixSubgraph(グループ化に応じて)
InterfacePort
Device Roletype の推測に使用

デバイスタイプの自動推測

NetBox の device role から Shumoku の type を推測します(useRoleForType オプション、デフォルトで有効)。対応はプラグインがエクスポートする ROLE_TO_TYPE で定義されています。代表例:

NetBox Device RoleShumoku Type
router, core-router, border-router, edge-routerrouter
switch, access-switchl2-switch
core-switch, distribution-switchl3-switch
firewallfirewall
server, virtual-machineserver
access-point, wireless-ap, apaccess-point
load-balancerload-balancer

マッピングのないロールは generic になります。

トラブルシューティング

接続エラー

  • URL が正しいか確認
  • API トークンが有効か確認
  • ネットワーク接続を確認

自己署名証明書のエラー

自己署名証明書を使っている場合は、クライアントに insecure: true を渡します:

const client = new NetBoxClient({
  url: 'https://localhost:1080',
  token: 'your-api-token',
  insecure: true, // TLS 証明書の検証をスキップ
})

insecure: true は証明書の検証を無効化します。信頼できるネットワーク内の自己署名証明書に限って使用してください。

権限エラー(403 Forbidden)

  • API トークンに必要な権限が付与されているか確認

デバイスが表示されない

  • フィルタ条件(サイト・タグ・ロール)を確認
  • NetBox 上でデバイスとケーブルが正しく登録されているか確認

次のステップ

目次