ネットワーク機器の構成変更を行うAnsibleでコレクションまとめ
はじめに
株式会社SHIFT ITソリューション部の水谷です。
前回Cisco Catalyst 8000vをAWSのEC2で立ち上げて、Ansibleで少し操作してみましたが、その際は cisco.ios というAnsibleコレクションを使用しました。
Ansibleのコレクションが提供されているサイト、Ansible GalaxyやRedHatのAutomation Hubを覗いてみると、これ以外にもたくさんのネットワーク機器操作用コレクションが見つかります。
私は前回の記事を通して、ネットワーク機器の設定自動化に少し興味を持ったので、どのようなコレクションがあるのか調べてみました。今回は、見つけたコレクションに関する情報をnamespaceごとに簡単にまとめてみたいと思います。
【cisco】 namespace
まずは、ネットワーク機器メーカーとして、最もよく知られているCiscoから行ってみましょう。
Ansible Galaxyで'cisco'のnamespaceを見てみたところ、下の表のように23にもおよぶコレクションが登録されていました(2024年7月現在)。
すべてのコレクションについて調べる時間がなかったため、いくつかピックアップして見ていきます。
cisco.ios コレクション
cisco.iosは、ネットワーク機器用のコレクションの中でも、最もよく知られているコレクションですね。
CatalystシリーズでIOSを搭載しているスイッチなどの操作に使います。
このコレクションには36個のモジュールが含まれており、VLANの作成や変更、削除、Interfaceの作成や変更、削除などの操作を行うことが可能です。また、ios_commandモジュールを使うことで、任意のCLIコマンドを実行することが可能となっているため、基本的に「できないことはない」作りとなっています(もちろん冪等性等考える必要があることもありますが)。
機器との接続はSSHで行うのですが、インベントリで ansible_connection には ansible.netcommon.network_cliを、また、ansible_network_osには cisco.ios.ios を指定する必要があります。
VLANなどの各種リソースを操作するモジュールは、いわゆる "Network Resource Module" に分類されるものとなっており、stateパラメーターに overridden を指定すると、そのリソース(例えばVLAN)を、宣言的に設定することができます。
cisco.nxos コレクション
続いて、cisco.nxos です。
こちらは、Cisco Nexus 7000、Nexus 9000vなど、NX-OSを搭載した機器を操作するコレクションになります。
cisco.iosとおおよそ似通ったモジュールで構成されているので、cisco.iosコレクションに慣れた方なら、このコレクションも簡単に使えると思います。もちらん、リソース操作は"Network Resource Module"に対応したモジュールで行えます。
また、SSH接続でCLIを実行するモジュールだけでなく、REST APIに対応したモジュールも含まれているようです。
cisco.aci コレクション
こちらのコレクションは機器単体ではなく、Cisco ACI(Application Centric Infrastructure)のコントローラーであるAPICに対して操作を行うコレクションです。
ACIは、ネットワークの設定や機能を抽象化し、ポリシーを規定し、それを組み合わせてプロファイルを作っていくことで、迅速かつ簡単にネットワークを構築するものです。
このコレクションには258個のモジュールが入っており、APICが提供するAPIの多くをこれらのモジュールからコールすることができるようになっています。
APICが提供する任意のAPIをコールする aci_rest モジュールもあるので、モジュールでカバーできていないAPIもこのモジュールで使うことができるでしょう。
なお、このコレクションのモジュールはREST APIをコールするので、(APICに直接ログインする必要がないため)hostsはlocalhostでOKです。
APICへのログイン情報は、各モジュールを実行する際のパラメーターで以下のように渡す仕様となっています。
例:
- name: Add a new VLAN pool
cisco.aci.aci_vlan_pool:
host: apic
username: admin
password: SomeSecretPassword
pool: production
pool_allocation_mode: dynamic
description: Production VLANs
state: present
delegate_to: localhost
※cisco.aci.aci_vlan_poolモジュールのドキュメントから引用
【arista】 namespace
Arista社は、Linuxベースの拡張可能なオペレーティング・システム 'EOS' を搭載する7000シリーズなどのスイッチデバイスもありますが、VM上にインストールしてバーチャルデバイスを構築することもできまます。
arista.eos コレクション
2024年7月時点でarista namespaceに存在するただ1つのコレクションがこの arista.eos です。
モジュール数は32とコンパクトで、Network Resource Moduleに分類されるモジュール群で、スイッチデバイスのリソースを設定、変更、および削除ができます。
ぱっと見た感じでは、モジュールの構成がcisco.iosと似ており、各モジュールのパラメーター構成も近いように見えたので、cisco.iosコレクションを使った経験のある方には、違和感なく使用できるのではないかと思います。
【vyos】 namespace
主にソフトウェアルーターとして使われる、オープンソースで開発されているネットワークオペレーティングシステムVyOSのコレクションです。
vyos.vyos コレクション
2024年7月時点でvyos namespaceに存在するただ1つのコレクションがこの vyos.vyos です。
モジュール数は29のみで、まだ試したことは無いのですが、VLAN、Interface、L3-Interface、Static Route、OSPFv2、OSPFv3やFiewallの設定などができるようです。
コンパクトなコレクションなので、実験的に仮想ルーターを建てて、Ansibleでネットワーク機器の操作を試してみたい方には良い選択肢かもしれませんね。
【f5networks】 namespace
こちらは、ロードバランサー製品で有名なF5 Networksのnamespaceです。
5つのコレクションが公開されていますが、BIG-IPに関するコレクションを紹介します。
f5networks.f5_modules コレクション
F5 BIG-IP操作用のコレクションで、命令的な記述でBIG-IPの設定を行えるものです。
このコレクションには179のモジュールが収められており、豊富な機能を持つF5 BIG-IPへの設定投入、変更、削除が行えます。
機器への接続方法は、SSHではなく、REST APIとなっており、モジュールパラメーターのproviderにBIG-IPのホスト名(またはIPアドレス)、ユーザー名およびパスワードを設定して実行する仕様になっています(以下はその例)。
- name: Create VLAN
bigip_vlan:
name: net1
provider:
password: secret
server: lb.mydomain.com
user: admin
delegate_to: localhost
※f5networks.f5_modules.bigip_vlanモジュールのドキュメントから引用
f5networks.f5_bigip コレクション
同じくF5 BIG-IP用のコレクションですが、こちらは宣言的な記述を可能とするコレクションです。
BIG-IPの各種設定をJSONファイルに記述しておき、f5networks.f5_bigip.bigip_do_deploy モジュールに渡すことで、設定を一括で投入できるようです。
以下はf5networks.f5_bigip.bigip_do_deployモジュールのドキュメントに書かれているサンプルタスクです。
- name: Start simple declaration task
bigip_do_deploy:
content: "{{ lookup('file', 'do_bigiq_declaration.json') }}"
register: task
なお、設定変更のステータスは、リターン値であるtask_id(上記例の場合はtask.task_id)を用いて、以下のようにモジュールを実行することで確認できるようです。
- name: Check for simple declaration status
bigiq_do_deploy:
task_id: task.task_id
timeout: 1000
よりIaCらしく(?)構成情報をGitなどで管理して構成管理を行いたい場合は、こちらも検討したいところですね。
【paloaltonetworks】 namespace
こちらは、ファイヤーウォールデバイスで有名な、Paloaltoのnamespaceです。
paloaltonetworks.panos コレクション
Paloalto製機器向けのコレクションは、こちらの paloaltonetworks.panos のみとなっています。
ここに含まれているモジュールは、PAN-OS APIを実行することで、ファイヤーウォールなどの設定を行います。
モジュール数は113あり、適応範囲の指定したセキュリティルールの作成をはじめ、様々な設定ができるようです。
【a10】 namespace
ロードバランサーから、クラウドアクセスプロキシ、リバースプロキシ、DDoS対策、WAFなどの機能を提供するThunderシリーズのnamespaceです。
a10.acos_cli コレクション
a10.acos_cliは、CLIコマンドの実行、Factの収集、および設定の一括投入の3つのモジュールを提供します。
CLIを使った設定からAnsibleへの移行のためのコレクションということになるのかな、と思います。
a10.acos_axapi コレクション
こちらは、axapiと呼ばれるREST APIによる構成変更を可能にするコレクションで、A10 Thunderシリーズの各機能を細かく設定できるようになっています。
このコレクションに収められているモジュール数は実に1635もあるため、使いたいモジュールを探すだけでもちょっと苦労しそうではありますが、これだけあれば何でもきそうな感じがしますね。
その他の namespace
ネットワーク機器ベンダー以外のnamespaceも見ておきましょう。
ansible.netcommon コレクション
このコレクションは、これまで紹介してきたネットワーク機器ベンダーが、そのベンダーの製品の操作に特化して作ったコレクションとは異なり、機器非依存なかたちで各種機器を操作するためのモジュールを提供しています。
各モジュールは ansible_network_os の値から操作対象機器を判別し、機器に合った方法で操作を行うことになります。
できる操作としては、現在のところ以下のようなものがあります。
現在設定のバックアップ
バックアップからのリストア
CLIコマンド実行
gRPC対応機器への設定投入/取得
ネットワーク機器へのファイルコピー
ネットワーク機器からのファイルコピー
ネットワーク機器からPingを打つ
Netconfプロトコルによる機器の操作
Restconfプロトコルによる機器の操作
ネットワーク機器に対するtelnetコマンドの実行
異なるネットワーク機器を統一的に扱える魅力的なコレクションではありますが、もちろんすべてのネットワーク機器で期待通りに動作するものではありません。各モジュール使用できる条件や、テストが行われたデバイス名等の情報は、各モジュールのドキュメントページに書かれていますので、使用前にしっかり読んで理解しておく必要がありそうです。
community.network コレクション
コミュニティによって作られたネットワーク機器操作用のモジュールがこちらのコレクションに収納されています。
様々なネットワーク機器の操作するためのモジュールが、ざっと400程度あるのですが、どの機器の操作ができるかをドキュメントから調べるのは簡単ではありません。
提供されているCLIプラグインは以下になりますので、ここにあるプラットフォームは、このコレクションのモジュールで操作できる可能性がある、と見ることはできそうです。
Cisco WLCプラットフォーム
APCONネットワーク機器
Arubaプラットフォーム
HUAWEI CloudEngine
Lenovo CNOSプラットフォーム
EdgeOSプラットフォーム
EdgeSwitchプラットフォーム
ENOSプラットフォーム
ECCLIプラットフォーム
EXOSプラットフォーム
ICXプラットフォーム
Extreme Ironwareプラットフォーム
Extreme NOSプラットフォーム
Extreme SLX-OSプラットフォーム
Extreme VOSSプラットフォーム
Westermoプラットフォーム
まとめ
こうして並べてみると、Ansibleで操作できるネットワーク機器は、思ったよりも多くありますね。
主だった機器のほぼすべてにコレクションやコミュニティモジュールがあると考えてよさそうです。おそらくこの記事にすべては書ききれていないと思いますので、「ここに載っていないからAnsibleでは操作できない」と判断せず、Ansible Galaxy等で検索してコレクションやモジュールを探してみていただければと思います。
また、機器によってモジュールの構成が大きく異なることもわかりました。これは、元々その機器を操作するCLIやREST APIをベースに作られているので、致し方ないところでしょう。
また、本ブログを書く中で、ネットワーク機器の自動化と一口に言っても、広くてちょっと難しい世界が広がっているな、という印象を持ちました。
と言っても、やはりAnsibleのコレクションやモジュールは統一したドキュメントが用意されており、サンプルも各モジュールに1つ以上あるのはありがたいですね。それらのドキュメントを参考にしならがらであれば、ある程度の自動化はやっていけそうだなという感覚が持てたので、それが今回の一番の成果と言えそうです。
★公式ブロガー水谷の執筆記事一覧
IaC支援サービスのご紹介
SHIFTではTerraformやCDKを使ったクラウドインフラ構築の自動化や、Ansibleを使ったサーバOSの設定自動化や構成管理のご支援も行っております。ご依頼・ご相談は下記リンクからお願いします。
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/
PHOTO:UnsplashのShubham Dhage