[Amazon FSx for NetApp ONTAP] ONTAP REST APIを使わずにSSHとONTAP CLIを組み合わせてループ処理を実装してみた
ONTAP CLIで外部ファイルを読み込ませたり、ループ処理をしたりしたいな
こんにちは、のんピ(@non____97)です。
皆さんはAmazon FSx for NetApp ONTAP(以降FSx for ONTAP)を使う中で、ONTAP CLIで外部ファイルを読み込ませたり、ループ処理をしたりしたいなと思ったことはありますか? 私はあります。
ONTAP CLIを叩く場合はFSx for ONTAPファイルシステムもしくはSVMにSSHで接続してから行う必要があります。
そのため、ローカル端末の設定ファイルを読み込んでONTAP CLIを叩くということはできません。また、ONTAP CLIではforなどで処理をループすることもできません。
そんな時活躍するのはONTAP REST APIです。
ONTAP REST APIであれば、SSHせずともONTAPの操作が可能です。
これにより、ローカル端末から設定ファイルを読み込んで処理をしたり、ループ、処理結果を元に条件分岐させたりといったことが可能です。
ただし、「慣れ親しんだONTAP CLIを使いたいんだ」という場面もあると思います。
そのような時はsshコマンドの引数に実行したいONTAP CLIのコマンドを指定することで対応できます。
やってみる
早速試してみましょう。
まず、sshコマンドの引数に"version"
を渡して、ONTAPのバージョンを出力できるか試します。
$ ssh fsxadmin@management.fs-05f72eb8f8d03c709.fsx.us-east-1.amazonaws.com "version" Password: Last login time: 4/25/2023 18:05:28 NetApp Release 9.11.1P6: Fri Jan 27 03:16:05 UTC 2023
ONTAPのバージョンが取得できましたね。
2つ以上のコマンドを叩きたい場合は、コマンドとコマンドを;
で分割します。
ONTAPのバージョンとクラスターの名前を取得する場合は、以下のように行います。
$ ssh fsxadmin@management.fs-05f72eb8f8d03c709.fsx.us-east-1.amazonaws.com "version; cluster identity show" Password: Last login time: 4/25/2023 18:12:23 NetApp Release 9.11.1P6: Fri Jan 27 03:16:05 UTC 2023 Cluster UUID: cc9673f1-8cca-11ed-946a-5191ab1a5297 Cluster Name: FsxId05f72eb8f8d03c709 Cluster Serial Number: 1-80-000011 Cluster Location: Cluster Contact:
シェルスクリプトを組み合わせれば複雑な処理も可能です。
例えばランダムなサイズを持ったボリュームを10個作成し、作成後ボリューム一覧を表示するということも可能です。
まず、上述の処理を行うコマンドを標準出力するシェルスクリプトファイルを作成します。
# シェルスクリプトのファイル作成 $ vi create-volume.sh # 作成したファイルの確認 $ cat create-volume.sh #!/bin/bash for i in {1..10}; do echo "volume create -vserver SVM -volume vol_ssh_${i} -aggregate aggr1 -size ${RANDOM}MB -state online -policy default -tiering-policy none" done echo "volume show -vserver SVM -volume vol_ssh*"
作成後、シェルスクリプトを実行して、「ランダムなサイズを持ったボリュームを10個作成し、作成後ボリューム一覧を表示する」コマンドが出力されることを確認します。
# 実行権限の割り当て $ chmod 755 create-volume.sh # シェルスクリプトの実行 $ ./create-volume.sh volume create -vserver SVM -volume vol_ssh_1 -aggregate aggr1 -size 6779MB -state online -policy default -tiering-policy none volume create -vserver SVM -volume vol_ssh_2 -aggregate aggr1 -size 15039MB -state online -policy default -tiering-policy none volume create -vserver SVM -volume vol_ssh_3 -aggregate aggr1 -size 30824MB -state online -policy default -tiering-policy none volume create -vserver SVM -volume vol_ssh_4 -aggregate aggr1 -size 3951MB -state online -policy default -tiering-policy none volume create -vserver SVM -volume vol_ssh_5 -aggregate aggr1 -size 3MB -state online -policy default -tiering-policy none volume create -vserver SVM -volume vol_ssh_6 -aggregate aggr1 -size 5040MB -state online -policy default -tiering-policy none volume create -vserver SVM -volume vol_ssh_7 -aggregate aggr1 -size 12406MB -state online -policy default -tiering-policy none volume create -vserver SVM -volume vol_ssh_8 -aggregate aggr1 -size 21849MB -state online -policy default -tiering-policy none volume create -vserver SVM -volume vol_ssh_9 -aggregate aggr1 -size 3887MB -state online -policy default -tiering-policy none volume create -vserver SVM -volume vol_ssh_10 -aggregate aggr1 -size 18590MB -state online -policy default -tiering-policy none volume show -vserver SVM -volume vol_ssh*
実行できましたね。
あとは、sshコマンドの引数にシェルスクリプトの実行結果を渡してあげます。その際、改行を;
に置換するようにしてあげます。
実行結果は以下の通りです。
$ ssh fsxadmin@management.fs-05f72eb8f8d03c709.fsx.us-east-1.amazonaws.com \ "$(./create-volume.sh | tr '\\\n' ';')" Password: Last login time: 4/25/2023 18:52:18 [Job 1775] Job succeeded: Successful [Job 1777] Job succeeded: Successful [Job 1779] Job succeeded: Successful [Job 1780] Job succeeded: Successful [Job 1782] Job succeeded: Successful [Job 1784] Job succeeded: Successful [Job 1786] Job succeeded: Successful [Job 1787] Job succeeded: Successful [Job 1789] Job succeeded: Successful [Job 1790] Job succeeded: Successful Vserver Volume Aggregate State Type Size Available Used% --------- ------------ ------------ ---------- ---- ---------- ---------- ----- SVM vol_ssh_1 aggr1 online RW 24.59GB 23.36GB 0% SVM vol_ssh_10 aggr1 online RW 28.21GB 26.80GB 0% SVM vol_ssh_2 aggr1 online RW 15.53GB 14.75GB 0% SVM vol_ssh_3 aggr1 online RW 31.86GB 30.26GB 0% SVM vol_ssh_4 aggr1 online RW 3.25GB 3.09GB 0% SVM vol_ssh_5 aggr1 online RW 31.13GB 29.57GB 0% SVM vol_ssh_6 aggr1 online RW 25.59GB 24.31GB 0% SVM vol_ssh_7 aggr1 online RW 27.57GB 26.19GB 0% SVM vol_ssh_8 aggr1 online RW 30.07GB 28.56GB 0% SVM vol_ssh_9 aggr1 online RW 29.76GB 28.27GB 0% 10 entries were displayed.
ランダムなサイズを持ったボリュームを10個作成し、作成後ボリューム一覧を表示することができました。
コマンドの処理結果を元に条件分岐する必要がない場面では使えるかも
ONTAP REST APIを使わずにSSHとONTAP CLIを組み合わせてループ処理を実装してみました。
ONTAP CLIでは条件分岐ができないため、コマンドの処理結果を元に条件分岐することはできませんが、場合によってはこれで十分な場面もあると思います。
シェルスクリプトからcsvやjsonなどの設定ファイルを読み込ませて、自動化させるなんてこともできそうですね。その際はsshpass
を使ってパスワードをコマンドライン引数に渡せるようにしてあげると良いと思います。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!