diff --git a/ironic_discoverd/node_cache.py b/ironic_discoverd/node_cache.py index cab2d33c9..226c4abf6 100644 --- a/ironic_discoverd/node_cache.py +++ b/ironic_discoverd/node_cache.py @@ -15,6 +15,7 @@ import json import logging +import os import sqlite3 import sys import time @@ -104,6 +105,9 @@ def init(): LOG.critical('Configuration option discoverd.database should be set') sys.exit(1) + db_dir = os.path.dirname(_DB_NAME) + if db_dir and not os.path.exists(db_dir): + os.makedirs(db_dir) sqlite3.connect(_DB_NAME).executescript(_SCHEMA) diff --git a/ironic_discoverd/test/test_node_cache.py b/ironic_discoverd/test/test_node_cache.py index 5cce4f794..14c0c2c2a 100644 --- a/ironic_discoverd/test/test_node_cache.py +++ b/ironic_discoverd/test/test_node_cache.py @@ -11,6 +11,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import os import tempfile import time import unittest @@ -268,6 +269,12 @@ class TestInit(unittest.TestCase): # Verify that table exists node_cache._db().execute("select * from nodes") + def test_create_dir(self): + temp = tempfile.mkdtemp() + conf.CONF.set('discoverd', 'database', + os.path.join(temp, 'dir', 'file')) + node_cache.init() + def test_no_database(self): self.assertRaises(SystemExit, node_cache.init)