GithubHelp home page GithubHelp logo

containerbuildsystem / koji-containerbuild Goto Github PK

View Code? Open in Web Editor NEW
29.0 29.0 31.0 700 KB

Container build support for Koji buildsystem

License: GNU Lesser General Public License v2.1

Python 96.87% Shell 3.13%

koji-containerbuild's People

Contributors

ausil avatar ben-alkov avatar bfontecc007 avatar breillyr avatar chmeliik avatar dependabot[bot] avatar hjmodi avatar hroncok avatar jarodwilson avatar ktdreyer avatar lcarva avatar lgtm-migrator avatar martinbasti avatar maxamillion avatar mikem23 avatar mkosiarc avatar mlangsdorf avatar mmilata avatar owtaylor avatar pbabinca avatar rcerven avatar sergsalatsky avatar sosiouxme avatar tkdchen avatar tkopecek avatar twaugh avatar vrutkovs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

koji-containerbuild's Issues

getBuild need add an argument 'strict=True'

This is the develop branch issue.

The getBuild method, called by the handler method by BuildContainerTask instance, need add a 'strict=True' argument. Otherwise, whether the build existed or not, the getBuild dosn't raise any exception, hence the handler will always exec the else clauses and complaint the build existed.

Cannot build without --scratch

When executing a build without --scratch flag, the build fails like this.

rhpkg -v container-build --target jb-rhel-7-docker-candidate
Missing {option} option in [{plugin.section}] section. Using {option} from [{root.section}]
Missing {option} option in [{plugin.section}] section. Using {option} from [{root.section}]
Initiating a brew session to http://brewhub.devel.redhat.com/brewhub
Creating repo object from /home/goldmann/dist-git/jboss-base-7-docker
Created task: 9750246
Task info: http://brewweb.devel.redhat.com/brew/taskinfo?taskID=9750246
Watching tasks (this may be safely interrupted)...
9750246 buildContainer (noarch): free
9750246 buildContainer (noarch): free -> open (x86-017.build.eng.bos.redhat.com)
  9750247 createContainer (noarch): free
  9750247 createContainer (noarch): free -> open (ppc-021.build.eng.bos.redhat.com)
  9750247 createContainer (noarch): open (ppc-021.build.eng.bos.redhat.com) -> closed
  0 free  1 open  1 done  0 failed
9750246 buildContainer (noarch): open (x86-017.build.eng.bos.redhat.com) -> FAILED: GenericError: No such rpm: {'name': 'gpg-pubkey', 'sigmd5': '(none)', 'buildtime': 1164971113, 'epoch': None, 'version': '2fa658e0', 'release': '45700c69', 'arch': '(none)', 'size': 0}
  0 free  0 open  1 done  1 failed

9750246 buildContainer (noarch) failed

It works properly with --scratch flag added.

A PKCS #11 module returned CKR_DEVICE_ERROR, indicating that a problem has occurred with the token or slot.

I am getting the following error when a build task is executed by the koji-containerbuild plugin (example in Fedora stage koji):

