0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SnapMirrorの転送状態をREST APIで取得したい

Posted at

はじめに

  • SnapMirrorの転送状態をREST APIで取得したかったので、取得してみました。
  • これで、SnapMirrorの同期完了を確認してから後続の処理を行うようなバッチを組むことができるようになります。

警告
本記事で記載するスクリプトについては、動作の責任は負いませんのでご了承ください。

取得スクリプト

  • 作ったスクリプトはこちらです。
snapmirror_state.sh
#! /bin/bash
# 1つめの引数に該当クラスタのIPアドレスを指定
IPADDR=$1

# 2つめの引数にユーザー名を指定
USER=$2

# 3つめの引数にパスワードを指定
PSWD=$3

# 4つめの引数に宛先SVM名を指定
SVM=$4

# 5つめの引数に宛先vol名を指定
VOL=$5

# BASIC認証用のクレデンシャルを作成(Base64でエンコード)
TOKEN=`echo -n "$USER:$PSWD" | openssl enc -e -base64`

# 該当SnapMirrorのUUIDを取得
UUID=`curl -X GET "https://$IPADDR/api/snapmirror/relationships?list_destinations_only=false&return_records=true&return_timeout=15" -H  "accept: application/json" -H  "authorization: Basic $TOKEN" -k -s | jq -r '.records[] | select( .destination.path == "'$SVM':'$VOL'") | .uuid'`

# 該当SnapMirrorの転送状態を取得
STATE=`curl -X GET "https://$IPADDR/api/snapmirror/relationships/$UUID" -H  "accept: application/json" -H  "authorization: Basic $TOKEN" -k -s | jq -r '.transfer.state'`

# 該当SnapMirrorの転送状態を出力
echo $STATE

スクリプトの解説

前提条件

  • 動作を試したのはRocky Linux 9.4です。
# cat /etc/redhat-release
Rocky Linux release 9.4 (Blue Onyx)
  • スクリプト内でcurljqを使うのでインストールしておく必要があります。
  • スクリプトに適切な実行権限を与える必要があります。

使用方法

  • 以下の通り引数を指定してスクリプトを実行します。
引数 内容
引数1 SnapMirrorの宛先クラスタのクラスタ管理IPアドレス(名前解決できるならFQDN名でも可)
引数2 SnapMirrorの宛先クラスタの管理ユーザー名
引数3 SnapMirrorの宛先クラスタの管理ユーザーのパスワード
引数4 SnapMirrorの宛先ボリュームが所属するSVM名
引数5 SnapMirrorの宛先ボリューム名
  • 以下の例のように5つの引数を指定して実行すると、SnapMirrorの転送状態が返ってきます。以下は転送中の例です。
# ./snapmirror_state.sh 192.168.0.101 admin P@ssw0rd svm1 vol1_dest
transferring
  • 以下のようにsuccessが返ってくると同期が完了していることがわかります。
# ./snapmirror_state.sh 192.168.0.101 admin P@ssw0rd svm1 vol1_dest
success

処理内容の詳細

  • まずは引数5つをそれぞれ変数に代入します。
#! /bin/bash
# 1つめの引数に該当クラスタのIPアドレスを指定
IPADDR=$1

# 2つめの引数にユーザー名を指定
USER=$2

# 3つめの引数にパスワードを指定
PSWD=$3

# 4つめの引数に宛先SVM名を指定
SVM=$4

# 5つめの引数に宛先vol名を指定
VOL=$5
  • 次にREST APIでONTAPクラスタにHTTTPのBASIC認証でアクセスするために、ユーザー名とパスワードをBase64でエンコードします。
# BASIC認証用のクレデンシャルを作成(Base64でエンコード)
TOKEN=`echo -n "$USER:$PSWD" | openssl enc -e -base64`
  • 次に、REST API GET "/api/snapmirror/relationships/"でSnapMirrorの宛先クラスタのSnapMirror関係のリストを取得できるので、リストをjqコマンドに渡し、スクリプトの引数に指定した宛先のSVM、ボリューム名のSnapMirror関係のuuidを抽出します。
# 該当SnapMirrorのUUIDを取得
UUID=`curl -X GET "https://$IPADDR/api/snapmirror/relationships?list_destinations_only=false&return_records=true&return_timeout=15" -H  "accept: application/json" -H  "authorization: Basic $TOKEN" -k -s | jq -r '.records[] | select( .destination.path == "'$SVM':'$VOL'") | .uuid'`
  • 取得したUUIDを使って、REST API GET /snapmirror/relationships/{uuid}で該当のSnapMirror関係の詳細を取得できるので、取得結果をjqコマンドに渡し、転送状態.transfer.stateを抽出します。
# 該当SnapMirrorの転送状態を取得
STATE=`curl -X GET "https://$IPADDR/api/snapmirror/relationships/$UUID" -H  "accept: application/json" -H  "authorization: Basic $TOKEN" -k -s | jq -r '.transfer.state'`
  • 最後に、SnapMirror関係の転送状態を出力して完了です。
# 該当SnapMirrorの転送状態を出力
echo $STATE

最後に

  • SnapMirrorの転送状態をREST APIで取得したかったので、取得してみました。

参考資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?