Skip to content

Instantly share code, notes, and snippets.

@fatred
Created December 30, 2015 00:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fatred/aa31323dfefa6d9b29a1 to your computer and use it in GitHub Desktop.
Save fatred/aa31323dfefa6d9b29a1 to your computer and use it in GitHub Desktop.
prob_of_net-cucm_python-pt4
import suds
from suds.client import Client
import ssl
import logging
import sys
# ignore ssl pain - python 2.7.9+ only
ssl._create_default_https_context = ssl._create_unverified_context
# set suds logging to critical only
logging.getLogger('suds.client').setLevel(logging.CRITICAL)
# if we need to see the soap envelopes for debugging, we can uncomment the below...
#handler = logging.StreamHandler(sys.stderr)
#logger = logging.getLogger('suds.transport.http')
#logger.setLevel(logging.DEBUG), handler.setLevel(logging.DEBUG)
#logger.addHandler(handler)
# define a function to convert the suds requests to a dict for return to AXL
def sudsToDict(data):
return dict([(str(key),val) for key,val in data])
# setup creds for auth
username = 'admin'
passwd = 'well_good_pass()rd'
# setup access to the wdsl and the pub
#
# NOTE: this has localhost:8000 for the wsdl.
# the wsdl isnt available on the server (why i will never know)
#
# two choices:
# 1) host the wsdl online somewhere you know, and refer to that
# 2) in another terminal browse to the AXLToolkit/ folder
# run 'python -m SimpleHTTPServer' in that dir.
# that spins up a mini web server you can read the wsdl from...
wsdl_url = 'http://localhost:8000/schema/10.5/AXLAPI.wsdl'
service_url = 'https://10.31.74.30/axl/'
# Create an object to communicate with the API called cucm_server.
# this is how we pull and push data into CUCM via XML.
cucm_server = Client(wsdl_url, location = service_url, username=username, password=passwd)
# read some data in.
#
print "Checking for user: "
try:
user_check = cucm_server.service.listUser({'userid':'New_End_User'},{'firstName':'','lastName':'','userid':'','mailid':'','department':'','userLocale':''})
except suds.WebFault, err:
print err
exit()
# Check to see if our request was an error or a success...
if len(user_check[0]) > 0:
print "User already exists!"
exit()
else:
print "User not found... Continue..."
# we only get here when we had a success...
#
# build a new request object with factory
print "Creating user request"
new_user_request = cucm_server.factory.create("ns0:AddUserReq")
# set the username that we need...
print "Updating User request"
new_user_request.user.userid = "New_End_User"
new_user_request.user.firstName = "API Generated"
new_user_request.user.lastName = "End User"
new_user_request.user.department = 'API'
new_user_request.user.password = 'cisco'
new_user_request.user.pin = '08520'
new_user_request.user.mailid = 'meh@meh.com'
#delete the ones we dont need...
del new_user_request.user.authenticationType
del new_user_request.user.accountType
del new_user_request.user.convertUserAccount
del new_user_request.user.ipccExtension
del new_user_request.user.nameDialing
del new_user_request.user.userIdentity
del new_user_request.user.ldapDirectoryName
del new_user_request.user.calendarPresence
del new_user_request.user.userProfile
del new_user_request.user.selfService
del new_user_request.user.extensionsInfo
del new_user_request.user.pagerNumber
del new_user_request.user.homeNumber
del new_user_request.user.mobileNumber
del new_user_request.user.title
del new_user_request.user.telephoneNumber
del new_user_request.user.directoryUri
del new_user_request.user.lineAppearanceAssociationForPresences
del new_user_request.user.serviceProfile
del new_user_request.user.imAndPresenceEnable
del new_user_request.user.homeCluster
del new_user_request.user.customUserFields
del new_user_request.user.mlppPassword
del new_user_request.user.numericUserId
del new_user_request.user.patternPrecedence
del new_user_request.user.ctiControlledDeviceProfiles
del new_user_request.user.enableEmcc
del new_user_request.user.primaryDevice
del new_user_request.user.pinCredentials
del new_user_request.user.passwordCredentials
del new_user_request.user.remoteDestinationLimit
del new_user_request.user.maxDeskPickupWaitTime
del new_user_request.user.enableMobileVoiceAccess
del new_user_request.user.enableMobility
del new_user_request.user.subscribeCallingSearchSpaceName
del new_user_request.user.presenceGroupName
del new_user_request.user.defaultProfile
del new_user_request.user.phoneProfiles
del new_user_request.user.digestCredentials
del new_user_request.user.enableCti
del new_user_request.user.associatedGroups
del new_user_request.user.associatedPc
del new_user_request.user.primaryExtension
del new_user_request.user.associatedDevices
del new_user_request.user.userLocale
del new_user_request.user.manager
# convert that to a dict
new_user_req_dict = sudsToDict(new_user_request)
# push that user object back into call manager with addUser method
print "submitting new user request"
try:
add_new_user_results = cucm_server.service.addUser(**new_user_req_dict)
except suds.Webfault, err:
print err
exit()
# we only get where when we had success
#
print "pulling new user data back..."
try:
user_check2 = cucm_server.service.listUser({'userid':'New_End_User'},{'firstName':'','lastName':'','userid':'','mailid':'','department':'','userLocale':''})
except suds.WebFault, err:
print err
exit()
# Check to see if our request was an error or a success...
if len(user_check2[0]) > 0:
print "User created successfully!"
print user_check2[0]
else:
print "FAIL WHALE!!!"
print user_check2[0]
exit()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment