Netboxのおさらい
IPAM機能(IP/PREFIX/VLAN/VRF)とDCIM機能(Device/Rack/Power/Cable) を兼ねそろえたOSSのWebツール
できることは以下
- IPアドレス管理(IPAM) -IPネットワークとアドレス、VRF、およびVLAN
- 機器ラック-グループおよびサイトごとに整理
- デバイス-デバイスの種類とインストール場所
- 接続-デバイス間のネットワーク、コンソール、および電源接続
- 仮想化-仮想マシンとクラスター
- データ回線-長距離通信回線およびプロバイダー
- シークレット-機密性の高いクレデンシャルの暗号化されたストレージ
Netboxでできないこと
スコープ外の機能、ほかのツールと組み合わせて使うよいもの
構成管理はlocal_contextなど使えばできないこともなさそうだなぁとは思ったり
ドキュメント
netbox.readthedocs.io
環境
Netbox 2.10 (https://netboxdemo.com/)デモ環境
Ansible 2.10
pynetbox 5.3.1
準備
- pynetboxのライブラリが必要なのでインストール
pip install pynetbox
実施 - netbox collectionのインストール
ansible-galaxy collection install netbox.netbox
実施 URLとTokenは変数として格納しておく(netbox_url/netbox_token)
自動払い出し機能付きモジュールの使い方
netbox_prefix
sampleのタスクを下記に記載
ポイントは parent
と first_available
親セグメントから余りのprefixを払い出してくれる。
(192.168.0.0/24から/28を払い出す)
- name: create prefix netbox.netbox.netbox_prefix: netbox_url: "{{ netbox_url }}" netbox_token: "{{ netbox_token }}" validate_certs: false data: parent: "{{ prefix }}" prefix_length: "{{ prefix_length }}" state: present first_available: true vars: prefix: 192.168.0.0/24 prefix_length: 28
ちなみに払い出せない場合はSKIPになる
netbox_ip_address
sampleplaybookを下記に記載
こちらは state: new
にすることでprefix内からipaddressを払い出してくれる
- name: "Address payout " netbox.netbox.netbox_ip_address: netbox_url: "{{ netbox_url }}" netbox_token: "{{ netbox_token }}" validate_certs: false data: prefix: "{{ prefix }}" state: new vars: prefix: 192.168.0.0/24
設定更新時に使えるquery_params
netbox_ip_addressは特に意識せずに使ってしまうと重複して登録ができてしまう場合があります
(VIPなど、複数DeviceにIPを紐付ける場合があったりするためそういった仕様なのかもしれないです)
それでは困る場合もありますが、そんな時に使えるのがquery_paramsです
ユニークなオブジェクトに対して処理を実行できます
使い方
- name: ip address assinge netbox.netbox.netbox_ip_address: netbox_url: "{{ netbox_url }}" netbox_token: "{{ netbox_token }}" data: address: "192.168.0.1/32" assigned_object: name: "Gi1/0/1" device: "device_a" query_params: - address
便利なnb_lookup
netboxのcollectionにはlookup pluginも用意されています
めちゃめちゃ便利なnb_lookupを紹介します
使い方
- name: fetch prefixes set_fact: prefixes: "{{ q('netbox.netbox.nb_lookup', 'prefixes', api_endpoint=netbox_url, api_filter=filter_value, token=netbox_token)}}" vars: filter_value: 'mask_length=24'
prefixes
の部分は使えるkeywordが決まっている、書き換えるといろいろなリソースにアクセスすることができる
`api_filter‘はクエリする際のパラメータ部分になります
上記例では/24のPrefixのみを取得できる
ちなみに、パラメータを増やす際はスペースで区切る
実行するとkeyとvalueが返ってくる、valueの中に細かい情報が入っています
nb_lookupで使えるkeyword
- aggregates
- circuit-terminations
- circuit-types
- circuits
- circuit-providers
- cables
- cluster-groups
- cluster-types
- clusters
- config-contexts
- console-connections
- console-ports
- console-server-port-templates
- console-server-ports
- device-bay-templates
- device-bays
- device-roles
- device-types
- devices
- export-templates
- front-port-templates
- front-ports
- graphs
- image-attachments
- interface-connections
- interface-templates
- interfaces
- inventory-items
- ip-addresses
- manufacturers
- object-changes
- platforms
- power-connections
- power-outlet-templates
- power-outlets
- power-port-templates
- power-ports
- prefixes
- rack-groups
- rack-reservations
- rack-roles
- racks
- rear-port-templates
- rear-ports
- regions
- reports
- rirs
- roles
- secret-roles
- secrets
- services
- sites
- tags
- tenant-groups
- tenants
- topology-maps
- virtual-chassis
- virtual-machines
- virtualization-interfaces
- vlan-groups
- vlans
- vrfs
まとめ
何かと便利なNetboxですがAnsibleで操作するさいに忘れがちなことをまとめてみました。
※ダイナミックインベントリは試せてないのでまたいつか・・