本文整理汇总了Python中atomic_reactor.inner.DockerBuildWorkflow类的典型用法代码示例。如果您正苦于以下问题:Python DockerBuildWorkflow类的具体用法?Python DockerBuildWorkflow怎么用?Python DockerBuildWorkflow使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了DockerBuildWorkflow类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_get_primary_images
def test_get_primary_images(tag_conf, tag_annotation, expected):
template_image = ImageName.parse('registry.example.com/fedora')
workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image')
for tag in tag_conf:
image_name = ImageName.parse(str(template_image))
image_name.tag = tag
workflow.tag_conf.add_primary_image(str(image_name))
annotations = {}
for tag in tag_annotation:
annotations.setdefault('repositories', {}).setdefault('primary', [])
image_name = ImageName.parse(str(template_image))
image_name.tag = tag
annotations['repositories']['primary'].append(str(image_name))
build_result = BuildResult(annotations=annotations, image_id='foo')
workflow.build_result = build_result
actual = get_primary_images(workflow)
assert len(actual) == len(expected)
for index, primary_image in enumerate(actual):
assert primary_image.registry == template_image.registry
assert primary_image.namespace == template_image.namespace
assert primary_image.repo == template_image.repo
assert primary_image.tag == expected[index]
示例2: test_distgit_fetch_artefacts_plugin
def test_distgit_fetch_artefacts_plugin(tmpdir, docker_tasker): # noqa
command = 'fedpkg sources'
expected_command = ['fedpkg', 'sources']
workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image')
workflow.builder = X()
workflow.source = flexmock(path=str(tmpdir))
initial_dir = os.getcwd()
assert initial_dir != str(tmpdir)
def assert_tmpdir(*args, **kwargs):
assert os.getcwd() == str(tmpdir)
(flexmock(pre_pyrpkg_fetch_artefacts.subprocess)
.should_receive('check_call')
.with_args(expected_command)
.replace_with(assert_tmpdir)
.once())
runner = PreBuildPluginsRunner(
docker_tasker,
workflow,
[{
'name': DistgitFetchArtefactsPlugin.key,
'args': {'command': command}
}]
)
runner.run()
assert os.getcwd() == initial_dir
示例3: test_distgit_fetch_artefacts_failure
def test_distgit_fetch_artefacts_failure(tmpdir, docker_tasker): # noqa
command = 'fedpkg sources'
expected_command = ['fedpkg', 'sources']
workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image')
workflow.builder = X()
workflow.source = flexmock(path=str(tmpdir))
initial_dir = os.getcwd()
assert initial_dir != str(tmpdir)
(flexmock(pre_pyrpkg_fetch_artefacts.subprocess)
.should_receive('check_call')
.with_args(expected_command)
.and_raise(RuntimeError)
.once())
runner = PreBuildPluginsRunner(
docker_tasker,
workflow,
[{
'name': DistgitFetchArtefactsPlugin.key,
'args': {'command': command}
}]
)
with pytest.raises(PluginFailedException):
runner.run()
assert os.getcwd() == initial_dir
示例4: test_retry_pull_base_image
def test_retry_pull_base_image(exc, failures, should_succeed):
if MOCK:
mock_docker(remember_images=True)
tasker = DockerTasker()
workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image')
workflow.builder = MockBuilder()
workflow.builder.base_image = ImageName.parse('parent-image')
class MockResponse(object):
content = ''
expectation = flexmock(tasker).should_receive('tag_image')
for _ in range(failures):
expectation = expectation.and_raise(exc('', MockResponse()))
expectation.and_return('foo')
expectation.and_return('parent-image')
runner = PreBuildPluginsRunner(
tasker,
workflow,
[{
'name': PullBaseImagePlugin.key,
'args': {'parent_registry': 'registry.example.com',
'parent_registry_insecure': True},
}],
)
if should_succeed:
runner.run()
else:
with pytest.raises(Exception):
runner.run()
示例5: test_plugin_errors
def test_plugin_errors(plugins, should_fail, should_log):
"""
Try bad plugin configuration.
"""
this_file = inspect.getfile(PreRaises)
mock_docker()
fake_builder = MockInsideBuilder()
flexmock(InsideBuilder).new_instances(fake_builder)
fake_logger = FakeLogger()
atomic_reactor.plugin.logger = fake_logger
workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image',
plugin_files=[this_file],
**plugins)
# Find the 'watcher' parameter
watchers = [conf.get('args', {}).get('watcher')
for plugin in plugins.values()
for conf in plugin]
watcher = [x for x in watchers if x][0]
if should_fail:
with pytest.raises(PluginFailedException):
workflow.build_docker_image()
assert not watcher.was_called()
else:
workflow.build_docker_image()
assert watcher.was_called()
if should_log:
assert len(fake_logger.errors) > 0
else:
assert len(fake_logger.errors) == 0
示例6: test_returndockerfile_plugin
def test_returndockerfile_plugin(tmpdir):
df_content = """
FROM fedora
RUN yum install -y python-django
CMD blabla"""
df = DockerfileParser(str(tmpdir))
df.content = df_content
tasker = DockerTasker()
workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image')
workflow.builder = X
workflow.builder.df_path = df.dockerfile_path
workflow.builder.df_dir = str(tmpdir)
runner = PreBuildPluginsRunner(
tasker,
workflow,
[{
'name': CpDockerfilePlugin.key
}]
)
runner.run()
assert CpDockerfilePlugin.key is not None
assert workflow.prebuild_results.get(CpDockerfilePlugin.key, "") == df_content
示例7: prepare
def prepare(self, df_path, inherited_user='', hide_files=None, parent_images=None):
if MOCK:
mock_docker()
tasker = DockerTasker()
workflow = DockerBuildWorkflow(SOURCE, "test-image")
workflow.source = MockSource(df_path)
workflow.builder = (StubInsideBuilder()
.for_workflow(workflow)
.set_df_path(df_path))
for parent in parent_images or []:
workflow.builder.set_parent_inspection_data(parent, {
INSPECT_CONFIG: {
'User': inherited_user,
},
})
if hide_files is not None:
reactor_config = ReactorConfig({
'version': 1,
'hide_files': hide_files
})
workflow.plugin_workspace[ReactorConfigPlugin.key] = {
WORKSPACE_CONF_KEY: reactor_config
}
return tasker, workflow
示例8: test_workflow
def test_workflow():
"""
Test normal workflow.
"""
this_file = inspect.getfile(PreWatched)
mock_docker()
fake_builder = MockInsideBuilder()
flexmock(InsideBuilder).new_instances(fake_builder)
watch_pre = Watcher()
watch_prepub = Watcher()
watch_post = Watcher()
watch_exit = Watcher()
workflow = DockerBuildWorkflow(
MOCK_SOURCE,
"test-image",
prebuild_plugins=[{"name": "pre_watched", "args": {"watcher": watch_pre}}],
prepublish_plugins=[{"name": "prepub_watched", "args": {"watcher": watch_prepub}}],
postbuild_plugins=[{"name": "post_watched", "args": {"watcher": watch_post}}],
exit_plugins=[{"name": "exit_watched", "args": {"watcher": watch_exit}}],
plugin_files=[this_file],
)
workflow.build_docker_image()
assert watch_pre.was_called()
assert watch_prepub.was_called()
assert watch_post.was_called()
assert watch_exit.was_called()
示例9: test_autorebuild_stop_prevents_build
def test_autorebuild_stop_prevents_build():
"""
test that a plugin that raises AutoRebuildCanceledException results in actually skipped build
"""
this_file = inspect.getfile(PreWatched)
mock_docker()
fake_builder = MockInsideBuilder()
flexmock(InsideBuilder).new_instances(fake_builder)
watch_prepub = Watcher()
watch_post = Watcher()
watch_exit = Watcher()
workflow = DockerBuildWorkflow(
MOCK_SOURCE,
"test-image",
prebuild_plugins=[{"name": "stopstopstop", "args": {}}],
prepublish_plugins=[{"name": "prepub_watched", "args": {"watcher": watch_prepub}}],
postbuild_plugins=[{"name": "post_watched", "args": {"watcher": watch_post}}],
exit_plugins=[{"name": "exit_watched", "args": {"watcher": watch_exit}}],
plugin_files=[this_file],
)
with pytest.raises(AutoRebuildCanceledException):
workflow.build_docker_image()
assert not watch_prepub.was_called()
assert not watch_post.was_called()
assert watch_exit.was_called()
assert workflow.autorebuild_canceled == True
示例10: test_add_labels_plugin
def test_add_labels_plugin(tmpdir, labels_conf_base, labels_conf, dont_overwrite, expected_output):
df = DockerfileParser(str(tmpdir))
df.content = DF_CONTENT
tasker = DockerTasker()
workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image')
setattr(workflow, 'builder', X)
workflow.base_image_inspect = labels_conf_base
setattr(workflow.builder, 'df_path', df.dockerfile_path)
runner = PreBuildPluginsRunner(
tasker,
workflow,
[{
'name': AddLabelsPlugin.key,
'args': {'labels': labels_conf, "dont_overwrite": dont_overwrite}
}]
)
if isinstance(expected_output, RuntimeError):
with pytest.raises(RuntimeError):
runner.run()
else:
runner.run()
assert AddLabelsPlugin.key is not None
assert df.content in expected_output
示例11: prepare
def prepare():
def set_annotations_on_build(build_id, labels, namespace='default'):
assert namespace == 'namespace'
new_environ = deepcopy(os.environ)
new_environ["BUILD"] = '''
{
"metadata": {
"name": "asd",
"namespace": "namespace"
}
}
'''
flexmock(OSBS, set_annotations_on_build=set_annotations_on_build)
flexmock(os)
os.should_receive("environ").and_return(new_environ)
workflow = DockerBuildWorkflow({"provider": "git", "uri": "asd"}, "test-image")
workflow.push_conf.add_pulp_registry("test", LOCALHOST_REGISTRY)
workflow.tag_conf.add_primary_image(TEST_IMAGE)
workflow.tag_conf.add_unique_image("namespace/image:asd123")
r = workflow.push_conf.add_docker_registry(DOCKER0_REGISTRY)
r.digests[TEST_IMAGE] = DIGEST1
r.digests["namespace/image:asd123"] = DIGEST2
setattr(workflow, 'builder', X)
setattr(workflow, '_base_image_inspect', {'Id': '01234567'})
workflow.build_logs = ["a", "b"]
workflow.source.lg = LazyGit(None, commit="commit")
flexmock(workflow.source.lg)
workflow.source.lg.should_receive("_commit_id").and_return("commit")
return workflow
示例12: test_compress
def test_compress(self, tmpdir, method, load_exported_image, extension):
if MOCK:
mock_docker()
tasker = DockerTasker()
workflow = DockerBuildWorkflow({'provider': 'git', 'uri': 'asd'}, 'test-image')
workflow.builder = X()
exp_img = os.path.join(str(tmpdir), 'img.tar')
if load_exported_image:
tarfile.open(exp_img, mode='w').close()
workflow.exported_image_sequence.append({'path': exp_img})
runner = PostBuildPluginsRunner(
tasker,
workflow,
[{
'name': CompressPlugin.key,
'args': {
'method': method,
'load_exported_image': load_exported_image,
},
}]
)
runner.run()
compressed_img = os.path.join(
workflow.source.tmpdir,
EXPORTED_COMPRESSED_IMAGE_NAME_TEMPLATE.format(extension))
assert os.path.exists(compressed_img)
assert workflow.exported_image_sequence[-1]['path'] == compressed_img
示例13: test_build
def test_build(is_failed, image_id):
"""
tests docker build api plugin working
"""
flexmock(DockerfileParser, content='df_content')
mock_docker()
fake_builder = MockInsideBuilder(image_id=image_id)
flexmock(InsideBuilder).new_instances(fake_builder)
workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image')
flexmock(CommandResult).should_receive('is_failed').and_return(is_failed)
error = "error message"
error_detail = "{u'message': u\"%s\"}" % error
if is_failed:
flexmock(CommandResult, error=error, error_detail=error_detail)
with pytest.raises(PluginFailedException):
workflow.build_docker_image()
else:
workflow.build_docker_image()
assert isinstance(workflow.buildstep_result['docker_api'], BuildResult)
assert workflow.build_result == workflow.buildstep_result['docker_api']
assert workflow.build_result.is_failed() == is_failed
if is_failed:
assert workflow.build_result.fail_reason == error
assert '\\' not in workflow.plugins_errors['docker_api']
assert error in workflow.plugins_errors['docker_api']
else:
assert workflow.build_result.image_id.startswith('sha256:')
assert workflow.build_result.image_id.count(':') == 1
示例14: test_syntax_error
def test_syntax_error():
"""
tests reporting of syntax errors
"""
flexmock(DockerfileParser, content='df_content')
mock_docker()
fake_builder = MockInsideBuilder()
def raise_exc(*args, **kwargs):
explanation = ("Syntax error - can't find = in \"CMD\". "
"Must be of the form: name=value")
http_error = requests.HTTPError('500 Server Error')
raise docker.errors.APIError(message='foo',
response=http_error,
explanation=explanation)
yield {}
fake_builder.tasker.build_image_from_path = raise_exc
flexmock(InsideBuilder).new_instances(fake_builder)
workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image')
with pytest.raises(PluginFailedException):
workflow.build_docker_image()
assert isinstance(workflow.buildstep_result['docker_api'], BuildResult)
assert workflow.build_result == workflow.buildstep_result['docker_api']
assert workflow.build_result.is_failed()
assert "Syntax error" in workflow.build_result.fail_reason
示例15: test_pull_base_image_plugin
def test_pull_base_image_plugin(df_base, parent_registry, expected_w_reg, expected_wo_reg):
if MOCK:
mock_docker(remember_images=True)
tasker = DockerTasker()
workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image')
workflow.builder = MockBuilder()
workflow.builder.base_image = ImageName.parse(df_base)
assert not tasker.image_exists(BASE_IMAGE)
assert not tasker.image_exists(BASE_IMAGE_W_REGISTRY)
runner = PreBuildPluginsRunner(
tasker,
workflow,
[{
'name': PullBaseImagePlugin.key,
'args': {'parent_registry': parent_registry, 'parent_registry_insecure': True}
}]
)
runner.run()
assert tasker.image_exists(BASE_IMAGE) == expected_wo_reg
assert tasker.image_exists(BASE_IMAGE_W_REGISTRY) == expected_w_reg
try:
tasker.remove_image(BASE_IMAGE)
tasker.remove_image(BASE_IMAGE_W_REGISTRY)
except:
pass