Make it possible to manage rules of f5 vs (#1821)

reviewable/pr18780/r1
David Keijser 8 years ago committed by René Moser
parent 239c60ec13
commit 7b7af3bcf9

@ -87,6 +87,12 @@ options:
- "List of all Profiles (HTTP,ClientSSL,ServerSSL,etc) that must be used by the virtual server" - "List of all Profiles (HTTP,ClientSSL,ServerSSL,etc) that must be used by the virtual server"
required: false required: false
default: None default: None
all_rules:
version_added: "2.2"
description:
- "List of rules to be applied in priority order"
required: false
default: None
pool: pool:
description: description:
- "Default pool for the virtual server" - "Default pool for the virtual server"
@ -213,11 +219,40 @@ def vs_create(api,name,destination,port,pool):
def vs_remove(api,name): def vs_remove(api,name):
api.LocalLB.VirtualServer.delete_virtual_server(virtual_servers = [name ]) api.LocalLB.VirtualServer.delete_virtual_server(virtual_servers = [name ])
def get_rules(api,name):
return api.LocalLB.VirtualServer.get_rule(virtual_servers = [name])[0]
def set_rules(api,name,rules_list):
updated=False
if rules_list is None:
return False
rules_list = list(enumerate(rules_list))
try:
current_rules=map(lambda x: (x['priority'], x['rule_name']), get_rules(api,name))
to_add_rules=[]
for i, x in rules_list:
if (i ,x) not in current_rules:
to_add_rules.append({'priority': i, 'rule_name': x})
to_del_rules=[]
for i, x in current_rules:
if (i, x) not in rules_list:
to_del_rules.append({'priority': i, 'rule_name': x})
if len(to_del_rules)>0:
api.LocalLB.VirtualServer.remove_rule(virtual_servers = [name],rules = [to_del_rules])
updated=True
if len(to_add_rules)>0:
api.LocalLB.VirtualServer.add_rule(virtual_servers = [name],rules= [to_add_rules])
updated=True
return updated
except bigsuds.OperationFailed, e:
raise Exception('Error on setting profiles : %s' % e)
def get_profiles(api,name): def get_profiles(api,name):
return api.LocalLB.VirtualServer.get_profile(virtual_servers = [name])[0] return api.LocalLB.VirtualServer.get_profile(virtual_servers = [name])[0]
def set_profiles(api,name,profiles_list): def set_profiles(api,name,profiles_list):
updated=False updated=False
try: try:
@ -366,6 +401,7 @@ def main():
destination = dict(type='str', aliases=['address', 'ip']), destination = dict(type='str', aliases=['address', 'ip']),
port = dict(type='int'), port = dict(type='int'),
all_profiles = dict(type='list'), all_profiles = dict(type='list'),
all_rules = dict(type='list'),
pool=dict(type='str'), pool=dict(type='str'),
description = dict(type='str'), description = dict(type='str'),
snat=dict(type='str'), snat=dict(type='str'),
@ -397,6 +433,7 @@ def main():
destination=module.params['destination'] destination=module.params['destination']
port=module.params['port'] port=module.params['port']
all_profiles=fq_list_names(partition,module.params['all_profiles']) all_profiles=fq_list_names(partition,module.params['all_profiles'])
all_rules=fq_list_names(partition,module.params['all_rules'])
pool=fq_name(partition,module.params['pool']) pool=fq_name(partition,module.params['pool'])
description = module.params['description'] description = module.params['description']
snat = module.params['snat'] snat = module.params['snat']
@ -440,6 +477,7 @@ def main():
try: try:
vs_create(api,name,destination,port,pool) vs_create(api,name,destination,port,pool)
set_profiles(api,name,all_profiles) set_profiles(api,name,all_profiles)
set_rules(api,name,all_rules)
set_snat(api,name,snat) set_snat(api,name,snat)
set_description(api,name,description) set_description(api,name,description)
set_default_persistence_profiles(api,name,default_persistence_profile) set_default_persistence_profiles(api,name,default_persistence_profile)
@ -464,6 +502,7 @@ def main():
result['changed']|=set_description(api,name,description) result['changed']|=set_description(api,name,description)
result['changed']|=set_snat(api,name,snat) result['changed']|=set_snat(api,name,snat)
result['changed']|=set_profiles(api,name,all_profiles) result['changed']|=set_profiles(api,name,all_profiles)
result['changed']|=set_rules(api,name,all_rules)
result['changed']|=set_default_persistence_profiles(api,name,default_persistence_profile) result['changed']|=set_default_persistence_profiles(api,name,default_persistence_profile)
result['changed']|=set_state(api,name,state) result['changed']|=set_state(api,name,state)
api.System.Session.submit_transaction() api.System.Session.submit_transaction()

Loading…
Cancel
Save