Simple Python Library to control Citrix Netscaler 9.2+ load balancers with NITRO API. What we're trying here is to implement Citrix NITRO API SDK (that's available for Java and C#) in Python. You can find a simple command-line interface using this library in contrib/. Feedback/comments welcome. Very basic usage:: import time from nsnitro import * nitro = NSNitro('localhost', 'api_user', 'api_user') nitro.login() # add server test addserver = NSServer() addserver.set_name("mp-nitroserver") addserver.set_ipaddress("10.32.110.99") NSServer.add(nitro, addserver) server = NSServer() server.set_name("mp-nitroserver") server = server.get(nitro, server) print server.get_name() + ": " + server.get_state() # disable server test server = NSServer() server.set_name("mp-nitroserver") NSServer.disable(nitro, server) time.sleep(2) server = NSServer() server.set_name("mp-nitroserver") server = server.get(nitro, server) print server.get_name() + ": " + server.get_state() # enable server test server = NSServer() server.set_name("mp-nitroserver") NSServer.enable(nitro, server) time.sleep(2) server = NSServer() server.set_name("mp-nitroserver") server = server.get(nitro, server) print server.get_name() + ": " + server.get_state() # add service test addservice = NSService() addservice.set_name("aurora_testnitroadd") addservice.set_servername("mp-nitroserver") addservice.set_servicetype("HTTP") addservice.set_port(11111) NSService.add(nitro, addservice) # add lbvserver test lbvserver = NSLBVServer() lbvserver.set_name("nitro_lbvserver_test") lbvserver.set_ipv46("10.32.110.55") lbvserver.set_port(11111) lbvserver.set_clttimeout(180) lbvserver.set_persistencetype("NONE") lbvserver.set_servicetype("HTTP") NSLBVServer.add(nitro, lbvserver) # print "LB vserver added" # bind service to lbvserver test lbbinding = NSLBVServerServiceBinding() lbbinding.set_name("nitro_lbvserver_test") lbbinding.set_servicename("aurora_testnitroadd") lbbinding.set_weight(40) NSLBVServerServiceBinding.add(nitro, lbbinding) print "Binding added" lbbinding = NSLBVServerServiceBinding() lbbinding.set_name("nitro_lbvserver_test") lbbindings = NSLBVServerServiceBinding.get(nitro, lbbinding) for lbb in lbbindings: print "sgn: " + lbb.get_servicegroupname() # delete binding test lbbinding = NSLBVServerServiceBinding() lbbinding.set_name("nitro_lbvserver_test") lbbinding.set_servicename("aurora_testnitroadd") NSLBVServerServiceBinding.delete(nitro, lbbinding) print "Binding removed" # delete lbvserver test lbvserver = NSLBVServer() lbvserver.set_name("nitro_lbvserver_test") NSLBVServer.delete(nitro, lbvserver) # get service test service = NSService() service.set_name("aurora_testnitroadd") service = service.get(nitro, service) print service.get_name() + ": " + service.get_svrstate() print service.get_name() + ": %s %s" % (service.get_port(), service.get_useproxyport()) #update service test updateservice = NSService() updateservice.set_name("aurora_testnitroadd") updateservice.set_comment("test comment") updateservice.set_useproxyport("NO") NSService.update(nitro, updateservice) # get service test service = NSService() service.set_name("aurora_testnitroadd") service = service.get(nitro, service) print service.get_name() + ": " + service.get_svrstate() print service.get_name() + ": %s %s %s" % (service.get_port(), service.get_comment(), service.get_useproxyport()) # disable service test disservice = NSService() disservice.set_name("aurora_testnitroadd") NSService.disable(nitro, disservice) service = NSService() service.set_name("aurora_testnitroadd") service = service.get(nitro, service) print service.get_name() + ": " + service.get_svrstate() # enable service test enservice = NSService() enservice.set_name("aurora_testnitroadd") NSService.enable(nitro, enservice) service = NSService() service.set_name("aurora_testnitroadd") service = service.get(nitro, service) print service.get_name() + ": " + service.get_svrstate() # rename service test renservice = NSService() renservice.set_name("aurora_testnitroadd") renservice.set_newname("aurora_testnitroadd_rename") NSService.rename(nitro, renservice) # rename service back test renservice = NSService() renservice.set_name("aurora_testnitroadd_rename") renservice.set_newname("aurora_testnitroadd") NSService.rename(nitro, renservice) # delete service test delservice = NSService() delservice.set_name("aurora_testnitroadd") NSService.delete(nitro, delservice) try: service = NSService() service.set_name("aurora_testnitroadd") service = service.get(nitro, service) print service.get_name() + ": " + service.get_svrstate() except NSNitroError, e: print e.message # delete server test delserver = NSServer() delserver.set_name("mp-nitroserver") NSServer.delete(nitro, delserver) try: server = NSServer() server.set_name("mp-nitroserver") server = server.get(nitro, server) print server.get_name() + ": " + server.get_state() except NSNitroError, e: print e.message #add system cmd policy cmdpol = NSSystemCMDPolicy() cmdpol.set_action('ALLOW') cmdpol.set_policyname('nitro-cmd-policy') cmdpol.set_cmdspec('show hardware') NSSystemCMDPolicy.add(nitro,cmdpol) #update system cmd policy cmdpol = NSSystemCMDPolicy() cmdpol.set_action('DENY') cmdpol.set_policyname('nitro-cmd-policy') cmdpol.set_cmdspec('show hardware') NSSystemCMDPolicy.update(nitro,cmdpol) #delete system cmd policy cmdpol = NSSystemCMDPolicy() cmdpol.set_policyname('nitro-cmd-policy') NSSystemCMDPolicy.delete(nitro,cmdpol)