ShumokuShumoku
NetBox 統合

NetBox 統合

NetBox からネットワーク構成を取得し、Shumoku ダイアグラムを自動生成

NetBox からネットワーク構成を取得し、Shumoku ダイアグラムを自動生成します。

インストール

npm install @shumoku/netbox
yarn add @shumoku/netbox
pnpm add @shumoku/netbox
bun add @shumoku/netbox

クイックスタート

CLI で使う

# 環境変数で認証
export NETBOX_URL=https://netbox.example.com
export NETBOX_TOKEN=YOUR_API_TOKEN

# インタラクティブ HTML 出力
npx netbox-to-shumoku -f html -o network.html

# SVG 出力
npx netbox-to-shumoku -o network.svg

# JSON エクスポート(他ツールとの統合用)
npx netbox-to-shumoku -f json -o netbox.json

ライブラリとして使う

import { NetBoxClient, convertToNetworkGraph } from '@shumoku/netbox'
import { HierarchicalLayout, svg } from '@shumoku/core'

const client = new NetBoxClient({
  url: 'https://netbox.example.com',
  token: 'your-api-token'
})

const devices = await client.fetchDevices()
const interfaces = await client.fetchInterfaces()
const cables = await client.fetchCables()

const graph = convertToNetworkGraph(devices, interfaces, cables)

const layout = new HierarchicalLayout()
const result = await layout.layoutAsync(graph)

const svgOutput = svg.render(graph, result)

CLI オプション

接続オプション

オプション説明
--url, -uNetBox の URL(必須、または NETBOX_URL 環境変数)
--token, -tAPI トークン(必須、または NETBOX_TOKEN 環境変数)
--insecure, -kTLS 証明書の検証をスキップ(自己署名証明書用)

出力オプション

オプション説明
--format, -f出力形式: yaml, json, svg, html(デフォルト: 拡張子から自動判定)
--output, -o出力ファイル名(デフォルト: topology)
--themeテーマ: light または dark

出力形式

形式説明
yamlYAML 定義ファイル(他のツールで利用可能)
jsonNetworkGraph JSON(他の API と統合可能)
svg静的 SVG 画像
htmlインタラクティブ HTML(ツールチップ、パン/ズーム対応)

フィルタリングオプション

オプション説明
--site, -sサイト slug でフィルタリング
--role, -rデバイスロール slug でフィルタリング
--statusステータスでフィルタリング(active, planned, staged, failed, offline)
--tagタグ slug でフィルタリング

表示オプション

オプション説明
--group-by, -gグループ化方法: tag, site, location, prefix, none
--no-portsポート名をリンクに表示しない
--no-colorsケーブルタイプによる色分けをしない
--color-by-statusデバイスをステータスで色分け
--legend凡例を表示(SVG/HTML 出力時)

その他のオプション

オプション説明
--debug, -dデバッグ出力を表示(API リクエスト/レスポンス)
--help, -hヘルプを表示
--version, -vバージョンを表示

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
SiteSubgraph
InterfacePort
Device Roletype の推測に使用

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

NetBox の device_role から Shumoku の type を自動推測します:

NetBox Device RoleShumoku Type
router, core-routerrouter
switch, access-switchl2-switch
l3-switch, distribution-switchl3-switch
firewallfirewall
server, computeserver
access-point, wirelessaccess-point
load-balancerload-balancer

GitHub Actions でのデプロイ

GitHub Actions を使って NetBox から自動生成した HTML を GitHub Pages にデプロイできます。

# .github/workflows/network-diagram.yml
name: Update Network Diagram

on:
  schedule:
    - cron: '0 0 * * *'  # 毎日 AM 9:00 (JST)
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pages: write
      id-token: write

    steps:
      - name: Generate diagram
        run: |
          npx netbox-to-shumoku \
            -u ${{ secrets.NETBOX_URL }} \
            -t ${{ secrets.NETBOX_TOKEN }} \
            -f html -o index

      - uses: actions/upload-pages-artifact@v3
        with:
          path: .

      - uses: actions/deploy-pages@v4

設定:

  1. Settings → Secrets に NETBOX_URLNETBOX_TOKEN を追加
  2. Settings → Pages → Source を "GitHub Actions" に設定

トラブルシューティング

問題が発生した場合は、--debug オプションを使用して API リクエスト/レスポンスの詳細を確認できます:

npx netbox-to-shumoku --debug -o network.html

デバッグ出力例:

[DEBUG] Request: GET https://netbox.example.com/api/dcim/devices/?limit=0
[DEBUG] Response: 200 OK (234ms)
[DEBUG] Response data: 15 items

接続エラー

Error: Failed to connect to NetBox
  • URL が正しいか確認
  • API トークンが有効か確認
  • ネットワーク接続を確認

自己署名証明書エラー

Error: fetch failed

自己署名証明書を使用している場合は --insecure オプションを使用:

npx netbox-to-shumoku --insecure --url https://localhost:1080 ...

注意: このオプションは TLS 証明書の検証をスキップするため、開発環境でのみ使用してください。

権限エラー

Error: 403 Forbidden
  • API トークンの権限を確認
  • 必要な権限が付与されているか確認

デバイスが表示されない

  • デバイスのステータスが active か確認
  • フィルタ条件を確認
  • NetBox でデバイスが正しく登録されているか確認

次のステップ

目次