289 lines
8.5 KiB
YAML
289 lines
8.5 KiB
YAML
---
|
|
|
|
# needed to avoid potential failure when role is used without gather
|
|
- name: gather facts used by role
|
|
setup:
|
|
gather_subset: "!min,user_dir,python,processor,pkg_mgr,distribution"
|
|
when: >
|
|
ansible_user_dir is not defined or
|
|
ansible_python is not defined or
|
|
ansible_processor_vcpus is not defined or
|
|
ansible_pkg_mgr is not defined or
|
|
ansible_distribution is not defined
|
|
|
|
- name: set python_cmd
|
|
set_fact:
|
|
python_cmd: "python{{ ansible_python.version.major }}"
|
|
cacheable: true
|
|
when: python_cmd is not defined
|
|
|
|
- name: Ensure DLRN package dependencies
|
|
become: true
|
|
package:
|
|
state: present
|
|
name:
|
|
- createrepo
|
|
- gcc
|
|
- git
|
|
- libffi-devel
|
|
- mock
|
|
- openssl-devel
|
|
- redhat-rpm-config
|
|
- rsync
|
|
- rpm-build
|
|
- rpmdevtools
|
|
- sqlite
|
|
- >
|
|
{% if ansible_python.version.major == 3 %}
|
|
python3-libselinux
|
|
{% else %}
|
|
libselinux-python
|
|
{% endif %}
|
|
|
|
- name: Check if virtualenv is in the system
|
|
shell: "{{ python_cmd }} -m virtualenv --version"
|
|
args:
|
|
warn: false
|
|
register: virtualenv_exist
|
|
changed_when: false
|
|
failed_when: false
|
|
|
|
- when: virtualenv_exist.rc != 0
|
|
name: Install virtualenv
|
|
become: true
|
|
package:
|
|
state: present
|
|
name: >
|
|
{% if ansible_python.version.major == 3 %}
|
|
python3-virtualenv
|
|
{% else %}
|
|
python-virtualenv
|
|
{% endif %}
|
|
|
|
- name: Create mock group
|
|
become: true
|
|
group:
|
|
name: mock
|
|
state: present
|
|
|
|
- name: Add user to mock group
|
|
become: true
|
|
user:
|
|
name: '{{ ansible_user_id }}'
|
|
groups: mock
|
|
append: true
|
|
|
|
- name: Ensure DLRN dir is present
|
|
file:
|
|
path: '{{ build_repo_dir }}/DLRN/'
|
|
state: directory
|
|
|
|
- name: Remove data files from previous runs
|
|
shell:
|
|
rm -rf '{{ build_repo_dir }}/DLRN/*'
|
|
args:
|
|
warn: false
|
|
register: result
|
|
changed_when: result.stdout or result.stderr
|
|
|
|
- name: drop in the templated version of projects.ini
|
|
template:
|
|
src: projects.ini.j2
|
|
dest: '{{ build_repo_dir }}/DLRN/projects.ini'
|
|
|
|
- name: Install and update pip
|
|
pip:
|
|
name: pip
|
|
virtualenv: "{{ build_repo_dir }}/dlrn-venv"
|
|
state: latest
|
|
extra_args: --upgrade
|
|
|
|
- name: Pip install rdopkg
|
|
pip:
|
|
name: rdopkg
|
|
virtualenv: "{{ build_repo_dir }}/dlrn-venv"
|
|
version: 0.47.3
|
|
when: not dlrn_pre_installed|bool
|
|
|
|
- name: Pip install DLRN
|
|
pip:
|
|
name: dlrn
|
|
virtualenv: "{{ build_repo_dir }}/dlrn-venv"
|
|
state: latest
|
|
when: not dlrn_pre_installed|bool
|
|
|
|
- name: Pip install pre-installed DLRN
|
|
shell: >
|
|
source {{ build_repo_dir }}/dlrn-venv/bin/activate;
|
|
pip install -r requirements.txt;
|
|
python setup.py install;
|
|
args:
|
|
chdir: '{{ build_repo_dir }}/DLRN'
|
|
when: dlrn_pre_installed|bool
|
|
|
|
- name: copy the DLRN scripts in the virtualenv to the scripts dir
|
|
synchronize:
|
|
src: "{{ build_repo_dir }}/dlrn-venv/share/dlrn/scripts"
|
|
dest: "{{ build_repo_dir }}/DLRN"
|
|
delegate_to: "{{ inventory_hostname }}"
|
|
|
|
- name: Fetch local rdoinfo copy
|
|
git:
|
|
repo: '{{ artg_rdoinfo_repo_url }}'
|
|
dest: '{{ build_repo_dir }}/DLRN/rdoinfo'
|
|
version: 'master'
|
|
register: _git_clone
|
|
until: _git_clone is success
|
|
retries: 3
|
|
delay: 5
|
|
|
|
- name: Use local {{ ansible_distribution }} mirror if available
|
|
shell: >
|
|
set -o pipefail ;
|
|
gawk '{ print $0 }; /^# repos$/ { exit }' {{ build_repo_dir }}/DLRN/scripts/{{ ansible_distribution | lower }}.cfg
|
|
> {{ build_repo_dir }}/DLRN/scripts/{{ ansible_distribution | lower }}-local.cfg;
|
|
cat /etc/yum.repos.d/quickstart-{{ ansible_distribution | lower }}-*.repo >> {{ build_repo_dir }}/DLRN/scripts/{{ ansible_distribution | lower }}-local.cfg;
|
|
find /etc/yum.repos.d -name "delorean*repo" ! -name "delorean*build-deps.repo" -exec cat {} \; -exec echo "" \;
|
|
>> {{ build_repo_dir }}/DLRN/scripts/{{ ansible_distribution | lower }}-local.cfg;
|
|
find /etc/yum.repos.d -name "delorean*build-deps.repo" -exec sed 's/enabled=.*/enabled=1/g' {} \;
|
|
>> {{ build_repo_dir }}/DLRN/scripts/{{ ansible_distribution | lower }}-local.cfg;
|
|
{% if ansible_distribution|lower == "redhat" and ansible_distribution_major_version == "8" %}
|
|
find /etc/yum.repos.d -name "rh-cloud.repo" -exec sed 's/enabled=.*/enabled=1/g' {} \;
|
|
>> {{ build_repo_dir }}/DLRN/scripts/{{ ansible_distribution | lower }}-local.cfg;
|
|
{% endif %}
|
|
echo '"""' >> {{ build_repo_dir }}/DLRN/scripts/{{ ansible_distribution | lower }}-local.cfg;
|
|
mkdir -p /tmp/fake-dlrn-repos/current;
|
|
touch /tmp/fake-dlrn-repos/delorean-deps.repo;
|
|
touch /tmp/fake-dlrn-repos/current/delorean.repo;
|
|
when: dlrn_use_local_mirrors|bool
|
|
|
|
- name: Use custom target for DLRN
|
|
lineinfile:
|
|
dest: '{{ build_repo_dir }}/DLRN/projects.ini'
|
|
regexp: 'target=.*'
|
|
line: 'target={{ ansible_distribution | lower }}-local'
|
|
when: 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
|
|
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
|
|
set_fact:
|
|
gerrit_host: "{{ lookup('env', 'GERRIT_HOST') }}"
|
|
zuul_changes: "{{ lookup('env', 'ZUUL_CHANGES') }}"
|
|
artg_change_list: "{{ artg_change_list|default([]) }}"
|
|
cacheable: true
|
|
|
|
- name: Parse Jenkins changes
|
|
jenkins_deps:
|
|
host: "{{ lookup('env', 'GERRIT_HOST') }}"
|
|
change_id: "{{ lookup('env', 'GERRIT_CHANGE_ID') }}"
|
|
branch: "{{ lookup('env', 'GERRIT_BRANCH') }}"
|
|
patchset_rev: "{{ lookup('env', 'GERRIT_PATCHSET_REVISION') }}"
|
|
when: gerrit_host != ""
|
|
|
|
- name: Add Jenkins changes to the change list
|
|
set_fact:
|
|
artg_change_list: "{{ artg_change_list|union(jenkins_change_list|default([])) }}"
|
|
cacheable: true
|
|
|
|
- name: Parse Zuul changes
|
|
zuul_deps:
|
|
host: "{{ lookup('env', 'ZUUL_URL')|default('https://review.opendev.org', true) }}"
|
|
changes: "{{ lookup('env', 'ZUUL_CHANGES') }}"
|
|
branch: "{{ lookup('env', 'ZUUL_BRANCH') }}"
|
|
when: zuul_changes != ""
|
|
|
|
- name: Add Zuul changes to the change list
|
|
set_fact:
|
|
artg_change_list: "{{ artg_change_list|union(zuul_change_list|default([])) }}"
|
|
cacheable: true
|
|
|
|
- name: Clone and build the specific DLRN projects
|
|
include: dlrn-build.yml artg_change={{ item }}
|
|
with_items: '{{ artg_change_list|default([]) }}'
|
|
when:
|
|
- '"-distgit" not in item.project'
|
|
- item.project not in artg_skipped_projects
|
|
- release in item.branch
|
|
|
|
- name: Run 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
|
|
|
|
|
|
- block:
|
|
- name: Create a directory to hold the rpms
|
|
file:
|
|
path: '{{ build_repo_dir }}/gating_repo'
|
|
state: directory
|
|
|
|
- name: Copy the generated rpms
|
|
shell: >
|
|
set -o pipefail &&
|
|
rm -rf {{ build_repo_dir }}/gating_repo/*;
|
|
find {{ build_repo_dir }}/DLRN/data/repos -type f -name '*.rpm' -print0 | xargs -0 cp -t {{ build_repo_dir }}/gating_repo;
|
|
|
|
- name: Run createrepo on generated rpms
|
|
shell: 'createrepo gating_repo'
|
|
args:
|
|
chdir: '{{ build_repo_dir }}'
|
|
|
|
- name: Compress the repo
|
|
shell: 'tar czf {{ artg_compressed_gating_repo }} gating_repo'
|
|
args:
|
|
chdir: '{{ build_repo_dir }}'
|
|
- name: Trigger repo injection for quickstart
|
|
set_fact:
|
|
compressed_gating_repo: "{{ artg_compressed_gating_repo }}"
|
|
cacheable: true
|
|
when:
|
|
- artg_rdo_packages is defined
|
|
- artg_rdo_packages|length > 0
|
|
|
|
- name: Clean up
|
|
file:
|
|
path: '{{ item }}'
|
|
state: absent
|
|
with_items:
|
|
- '{{ build_repo_dir }}/dlrn-venv'
|
|
- '{{ build_repo_dir }}/gating_repo'
|
|
when: dlrn_cleanup|bool
|
|
|
|
- name: Clean up DLRN if it was cloned by the playbook
|
|
file:
|
|
path: '{{ build_repo_dir }}/DLRN'
|
|
state: absent
|
|
when:
|
|
- not dlrn_pre_installed|bool
|
|
- dlrn_cleanup|bool
|