Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 18 additions & 3 deletions cloud/openstack/os_floating_ip.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,13 @@
required: false
floating_ip_address:
description:
- A floating IP address to attach or to detach. Required only if state
is absent. When state is present can be used to specify a IP address
- A floating IP address to attach or to detach. Required only if I(state)
is absent. When I(state) is present can be used to specify a IP address
to attach.
required: false
reuse:
description:
- When state is present, and floating_ip_address is not present,
- When I(state) is present, and I(floating_ip_address) is not present,
this parameter can be used to specify whether we should try to reuse
a floating IP address already allocated to the project.
required: false
Expand All @@ -76,6 +76,12 @@
choices: [present, absent]
required: false
default: present
purge:
description:
- When I(state) is absent, indicates whether or not to delete the floating
IP completely, or only detach it from the server. Default is to detach only.
required: false
default: false
requirements: ["shade"]
'''

Expand Down Expand Up @@ -128,6 +134,7 @@ def main():
fixed_address=dict(required=False, default=None),
wait=dict(required=False, type='bool', default=False),
timeout=dict(required=False, type='int', default=60),
purge=dict(required=False, type='bool', default=False),
)

module_kwargs = openstack_module_kwargs()
Expand All @@ -144,6 +151,7 @@ def main():
fixed_address = module.params['fixed_address']
wait = module.params['wait']
timeout = module.params['timeout']
purge = module.params['purge']

cloud = shade.openstack_cloud(**module.params)

Expand All @@ -169,10 +177,17 @@ def main():

f_ip = _get_floating_ip(cloud, floating_ip_address)

if not f_ip:
# Nothing to detach
module.exit_json(changed=False)

cloud.detach_ip_from_server(
server_id=server['id'], floating_ip_id=f_ip['id'])
# Update the floating IP status
f_ip = cloud.get_floating_ip(id=f_ip['id'])
if purge:
cloud.delete_floating_ip(f_ip['id'])
module.exit_json(changed=True)
module.exit_json(changed=True, floating_ip=f_ip)

except shade.OpenStackCloudException as e:
Expand Down