projects
/
osm
/
RO.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix error at some openstacks getting floating ip for neutron port
[osm/RO.git]
/
osm_ro
/
vimconn_openstack.py
diff --git
a/osm_ro/vimconn_openstack.py
b/osm_ro/vimconn_openstack.py
index
55f910b
..
43fdbc5
100644
(file)
--- a/
osm_ro/vimconn_openstack.py
+++ b/
osm_ro/vimconn_openstack.py
@@
-101,7
+101,14
@@
class vimconnector(vimconn.vimconnector):
vimconn.vimconnector.__init__(self, uuid, name, tenant_id, tenant_name, url, url_admin, user, passwd, log_level,
config)
vimconn.vimconnector.__init__(self, uuid, name, tenant_id, tenant_name, url, url_admin, user, passwd, log_level,
config)
- self.insecure = self.config.get("insecure", False)
+ if self.config.get("insecure") and self.config.get("ca_cert"):
+ raise vimconn.vimconnException("options insecure and ca_cert are mutually exclusive")
+ self.verify = True
+ if self.config.get("insecure"):
+ self.verify = False
+ if self.config.get("ca_cert"):
+ self.verify = self.config.get("ca_cert")
+
if not url:
raise TypeError('url param can not be NoneType')
self.persistent_info = persistent_info
if not url:
raise TypeError('url param can not be NoneType')
self.persistent_info = persistent_info
@@
-187,7
+194,7
@@
class vimconnector(vimconn.vimconnector):
password=self.passwd,
tenant_name=self.tenant_name,
tenant_id=self.tenant_id)
password=self.passwd,
tenant_name=self.tenant_name,
tenant_id=self.tenant_id)
- sess = session.Session(auth=auth, verify=
not self.insecure
)
+ sess = session.Session(auth=auth, verify=
self.verify
)
if self.api_version3:
self.keystone = ksClient_v3.Client(session=sess, endpoint_type=self.endpoint_type)
else:
if self.api_version3:
self.keystone = ksClient_v3.Client(session=sess, endpoint_type=self.endpoint_type)
else:
@@
-1064,7
+1071,7
@@
class vimconnector(vimconn.vimconnector):
# If port security is disabled when the port has not yet been attached to the VM, then all vm traffic is dropped.
# As a workaround we wait until the VM is active and then disable the port-security
# If port security is disabled when the port has not yet been attached to the VM, then all vm traffic is dropped.
# As a workaround we wait until the VM is active and then disable the port-security
- if net.get("port_security") == False:
+ if net.get("port_security") == False
and not self.config.get("no_port_security_extension")
:
no_secured_ports.append(new_port["port"]["id"])
# if metadata_vpci:
no_secured_ports.append(new_port["port"]["id"])
# if metadata_vpci:
@@
-1139,14
+1146,14
@@
class vimconnector(vimconn.vimconnector):
for port_id in no_secured_ports:
try:
for port_id in no_secured_ports:
try:
- self.neutron.update_port(port_id, {"port": {"port_security_enabled": False, "security_groups": None} })
+ self.neutron.update_port(port_id,
+ {"port": {"port_security_enabled": False, "security_groups": None}})
except Exception as e:
except Exception as e:
- self.logger.error("It was not possible to disable port security for port {}".format(port_id))
- raise
-
+ raise vimconn.vimconnException("It was not possible to disable port security for port {}".format(
+ port_id))
# print "DONE :-)", server
# print "DONE :-)", server
- pool_id = None
+
#
pool_id = None
if external_network:
floating_ips = self.neutron.list_floatingips().get("floatingips", ())
for floating_network in external_network:
if external_network:
floating_ips = self.neutron.list_floatingips().get("floatingips", ())
for floating_network in external_network:
@@
-1162,10
+1169,11
@@
class vimconnector(vimconn.vimconnector):
continue
free_floating_ip = ip.get("floating_ip_address")
else:
continue
free_floating_ip = ip.get("floating_ip_address")
else:
- if isinstance(floating_network['floating_ip'], str):
+ if isinstance(floating_network['floating_ip'], str) and \
+ floating_network['floating_ip'].lower() != "true":
pool_id = floating_network['floating_ip']
else:
pool_id = floating_network['floating_ip']
else:
- #Find the external network
+ #
Find the external network
external_nets = list()
for net in self.neutron.list_networks()['networks']:
if net['router:external']:
external_nets = list()
for net in self.neutron.list_networks()['networks']:
if net['router:external']:
@@
-1183,7
+1191,7
@@
class vimconnector(vimconn.vimconnector):
pool_id = external_nets[0].get('id')
param = {'floatingip': {'floating_network_id': pool_id, 'tenant_id': server.tenant_id}}
try:
pool_id = external_nets[0].get('id')
param = {'floatingip': {'floating_network_id': pool_id, 'tenant_id': server.tenant_id}}
try:
- #self.logger.debug("Creating floating IP")
+ #
self.logger.debug("Creating floating IP")
new_floating_ip = self.neutron.create_floatingip(param)
free_floating_ip = new_floating_ip['floatingip']['floating_ip_address']
except Exception as e:
new_floating_ip = self.neutron.create_floatingip(param)
free_floating_ip = new_floating_ip['floatingip']['floating_ip_address']
except Exception as e:
@@
-1196,13
+1204,15
@@
class vimconnector(vimconn.vimconnector):
server.add_floating_ip(free_floating_ip, fix_ip)
assigned = True
except Exception as e:
server.add_floating_ip(free_floating_ip, fix_ip)
assigned = True
except Exception as e:
+ # openstack need some time after VM creation to asign an IP. So retry if fails
vm_status = self.nova.servers.get(server.id).status
if vm_status != 'ACTIVE' and vm_status != 'ERROR':
if time.time() - vm_start_time < server_timeout:
time.sleep(5)
continue
vm_status = self.nova.servers.get(server.id).status
if vm_status != 'ACTIVE' and vm_status != 'ERROR':
if time.time() - vm_start_time < server_timeout:
time.sleep(5)
continue
- raise vimconn.vimconnException(type(e).__name__ + ": Cannot create floating_ip "+ str(e),
- http_code=vimconn.HTTP_Conflict)
+ raise vimconn.vimconnException(
+ "Cannot create floating_ip: {} {}".format(type(e).__name__, e),
+ http_code=vimconn.HTTP_Conflict)
except Exception as e:
if not floating_network['exit_on_floating_ip_error']:
except Exception as e:
if not floating_network['exit_on_floating_ip_error']:
@@
-1391,7
+1401,7
@@
class vimconnector(vimconn.vimconnector):
#get interfaces
try:
self._reload_connection()
#get interfaces
try:
self._reload_connection()
- port_dict
=
self.neutron.list_ports(device_id=vm_id)
+ port_dict
=
self.neutron.list_ports(device_id=vm_id)
for port in port_dict["ports"]:
interface={}
try:
for port in port_dict["ports"]:
interface={}
try:
@@
-1425,16
+1435,20
@@
class vimconnector(vimconn.vimconnector):
interface["vlan"] = network['network'].get('provider:segmentation_id')
ips=[]
#look for floating ip address
interface["vlan"] = network['network'].get('provider:segmentation_id')
ips=[]
#look for floating ip address
- floating_ip_dict = self.neutron.list_floatingips(port_id=port["id"])
- if floating_ip_dict.get("floatingips"):
- ips.append(floating_ip_dict["floatingips"][0].get("floating_ip_address") )
+ try:
+ floating_ip_dict = self.neutron.list_floatingips(port_id=port["id"])
+ if floating_ip_dict.get("floatingips"):
+ ips.append(floating_ip_dict["floatingips"][0].get("floating_ip_address") )
+ except Exception:
+ pass
for subnet in port["fixed_ips"]:
ips.append(subnet["ip_address"])
interface["ip_address"] = ";".join(ips)
vm["interfaces"].append(interface)
except Exception as e:
for subnet in port["fixed_ips"]:
ips.append(subnet["ip_address"])
interface["ip_address"] = ";".join(ips)
vm["interfaces"].append(interface)
except Exception as e:
- self.logger.error("Error getting vm interface information " + type(e).__name__ + ": "+ str(e))
+ self.logger.error("Error getting vm interface information {}: {}".format(type(e).__name__, e),
+ exc_info=True)
except vimconn.vimconnNotFoundException as e:
self.logger.error("Exception getting vm status: %s", str(e))
vm['status'] = "DELETED"
except vimconn.vimconnNotFoundException as e:
self.logger.error("Exception getting vm status: %s", str(e))
vm['status'] = "DELETED"