aboutsummaryrefslogtreecommitdiffstats
path: root/aria/multivim-plugin/openstack_plugin_common/floatingip.py
diff options
context:
space:
mode:
Diffstat (limited to 'aria/multivim-plugin/openstack_plugin_common/floatingip.py')
-rw-r--r--aria/multivim-plugin/openstack_plugin_common/floatingip.py84
1 files changed, 84 insertions, 0 deletions
diff --git a/aria/multivim-plugin/openstack_plugin_common/floatingip.py b/aria/multivim-plugin/openstack_plugin_common/floatingip.py
new file mode 100644
index 0000000000..fe5896520b
--- /dev/null
+++ b/aria/multivim-plugin/openstack_plugin_common/floatingip.py
@@ -0,0 +1,84 @@
+#########
+# Copyright (c) 2014 GigaSpaces Technologies Ltd. All rights reserved
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# * See the License for the specific language governing permissions and
+# * limitations under the License.
+
+from cloudify import ctx
+from openstack_plugin_common import (
+ delete_resource_and_runtime_properties,
+ use_external_resource,
+ validate_resource,
+ COMMON_RUNTIME_PROPERTIES_KEYS,
+ OPENSTACK_ID_PROPERTY,
+ OPENSTACK_TYPE_PROPERTY)
+
+
+FLOATINGIP_OPENSTACK_TYPE = 'floatingip'
+
+# Runtime properties
+IP_ADDRESS_PROPERTY = 'floating_ip_address' # the actual ip address
+RUNTIME_PROPERTIES_KEYS = COMMON_RUNTIME_PROPERTIES_KEYS + \
+ [IP_ADDRESS_PROPERTY]
+
+
+def use_external_floatingip(client, ip_field_name, ext_fip_ip_extractor):
+ external_fip = use_external_resource(
+ ctx, client, FLOATINGIP_OPENSTACK_TYPE, ip_field_name)
+ if external_fip:
+ ctx.instance.runtime_properties[IP_ADDRESS_PROPERTY] = \
+ ext_fip_ip_extractor(external_fip)
+ return True
+
+ return False
+
+
+def set_floatingip_runtime_properties(fip_id, ip_address):
+ ctx.instance.runtime_properties[OPENSTACK_ID_PROPERTY] = fip_id
+ ctx.instance.runtime_properties[OPENSTACK_TYPE_PROPERTY] = \
+ FLOATINGIP_OPENSTACK_TYPE
+ ctx.instance.runtime_properties[IP_ADDRESS_PROPERTY] = ip_address
+
+
+def delete_floatingip(client, **kwargs):
+ delete_resource_and_runtime_properties(ctx, client,
+ RUNTIME_PROPERTIES_KEYS)
+
+
+def floatingip_creation_validation(client, ip_field_name, **kwargs):
+ validate_resource(ctx, client, FLOATINGIP_OPENSTACK_TYPE,
+ ip_field_name)
+
+
+def get_server_floating_ip(neutron_client, server_id):
+
+ floating_ips = neutron_client.list_floatingips()
+
+ floating_ips = floating_ips.get('floatingips')
+ if not floating_ips:
+ return None
+
+ for floating_ip in floating_ips:
+ port_id = floating_ip.get('port_id')
+ if not port_id:
+ # this floating ip is not attached to any port
+ continue
+
+ port = neutron_client.show_port(port_id)['port']
+ device_id = port.get('device_id')
+ if not device_id:
+ # this port is not attached to any server
+ continue
+
+ if server_id == device_id:
+ return floating_ip
+ return None