2016-03-08 20:56:00,174 [DEBUG] koji.build.BaseTaskHandler: Started by maxamillion
2016-03-08 20:56:00,175 [DEBUG] koji.build.BaseTaskHandler: create_build_args: {'target': 'f24-docker-candidate', 'component': 'cockpit', 'git_uri': 'git://pkgs.stg.fedoraproject.org/docker/cockpit', 'yum_repourls': [], 'architecture': 'a
rmv7hl', 'git_ref': '547da74e1d4e51d9366451bf28aba99a5df0f7c1', 'user': 'maxamillion'}
2016-03-08 20:56:00,175 [DEBUG] koji.build.BaseTaskHandler.osbs: osbs logger installed
2016-03-08 20:56:00,423 [INFO] koji.build.BaseTaskHandler.osbs.core: using basic authentication
2016-03-08 20:56:00,604 [DEBUG] koji.TaskManager: Local buildroots: 0
2016-03-08 20:56:00,605 [DEBUG] koji.TaskManager: Active buildroots: 0
2016-03-08 20:56:00,605 [DEBUG] koji.TaskManager: Expired/stray buildroots: 0
2016-03-08 20:56:00,605 [INFO] koji.TaskManager: pids: {90036366: 14857, 90036367: 14882}
2016-03-08 20:56:00,631 [DEBUG] koji.build: Scrubbing files in /var/tmp/koji/tasks/6367/90036367
2016-03-08 20:56:00,637 [DEBUG] koji.build: Scrubbing directories in /var/tmp/koji/tasks/6367/90036367
2016-03-08 20:56:00,645 [WARNING] koji.TaskManager: TRACEBACK: Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/koji/daemon.py", line 1161, in runTask
    response = (handler.run(),)
  File "/usr/lib/python2.7/site-packages/koji/tasks.py", line 158, in run
    return koji.util.call_with_argcheck(self.handler, self.params, self.opts)
  File "/usr/lib/python2.7/site-packages/koji/util.py", line 154, in call_with_argcheck
    return func(*args, **kwargs)
  File "/usr/lib/koji-builder-plugins/builder_containerbuild.py", line 479, in handler
    **create_build_args
  File "/usr/lib/python2.7/site-packages/osbs/api.py", line 37, in catch_exceptions
    return func(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/osbs/api.py", line 346, in create_build
    return self.create_prod_build(**kwargs)
  File "/usr/lib/python2.7/site-packages/osbs/api.py", line 48, in catch_exceptions
    raise OsbsException(cause=ex, traceback=sys.exc_info()[2])
OsbsException: Exception(u"Error connecting to https://osbs-dev.fedorainfracloud.org:8443/oauth/authorize?response_type=token&client_id=openshift-challenging-client: (<pycurl.Curl object at 0x34718b0>, 35, 'A PKCS #11 module returned CKR_DEVICE_ERROR, indicating that a problem has occurred with the token or slot.')",)

Original traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/osbs/api.py", line 37, in catch_exceptions
    return func(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/osbs/api.py", line 294, in create_prod_build
    response = self._create_build_config_and_build(build_request)
  File "/usr/lib/python2.7/site-packages/osbs/api.py", line 195, in _create_build_config_and_build
    running_builds = self._get_running_builds_for_build_config(build_config_name)
  File "/usr/lib/python2.7/site-packages/osbs/api.py", line 167, in _get_running_builds_for_build_config
    all_builds_for_bc = self.os.list_builds(build_config_id=build_config_id).json()['items']
  File "/usr/lib/python2.7/site-packages/osbs/core.py", line 356, in list_builds
    return self._get(url)
  File "/usr/lib/python2.7/site-packages/osbs/core.py", line 167, in _get
    headers, kwargs = self._request_args(with_auth, **kwargs)
  File "/usr/lib/python2.7/site-packages/osbs/core.py", line 138, in _request_args
    self.get_oauth_token()
  File "/usr/lib/python2.7/site-packages/osbs/core.py", line 185, in get_oauth_token
    username=self.username, password=self.password)
  File "/usr/lib/python2.7/site-packages/osbs/core.py", line 168, in _get
    return self._con.get(url, headers=headers, verify_ssl=self.verify_ssl, **kwargs)
  File "/usr/lib/python2.7/site-packages/osbs/http.py", line 105, in get
    return self.request(url, "get", **kwargs)
  File "/usr/lib/python2.7/site-packages/osbs/http.py", line 118, in request
    stream = HttpStream(url, *args, verbose=self.verbose, **kwargs)
  File "/usr/lib/python2.7/site-packages/osbs/http.py", line 242, in __init__
    self._perform()
  File "/usr/lib/python2.7/site-packages/osbs/http.py", line 261, in _perform
    raise Exception("Error connecting to %s: %s" % (self.url, err_obj))
Exception(u"Error connecting to https://osbs-dev.fedorainfracloud.org:8443/oauth/authorize?response_type=token&client_id=openshift-challenging-client: (<pycurl.Curl object at 0x34718b0>, 35, 'A PKCS #11 module returned CKR_DEVICE_ERROR, indicating that a problem has occurred with the token or slot.')",)

However I am able to execute a build from this koji builder host using osbs-client osbs build and it succeeds just fine.

I can also execute a build using the same osbs api calls that I see koji-containerbuild using:

>>> cba = {'target': 'f24-docker-candidate', 'component': 'cockpit', 'git_uri': 'git://pkgs.stg.fedoraproject.org/docker/cockpit', 'yum_repourls': [], 'architecture': 'armv7hl', 'git_ref': '547da74e1d4e51d9366451bf28aba99a5df0f7c1', 'user': 'maxamillion'}
>>> os_conf = Configuration()
>>> build_conf = Configuration()                                                                                       
>>> _osbs = OSBS(os_conf, build_conf)                                                                                  
>>> build_response = _osbs.create_build( **cba )                                                                       
2016-03-09 16:25:11,568 - osbs.conf - WARNING - u'builder_build_json_dir' not found, falling back u'build_json_dir'
>>> build_id = build_response.get_build_name()
>>> response = _osbs.wait_for_build_to_finish(build_id)
>>> response.is_succeeded()
True

Check build result in createContainer

Currently createContainer is marked as closed, even when the OpenShift build fails. Then buildContainer checks if the build was successful, which is its only interaction with OpenShift.

Can the check be moved to createContainer so that it's marked as failed when the build fails? The current behaviour is a bit confusing.

Furthermore, if only one of those tasks interacted with OpenShift it would unbreak the use case where koji builders in single channel talk to different OpenShift instances.

Related to #8.

location for container inspection scripts

I have a couple of read-only tools for inspecting containers:

  • koji-search-containers: This tool searches all OSBS container builds for a particular RPM build. The tool answers the question "which containers have this RPM"? It helps my product teams ensure that we're shipping the correct container image(s) alongside our RPMs.

  • koji-diff-containers: This tool looks up two OSBS container build NVRs in Koji, queries the RPMs within both containers, and prints the differences between the RPM lists. It helps my product teams ensure that the updates that we ship to users only contain the exact changes we intend.

  • koji-container-signatures: This tool inspects all the RPMs in a container build. It ensures that the RPM builds in the container are all signed by a particular GPG key (eg. Red Hat's gold-signing key). This helps us check that we are not shipping containers with unsigned or incorrectly-signed RPMs.

I can keep these tools in https://pagure.io/koji-tools, but they all share quite a few methods, so I would need to refactor them to use a central library. (For example, I have a method get_metadata() that downloads the OSBS metadata.json, another one that parses it, etc).

I'm wondering if it makes more sense to put these tools into the koji-containerbuild-cli plugin as additional sub-commands. What do you think?

Cannot rebuild failed build if last build's parent failed

After some glitches in OSBS, koji retrieved image tar ball and marked parent task as failed. After fixing OSBS, I tried to rebuild the container again, OSBS succeeded, but koji protested that the container tar archive already exists:

GenericError: Error importing build log. /mnt/brew/packages/rh-perl520-docker/5.20/4/data/logs/image/openshift-final.log already exists.

Koji should deal with it to allow respinning failed builds as it can be done with RPM packages.

Improve error message about unknown rpm

Currently if the plugin doesn't find an rpm it fails with the non user friendly error message:

GenericError:
No such rpm: {'name': 'percona-release', 'sigmd5': '5aa504c1068ad4d92b19ef93f0bb5703', 'buildtime': 1411373342, 'epoch': None, 'version': '0.1', 'release': '3', 'arch': 'noarch', 'size': 5921}

Improve it by nice printing of the rpm and the reason what happened. Maybe something like:

percona-release-0.1-3.noarch.rpm wasn't found in the (koji) buildystem. Containers can contain only > packages which are known by the buildsystem.

Use provided architecture label

The Architecture label should not be required. It should be taken from the base image (or to be more precise: last image that provides this label in the tree) or it should be set automatically by the builder.

Save v1 tarball with correct extension

Currently v1 tarball is always saved as .tar. If osbs compresses the output this will be misleading. Change the code so correct extension is used. Maybe there will be some osbs-client node change needed.

Don't fail on "local variable 'fullpath' referenced before assignment" it there are rpms to check

If build looks like successful but there are no rpms listed in rpmlist parent task fails with error:

Fault: <Fault 1: "<type 'exceptions.UnboundLocalError'>: local variable 'fullpath' referenced before assignment">

Results of the child task:
Results: {20187695: {'files': [], 'rpmlist': [], 'logs': ['build.log', 'openshift-final.log'], 'task_id': 20187695, 'repositories': [], 'osbs_build_id': 'docker-hello-world-unknown-3', 'arch': 'x86_64'}}

don't create Koji Build object, let OSBS create it using Content Generator API

Currently, the koji-containerbuild 'buildContainer' task creates a Koji Build object, and the 'createContainer' task starts the OSBS build.

Instead, the Build Object should be created by OSBS. In this new scheme, koji-containerbuild does not need to create a Koji Build object at all.

It will still need to stream build logs from the OSBS build, and cancel it when the Koji Task is cancelled.

I'm not clear enough on the difference between buildContainer and createContainer to say whether both are still needed. I tend towards thinking that they are, for multi-arch support(?).

This change is part of the new scheme for Koji integration, in which the Koji Build object is always created by CG import from atomic-reactor.

CC @maxamillion

See also

PyPI release

Could this project be released to PyPi so it can be installable via thing like Pipenv and Poetry?

kojiweb: format task parameters

Modify kojiweb templates to format task parameters.

Templates in koji repository are easy to modify. The problem is that koji's template system isn't pluggable/extensible by the koji plugins.

Lack of Dockerfile checkout for Flatpaks can bypass plugins

Internally inside Red Hat, we use a plugin that hooks into the koji postSCMCheckout callback to enforce policy on branches for container builds. This hook doesn't get run at all for a Flatpak build, because Flatpaks don't need the label checks, which means that Flatpaks bypass the policy enforcement.

I think it would make most sense to check out the repo and run the hooks. I don't see any value in trying to extensively validate the repo (this will be done when building), but a basic check that there is a container.yaml with a 'flatpak:' section might make sense to catch accidentally triggering a Flatpak build on some inappropriate repo (though rpkg already is going to check that 'container.yaml' exists and has compose: modules)

Mark child task as failed if it failed

Currently error checking is done on parent task so we won't loose couple of parameters (like name of the image, logs, list of rpm files, โ€ฆ). Successful child task may be confusing for developers.

reported by @voxik

[packit] Propose update failed for release 0.7.21

Packit failed on creating pull-requests in dist-git:

dist-git branch error
f31 Failed to parse SPEC file: error: line 21: Unknown tag: <<<<<<< HEAD

You can re-trigger the update by adding /packit propose-update to the issue comment.

Need to reinstate getUploadPath()

Traceback (most recent call last):
  File "/usr/lib/python2.6/site-packages/koji/daemon.py", line 1161, in runTask
    response = (handler.run(),)
  File "/usr/lib/python2.6/site-packages/koji/tasks.py", line 158, in run
    return koji.util.call_with_argcheck(self.handler, self.params, self.opts)
  File "/usr/lib/python2.6/site-packages/koji/util.py", line 154, in call_with_argcheck
    return func(*args, **kwargs)
  File "/usr/lib/koji-builder-plugins/builder_containerbuild.py", line 313, in handler
    self._incremental_upload_logs(pid)
  File "/usr/lib/koji-builder-plugins/builder_containerbuild.py", line 224, in _incremental_upload_logs
    uploadpath = self.getUploadPath()
AttributeError: 'CreateContainerTask' object has no attribute 'getUploadPath'

@maxamillion

getTaskResult returns stringify'd ints for koji_builds

The buildContainer task result has a koji_builds list. The elements in this list are stringify'd ints, rather than plain ints.

This makes it complicated to pass those build IDs back into Koji, like the listTags() RPC will fail because "string" means "Name-Version-Release", not a build ID, and it's difficult to tell from the server-side backtrace what has failed.

Here's an example:

koji --noauth call getTaskResult --json 71079852
{
  "repositories": [
    "candidate-registry.fedoraproject.org/grafana:7-3",
    "candidate-registry.fedoraproject.org/grafana:rawhide-container-candidate-64151-20210630140646",
    "candidate-registry.fedoraproject.org/grafana:latest",
    "candidate-registry.fedoraproject.org/grafana:7"
  ],
  "koji_builds": [
    "1776886"
  ]
}

The "1776886" value is in quotes because it's a string.

RFE: Documentation for configuring builder, profiles and targets

I would like to request documentation on what to do once the plugins are installed. I noticed the psql command needed here and this allows me to submit koji-containerbuild container-build tasks but my builder never picks up the task and the task just stays in the "free" status forever. I think I'm missing something.

Thank you,
-AdamM

improve error message for unpushed changes

This is not very helpful:

FAILED: BuildError: Error running GIT command "git reset --hard fb7a91693738a7910ebf0e82488b19693398b5a9", see checkout-for-labels.log for details

Our users could appreciate something like this:

Cannot find commit %s, did you push your changes?

Docs request: Security guide

I would like the request documentation on how to configure koji-containerbuild with an OSBS environment such that their communications are kept secure. Also, if there are other general security concerns it would be nice for them to be documented as well.

Thank you,
-AdamM

Auto populate the container version based on a "primary rpm" version

In Fedora we would like to automatically version our containers based on a "primary rpm". We have a couple of ticket open on this subject [0][1].

The current idea to implement this feature is to use a new optional LABEL in the Dockerfile, for example version.rpm. Then some logic would be added to koji-containerbuild to use the rpm defined in this LABEL to query koji using the getLatestBuild method. The result of the query would be used to populate the VERSION LABEL of the container.

I open this ticket to start the discussion on the implementation of this feature.

[0] - https://pagure.io/atomic-wg/issue/254
[1] - https://pagure.io/atomic-wg/issue/249

adding plugin causes tracebacks in httpd error_log

I have a local koji environment setup using kojak as well as the storage workaround.

The koji setup is running fine until I attempt to enable the koji-containerbuild plugin and then I get the following errors in /var/log/httpd/error_log ... I suspect it's something simple like I'm just missing a config param or something but I'm not sure what

[Mon Aug 10 12:03:02 2015] [crit] [client 192.168.122.1] configuration error:  couldn't perform authentication. AuthType not set!: /koji-static/debug.css, referer: http://koji.example.com/koji/
[Mon Aug 10 12:03:39 2015] [error] 2015-08-10 12:03:39,026 [ERROR] m=None u=None p=1692 r=?:? koji.plugins: Traceback (most recent call last):
[Mon Aug 10 12:03:39 2015] [error]   File "/usr/share/koji-hub/kojixmlrpc.py", line 507, in load_plugins
[Mon Aug 10 12:03:39 2015] [error]     tracker.load(name)
[Mon Aug 10 12:03:39 2015] [error]   File "/usr/lib/python2.6/site-packages/koji/plugin.py", line 74, in load
[Mon Aug 10 12:03:39 2015] [error]     file, pathname, description = imp.find_module(name, self.pathlist(path))
[Mon Aug 10 12:03:39 2015] [error] ImportError: No module named builder_containerbuild
[Mon Aug 10 12:03:39 2015] [error] 
[Mon Aug 10 12:03:39 2015] [error] 2015-08-10 12:03:39,027 [ERROR] m=None u=None p=1692 r=?:? koji: Traceback (most recent call last):
[Mon Aug 10 12:03:39 2015] [error]   File "/usr/share/koji-hub/kojixmlrpc.py", line 675, in server_setup
[Mon Aug 10 12:03:39 2015] [error]     registry = get_registry(opts, plugins)
[Mon Aug 10 12:03:39 2015] [error]   File "/usr/share/koji-hub/kojixmlrpc.py", line 782, in get_registry
[Mon Aug 10 12:03:39 2015] [error]     registry.register_plugin(plugins.get(name))
[Mon Aug 10 12:03:39 2015] [error]   File "/usr/share/koji-hub/kojixmlrpc.py", line 105, in register_plugin
[Mon Aug 10 12:03:39 2015] [error]     for v in vars(plugin).itervalues():
[Mon Aug 10 12:03:39 2015] [error] TypeError: vars() argument must have __dict__ attribute
[Mon Aug 10 12:03:39 2015] [error] 
[Mon Aug 10 12:13:41 2015] [error] 2015-08-10 12:13:41,105 [ERROR] m=None u=None p=1691 r=?:? koji.plugins: Traceback (most recent call last):
[Mon Aug 10 12:13:41 2015] [error]   File "/usr/share/koji-hub/kojixmlrpc.py", line 507, in load_plugins
[Mon Aug 10 12:13:41 2015] [error]     tracker.load(name)
[Mon Aug 10 12:13:41 2015] [error]   File "/usr/lib/python2.6/site-packages/koji/plugin.py", line 74, in load
[Mon Aug 10 12:13:41 2015] [error]     file, pathname, description = imp.find_module(name, self.pathlist(path))
[Mon Aug 10 12:13:41 2015] [error] ImportError: No module named builder_containerbuild
[Mon Aug 10 12:13:41 2015] [error] 
[Mon Aug 10 12:13:41 2015] [error] 2015-08-10 12:13:41,106 [ERROR] m=None u=None p=1691 r=?:? koji: Traceback (most recent call last):
[Mon Aug 10 12:13:41 2015] [error]   File "/usr/share/koji-hub/kojixmlrpc.py", line 675, in server_setup
[Mon Aug 10 12:13:41 2015] [error]     registry = get_registry(opts, plugins)
[Mon Aug 10 12:13:41 2015] [error]   File "/usr/share/koji-hub/kojixmlrpc.py", line 782, in get_registry
[Mon Aug 10 12:13:41 2015] [error]     registry.register_plugin(plugins.get(name))
[Mon Aug 10 12:13:41 2015] [error]   File "/usr/share/koji-hub/kojixmlrpc.py", line 105, in register_plugin
[Mon Aug 10 12:13:41 2015] [error]     for v in vars(plugin).itervalues():
[Mon Aug 10 12:13:41 2015] [error] TypeError: vars() argument must have __dict__ attribute
[Mon Aug 10 12:13:41 2015] [error] 
[Mon Aug 10 12:15:41 2015] [error] 2015-08-10 12:15:41,635 [ERROR] m=None u=None p=1687 r=?:? koji.plugins: Traceback (most recent call last):
[Mon Aug 10 12:15:41 2015] [error]   File "/usr/share/koji-hub/kojixmlrpc.py", line 507, in load_plugins
[Mon Aug 10 12:15:41 2015] [error]     tracker.load(name)
[Mon Aug 10 12:15:41 2015] [error]   File "/usr/lib/python2.6/site-packages/koji/plugin.py", line 74, in load
[Mon Aug 10 12:15:41 2015] [error]     file, pathname, description = imp.find_module(name, self.pathlist(path))
[Mon Aug 10 12:15:41 2015] [error] ImportError: No module named builder_containerbuild
[Mon Aug 10 12:15:41 2015] [error] 
[Mon Aug 10 12:15:41 2015] [error] 2015-08-10 12:15:41,636 [ERROR] m=None u=None p=1687 r=?:? koji: Traceback (most recent call last):
[Mon Aug 10 12:15:41 2015] [error]   File "/usr/share/koji-hub/kojixmlrpc.py", line 675, in server_setup
[Mon Aug 10 12:15:41 2015] [error]     registry = get_registry(opts, plugins)
[Mon Aug 10 12:15:41 2015] [error]   File "/usr/share/koji-hub/kojixmlrpc.py", line 782, in get_registry
[Mon Aug 10 12:15:41 2015] [error]     registry.register_plugin(plugins.get(name))
[Mon Aug 10 12:15:41 2015] [error]   File "/usr/share/koji-hub/kojixmlrpc.py", line 105, in register_plugin
[Mon Aug 10 12:15:41 2015] [error]     for v in vars(plugin).itervalues():
[Mon Aug 10 12:15:41 2015] [error] TypeError: vars() argument must have __dict__ attribute
[Mon Aug 10 12:15:41 2015] [error] 
[Mon Aug 10 12:17:42 2015] [error] 2015-08-10 12:17:42,219 [ERROR] m=None u=None p=1685 r=?:? koji.plugins: Traceback (most recent call last):
[Mon Aug 10 12:17:42 2015] [error]   File "/usr/share/koji-hub/kojixmlrpc.py", line 507, in load_plugins
[Mon Aug 10 12:17:42 2015] [error]     tracker.load(name)
[Mon Aug 10 12:17:42 2015] [error]   File "/usr/lib/python2.6/site-packages/koji/plugin.py", line 74, in load
[Mon Aug 10 12:17:42 2015] [error]     file, pathname, description = imp.find_module(name, self.pathlist(path))
[Mon Aug 10 12:17:42 2015] [error] ImportError: No module named builder_containerbuild
[Mon Aug 10 12:17:42 2015] [error] 
[Mon Aug 10 12:17:42 2015] [error] 2015-08-10 12:17:42,220 [ERROR] m=None u=None p=1685 r=?:? koji: Traceback (most recent call last):
[Mon Aug 10 12:17:42 2015] [error]   File "/usr/share/koji-hub/kojixmlrpc.py", line 675, in server_setup
[Mon Aug 10 12:17:42 2015] [error]     registry = get_registry(opts, plugins)
[Mon Aug 10 12:17:42 2015] [error]   File "/usr/share/koji-hub/kojixmlrpc.py", line 782, in get_registry
[Mon Aug 10 12:17:42 2015] [error]     registry.register_plugin(plugins.get(name))
[Mon Aug 10 12:17:42 2015] [error]   File "/usr/share/koji-hub/kojixmlrpc.py", line 105, in register_plugin
[Mon Aug 10 12:17:42 2015] [error]     for v in vars(plugin).itervalues():
[Mon Aug 10 12:17:42 2015] [error] TypeError: vars() argument must have __dict__ attribute
[Mon Aug 10 12:17:42 2015] [error] 

Build fails if log contains non-ASCII char

e.g.

Traceback (most recent call last):
  File "/usr/lib/python2.6/site-packages/koji/daemon.py", line 1161, in runTask
    response = (handler.run(),)
  File "/usr/lib/python2.6/site-packages/koji/tasks.py", line 158, in run
    return koji.util.call_with_argcheck(self.handler, self.params, self.opts)
  File "/usr/lib/python2.6/site-packages/koji/util.py", line 154, in call_with_argcheck
    return func(*args, **kwargs)
  File "/usr/lib/koji-builder-plugins/builder_containerbuild.py", line 536, in handler
    logs = self._download_logs(build_id)
  File "/usr/lib/koji-builder-plugins/builder_containerbuild.py", line 266, in _download_logs
    outfile.write(build_log_contents)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201c' in position 7826: ordinal not in range(128)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.