Fix image plugin functionality for oslo.config

The new oslo.config style parsing for kolla-build.conf stopped plugins
from working. This patch fixes it and adds a unit test.

Co-Authored-By: Jeffrey Zhang <zhang.lei.fly@gmail.com>
Closes-Bug: 1534556
Change-Id: I135797c733ae0cae040a009c364073769b19e4eb
This commit is contained in:
Paul Bourke 2016-01-15 15:48:28 +00:00 committed by Jeffrey Zhang
parent 013d21119f
commit 477fc18bd0
6 changed files with 42 additions and 1 deletions

View File

@ -604,7 +604,9 @@ class KollaWorker(object):
for plugin in [match.group(0) for match in for plugin in [match.group(0) for match in
(re.search('{}-plugin-.+'.format(image['name']), (re.search('{}-plugin-.+'.format(image['name']),
section) for section in section) for section in
self.conf._groups) if match]: self.conf.list_all_sections()) if match]:
self.conf.register_opts(common_config.get_source_opts(),
plugin)
image['plugins'].append( image['plugins'].append(
process_source_installation(image, plugin)) process_source_installation(image, plugin))

View File

@ -11,6 +11,9 @@
# limitations under the License. # limitations under the License.
import os import os
import fixtures
import mock
from oslo_config import cfg from oslo_config import cfg
from oslotest import base as oslotest_base from oslotest import base as oslotest_base
@ -30,6 +33,11 @@ class TestCase(oslotest_base.BaseTestCase):
default_config_files = self.get_default_config_files() default_config_files = self.get_default_config_files()
common_config.parse(self.conf, [], common_config.parse(self.conf, [],
default_config_files=default_config_files) default_config_files=default_config_files)
# NOTE(jeffrey4l): mock the _get_image_dir method to return a fake
# docker images dir
self.useFixture(fixtures.MockPatch(
'kolla.cmd.build.KollaWorker._get_images_dir',
mock.Mock(return_value=os.path.join(TESTS_ROOT, 'docker'))))
def get_default_config_files(self): def get_default_config_files(self):
if self.config_file: if self.config_file:

View File

@ -0,0 +1 @@
FROM {{ base_distro }}:{{ base_distro_tag }}

View File

@ -0,0 +1 @@
FROM {{ namespace }}/{{ image_prefix }}base:{{ tag }}

View File

@ -1,2 +1,7 @@
[DEFAULT] [DEFAULT]
debug=True debug=True
[neutron-server-plugin-networking-arista]
reference = master
location = https://github.com/openstack/networking-arista
type = git

View File

@ -107,6 +107,8 @@ class WorkerThreadTest(base.TestCase):
class KollaWorkerTest(base.TestCase): class KollaWorkerTest(base.TestCase):
config_file = 'default.conf'
def test_supported_base_type(self): def test_supported_base_type(self):
rh_base = ['fedora', 'centos', 'oraclelinux', 'rhel'] rh_base = ['fedora', 'centos', 'oraclelinux', 'rhel']
rh_type = ['source', 'binary', 'rdo', 'rhos'] rh_type = ['source', 'binary', 'rdo', 'rhos']
@ -128,3 +130,25 @@ class KollaWorkerTest(base.TestCase):
self.conf.set_override('install_type', install_type) self.conf.set_override('install_type', install_type)
self.assertRaises(build.KollaMismatchBaseTypeException, self.assertRaises(build.KollaMismatchBaseTypeException,
build.KollaWorker, self.conf) build.KollaWorker, self.conf)
def test_build_image_list_adds_plugins(self):
self.conf.set_override('install_type', 'source')
kolla = build.KollaWorker(self.conf)
kolla.setup_working_dir()
kolla.find_dockerfiles()
kolla.create_dockerfiles()
kolla.build_image_list()
expected_plugin = {
'name': 'neutron-server-plugin-networking-arista',
'reference': 'master',
'source': 'https://github.com/openstack/networking-arista',
'type': 'git'
}
for image in kolla.images:
if image['name'] == 'neutron-server':
self.assertEqual(image['plugins'][0], expected_plugin)
break
else:
self.fail('Can not find the expected neutron arista plugin')