[copr] master: [backend] test build with disabled networking (08b1708)
by vgologuz@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 08b17088b6093aaf159d425f75f6e2b7a910e8ab
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Fri Jan 2 17:22:16 2015 +0100
[backend] test build with disabled networking
>---------------------------------------------------------------
backend/backend/exceptions.py | 5 ++-
backend/backend/mockremote/__init__.py | 1 +
backend/backend/mockremote/builder.py | 54 ++++++++++++++-----
backend/copr-backend.spec | 9 +++
backend/tests/mockremote/test_builder.py | 85 +++++++++++++++++++++++++-----
5 files changed, 126 insertions(+), 28 deletions(-)
diff --git a/backend/backend/exceptions.py b/backend/backend/exceptions.py
index 762d6df..164f4a7 100644
--- a/backend/backend/exceptions.py
+++ b/backend/backend/exceptions.py
@@ -13,7 +13,10 @@ class BuilderError(MockRemoteError):
class AnsibleCallError(BuilderError):
def __init__(self, msg, ansible_errors, cmd, module_name, as_root):
- super(AnsibleCallError, self).__init__(msg)
+ self.msg = "{}\nError: {}\nCall cmd: `{}`, module: `{}`, as root: {}".format(
+ msg, ansible_errors, cmd, module_name, as_root
+ )
+ super(AnsibleCallError, self).__init__(self.msg)
self.call_args = dict(
cmd=cmd,
module_name=module_name,
diff --git a/backend/backend/mockremote/__init__.py b/backend/backend/mockremote/__init__.py
index df5d79e..b889dad 100755
--- a/backend/backend/mockremote/__init__.py
+++ b/backend/backend/mockremote/__init__.py
@@ -138,6 +138,7 @@ class MockRemote(object):
opts=self.opts,
hostname=builder_host,
username=self.opts.build_user,
+ job=self.job,
chroot=self.job.chroot,
timeout=self.job.timeout or DEF_BUILD_TIMEOUT,
buildroot_pkgs=self.job.buildroot_pkgs,
diff --git a/backend/backend/mockremote/builder.py b/backend/backend/mockremote/builder.py
index 4b0b53b..903a12e 100644
--- a/backend/backend/mockremote/builder.py
+++ b/backend/backend/mockremote/builder.py
@@ -13,7 +13,7 @@ from ..constants import mockchain, rsync
class Builder(object):
- def __init__(self, opts, hostname, username,
+ def __init__(self, opts, hostname, username, job,
timeout, chroot, buildroot_pkgs,
callback,
remote_basedir, remote_tempdir=None,
@@ -23,6 +23,7 @@ class Builder(object):
self.opts = opts
self.hostname = hostname
self.username = username
+ self.job = job
self.timeout = timeout
self.chroot = chroot
self.repos = repos or []
@@ -130,7 +131,7 @@ class Builder(object):
return remote_pkg_dir
- def modify_base_buildroot(self):
+ def modify_mock_chroot_config(self):
"""
Modify mock config for current chroot.
@@ -147,19 +148,44 @@ class Builder(object):
self.callback.log("putting {0} into minimal buildroot of {1}"
.format(self.buildroot_pkgs, self.chroot))
- results = self._run_ansible(
- "dest=/etc/mock/{0}.cfg"
- " line=\"config_opts['chroot_setup_cmd'] = 'install @buildsys-build {1}'\""
+ kwargs = {
+ "chroot": self.chroot,
+ "pkgs": self.buildroot_pkgs
+ }
+ buildroot_cmd = (
+ "dest=/etc/mock/{chroot}.cfg"
+ " line=\"config_opts['chroot_setup_cmd'] = 'install @buildsys-build {pkgs}'\""
" regexp=\"^.*chroot_setup_cmd.*$\""
- .format(self.chroot, self.buildroot_pkgs),
- module_name="lineinfile", as_root=True)
-
- is_err, err_results = check_for_ans_error(results, self.hostname)
+ )
- if is_err:
- self.callback.log("Error: {0}".format(err_results))
- myresults = get_ans_results(results, self.hostname)
- self.callback.log("{0}".format(myresults))
+ disable_networking_cmd = (
+ "dest=/etc/mock/{chroot}.cfg"
+ " line=\"config_opts['use_host_resolv'] = False\""
+ " regexp=\"^.*user_host_resolv.*$\""
+ )
+ try:
+ self.run_ansible_with_check(buildroot_cmd.format(**kwargs),
+ module_name="lineinfile", as_root=True)
+ # TODO: do it conditionally
+ self.run_ansible_with_check(disable_networking_cmd.format(**kwargs),
+ module_name="lineinfile", as_root=True)
+ except BuilderError as err:
+ self.callback.log(str(err))
+
+
+ # results = self._run_ansible(
+ # "dest=/etc/mock/{0}.cfg"
+ # " line=\"config_opts['chroot_setup_cmd'] = 'install @buildsys-build {1}'\""
+ # " regexp=\"^.*chroot_setup_cmd.*$\""
+ # .format(self.chroot, self.buildroot_pkgs),
+ # module_name="lineinfile", as_root=True)
+ #
+ # is_err, err_results = check_for_ans_error(results, self.hostname)
+ #
+ # if is_err:
+ # self.callback.log("Error: {0}".format(err_results))
+ # myresults = get_ans_results(results, self.hostname)
+ # self.callback.log("{0}".format(myresults))
def collect_built_packages(self, build_details, pkg):
self.callback.log("Listing built binary packages")
@@ -262,7 +288,7 @@ class Builder(object):
# returns success_bool, out, err
build_details = {}
- self.modify_base_buildroot()
+ self.modify_mock_chroot_config()
# check if pkg is local or http
dest = self.check_if_pkg_local_or_http(pkg)
diff --git a/backend/copr-backend.spec b/backend/copr-backend.spec
index aa0fb70..7a99e1d 100644
--- a/backend/copr-backend.spec
+++ b/backend/copr-backend.spec
@@ -45,6 +45,9 @@ BuildRequires: python-copr
BuildRequires: python-six
BuildRequires: ansible >= 1.2
BuildRequires: python-IPy
+BuildRequires: python-paramiko
+BuildRequires: python-plumbum
+BuildRequires: wget
Requires: obs-signd
Requires: ansible >= 1.2
@@ -69,6 +72,8 @@ Requires: logrotate
Requires: fedmsg
Requires: gawk
Requires: crontabs
+Requires: python-paramiko
+Requires: python-plumbum
Requires(post): systemd
Requires(preun): systemd
@@ -100,6 +105,10 @@ pushd documentation
make %{?_smp_mflags} python
popd
+pushd /tmp
+wget http://people.redhat.com/~vgologuz/permanent/hello_beaker_test_2-0.0.1-1....
+popd
+
%install
install -d %{buildroot}%{_sharedstatedir}/copr
diff --git a/backend/tests/mockremote/test_builder.py b/backend/tests/mockremote/test_builder.py
index 8b623b4..6f80130 100644
--- a/backend/tests/mockremote/test_builder.py
+++ b/backend/tests/mockremote/test_builder.py
@@ -4,13 +4,14 @@ import copy
from collections import defaultdict
from pprint import pprint
from bunch import Bunch
-from backend.exceptions import BuilderError, BuilderTimeOutError
+from backend.exceptions import BuilderError, BuilderTimeOutError, AnsibleCallError
import tempfile
import shutil
import os
import six
+from backend.job import BuildJob
if six.PY3:
from unittest import mock
@@ -44,6 +45,13 @@ def assert_in_log(msg, log_list):
assert any(msg in record for record in log_list)
+STDOUT = "stdout"
+STDERR = "stderr"
+COPR_OWNER = "copr_owner"
+COPR_NAME = "copr_name"
+COPR_VENDOR = "vendor"
+
+
class TestBuilder(object):
BUILDER_BUILDROOT_PKGS = []
BUILDER_CHROOT = "fedora-20-i386"
@@ -65,10 +73,23 @@ class TestBuilder(object):
)
def get_test_builder(self):
+ self.job = BuildJob({
+ "project_owner": COPR_OWNER,
+ "project_name": COPR_NAME,
+ "pkgs": self.BUILDER_PKG,
+ "repos": "",
+ "build_id": 12345,
+ "chroot": self.BUILDER_CHROOT,
+ }, Bunch({
+ "timeout": 1800,
+ "destdir": self.test_root_path,
+ "results_baseurl": "/tmp/",
+ }))
builder = Builder(
opts=self.opts,
hostname=self.BUILDER_HOSTNAME,
username=self.BUILDER_USER,
+ job=self.job,
timeout=self.BUILDER_TIMEOUT,
chroot=self.BUILDER_CHROOT,
buildroot_pkgs=self.BUILDER_BUILDROOT_PKGS,
@@ -432,7 +453,7 @@ class TestBuilder(object):
]:
with pytest.raises(BuilderError) as err:
builder.buildroot_pkgs = bad_pkg
- builder.modify_base_buildroot()
+ builder.modify_mock_chroot_config()
def test_modify_base_buildroot_on_error(self, ):
builder = self.get_test_builder()
@@ -443,7 +464,7 @@ class TestBuilder(object):
"dark": {}
}
- builder.modify_base_buildroot()
+ builder.modify_mock_chroot_config()
assert_in_log("putting {} into minimal buildroot of fedora-20-i386".format(br_pkgs),
self._cb_log)
@@ -462,6 +483,7 @@ class TestBuilder(object):
def test_modify_base_buildroot(self, ):
builder = self.get_test_builder()
+ # TODO: rewrite test to use builder.run_ansible_with_check
br_pkgs = "foo bar"
builder.buildroot_pkgs = br_pkgs
builder.root_conn.run.return_value = {
@@ -469,20 +491,20 @@ class TestBuilder(object):
"dark": {}
}
- builder.modify_base_buildroot()
+ builder.modify_mock_chroot_config()
assert_in_log("putting {} into minimal buildroot of fedora-20-i386".format(br_pkgs),
self._cb_log)
assert not builder.conn.run.called
assert builder.root_conn.run.called
-
- expected = (
- "dest=/etc/mock/{}.cfg "
- "line=\"config_opts['chroot_setup_cmd'] = 'install @buildsys-build {}'\" "
- "regexp=\"^.*chroot_setup_cmd.*$\""
- ).format(self.BUILDER_CHROOT, br_pkgs)
- assert builder.root_conn.module_args == expected
+ #
+ # expected = (
+ # "dest=/etc/mock/{}.cfg "
+ # "line=\"config_opts['chroot_setup_cmd'] = 'install @buildsys-build {}'\" "
+ # "regexp=\"^.*chroot_setup_cmd.*$\""
+ # ).format(self.BUILDER_CHROOT, br_pkgs)
+ # assert builder.root_conn.module_args == expected
def test_collect_build_packages(self):
builder = self.get_test_builder()
@@ -504,6 +526,43 @@ class TestBuilder(object):
assert builder.conn.module_args == expected
@mock.patch("backend.mockremote.builder.check_for_ans_error")
+ def test_run_ansible_with_check(self, mc_check_for_ans_errror):
+ builder = self.get_test_builder()
+
+ cmd = "cmd"
+ module_name = "module_name"
+ as_root = True
+
+ err_codes = [1, 3, 7, ]
+ success_codes = [0, 255]
+
+ results = mock.MagicMock()
+
+ err_results = mock.MagicMock()
+
+ mc_check_for_ans_errror.return_value = (False, [])
+ builder._run_ansible = mock.MagicMock()
+ builder._run_ansible.return_value = results
+
+ got_results = builder.run_ansible_with_check(
+ cmd, module_name, as_root, err_codes, success_codes)
+
+ assert results == got_results
+ expected_call_run = mock.call(cmd, module_name, as_root)
+ assert expected_call_run == builder._run_ansible.call_args
+ expected_call_check = mock.call(results, builder.hostname,
+ err_codes, success_codes)
+ assert expected_call_check == mc_check_for_ans_errror.call_args
+
+ mc_check_for_ans_errror.return_value = (True, err_results)
+
+ with pytest.raises(AnsibleCallError):
+ builder.run_ansible_with_check(
+ cmd, module_name, as_root, err_codes, success_codes)
+
+
+
+ @mock.patch("backend.mockremote.builder.check_for_ans_error")
def test_check_build_success(self, mc_check_for_ans_errror):
builder = self.get_test_builder()
@@ -673,7 +732,7 @@ class TestBuilder(object):
def test_build(self):
builder = self.get_test_builder()
- builder.modify_base_buildroot = MagicMock()
+ builder.modify_mock_chroot_config = MagicMock()
builder.check_if_pkg_local_or_http = MagicMock()
builder.check_if_pkg_local_or_http.return_value = self.BUILDER_PKG
@@ -698,7 +757,7 @@ class TestBuilder(object):
assert success
assert stdout == self.STDOUT
assert stderr == self.STDERR
- assert builder.modify_base_buildroot.called
+ assert builder.modify_mock_chroot_config.called
assert builder.check_if_pkg_local_or_http.called
assert builder.run_command_and_wait.called
assert builder.check_build_success.called
9 years, 3 months
[copr] master: [backend] simplified mockremote.builder.Builder.check_for_ans_error; new method mockremote.builder.Builder.run_ansible_with_check (95dc269)
by vgologuz@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 95dc269746bb39c79116feb7d77b2596914b0a4c
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Fri Jan 2 16:34:15 2015 +0100
[backend] simplified mockremote.builder.Builder.check_for_ans_error; new method mockremote.builder.Builder.run_ansible_with_check
>---------------------------------------------------------------
backend/backend/exceptions.py | 11 +++++++
backend/backend/mockremote/builder.py | 45 ++++++++++++++++-------------
backend/tests/mockremote/test_builder.py | 5 +--
3 files changed, 38 insertions(+), 23 deletions(-)
diff --git a/backend/backend/exceptions.py b/backend/backend/exceptions.py
index 7efa807..762d6df 100644
--- a/backend/backend/exceptions.py
+++ b/backend/backend/exceptions.py
@@ -11,6 +11,17 @@ class BuilderError(MockRemoteError):
pass
+class AnsibleCallError(BuilderError):
+ def __init__(self, msg, ansible_errors, cmd, module_name, as_root):
+ super(AnsibleCallError, self).__init__(msg)
+ self.call_args = dict(
+ cmd=cmd,
+ module_name=module_name,
+ as_root=as_root,
+ )
+ self.ansible_errors = ansible_errors
+
+
class BuilderTimeOutError(BuilderError):
pass
diff --git a/backend/backend/mockremote/builder.py b/backend/backend/mockremote/builder.py
index cdcb3bd..4b0b53b 100644
--- a/backend/backend/mockremote/builder.py
+++ b/backend/backend/mockremote/builder.py
@@ -6,7 +6,7 @@ import time
from ansible.runner import Runner
-from ..exceptions import BuilderError, BuilderTimeOutError
+from ..exceptions import BuilderError, BuilderTimeOutError, AnsibleCallError
from ..constants import mockchain, rsync
@@ -85,6 +85,22 @@ class Builder(object):
timeout=self.timeout)
return ans_conn
+ def run_ansible_with_check(self, cmd, module_name=None, as_root=False,
+ err_codes=None, success_codes=None):
+
+ results = self._run_ansible(cmd, module_name, as_root)
+ error, err_results = check_for_ans_error(
+ results, self.hostname, err_codes, success_codes)
+
+ if error:
+ raise AnsibleCallError(
+ msg="Failed to execute ansible command",
+ ansible_errors=err_results,
+ cmd=cmd, module_name=module_name, as_root=as_root
+ )
+
+ return results
+
def _run_ansible(self, cmd, module_name=None, as_root=False):
"""
Executes single ansible module
@@ -138,9 +154,7 @@ class Builder(object):
.format(self.chroot, self.buildroot_pkgs),
module_name="lineinfile", as_root=True)
- is_err, err_results = check_for_ans_error(
- results, self.hostname, success_codes=[0],
- return_on_error=["stdout", "stderr"])
+ is_err, err_results = check_for_ans_error(results, self.hostname)
if is_err:
self.callback.log("Error: {0}".format(err_results))
@@ -167,8 +181,7 @@ class Builder(object):
err = myresults.get("stderr", "")
successfile = os.path.join(self._get_remote_pkg_dir(pkg), "success")
results = self._run_ansible("/usr/bin/test -f {0}".format(successfile))
- is_err, err_results = check_for_ans_error(
- results, self.hostname, success_codes=[0])
+ is_err, err_results = check_for_ans_error(results, self.hostname)
return err, is_err, out
def check_if_pkg_local_or_http(self, pkg):
@@ -269,9 +282,7 @@ class Builder(object):
except BuilderTimeOutError:
return False, "", "Timeout expired", build_details
- is_err, err_results = check_for_ans_error(
- results, self.hostname, success_codes=[0],
- return_on_error=["stdout", "stderr"])
+ is_err, err_results = check_for_ans_error(results, self.hostname)
if is_err:
return (False, err_results.get("stdout", ""),
@@ -329,8 +340,7 @@ class Builder(object):
res = self._run_ansible("/bin/rpm -q mock rsync")
# check for mock/rsync from results
- is_err, err_results = check_for_ans_error(
- res, self.hostname, success_codes=[0])
+ is_err, err_results = check_for_ans_error(res, self.hostname)
if is_err:
if "rc" in err_results:
@@ -348,8 +358,7 @@ class Builder(object):
" && /usr/bin/test -f /etc/mock/{1}.cfg"
.format(mockchain, self.chroot))
- is_err, err_results = check_for_ans_error(
- res, self.hostname, success_codes=[0])
+ is_err, err_results = check_for_ans_error(res, self.hostname)
if is_err:
if "rc" in err_results:
@@ -366,8 +375,6 @@ class Builder(object):
raise BuilderError(msg)
-
-
def get_ans_results(results, hostname):
if hostname in results["dark"]:
return results["dark"][hostname]
@@ -377,8 +384,7 @@ def get_ans_results(results, hostname):
return {}
-def check_for_ans_error(results, hostname, err_codes=None, success_codes=None,
- return_on_error=None):
+def check_for_ans_error(results, hostname, err_codes=None, success_codes=None):
"""
dict includes 'msg'
may include 'rc', 'stderr', 'stdout' and any other requested result codes
@@ -390,8 +396,7 @@ def check_for_ans_error(results, hostname, err_codes=None, success_codes=None,
err_codes = []
if success_codes is None:
success_codes = [0]
- if return_on_error is None:
- return_on_error = ["stdout", "stderr"]
+
err_results = {}
if "dark" in results and hostname in results["dark"]:
@@ -422,7 +427,7 @@ def check_for_ans_error(results, hostname, err_codes=None, success_codes=None,
err_results["msg"] = "results included failed as true"
if error:
- for item in return_on_error:
+ for item in ["stdout", "stderr"]:
if item in results["contacted"][hostname]:
err_results[item] = results["contacted"][hostname][item]
diff --git a/backend/tests/mockremote/test_builder.py b/backend/tests/mockremote/test_builder.py
index 39eb0ed..8b623b4 100644
--- a/backend/tests/mockremote/test_builder.py
+++ b/backend/tests/mockremote/test_builder.py
@@ -231,13 +231,12 @@ class TestBuilder(object):
"rc": 2,
"stdout": "stdout",
"stderr": "stderr",
- "stdother": "stdother",
}}
}, self.BUILDER_HOSTNAME
],
- "kwargs": {"err_codes": [2, 3], "return_on_error": ["stdother"]},
+ "kwargs": {"err_codes": [2, 3]},
"expected_return": (True, {"rc": 2, "msg": "rc 2 matched err_codes",
- "stdother": "stdother"}),
+ "stdout": "stdout", "stderr": "stderr"}),
"expected_exception": None
},
{
9 years, 3 months
[copr] master: [backend] daemons.dispatched.Worker: don't fail when wrong group_id was provided (bug was detected by TestDispatcher.test_terminate_instance_missed_playbook) (4aa7e7e)
by vgologuz@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 4aa7e7eced8c1166fbd2b75eef66cc6ef06ea2d7
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Fri Jan 16 11:42:58 2015 +0100
[backend] daemons.dispatched.Worker: don't fail when wrong group_id was provided (bug was detected by TestDispatcher.test_terminate_instance_missed_playbook)
>---------------------------------------------------------------
backend/backend/daemons/dispatcher.py | 13 +++++++++++--
1 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/backend/backend/daemons/dispatcher.py b/backend/backend/daemons/dispatcher.py
index 9ef2e97..c71601e 100644
--- a/backend/backend/daemons/dispatcher.py
+++ b/backend/backend/daemons/dispatcher.py
@@ -111,7 +111,7 @@ class Worker(multiprocessing.Process):
self.callback = callback
if not self.callback:
log_name = "worker-{0}-{1}.log".format(
- self.opts.build_groups[self.group_id]["name"],
+ self.group_name,
self.worker_num)
self.logfile = os.path.join(self.opts.worker_logdir, log_name)
@@ -121,6 +121,15 @@ class Worker(multiprocessing.Process):
self.vm_ip = None
self.callback.log("creating worker: dynamic ip")
+ @property
+ def group_name(self):
+ try:
+ return self.opts.build_groups[self.group_id]["name"]
+ except Exception as error:
+ self.callback.log("Failed to get builder group name from config, using group_id as name."
+ "Original error: {}".format(error))
+ return self.group_id
+
def event(self, topic, template, content=None):
""" Multi-purpose logging method.
@@ -610,7 +619,7 @@ class Worker(multiprocessing.Process):
self.terminate_instance()
def update_process_title(self, suffix=None):
- title = "worker-{} {} ".format(self.opts.build_groups[self.group_id]["name"], self.worker_num)
+ title = "worker-{} {} ".format(self.group_name, self.worker_num)
if self.vm_ip:
title += "VM_IP={} ".format(self.vm_ip)
if self.vm_name:
9 years, 3 months
[copr] master: [backend] add vm_ip to worker process title (rhbz: 1182637) (d2b4ca9)
by vgologuz@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit d2b4ca9500ca9040066c672ad51e3861b72f784e
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Fri Jan 16 11:32:59 2015 +0100
[backend] add vm_ip to worker process title (rhbz: 1182637)
>---------------------------------------------------------------
backend/backend/daemons/dispatcher.py | 30 +++++++++++++++++++++---------
1 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/backend/backend/daemons/dispatcher.py b/backend/backend/daemons/dispatcher.py
index ca777a8..9ef2e97 100644
--- a/backend/backend/daemons/dispatcher.py
+++ b/backend/backend/daemons/dispatcher.py
@@ -324,6 +324,7 @@ class Worker(multiprocessing.Process):
self.callback.log("Spawning a builder. Try No. {0}".format(i))
self.vm_ip = self.try_spawn(spawn_args)
+ self.update_process_title()
try:
self.validate_vm()
except CoprWorkerSpawnFailError:
@@ -334,14 +335,14 @@ class Worker(multiprocessing.Process):
.format(time.time() - start))
except CoprWorkerSpawnFailError as exception:
- self.callback.log("VM Spawn attemp failed with message: {}"
+ self.callback.log("VM Spawn attempt failed with message: {}"
.format(exception.msg))
def terminate_instance(self):
"""
Call the terminate playbook to destroy the building instance
"""
-
+ self.update_process_title(suffix="Terminating VM")
term_args = {}
if "ip" in self.opts.terminate_vars:
term_args["ip"] = self.vm_ip
@@ -363,6 +364,7 @@ class Worker(multiprocessing.Process):
# TODO: should we check that machine was destroyed?
self.vm_ip = None
self.vm_name = None
+ self.update_process_title()
def mark_started(self, job):
"""
@@ -442,6 +444,7 @@ class Worker(multiprocessing.Process):
- :py:class:`~backend.exceptions.CoprWorkerError`: spawn function doesn't return ip
- :py:class:`AnsibleError`: failure during anible command execution
"""
+ self.update_process_title(suffix="Spawning a new VM")
try:
self.spawn_instance()
if not self.vm_ip:
@@ -482,9 +485,7 @@ class Worker(multiprocessing.Process):
Retrieves new build task from queue.
Checks if the new job can be started and not skipped.
"""
- setproctitle("worker-{0} {1} No task".format(
- self.opts.build_groups[self.group_id]["name"],
- self.worker_num))
+ self.update_process_title(suffix="No task")
# this sometimes caused TypeError in random worker
# when another one picekd up a task to build
@@ -499,10 +500,7 @@ class Worker(multiprocessing.Process):
# import ipdb; ipdb.set_trace()
job = BuildJob(task.data, self.opts)
- setproctitle("worker-{0} {1} Task: {2}".format(
- self.opts.build_groups[self.group_id]["name"],
- self.worker_num, job.build_id
- ))
+ self.update_process_title(suffix="Task: {} chroot: {}".format(job.build_id, job.chroot))
# Checking whether the build is not cancelled
if not self.starting_build(job):
@@ -596,6 +594,8 @@ class Worker(multiprocessing.Process):
job.status = status
self._announce_end(job)
+ self.update_process_title(suffix="Task: {} chroot: {} done"
+ .format(job.build_id, job.chroot))
def check_vm_still_alive(self):
"""
@@ -609,6 +609,17 @@ class Worker(multiprocessing.Process):
except CoprWorkerSpawnFailError:
self.terminate_instance()
+ def update_process_title(self, suffix=None):
+ title = "worker-{} {} ".format(self.opts.build_groups[self.group_id]["name"], self.worker_num)
+ if self.vm_ip:
+ title += "VM_IP={} ".format(self.vm_ip)
+ if self.vm_name:
+ title += "VM_NAME={} ".format(self.vm_name)
+ if suffix:
+ title += str(suffix)
+
+ setproctitle(title)
+
def run(self):
"""
Worker should startup and check if it can function
@@ -621,6 +632,7 @@ class Worker(multiprocessing.Process):
self.init_fedmsg()
while not self.kill_received:
+ self.update_process_title()
self.check_vm_still_alive()
if self.opts.spawn_in_advance and not self.vm_ip:
9 years, 3 months
[copr] master: Automatic commit of package [copr-backend] release [1.56-1]. (f15ef36)
by vgologuz@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit f15ef363c1e4a0ef5c8d7032654934bce2464ce6
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Wed Jan 14 20:32:29 2015 +0100
Automatic commit of package [copr-backend] release [1.56-1].
>---------------------------------------------------------------
backend/copr-backend.spec | 5 ++++-
rel-eng/packages/copr-backend | 2 +-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/backend/copr-backend.spec b/backend/copr-backend.spec
index 2007968..aa0fb70 100644
--- a/backend/copr-backend.spec
+++ b/backend/copr-backend.spec
@@ -3,7 +3,7 @@
%endif
Name: copr-backend
-Version: 1.55
+Version: 1.56
Release: 1%{?dist}
Summary: Backend for Copr
@@ -204,6 +204,9 @@ useradd -r -g copr -G lighttpd -s /bin/bash -c "COPR user" copr
%exclude %{_pkgdocdir}/playbooks
%changelog
+* Wed Jan 14 2015 Valentin Gologuzov <vgologuz(a)redhat.com> 1.56-1
+- [backend] [.spec] fix %files section
+
* Wed Jan 14 2015 Valentin Gologuzov <vgologuz(a)redhat.com> 1.55-1
- [backend] [bugfix] set pythonpath in systemd unit to run /usr/bin/copr_be.py
- [backend] [RHBZ:#1182106] JobGrabber dies when action raises an exception.
diff --git a/rel-eng/packages/copr-backend b/rel-eng/packages/copr-backend
index bc7ab87..ffdd123 100644
--- a/rel-eng/packages/copr-backend
+++ b/rel-eng/packages/copr-backend
@@ -1 +1 @@
-1.55-1 backend/
+1.56-1 backend/
9 years, 3 months
[copr] master: [backend] [.spec] fix %files section (e554403)
by vgologuz@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit e554403ea3cd6258ec7e61fe02fafb3c08a1e543
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Wed Jan 14 20:31:13 2015 +0100
[backend] [.spec] fix %files section
>---------------------------------------------------------------
backend/copr-backend.spec | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/backend/copr-backend.spec b/backend/copr-backend.spec
index 7d5cde4..2007968 100644
--- a/backend/copr-backend.spec
+++ b/backend/copr-backend.spec
@@ -191,7 +191,7 @@ useradd -r -g copr -G lighttpd -s /bin/bash -c "COPR user" copr
%config(noreplace) %attr(0640, root, copr) %{_sysconfdir}/copr/copr-be.conf
%{_unitdir}/copr-backend.service
%{_tmpfilesdir}/copr-backend.conf
-%{_bindir}/
+%{_bindir}/*
%config(noreplace) %{_sysconfdir}/cron.daily/copr-backend
9 years, 3 months
[copr] master: Automatic commit of package [copr-backend] release [1.55-1]. (6dbef4e)
by vgologuz@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 6dbef4e4f8b4c84c3e34e298054091b1640a2275
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Wed Jan 14 19:51:28 2015 +0100
Automatic commit of package [copr-backend] release [1.55-1].
>---------------------------------------------------------------
backend/copr-backend.spec | 7 ++++++-
rel-eng/packages/copr-backend | 2 +-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/backend/copr-backend.spec b/backend/copr-backend.spec
index b7bf343..7d5cde4 100644
--- a/backend/copr-backend.spec
+++ b/backend/copr-backend.spec
@@ -3,7 +3,7 @@
%endif
Name: copr-backend
-Version: 1.54
+Version: 1.55
Release: 1%{?dist}
Summary: Backend for Copr
@@ -204,6 +204,11 @@ useradd -r -g copr -G lighttpd -s /bin/bash -c "COPR user" copr
%exclude %{_pkgdocdir}/playbooks
%changelog
+* Wed Jan 14 2015 Valentin Gologuzov <vgologuz(a)redhat.com> 1.55-1
+- [backend] [bugfix] set pythonpath in systemd unit to run /usr/bin/copr_be.py
+- [backend] [RHBZ:#1182106] JobGrabber dies when action raises an exception.
+- [backend] Moved scripts into /usr/bin/ Renamed copr{-,_}be.py.
+
* Wed Jan 07 2015 Miroslav Suchý <msuchy(a)redhat.com> 1.54-1
- 1179713 - workaround for 1179806
- run script unbufferred otherwise log is written after full block
diff --git a/rel-eng/packages/copr-backend b/rel-eng/packages/copr-backend
index d7c4d2c..bc7ab87 100644
--- a/rel-eng/packages/copr-backend
+++ b/rel-eng/packages/copr-backend
@@ -1 +1 @@
-1.54-1 backend/
+1.55-1 backend/
9 years, 3 months
[copr] master: [backend] [bugfix] path python path to run from /usr/bin/copr_be.py (fd9dddf)
by vgologuz@fedoraproject.org
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit fd9dddf1e00b3db3d88fea8502e097b7f3c19851
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Wed Jan 14 14:51:23 2015 +0100
[backend] [bugfix] path python path to run from /usr/bin/copr_be.py
>---------------------------------------------------------------
backend/copr-backend.service | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/backend/copr-backend.service b/backend/copr-backend.service
index 1c2b58b..cbfbdea 100644
--- a/backend/copr-backend.service
+++ b/backend/copr-backend.service
@@ -5,6 +5,7 @@ After=syslog.target network.target auditd.service
[Service]
Type=simple
PIDFile=/var/run/copr-backend/copr-be.pid
+Environment="PYTHONPATH=/usr/share/copr/"
EnvironmentFile=/home/copr/cloud/ec2rc.variable
User=copr
Group=copr
9 years, 3 months