summaryrefslogtreecommitdiffstats
path: root/snaps/openstack/create_instance.py
diff options
context:
space:
mode:
authorspisarski <s.pisarski@cablelabs.com>2017-07-28 10:40:49 -0600
committerspisarski <s.pisarski@cablelabs.com>2017-07-28 10:40:49 -0600
commit84c4e791b6ea4e6d488acf29491ef8c901011aa3 (patch)
treecbbca9a455f63fa78c11025b17e90854e3a934be /snaps/openstack/create_instance.py
parentca276f452540f68c08cb3df9049e9e7876364dac (diff)
Removed floating IP list from OpenStackVmInstance.
There was a list and dict both holding the same floating IP objects which has been problematic especially when trying to initialize the object with a VM instance that already exists. JIRA: SNAPS-149 Change-Id: If4af6dfef04a40b9c8cd7a8add484c9ec03f1ef8 Signed-off-by: spisarski <s.pisarski@cablelabs.com>
Diffstat (limited to 'snaps/openstack/create_instance.py')
-rw-r--r--snaps/openstack/create_instance.py45
1 files changed, 21 insertions, 24 deletions
diff --git a/snaps/openstack/create_instance.py b/snaps/openstack/create_instance.py
index 997b5a5..252f2fe 100644
--- a/snaps/openstack/create_instance.py
+++ b/snaps/openstack/create_instance.py
@@ -57,9 +57,6 @@ class OpenStackVmInstance:
self.image_settings = image_settings
self.keypair_settings = keypair_settings
- # TODO - get rid of FIP list and only use the dict(). Need to fix
- # populating this object when already exists
- self.__floating_ips = list()
self.__floating_ip_dict = dict()
# Instantiated in self.create()
@@ -102,13 +99,14 @@ class OpenStackVmInstance:
logger.info(
'Found existing machine with name - %s',
self.instance_settings.name)
- fips = neutron_utils.get_floating_ips(self.__neutron)
- for fip in fips:
- for subnet_name, ips in server.networks.items():
- if fip.ip in ips:
- self.__floating_ips.append(fip)
- # TODO - Determine a means to associate to the FIP
- # configuration and add to FIP map
+
+ fips = neutron_utils.get_floating_ips(self.__neutron,
+ self.__ports)
+ for port_name, fip in fips:
+ settings = self.instance_settings.floating_ip_settings
+ for fip_setting in settings:
+ if port_name == fip_setting.port_name:
+ self.__floating_ip_dict[fip_setting.name] = fip
def __create_vm(self, block=False):
"""
@@ -170,7 +168,6 @@ class OpenStackVmInstance:
self.__neutron, floating_ip_setting.subnet_name)
floating_ip = neutron_utils.create_floating_ip(
self.__neutron, ext_gateway)
- self.__floating_ips.append(floating_ip)
self.__floating_ip_dict[floating_ip_setting.name] = floating_ip
logger.info(
@@ -204,13 +201,12 @@ class OpenStackVmInstance:
"""
# Cleanup floating IPs
- for floating_ip in self.__floating_ips:
+ for name, floating_ip in self.__floating_ip_dict.items():
try:
logger.info('Deleting Floating IP - ' + floating_ip.ip)
neutron_utils.delete_floating_ip(self.__neutron, floating_ip)
except Exception as e:
logger.error('Error deleting Floating IP - ' + str(e))
- self.__floating_ips = list()
self.__floating_ip_dict = dict()
# Cleanup ports
@@ -266,7 +262,7 @@ class OpenStackVmInstance:
port = neutron_utils.get_port_by_name(self.__neutron,
port_setting.name)
if port:
- ports.append((port_setting.name, {'port': port}))
+ ports.append((port_setting.name, port))
elif not cleanup:
# Exception will be raised when port with same name already
# exists
@@ -287,8 +283,8 @@ class OpenStackVmInstance:
if subnet:
# Take IP of subnet if there is one configured on which to place
# the floating IP
- for fixed_ip in port.fixed_ips:
- if fixed_ip['subnet_id'] == subnet['subnet']['id']:
+ for fixed_ip in port.ips:
+ if fixed_ip['subnet_id'] == subnet.id:
ip = fixed_ip['ip_address']
break
else:
@@ -408,7 +404,7 @@ class OpenStackVmInstance:
more than one configured port
:return: the value returned by ansible_utils.apply_ansible_playbook()
"""
- if len(self.__ports) > 1 and len(self.__floating_ips) > 0:
+ if len(self.__ports) > 1 and len(self.__floating_ip_dict) > 0:
if self.vm_active(block=True) and self.vm_ssh_active(block=True):
for key, port in self.__ports:
port_index = self.__ports.index((key, port))
@@ -432,8 +428,9 @@ class OpenStackVmInstance:
fip = self.__floating_ip_dict.get(floating_ip_setting.name)
if fip:
return fip
- elif len(self.__floating_ips) > 0:
- return self.__floating_ips[0]
+ elif len(self.__floating_ip_dict) > 0:
+ for key, fip in self.__floating_ip_dict.items():
+ return fip
def __config_nic(self, nic_name, port, ip):
"""
@@ -615,7 +612,7 @@ class OpenStackVmInstance:
Returns True when can create a SSH session else False
:return: T/F
"""
- if len(self.__floating_ips) > 0:
+ if len(self.__floating_ip_dict) > 0:
ssh = self.ssh_client()
if ssh:
ssh.close()
@@ -632,9 +629,8 @@ class OpenStackVmInstance:
fip = None
if fip_name and self.__floating_ip_dict.get(fip_name):
return self.__floating_ip_dict.get(fip_name)
- if not fip and len(self.__floating_ips) > 0:
- return self.__floating_ips[0]
- return None
+ if not fip:
+ return self.__get_first_provisioning_floating_ip()
def ssh_client(self, fip_name=None):
"""
@@ -646,7 +642,8 @@ class OpenStackVmInstance:
fip = self.get_floating_ip(fip_name)
if fip:
return ansible_utils.ssh_client(
- self.__floating_ips[0].ip, self.get_image_user(),
+ self.__get_first_provisioning_floating_ip().ip,
+ self.get_image_user(),
self.keypair_settings.private_filepath,
proxy_settings=self.__os_creds.proxy_settings)
else: