]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
ovsdb: attempt to enable connection_uri for native impl on startup
authorIhar Hrachyshka <ihrachys@redhat.com>
Tue, 23 Jun 2015 15:33:38 +0000 (17:33 +0200)
committerIhar Hrachyshka <ihrachys@redhat.com>
Thu, 25 Jun 2015 08:09:42 +0000 (10:09 +0200)
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

neutron/agent/ovsdb/impl_idl.py
neutron/agent/ovsdb/native/helpers.py [new file with mode: 0644]
neutron/tests/unit/agent/ovsdb/__init__.py [new file with mode: 0644]
neutron/tests/unit/agent/ovsdb/native/__init__.py [new file with mode: 0644]
neutron/tests/unit/agent/ovsdb/native/test_helpers.py [new file with mode: 0644]
tools/configure_for_func_testing.sh

index 51ea96f17a31f82e11e1efe4d472f28c52d0188c..5b15472874d666442a9837afc845e3c771389bc4 100644 (file)
@@ -23,6 +23,7 @@ from ovs.db import idl
 from neutron.agent.ovsdb import api
 from neutron.agent.ovsdb.native import commands as cmd
 from neutron.agent.ovsdb.native import connection
+from neutron.agent.ovsdb.native import helpers
 from neutron.agent.ovsdb.native import idlutils
 from neutron.i18n import _LE
 
@@ -122,6 +123,11 @@ class OvsdbIdl(api.API):
 
     def __init__(self, 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()
         self.idl = OvsdbIdl.ovsdb_connection.idl
 
diff --git a/neutron/agent/ovsdb/native/helpers.py b/neutron/agent/ovsdb/native/helpers.py
new file mode 100644 (file)
index 0000000..0a4e426
--- /dev/null
@@ -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)
diff --git a/neutron/tests/unit/agent/ovsdb/__init__.py b/neutron/tests/unit/agent/ovsdb/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/neutron/tests/unit/agent/ovsdb/native/__init__.py b/neutron/tests/unit/agent/ovsdb/native/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/neutron/tests/unit/agent/ovsdb/native/test_helpers.py b/neutron/tests/unit/agent/ovsdb/native/test_helpers.py
new file mode 100644 (file)
index 0000000..41495e5
--- /dev/null
@@ -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)
index 3b4e124ac7fa0d99487a2aecc3a767327a6f5c77..9a9619241c470681db0f3ec0b722611e1f8b0032 100755 (executable)
@@ -222,9 +222,6 @@ function _install_post_devstack {
     # NOTE: the package name 'python-openvswitch' is common across
     # supported distros.
     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
 }