- Subscribe to RSS Feed
- Mark as New
- Mark as Read
- Bookmark
- Subscribe
- Printer Friendly Page
- Report Inappropriate Content
on 11-08-2013 04:07 PM
This version of the UCS Manager Python SDK has been deprecated please use the UCS Manager Python SDK located here, Cisco UCS Python SDK - ucsmsdk
The following Python SDKs are available for download from Cisco:
Cisco UCS Manager Python SDK v0.8.3:
Downloads:
Documentation Links:
----------------------------------------------------------------------------------------------------
Cisco IMC Python SDK v0.7.2:
Downloads:
Cisco IMC Python SDK v0.7.1:
Downloads:
Documentation Links:
Note: Due to the changes in the naming convention of the APIs in the SDK release 0.7.1, scripts written using SDK release 0.6.x need to be modified to make it work with SDK release 0.7.1. Also this version is not compatible with IMC Plugin 0.9.1 for Nagios.
Cisco IMC Python SDK v0.6.2:
Downloads:
Documentation Links:
For any queries/feedback on the Python SDK, please add a discussion to the Cisco Developed Integrations sub-space on Cisco UCS Communities.
Internal (Cisco) developers/users can contact the team at ucs-python@cisco.com

- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
With Python version 2.7.9 and above, python embedded the certificate validation.
In case of any issues with ssl protocol or certificate validation issue, you can run the below method before importing UcsSdk as a workaround.
def sslWorkaround():
isVerifyCertificate = False
if not sys.version_info < (2, 6):
from functools import partial
import ssl
ssl.wrap_socket = partial(ssl.wrap_socket, ssl_version=ssl.PROTOCOL_TLSv1)
if not sys.version_info < (2, 7, 9) and not isVerifyCertificate:
ssl._create_default_https_context = ssl._create_unverified_context
- Rahul

- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
The workaround is working !
Thanks a lot Rahul,
Kind regards
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
I have below code:
from UcsSdk import *
from UcsSdk.WatchUcsGui import ConvertToPython
ucsm_ip = 'x.x.x.x'
user = 'admin'
password = 'xxxxxx'
if __name__ == "__main__":
try:
handle = UcsHandle()
handle.Login(ucsm_ip, user, password)
ConvertToPython()
handle.Logout()
except Exception, err:
print "Exception:",str(err)
import traceback,sys
print '-'*60
traceback.print_exc(file=sys.stdout)
print '-'*60
it return error :
Traceback (most recent call last):
File "test.py", line 10, in <module>
ConvertToPython()
File "/usr/lib/python2.6/site-packages/UcsSdk/WatchUcsGui.py", line 1223, in ConvertToPython
lastUpdatedFile = files[0]
IndexError: list index out of range
what's wrong here??

- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
am able to use the ConvertToPython for most APIs
But when i create a service profile template that results in List Index out of range and the below exception.
Traceback (most recent call last):
File "ucs_main.py", line 8, in <module>
ConvertToPython(dumpToFile=True, dumpFilePath=outputfilepath)
File "/usr/local/lib/python2.7/dist-packages/UcsSdk/WatchUcsGui.py", line 1234, in ConvertToPython
FindXmlRequestsInFile_test(fileStream, True)
File "/usr/local/lib/python2.7/dist-packages/UcsSdk/WatchUcsGui.py", line 1133, in FindXmlRequestsInFile_test
ExtractXML(fileStream, line)
File "/usr/local/lib/python2.7/dist-packages/UcsSdk/WatchUcsGui.py", line 1116, in ExtractXML
GenerateCmdlets(requestString)
File "/usr/local/lib/python2.7/dist-packages/UcsSdk/WatchUcsGui.py", line 1064, in GenerateCmdlets
cmdlet = GenerateConfigConfCmdlets(xmlString)
File "/usr/local/lib/python2.7/dist-packages/UcsSdk/WatchUcsGui.py", line 524, in GenerateConfigConfCmdlets
node = topNode.getElementsByTagName("inConfig")[0]
IndexError: list index out of range
Any thoughts?

- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
IS there a git location from which i can download the existing scripts using the SDK ?

- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
If you can give us some simple examples,that would be great.
like how to list all the severs, all the hbas, etc.
Can you tell me how to do that? Thanks.

- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Is there any plans to add os login handles to SDK ?

- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
How do I save the value of a given attribute of an object?
I have read a ComputeBlade object with
uBlade = u.GetManagedObject(None, ComputeBlade.ClassId(), {ComputeBlade.SERIAL:thisSerial})
I can print the contents of my uBlade Object with WriteObject(uBlade), and can see, that its attribute "AssignedToDn" has value "org-root/org-VmWare/ls-VmWareSP01".
I want to save the value of this attribute to use it to get the Service Profile with this Dn.
Normally in Python, this should be done with
myAssignedToDn = uBlade.AssignedToDn or
myAssignedToDn = getattr(uBlade, 'AssignedToDn')
However this yields the error "AttributeError: 'list' object has no attribute 'AssignedToDn'"
(I tried all combinations of Upper and Lower Case for attribute "Ucs" with same result)
So how do I get the value of attribute "AssignedToDn" for my uBlade Object?
BR
Jesper

- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Let me add, that I have imported everything from UCS SDK, and "assigned" type Compute Blade to the variable I use to store the UCS Blade MO:
from UcsSdk import *
uBlade = ComputeBlade()
I have been looking around in the User Guide for UCS Python code, where You extract an attribute from a MO Object, and cannot find any.

- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Hi Jesper,
Which version of python sdk are you using?
Thanks
Rahul

- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Got this answer from the Cisco BU through Cisco DK, which works!
> GetManagedObject() always returns a list of elements of the class listed in the request, even if there is only one element.
> This guarantees consistency in the return type, whether your request returns one or multiple elements.
>
> In your case, uBlade is thus a list of ComputeBlade, probably containing a single element, given that you seem to be filtering using a serial number.
>
> Try changing this line:
> uBlade = u.GetManagedObject(None, ComputeBlade.ClassId(),
> {ComputeBlade.SERIAL:thisSerial})
> To this :
> uBlade = u.GetManagedObject(None, ComputeBlade.ClassId(),
> {ComputeBlade.SERIAL:thisSerial})[0]
>
===============
Rahul (CC’ing Lars Granberg at Cisco DK, whom I have also asked this question)!
I am using 0.8.3 which is the newest on UCS communities (https://communities.cisco.com/docs/DOC-37174)
To my error description I will add, that when I do a “print uBlade” (where uBlade is my Class ComputeBlade Instance), I get “[<UcsSdk.UcsBase.ManagedObject instance at 0x0000000008A23848>]”, so my variable has class “ManagedObject”, but possibly not Class “ComputeBlade”
Below is my complete script for Your information
BR
Jesper
Complete Script:
===========
import sys, os
from UcsSdk import *
import re
import time
import datetime
from io import TextIOWrapper, BytesIO
from xmo import *
u = UcsHandle()
uip = "192.168.158.88"
uuser = "a"
upassw = "a"
u.Login(uip,uuser,upassw)
if u:
result = (u, 0)
print "uLogin SUCCES"
else:
print "uLogin ERROR: login failed"
uBlade = ComputeBlade()
print "Type of uBlade is "+str(type(uBlade))
thisSerial = "3384"
thisBladeUserLabel = "RhelServer06"
uBlade = u.GetManagedObject(None, ComputeBlade.ClassId(), {ComputeBlade.SERIAL:thisSerial})
if uBlade:
print "Blade before Update:"
WriteObject(uBlade)
print "Print 'uBlade': "
print uBlade
getattr(uBlade,'ComputeBlade.UCS')
#assocSpDn = uBlade.assignedToDn # <= This is where it fails. I show a number of commands here, which all fails
#assocSpDn = uBlade.ASSIGNED_TO_DN
assocSpDn = uBlade.Ucs
#assocSpDn = uBlade.UCS
#assocSpDn = uBlade.ucs
print "assocSpDn "+assocSpDn
updatedUBlade = u.SetManagedObject(uBlade, ComputeBlade.ClassId(), {ComputeBlade.USR_LBL:thisBladeUserLabel})
if updatedUBlade:
print "Blade after Update:"
WriteObject(updatedUBlade)
assocSp = ""
if assocSpDn:
uSp = u.GetManagedObject(None, LsServer.ClassId(), {LsServer.DN:assocSpDn})
if uSp:
WriteObject(uSp)
else:
print "assocSp with Dn "assocSpDn" not found"

- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
you can skip the Python certification validation :
handle.Login("x.x.x.x", username="xxxx", password="xxxx",noSsl=True, port=80, dumpXml=YesOrNo.TRUE)
-baseif

- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Hi SDK Dev ,
When I try to get the MO’s using the OutCOnfigs.GetChild() attribute on the ConfigResolveDn instance it gives attribute error .
AttributeError: ExternalMethod instance has no attribute 'OutConfigs'
The same works for ConfigResolveChildren or ConfigResolveClass . Can you help ?
Thanks
Robin
My code:
crc = handle.ConfigResolveDn(parentDn, YesOrNo.TRUE,True)
if (crc.errorCode == 0):
for child in crc.OutConfigs.GetChild():
bootorder = child.Order
boottype = child.Type
Output :
handle is: <UcsSdk.UcsHandle.UcsHandle instance at 0x7f256f62e710>
UCS-11 ====> <configResolveDn cookie="1457640957/f81d4eb7-6af0-4490-a526-689eb43d23f2" dn="sys/chassis-4/blade-8/boot-policy" inHierarchical="true" />
UCS-11 <==== <configResolveDn dn="sys/chassis-4/blade-8/boot-policy" cookie="1457640957/f81d4eb7-6af0-4490-a526-689eb43d23f2" response="yes"> <outConfig> <lsbootDef advBootOrderApplicable="yes" bootMode="legacy" childAction="deleteNonPresent" descr="" dn="sys/chassis-4/blade-8/boot-policy" enforceVnicName="no" intId="73694698" name="boot-policy" policyLevel="0" policyOwner="local" purpose="operational" rebootOnUpdate="yes"> <lsbootVirtualMedia access="read-only" childAction="deleteNonPresent" lunId="0" mappingName="" order="1" rn="read-only-vm" type="virtual-media"/> <lsbootLan access="read-only" childAction="deleteNonPresent" order="2" prot="pxe" rn="lan" type="lan"> <lsbootLanImagePath bootIpPolicyName="" childAction="deleteNonPresent" iSCSIVnicName="" imgPolicyName="" imgSecPolicyName="" provSrvPolicyName="" rn="path-secondary" type="secondary" vnicName="eth1"/> <lsbootLanImagePath bootIpPolicyName="" childAction="deleteNonPresent" iSCSIVnicName="" imgPolicyName="" imgSecPolicyName="" provSrvPolicyName="" rn="path-primary" type="primary" vnicName="eth0"/> </lsbootLan> <lsbootSan access="read-write" childAction="deleteNonPresent" order="3" rn="san" type="san"> <lsbootSanCatSanImage childAction="deleteNonPresent" rn="sanimg-secondary" type="secondary" vnicName="fc1"> <lsbootSanCatSanImagePath childAction="deleteNonPresent" lun="0" rn="sanimgpath-primary" type="primary" vnicName="fc1" wwn="50:06:01:6A:47:20:4B:AF"/> </lsbootSanCatSanImage> <lsbootSanCatSanImage childAction="deleteNonPresent" rn="sanimg-primary" type="primary" vnicName="fc0"> <lsbootSanCatSanImagePath childAction="deleteNonPresent" lun="0" rn="sanimgpath-primary" type="primary" vnicName="fc0" wwn="50:06:01:62:47:20:4B:AF"/> </lsbootSanCatSanImage> </lsbootSan> </lsbootDef> </outConfig> </configResolveDn>
Exception: ExternalMethod instance has no attribute 'OutConfigs'
------------------------------------------------------------
Traceback (most recent call last):
File "/home/robimath/repox/Interop-Automation-System/test.py", line 44, in check_boot_order
for child in crc.OutConfigs.GetChild():
AttributeError: ExternalMethod instance has no attribute 'OutConfigs'
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Any ideas on when the next version of the Python SDK will be released?
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Amir,
The next version of theUCSM SDK is already out and is here: Cisco Ucs Python SDK - ucsmsdk (0.9.0.0)