ovsdb: attempt to enable connection_uri for native impl on startup
The port is in most cases disabled, so to use it, we should first enable it, and it means that we should still rely on ovs-vsctl for that initial call. Closes-Bug: #1468259 Change-Id: I097b1c441df1f7f1785b8744f27809617bb21c14
This commit is contained in:
parent
6b9fd15072
commit
2e1b0ea403
@ -23,6 +23,7 @@ from ovs.db import idl
|
|||||||
from neutron.agent.ovsdb import api
|
from neutron.agent.ovsdb import api
|
||||||
from neutron.agent.ovsdb.native import commands as cmd
|
from neutron.agent.ovsdb.native import commands as cmd
|
||||||
from neutron.agent.ovsdb.native import connection
|
from neutron.agent.ovsdb.native import connection
|
||||||
|
from neutron.agent.ovsdb.native import helpers
|
||||||
from neutron.agent.ovsdb.native import idlutils
|
from neutron.agent.ovsdb.native import idlutils
|
||||||
from neutron.i18n import _LE
|
from neutron.i18n import _LE
|
||||||
|
|
||||||
@ -122,6 +123,11 @@ class OvsdbIdl(api.API):
|
|||||||
|
|
||||||
def __init__(self, context):
|
def __init__(self, context):
|
||||||
super(OvsdbIdl, self).__init__(context)
|
super(OvsdbIdl, self).__init__(context)
|
||||||
|
# it's a chicken and egg problem: by default, the manager that
|
||||||
|
# corresponds to the connection URI is in most cases not enabled in
|
||||||
|
# local ovsdb, so we still need ovs-vsctl to set it to allow
|
||||||
|
# connections
|
||||||
|
helpers.enable_connection_uri(self.ovsdb_connection.connection)
|
||||||
OvsdbIdl.ovsdb_connection.start()
|
OvsdbIdl.ovsdb_connection.start()
|
||||||
self.idl = OvsdbIdl.ovsdb_connection.idl
|
self.idl = OvsdbIdl.ovsdb_connection.idl
|
||||||
|
|
||||||
|
29
neutron/agent/ovsdb/native/helpers.py
Normal file
29
neutron/agent/ovsdb/native/helpers.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# Copyright (c) 2015 Red Hat, Inc.
|
||||||
|
#
|
||||||
|
# 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 neutron.agent.common import utils
|
||||||
|
|
||||||
|
|
||||||
|
def _connection_to_manager_uri(conn_uri):
|
||||||
|
proto, addr = conn_uri.split(':', 1)
|
||||||
|
if ':' in addr:
|
||||||
|
ip, port = addr.split(':', 1)
|
||||||
|
return 'p%s:%s:%s' % (proto, port, ip)
|
||||||
|
else:
|
||||||
|
return 'p%s:%s' % (proto, addr)
|
||||||
|
|
||||||
|
|
||||||
|
def enable_connection_uri(conn_uri):
|
||||||
|
manager_uri = _connection_to_manager_uri(conn_uri)
|
||||||
|
utils.execute(['ovs-vsctl', 'set-manager', manager_uri], run_as_root=True)
|
0
neutron/tests/unit/agent/ovsdb/__init__.py
Normal file
0
neutron/tests/unit/agent/ovsdb/__init__.py
Normal file
0
neutron/tests/unit/agent/ovsdb/native/__init__.py
Normal file
0
neutron/tests/unit/agent/ovsdb/native/__init__.py
Normal file
43
neutron/tests/unit/agent/ovsdb/native/test_helpers.py
Normal file
43
neutron/tests/unit/agent/ovsdb/native/test_helpers.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# Copyright 2015, Red Hat, Inc.
|
||||||
|
#
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
import mock
|
||||||
|
|
||||||
|
from neutron.agent.ovsdb.native import helpers
|
||||||
|
from neutron.tests import base
|
||||||
|
|
||||||
|
|
||||||
|
CONNECTION_TO_MANAGER_URI_MAP = (
|
||||||
|
('unix:/path/to/file', 'punix:/path/to/file'),
|
||||||
|
('tcp:127.0.0.1:6640', 'ptcp:6640:127.0.0.1'),
|
||||||
|
('ssl:192.168.1.1:8080', 'pssl:8080:192.168.1.1'))
|
||||||
|
|
||||||
|
|
||||||
|
class TestOVSNativeHelpers(base.BaseTestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestOVSNativeHelpers, self).setUp()
|
||||||
|
self.execute = mock.patch('neutron.agent.common.utils.execute').start()
|
||||||
|
|
||||||
|
def test__connection_to_manager_uri(self):
|
||||||
|
for conn_uri, expected in CONNECTION_TO_MANAGER_URI_MAP:
|
||||||
|
self.assertEqual(expected,
|
||||||
|
helpers._connection_to_manager_uri(conn_uri))
|
||||||
|
|
||||||
|
def test_enable_connection_uri(self):
|
||||||
|
for conn_uri, manager_uri in CONNECTION_TO_MANAGER_URI_MAP:
|
||||||
|
helpers.enable_connection_uri(conn_uri)
|
||||||
|
self.execute.assert_called_with(
|
||||||
|
['ovs-vsctl', 'set-manager', manager_uri],
|
||||||
|
run_as_root=True)
|
@ -222,9 +222,6 @@ function _install_post_devstack {
|
|||||||
# NOTE: the package name 'python-openvswitch' is common across
|
# NOTE: the package name 'python-openvswitch' is common across
|
||||||
# supported distros.
|
# supported distros.
|
||||||
install_package python-openvswitch
|
install_package python-openvswitch
|
||||||
|
|
||||||
# Configure ovs-vsctl to be reachable via the standard ovsdb port.
|
|
||||||
sudo ovs-vsctl set-manager ptcp:6640:127.0.0.1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user