本トピックはあまり日本サイトでみられなかったので、作ってみました。
Ansible はOSや様々なソフトウェア(OSS、プロプラ)を自動でコンフィグレーションできます。また、ハイパバイザー、IaaSなど他のクラウドサービスへも拡張されているのも特徴的です。更に最近動きが大きいのは特定のハードウェアへの自動化です。
例えば、ネットワーク装置(CiscoやF5などの機器)は顕著に増えています。それ以外にもリモート管理のインタフェースを提供するIPMIであったり、ストレージ装置にも広がってきています。
本投稿は、これらがどんな形で提供されており、動くのかなどを解説しています。
Ansible Moduleはどんどん増えていますので、投稿時点での見解を述べています。そのためタイミングによっては異なる部分もあるかもしれませんが、ご了承。
おさらい
Ansibleを使って自動化を行うときには、基本的にはPython(WindowsではPowerShell)で作られたモジュールを利用します。よって、ターゲット側には原則的にはこれらが搭載されている必要があります。
ハードウェアを設定するには
ハードウェアに搭載されている専用OSをターゲットとする際は前述のPython(やPowerShell)が含まれていないのでOSやその上のソフトウェアを操作する場合の動きとは変わってきます。ではどのように対応しているのでしょうか。
ネットワークやストレージ装置のほとんどが直接コンソールにつなげてオペレーションする以外に、外部からリモートでCUIなりGUIなりで管理するインタフェースを備えています。そして昨今は、それはきちんとAPIとして整備されています。つまり何らかのアプリケーションからリモートで操作可能な状態なわけです。
Ansibleから制御するお作法のパターン
プロダクトによってお作法は異なるようで、わかっている範囲であげてみました。なお、下記は組み合わさっている事もあります。
- そのハードウェアを操作するために用意されているPython Module(SDKと称されているものもあり)を使ってAnsible Moduleを実行
- HTTP/HTTPS経由のインタフェース経由で
task
の中でURLを指定してAnsible Moduleを実行(例:netapp_e_***) - Ansible Coreの中に専用のライブラリが入っており、Ansible Moduleは実行時にそれを使う
加えて、上記以外に共通している事としては、必ず装置へアクセスするための認証部分は存在しています。
Ansible モジュールがないものを自動化するには
当然、Ansible Moduleが用意されていないハードウェアはたくさんあります。そんな時はどうするか、整理する意味でも記載してみます。
(注意)すべてを自身で試みたわけではなく、私見がまざっています。
SSHが使えるなら raw Moduleを試してみる(初級)
raw Module はSSH経由でそのままコマンドを実行してしまうモジュールです。相手方にPythonが入っている必要はないので、SSH Clientからリモートでターゲットのハードウェア上の設定を行えるようなケースではこちらが可能かもしれません。ただし、これのやり方で冪等性を意識した感じにできないのであれば、これまでのシェルでゴリゴリ作る自動化とあまり差がないかもしれません。一方で過去の遺産(職人芸)を手っ取り早く使うという考え方もできるかもしれませんが。
RESTで投げるようなAnsible Moduleを作ってみる(中級)
REST(フルな)APIが提供されているハードウェア(の専用OS)であれば、それを意識したAnsible Moduleを作ってみるのも1つかと。よくデキたAPIであればリターン値に合わせて冪等性も担保しやすいはず。
専用OSのAPIを利用したAnsible Moduleを作成てみる(上級)
既にそのハードウェアの専用OSのAPIが既存でわかっていれば、それを用いてAnsible Moduleを作成してみるのが一番いい。ただし、この場合はハードウェアに依存したライブラリや、SDKの入手が個人では困難であることが多いという点かとおもいます。それらがオープン化されているような場合は、個人でも作れるものもあるかもしれませんが、専用OSに依存したものであればやはりベンダー側の協力を得て作成するのが吉であると考えています。
そもそも専用のSDKを使うだけでも有償な場合もあったりもします。
!補足
この手のハードウェア設定は、「設定ファイルを作って流して終わり」系の運用もよくされていると思います。他のソフトウェアでもテンプレートを用意してそれをすげ替えるとか、インポートするとかに対応した形はあるので、同様にハード、API仕様に合わせてそのあたりもどのように対応できているかまたはいないのかを確認すると良いでしょう。
実際にAnsible Module開発する際(雰囲気)
lib
配下(例えばプレイブック実行カレントの)に利用する当該ハードウェアのSDKやライブラリ、または自身でAPIに合うように開発したPythonコードを入れ、それを利用して認証や各種パラメータの設定をAnsible Moduleに与えるものとして表現する。
- name: CubieBoard Configuration
cubieboard_net_config:
admin_user: admin
admin_passwd: password00
mgt_url: "http://10.0.0.1/management/"
state: present
ip_addr: 192.168.0.12
subnet: 255.255.255.0
gw: 192.168.0.254
dns: 123.123.123.123
hostname: "cubie.example.com"
総括
結論として、ないものを実装するところからやる場合はかなりしんどいかもしれません。業務利用やエンタープライズへの適用とする場合は特に余計な工数も加算でしまいかねません(それでも、スペシャルなエンジニアがいて、さくっと開発しちゃえるのであればいいですけど)。ツールありきでハードウェアを選択する事はあまりないかもしれませんので、自分で開発するスキームが組めないのであれば、いまのところはラインナップがそろうのを待つしかないでしょう。
ただし、ハードウェアベンダーとしては顧客を取り込む(買ってもらう)要素として、これだけ目立ったOSSの自動化・構成管理ツールを無視することはできないとおもいますので国内外ベンダーではAnsible Module開発をすることで、自社や他の周辺機器、ソフトウェア、管理ツール等々とソリューション化しプロモーションをかけるなどもありなのではと個人的には思っています。