diff options
author | Tim Rupp <caphrim007@gmail.com> | 2016-10-26 09:06:34 -0700 |
---|---|---|
committer | John R Barker <john@johnrbarker.com> | 2016-10-26 17:06:34 +0100 |
commit | 4c58c430a4ca62e3dab47aa50008db616e10d70f (patch) | |
tree | 16363d4f49c508d7770cc55f3720eda1a4015609 /network | |
parent | 239468aa1f32d0d19eb4a6cfa8d4b36c2955efcc (diff) | |
download | ansible-modules-extras-4c58c430a4ca62e3dab47aa50008db616e10d70f.tar.gz |
Adds route advertisement state to the bigip_virtual_server module (#3273)
Diffstat (limited to 'network')
-rw-r--r-- | network/f5/bigip_virtual_server.py | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/network/f5/bigip_virtual_server.py b/network/f5/bigip_virtual_server.py index b1fb318c..f1c6905c 100644 --- a/network/f5/bigip_virtual_server.py +++ b/network/f5/bigip_virtual_server.py @@ -112,6 +112,12 @@ options: - Default Profile which manages the session persistence required: false default: None + route_advertisement_state: + description: + - Enable route advertisement for destination + required: false + default: disabled + version_added: "2.3" description: description: - Virtual server description @@ -540,6 +546,27 @@ def set_default_persistence_profiles(api, name, persistence_profile): raise Exception('Error on setting default persistence profile : %s' % e) +def get_route_advertisement_status(api, address): + result = api.LocalLB.VirtualAddressV2.get_route_advertisement_state(virtual_addresses=[address]).pop(0) + result = result.split("STATE_")[-1].lower() + return result + + +def set_route_advertisement_state(api, destination, partition, route_advertisement_state): + updated = False + + try: + state = "STATE_%s" % route_advertisement_state.strip().upper() + address = fq_name(partition, destination,) + current_route_advertisement_state=get_route_advertisement_status(api,address) + if current_route_advertisement_state != route_advertisement_state: + api.LocalLB.VirtualAddressV2.set_route_advertisement_state(virtual_addresses=[address], states=[state]) + updated = True + return updated + except bigsuds.OperationFailed as e: + raise Exception('Error on setting profiles : %s' % e) + + def main(): argument_spec = f5_argument_spec() argument_spec.update(dict( @@ -554,6 +581,7 @@ def main(): pool=dict(type='str'), description=dict(type='str'), snat=dict(type='str'), + route_advertisement_state=dict(type='str', default='disabled', choices=['enabled', 'disabled']), default_persistence_profile=dict(type='str') )) @@ -593,6 +621,7 @@ def main(): pool = fq_name(partition, module.params['pool']) description = module.params['description'] snat = module.params['snat'] + route_advertisement_state = module.params['route_advertisement_state'] default_persistence_profile = fq_name(partition, module.params['default_persistence_profile']) if 1 > port > 65535: @@ -639,6 +668,7 @@ def main(): set_description(api, name, description) set_default_persistence_profiles(api, name, default_persistence_profile) set_state(api, name, state) + set_route_advertisement_state(api, destination, partition, route_advertisement_state) result = {'changed': True} except bigsuds.OperationFailed as e: raise Exception('Error on creating Virtual Server : %s' % e) @@ -663,6 +693,7 @@ def main(): result['changed'] |= set_rules(api, name, all_rules) result['changed'] |= set_default_persistence_profiles(api, name, default_persistence_profile) result['changed'] |= set_state(api, name, state) + result['changed'] |= set_route_advertisement_state(api, destination, partition, route_advertisement_state) api.System.Session.submit_transaction() except Exception as e: raise Exception("Error on updating Virtual Server : %s" % e) |