Refactor buildtestpackages for downstream purpose

It includes:
* parameterize rdoinfo_repo_name
* Use zuul dict to parse zuul changes and remove zuul_deps
  ansible plugin as it is no longer needed.
* Added dlrn config template for downstream and should be
  enabled only when osp_release is defined.
* Use latest rdopkg
* It also fixes the DLRN installing from source.
* Moves dlrn command to shell script
* Remove deprecated parts of DLRN-0.8.0
* find out zuul dict only when there is a change_url otherwise
  ignore it.

https://tree.taiga.io/project/tripleo-ci-board/task/1789

Change-Id: I48bcddbc7693375396a99dc0ee79d32f6e4a4863
Signed-off-by: Chandan Kumar (raukadah) <chkumar@redhat.com>
This commit is contained in:
Chandan Kumar (raukadah) 2020-05-12 19:28:28 +05:30
parent 08081fafba
commit c3a2d81104
6 changed files with 137 additions and 155 deletions

View File

@ -1,9 +1,9 @@
--- ---
build_repo_dir: "{{ ansible_user_dir }}" build_repo_dir: "{{ ansible_user_dir }}"
rdoinfo_repo_name: rdoinfo
artg_dlrn_repo_url: "https://github.com/openstack-packages/DLRN.git" artg_dlrn_repo_url: "https://github.com/openstack-packages/DLRN.git"
artg_rdoinfo_repo_url: "https://github.com/redhat-openstack/rdoinfo" artg_rdoinfo_repo_url: https://github.com/redhat-openstack/rdoinfo
artg_compressed_gating_repo: "/home/stack/gating_repo.tar.gz" artg_compressed_gating_repo: "/home/stack/gating_repo.tar.gz"
artg_build_one: true artg_build_one: true
artg_rdo_packages: [] artg_rdo_packages: []

View File

@ -1,83 +0,0 @@
#!/usr/bin/python
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# see http://docs.ansible.com/developing_modules.html#common-module-boilerplate
from ansible.module_utils.basic import *
DOCUMENTATION = '''
---
module: zuul_deps
version_added: "2.0"
short_description: Transforms the dependent changes variable from Zuul format into a dictionary
description:
- Transforms the dependent changes variable from Zuul format into a dictionary
options:
host:
description:
- The content of the ZUUL_URL variable
required: True
changes:
description:
- The content of the ZUUL_CHANGES variable
required: True
branch:
description:
- Which branch to transform dependent changes on.
default: None
'''
EXAMPLES = '''
- zuul_deps:
host: https://review.opendev.org
changes: "openstack/tripleo-heat-templates:master:refs/changes/88/296488/1^openstack/instack-undercloud:master:refs/changes/84/315184/5"
'''
def process(host, changes, branch):
"""Process the changes from Zuul format"""
output = []
for item in reversed(changes.split("^")):
params = item.split(":")
if branch and branch != params[1]:
continue
if params[0] in [i['project'] for i in output]:
continue
# add URL prefix if only the bare hostname is given
if host.find('://') == -1:
host = ''.join(['https://', host])
output.append({"host": host,
"project": params[0],
"branch": params[1],
"refspec": params[2]})
return {'changed': True,
'ansible_facts': {'zuul_change_list': output}}
def main():
module = AnsibleModule(
argument_spec=dict(
host=dict(required=True, type='str'),
changes=dict(required=True, type='str'),
branch=dict(default=None, type='str')
)
)
result = process(module.params['host'],
module.params['changes'],
module.params['branch'])
module.exit_json(**result)
if __name__ == "__main__":
main()

View File

