Homepage: | https://github.com/chmouel/python-cloudlb |
---|---|
Credits: | Copyright 2011 Chmouel Boudjnah <chmouel@chmouel.com> |
Licence: | BSD |
Not much documentation at the moment but just some quick typical usage scripts you can do with this library. This is based on the latest version from :
http://docs.rackspacecloud.com/loadbalancers/api/clb-devguide-latest.pdf
Create a LoadBalancer:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") node1 = cloudlb.Node(address="10.180.160.131", port=80, condition="ENABLED") virtualIP1 = cloudlb.VirtualIP( type="PUBLIC") clb.loadbalancers.create(name="mytestinglb", port=80, protocol="HTTP", nodes=[node1], virtualIps=[virtualIp1])
List LoadBalancers:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() for lb in lbs: print "%s has %s node attached with IP addresses:" % (lb.name, len(lb.nodes)) for ip in lb.virtualIps: print "%s/%s" % (ip.ipVersion, ip.address)
List LoadBalancers who have nodes that belong to it:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") ip = '10.1.1.1' lbs = clb.loadbalancers.search(ip) for lb in lbs: print "%s has %s node attached" % (lb.name, ip))
Get LB by ID:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") clb.authenticate() lb = clb.loadbalancers.get(LoadBalancerID)
Delete LB:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lb = clb.loadbalancers.get(LoadBalancerID) lb.delete()
List nodes of a LB:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() lb = lbs[0] #get the first one nodes=lb.nodes.filter(status='ENABLED') for node in nodes: print node.address
Filter nodes via condition of a LB:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() lb = lbs[0] #get the first one for node in lb.nodes: print node.address
Add a node to a LB:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") newnode = cloudlb.Node(address="10.180.160.131", port=80, condition="ENABLED") lbs = clb.loadbalancers.list() lb = lbs[0] #add to the first one lb.add_nodes([newnode])
Delete a node from a LB:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() lb = lbs[0] #add to the first one node = lb.nodes[0] #get the first node node.delete() #delete it
Update attributes of a node:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() mylb = lbs[0] #add to the first one nodeid = 14106 nodes = mylb.nodes node = mylb.nodes.get(nodeid) toggle_status = node.condition == "ENABLED" and "DISABLED" or "ENABLED" node.condition = toggle_status node.update()
Get weight of a node by using .get():
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() mylb = lbs[0] #add to the first one nodeid = 14106 nodes = mylb.nodes node = mylb.nodes.get(nodeid) print node.weight
Update attributes on LoadBalancer:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() mylb = lbs[0] #first lb mylb.protocol = "FTP" mylb.name = "APrettyNewName" mylb.update()
Get usage statistics on all LoadBalancers:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") print clb.get_usage()
Get usage statistics on a specfic LoadBalancer:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() mylb = lbs[0] #first lb print mylb.get_usage()
Get real-time statistics on a specific LoadBalancer:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() mylb = lbs[0] #first lb print mylb.get_stats()
Get limits on all LoadBalancers:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") print clb.get_limits()
Get Load Balancing Algorithms:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") print clb.get_algorithms()
Get Load Balancing Protocols:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") print clb.get_protocols()
Get current Health Monitor:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() mylb = lbs[0] #first lb hm_monitor = mylb.healthmonitor() print hm_monitor.get()
Monitor loadbalancer using simple TCP Connect:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() mylb = lbs[0] #first lb hm_monitor = mylb.healthmonitor() hm = cloudlb.healthmonitor.HealthMonitor( type="CONNECT", delay=10, timeout=10, attemptsBeforeDeactivation=3) hm_monitor.add(hm)
Monitor loadbalancer using HTTP(s):
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() mylb = lbs[0] #first lb hm_monitor = mylb.healthmonitor() hm = cloudlb.healthmonitor.HealthMonitor( type="HTTP", #or HTTPS delay=10, timeout=10, attemptsBeforeDeactivation=3, path="/", statusRegex="^[234][0-9][0-9]$", bodyRegex="testing") hm_monitor.add(hm)
Delete Health Monitor rule:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() mylb = lbs[0] #first lb hm_monitor = mylb.healthmonitor() hm_monitor.delete()
Add http cookie session persistence:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() mylb = lbs[0] #first lb ss = cloudlb.sessionpersistence.SessionPersistence(persistenceType="HTTP_COOKIE") ssp = mylb.session_persistence() ssp.add(ss)
Get session persistence:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() mylb = lbs[0] #first lb ssp = mylb.session_persistence() print ssp.get()
Delete session persistence configuration:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() mylb = lbs[0] #first lb ssp = mylb.session_persistence() ssp.delete()
Enable/Disable Connection Logging:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() mylb = lbs[0] #first lb cl = mylb.connection_logging() #Get connection logging status print cl.get() #Enable connection logging cl.enable() #Disable connection logging cl.disable()
Access Lists:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() mylb = lbs[0] #first lb accesslist = mylb.accesslist() networkItem1 = cloudlb.accesslist.NetworkItem( address="10.20.30.40", type="ALLOW") networkItem2 = cloudlb.accesslist.NetworkItem( address="0.0.0.0/0", type="DENY") # Allow only 10.20.30.40 accesslist.add([networkItem1, networkItem2]) # List accesslists print accesslist.list() # Delete all accesslist accesslist.delete() # Delete accesslist by ID accesslist.delete(id=62)
Custom Error Page:
#!/usr/bin/python import cloudlb clb = cloudlb.CloudLoadBalancer("username", "apikey","chicago") lbs = clb.loadbalancers.list() mylb = lbs[0] #first lb errorpage = mylb.errorpage() # Display current error page print errorpage.get() # Change the error page errorpage.add('<html><body><h1>Error</h1></body></html>') # Revert to the default error page errorpage.delete()
See COPYING for license information. Copyright © 2011, Rackspace US, Inc.
Chmouel Boudjnah <chmouel@chmouel.com>