Merge "Multiple Neutron operations using script fails on Brocade Plugin"
This commit is contained in:
commit
05922007f0
@ -26,6 +26,7 @@ Neutron network life-cycle management.
|
|||||||
|
|
||||||
from ncclient import manager
|
from ncclient import manager
|
||||||
|
|
||||||
|
from neutron.openstack.common import excutils
|
||||||
from neutron.openstack.common import log as logging
|
from neutron.openstack.common import log as logging
|
||||||
from neutron.plugins.brocade.nos import nctemplates as template
|
from neutron.plugins.brocade.nos import nctemplates as template
|
||||||
|
|
||||||
@ -51,27 +52,40 @@ class NOSdriver():
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
pass
|
self.mgr = None
|
||||||
|
|
||||||
def connect(self, host, username, password):
|
def connect(self, host, username, password):
|
||||||
"""Connect via SSH and initialize the NETCONF session."""
|
"""Connect via SSH and initialize the NETCONF session."""
|
||||||
|
|
||||||
|
# Use the persisted NETCONF connection
|
||||||
|
if self.mgr and self.mgr.connected:
|
||||||
|
return self.mgr
|
||||||
|
|
||||||
|
# Open new NETCONF connection
|
||||||
try:
|
try:
|
||||||
mgr = manager.connect(host=host, port=SSH_PORT,
|
self.mgr = manager.connect(host=host, port=SSH_PORT,
|
||||||
username=username, password=password,
|
username=username, password=password,
|
||||||
unknown_host_cb=nos_unknown_host_cb)
|
unknown_host_cb=nos_unknown_host_cb)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
LOG.debug(_("Connect failed to switch: %s"), e)
|
LOG.error(_("Connect failed to switch: %s"), e)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
LOG.debug(_("Connect success to host %(host)s:%(ssh_port)d"),
|
LOG.debug(_("Connect success to host %(host)s:%(ssh_port)d"),
|
||||||
dict(host=host, ssh_port=SSH_PORT))
|
dict(host=host, ssh_port=SSH_PORT))
|
||||||
return mgr
|
return self.mgr
|
||||||
|
|
||||||
|
def close_session(self):
|
||||||
|
"""Close NETCONF session."""
|
||||||
|
if self.mgr:
|
||||||
|
self.mgr.close_session()
|
||||||
|
self.mgr = None
|
||||||
|
|
||||||
def create_network(self, host, username, password, net_id):
|
def create_network(self, host, username, password, net_id):
|
||||||
"""Creates a new virtual network."""
|
"""Creates a new virtual network."""
|
||||||
|
|
||||||
name = template.OS_PORT_PROFILE_NAME.format(id=net_id)
|
name = template.OS_PORT_PROFILE_NAME.format(id=net_id)
|
||||||
with self.connect(host, username, password) as mgr:
|
try:
|
||||||
|
mgr = self.connect(host, username, password)
|
||||||
self.create_vlan_interface(mgr, net_id)
|
self.create_vlan_interface(mgr, net_id)
|
||||||
self.create_port_profile(mgr, name)
|
self.create_port_profile(mgr, name)
|
||||||
self.create_vlan_profile_for_port_profile(mgr, name)
|
self.create_vlan_profile_for_port_profile(mgr, name)
|
||||||
@ -79,31 +93,50 @@ class NOSdriver():
|
|||||||
self.configure_trunk_mode_for_vlan_profile(mgr, name)
|
self.configure_trunk_mode_for_vlan_profile(mgr, name)
|
||||||
self.configure_allowed_vlans_for_vlan_profile(mgr, name, net_id)
|
self.configure_allowed_vlans_for_vlan_profile(mgr, name, net_id)
|
||||||
self.activate_port_profile(mgr, name)
|
self.activate_port_profile(mgr, name)
|
||||||
|
except Exception as ex:
|
||||||
|
with excutils.save_and_reraise_exception():
|
||||||
|
LOG.exception(_("NETCONF error: %s"), ex)
|
||||||
|
self.close_session()
|
||||||
|
|
||||||
def delete_network(self, host, username, password, net_id):
|
def delete_network(self, host, username, password, net_id):
|
||||||
"""Deletes a virtual network."""
|
"""Deletes a virtual network."""
|
||||||
|
|
||||||
name = template.OS_PORT_PROFILE_NAME.format(id=net_id)
|
name = template.OS_PORT_PROFILE_NAME.format(id=net_id)
|
||||||
with self.connect(host, username, password) as mgr:
|
try:
|
||||||
|
mgr = self.connect(host, username, password)
|
||||||
self.deactivate_port_profile(mgr, name)
|
self.deactivate_port_profile(mgr, name)
|
||||||
self.delete_port_profile(mgr, name)
|
self.delete_port_profile(mgr, name)
|
||||||
self.delete_vlan_interface(mgr, net_id)
|
self.delete_vlan_interface(mgr, net_id)
|
||||||
|
except Exception as ex:
|
||||||
|
with excutils.save_and_reraise_exception():
|
||||||
|
LOG.exception(_("NETCONF error: %s"), ex)
|
||||||
|
self.close_session()
|
||||||
|
|
||||||
def associate_mac_to_network(self, host, username, password,
|
def associate_mac_to_network(self, host, username, password,
|
||||||
net_id, mac):
|
net_id, mac):
|
||||||
"""Associates a MAC address to virtual network."""
|
"""Associates a MAC address to virtual network."""
|
||||||
|
|
||||||
name = template.OS_PORT_PROFILE_NAME.format(id=net_id)
|
name = template.OS_PORT_PROFILE_NAME.format(id=net_id)
|
||||||
with self.connect(host, username, password) as mgr:
|
try:
|
||||||
|
mgr = self.connect(host, username, password)
|
||||||
self.associate_mac_to_port_profile(mgr, name, mac)
|
self.associate_mac_to_port_profile(mgr, name, mac)
|
||||||
|
except Exception as ex:
|
||||||
|
with excutils.save_and_reraise_exception():
|
||||||
|
LOG.exception(_("NETCONF error: %s"), ex)
|
||||||
|
self.close_session()
|
||||||
|
|
||||||
def dissociate_mac_from_network(self, host, username, password,
|
def dissociate_mac_from_network(self, host, username, password,
|
||||||
net_id, mac):
|
net_id, mac):
|
||||||
"""Dissociates a MAC address from virtual network."""
|
"""Dissociates a MAC address from virtual network."""
|
||||||
|
|
||||||
name = template.OS_PORT_PROFILE_NAME.format(id=net_id)
|
name = template.OS_PORT_PROFILE_NAME.format(id=net_id)
|
||||||
with self.connect(host, username, password) as mgr:
|
try:
|
||||||
|
mgr = self.connect(host, username, password)
|
||||||
self.dissociate_mac_from_port_profile(mgr, name, mac)
|
self.dissociate_mac_from_port_profile(mgr, name, mac)
|
||||||
|
except Exception as ex:
|
||||||
|
with excutils.save_and_reraise_exception():
|
||||||
|
LOG.exception(_("NETCONF error: %s"), ex)
|
||||||
|
self.close_session()
|
||||||
|
|
||||||
def create_vlan_interface(self, mgr, vlan_id):
|
def create_vlan_interface(self, mgr, vlan_id):
|
||||||
"""Configures a VLAN interface."""
|
"""Configures a VLAN interface."""
|
||||||
|
Loading…
Reference in New Issue
Block a user