netbox-automation-patterns について
NetBox を自動化に組み込むチーム向けのスキルで、イベントルール、Webhook、Ansible、Terraform、GitOps の連携パターンを扱います。バージョン互換性や運用上の留意点も説明します。
主な機能
- 01イベントルールと Webhook 自動化
- 02Ansible の状態管理と動的インベントリー
- 03Terraform のリソースとデータソース
- 04GitOps ワークフローの設計
- 05トークン、冪等性、互換性のガイド
活用シーン
- 01NetBox の変更を契機に CI/CD デプロイ
- 02NetBox から Ansible インベントリーを生成
- 03Terraform による NetBox とインフラの管理
- 04NetBox を正本とする構成パイプラインの構築
MCP 対応
設定済みの NetBox MCP サーバーでイベントルールや Webhook 設定を確認できると説明します。このスキル自体は MCP サービスを提供しません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ netboxlabs/ skills --skill netbox-automation-patternsインストール後、Claude Code で/netbox-automation-patternsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/ansible-patterns.mdevent-rules-and-webhooks.mdgitops-workflows.mdterraform-patterns.md詳細
NetBox 自動化パターン
NetBox 自動化ツールに関する知識は古くなっている可能性があります。 Ansible コレクションのモジュール、Terraform プロバイダーのリソース、イベントルールの動作はリリースごとに変わります。事前学習済みの知識よりも、情報を取得して確認してください。
情報取得元
| 情報源 | URL/方法 | 用途 |
|---|---|---|
| NetBox Ansible コレクション | https://github.com/netbox-community/ansible_modules | モジュール一覧、パラメーター、例 |
| Ansible ドキュメント | https://netboxlabs.com/docs/integrations/tool-integrations/netbox-ansible-collection/ | 統合ガイド |
| Terraform プロバイダー | https://github.com/e-breuninger/terraform-provider-netbox | リソース、データソース |
| イベントルールのドキュメント | https://netboxlabs.com/docs/netbox/features/event-rules/ | Webhook/スクリプトのトリガー |
| NetBox MCP サーバー | 設定されている場合 — イベントルールとWebhookが存在することを確認 | 自動化設定の検証 |
このスキルでは、NetBox を自動化ワークフローに統合する方法を扱います。イベント駆動型トリガー、構成管理、インフラストラクチャ・アズ・コード、CI/CD パイプラインを網羅しています。これは複数の領域にまたがるスキルであり、NetBox を信頼できる情報源として、複数のオープンソースツールを連携させます。
このスキルを読み込むタイミング:
- NetBox の変更をトリガーとするWebhook駆動型自動化を構築するとき
- NetBox を動的インベントリーまたは状態管理ツールとして使うよう Ansible を構成するとき
- Terraform を使って NetBox リソースを管理するとき
- NetBox を組み込んだ GitOps パイプラインを設計するとき
対象外: NetBox のコア管理、プラグイン開発、REST/GraphQL API の基本(netbox-api-integration を参照)。
クイックリファレンス:パターンごとに使うツール
| 目的 | ツール | パターン |
|---|---|---|
| NetBox の変更に応答する | Event Rules + Webhooks | 外部システムへのプッシュ通知 |
| 内部で変更に応答する | Event Rules + Custom Scripts | NetBox 内でロジックを実行 |
| NetBox で意図する状態を定義する | Ansible モジュール(netbox.netbox) | 宣言型、冪等 |
| NetBox を Ansible インベントリーとして使う | nb_inventory プラグイン | NetBox データを使った動的インベントリー |
| NetBox とクラウドをまとめて管理する | Terraform(e-breuninger/netbox) | IaC のライフサイクル、状態の追跡 |
| 次に利用可能な IP/プレフィックスを割り当てる | Terraform available_* リソース | 親からの自動割り当て |
| NetBox → 構成生成 → デプロイ | GitOps パイプライン | NetBox を信頼できる情報源とする CI/CD |
イベント駆動型自動化
NetBox のイベントルールシステム(3.7 で導入)は、リアクティブな自動化の基盤です。イベントルールはオブジェクトの変更とアクションを対応付けます。
イベントルールの要点
- トリガーの範囲:オブジェクトの型(複数可)+イベントの型(作成、更新、削除、ジョブの開始/完了/失敗/エラー)
- 条件:フィルタリングに使う任意の JSON 条件 — たとえば、
status.value == "active"の場合にのみ実行します。4.7 以降では、変更そのものも条件で判定できます。{"attr": "status", "op": "changed"}に加えて、snapshots.prechange.<attr>/snapshots.postchange.<attr>のパスとregex演算子が使えます - アクションの種類:
webhook(外部 HTTP 呼び出し)、script(カスタムスクリプトの実行)、notification(ユーザーへの通知)、さらに 4.7 以降ではプラグインによって登録されたアクションの種類 - 処理:Redis/RQ を介した非同期処理 — ユーザーのリクエストは待機せずに完了します
主なガイドライン
-
必ず条件で範囲を絞ります — 範囲を絞らないイベントルールは、該当する変更があるたびに実行され、ノイズや負荷の原因になります。条件を使って、対象のステータス、ロール、タグを指定してください。遷移(ステータスが有効になる)時だけ実行するには、4.7 の
changed演算子を使います。4.5/4.6 では、代わりに本文テンプレート内でsnapshots.prechange/postchangeを比較します。4.7 以降では、存在しない属性を参照する条件はフェイルクローズとなり、ログに記録されます。編集後にルールが「実行されなくなった」場合は、通常、誤字が原因です。 -
イベントは非同期です — すぐに実行されると想定しないでください。イベントは Redis/RQ にキューイングされ、ワーカーによって処理されます。遅延に対応できるレシーバーを設計してください。
-
適切なアクションタイプを選択します:
- 外部システム → webhook
- NetBox 内部のロジック → カスタムスクリプト(
netbox-custom-scriptsを参照) - 人への通知 → 通知グループ
-
本番環境に移行する前に、組み込みレシーバーでテストします:
python netbox/manage.py webhook_receiver # Listens on port 9000 -
集約の動作 — 1 つのリクエスト内で同じオブジェクトに対する変更が複数ある場合、それらは集約されます。イベントをトリガーするのは最終状態のみです。削除イベントでは、後からオブジェクトが存在しなくなるため、データが即時にシリアライズされます。
-
レシーバーの実行時間に上限を設定します(4.7 以降) — webhook ごとに
timeout(またはWEBHOOK_DEFAULT_TIMEOUT、デフォルトは 60 s)を設定します。これはRQ_DEFAULT_TIMEOUT未満でなければなりません。レシーバーは速やかに受信を確認し、非同期で処理してください。
ペイロード形式、HMAC 署名、Jinja2 テンプレート、安全性に関する考慮事項については、references/event-rules-and-webhooks.md を参照してください。
Ansible との統合
netbox.netbox Ansible コレクション(GPLv3)には、モジュール、動的インベントリー、ルックアッププラグインが用意されています。
主な 3 つのユースケース
-
状態管理 — モジュール(
netbox_device、netbox_ip_addressなど)を使用して、NetBox オブジェクトが望ましい状態と一致するようにします。すべてのモジュールはstate: present/absentによる冪等性を備えています。 -
動的インベントリー —
nb_inventoryを使用して、NetBox から Ansible インベントリーを生成します。デバイスロール、サイト、リージョン、テナント、タグ、プラットフォームでグループ化できます。 -
データの検索 —
nb_lookupを使用して、プレイブック内から NetBox データを検索します。
主なガイドライン
-
必要がない限り、インベントリーで
config_context: Falseを設定します。4.5/4.6 では、これによりサーバー側でデバイスごとに行われる高負荷なレンダリングを回避できます。4.7 以降ではコンテキストが事前にレンダリングされ、キャッシュされます。また、プラグインは?exclude=config_contextを送信します(すべての 4.7.x で無視されます。4.7.3 の?omit=最適化はnetbox.netbox3.23.1 時点では適用されません)。そのため、このオプションの効果は hostvars の削減に限られます。 -
query_filtersを使用して、クライアント側でフィルタリングするのではなく、サーバー側でインベントリーの範囲を絞ります。 -
トークンの権限を適切に設定します — インベントリー/ルックアップには読み取り専用トークンを使用し、オブジェクトを作成/変更するモジュールにのみ書き込みトークンを使用します。
-
バージョンの互換性 — コレクションの方針では、NetBox の直近 2 リリースを対象としています。最新リリース(v3.23.1、2026-10)は CI で 4.5 までテストされていますが、4.6/4.7 はまだサポート対象として明記されていません。コレクションのバージョンを固定し、使用する NetBox のマイナーバージョンでテストしてください。
-
device_query_filtersでフィルタリングします — たとえば、管理 IP のないデバイスを除外するにはhas_primary_ip: 'true'を指定します。
モジュールの例、インベントリーの設定、ルックアップのパターンについては、references/ansible-patterns.md を参照してください。
Terraform との統合
e-breuninger/netbox Terraform プロバイダーは、NetBox のリソースを Infrastructure as Code として管理します。
主なガイドライン
-
NetBox のバージョンに合わせてプロバイダーのバージョンを固定する — NetBox はマイナーリリースで互換性のない API 変更を行います。プロバイダーの互換性マトリックスを確認してください。v5.6.1 以降は NetBox 4.3~4.6.5 に対応しています。v6.0 のリライト版(2026-09 時点で RC)は 4.6.8~4.6.10 を対象としており、4.7 のサポートを宣言しているリリースはまだありません。
-
available_*リソースのライフサイクルを理解する —netbox_available_ip_addressとnetbox_available_prefixは作成時に割り当てを行い、「更新」できません。通常のリソースとは異なる固有のライフサイクル動作があります。 -
状態のドリフトに備える — Terraform の外部で誰かが NetBox を変更すると、次の
terraform planでドリフトが表示されます。ドリフトを修正する方針を決めておいてください。 -
領域によってカバレッジは異なる — プロバイダーのカバレッジが最も充実しているのは IPAM と仮想化です。その他のモデルでは、リソースのサポートが不完全な場合があります。
-
読み取り専用の参照にはデータソースを使用する — ほとんどのリソースには対応するデータソースがあり、既存の NetBox オブジェクトを管理せずに参照できます。
プロバイダーの設定、リソースの例、および available_* の割り当てパターンについては、references/terraform-patterns.md を参照してください。
GitOps ワークフロー
NetBox は、信頼できる唯一の情報源または状態のミラーとして GitOps パイプラインに統合できます。
一般的なアーキテクチャ
| パターン | フロー | 最適な用途 |
|---|---|---|
| Webhook 駆動 | NetBox の変更 → webhook → CI/CD → デプロイ | リアルタイムの反応 |
| ポーリング/エクスポート | Cron → NetBox データをエクスポート → Git にコミット → CI/CD | 一括設定の生成 |
| Ansible pull | Ansible + nb_inventory → 設定を生成 → プッシュ | Playbook 主導のワークフロー |
| Terraform による統合管理 | Terraform で NetBox とインフラストラクチャをまとめて管理 | クラウドと NetBox の同期 |
主なガイドライン
-
信頼できる唯一の情報源を決める — NetBox が状態を規定し、Git/自動化でそれを適用するか、Git を情報源として NetBox をミラーにするかを決めてください。二つのマスターを設けないでください。
-
テンプレート用のデータには config context を使用する — Config context は、Jinja2 テンプレートが設定生成時に使用する、デバイス、ロール、またはサイトごとの設定データを提供します。
-
リアルタイムパイプラインには Webhook → CI/CD を使用する — イベントルールと webhook を組み合わせ、NetBox の変更時に GitHub Actions、GitLab CI、または Jenkins をトリガーします。
-
自動化のヒントとしてタグを使用する — インターフェース、デバイス、またはプレフィックスにタグを付け、自動化の意図を示します(例:インターフェースに「OSPF」タグを付け、OSPF 設定の生成対象に含めます)。
パイプラインのアーキテクチャの詳細と例については、references/gitops-workflows.md を参照してください。
横断的な考慮事項
以下は、すべての自動化方式に当てはまります。
-
トークン管理:最小限の権限を持つスコープ付きトークンを使用してください。
Bearer認証を使用する v2 トークン(NetBox 4.5 以降)が推奨されます。トークン形式の詳細については、netbox-api-integration を参照してください。 -
レート制限:大規模な自動化実行(一括 Ansible play、Terraform の適用)では、NetBox API に過剰な負荷をかけないよう、バックオフを実装してください。4.7 以降では、大規模なカスタム一括書き込みに
?background=true(HTTP 202 + ジョブ URL。結果を取得するにはジョブをポーリング)を使用して、プロキシのタイムアウトを回避できます。netbox-api-integration を参照してください。 -
ページネーション:すべてのツール(pynetbox、Terraform プロバイダー、Ansible コレクション)は内部でページネーションを処理しますが、カスタム統合を作成する際は意識してください。NetBox 4.6 では、カーソルベースの
startページネーションが追加されています(深いoffsetスキャンに代わる効率的な方法です)。netbox-api-integration を参照してください。 -
冪等性:Ansible モジュールは設計上、冪等性を備えています。Terraform は宣言型です。Webhook は送信後の結果を確認しないため、受信側で冪等性を実装してください。
-
テスト:CI/CD テスト環境には NetBox 公式 Docker イメージ(
netboxcommunity/netbox:v4.7-5.1.1。タグ形式はv<netbox>-<netbox-docker>)を使用してください。統合テスト用に使い捨てのインスタンスを起動します。
バージョンに関する注意
NetBox 4.7(2026-09-02)
- スナップショット対応条件:
changed/unchanged演算子、snapshots.prechange.<attr>/snapshots.postchange.<attr>パス、regex演算子が追加されました。解決できない属性は安全側に倒して失敗し、netbox.event_rulesにログを記録します。スナップショットの値は生の値です(statusであり、status.valueではありません)。 - Webhook コンテキスト:
usernameとrequest_idは削除されました。request.user/request.idを使用してください。send_webhook()からusername引数が削除されました。アップグレード前に RQ キューを空にしてください。空にしないと、キューに入った Webhook ジョブがTypeErrorで失敗します。 - Webhook タイムアウト:Webhook ごとの
timeoutフィールドとWEBHOOK_DEFAULT_TIMEOUT(デフォルトは 60)が追加されました。RQ_DEFAULT_TIMEOUTより小さくする必要があります。そうでない場合、NetBox は起動または保存を拒否します。 - イベントルール:
action_object_typeは省略可能になりました。プラグインでアクションタイプ(EventRuleAction)を登録できます。action_is_availableは、そのプラグインがなくなったルールを示します。 - 自動化ツールに影響するペイロード/API の変更:選択式のカスタムフィールドは REST で
{value,label}オブジェクトになり(Webhook のdataにも反映されます)、デバイス/VM の出力にはデフォルトでconfig_contextが含まれます(4.7.3 以降では?omit=config_contextで省略できます。4.7 では?exclude=は何も行いません)。ipam.Serviceのprotocol/portsはport_mappingsに置き換えられる予定です。一括書き込みのエラーはオブジェクトごとになり、一括書き込みでは?background=trueを使用できます。 - エコシステム:netbox-docker 5.x(
v4.7-5.1.1)には NetBox 4.7 以降が必要です。Ansible コレクションと Terraform プロバイダーは、4.7 のサポートをまだ表明していません(参考資料を参照)。
NetBox 4.6(2026-05-05)
- Webhook コンテキストに
requestオブジェクトが追加され、username/request_idは非推奨になりました。 - 大規模な読み取りに対応する、カーソルベースの
startページネーション。 - 4.5 では、Webhook コンテキストに
username/request_idのみが存在します。
参考資料
| ドキュメント | 読み込むタイミング |
|---|---|
| references/event-rules-and-webhooks.md | Webhook 統合の構築、イベントルールの設定、Webhook 配信のデバッグ |
| references/ansible-patterns.md | NetBox を管理または照会する Ansible プレイブックの作成 |
| references/terraform-patterns.md | Terraform による NetBox リソースの管理 |
| references/gitops-workflows.md | NetBox を組み込んだ CI/CD パイプラインの設計 |