Merge "Update VPN logging to use new i18n functions"
This commit is contained in:
commit
b04bfbf107
@ -28,6 +28,7 @@ from neutron.db.vpn import vpn_validator
|
|||||||
from neutron.extensions import vpnaas
|
from neutron.extensions import vpnaas
|
||||||
from neutron import manager
|
from neutron import manager
|
||||||
from neutron.openstack.common import excutils
|
from neutron.openstack.common import excutils
|
||||||
|
from neutron.openstack.common.gettextutils import _LW
|
||||||
from neutron.openstack.common import log as logging
|
from neutron.openstack.common import log as logging
|
||||||
from neutron.openstack.common import uuidutils
|
from neutron.openstack.common import uuidutils
|
||||||
from neutron.plugins.common import constants
|
from neutron.plugins.common import constants
|
||||||
@ -646,7 +647,7 @@ class VPNPluginRpcDbMixin():
|
|||||||
vpnservice_db = self._get_vpnservice(
|
vpnservice_db = self._get_vpnservice(
|
||||||
context, vpnservice['id'])
|
context, vpnservice['id'])
|
||||||
except vpnaas.VPNServiceNotFound:
|
except vpnaas.VPNServiceNotFound:
|
||||||
LOG.warn(_('vpnservice %s in db is already deleted'),
|
LOG.warn(_LW('vpnservice %s in db is already deleted'),
|
||||||
vpnservice['id'])
|
vpnservice['id'])
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ import requests
|
|||||||
from requests import exceptions as r_exc
|
from requests import exceptions as r_exc
|
||||||
|
|
||||||
from neutron.openstack.common import jsonutils
|
from neutron.openstack.common import jsonutils
|
||||||
|
from neutron.openstack.common.gettextutils import _LE, _LW
|
||||||
from neutron.openstack.common import log as logging
|
from neutron.openstack.common import log as logging
|
||||||
|
|
||||||
|
|
||||||
@ -84,7 +85,7 @@ class CsrRestClient(object):
|
|||||||
and 'detail' fields).
|
and 'detail' fields).
|
||||||
"""
|
"""
|
||||||
if method in ('POST', 'GET') and self.status == requests.codes.OK:
|
if method in ('POST', 'GET') and self.status == requests.codes.OK:
|
||||||
LOG.debug(_('RESPONSE: %s'), response.json())
|
LOG.debug('RESPONSE: %s', response.json())
|
||||||
return response.json()
|
return response.json()
|
||||||
if method == 'POST' and self.status == requests.codes.CREATED:
|
if method == 'POST' and self.status == requests.codes.CREATED:
|
||||||
return response.headers.get('location', '')
|
return response.headers.get('location', '')
|
||||||
@ -97,21 +98,21 @@ class CsrRestClient(object):
|
|||||||
def _request(self, method, url, **kwargs):
|
def _request(self, method, url, **kwargs):
|
||||||
"""Perform REST request and save response info."""
|
"""Perform REST request and save response info."""
|
||||||
try:
|
try:
|
||||||
LOG.debug(_("%(method)s: Request for %(resource)s payload: "
|
LOG.debug("%(method)s: Request for %(resource)s payload: "
|
||||||
"%(payload)s"),
|
"%(payload)s",
|
||||||
{'method': method.upper(), 'resource': url,
|
{'method': method.upper(), 'resource': url,
|
||||||
'payload': kwargs.get('data')})
|
'payload': kwargs.get('data')})
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
response = self.session.request(method, url, verify=False,
|
response = self.session.request(method, url, verify=False,
|
||||||
timeout=self.timeout, **kwargs)
|
timeout=self.timeout, **kwargs)
|
||||||
LOG.debug(_("%(method)s Took %(time).2f seconds to process"),
|
LOG.debug("%(method)s Took %(time).2f seconds to process",
|
||||||
{'method': method.upper(),
|
{'method': method.upper(),
|
||||||
'time': time.time() - start_time})
|
'time': time.time() - start_time})
|
||||||
except (r_exc.Timeout, r_exc.SSLError) as te:
|
except (r_exc.Timeout, r_exc.SSLError) as te:
|
||||||
# Should never see SSLError, unless requests package is old (<2.0)
|
# Should never see SSLError, unless requests package is old (<2.0)
|
||||||
timeout_val = 0.0 if self.timeout is None else self.timeout
|
timeout_val = 0.0 if self.timeout is None else self.timeout
|
||||||
LOG.warning(_("%(method)s: Request timeout%(ssl)s "
|
LOG.warning(_LW("%(method)s: Request timeout%(ssl)s "
|
||||||
"(%(timeout).3f sec) for CSR(%(host)s)"),
|
"(%(timeout).3f sec) for CSR(%(host)s)"),
|
||||||
{'method': method,
|
{'method': method,
|
||||||
'timeout': timeout_val,
|
'timeout': timeout_val,
|
||||||
'ssl': '(SSLError)'
|
'ssl': '(SSLError)'
|
||||||
@ -119,17 +120,18 @@ class CsrRestClient(object):
|
|||||||
'host': self.host})
|
'host': self.host})
|
||||||
self.status = requests.codes.REQUEST_TIMEOUT
|
self.status = requests.codes.REQUEST_TIMEOUT
|
||||||
except r_exc.ConnectionError:
|
except r_exc.ConnectionError:
|
||||||
LOG.exception(_("%(method)s: Unable to connect to CSR(%(host)s)"),
|
LOG.exception(_LE("%(method)s: Unable to connect to "
|
||||||
|
"CSR(%(host)s)"),
|
||||||
{'method': method, 'host': self.host})
|
{'method': method, 'host': self.host})
|
||||||
self.status = requests.codes.NOT_FOUND
|
self.status = requests.codes.NOT_FOUND
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
LOG.error(_("%(method)s: Unexpected error for CSR (%(host)s): "
|
LOG.error(_LE("%(method)s: Unexpected error for CSR (%(host)s): "
|
||||||
"%(error)s"),
|
"%(error)s"),
|
||||||
{'method': method, 'host': self.host, 'error': e})
|
{'method': method, 'host': self.host, 'error': e})
|
||||||
self.status = requests.codes.INTERNAL_SERVER_ERROR
|
self.status = requests.codes.INTERNAL_SERVER_ERROR
|
||||||
else:
|
else:
|
||||||
self.status = response.status_code
|
self.status = response.status_code
|
||||||
LOG.debug(_("%(method)s: Completed [%(status)s]"),
|
LOG.debug("%(method)s: Completed [%(status)s]",
|
||||||
{'method': method, 'status': self.status})
|
{'method': method, 'status': self.status})
|
||||||
return self._response_info_for(response, method)
|
return self._response_info_for(response, method)
|
||||||
|
|
||||||
@ -144,16 +146,16 @@ class CsrRestClient(object):
|
|||||||
headers = {'Content-Length': '0',
|
headers = {'Content-Length': '0',
|
||||||
'Accept': 'application/json'}
|
'Accept': 'application/json'}
|
||||||
headers.update(HEADER_CONTENT_TYPE_JSON)
|
headers.update(HEADER_CONTENT_TYPE_JSON)
|
||||||
LOG.debug(_("%(auth)s with CSR %(host)s"),
|
LOG.debug("%(auth)s with CSR %(host)s",
|
||||||
{'auth': 'Authenticating' if self.token is None
|
{'auth': 'Authenticating' if self.token is None
|
||||||
else 'Reauthenticating', 'host': self.host})
|
else 'Reauthenticating', 'host': self.host})
|
||||||
self.token = None
|
self.token = None
|
||||||
response = self._request("POST", url, headers=headers, auth=self.auth)
|
response = self._request("POST", url, headers=headers, auth=self.auth)
|
||||||
if response:
|
if response:
|
||||||
self.token = response['token-id']
|
self.token = response['token-id']
|
||||||
LOG.debug(_("Successfully authenticated with CSR %s"), self.host)
|
LOG.debug("Successfully authenticated with CSR %s", self.host)
|
||||||
return True
|
return True
|
||||||
LOG.error(_("Failed authentication with CSR %(host)s [%(status)s]"),
|
LOG.error(_LE("Failed authentication with CSR %(host)s [%(status)s]"),
|
||||||
{'host': self.host, 'status': self.status})
|
{'host': self.host, 'status': self.status})
|
||||||
|
|
||||||
def _do_request(self, method, resource, payload=None, more_headers=None,
|
def _do_request(self, method, resource, payload=None, more_headers=None,
|
||||||
@ -188,7 +190,7 @@ class CsrRestClient(object):
|
|||||||
headers=headers)
|
headers=headers)
|
||||||
if self.status != requests.codes.REQUEST_TIMEOUT:
|
if self.status != requests.codes.REQUEST_TIMEOUT:
|
||||||
return response
|
return response
|
||||||
LOG.error(_("%(method)s: Request timeout for CSR(%(host)s)"),
|
LOG.error(_LE("%(method)s: Request timeout for CSR(%(host)s)"),
|
||||||
{'method': method, 'host': self.host})
|
{'method': method, 'host': self.host})
|
||||||
|
|
||||||
def get_request(self, resource, full_url=False):
|
def get_request(self, resource, full_url=False):
|
||||||
|
@ -23,6 +23,7 @@ import six
|
|||||||
from neutron.common import exceptions
|
from neutron.common import exceptions
|
||||||
from neutron.common import rpc as n_rpc
|
from neutron.common import rpc as n_rpc
|
||||||
from neutron import context as ctx
|
from neutron import context as ctx
|
||||||
|
from neutron.openstack.common.gettextutils import _LE, _LI, _LW
|
||||||
from neutron.openstack.common import lockutils
|
from neutron.openstack.common import lockutils
|
||||||
from neutron.openstack.common import log as logging
|
from neutron.openstack.common import log as logging
|
||||||
from neutron.openstack.common import loopingcall
|
from neutron.openstack.common import loopingcall
|
||||||
@ -125,7 +126,7 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver):
|
|||||||
|
|
||||||
def vpnservice_updated(self, context, **kwargs):
|
def vpnservice_updated(self, context, **kwargs):
|
||||||
"""Handle VPNaaS service driver change notifications."""
|
"""Handle VPNaaS service driver change notifications."""
|
||||||
LOG.debug(_("Handling VPN service update notification '%s'"),
|
LOG.debug("Handling VPN service update notification '%s'",
|
||||||
kwargs.get('reason', ''))
|
kwargs.get('reason', ''))
|
||||||
self.sync(context, [])
|
self.sync(context, [])
|
||||||
|
|
||||||
@ -147,20 +148,20 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver):
|
|||||||
ipsec_conn = vpn_service.conn_state[conn_id]
|
ipsec_conn = vpn_service.conn_state[conn_id]
|
||||||
config_changed = ipsec_conn.check_for_changes(conn_data)
|
config_changed = ipsec_conn.check_for_changes(conn_data)
|
||||||
if config_changed:
|
if config_changed:
|
||||||
LOG.debug(_("Update: Existing connection %s changed"), conn_id)
|
LOG.debug("Update: Existing connection %s changed", conn_id)
|
||||||
ipsec_conn.delete_ipsec_site_connection(context, conn_id)
|
ipsec_conn.delete_ipsec_site_connection(context, conn_id)
|
||||||
ipsec_conn.create_ipsec_site_connection(context, conn_data)
|
ipsec_conn.create_ipsec_site_connection(context, conn_data)
|
||||||
ipsec_conn.conn_info = conn_data
|
ipsec_conn.conn_info = conn_data
|
||||||
|
|
||||||
if ipsec_conn.forced_down:
|
if ipsec_conn.forced_down:
|
||||||
if vpn_service.is_admin_up and conn_is_admin_up:
|
if vpn_service.is_admin_up and conn_is_admin_up:
|
||||||
LOG.debug(_("Update: Connection %s no longer admin down"),
|
LOG.debug("Update: Connection %s no longer admin down",
|
||||||
conn_id)
|
conn_id)
|
||||||
ipsec_conn.set_admin_state(is_up=True)
|
ipsec_conn.set_admin_state(is_up=True)
|
||||||
ipsec_conn.forced_down = False
|
ipsec_conn.forced_down = False
|
||||||
else:
|
else:
|
||||||
if not vpn_service.is_admin_up or not conn_is_admin_up:
|
if not vpn_service.is_admin_up or not conn_is_admin_up:
|
||||||
LOG.debug(_("Update: Connection %s forced to admin down"),
|
LOG.debug("Update: Connection %s forced to admin down",
|
||||||
conn_id)
|
conn_id)
|
||||||
ipsec_conn.set_admin_state(is_up=False)
|
ipsec_conn.set_admin_state(is_up=False)
|
||||||
ipsec_conn.forced_down = True
|
ipsec_conn.forced_down = True
|
||||||
@ -168,12 +169,12 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver):
|
|||||||
ipsec_conn = vpn_service.create_connection(conn_data)
|
ipsec_conn = vpn_service.create_connection(conn_data)
|
||||||
ipsec_conn.create_ipsec_site_connection(context, conn_data)
|
ipsec_conn.create_ipsec_site_connection(context, conn_data)
|
||||||
if not vpn_service.is_admin_up or not conn_is_admin_up:
|
if not vpn_service.is_admin_up or not conn_is_admin_up:
|
||||||
LOG.debug(_("Update: Created new connection %s in admin down "
|
LOG.debug("Update: Created new connection %s in admin down "
|
||||||
"state"), conn_id)
|
"state", conn_id)
|
||||||
ipsec_conn.set_admin_state(is_up=False)
|
ipsec_conn.set_admin_state(is_up=False)
|
||||||
ipsec_conn.forced_down = True
|
ipsec_conn.forced_down = True
|
||||||
else:
|
else:
|
||||||
LOG.debug(_("Update: Created new connection %s"), conn_id)
|
LOG.debug("Update: Created new connection %s", conn_id)
|
||||||
|
|
||||||
ipsec_conn.is_dirty = False
|
ipsec_conn.is_dirty = False
|
||||||
ipsec_conn.last_status = conn_data['status']
|
ipsec_conn.last_status = conn_data['status']
|
||||||
@ -184,11 +185,11 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver):
|
|||||||
"""Handle notification for a single VPN Service and its connections."""
|
"""Handle notification for a single VPN Service and its connections."""
|
||||||
vpn_service_id = service_data['id']
|
vpn_service_id = service_data['id']
|
||||||
if vpn_service_id in self.service_state:
|
if vpn_service_id in self.service_state:
|
||||||
LOG.debug(_("Update: Existing VPN service %s detected"),
|
LOG.debug("Update: Existing VPN service %s detected",
|
||||||
vpn_service_id)
|
vpn_service_id)
|
||||||
vpn_service = self.service_state[vpn_service_id]
|
vpn_service = self.service_state[vpn_service_id]
|
||||||
else:
|
else:
|
||||||
LOG.debug(_("Update: New VPN service %s detected"), vpn_service_id)
|
LOG.debug("Update: New VPN service %s detected", vpn_service_id)
|
||||||
vpn_service = self.create_vpn_service(service_data)
|
vpn_service = self.create_vpn_service(service_data)
|
||||||
if not vpn_service:
|
if not vpn_service:
|
||||||
return
|
return
|
||||||
@ -199,7 +200,7 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver):
|
|||||||
vpn_service.is_admin_up = service_data[u'admin_state_up']
|
vpn_service.is_admin_up = service_data[u'admin_state_up']
|
||||||
for conn_data in service_data['ipsec_conns']:
|
for conn_data in service_data['ipsec_conns']:
|
||||||
self.update_connection(context, vpn_service_id, conn_data)
|
self.update_connection(context, vpn_service_id, conn_data)
|
||||||
LOG.debug(_("Update: Completed update processing"))
|
LOG.debug("Update: Completed update processing")
|
||||||
return vpn_service
|
return vpn_service
|
||||||
|
|
||||||
def update_all_services_and_connections(self, context):
|
def update_all_services_and_connections(self, context):
|
||||||
@ -229,9 +230,9 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver):
|
|||||||
for conn_id in service_state.conn_state:
|
for conn_id in service_state.conn_state:
|
||||||
service_state.conn_state[conn_id].is_dirty = True
|
service_state.conn_state[conn_id].is_dirty = True
|
||||||
connection_count += 1
|
connection_count += 1
|
||||||
LOG.debug(_("Mark: %(service)d VPN services and %(conn)d IPSec "
|
LOG.debug("Mark: %(service)d VPN services and %(conn)d IPSec "
|
||||||
"connections marked dirty"), {'service': service_count,
|
"connections marked dirty", {'service': service_count,
|
||||||
'conn': connection_count})
|
'conn': connection_count})
|
||||||
|
|
||||||
def remove_unknown_connections(self, context):
|
def remove_unknown_connections(self, context):
|
||||||
"""Remove connections that are not known by service driver."""
|
"""Remove connections that are not known by service driver."""
|
||||||
@ -251,8 +252,8 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver):
|
|||||||
del self.service_state[vpn_service_id]
|
del self.service_state[vpn_service_id]
|
||||||
elif dirty:
|
elif dirty:
|
||||||
self.connections_removed = True
|
self.connections_removed = True
|
||||||
LOG.debug(_("Sweep: Removed %(service)d dirty VPN service%(splural)s "
|
LOG.debug("Sweep: Removed %(service)d dirty VPN service%(splural)s "
|
||||||
"and %(conn)d dirty IPSec connection%(cplural)s"),
|
"and %(conn)d dirty IPSec connection%(cplural)s",
|
||||||
{'service': service_count, 'conn': connection_count,
|
{'service': service_count, 'conn': connection_count,
|
||||||
'splural': 's'[service_count == 1:],
|
'splural': 's'[service_count == 1:],
|
||||||
'cplural': 's'[connection_count == 1:]})
|
'cplural': 's'[connection_count == 1:]})
|
||||||
@ -266,22 +267,22 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver):
|
|||||||
report info will be created for the connection. The combined report
|
report info will be created for the connection. The combined report
|
||||||
data is returned.
|
data is returned.
|
||||||
"""
|
"""
|
||||||
LOG.debug(_("Report: Collecting status for IPSec connections on VPN "
|
LOG.debug("Report: Collecting status for IPSec connections on VPN "
|
||||||
"service %s"), vpn_service.service_id)
|
"service %s", vpn_service.service_id)
|
||||||
tunnels = vpn_service.get_ipsec_connections_status()
|
tunnels = vpn_service.get_ipsec_connections_status()
|
||||||
report = {}
|
report = {}
|
||||||
for connection in vpn_service.conn_state.values():
|
for connection in vpn_service.conn_state.values():
|
||||||
if connection.forced_down:
|
if connection.forced_down:
|
||||||
LOG.debug(_("Connection %s forced down"), connection.conn_id)
|
LOG.debug("Connection %s forced down", connection.conn_id)
|
||||||
current_status = constants.DOWN
|
current_status = constants.DOWN
|
||||||
else:
|
else:
|
||||||
current_status = connection.find_current_status_in(tunnels)
|
current_status = connection.find_current_status_in(tunnels)
|
||||||
LOG.debug(_("Connection %(conn)s reported %(status)s"),
|
LOG.debug("Connection %(conn)s reported %(status)s",
|
||||||
{'conn': connection.conn_id,
|
{'conn': connection.conn_id,
|
||||||
'status': current_status})
|
'status': current_status})
|
||||||
frag = connection.update_status_and_build_report(current_status)
|
frag = connection.update_status_and_build_report(current_status)
|
||||||
if frag:
|
if frag:
|
||||||
LOG.debug(_("Report: Adding info for IPSec connection %s"),
|
LOG.debug("Report: Adding info for IPSec connection %s",
|
||||||
connection.conn_id)
|
connection.conn_id)
|
||||||
report.update(frag)
|
report.update(frag)
|
||||||
return report
|
return report
|
||||||
@ -301,7 +302,7 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver):
|
|||||||
pending_handled = plugin_utils.in_pending_status(
|
pending_handled = plugin_utils.in_pending_status(
|
||||||
vpn_service.last_status)
|
vpn_service.last_status)
|
||||||
vpn_service.update_last_status()
|
vpn_service.update_last_status()
|
||||||
LOG.debug(_("Report: Adding info for VPN service %s"),
|
LOG.debug("Report: Adding info for VPN service %s",
|
||||||
vpn_service.service_id)
|
vpn_service.service_id)
|
||||||
return {u'id': vpn_service.service_id,
|
return {u'id': vpn_service.service_id,
|
||||||
u'status': vpn_service.last_status,
|
u'status': vpn_service.last_status,
|
||||||
@ -323,17 +324,17 @@ class CiscoCsrIPsecDriver(device_drivers.DeviceDriver):
|
|||||||
def report_status_internal(self, context):
|
def report_status_internal(self, context):
|
||||||
"""Generate report and send to plugin, if anything changed."""
|
"""Generate report and send to plugin, if anything changed."""
|
||||||
service_report = []
|
service_report = []
|
||||||
LOG.debug(_("Report: Starting status report processing"))
|
LOG.debug("Report: Starting status report processing")
|
||||||
for vpn_service_id, vpn_service in self.service_state.items():
|
for vpn_service_id, vpn_service in self.service_state.items():
|
||||||
LOG.debug(_("Report: Collecting status for VPN service %s"),
|
LOG.debug("Report: Collecting status for VPN service %s",
|
||||||
vpn_service_id)
|
vpn_service_id)
|
||||||
report = self.build_report_for_service(vpn_service)
|
report = self.build_report_for_service(vpn_service)
|
||||||
if report:
|
if report:
|
||||||
service_report.append(report)
|
service_report.append(report)
|
||||||
if service_report:
|
if service_report:
|
||||||
LOG.info(_("Sending status report update to plugin"))
|
LOG.info(_LI("Sending status report update to plugin"))
|
||||||
self.agent_rpc.update_status(context, service_report)
|
self.agent_rpc.update_status(context, service_report)
|
||||||
LOG.debug(_("Report: Completed status report processing"))
|
LOG.debug("Report: Completed status report processing")
|
||||||
return service_report
|
return service_report
|
||||||
|
|
||||||
@lockutils.synchronized('vpn-agent', 'neutron-')
|
@lockutils.synchronized('vpn-agent', 'neutron-')
|
||||||
@ -617,8 +618,8 @@ class CiscoCsrIPSecConnection(object):
|
|||||||
LOG.debug("%(resource)s %(which)s is configured",
|
LOG.debug("%(resource)s %(which)s is configured",
|
||||||
{'resource': resource, 'which': which})
|
{'resource': resource, 'which': which})
|
||||||
return
|
return
|
||||||
LOG.error(_("Unable to create %(resource)s %(which)s: "
|
LOG.error(_LE("Unable to create %(resource)s %(which)s: "
|
||||||
"%(status)d"),
|
"%(status)d"),
|
||||||
{'resource': resource, 'which': which,
|
{'resource': resource, 'which': which,
|
||||||
'status': self.csr.status})
|
'status': self.csr.status})
|
||||||
# ToDO(pcm): Set state to error
|
# ToDO(pcm): Set state to error
|
||||||
@ -630,7 +631,7 @@ class CiscoCsrIPSecConnection(object):
|
|||||||
try:
|
try:
|
||||||
getattr(self.csr, create_action)(info)
|
getattr(self.csr, create_action)(info)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
LOG.exception(_("Internal error - '%s' is not defined"),
|
LOG.exception(_LE("Internal error - '%s' is not defined"),
|
||||||
create_action)
|
create_action)
|
||||||
raise CsrResourceCreateFailure(resource=title,
|
raise CsrResourceCreateFailure(resource=title,
|
||||||
which=resource_id)
|
which=resource_id)
|
||||||
@ -643,22 +644,22 @@ class CiscoCsrIPSecConnection(object):
|
|||||||
LOG.debug("%(resource)s configuration %(which)s was removed",
|
LOG.debug("%(resource)s configuration %(which)s was removed",
|
||||||
{'resource': resource, 'which': which})
|
{'resource': resource, 'which': which})
|
||||||
else:
|
else:
|
||||||
LOG.warning(_("Unable to delete %(resource)s %(which)s: "
|
LOG.warning(_LW("Unable to delete %(resource)s %(which)s: "
|
||||||
"%(status)d"), {'resource': resource,
|
"%(status)d"), {'resource': resource,
|
||||||
'which': which,
|
'which': which,
|
||||||
'status': status})
|
'status': status})
|
||||||
|
|
||||||
def do_rollback(self):
|
def do_rollback(self):
|
||||||
"""Undo create steps that were completed successfully."""
|
"""Undo create steps that were completed successfully."""
|
||||||
for step in reversed(self.steps):
|
for step in reversed(self.steps):
|
||||||
delete_action = 'delete_%s' % step.action
|
delete_action = 'delete_%s' % step.action
|
||||||
LOG.debug(_("Performing rollback action %(action)s for "
|
LOG.debug("Performing rollback action %(action)s for "
|
||||||
"resource %(resource)s"), {'action': delete_action,
|
"resource %(resource)s", {'action': delete_action,
|
||||||
'resource': step.title})
|
'resource': step.title})
|
||||||
try:
|
try:
|
||||||
getattr(self.csr, delete_action)(step.resource_id)
|
getattr(self.csr, delete_action)(step.resource_id)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
LOG.exception(_("Internal error - '%s' is not defined"),
|
LOG.exception(_LE("Internal error - '%s' is not defined"),
|
||||||
delete_action)
|
delete_action)
|
||||||
raise CsrResourceCreateFailure(resource=step.title,
|
raise CsrResourceCreateFailure(resource=step.title,
|
||||||
which=step.resource_id)
|
which=step.resource_id)
|
||||||
@ -678,7 +679,7 @@ class CiscoCsrIPSecConnection(object):
|
|||||||
ike_policy_id = conn_info['cisco']['ike_policy_id']
|
ike_policy_id = conn_info['cisco']['ike_policy_id']
|
||||||
ipsec_policy_id = conn_info['cisco']['ipsec_policy_id']
|
ipsec_policy_id = conn_info['cisco']['ipsec_policy_id']
|
||||||
|
|
||||||
LOG.debug(_('Creating IPSec connection %s'), conn_id)
|
LOG.debug('Creating IPSec connection %s', conn_id)
|
||||||
# Get all the attributes needed to create
|
# Get all the attributes needed to create
|
||||||
try:
|
try:
|
||||||
psk_info = self.create_psk_info(psk_id, conn_info)
|
psk_info = self.create_psk_info(psk_id, conn_info)
|
||||||
@ -711,10 +712,10 @@ class CiscoCsrIPSecConnection(object):
|
|||||||
route_id, 'Static Route')
|
route_id, 'Static Route')
|
||||||
except CsrResourceCreateFailure:
|
except CsrResourceCreateFailure:
|
||||||
self.do_rollback()
|
self.do_rollback()
|
||||||
LOG.info(_("FAILED: Create of IPSec site-to-site connection %s"),
|
LOG.info(_LI("FAILED: Create of IPSec site-to-site connection %s"),
|
||||||
conn_id)
|
conn_id)
|
||||||
else:
|
else:
|
||||||
LOG.info(_("SUCCESS: Created IPSec site-to-site connection %s"),
|
LOG.info(_LI("SUCCESS: Created IPSec site-to-site connection %s"),
|
||||||
conn_id)
|
conn_id)
|
||||||
|
|
||||||
def delete_ipsec_site_connection(self, context, conn_id):
|
def delete_ipsec_site_connection(self, context, conn_id):
|
||||||
@ -723,13 +724,13 @@ class CiscoCsrIPSecConnection(object):
|
|||||||
This will be best effort and will continue, if there are any
|
This will be best effort and will continue, if there are any
|
||||||
failures.
|
failures.
|
||||||
"""
|
"""
|
||||||
LOG.debug(_('Deleting IPSec connection %s'), conn_id)
|
LOG.debug('Deleting IPSec connection %s', conn_id)
|
||||||
if not self.steps:
|
if not self.steps:
|
||||||
LOG.warning(_('Unable to find connection %s'), conn_id)
|
LOG.warning(_LW('Unable to find connection %s'), conn_id)
|
||||||
else:
|
else:
|
||||||
self.do_rollback()
|
self.do_rollback()
|
||||||
|
|
||||||
LOG.info(_("SUCCESS: Deleted IPSec site-to-site connection %s"),
|
LOG.info(_LI("SUCCESS: Deleted IPSec site-to-site connection %s"),
|
||||||
conn_id)
|
conn_id)
|
||||||
|
|
||||||
def set_admin_state(self, is_up):
|
def set_admin_state(self, is_up):
|
||||||
@ -737,6 +738,7 @@ class CiscoCsrIPSecConnection(object):
|
|||||||
self.csr.set_ipsec_connection_state(self.tunnel, admin_up=is_up)
|
self.csr.set_ipsec_connection_state(self.tunnel, admin_up=is_up)
|
||||||
if self.csr.status != requests.codes.NO_CONTENT:
|
if self.csr.status != requests.codes.NO_CONTENT:
|
||||||
state = "UP" if is_up else "DOWN"
|
state = "UP" if is_up else "DOWN"
|
||||||
LOG.error(_("Unable to change %(tunnel)s admin state to "
|
LOG.error(_LE("Unable to change %(tunnel)s admin state to "
|
||||||
"%(state)s"), {'tunnel': self.tunnel, 'state': state})
|
"%(state)s"), {'tunnel': self.tunnel,
|
||||||
|
'state': state})
|
||||||
raise CsrAdminStateChangeFailure(tunnel=self.tunnel, state=state)
|
raise CsrAdminStateChangeFailure(tunnel=self.tunnel, state=state)
|
||||||
|
@ -28,6 +28,7 @@ from neutron.agent.linux import ip_lib
|
|||||||
from neutron.agent.linux import utils
|
from neutron.agent.linux import utils
|
||||||
from neutron.common import rpc as n_rpc
|
from neutron.common import rpc as n_rpc
|
||||||
from neutron import context
|
from neutron import context
|
||||||
|
from neutron.openstack.common.gettextutils import _LE
|
||||||
from neutron.openstack.common import lockutils
|
from neutron.openstack.common import lockutils
|
||||||
from neutron.openstack.common import log as logging
|
from neutron.openstack.common import log as logging
|
||||||
from neutron.openstack.common import loopingcall
|
from neutron.openstack.common import loopingcall
|
||||||
@ -244,7 +245,7 @@ class BaseSwanProcess():
|
|||||||
self.start()
|
self.start()
|
||||||
except RuntimeError:
|
except RuntimeError:
|
||||||
LOG.exception(
|
LOG.exception(
|
||||||
_("Failed to enable vpn process on router %s"),
|
_LE("Failed to enable vpn process on router %s"),
|
||||||
self.id)
|
self.id)
|
||||||
|
|
||||||
def disable(self):
|
def disable(self):
|
||||||
@ -255,7 +256,7 @@ class BaseSwanProcess():
|
|||||||
self.remove_config()
|
self.remove_config()
|
||||||
except RuntimeError:
|
except RuntimeError:
|
||||||
LOG.exception(
|
LOG.exception(
|
||||||
_("Failed to disable vpn process on router %s"),
|
_LE("Failed to disable vpn process on router %s"),
|
||||||
self.id)
|
self.id)
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from neutron.db.vpn import vpn_db
|
from neutron.db.vpn import vpn_db
|
||||||
|
from neutron.openstack.common.gettextutils import _LI
|
||||||
from neutron.openstack.common import log as logging
|
from neutron.openstack.common import log as logging
|
||||||
from neutron.plugins.common import constants
|
from neutron.plugins.common import constants
|
||||||
from neutron.services import service_base
|
from neutron.services import service_base
|
||||||
@ -41,7 +42,7 @@ class VPNDriverPlugin(VPNPlugin, vpn_db.VPNPluginRpcDbMixin):
|
|||||||
# Load the service driver from neutron.conf.
|
# Load the service driver from neutron.conf.
|
||||||
drivers, default_provider = service_base.load_drivers(
|
drivers, default_provider = service_base.load_drivers(
|
||||||
constants.VPN, self)
|
constants.VPN, self)
|
||||||
LOG.info(_("VPN plugin using service driver: %s"), default_provider)
|
LOG.info(_LI("VPN plugin using service driver: %s"), default_provider)
|
||||||
self.ipsec_driver = drivers[default_provider]
|
self.ipsec_driver = drivers[default_provider]
|
||||||
|
|
||||||
def _get_driver_for_vpnservice(self, vpnservice):
|
def _get_driver_for_vpnservice(self, vpnservice):
|
||||||
|
@ -94,8 +94,8 @@ class BaseIPsecVpnAgentApi(n_rpc.RpcProxy):
|
|||||||
admin_state_up=True,
|
admin_state_up=True,
|
||||||
active=True)
|
active=True)
|
||||||
for l3_agent in l3_agents:
|
for l3_agent in l3_agents:
|
||||||
LOG.debug(_('Notify agent at %(topic)s.%(host)s the message '
|
LOG.debug('Notify agent at %(topic)s.%(host)s the message '
|
||||||
'%(method)s %(args)s'),
|
'%(method)s %(args)s',
|
||||||
{'topic': self.topic,
|
{'topic': self.topic,
|
||||||
'host': l3_agent.host,
|
'host': l3_agent.host,
|
||||||
'method': method,
|
'method': method,
|
||||||
|
@ -32,8 +32,7 @@ from oslo.config import cfg
|
|||||||
|
|
||||||
from neutron.db import l3_db
|
from neutron.db import l3_db
|
||||||
from neutron.db import models_v2
|
from neutron.db import models_v2
|
||||||
from neutron.openstack.common.gettextutils import _LE
|
from neutron.openstack.common.gettextutils import _LE, _LI
|
||||||
from neutron.openstack.common.gettextutils import _LI
|
|
||||||
from neutron.openstack.common import log as logging
|
from neutron.openstack.common import log as logging
|
||||||
from neutron.services.vpn.device_drivers import (
|
from neutron.services.vpn.device_drivers import (
|
||||||
cisco_csr_rest_client as csr_client)
|
cisco_csr_rest_client as csr_client)
|
||||||
@ -103,8 +102,8 @@ def get_available_csrs_from_config(config_files):
|
|||||||
try:
|
try:
|
||||||
netaddr.IPAddress(rest_mgmt_ip)
|
netaddr.IPAddress(rest_mgmt_ip)
|
||||||
except netaddr.core.AddrFormatError:
|
except netaddr.core.AddrFormatError:
|
||||||
LOG.error(_("Ignoring Cisco CSR for subnet %s - "
|
LOG.error(_LE("Ignoring Cisco CSR for subnet %s - "
|
||||||
"REST management is not an IP address"),
|
"REST management is not an IP address"),
|
||||||
for_router)
|
for_router)
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
|
@ -20,6 +20,7 @@ from neutron.common import exceptions
|
|||||||
from neutron.db import model_base
|
from neutron.db import model_base
|
||||||
from neutron.db import models_v2
|
from neutron.db import models_v2
|
||||||
from neutron.db.vpn import vpn_db
|
from neutron.db.vpn import vpn_db
|
||||||
|
from neutron.openstack.common.gettextutils import _LI
|
||||||
from neutron.openstack.common import log as logging
|
from neutron.openstack.common import log as logging
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
@ -156,10 +157,10 @@ def determine_csr_policy_id(policy_type, conn_policy_field, map_policy_field,
|
|||||||
then call lookup_policy() to find the current mapping for that ID.
|
then call lookup_policy() to find the current mapping for that ID.
|
||||||
"""
|
"""
|
||||||
csr_id = get_next_available_id(session, map_policy_field, policy_type)
|
csr_id = get_next_available_id(session, map_policy_field, policy_type)
|
||||||
LOG.debug(_("Reserved new CSR ID %(csr_id)d for %(policy)s "
|
LOG.debug("Reserved new CSR ID %(csr_id)d for %(policy)s "
|
||||||
"ID %(policy_id)s"), {'csr_id': csr_id,
|
"ID %(policy_id)s", {'csr_id': csr_id,
|
||||||
'policy': policy_type,
|
'policy': policy_type,
|
||||||
'policy_id': policy_id})
|
'policy_id': policy_id})
|
||||||
return csr_id
|
return csr_id
|
||||||
|
|
||||||
|
|
||||||
@ -183,9 +184,9 @@ def get_tunnel_mapping_for(conn_id, session):
|
|||||||
try:
|
try:
|
||||||
entry = session.query(IdentifierMap).filter_by(
|
entry = session.query(IdentifierMap).filter_by(
|
||||||
ipsec_site_conn_id=conn_id).one()
|
ipsec_site_conn_id=conn_id).one()
|
||||||
LOG.debug(_("Mappings for IPSec connection %(conn)s - "
|
LOG.debug("Mappings for IPSec connection %(conn)s - "
|
||||||
"tunnel=%(tunnel)s ike_policy=%(csr_ike)d "
|
"tunnel=%(tunnel)s ike_policy=%(csr_ike)d "
|
||||||
"ipsec_policy=%(csr_ipsec)d"),
|
"ipsec_policy=%(csr_ipsec)d",
|
||||||
{'conn': conn_id, 'tunnel': entry.csr_tunnel_id,
|
{'conn': conn_id, 'tunnel': entry.csr_tunnel_id,
|
||||||
'csr_ike': entry.csr_ike_policy_id,
|
'csr_ike': entry.csr_ike_policy_id,
|
||||||
'csr_ipsec': entry.csr_ipsec_policy_id})
|
'csr_ipsec': entry.csr_ipsec_policy_id})
|
||||||
@ -222,9 +223,9 @@ def create_tunnel_mapping(context, conn_info):
|
|||||||
msg = _("Attempt to create duplicate entry in Cisco CSR "
|
msg = _("Attempt to create duplicate entry in Cisco CSR "
|
||||||
"mapping table for connection %s") % conn_id
|
"mapping table for connection %s") % conn_id
|
||||||
raise CsrInternalError(reason=msg)
|
raise CsrInternalError(reason=msg)
|
||||||
LOG.info(_("Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d "
|
LOG.info(_LI("Mapped connection %(conn_id)s to Tunnel%(tunnel_id)d "
|
||||||
"using IKE policy ID %(ike_id)d and IPSec policy "
|
"using IKE policy ID %(ike_id)d and IPSec policy "
|
||||||
"ID %(ipsec_id)d"),
|
"ID %(ipsec_id)d"),
|
||||||
{'conn_id': conn_id, 'tunnel_id': csr_tunnel_id,
|
{'conn_id': conn_id, 'tunnel_id': csr_tunnel_id,
|
||||||
'ike_id': csr_ike_id, 'ipsec_id': csr_ipsec_id})
|
'ike_id': csr_ike_id, 'ipsec_id': csr_ipsec_id})
|
||||||
|
|
||||||
@ -234,4 +235,4 @@ def delete_tunnel_mapping(context, conn_info):
|
|||||||
with context.session.begin():
|
with context.session.begin():
|
||||||
sess_qry = context.session.query(IdentifierMap)
|
sess_qry = context.session.query(IdentifierMap)
|
||||||
sess_qry.filter_by(ipsec_site_conn_id=conn_id).delete()
|
sess_qry.filter_by(ipsec_site_conn_id=conn_id).delete()
|
||||||
LOG.info(_("Removed mapping for connection %s"), conn_id)
|
LOG.info(_LI("Removed mapping for connection %s"), conn_id)
|
||||||
|
@ -101,8 +101,8 @@ class CiscoCsrIPsecVpnAgentApi(service_drivers.BaseIPsecVpnAgentApi,
|
|||||||
# NOTE: This is a config error for workaround. At this point we
|
# NOTE: This is a config error for workaround. At this point we
|
||||||
# can't set state of resource to error.
|
# can't set state of resource to error.
|
||||||
return
|
return
|
||||||
LOG.debug(_('Notify agent at %(topic)s.%(host)s the message '
|
LOG.debug('Notify agent at %(topic)s.%(host)s the message '
|
||||||
'%(method)s %(args)s for router %(router)s'),
|
'%(method)s %(args)s for router %(router)s',
|
||||||
{'topic': self.topic,
|
{'topic': self.topic,
|
||||||
'host': host,
|
'host': host,
|
||||||
'method': method,
|
'method': method,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user