mirror of
https://pagure.io/fm-orchestrator.git
synced 2026-04-05 19:57:37 +08:00
Start querying modules by context when it's available
When implementing module stream expansion, we'll need to make sure the buildrequires are queried using their context as well.
This commit is contained in:
@@ -132,6 +132,8 @@ class PDCResolver(GenericResolver):
|
||||
|
||||
elif is_module_dict(data):
|
||||
result = {'variant_id': data['name'], 'variant_version': data['version']}
|
||||
if data.get('context'):
|
||||
result['variant_context'] = data['context']
|
||||
|
||||
if 'release' in data:
|
||||
result['variant_release'] = data['release']
|
||||
@@ -190,6 +192,8 @@ class PDCResolver(GenericResolver):
|
||||
query['variant_release'] = variant_dict['variant_release']
|
||||
if module_info.get('active'):
|
||||
query['active'] = module_info['active']
|
||||
if module_info.get('context'):
|
||||
query['variant_context'] = module_info['context']
|
||||
|
||||
# TODO: So far sorting on Fedora prod PDC instance is broken and it sorts
|
||||
# only by variant_uid by default. Once the sorting is fixed, we can start
|
||||
@@ -220,11 +224,12 @@ class PDCResolver(GenericResolver):
|
||||
assert len(results) <= 1, pprint.pformat(retval)
|
||||
return results[0]
|
||||
|
||||
def get_module_tag(self, name, stream, version, strict=False):
|
||||
def get_module_tag(self, name, stream, version, context, strict=False):
|
||||
"""
|
||||
:param name: a module's name
|
||||
:param stream: a module's stream
|
||||
:param version: a module's version
|
||||
:param context: a module's context
|
||||
:param strict: Normally this function returns None if no module can be
|
||||
found. If strict=True, then an UnprocessableEntity is raised.
|
||||
:return: koji tag string
|
||||
@@ -232,7 +237,8 @@ class PDCResolver(GenericResolver):
|
||||
module_info = {
|
||||
'name': name,
|
||||
'version': stream,
|
||||
'release': str(version)
|
||||
'release': str(version),
|
||||
'context': context
|
||||
}
|
||||
return self._get_module(module_info, strict=strict)['koji_tag']
|
||||
|
||||
@@ -388,12 +394,13 @@ class PDCResolver(GenericResolver):
|
||||
# Return the union of all rpms in all profiles of the given keys.
|
||||
return results
|
||||
|
||||
def get_module_build_dependencies(self, name=None, stream=None, version=None, mmd=None,
|
||||
strict=False):
|
||||
def get_module_build_dependencies(self, name=None, stream=None, version=None, context=None,
|
||||
mmd=None, strict=False):
|
||||
"""
|
||||
:param name: a module's name (required if mmd is not set)
|
||||
:param stream: a module's stream (required if mmd is not set)
|
||||
:param version: a module's version (required if mmd is not set)
|
||||
:param context: a module's context (required if mmd is not set)
|
||||
:param mmd: uses the mmd instead of the name, stream, version to query PDC
|
||||
:param strict: Normally this function returns None if no module can be
|
||||
found. If strict=True, then an UnprocessableEntity is raised.
|
||||
@@ -401,12 +408,12 @@ class PDCResolver(GenericResolver):
|
||||
"""
|
||||
if mmd:
|
||||
log.debug("get_module_build_dependencies(mmd=%r strict=%r)" % (mmd, strict))
|
||||
elif any(x is None for x in [name, stream, version]):
|
||||
raise RuntimeError('The name, stream, and version weren\'t specified')
|
||||
elif any(x is None for x in [name, stream, version, context]):
|
||||
raise RuntimeError('The name, stream, version, and/or context weren\'t specified')
|
||||
else:
|
||||
version = str(version)
|
||||
log.debug("get_module_build_dependencies(%s, strict=%r)"
|
||||
% (', '.join([name, stream, str(version)]), strict))
|
||||
% (', '.join([name, stream, str(version), context]), strict))
|
||||
|
||||
# This is the set we're going to build up and return.
|
||||
module_tags = {}
|
||||
@@ -417,7 +424,8 @@ class PDCResolver(GenericResolver):
|
||||
module_info = {
|
||||
'name': name,
|
||||
'version': stream,
|
||||
'release': str(version)
|
||||
'release': str(version),
|
||||
'context': context
|
||||
}
|
||||
queried_module = self._get_module(module_info, strict=strict)
|
||||
yaml = queried_module['modulemd']
|
||||
|
||||
@@ -98,7 +98,7 @@ class GenericResolver(six.with_metaclass(ABCMeta)):
|
||||
return mmd
|
||||
|
||||
@abstractmethod
|
||||
def get_module_tag(self, name, stream, version, strict=False):
|
||||
def get_module_tag(self, name, stream, version, context, strict=False):
|
||||
raise NotImplementedError()
|
||||
|
||||
@abstractmethod
|
||||
@@ -107,7 +107,7 @@ class GenericResolver(six.with_metaclass(ABCMeta)):
|
||||
|
||||
@abstractmethod
|
||||
def get_module_build_dependencies(self, name=None, stream=None, version=None, mmd=None,
|
||||
strict=False):
|
||||
context=None, strict=False):
|
||||
raise NotImplementedError()
|
||||
|
||||
@abstractmethod
|
||||
|
||||
@@ -229,9 +229,10 @@ def wait(config, session, msg):
|
||||
else:
|
||||
# For Koji backend, query for the module we are going to
|
||||
# build to get the koji_tag and deps from it.
|
||||
log.info("Getting deps for %s" % (':'.join([build.name, build.stream, build.version])))
|
||||
nsvc = ':'.join([build.name, build.stream, build.version])
|
||||
log.info("Getting deps for %s" % (nsvc))
|
||||
deps_dict = resolver.get_module_build_dependencies(
|
||||
build.name, build.stream, build.version, strict=True)
|
||||
build.name, build.stream, build.version, build.context, strict=True)
|
||||
dependencies = set(deps_dict.keys())
|
||||
|
||||
# Find out the name of Koji tag to which the module's Content
|
||||
@@ -244,9 +245,9 @@ def wait(config, session, msg):
|
||||
module_names_streams[base_module_name])
|
||||
break
|
||||
|
||||
log.info('Getting tag for {0}'.format(':'.join([
|
||||
build.name, build.stream, build.version])))
|
||||
tag = resolver.get_module_tag(build.name, build.stream, build.version, strict=True)
|
||||
log.info('Getting tag for {0}'.format(nsvc))
|
||||
tag = resolver.get_module_tag(
|
||||
build.name, build.stream, build.version, build.context, strict=True)
|
||||
|
||||
return dependencies, tag, cg_build_koji_tag
|
||||
|
||||
|
||||
@@ -140,6 +140,7 @@ def pdc_module_inactive(pdc):
|
||||
'variant_type': 'module',
|
||||
'variant_version': 'master',
|
||||
'variant_release': '20180205135154',
|
||||
'variant_context': 'c2c572ec',
|
||||
'koji_tag': 'module-95b214a704c984be',
|
||||
'modulemd': TESTMODULE_MODULEMD,
|
||||
'runtime_deps': [
|
||||
@@ -194,6 +195,7 @@ def pdc_module_reuse(pdc_module_active):
|
||||
pdc_module_reuse.endpoints['unreleasedvariants']['GET'][-1].update({
|
||||
'variant_uid': 'testmodule:master:{0}'.format(mmd.get_version()),
|
||||
'variant_release': str(mmd.get_version()),
|
||||
'variant_context': '7c29193d',
|
||||
'modulemd': mmd.dumps(),
|
||||
'koji_tag': 'module-de3adf79caf3e1b8'
|
||||
})
|
||||
|
||||
@@ -411,6 +411,7 @@ class TestBuild:
|
||||
'variant_type': 'module',
|
||||
'variant_version': 'master',
|
||||
'variant_release': '20180205135154',
|
||||
'variant_context': 'c2c572ec',
|
||||
'koji_tag': 'module-95b214a704c984be',
|
||||
'modulemd': python3_yaml,
|
||||
'runtime_deps': [
|
||||
@@ -916,6 +917,8 @@ class TestBuild:
|
||||
"""
|
||||
now = datetime.utcnow()
|
||||
submitted_time = now - timedelta(minutes=3)
|
||||
pdc_module_inactive.endpoints['unreleasedvariants']['GET'][-1]['variant_context'] = \
|
||||
'7c29193d'
|
||||
# Create a module in the failed state
|
||||
build_one = models.ModuleBuild()
|
||||
build_one.name = 'testmodule'
|
||||
@@ -1040,6 +1043,8 @@ class TestBuild:
|
||||
FakeModuleBuilder.INSTANT_COMPLETE = True
|
||||
now = datetime.utcnow()
|
||||
submitted_time = now - timedelta(minutes=3)
|
||||
pdc_module_inactive.endpoints['unreleasedvariants']['GET'][-1]['variant_context'] = \
|
||||
'7c29193d'
|
||||
# Create a module in the failed state
|
||||
build_one = models.ModuleBuild()
|
||||
build_one.name = 'testmodule'
|
||||
|
||||
@@ -90,7 +90,7 @@ class TestPDCModule:
|
||||
})
|
||||
resolver = mbs_resolver.GenericResolver.create(tests.conf, backend='pdc')
|
||||
result = resolver.get_module_build_dependencies(
|
||||
'testmodule', 'master', '20180205135154').keys()
|
||||
'testmodule', 'master', '20180205135154', 'c2c572ec').keys()
|
||||
assert set(result) == expected
|
||||
|
||||
def test_get_module_build_dependencies_recursive(self, pdc_module_active):
|
||||
@@ -126,7 +126,7 @@ class TestPDCModule:
|
||||
|
||||
resolver = mbs_resolver.GenericResolver.create(tests.conf, backend='pdc')
|
||||
result = resolver.get_module_build_dependencies(
|
||||
'testmodule2', 'master', '20180123171545').keys()
|
||||
'testmodule2', 'master', '20180123171545', 'c2c572ec').keys()
|
||||
assert set(result) == set(['module-f28-build'])
|
||||
|
||||
@patch("module_build_service.config.Config.system",
|
||||
|
||||
Reference in New Issue
Block a user