Python Discussions
Python Discussions
Hello, I've seen several examples around accessing results from get-iter but I'm struggling to access a single result and the examples in the 9.4 API seem to rely on deprecated api calls.
<results status="passed"> <attributes> <snapmirror-info> <destination-location>vsm01:vsm01_my_volume</destination-location> <destination-volume>vsm01_my_volume</destination-volume> <destination-vserver>vsm01</destination-vserver> <lag-time>1143</lag-time> <source-location>vsm01:my_volume</source-location> <source-volume>my_volume</source-volume> <source-vserver>vsm01</source-vserver> </snapmirror-info> </attributes> </results>
My code snippet is as follows, my functions returns the ZExplore generated 'xo' object as 'XMLObject', how can I access the lat-time key/value please, thanks.
def getLagTime(strCluster, strUser, strPassword, strDestVserver, strDestVolume):
s = NaServer(strCluster, 1 , ONTAPI_VERSION)
s.set_server_type("FILER")
s.set_transport_type("HTTPS")
s.set_port(443)
s.set_style("LOGIN")
s.set_admin_user(strUser, strPassword)
api = NaElement("snapmirror-get")
xi = NaElement("desired-attributes")
api.child_add(xi)
xi1 = NaElement("snapmirror-info")
xi.child_add(xi1)
xi1.child_add_string("lag-time","<lag-time>")
api.child_add_string("destination-volume",strDestVolume)
api.child_add_string("destination-vserver",strDestVserver)
xo = s.invoke_elem(api)
if (xo.results_status() != "passed") :
print ("Error:\n")
print (xo.sprintf())
# If the check fails, we exit with 'UNKNOWN' according to the nagios spec.
sys.exit (UNKNOWN)
#print ("Received:\n")
#print (xo.sprintf())
return xo
# Call the function
XMLObject = getLagTime(strCluster, strUser, strPassword, strDestVserver, strDestVolume)
print ("Received SnapMirror Lag Time Data:")
print (XMLObject.sprintf())
Solved! See The Solution
Ah, I finally managed to answer my own question - posting here in case anyone else has the same query
# Call the function
XMLObject = getLagTime(strCluster, strUser, strPassword, strDestVserver, strDestVolume)
# Debug info:
print ("Received SnapMirror Lag Time Data:")
print (XMLObject.sprintf())
print ("\n")
# Walk the tree and pull out the lag-time value.
mynewlagtime = XMLObject.child_get("attributes").child_get("snapmirror-info").child_get_int("lag-time")
print (mynewlagtime)
Ah, I finally managed to answer my own question - posting here in case anyone else has the same query
# Call the function
XMLObject = getLagTime(strCluster, strUser, strPassword, strDestVserver, strDestVolume)
# Debug info:
print ("Received SnapMirror Lag Time Data:")
print (XMLObject.sprintf())
print ("\n")
# Walk the tree and pull out the lag-time value.
mynewlagtime = XMLObject.child_get("attributes").child_get("snapmirror-info").child_get_int("lag-time")
print (mynewlagtime)
You can also use xmltodict also to make it simple for these kind of tasks.
Here is volume API example.
import xmltodict
.
.
.
xo = s.invoke_elem(api)
obj = xmltodict.parse(xo.sprintf())
jd = json.dumps(obj)
jl = json.loads(jd)
if xo.results_status() == "failed":
reason = xo.results_reason()
print ("Failure: %s" %reason)
else:
for h in jl["results"]["attributes-list"]["volume-attributes"]:
print (h["volume-id-attributes"]["owning-vserver-name"], h["volume-id-attributes"]["name"], h["volume-space-attributes"]["percentage-size-used"])