[copr] master: obsolete copr-doc (2ce403d)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 2ce403d79f4979376667af1a1204ef6d56f4c4e3
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Mon Jun 30 09:31:33 2014 +0200
obsolete copr-doc
so we have upgrade path from copr-doc to copr-frontend-doc
>---------------------------------------------------------------
frontend/copr-frontend.spec | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/frontend/copr-frontend.spec b/frontend/copr-frontend.spec
index eecd1d3..a2f4365 100644
--- a/frontend/copr-frontend.spec
+++ b/frontend/copr-frontend.spec
@@ -81,6 +81,7 @@ This package contains frontend.
%package doc
Summary: Code documentation for COPR
+Obsoletes: copr-doc < 1.38
%description doc
COPR is lightweight build system. It allows you to create new project in WebUI,
9 years, 10 months
[copr] master: document vm_name option (0f680f7)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 0f680f7264ba83e34fefabd391714b18325034b7
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Thu Jun 19 15:04:52 2014 +0200
document vm_name option
>---------------------------------------------------------------
backend/copr-be.conf.example | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/backend/copr-be.conf.example b/backend/copr-be.conf.example
index c101f54..cfcc2b1 100644
--- a/backend/copr-be.conf.example
+++ b/backend/copr-be.conf.example
@@ -37,6 +37,8 @@ terminate_playbook=/srv/copr-work/provision/terminatepb.yml
# Currently supported parameters:
# - ip
# IP address of builder which should be terminated
+# - vm_name
+# name of VM (if provided by spawn script)
# default is None (empty)
#terminate_vars=ip
9 years, 10 months
[copr] master: branch is epel7, not el7 (7e378c8)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 7e378c8a3fa90a53aadb6bd5b6684f54f1e9798b
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Thu Jun 19 13:15:27 2014 +0200
branch is epel7, not el7
>---------------------------------------------------------------
rel-eng/releasers.conf | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/rel-eng/releasers.conf b/rel-eng/releasers.conf
index 7a1d165..535f6d6 100644
--- a/rel-eng/releasers.conf
+++ b/rel-eng/releasers.conf
@@ -8,7 +8,7 @@ branches = master
[fedora-git-all]
releaser = tito.release.FedoraGitReleaser
-branches = master f20 f19 el6 el7
+branches = master f20 f19 el6 epel7
[copr-msuchy]
releaser = tito.release.CoprReleaser
9 years, 10 months
[copr] master: Automatic commit of package [copr-cli] release [1.33-1]. (022aff2)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 022aff28ef59f55e0cf48455789c1e9535493b8e
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Thu Jun 19 13:04:16 2014 +0200
Automatic commit of package [copr-cli] release [1.33-1].
>---------------------------------------------------------------
cli/copr-cli.spec | 10 +++++++++-
rel-eng/packages/copr-cli | 2 +-
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/cli/copr-cli.spec b/cli/copr-cli.spec
index 4a9650b..2f07a2a 100644
--- a/cli/copr-cli.spec
+++ b/cli/copr-cli.spec
@@ -4,7 +4,7 @@
%endif
Name: copr-cli
-Version: 1.32
+Version: 1.33
Release: 1%{?dist}
Summary: Command line interface for COPR
@@ -96,6 +96,14 @@ cp -a documentation/python-doc %{buildroot}%{_pkgdocdir}/
%endif
%changelog
+* Thu Jun 19 2014 Miroslav Suchý <msuchy(a)redhat.com> 1.33-1
+- cancel added to the man page
+- exit code 4 for failed build and man pages updated
+- error and shell return code 1 when build fails
+- delete a project
+- shell return codes with errors
+- copr-cli cancel fix
+
* Thu Apr 10 2014 Miroslav Suchý <msuchy(a)redhat.com> 1.32-1
- be less strict in parsing fas/copr-name
diff --git a/rel-eng/packages/copr-cli b/rel-eng/packages/copr-cli
index 4c3a81b..11914ae 100644
--- a/rel-eng/packages/copr-cli
+++ b/rel-eng/packages/copr-cli
@@ -1 +1 @@
-1.32-1 cli/
+1.33-1 cli/
9 years, 10 months
[copr] master: Automatic commit of package [copr-backend] release [1.36-1]. (6fe5d61)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 6fe5d614fdd92af391fc187d9564ba97179aaa40
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Thu Jun 19 12:55:29 2014 +0200
Automatic commit of package [copr-backend] release [1.36-1].
>---------------------------------------------------------------
backend/copr-backend.spec | 27 ++++++++++++++++++++++++++-
rel-eng/packages/copr-backend | 2 +-
2 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/backend/copr-backend.spec b/backend/copr-backend.spec
index de07ca6..a1ec576 100644
--- a/backend/copr-backend.spec
+++ b/backend/copr-backend.spec
@@ -3,7 +3,7 @@
%endif
Name: copr-backend
-Version: 1.35
+Version: 1.36
Release: 1%{?dist}
Summary: Backend for Copr
@@ -172,6 +172,31 @@ useradd -r -g copr -G lighttpd -s /bin/bash -c "COPR user" copr
%exclude %{_pkgdocdir}/playbooks
%changelog
+* Thu Jun 19 2014 Miroslav Suchý <msuchy(a)redhat.com> 1.36-1
+- backend: migrate to nova ansible module
+- backend: make sure that exit() exit whole script not just sub-shell
+- backend: allow passing additional info to playbooks
+- handle {spawn,terminate}_instance equally
+- backend: stop if you could not change to directory
+- W:310, 8: Attribute 'abort' defined outside __init__ (attribute-defined-
+ outside-init)
+- W:139, 0: Dangerous default value [] as argument (dangerous-default-value)
+ W:139, 0: Dangerous default value [0] as argument (dangerous-default-value)
+ W:139, 0: Dangerous default value ['stdout', 'stderr'] as argument
+ (dangerous-default-value)
+- W:543, 4: Dangerous default value DEF_MACROS ({}) as argument (dangerous-
+ default-value)
+- W:543, 4: Dangerous default value DEF_REPOS ([]) as argument (dangerous-
+ default-value)
+- W:677,24: Unused variable 'out' (unused-variable) W:677,20: Unused variable
+ 'rc' (unused-variable)
+- W:297,12: Unused variable 'hn' (unused-variable)
+- C:116, 0: Unnecessary parens after 'print' keyword (superfluous-parens)
+- W: 72,28: Unused variable 'out' (unused-variable) W: 72,24: Unused variable
+ 'rc' (unused-variable)
+- fix typo in exception message printing
+- 1102788 - Increase number of file descriptors on the build machine
+
* Fri May 30 2014 Miroslav Suchý <msuchy(a)redhat.com> 1.35-1
- follow selinux packaging draft
- [backend] epel 5 repo fix (sha256 -> sha)
diff --git a/rel-eng/packages/copr-backend b/rel-eng/packages/copr-backend
index 4413fa6..52840b5 100644
--- a/rel-eng/packages/copr-backend
+++ b/rel-eng/packages/copr-backend
@@ -1 +1 @@
-1.35-1 backend/
+1.36-1 backend/
9 years, 10 months
[copr] master: backend: migrate to nova ansible module (4258638)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 4258638ddbea3248bbd5eebda8ab652745838f95
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Wed Jun 18 16:50:11 2014 +0200
backend: migrate to nova ansible module
because ec2 module does not work in F20
and ansible upstream is reluctant to work on that:
https://github.com/ansible/ansible/pull/7603
>---------------------------------------------------------------
backend/backend/dispatcher.py | 8 +++-
backend/playbooks/builderpb.yml | 58 ++++++++++++++------
.../playbooks/{builderpb.yml => builderpb.yml.ec2} | 0
backend/playbooks/terminatepb.yml | 13 +++--
.../{terminatepb.yml => terminatepb.yml.ec2} | 0
5 files changed, 57 insertions(+), 22 deletions(-)
diff --git a/backend/backend/dispatcher.py b/backend/backend/dispatcher.py
index 7e6b16c..f1cdf01 100644
--- a/backend/backend/dispatcher.py
+++ b/backend/backend/dispatcher.py
@@ -122,6 +122,7 @@ class Worker(multiprocessing.Process):
self.events = events
self.worker_num = worker_num
self.ip = ip
+ self.vm_name = None
self.opts = opts
self.kill_received = False
self.callback = callback
@@ -228,9 +229,12 @@ class Worker(multiprocessing.Process):
match = re.search(r'IP=([^\{\}"]+)', result, re.MULTILINE)
if not match:
return None
-
ipaddr = match.group(1)
+ match = re.search(r'vm_name=([^\{\}"]+)', result, re.MULTILINE)
+ if match:
+ self.vm_name = match.group(1)
+
self.callback.log("got instance ip: {0}".format(ipaddr))
self.callback.log(
"Instance spawn/provision took {0} sec".format(time.time() - start))
@@ -261,6 +265,8 @@ class Worker(multiprocessing.Process):
for i in self.opts.terminate_vars.split(","):
if i == "ip":
term_args["ip"] = instance_ip
+ if i == "vm_name":
+ term_args["vm_name"] = self.vm_name
args = "-c ssh -i '{0},' {1} {2}".format(
instance_ip, self.opts.terminate_playbook,
diff --git a/backend/playbooks/builderpb.yml b/backend/playbooks/builderpb.yml
index 72fa12f..deccdc4 100644
--- a/backend/playbooks/builderpb.yml
+++ b/backend/playbooks/builderpb.yml
@@ -9,27 +9,38 @@
- image: ami-0000000e
- instance_type: m1.builder
- security_group: builder
+ - OS_AUTH_URL: http://172.23.0.2:5000/v2.0
+ - OS_TENANT_NAME: copr
+ - OS_TENANT_ID: {{ copr_tenant_id }}
+ - OS_USERNAME: msuchy
+ - OS_PASSWORD: {{ copr_nova_password }}
+ # rhel 6.4 2013-02-21 x86_64 - ami
+ - image_id: cba0c766-84ac-4048-b0f5-6d4000af62f8
tasks:
+
+ - name: generate builder name
+ local_action: command echo "Copr builder {{ 999999999 | random }}"
+ register: vm_name
+
- name: spin it up
- local_action: ec2 keypair={{ keypair }} image={{ image }} type={{ instance_type }} wait=true group={{ security_group }}
- register: inst_res
+ local_action: nova_compute auth_url={{OS_AUTH_URL}} flavor_id=6 image_id={{ image_id }} key_name=buildsys login_password={{OS_PASSWORD}} login_tenant_name={{OS_TENANT_NAME}} login_username={{OS_USERNAME}} security_groups={{security_group}} wait=yes name="{{vm_name.stdout}}"
+ register: nova
+
+ # should be able to use nova.private_ip, but it does not work with Fedora Cloud.
+ - debug: msg="IP={{ nova.info.addresses.vlannet_3[0].addr }}"
- - name: get its internal ip b/c openstack is sometimes stupid
- local_action: shell euca-describe-instances {{ inst_res.instances[0].id }} | grep INSTANCE | cut -f 18
- register: int_ip
+ - debug: msg="vm_name={{vm_name.stdout}}"
- name: add it to the special group
- local_action: add_host hostname={{ int_ip.stdout }} groupname=builder_temp_group
+ local_action: add_host hostname={{ nova.info.addresses.vlannet_3[0].addr }} groupname=builder_temp_group
- name: wait for the host to be hot
- local_action: wait_for host={{ int_ip.stdout }} port=22 delay=5 timeout=600
-
- - debug: msg="IP={{ int_ip.stdout }}"
-
+ local_action: wait_for host={{ nova.info.addresses.vlannet_3[0].addr }} port=22 delay=5 timeout=600
- hosts: builder_temp_group
user: root
+ gather_facts: False
vars:
- files: files/
@@ -37,23 +48,35 @@
- name: edit hostname to be instance name
action: shell hostname `curl -s http://169.254.169.254/2009-04-04/meta-data/instance-id`
+ - name: install pkgs
+ action: yum state=present pkg={{ item }}
+ with_items:
+ - rsync
+ - openssh-clients
+ - libselinux-python
+ - libsemanage-python
+
- name: add repos
action: copy src={{ files }}/{{ item }} dest=/etc/yum.repos.d/{{ item }}
with_items:
- builder.repo
- epel6.repo
- - name: install pkgs
+ - name: install additional pkgs
action: yum state=present pkg={{ item }}
with_items:
- mock
- createrepo
- yum-utils
- - rsync
- - openssh-clients
+ - pyliblzma
- name: make sure newest rpm
- action: yum name=rpm state=latest
+ action: yum name={{ item }} state=latest
+ with_items:
+ - rpm
+ - glib2
+
+ - yum: name=mock enablerepo=epel-testing state=latest
- name: mockbuilder user
action: user name=mockbuilder groups=mock
@@ -62,7 +85,7 @@
action: file state=directory path=/home/mockbuilder/.ssh mode=0700 owner=mockbuilder group=mockbuilder
- name: mockbuilder authorized_keys
- action: authorized_key user=mockbuilder key='$FILE({{ files }}/buildsys.pub)'
+ action: authorized_key user=mockbuilder key='{{ lookup('file', '/home/copr/provision/files/buildsys.pub') }}'
- name: put updated mock configs into /etc/mock
action: copy src={{ files }}/mock/{{ item }} dest=/etc/mock
@@ -70,5 +93,8 @@
- site-defaults.cfg
- epel-5-x86_64.cfg
- epel-5-i386.cfg
+ - fedora-20-x86_64.cfg
+ - fedora-20-i386.cfg
+ - epel-7-x86_64.cfg
-- lineinfile: dest=/root/.bashrc line="ulimit -n 10240" insertafter=EOF
+ - lineinfile: dest=/root/.bashrc line="ulimit -n 10240" insertafter=EOF
diff --git a/backend/playbooks/builderpb.yml b/backend/playbooks/builderpb.yml.ec2
similarity index 100%
copy from backend/playbooks/builderpb.yml
copy to backend/playbooks/builderpb.yml.ec2
diff --git a/backend/playbooks/terminatepb.yml b/backend/playbooks/terminatepb.yml
index ea61bad..155779b 100644
--- a/backend/playbooks/terminatepb.yml
+++ b/backend/playbooks/terminatepb.yml
@@ -4,13 +4,16 @@
user: root
gather_facts: False
- tasks:
- - name: find the instance id from the builder
- action: command curl -s http://169.254.169.254/latest/meta-data/instance-id
- register: instanceid
+ vars:
+ - OS_AUTH_URL: http://172.23.0.2:5000/v2.0
+ - OS_TENANT_NAME: copr
+ - OS_USERNAME: msuchy
+ - OS_PASSWORD: {{ copr_nova_password }}
+ tasks:
- name: terminate it
- local_action: command euca-terminate-instances {{ instanceid.stdout }}
+ local_action: nova_compute auth_url={{OS_AUTH_URL}} login_password={{OS_PASSWORD}} login_tenant_name={{OS_TENANT_NAME}} login_username={{OS_USERNAME}} name="{{vm_name}}" state=absent
+
diff --git a/backend/playbooks/terminatepb.yml b/backend/playbooks/terminatepb.yml.ec2
similarity index 100%
copy from backend/playbooks/terminatepb.yml
copy to backend/playbooks/terminatepb.yml.ec2
9 years, 10 months
[copr] master: backend: make sure that exit() exit whole script not just sub-shell (86cc6e4)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 86cc6e408a4caed36b806a32e7fbeba526cd5638
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Mon Jun 16 10:45:51 2014 +0200
backend: make sure that exit() exit whole script not just sub-shell
>---------------------------------------------------------------
backend/copr-prune-repo | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/backend/copr-prune-repo b/backend/copr-prune-repo
index c184ffc..7b5ac79 100755
--- a/backend/copr-prune-repo
+++ b/backend/copr-prune-repo
@@ -8,7 +8,7 @@ if [ ! -d $RESULTDIR ]; then
exit 1
fi
-pushd $RESULTDIR >/dev/null || ( echo "Could not change to $RESULTDIR"; exit 1)
+pushd $RESULTDIR >/dev/null || { echo "Could not change to $RESULTDIR"; exit 1; }
for REPO in $( ls -d */*/* | grep -v '/repodata$' ); do
pushd $REPO >/dev/null || continue
9 years, 10 months
[copr] master: backend: allow passing additional info to playbooks (09591c3)
by Miroslav Suchý
Repository : http://git.fedorahosted.org/cgit/copr.git
On branch : master
>---------------------------------------------------------------
commit 09591c30e2fc6b799160ee72ab900405073030b8
Author: Pavel Raiskup <praiskup(a)redhat.com>
Date: Fri Jun 13 14:04:15 2014 +0200
backend: allow passing additional info to playbooks
Sometimes is useful to parametrize spawn_instance or
terminate_instance ansible playbooks. Motivation for this was
that we want make the spawn_instance playbook clever enough to
give us proper builder machine based on 'chroot' architecture
(fedora-20-ppc64 should give us ppc64 machine).
>---------------------------------------------------------------
backend/backend/dispatcher.py | 32 +++++++++++++++++++++++++++-----
backend/copr-be.conf.example | 19 +++++++++++++++++++
backend/copr-be.py | 4 ++++
3 files changed, 50 insertions(+), 5 deletions(-)
diff --git a/backend/backend/dispatcher.py b/backend/backend/dispatcher.py
index 8a280ea..7e6b16c 100644
--- a/backend/backend/dispatcher.py
+++ b/backend/backend/dispatcher.py
@@ -26,6 +26,12 @@ try:
except ImportError:
pass # fedmsg is optional
+def ans_extra_vars_encode(extra_vars, name):
+ """ transform dict into --extra-vars="json string" """
+ if not extra_vars:
+ return ""
+ return "--extra-vars='{{\"{0}\": {1}}}'".format(
+ name, json.dumps(extra_vars))
class SilentPlaybookCallbacks(callbacks.PlaybookCallbacks):
@@ -197,7 +203,7 @@ class Worker(multiprocessing.Process):
self.callback.log(name + ": end")
return result
- def spawn_instance(self):
+ def spawn_instance(self, job):
"""call the spawn playbook to startup/provision a building instance"""
start = time.time()
@@ -205,7 +211,16 @@ class Worker(multiprocessing.Process):
# Ansible playbook python API does not work here, dunno why. See:
# https://groups.google.com/forum/#!topic/ansible-project/DNBD2oHv5k8
- args = "-c ssh {0}".format(self.opts.spawn_playbook)
+ extra_vars = {}
+ if self.opts.spawn_vars:
+ for i in self.opts.spawn_vars.split(","):
+ if i == 'chroot':
+ extra_vars['chroot'] = job['chroot']
+
+ args = "-c ssh {0} {1}".format(
+ self.opts.spawn_playbook,
+ ans_extra_vars_encode(extra_vars, "copr_task"))
+
result = self.run_ansible_playbook(args, "spawning instance")
if not result:
return None
@@ -241,8 +256,15 @@ class Worker(multiprocessing.Process):
def terminate_instance(self, instance_ip):
"""call the terminate playbook to destroy the building instance"""
- args = "-c ssh -i '{0},' {1}".format(instance_ip,
- self.opts.terminate_playbook)
+ term_args = {}
+ if self.opts.terminate_vars:
+ for i in self.opts.terminate_vars.split(","):
+ if i == "ip":
+ term_args["ip"] = instance_ip
+
+ args = "-c ssh -i '{0},' {1} {2}".format(
+ instance_ip, self.opts.terminate_playbook,
+ ans_extra_vars_encode(term_args, "copr_task"))
self.run_ansible_playbook(args, "terminate instance")
@@ -368,7 +390,7 @@ class Worker(multiprocessing.Process):
# spin up our build instance
if self.create:
try:
- ip = self.spawn_instance()
+ ip = self.spawn_instance(job)
if not ip:
raise errors.CoprWorkerError(
"No IP found from creating instance")
diff --git a/backend/copr-be.conf.example b/backend/copr-be.conf.example
index e92d14d..c101f54 100644
--- a/backend/copr-be.conf.example
+++ b/backend/copr-be.conf.example
@@ -17,10 +17,29 @@ frontend_auth=backend_password_from_fe_config
# default is /etc/copr/builder_playbook.yml
spawn_playbook=/srv/copr-work/provision/builderpb.yml
+# What variables will be send to spawn_playbook. Expects comma separated list
+# of keywords. For example 'spawn_vars=chroot' will create
+# 'copr_task["chroot"]' variable accessible from spawn_playbook.
+# Currently supported parameters
+# - chroot
+# string representation of expect chroot to be alloced, e.g.
+# fedora-rawhide-ppc64
+#
+# default is None (empty)
+#spawn_vars=chroot
+
# path to ansible playbook which terminate builder
# default is /etc/copr/terminate_playbook.yml
terminate_playbook=/srv/copr-work/provision/terminatepb.yml
+# The same option as 'spawn_vars' above, except that variables will be send to
+# terminate_playbook ansible script.
+# Currently supported parameters:
+# - ip
+# IP address of builder which should be terminated
+# default is None (empty)
+#terminate_vars=ip
+
# directory where jobs are stored
# no defaults
jobsdir=/var/lib/copr/jobs
diff --git a/backend/copr-be.py b/backend/copr-be.py
index f331513..fd7c01e 100755
--- a/backend/copr-be.py
+++ b/backend/copr-be.py
@@ -244,6 +244,10 @@ class CoprBackend(object):
opts.verbose = _get_conf(cp, "backend", "verbose", False)
opts.worker_logdir = _get_conf(
cp, "backend", "worker_logdir", "/var/log/copr/workers/")
+ opts.spawn_vars = _get_conf(cp, "backend", "spawn_vars", None)
+ opts.terminate_vars = _get_conf(cp, "backend", "terminate_vars",
+ None)
+
# thoughts for later
# ssh key for connecting to builders?
# cloud key stuff?
9 years, 10 months