def test_add_labels_plugin(tmpdir, docker_tasker, df_content, labels_conf_base, labels_conf, dont_overwrite, aliases, expected_output, caplog): df = DockerfileParser(str(tmpdir)) df.content = df_content if MOCK: mock_docker() workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image') setattr(workflow, 'builder', X) flexmock(workflow, base_image_inspect=labels_conf_base) setattr(workflow.builder, 'df_path', df.dockerfile_path) runner = PreBuildPluginsRunner(docker_tasker, workflow, [{ 'name': AddLabelsPlugin.key, 'args': { 'labels': labels_conf, 'dont_overwrite': dont_overwrite, 'auto_labels': [], 'aliases': aliases, } }]) runner.run() if isinstance(expected_output, RuntimeError): assert "plugin 'add_labels_in_dockerfile' raised an exception: RuntimeError" in caplog.text( ) else: assert AddLabelsPlugin.key is not None assert df.content in expected_output
def test_add_labels_plugin_generated(tmpdir, docker_tasker, auto_label, value_re_part): df = DockerfileParser(str(tmpdir)) df.content = DF_CONTENT if MOCK: mock_docker() workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image') setattr(workflow, 'builder', X) flexmock(workflow, source=MockSource()) flexmock(workflow, base_image_inspect=LABELS_CONF_BASE) setattr(workflow.builder, 'df_path', df.dockerfile_path) runner = PreBuildPluginsRunner( docker_tasker, workflow, [{ 'name': AddLabelsPlugin.key, 'args': {'labels': {}, "dont_overwrite": [], "auto_labels": [auto_label], 'aliases': {'Build_Host': 'com.redhat.build-host'}} }] ) runner.run() assert re.match(value_re_part, df.labels[auto_label])
def test_adddockerfile_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': AddDockerfilePlugin.key, 'args': {'nvr': 'rhel-server-docker-7.1-20'} }] ) runner.run() assert AddDockerfilePlugin.key is not None expected_output = """ FROM fedora RUN yum install -y python-django ADD Dockerfile-rhel-server-docker-7.1-20 /root/buildinfo/Dockerfile-rhel-server-docker-7.1-20 CMD blabla""" assert df.content == expected_output
def test_assertlabels_plugin(tmpdir, df_content, req_labels, expected): 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': AssertLabelsPlugin.key, 'args': {'required_labels': req_labels} }] ) assert AssertLabelsPlugin.key is not None if isinstance(expected, PluginFailedException): with pytest.raises(PluginFailedException): runner.run() else: runner.run()
def test_adddockerfile_nvr_from_labels(tmpdir): df_content = """ FROM fedora RUN yum install -y python-django LABEL Name="jboss-eap-6-docker" "Version"="6.4" "Release"=77 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': AddDockerfilePlugin.key }] ) runner.run() assert AddDockerfilePlugin.key is not None assert "ADD Dockerfile-jboss-eap-6-docker-6.4-77 /root/buildinfo/Dockerfile-jboss-eap-6-docker-6.4-77" in df.content
def test_yuminject_plugin_notwrapped(tmpdir): df_content = """\ FROM fedora RUN yum install -y python-django CMD blabla""" df = DockerfileParser(str(tmpdir)) df.content = df_content tasker, workflow = prepare(df.dockerfile_path) metalink = 'https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch' workflow.files[os.path.join(YUM_REPOS_DIR, DEFAULT_YUM_REPOFILE_NAME)] = render_yum_repo(OrderedDict( (('name', 'my-repo'), ('metalink', metalink), ('enabled', 1), ('gpgcheck', 0)), )) runner = PreBuildPluginsRunner(tasker, workflow, [{ 'name': InjectYumRepoPlugin.key, 'args': { "wrap_commands": False } }]) runner.run() assert InjectYumRepoPlugin.key is not None expected_output = r"""FROM fedora ADD atomic-reactor-repos/* '/etc/yum.repos.d/' RUN yum install -y python-django CMD blabla RUN rm -f '/etc/yum.repos.d/atomic-reactor-injected.repo' """ assert expected_output == df.content
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
def test_adddockerfile_todest(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': AddDockerfilePlugin.key, 'args': {'nvr': 'jboss-eap-6-docker-6.4-77', 'destdir': '/usr/share/doc/'} }] ) runner.run() assert AddDockerfilePlugin.key is not None expected_output = """ FROM fedora RUN yum install -y python-django ADD Dockerfile-jboss-eap-6-docker-6.4-77 /usr/share/doc/Dockerfile-jboss-eap-6-docker-6.4-77 CMD blabla""" assert df.content == expected_output
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) flexmock(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
def test_add_labels_plugin(tmpdir, docker_tasker, df_content, labels_conf_base, labels_conf, dont_overwrite, aliases, expected_output, caplog): df = DockerfileParser(str(tmpdir)) df.content = df_content if MOCK: mock_docker() workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image') setattr(workflow, 'builder', X) flexmock(workflow, base_image_inspect=labels_conf_base) setattr(workflow.builder, 'df_path', df.dockerfile_path) runner = PreBuildPluginsRunner( docker_tasker, workflow, [{ 'name': AddLabelsPlugin.key, 'args': { 'labels': labels_conf, 'dont_overwrite': dont_overwrite, 'auto_labels': [], 'aliases': aliases, } }] ) runner.run() if isinstance(expected_output, RuntimeError): assert "plugin 'add_labels_in_dockerfile' raised an exception: RuntimeError" in caplog.text() else: assert AddLabelsPlugin.key is not None assert df.content in expected_output
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) flexmock(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
def test_adddockerfile_nvr_from_labels2(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') flexmock(workflow, base_image_inspect={"Config": {"Labels": {}}}) workflow.builder = X workflow.builder.df_path = df.dockerfile_path workflow.builder.df_dir = str(tmpdir) runner = PreBuildPluginsRunner( tasker, workflow, [{ 'name': AddLabelsPlugin.key, 'args': {'labels': {'Name': 'jboss-eap-6-docker', 'Version': '6.4', 'Release': '77'}} }, { 'name': AddDockerfilePlugin.key }] ) runner.run() assert AddDockerfilePlugin.key is not None assert "ADD Dockerfile-jboss-eap-6-docker-6.4-77 /root/buildinfo/Dockerfile-jboss-eap-6-docker-6.4-77" in df.content
def test_add_labels_plugin_generated(tmpdir, docker_tasker, auto_label, value_re_part): df = DockerfileParser(str(tmpdir)) df.content = DF_CONTENT if MOCK: mock_docker() workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image') setattr(workflow, 'builder', X) flexmock(workflow, source=MockSource()) flexmock(workflow, base_image_inspect=LABELS_CONF_BASE) setattr(workflow.builder, 'df_path', df.dockerfile_path) runner = PreBuildPluginsRunner( docker_tasker, workflow, [{ 'name': AddLabelsPlugin.key, 'args': { 'labels': {}, "dont_overwrite": [], "auto_labels": [auto_label], 'aliases': { 'Build_Host': 'com.redhat.build-host' } } }]) runner.run() assert re.match(value_re_part, df.labels[auto_label])
def parseDockerfile(content): dfp = DockerfileParser() dfp.content = content bash_dict = [] for dic in json.loads(dfp.json): if dic.get("ENV") != None or dic.get("RUN") != None: bash_dict.append(dic) return bash_dict
def test_failure(self): dfp = DockerfileParser() dfp.content = """\ RUN apk update """ conf = dfp_group_by_instructions(dfp)[0] scan_result = check.scan_entity_conf(conf['RUN']) self.assertEqual(CheckResult.FAILED, scan_result[0])
def test_add_labels_aliases(tmpdir, docker_tasker, caplog, df_old_as_plugin_arg, df_new_as_plugin_arg, base_old, base_new, df_old, df_new, expected_old, expected_new, expected_log): if MOCK: mock_docker() df_content = "FROM fedora\n" plugin_labels = {} if df_old: if df_old_as_plugin_arg: plugin_labels["label_old"] = df_old else: df_content += 'LABEL label_old="{0}"\n'.format(df_old) if df_new: if df_new_as_plugin_arg: plugin_labels["label_new"] = df_new else: df_content += 'LABEL label_new="{0}"\n'.format(df_new) base_labels = {INSPECT_CONFIG: {"Labels": {}}} if base_old: base_labels[INSPECT_CONFIG]["Labels"]["label_old"] = base_old if base_new: base_labels[INSPECT_CONFIG]["Labels"]["label_new"] = base_new df = DockerfileParser(str(tmpdir)) df.content = df_content workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image') setattr(workflow, 'builder', X) flexmock(workflow, base_image_inspect=base_labels) setattr(workflow.builder, 'df_path', df.dockerfile_path) runner = PreBuildPluginsRunner(docker_tasker, workflow, [{ 'name': AddLabelsPlugin.key, 'args': { 'labels': plugin_labels, 'dont_overwrite': [], 'auto_labels': [], 'aliases': { "label_old": "label_new" }, } }]) runner.run() assert AddLabelsPlugin.key is not None result_old = df.labels.get( "label_old") or base_labels[INSPECT_CONFIG]["Labels"].get("label_old") result_new = df.labels.get( "label_new") or base_labels[INSPECT_CONFIG]["Labels"].get("label_new") assert result_old == expected_old assert result_new == expected_new if expected_log: assert expected_log in caplog.text()
def test_failure(self): dfp = DockerfileParser() dfp.content = """\ From base LABEL foo="bar baz" USER me""" conf = dfp_group_by_instructions(dfp)[0] scan_result = check.scan_entity_conf(conf) self.assertEqual((CheckResult.FAILED, None), scan_result)
def test_add_labels_aliases(tmpdir, docker_tasker, caplog, df_old_as_plugin_arg, df_new_as_plugin_arg, base_old, base_new, df_old, df_new, expected_old, expected_new, expected_log): if MOCK: mock_docker() df_content = "FROM fedora\n" plugin_labels = {} if df_old: if df_old_as_plugin_arg: plugin_labels["label_old"] = df_old else: df_content += 'LABEL label_old="{0}"\n'.format(df_old) if df_new: if df_new_as_plugin_arg: plugin_labels["label_new"] = df_new else: df_content += 'LABEL label_new="{0}"\n'.format(df_new) base_labels = {INSPECT_CONFIG: {"Labels": {}}} if base_old: base_labels[INSPECT_CONFIG]["Labels"]["label_old"] = base_old if base_new: base_labels[INSPECT_CONFIG]["Labels"]["label_new"] = base_new df = DockerfileParser(str(tmpdir)) df.content = df_content workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image') setattr(workflow, 'builder', X) flexmock(workflow, base_image_inspect=base_labels) setattr(workflow.builder, 'df_path', df.dockerfile_path) runner = PreBuildPluginsRunner( docker_tasker, workflow, [{ 'name': AddLabelsPlugin.key, 'args': { 'labels': plugin_labels, 'dont_overwrite': [], 'auto_labels': [], 'aliases': {"label_old": "label_new"}, } }] ) runner.run() assert AddLabelsPlugin.key is not None result_old = df.labels.get("label_old") or base_labels[INSPECT_CONFIG]["Labels"].get("label_old") result_new = df.labels.get("label_new") or base_labels[INSPECT_CONFIG]["Labels"].get("label_new") assert result_old == expected_old assert result_new == expected_new if expected_log: assert expected_log in caplog.text()
def load_dockerfile(base_path, module): dockerfile_path = os.path.join(base_path, module, 'Dockerfile') if dockerfile_path in dockerfile_cache: return dockerfile_cache[dockerfile_path] with open(dockerfile_path, 'r') as f: p = DockerfileParser() p.content = f.read() dockerfile_cache[dockerfile_path] = p return p
def write_decoupled_pricing_controller_home_docker(app_option=None,**kwargs): """ Function to Generate the Dockerfile of the worker nodes """ if app_option==None: file_name = 'home.Dockerfile' else: file_name = 'home_%s.Dockerfile'%(app_option) dfp = DockerfileParser(path=file_name) dfp.content =template_home_controller.format(**kwargs) return file_name
def test_failure(self): dfp = DockerfileParser() dfp.content = """\ From base LABEL foo="bar baz" ADD http://example.com/package.zip /temp USER me""" conf = dfp_group_by_instructions(dfp)[0] scan_result = check.scan_entity_conf(conf['ADD']) self.assertEqual((CheckResult.FAILED), scan_result[0])
def write_stream_home_docker(app_option=None, **kwargs): """ Function to Generate the Dockerfile of the home/master node of CIRCE """ if app_option == None: file_name = 'home_node.Dockerfile' else: file_name = 'home_node_%s.Dockerfile' % (app_option) dfp = DockerfileParser(path=file_name) dfp.content = template_home.format(**kwargs) return file_name
def test_success(self): dfp = DockerfileParser() dfp.content = """\ From base LABEL foo="bar baz" USER me HEALTHCHECK CMD curl --fail http://localhost:3000 || exit 1 """ conf = dfp_group_by_instructions(dfp)[0] scan_result = check.scan_entity_conf(conf) self.assertEqual(CheckResult.PASSED, scan_result[0])
def test_failure_latest_version_tag(self): dfp = DockerfileParser() dfp.content = """ FROM alpine:latest """ conf = dfp_group_by_instructions(dfp)[0] scan_result = check.scan_entity_conf(conf) self.assertEqual(CheckResult.FAILED, scan_result[0]) self.assertEqual("alpine:latest", scan_result[1]["value"])
def mock_workflow(tmpdir, dockerfile): workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image') mock_source = MockSource(tmpdir) setattr(workflow, 'builder', X) workflow.builder.source = mock_source flexmock(workflow, source=mock_source) df = DockerfileParser(str(tmpdir)) df.content = dockerfile setattr(workflow.builder, 'df_path', df.dockerfile_path) return workflow
def test_yuminject_multiline_wrapped_with_chown(tmpdir): df_content = """\ FROM fedora RUN yum install -y --setopt=tsflags=nodocs bind-utils gettext iproute v8314 mongodb24-mongodb mongodb24 && \ yum clean all && \ mkdir -p /var/lib/mongodb/data && chown -R mongodb:mongodb /var/lib/mongodb/ && \ test "$(id mongodb)" = "uid=184(mongodb) gid=998(mongodb) groups=998(mongodb)" && \ chmod o+w -R /var/lib/mongodb && chmod o+w -R /opt/rh/mongodb24/root/var/lib/mongodb CMD blabla""" df = DockerfileParser(str(tmpdir)) df.content = df_content tasker = DockerTasker() workflow = DockerBuildWorkflow(SOURCE, "test-image") setattr(workflow, 'builder', X()) metalink = r'https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch' workflow.files[os.path.join(YUM_REPOS_DIR, DEFAULT_YUM_REPOFILE_NAME)] = render_yum_repo( OrderedDict( (('name', 'my-repo'), ('metalink', metalink), ('enabled', 1), ('gpgcheck', 0)), )) setattr(workflow.builder, 'image_id', "asd123") setattr(workflow.builder, 'df_path', df.dockerfile_path) setattr(workflow.builder, 'df_dir', str(tmpdir)) setattr(workflow.builder, 'base_image', ImageName(repo='Fedora', tag='21')) setattr(workflow.builder, 'git_dockerfile_path', None) setattr(workflow.builder, 'git_path', None) setattr(workflow.builder, 'source', X()) setattr(workflow.builder.source, 'dockerfile_path', None) setattr(workflow.builder.source, 'path', '') runner = PreBuildPluginsRunner(tasker, workflow, [{ 'name': InjectYumRepoPlugin.key, 'args': { "wrap_commands": True } }]) runner.run() assert InjectYumRepoPlugin.key is not None expected_output = """FROM fedora RUN printf "[my-repo]\nname=my-repo\nmetalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-\\$releasever&arch=\ \\$basearch\nenabled=1\ngpgcheck=0\n" >/etc/yum.repos.d/atomic-reactor-injected.repo && \ yum install -y --setopt=tsflags=nodocs bind-utils gettext iproute v8314 mongodb24-mongodb mongodb24 && \ yum clean all && mkdir -p /var/lib/mongodb/data && chown -R mongodb:mongodb /var/lib/mongodb/ && \ test "$(id mongodb)" = "uid=184(mongodb) gid=998(mongodb) groups=998(mongodb)" && \ chmod o+w -R /var/lib/mongodb && chmod o+w -R /opt/rh/mongodb24/root/var/lib/mongodb && \ yum clean all && rm -f /etc/yum.repos.d/atomic-reactor-injected.repo CMD blabla""" assert df.content == expected_output
def test_yuminject_multiline_wrapped_with_chown(tmpdir): df_content = """\ FROM fedora RUN yum install -y --setopt=tsflags=nodocs bind-utils gettext iproute v8314 mongodb24-mongodb mongodb24 && \ yum clean all && \ mkdir -p /var/lib/mongodb/data && chown -R mongodb:mongodb /var/lib/mongodb/ && \ test "$(id mongodb)" = "uid=184(mongodb) gid=998(mongodb) groups=998(mongodb)" && \ chmod o+w -R /var/lib/mongodb && chmod o+w -R /opt/rh/mongodb24/root/var/lib/mongodb CMD blabla""" df = DockerfileParser(str(tmpdir)) df.content = df_content tasker = DockerTasker() workflow = DockerBuildWorkflow(SOURCE, "test-image") setattr(workflow, 'builder', X()) metalink = r'https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch' workflow.files[os.path.join(YUM_REPOS_DIR, DEFAULT_YUM_REPOFILE_NAME)] = render_yum_repo(OrderedDict( (('name', 'my-repo'), ('metalink', metalink), ('enabled', 1), ('gpgcheck', 0)), )) setattr(workflow.builder, 'image_id', "asd123") setattr(workflow.builder, 'df_path', df.dockerfile_path) setattr(workflow.builder, 'df_dir', str(tmpdir)) setattr(workflow.builder, 'base_image', ImageName(repo='Fedora', tag='21')) setattr(workflow.builder, 'git_dockerfile_path', None) setattr(workflow.builder, 'git_path', None) setattr(workflow.builder, 'source', X()) setattr(workflow.builder.source, 'dockerfile_path', None) setattr(workflow.builder.source, 'path', '') runner = PreBuildPluginsRunner(tasker, workflow, [{'name': InjectYumRepoPlugin.key, 'args': { "wrap_commands": True }}]) runner.run() assert InjectYumRepoPlugin.key is not None expected_output = """FROM fedora RUN printf "[my-repo]\nname=my-repo\nmetalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-\\$releasever&arch=\ \\$basearch\nenabled=1\ngpgcheck=0\n" >/etc/yum.repos.d/atomic-reactor-injected.repo && \ yum install -y --setopt=tsflags=nodocs bind-utils gettext iproute v8314 mongodb24-mongodb mongodb24 && \ yum clean all && mkdir -p /var/lib/mongodb/data && chown -R mongodb:mongodb /var/lib/mongodb/ && \ test "$(id mongodb)" = "uid=184(mongodb) gid=998(mongodb) groups=998(mongodb)" && \ chmod o+w -R /var/lib/mongodb && chmod o+w -R /opt/rh/mongodb24/root/var/lib/mongodb && \ yum clean all && rm -f /etc/yum.repos.d/atomic-reactor-injected.repo CMD blabla""" assert df.content == expected_output
def parse_biocontainer_recipe (path): with open(path, 'r') as content_file: content = content_file.read() dfp = DockerfileParser() dfp.content = content if 'software' not in dfp.labels.keys() or 'software.version' not in dfp.labels.keys(): print ("Missing required label in Dockerfile ("+path+")") #print (dfp.labels.keys()) return None else: software = dfp.labels['software'] version = dfp.labels['software.version'] return {"soft":software,"ver":version}
def test_success(self): dfp = DockerfileParser() dfp.content = """\ RUN apt-get update \ && apt-get install -y --no-install-recommends foo \ && echo gooo RUN apk update \ && apk add --no-cache suuu looo RUN apk --update add moo """ conf = dfp_group_by_instructions(dfp)[0] scan_result = check.scan_entity_conf(conf['RUN']) self.assertEqual(CheckResult.PASSED, scan_result[0])
def wrap_yum_commands(yum_repos, df_path): cmd_template = "RUN %(generate_repos)s&& %%(yum_command)s && yum clean all &&%(clean_repos)s" generate_repos = "" clean_repos = " rm -f" for repo, repo_content in yum_repos.items(): generate_repos += 'printf "%s" >%s ' % (repo_content, repo) clean_repos += " %s" % repo wrap_cmd = cmd_template % { "generate_repos": generate_repos, "clean_repos": clean_repos, } logger.debug("wrap cmd is %s", repr(wrap_cmd)) df = DockerfileParser(df_path) df_content = df.content df.content = alter_yum_commands(df_content, wrap_cmd)
def test_yuminject_plugin_wrapped(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(SOURCE, "test-image") setattr(workflow, 'builder', X()) workflow.builder.source = workflow.source metalink = 'https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch' workflow.files[os.path.join(YUM_REPOS_DIR, DEFAULT_YUM_REPOFILE_NAME)] = render_yum_repo(OrderedDict( (('name', 'my-repo'), ('metalink', metalink), ('enabled', '1'), ('gpgcheck', '0')), )) setattr(workflow.builder, 'image_id', "asd123") setattr(workflow.builder, 'df_path', df.dockerfile_path) setattr(workflow.builder, 'df_dir', str(tmpdir)) setattr(workflow.builder, 'base_image', ImageName(repo='Fedora', tag='21')) setattr(workflow.builder, 'git_dockerfile_path', None) setattr(workflow.builder, 'git_path', None) runner = PreBuildPluginsRunner(tasker, workflow, [{ 'name': InjectYumRepoPlugin.key, 'args': { "wrap_commands": True } }]) runner.run() assert InjectYumRepoPlugin.key is not None expected_output = """FROM fedora RUN printf "[my-repo]\nname=my-repo\nmetalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-\\$releasever&arch=\\$basearch\nenabled=1\ngpgcheck=0\n" >/etc/yum.repos.d/atomic-reactor-injected.repo && yum install -y python-django && yum clean all && rm -f /etc/yum.repos.d/atomic-reactor-injected.repo CMD blabla""" assert df.content == expected_output
def main(): """lets start our task""" # clone the repo cleanup(LOCAL_WORK_COPY) try: r = Repo.clone_from(git_url, LOCAL_WORK_COPY) except GitCommandError as git_error: print(git_error) exit(-1) d = feedparser.parse( 'https://github.com/mattermost/mattermost-server/releases.atom') release_version = d.entries[0].title[1:] # lets read the dockerfile of the current master dfp = DockerfileParser() with open('./mattermost-openshift-workdir/Dockerfile') as f: dfp.content = f.read() if 'MATTERMOST_VERSION' in dfp.envs: dockerfile_version = dfp.envs['MATTERMOST_VERSION'] # Lets check if we got a new release if semver.compare(release_version, dockerfile_version) == 1: print("Updating from %s to %s" % (dockerfile_version, release_version)) target_branch = 'bots-life/update-to-' + release_version if not pr_in_progress(target_branch): patch_and_push(dfp, r, target_branch, release_version) cleanup(LOCAL_WORK_COPY) create_pr_to_master(target_branch) else: print("There is an open PR for %s, aborting..." % (target_branch)) else: print("we are even with Mattermost %s, no need to update" % release_version)
def test_adddockerfile_fails(tmpdir, docker_tasker): df_content = """ FROM fedora RUN yum install -y python-django CMD blabla""" df = DockerfileParser(str(tmpdir)) df.content = df_content workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image') workflow.builder = X workflow.builder.df_path = df.dockerfile_path workflow.builder.df_dir = str(tmpdir) runner = PreBuildPluginsRunner( docker_tasker, workflow, [{ 'name': AddDockerfilePlugin.key }] ) with pytest.raises(ValueError): runner.run()
def test_adddockerfile_fails(tmpdir, docker_tasker, caplog): df_content = """ FROM fedora RUN yum install -y python-django CMD blabla""" df = DockerfileParser(str(tmpdir)) df.content = df_content workflow = DockerBuildWorkflow(MOCK_SOURCE, 'test-image') workflow.builder = X workflow.builder.df_path = df.dockerfile_path workflow.builder.df_dir = str(tmpdir) runner = PreBuildPluginsRunner( docker_tasker, workflow, [{ 'name': AddDockerfilePlugin.key }] ) runner.run() assert "plugin 'add_dockerfile' raised an exception: ValueError" in caplog.text()