Forum Discussion
My irule results to full suspension of bigip ltm
My irule results to full suspension of bigip ltm, an it could be fixed by reboot of ltm there's a code of my irule (i wanna do lots of similar virtual servers and pools) and of course i'm not a programmer so my code isn't good sry for that) i suppose that when i connect to LTM i open connection, and then when i finish all stuff to do, I do not close the session (but i should do this) So am I right, and how can i do this? Thanks Tim
!/usr/bin/env python
def create_pool(obj,pool, lbmethod, pl_mems, monitor):
pool = '/Common/%s' % pool
pmlist = []
MA = {}
MA['pool_name'] = pool
MR = {}
MR['type'] = 'MONITOR_RULE_TYPE_SINGLE'
MR['monitor_templates'] = monitor
quorum ignored
MR['quorum'] = 1
MA['monitor_rule'] = MR
for x in pl_mems.split(','):
pm = {}
y = x.split(':')
pm['address'] = str(y[0])
pm['port'] = int(y[1])
pmlist.append(pm)
try:
pllist = obj.LocalLB.Pool.get_list()
if pool in pllist:
obj.LocalLB.Pool.add_member_v2([pool], [pmlist])
else:
obj.LocalLB.Pool.create_v2([pool],[lbmethod],[pmlist])
obj.LocalLB.Pool.set_action_on_service_down([pool],['SERVICE_DOWN_ACTION_RESELECT'])
if monitor != False:
obj.LocalLB.Pool.set_monitor_association([MA])
return obj.LocalLB.Pool.get_member_v2([pool])
except Exception, e:
print e
def load_config():
f_var = open('vs_maker.cfg', 'r')
profiles_ltm = []
for line in f_var:
if line[0] != '':
temp = {}
params_var = line.split(' ')
temp['host'] = params_var[0]
temp['ip'] = params_var[1]
temp['rd0_nat'] = params_var[2]
temp['rd0_vlan'] = params_var[3]
temp['rd1_nat'] = params_var[4]
temp['rd1_vlan'] = params_var[5]
profiles_ltm.append(temp)
return profiles_ltm
def create_vs(obj, hostname, ip, port, pool, irule, vlans, ssl_profile, nat_pool, http_class):
definition = {}
resource = {}
profile = {}
profile2 = {}
profiles = []
vlanfilter = {}
vlanfilter['state'] = 'STATE_ENABLED'
vlanfilter['vlans'] = vlans
irule_priority_var = {}
irule_list_var = []
http_class_priority_var = {}
http_class_list_var = []
try:
definition['name'] = hostname
definition['address'] = ip
definition['port'] = port
definition['protocol'] = 'PROTOCOL_TCP'
wildmask = '255.255.255.255'
resource['type'] = 'RESOURCE_TYPE_POOL'
resource['default_pool_name'] = pool
profile['profile_name'] = '/Common/http'
profiles.append(profile)
if ssl_profile != False:
profile2['profile_name'] = '/Common/%s' % ssl_profile[0]
profile2['profile_context'] = 'PROFILE_CONTEXT_TYPE_CLIENT'
profiles.append(profile2)
obj.LocalLB.VirtualServer.create([definition], [wildmask], [resource], [profiles] )
print 'Set Irule........'
if irule[0] != False:
i_var = 0
for z_VAR in irule:
i_var = i_var + 1
irule_priority_var['rule_name'] = z_VAR
irule_priority_var['priority'] = i_var
irule_list_var.append(irule_priority_var)
obj.LocalLB.VirtualServer.add_rule( [hostname] , [irule_list_var] )
print 'set http_class.......'
if http_class[0] != False:
i_var = 0
for w_VAR in http_class:
i_var = i_var + 1
http_class_priority_var['profile_name'] = w_VAR
http_class_priority_var['priority'] = i_var
http_class_list_var.append(http_class_priority_var)
obj.LocalLB.VirtualServer.add_httpclass_profile( [hostname] , [http_class_list_var] )
print 'set vlans......'
if vlanfilter['vlans'] != False:
obj.LocalLB.VirtualServer.set_vlan([hostname],[vlanfilter] )
print 'set nat pool ......'
if nat_pool != False:
obj.LocalLB.VirtualServer.set_snat_pool([hostname],[nat_pool] )
print 'set persistance .....'
obj.LocalLB.VirtualServer.add_persistence_profile( virtual_servers = [hostname], profiles = [[ {'profile_name': '/Common/cookie', 'default_profile': 'true'} ]] )
except Exception, e:
print e
def split_vs(vs):
try:
vs_pam_list=[]
q = vs.split(',')
for x in q:
vs_pam = {}
w = x.split(':')
vs_pam['ip'] = str(w[0])
vs_pam['port'] = int(w[1])
vs_pam['hostname'] = '/Common/%s' % str(w[2])
vs_pam_list.append(vs_pam)
return vs_pam_list
except Exception, e:
print e
def split_params(params):
try:
params_pam_list={}
q = params.split(',')
irule_list = q[0].split(':')
i = 0
temp1= []
temp1.append(False)
for zz in irule_list:
irule_list[i] = '/Common/%s' % zz
i = i + 1
i = 0
http_class_list = q[3].split(':')
for xx in http_class_list:
http_class_list[i] = '/Common/%s' % xx
i = i + 1
if q[0] == '':
params_pam_list['irule'] = temp1
else:
params_pam_list['irule'] = irule_list
if q[3] == '':
params_pam_list['http_class'] = temp1
else:
params_pam_list['http_class'] = http_class_list
params_pam_list['nat_pool'] = nat
params_pam_list['interface'] = vlan.split(':')
if q[1] == '':
params_pam_list['ssl'] = False
else:
params_pam_list['ssl'] = q[1].split(':')
if q[2] == '':
params_pam_list['monitor'] = False
else:
params_pam_list['monitor'] = q[2].split(':')
return params_pam_list
except Exception, e:
print e
def check_vs(obj, vs, pool, irule, http_class):
try:
global irule_exists
global http_class_exists
virtualservers = obj.LocalLB.VirtualServer.get_list()
poollist = obj.LocalLB.Pool.get_list()
irules_list = obj.LocalLB.Rule.get_list()
for cx in vs:
if cx['hostname'] in virtualservers:
print 'vs already exists'
sys.exit()
if pool in poollist:
print 'pool already exists'
return 'false'
for zz in irule:
if zz != False:
if zz in irules_list:
irule_exists = True
else:
print 'irule doesnt exist'
print irule
print irules_list
sys.exit()
else:
irule_exists = False
if http_class in locals():
return True
except Exception, e:
print e
def main_task(a):
try:
print '.........creating %s ... ' %a[2]
global nat
global vlan
global ip
print 'read config.....'
config_from_file = load_config()
for v in config_from_file:
if v['host'] == a[0]:
ip = v['ip']
if ip[-2] != '%':
nat = v['rd0_nat']
vlan = v['rd0_vlan']
else:
nat = v['rd1_nat']
vlan = v['rd1_vlan']
try:
print 'connect to f5.......'
b = bigsuds.BIGIP(
hostname = ip,
username = a[1],
password = upass,
)
except Exception, e:
print e
print 'somthing goes wrong with connection to f5'
sys.exit()
irule_exists = False
http_class_exists = False
vs = split_vs(a[2])
print 'split params....'
params = split_params(a[5])
poolname_var = '/Common/%s' % a[3]
print 'check configs...... wait a minute plz :)'
check = check_vs(b, vs, poolname_var, params['irule'], params['http_class'] )
if check == True:
if poolname_var != '/Common/none':
print 'create pool........'
create_pool(b, poolname_var, 'LB_METHOD_LEAST_CONNECTION_NODE_ADDRESS', a[4], params['monitor'])
else:
poolname_var = ''
for gx in vs:
print 'create VS..........'
create_vs(b, gx['hostname'], gx['ip'], gx['port'], poolname_var, params['irule'], params['interface'], params['ssl'], params['nat_pool'], params['http_class'])
except Exception, e:
print e
print 'somthing goes wrong with connection to f5'
sys.exit()
if __name__ == "__main__":
import bigsuds
import getpass
import sys
Directory location of bigsuds.py file
sys.path.append(r'/Library/Python/2.7/site-packages/')
ip = ' '
nat = ' '
vlan = ' '
print "\n Please enter your password below.\n"
upass = getpass.getpass()
if len(sys.argv) == 2:
task_file_var = sys.argv[1]
task_var = open(task_file_var, 'r')
for line in task_var:
if line[0] != '':
main_task(line.split(' '))
elif len(sys.argv) < 5:
print "\n\n\tUsage %s BIGIP_address username ip:port:hostname,ip:port:hostname poolname memberlis irule,ssl_profile,monitor,http_class" % sys.argv[0]
sys.exit()
else:
line = sys.argv[1:]
main_task(line)2 Replies
- Stanislas_Piro2
Cumulonimbus
Hi,
this is not an irule!!!!
I guess it's a python code to manage ltm objects with icontrol.
Stanislas
- tima-fey_165922
Nimbostratus
You are right. Thanks I'll make another question
Help guide the future of your DevCentral Community!
What tools do you use to collaborate? (1min - anonymous)Recent Discussions
Related Content
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com