Load container driver from entry point

Change-Id: I66fed92c4f67b4552aca3bd8d81b6dda32d70442
This commit is contained in:
Hongbin Lu 2020-01-18 22:16:59 +00:00
parent b0f8488d95
commit 9f7922a7ca
6 changed files with 36 additions and 8 deletions

View File

@ -174,7 +174,7 @@ function create_zun_conf {
# (Re)create ``zun.conf``
rm -f $ZUN_CONF
if [[ ${ZUN_DRIVER} == "docker" ]]; then
iniset $ZUN_CONF DEFAULT container_driver docker.driver.DockerDriver
iniset $ZUN_CONF DEFAULT container_driver docker
fi
iniset $ZUN_CONF DEFAULT debug "$ENABLE_DEBUG_LOG_LEVEL"
if [[ $SERVICE_IP_VERSION == 6 ]]; then

View File

@ -0,0 +1,11 @@
---
upgrade:
- |
Starting from this release, container driver is loaded from entry point.
Deployers should specify the entry point (i.e. ``docker``) in config option
``container_driver`` under ``[DEFAULT]`` session.
deprecations:
- |
Specifying container driver class via config option ``container_driver``
is deprecated. Use driver name in entry point ``zun.container.driver``
instead.

View File

@ -68,6 +68,10 @@ zun.scheduler.driver =
fake_scheduler = zun.tests.unit.scheduler.fakes:FakeScheduler
filter_scheduler = zun.scheduler.filter_scheduler:FilterScheduler
zun.container.driver =
docker = zun.container.docker.driver:DockerDriver
fake = zun.tests.unit.container.fake_driver:FakeDriver
zun.image.driver =
glance = zun.image.glance.driver:GlanceDriver
docker = zun.image.docker.driver:DockerDriver

View File

@ -15,11 +15,11 @@ from oslo_config import cfg
driver_opts = [
cfg.StrOpt('container_driver',
default='docker.driver.DockerDriver',
default='docker',
help="""Defines which driver to use for controlling container.
Possible values:
* ``docker.driver.DockerDriver``
* ``docker``
Services which consume this:

View File

@ -18,6 +18,7 @@ import os_resource_classes as orc
from oslo_log import log as logging
from oslo_utils import importutils
from oslo_utils import units
from stevedore import driver as stevedore_driver
from zun.common.i18n import _
from zun.common import utils
@ -51,9 +52,23 @@ def load_container_driver(container_driver=None):
LOG.info("Loading container driver '%s'", container_driver)
try:
if not container_driver.startswith('zun.'):
if container_driver.startswith('docker.driver.'):
# case 1: (deprecated) CONF.container_driver is
# 'docker.driver.DockerDriver'
container_driver = 'zun.container.%s' % container_driver
driver = importutils.import_object(container_driver)
driver = importutils.import_object(container_driver)
elif container_driver.startswith('zun.'):
# case 2: (deprecated) CONF.container_driver is
# 'zun.container.docker.driver.DockerDriver'
driver = importutils.import_object(container_driver)
else:
# case 3: CONF.container_driver is (for example) 'docker'
# load from entry point in this case.
driver = stevedore_driver.DriverManager(
"zun.container.driver",
container_driver,
invoke_on_load=True).driver
if not isinstance(driver, ContainerDriver):
raise Exception(_('Expected driver of type: %s') %
str(ContainerDriver))

View File

@ -99,9 +99,7 @@ class TestManager(base.TestCase):
p.start()
self.addCleanup(p.stop)
zun.conf.CONF.set_override(
'container_driver',
'zun.tests.unit.container.fake_driver.FakeDriver')
zun.conf.CONF.set_override('container_driver', 'fake')
self.compute_manager = manager.Manager()
self.compute_manager._resource_tracker = FakeResourceTracker()