from teuthology import contextutil, packaging
from teuthology.parallel import parallel
from teuthology.task import ansible
-from teuthology.exceptions import ConfigError
from distutils.version import LooseVersion
from teuthology.task.install.util import (
ceph_deploy_upgrade.__doc__ = docstring_for_upgrade.format(
cmd_parameter='ceph_deploy_upgrade')
+def _override_extra_system_packages(config, project, install_overrides):
+ teuthology.deep_merge(config, install_overrides.get(project, {}))
+ extra_overrides = install_overrides.get('extra_system_packages')
+ if extra_overrides:
+ extra = config.get('extra_system_packages')
+ if extra is None:
+ e = dict(deb=[], rpm=[])
+ elif isinstance(extra, list):
+ e = dict(deb=copy.deepcopy(extra), rpm=copy.deepcopy(extra))
+ elif isinstance(extra, dict):
+ e = copy.deepcopy(extra)
+ elif isinstance(extra, str):
+ e = dict(deb=[extra], rpm=[extra])
+
+ config['extra_system_packages'] = teuthology.deep_merge(e, extra_overrides)
@contextlib.contextmanager
def task(ctx, config):
repos = None
if overrides:
- try:
- install_overrides = overrides.get('install', {})
- log.debug('INSTALL overrides: %s' % install_overrides)
- teuthology.deep_merge(config, install_overrides.get(project, {}))
- overrides_extra_system_packages = install_overrides.get('extra_system_packages')
- if overrides_extra_system_packages:
- extra_system_packages = config.get('extra_system_packages')
- config['extra_system_packages'] = teuthology.deep_merge(extra_system_packages, overrides_extra_system_packages)
- repos = install_overrides.get('repos', None)
- except AssertionError:
- raise ConfigError(
- "'install' task config and its overrides contain" \
- "conflicting types for the same config key. Ensure that " \
- "the configuration is of the same type (dict, list, etc.) " \
- "in both the task definition and its overrides."
- )
+ install_overrides = overrides.get('install', {})
+ log.debug('INSTALL overrides: %s' % install_overrides)
+ _override_extra_system_packages(config, project, install_overrides)
+ repos = install_overrides.get('repos', None)
log.debug('config %s' % config)
import yaml
from mock import patch, Mock
+from pytest import mark
from teuthology.task import install
with pytest.raises(RuntimeError) as e:
install.redhat.install_pkgs(ctx, remote, version, rh_ds_yaml)
assert "Version check failed" in str(e)
+
+ @mark.parametrize(
+ 'conf, expect',
+ [
+ [
+ {
+ 'tasks': [ { 'install': { 'clean': True, }, }, ],
+ 'overrides': {
+ 'install': {
+ 'ceph': {
+ 'extra_system_packages': ['alpha'],
+ 'flavor': 'default',
+ 'sha1': '0123456789abcdef0123456789abcdef01234567',
+ },
+ 'extra_system_packages': {
+ 'deb': [],
+ 'rpm': ['xerxes', 'yellow'],
+ },
+ },
+ },
+ },
+ {
+ 'deb': ['alpha'],
+ 'rpm': ['alpha', 'xerxes', 'yellow'],
+ }
+ ],
+ [
+ {
+ 'tasks': [ { 'install': { 'clean': True, }, }, ],
+ 'overrides': {
+ 'install': {
+ 'ceph': {
+ 'flavor': 'default',
+ 'sha1': '0123456789abcdef0123456789abcdef01234567',
+ },
+ 'extra_system_packages': {
+ 'deb': [],
+ 'rpm': ['xerxes', 'yellow'],
+ },
+ },
+ },
+ },
+ {
+ 'deb': [],
+ 'rpm': ['xerxes', 'yellow'],
+ }
+ ],
+ [
+ {
+ 'tasks': [ { 'install': { 'clean': True, }, }, ],
+ 'overrides': { 'install': {
+ 'ceph': { 'flavor': 'default', 'sha1': '012345', },
+ 'extra_system_packages': { 'rpm': ['xerxes', 'yellow'], },
+ },
+ },
+ },
+ { 'deb': [], 'rpm': ['xerxes', 'yellow'], }
+
+ ],
+ [
+ {
+ 'tasks': [ { 'install': { 'clean': True,
+ 'extra_system_packages': { 'deb': ['alpha'], 'rpm': ['bravo'] },
+ }, }, ],
+ 'overrides': { 'install': {
+ 'ceph': { 'flavor': 'default', 'sha1': '012345', },
+ 'extra_system_packages': { 'rpm': ['xerxes', 'yellow'], },
+ },
+ },
+ },
+ { 'deb': ['alpha'], 'rpm': ['bravo', 'xerxes', 'yellow'], }
+
+ ],
+
+ ]
+ )
+ def test_install_extra_system_packages(self, conf, expect):
+ install_task = conf.get('tasks')[0].get('install')
+ install_overrides = conf.get('overrides').get('install', {})
+ install._override_extra_system_packages(install_task, 'ceph', install_overrides)
+
+ assert install_task.get('extra_system_packages') == expect