-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathobject.py
More file actions
127 lines (109 loc) · 4.36 KB
/
object.py
File metadata and controls
127 lines (109 loc) · 4.36 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
#! /usr/local/bin/python3.11
"""
ONTAP 9.13.1 REST API Python Client Library Scripts
This script performs the following:
- Create an SVM (or VServer)
- Create an S3 user
- Create an S3 bucket
Minimum size of the bucket to be created: 102005473280B
usage: python3.11 object.py [-h] -c CLUSTER -vs VSERVER_NAME -a AGGR_NAME -s S3_NAME -b BUCKET_NAME
-un S3_USER_NAME -n SIZE [-u API_USER] [-p API_PASS]
These arguments required: -c/--cluster, -vs/--vserver_name, -a/--aggr_name, -s/--s3_name, -b/--bucket_name
-un/--s3_user_name, -n/--size, -u/--admin, -p/--password
Usage: python3.11 object.py -c cluster1 -vs VServer1 -a aggr1 -s S3_Server -b s3bucket -un S3_User -n 102005473280 -u admin -p Netapp1!
"""
import argparse
from getpass import getpass
import logging
from netapp_ontap import config, HostConnection, NetAppRestError
from netapp_ontap.resources import Aggregate, Svm, S3BucketSvm, S3User
def create_svm(vserver_name: str, aggr_name: str, S3_name: str) -> None:
"""Create an SVM on the specified aggregate and configures an S3 server.
access_key and secret_key - are returned from the Post call."""
svm = Svm.from_dict({
'name': vserver_name,
'aggregates': [{'name': aggr_name}],
's3.name': S3_name,
'enabled': "true",
})
try:
svm.post()
print("SVM %s created successfully" % svm.name)
except NetAppRestError as err:
print("Error: SVM was not created: %s" % err)
return
def make_s3_user(vserver_name: str, user_name: str) -> None:
"""Creates a new S3 user configuration"""
vserver = Svm.find(name=vserver_name)
resource = S3User(vserver.uuid)
resource.name = user_name
try:
resource.post()
print("S3 User %s created successfully" % resource.name)
except NetAppRestError as err:
print("Error: S3 User was not created" % err)
return
def make_bucket(vserver_name: str, aggr_name: str, bucket_name: str, bucket_size: int) -> None:
"""Make an S3 Bucket"""
vserver = Svm.find(name=vserver_name)
aggregate = Aggregate.find(name=aggr_name)
resource = S3BucketSvm(vserver.uuid)
resource.name = bucket_name
resource.comment = "S3 Bucket"
resource.aggregates = [
{'name': aggr_name, 'uuid': aggregate.uuid}
]
resource.constituents_per_aggregate = 4
resource.size = bucket_size
try:
resource.post()
print("S3 Bucket %s created successfully" % resource.name)
except NetAppRestError as err:
print("Error: S3 Bucket was not created: %s" % err)
return
def parse_args() -> argparse.Namespace:
"""Parse the command line arguments from the user"""
parser = argparse.ArgumentParser(
description="This script will create an SVM, an S3 User and an S3 bucket."
)
parser.add_argument(
"-c", "--cluster", required=True, help="API server IP:port details"
)
parser.add_argument(
"-vs", "--vserver_name", required=True, help="SVM name"
)
parser.add_argument(
"-a", "--aggr_name", required=True, help="Aggregate name"
)
parser.add_argument(
"-s", "--s3_name", required=True, help="S3 Server name"
)
parser.add_argument(
"-b", "--bucket_name", required=True, help="Bucket name"
)
parser.add_argument(
"-un", "--user_name", required=True, help="S3 User name"
)
parser.add_argument(
"-n", "--size", required=True, help="Size of the bucket in bytes"
)
parser.add_argument("-u", "--api_user", default="admin", help="API Username")
parser.add_argument("-p", "--api_pass", help="API Password")
parsed_args = parser.parse_args()
# collect the password without echo if not already provided
if not parsed_args.api_pass:
parsed_args.api_pass = getpass()
return parsed_args
if __name__ == "__main__":
logging.basicConfig(
level=logging.INFO,
format="[%(asctime)s] [%(levelname)5s] [%(module)s:%(lineno)s] %(message)s",
)
args = parse_args()
config.CONNECTION = HostConnection(
args.cluster, username=args.api_user, password=args.api_pass, verify=False,
)
# Create a VServer, an S3 user and a Bucket
create_svm(args.vserver_name, args.aggr_name, args.s3_name)
make_s3_user(args.vserver_name, args.user_name)
make_bucket(args.vserver_name, args.aggr_name, args.bucket_name, args.size)