-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathsnapshot_create
More file actions
executable file
·169 lines (145 loc) · 5.99 KB
/
snapshot_create
File metadata and controls
executable file
·169 lines (145 loc) · 5.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#!/bin/bash
#
################################################################################
# This script is used to create a snapshot of an volume in an FSx for ONTAP
# file system.
#
# It is dependent on the 'wf_utils' file that is included in this repo. That
# file contains the 'get_token' function that is used to obtain a valid
# access token that is needed to run the Workload Factory APIs. The file needs
# to either be in the command search path or in the current directory.
################################################################################
################################################################################
# This function just prints the usage of this script and exits the program.
################################################################################
usage() {
cat >&2 <<EOF
This script will create a snapshot of an volume in an FSx for ONTAP file system.
Usage: $(basename $0) -t refresh_token -a blueXP_account_ID -c credentials_ID -r aws_region -f filesystem_ID -v volume_ID -s snapshot_name
Where: refresh_token - Is a refresh token used to obtain an access token needed
to run the Workload Factory APIs. You can obtain a refresh
token by going to https://services.cloud.netapp.com/refresh-token
blueXP_account_ID - is the BlueXP account ID. Run 'list_bluexp_accts' to get a
list of accounts you have access to
credentials_ID - is the Workload Factory credentials ID for the AWS account. Run
'list_credentials' to get a list of credentials you have access to
aws_region - is the AWS region where the FSx file systems are located
filesystem_id - is the AWS file system ID of the FSx file system where the volume resides
volume_ID - is the AWS volume ID of the volume to create a snapshot for
snapshot_name - is the name of the snapshot to create
Instead of passing parameters on the command line, you can set the
following environment variables:
export REFRESH_TOKEN=<refresh_token>
export BLUEXP_ACCOUNT_ID=<blueXP_account_ID>
export CREDENTIALS_ID=<credentials_ID>
export AWS_REGION=<aws_region>
EOF
exit 1
}
################################################################################
# Main logic starts here.
################################################################################
tmpout=$(mktemp /tmp/create_snapshot-out.XXXXXX)
tmperr=$(mktemp /tmp/create_snapshot-err.XXXXXX)
trap 'rm -f $tmpout $tmperr' exit
while getopts "ht:a:c:r:f:v:s:" opt; do
case $opt in
t) REFRESH_TOKEN="$OPTARG" ;;
a) BLUEXP_ACCOUNT_ID="$OPTARG" ;;
c) CREDENTIALS_ID="$OPTARG" ;;
r) AWS_REGION="$OPTARG" ;;
f) FILESYSTEM_ID="$OPTARG" ;;
v) VOLUME_ID="$OPTARG" ;;
s) SNAPSHOT_NAME="$OPTARG" ;;
*) usage ;;
esac
done
#
# Check if the required parameters are set.
missing_args=false
if [ -z "$REFRESH_TOKEN" ]; then
cat >&2 <<EOF
Error: A BlueXP refresh tokon is required to run this script.
Can you be obtain from this web page:
https://services.cloud.netapp.com/refresh-token
EOF
missing_args=true
fi
if [ -z "$BLUEXP_ACCOUNT_ID" ]; then
cat >&2 <<EOF
Error: A BlueXP account is required to run this script.
You can get the list of accounts you have access to by running the "list_bluexp_accts" script
found in this GitHub repository: https://github.com/NetApp/FSx-ONTAP-samples-scripts/tree/main/Management-Utilities/Workload-Factory-API-Samples
EOF
missing_args=true
fi
if [ -z "$CREDENTIALS_ID" ]; then
cat >&2 <<EOF
Error: A Workload Factory credentials ID is required to run this script.
found in this GitHub repository: https://github.com/NetApp/FSx-ONTAP-samples-scripts/tree/main/Management-Utilities/Workload-Factory-API-Samples
EOF
missing_args=true
fi
if [ -z "$AWS_REGION" ]; then
cat >&2 <<EOF
Error: An AWS region where the volume is located is required to run this script.
EOF
missing_args=true
fi
if [ -z "$FILESYSTEM_ID" ]; then
cat >&2 <<EOF
Error: An FSx file system ID is required to run this script.
You can get the list of file systems you have access to by running the "list_filesystems" script
found in this GitHub repository: https://github.com/NetApp/FSx-ONTAP-samples-scripts/tree/main/Management-Utilities/Workload-Factory-API-Samples
EOF
missing_args=true
fi
if [ -z "$VOLUME_ID" ]; then
cat >&2 <<EOF
Error: An AWS Volume ID is required to run this script.
You can get the list of file systems you have access to by running the "list_volumes" script
found in this GitHub repository: https://github.com/NetApp/FSx-ONTAP-samples-scripts/tree/main/Management-Utilities/Workload-Factory-API-Samples
EOF
missing_args=true
fi
if [ -z "$SNAPSHOT_NAME" ]; then
cat >&2 <<EOF
Error: A snapshot name is required to run this script.
EOF
missing_args=true
fi
if [ "$missing_args" != "false" ]; then
usage
fi
#
# Find the wf_utils script in the command path or current directory.
wf_utils=$(command -v wf_utils)
if [ -z "$wf_utils" ]; then
if [ -x "./wf_utils" ]; then
wf_utils="./wf_utils"
else
cat >&2 <<EOF
Error: The 'wf_utils' script was not found in the current directory or in the command search path.
It is required to run this script. You can download it from:
https://github.com/NetApp/FSx-ONTAP-samples-scripts/tree/main/Management-Utilities/Workload-Factory-API-Samples
EOF
exit 1
fi
fi
#
# Source the wf_utils script to get the get_token and run_curl function.
. "$wf_utils"
#
# Check if the required commands are available.
for cmd in jq curl; do
if ! command -v $cmd &> /dev/null; then
echo "Error: The required command '$cmd' was not found. Please install it." >&2
exit 1
fi
done
token=$(get_token)
if [ -z "$token" ]; then
echo "Error: Failed to obtain an access token. Exiting." >&2
exit 1
fi
run_curl POST "$token" "https://api.workloads.netapp.com/accounts/${BLUEXP_ACCOUNT_ID}/fsx/v2/credentials/${CREDENTIALS_ID}/regions/${AWS_REGION}/file-systems/${FILESYSTEM_ID}/volumes/${VOLUME_ID}/snapshots" $tmpout $tmperr '{"name": "'"$SNAPSHOT_NAME"'"}'