@ -17,6 +17,13 @@
artg_distro: "{{ artg_release }}-rdo" artg_distro: "{{ artg_release }}-rdo"
when: artg_release not in ['master', 'mitaka'] when: artg_release not in ['master', 'mitaka']
- name: Make sure /usr/share/rhn/RHN-ORG-TRUSTED-SSL-CERT exists (RHEL)
shell:
cmd: |
touch /usr/share/rhn/RHN-ORG-TRUSTED-SSL-CERT
become: true
when: ansible_distribution in ['RedHat']
- name: Use local baseurl when using local mirrors - name: Use local baseurl when using local mirrors
set_fact: set_fact:
dlrn_baseurl: 'file:///tmp/fake-dlrn-repos' dlrn_baseurl: 'file:///tmp/fake-dlrn-repos'
@ -33,6 +40,19 @@
- {regexp: 'source=.*', line: 'source={{ artg_change.branch }}'} - {regexp: 'source=.*', line: 'source={{ artg_change.branch }}'}
loop_control: loop_control:
loop_var: project_item loop_var: project_item
when: osp_release is not defined
- name: Override projects.ini settings for downstream
lineinfile:
dest: '{{ build_repo_dir }}/DLRN/projects.ini'
regexp: '{{ project_item.regexp }}'
line: '{{ project_item.line }}'
with_items:
- {regexp: 'baseurl=.*', line: 'baseurl={{ dlrn_baseurl }}'}
- {regexp: 'source=.*', line: 'source={{ artg_change.branch }}'}
loop_control:
loop_var: project_item
when: osp_release is defined
- block: - block:
- name: Map project name to DLRN project name - name: Map project name to DLRN project name
@ -42,7 +62,10 @@
cmd: | cmd: |
source '{{ build_repo_dir }}/dlrn-venv/bin/activate' source '{{ build_repo_dir }}/dlrn-venv/bin/activate'
set -xeo pipefail set -xeo pipefail
rdopkg findpkg -s '{{ artg_change.project | basename }}' -l rdoinfo | \ # {{ rdoinfo_repo_name }}/{{ rdoinfo_repo_name.split('info')[0] }}-full.yml will
# return rdo-full.yml and for downstream is osp-full.yml.
rdopkg findpkg -s '{{ artg_change.project | basename }}' \
-i {{ rdoinfo_repo_name }}/{{ rdoinfo_repo_name.split('info')[0] }}-full.yml | \
awk '/^name/{print $2}; {print "findpkg: " $0 > "/dev/stderr"}' awk '/^name/{print $2}; {print "findpkg: " $0 > "/dev/stderr"}'
changed_when: false changed_when: false
failed_when: project_name_mapped.rc != 0 or not project_name_mapped.stdout failed_when: project_name_mapped.rc != 0 or not project_name_mapped.stdout
@ -92,26 +115,17 @@
- artg_change.distgit is defined - artg_change.distgit is defined
- artg_repos_dir is not defined or copy_dir is failed - artg_repos_dir is not defined or copy_dir is failed
- name: Generate DLRN Script
template:
src: run_dlrn.sh.j2
dest: "{{ build_repo_dir }}/run_dlrn.sh"
mode: 0744
- name: Run DLRN - name: Run DLRN
shell: > shell: >
set +e; set -o pipefail &&
source {{ build_repo_dir }}/dlrn-venv/bin/activate; {{ build_repo_dir }}/run_dlrn.sh 2>&1 {{ timestamper_cmd }} >> {{ build_repo_dir }}/dlrn.log
while true; do
dlrn --config-file projects.ini --head-only --package-name {{ project_name_mapped.stdout }} --local --info-repo rdoinfo --dev;
if [ $? -eq 0 ]; then
# SUCCESS
break;
elif [ $? -eq 1 ]; then
# FAILED
exit 1;
elif [ $? -eq 2 ]; then
# RETRY
continue;
fi;
# Unexpected DLRN return code
exit $?;
done;
args: args:
chdir: '{{ build_repo_dir }}/DLRN' chdir: '{{ build_repo_dir }}'
register: repo_built register: repo_built
when: artg_build_one|bool when: artg_build_one|bool

View File

@ -83,6 +83,17 @@
groups: mock groups: mock
append: true append: true
- name: Fetch DLRN from source
git:
repo: '{{ artg_dlrn_repo_url }}'
dest: '{{ build_repo_dir }}/DLRN'
version: 'master'
register: _git_clone
until: _git_clone is success
retries: 3
delay: 5
when: dlrn_pre_installed|bool
- name: Ensure DLRN dir is present - name: Ensure DLRN dir is present
file: file:
path: '{{ build_repo_dir }}/DLRN/' path: '{{ build_repo_dir }}/DLRN/'
@ -110,10 +121,11 @@
extra_args: --upgrade extra_args: --upgrade
- name: Pip install rdopkg - name: Pip install rdopkg
# noqa 403
pip: pip:
name: rdopkg name: rdopkg
virtualenv: "{{ build_repo_dir }}/dlrn-venv" virtualenv: "{{ build_repo_dir }}/dlrn-venv"
version: 0.47.3 state: latest
when: not dlrn_pre_installed|bool when: not dlrn_pre_installed|bool
- name: Pip install DLRN - name: Pip install DLRN
@ -127,8 +139,8 @@
- name: Pip install pre-installed DLRN - name: Pip install pre-installed DLRN
shell: > shell: >
source {{ build_repo_dir }}/dlrn-venv/bin/activate; source {{ build_repo_dir }}/dlrn-venv/bin/activate;
pip install -r requirements.txt; pip{{ ansible_python.version.major }} install -r requirements.txt;
python setup.py install; python{{ ansible_python.version.major }} setup.py install;
args: args:
chdir: '{{ build_repo_dir }}/DLRN' chdir: '{{ build_repo_dir }}/DLRN'
when: dlrn_pre_installed|bool when: dlrn_pre_installed|bool
@ -142,13 +154,21 @@
- name: Fetch local rdoinfo copy - name: Fetch local rdoinfo copy
git: git:
repo: '{{ artg_rdoinfo_repo_url }}' repo: '{{ artg_rdoinfo_repo_url }}'
dest: '{{ build_repo_dir }}/DLRN/rdoinfo' dest: '{{ build_repo_dir }}/DLRN/{{ rdoinfo_repo_name }}'
version: 'master' version: 'master'
register: _git_clone register: _git_clone
until: _git_clone is success until: _git_clone is success
retries: 3 retries: 3
delay: 5 delay: 5
- name: Remove ssh from git url
when: osp_release is defined
shell: >
set -o pipefail;
sed -i -e "s|git+ssh|git|g" packages.yml
args:
chdir: '{{ build_repo_dir }}/DLRN/{{ rdoinfo_repo_name }}'
- name: Use local {{ ansible_distribution }} mirror if available ( centos 7 and RHEL ) - name: Use local {{ ansible_distribution }} mirror if available ( centos 7 and RHEL )
shell: > shell: >
set -o pipefail ; set -o pipefail ;
@ -159,8 +179,8 @@
>> {{ build_repo_dir }}/DLRN/scripts/{{ initial_dlrn_config }}-local.cfg; >> {{ build_repo_dir }}/DLRN/scripts/{{ initial_dlrn_config }}-local.cfg;
find /etc/yum.repos.d -name "delorean*build-deps.repo" -exec sed 's/enabled=.*/enabled=1/g' {} \; find /etc/yum.repos.d -name "delorean*build-deps.repo" -exec sed 's/enabled=.*/enabled=1/g' {} \;
>> {{ build_repo_dir }}/DLRN/scripts/{{ initial_dlrn_config }}-local.cfg; >> {{ build_repo_dir }}/DLRN/scripts/{{ initial_dlrn_config }}-local.cfg;
{% if ansible_distribution|lower == "redhat" and ansible_distribution_major_version == "8" %} {% if ansible_distribution in ["RedHat"] and osp_release is defined %}
find /etc/yum.repos.d -name "rh-cloud.repo" -exec sed 's/enabled=.*/enabled=1/g' {} \; find /etc/yum.repos.d -name "osptrunk-deps.repo" -exec sed 's/enabled=.*/enabled=1/g' {} \;
>> {{ build_repo_dir }}/DLRN/scripts/{{ initial_dlrn_config }}-local.cfg; >> {{ build_repo_dir }}/DLRN/scripts/{{ initial_dlrn_config }}-local.cfg;
{% endif %} {% endif %}
echo '"""' >> {{ build_repo_dir }}/DLRN/scripts/{{ initial_dlrn_config }}-local.cfg; echo '"""' >> {{ build_repo_dir }}/DLRN/scripts/{{ initial_dlrn_config }}-local.cfg;
@ -170,19 +190,6 @@
when: when:
- dlrn_use_local_mirrors|bool - dlrn_use_local_mirrors|bool
# FIXME(jpena): once DLRN 0.8.0 is released, we can remove this
- name: Check if DLRN/scripts/build_rpm.sh exists
stat:
path: '{{ build_repo_dir }}/DLRN/scripts/build_rpm.sh'
register: old_dlrn
- name: Remove DLRN RPM install test
# noqa 303
shell: >
sed -i -e 's%--postinstall%%'
{{ build_repo_dir }}/DLRN/scripts/build_rpm.sh
when: old_dlrn.stat.exists
- name: get env variables for changes and default change list - name: get env variables for changes and default change list
set_fact: set_fact:
gerrit_host: "{{ lookup('env', 'GERRIT_HOST') }}" gerrit_host: "{{ lookup('env', 'GERRIT_HOST') }}"
@ -203,17 +210,25 @@
artg_change_list: "{{ artg_change_list|union(jenkins_change_list|default([])) }}" artg_change_list: "{{ artg_change_list|union(jenkins_change_list|default([])) }}"
cacheable: true cacheable: true
- name: Parse Zuul changes # Below is the list of cases needs to handle while constructing zuul change lists to process
zuul_deps: # 1. Gerrit change branch is not equal to project branch
host: "{{ lookup('env', 'ZUUL_URL')|default('https://review.opendev.org', true) }}" # 2. project name should be present in zuul processed change list
changes: "{{ lookup('env', 'ZUUL_CHANGES') }}" - name: construct zuul deps list
branch: "{{ zuul.override_checkout | default(lookup('env', 'ZUUL_BRANCH')) }}"
when: zuul_changes != "" # noqa 602
- name: Add Zuul changes to the change list
set_fact: set_fact:
artg_change_list: "{{ artg_change_list|union(zuul_change_list|default([])) }}" artg_change_list: "{{ artg_change_list|default([]) + [{'host': item.change_url.rpartition('/')[0],
'project': item.project.name,
'branch': item.branch,
'refspec': '/'.join(['refs', 'changes',
item.change[-2:],
item.change,
item.patchset]) }] }}"
cacheable: true cacheable: true
with_items: "{{ zuul['items'] }}"
when:
- zuul is defined
- "'change_url' in item"
- item.project.name not in artg_change_list|default([]) | map(attribute='project') |list
- (item.branch == zuul.override_checkout | default(zuul.branch)) or (osp_release is defined and osp_release in item.branch)
- name: Print out the change list - name: Print out the change list
debug: debug:
@ -235,31 +250,24 @@
when: when:
- '"-distgit" not in item.project' - '"-distgit" not in item.project'
- item.project not in artg_skipped_projects - item.project not in artg_skipped_projects
- release in item.branch or (zuul.project.name | default("") == "rdoinfo") - release in item.branch or (zuul.project.name | default("") == rdoinfo_repo_name) or (osp_release is defined and osp_release in item.branch)
- name: Run DLRN - name: Build package using DLRN
shell: >
set +e;
source {{ build_repo_dir }}/dlrn-venv/bin/activate;
while true; do
dlrn --config-file projects.ini --head-only --package-name {{ artg_rdo_packages|join(' --package-name ') }} --local --info-repo rdoinfo --dev --order;
if [ $? -eq 0 ]; then
# SUCCESS
break;
elif [ $? -eq 1 ]; then
# FAILED
exit 1;
elif [ $? -eq 2 ]; then
# RETRY
continue;
fi;
# Unexpected DLRN return code
exit $?;
done;
args:
chdir: '{{ build_repo_dir }}/DLRN'
register: repo_built_multi
when: not artg_build_one|bool when: not artg_build_one|bool
block:
- name: Generate DLRN Script
template:
src: run_dlrn.sh.j2
dest: "{{ build_repo_dir }}/run_dlrn.sh"
mode: 0744
- name: Run DLRN
shell: >
set -o pipefail &&
{{ build_repo_dir }}/run_dlrn.sh 2>&1 {{ timestamper_cmd }} >> {{ build_repo_dir }}/dlrn.log
args:
chdir: '{{ build_repo_dir }}'
register: repo_built_multi
- name: Clean up loop devices created by mock - name: Clean up loop devices created by mock
file: file:

