[Amazon FSx for NetApp ONTAP] ONTAP REST APIを使わずにSSHとONTAP CLIを組み合わせてループ処理を実装してみた

コマンドの処理結果を元に条件分岐する必要がない場面では使えるかも
2023.04.25

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)でした!