NetAppの Storage OSである ONTAPは API(ZAPI)による操作が以前から可能でしたが、
最近になって(ONTAP 9.6以後) REST APIアクセスが追加されました。
APIを使った Storage自動化の一歩目として
まずは簡単にAPIアクセスが出来るかを確認をする方法についての記事になります。
2022/10/06 追記: ZAPIからRESTへの移行について
ONTAP 9.7以後、新機能については全てREST APIのみのサポートになっていてZAPIではサポートされなくなっています。
このこともあり 今後はZAPIからREST APIへの移行を考える必要が出てきますが、下記のBlogにて移行を助けるためのスクリプトが紹介されていますのでご参考にしてください。
ZAPI編
ZAPIは昔からある ONTAPのAPIで Ansible Moduleや OpenStack Cinder/Manila Driver、
Trident等は これを利用して実装しています。
ONTAP9.7以後は REST APIが Primary APIになるので、今後新規に何かする場合、ZAPIはあまり利用する場面は無いかもしれません。
ZAPIの利用は9.7以後も可能ですが、ONTAPに新機能が追加された場合のAPIの拡張は行われないので注意が必要です。
叩き方の基本は
- APIの要求をXMLにまとめる
- httpsプロトコルで POSTする
- 結果をXMLで受け取る
これだけなんですが、API粒度が細かいのと iteratorを利用するiter系APIがあるので、慣れがちょっと必要です。
一番簡単なシステムの Versionを取得する形でAPIが利用可能であることを確認してみます。1
curl -k --user admin -d "<netapp><system-get-version/></netapp>" https://[ONTAP管理IP]/servlets/netapp.servlets.admin.XMLrequest_filer
実行するとシステムバージョンが得られます。
$ curl -k --user admin -d "<netapp><system-get-version/></netapp>" https://[ONTAP管理IP]/servlets/netapp.servlets.admin.XMLrequest_filer
Enter host password for user 'admin': ここでパスワードを入力
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE netapp SYSTEM 'file:/etc/netapp_gx.dtd'>
<netapp version='1.150' xmlns='http://www.netapp.com/filer/admin'>
<results status="passed"><build-timestamp>1544733693</build-timestamp><is-clustered>true</is-clustered><version>NetApp Release 9.5: Thu Dec 13 20:41:33 UTC 2018</version><version-tuple><system-version-tuple><generation>9</generation><major>5</major><minor>0</minor></system-version-tuple></version-tuple></results></netapp>
REST編
ONTAP 9.5から REST APIが一部実装されて9.6で殆どのAPIが実装されました。
一般的なCRUDの操作はHTTPの GET/POST/PUT/DELETE で出来るようになっています。
Cluster Objectを GETしてみます。
curl -k --user admin https://[ONTAP管理IP]/api/cluster
結果は以下の様に。
$ curl -k --user admin https://[ONTAP管理IP]/api/cluster
Enter host password for user 'admin': ここでパスワードを入力
{
"name": "SE-ST-AFF8080-02",
"uuid": "2b5a3832-00cd-11e8-a9b4-xxxxxxxxxxxx",
"version": {
"full": "NetApp Release 9.5: Thu Dec 13 20:41:33 UTC 2018",
"generation": 9,
"major": 5,
"minor": 0
},
"_links": {
"self": {
"href": "/api/cluster"
}
}
}
-
(2020/4/27) XMLを シングルクォートで括ってましたが、Windowsの場合内部の<>がリダイレクトとして認識されてしまうので ダブルクォートに変更しました。 ↩