In the NetApp OCI API Samples for Python (available from the OCI Operational Server WebUI > REST API documentation > API samples) there is a set_annotation.py which can be used to set the annotation on a specific volume. With a slight modification of the Python, we get a set_annotation_storage.py which can be used to set the annotation on a specific storage. An example of using it>
python set_annotation_storage.py --url https://YOUR_OCI_SERVER --user YOUR_REST_USER --password YOUR_PASSWORD --storage STORAGE_NAME -annotation SOME_ANNOTATION --value ANNOTATION_VALUE
Image: Insight REST API documentation > API samples
The Script
Save as say ‘set_annotation_storage.py’.
#!/usr/bin/env python
"""
Set annotation for a specific storage
"""
from __future__ import print_function
import json
from oci_rest import OciRest, configure_command_line_parser
def find_storage(oci, storage_name):
for storage in
oci.get('assets/storages'):
if storage['name']
== storage_name:
return
storage['self']
return None
def annotate_storage(oci, storage_url,
annotation_name, annotation_value):
return
oci.put('{}/annotations'.format(storage_url), data=json.dumps(
[
{
"rawValue": annotation_value,
"definition": {"name": annotation_name}
},
]
))
if __name__ == "__main__":
# Get the default command-line
arguments (url, user, password)
parser =
configure_command_line_parser(usage='Set storage annotation')
# Add additional arguments
to configure the search criteria
parser.add_argument('--storage', required=True, help="Storage name")
parser.add_argument('--annotation', required=True, help="Annotation name
(do NOT use label!)")
parser.add_argument('--value',
required=True, help="Annotation value to set")
options =
parser.parse_args()
url, user, password =
options.url, options.user, options.password
with OciRest(url, user,
password) as oci:
storage_url =
find_storage(oci, storage_name=options.storage)
if storage_url
is not None:
new_annotation = annotate_storage(oci,
storage_url,
annotation_name=options.annotation,
annotation_value=options.value)
print('Created
new annotation:\n', json.dumps(new_annotation))
else:
print("Could not find storage {}".format(options.storage))
APPENDIX: List of the 14 out-of-the-box ‘NetApp OCI API Samples for Python’
- basic.py - print list of all storagePools with storage name and total allocatedCapacity
- annotation_type.py - manipulate annotation types
- business_entity.py - manipulate business entities
- collection_report.py - Print status report for each datasource
- create_user.py - Create OCI user
- filter_storagepool_by_thresholds.py - print list of storage pools filtered by storage tier, and thresholds
- filter_vms_by_storage.py - print virtual machines with dataStores on specific storage
- license.py - Programmatically manipulate OCI license
- import_patch.py - Import datasource patch
- set_annotation.py - Set annotation for a specific volume
- set_annotation_based_on_path.py - Set datacenter annotation for hosts based on their connected storage annotation
- set_annotation_bulk.py - Set annotation for a group of volumes identified with prefix
- set_ldap_config.py - set values for LDAP configuration
- integrations.py - create, delete agents and integrations. Ingest integration data.
Comments
Post a Comment