View File

@ -9,7 +9,11 @@ smtpserver=
reponame=delorean reponame=delorean
#templatedir=$VIRTUAL_ENV/dlrn/templates #templatedir=$VIRTUAL_ENV/dlrn/templates
maxretries=3 maxretries=3
{% if osp_release is defined %}
pkginfo_driver=dlrn.drivers.downstream.DownstreamInfoDriver
{% else %}
pkginfo_driver=dlrn.drivers.rdoinfo.RdoInfoDriver pkginfo_driver=dlrn.drivers.rdoinfo.RdoInfoDriver
{% endif %}
tags= tags=
#tags=mitaka #tags=mitaka
rsyncdest= rsyncdest=
@ -20,6 +24,18 @@ database_connection=sqlite:///commits.sqlite
fallback_to_master=1 fallback_to_master=1
use_components={{ use_components }} use_components={{ use_components }}
{% if osp_release is defined %}
[downstream_driver]
info_files=osp.yml
versions_url=https://trunk.rdoproject.org/centos8-master/current/versions.csv
downstream_distro_branch={{ osp_release }}.0-rhel-8-trunk
# downstream tag needs to be osp-17.0
downstream_tag=osp-{{ osp_release.split('-')[1] }}.0
downstream_distgit_key=osp-distgit
use_upstream_spec=true
downstream_spec_replace_list=^%global with_doc.+/%global with_doc 0,^%global rhosp.*/%global rhosp 1
{% endif %}
[gitrepo_driver] [gitrepo_driver]
# Options to be specified if pkginfo_driver is set to # Options to be specified if pkginfo_driver is set to
# dlrn.drivers.gitrepo.GitRepoDriver # dlrn.drivers.gitrepo.GitRepoDriver

View File

@ -0,0 +1,27 @@
set +e
cd {{ build_repo_dir }}/DLRN
source {{ build_repo_dir }}/dlrn-venv/bin/activate;
{% if artg_build_one|bool %}
export PKG={{ project_name_mapped.stdout }}
{% else %}
export PKG="{{ artg_rdo_packages|join(' --package-name ') }}"
{% endif %}
while true; do
dlrn --config-file projects.ini --head-only --package-name $PKG --local \
--info-repo {{ rdoinfo_repo_name }} \
{% if not artg_build_one|bool %}--order {% endif %}--dev;
if [ $? -eq 0 ]; then
# SUCCESS
break;
elif [ $? -eq 1 ]; then
# FAILED
exit 1;
elif [ $? -eq 2 ]; then
# RETRY
continue;
fi;
# Unexpected DLRN return code
exit $?;
done;