diff --git a/roles/collect-logs/tasks/publish.yml b/roles/collect-logs/tasks/publish.yml
index 87b1d3307..b5f3a48c0 100644
--- a/roles/collect-logs/tasks/publish.yml
+++ b/roles/collect-logs/tasks/publish.yml
@@ -100,6 +100,11 @@
name: create-reproducer-script
when: ansible_env.TOCI_JOBTYPE is defined
+
+- name: Create the zuul-based reproducer script
+ include_role:
+ name: create-zuul-based-reproducer
+
- name: upload to the artifact server using pubkey auth
shell: rsync -av --quiet -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" {{ artcl_collect_dir }}/ {{ artcl_rsync_path }}/{{ lookup('env', 'BUILD_TAG') }}
async: "{{ artcl_publish_timeout }}"
diff --git a/roles/create-zuul-based-reproducer/README.md b/roles/create-zuul-based-reproducer/README.md
new file mode 100644
index 000000000..55e1cac42
--- /dev/null
+++ b/roles/create-zuul-based-reproducer/README.md
@@ -0,0 +1,83 @@
+create-zuul-based-reproducer
+============================
+
+This role creates a launcher-playbook and a wrapper Bash script to
+allow users to reproduce CI jobs using a local Zuul installation.
+
+Role Variables
+--------------
+
+For the defaults of these variables, see the defaults/main.yml file in this role.
+
+* reproducer_zuul_based_quickstart_script: Bash script to kick the generated launcher playbook
+* reproducer_zuul_based_quickstart_readme_file: The documentation file with user instructions
+* reproducer_zuul_based_launcher_playbook: Template to create a launcher playbook with variable
+to reproduce the job run
+* launcher_env_setup_playbook: Template to create a playbook to set up the launcher environment
+From the extras-common role:
+* artcl_collect_dir: "{{ local_working_dir }}/collected_files"
+
+Dependencies
+------------
+
+The role is run within the collect-logs role.
+
+Example Playbook
+----------------
+
+This role generates a launcher-playbook:
+
+- hosts: localhost
+ tasks:
+ - name: Add the localhost to the inventory
+ add_host:
+ name: "localhost"
+ groups: "localhost"
+ ansible_host: 127.0.0.1
+ ansible_connection: local
+
+ - name: Add the primary to the inventory
+ add_host:
+ name: "localhost"
+ groups: "primary"
+ ansible_fqdn: "localhost"
+ ansible_user: "{{ lookup('env', 'USER') }}"
+ ansible_private_key_file: "/home/{{ ansible_user }}/.ssh/{{ user_pri_key | default('id_rsa') }}"
+ ansible_host: "localhost"
+
+- import_playbook: playbooks/pre.yaml
+
+- hosts: localhost
+ vars:
+ depends_on:
+ - https://review.openstack.org/xxxxxx
+ zuul_yaml: >-
+ - project:
+ check:
+ jobs:
+ - tripleo-ci-centos-7-multinode-1ctlr-featureset010-dlrn-hash-tag
+
+ - job:
+ name: tripleo-ci-centos-7-multinode-1ctlr-featureset010-dlrn-hash-tag
+ parent: tripleo-ci-centos-7-multinode-1ctlr-featureset010
+ vars:
+ mirror_fqdn: mirror.regionone.rdo-cloud.rdoproject.org
+ featureset_override:
+ dlrn_hash_tag:
+ 8127e43f39ac9b9e14d4a5a10bcbf41f122f32d7_d2efe5df
+ dlrn_hash_tag_newest:
+ ca4990cebac0be87ee4a7273f519574bc1027c8f_a1ff18dc
+ tasks:
+ - include_role:
+ name: ansible-role-tripleo-ci-reproducer
+
+
+License
+-------
+
+Apache 2.0
+
+Author Information
+------------------
+
+OpenStack
diff --git a/roles/create-zuul-based-reproducer/defaults/main.yml b/roles/create-zuul-based-reproducer/defaults/main.yml
new file mode 100644
index 000000000..383bc636f
--- /dev/null
+++ b/roles/create-zuul-based-reproducer/defaults/main.yml
@@ -0,0 +1,5 @@
+---
+reproducer_zuul_based_quickstart_script: reproducer-zuul-based-quickstart.sh.j2
+reproducer_zuul_based_quickstart_readme_file: "{{ artcl_collect_dir }}/README-reproducer-zuul-based-quickstart.html"
+reproducer_zuul_based_launcher_playbook: launcher-playbook.yaml.j2
+launcher_env_setup_playbook: launcher-env-setup-playbook.yaml.j2
diff --git a/roles/create-zuul-based-reproducer/meta/main.yml b/roles/create-zuul-based-reproducer/meta/main.yml
new file mode 100644
index 000000000..98bfef3b5
--- /dev/null
+++ b/roles/create-zuul-based-reproducer/meta/main.yml
@@ -0,0 +1,3 @@
+---
+dependencies:
+ - extras-common
diff --git a/roles/create-zuul-based-reproducer/tasks/main.yml b/roles/create-zuul-based-reproducer/tasks/main.yml
new file mode 100644
index 000000000..3286c1a65
--- /dev/null
+++ b/roles/create-zuul-based-reproducer/tasks/main.yml
@@ -0,0 +1,100 @@
+---
+- name: Check if collect directory exists
+ stat:
+ path: "{{ artcl_collect_dir }}"
+ register: collect_dir
+
+- name: Create collect directory
+ file:
+ path: "{{ artcl_collect_dir }}"
+ state: directory
+ when: not collect_dir.stat.exists
+
+- name: Create the reproducer-quickstart directory
+ file:
+ path: "{{ artcl_collect_dir }}/reproducer-quickstart"
+ state: directory
+
+- name: Create the reproducer-quickstart/scripts directory
+ file:
+ path: "{{ artcl_collect_dir }}/reproducer-quickstart/scripts"
+ state: directory
+
+- name: Copy the generated toci templates and files
+ copy:
+ src: "/home/{{ undercloud_user }}/src/git.openstack.org/openstack/tripleo-ci/{{ item }}"
+ dest: "{{ artcl_collect_dir }}/reproducer-quickstart/{{ item }}"
+ mode: 0755
+ with_items:
+ - "toci_gate_test.sh"
+ - "toci_quickstart.sh"
+ - "scripts/common_vars.bash"
+ - "scripts/oooq_common_functions.sh"
+
+- name: Check if featureset-override exists
+ stat:
+ path: "/home/{{ undercloud_user }}/src/git.openstack.org/openstack/tripleo-ci/featureset-override.yaml"
+ register: featureset_override_file
+
+- name: Add the featureset-override if it exists
+ copy:
+ src: "/home/{{ undercloud_user }}/src/git.openstack.org/openstack/tripleo-ci/featureset-override.yaml"
+ dest: "{{ artcl_collect_dir }}/reproducer-quickstart/featureset-override.yaml"
+ mode: 0755
+ when: featureset_override_file.stat.exists
+
+- name: Check if releases.sh file exits
+ stat:
+ path: '/home/{{ undercloud_user}}/workspace/logs/releases.sh'
+ register: releases_file_result
+
+- name: Get releases.sh file output
+ set_fact:
+ releases_file_output: "{{ lookup('file', '/home/{{ undercloud_user}}/workspace/logs/releases.sh') | replace('export' , ' export') }}"
+ when: releases_file_result.stat.exists
+
+- name: Get featureset-override file output
+ set_fact:
+ featureset_override_file_output: "{{ lookup('file', '/home/{{ undercloud_user }}/src/git.openstack.org/openstack/tripleo-ci/featureset-override.yaml') }}"
+ when: featureset_override_file.stat.exists
+
+- name: Create the zuul-based launcher-env-setup-playbook from template
+ template:
+ src: "{{ launcher_env_setup_playbook }}"
+ dest: "{{ artcl_collect_dir }}/launcher-env-setup-playbook.yaml"
+ mode: 0755
+
+- name: Create the zuul-based launcher-playbook from template
+ template:
+ src: "{{ reproducer_zuul_based_launcher_playbook }}"
+ dest: "{{ artcl_collect_dir }}/launcher-playbook.yaml"
+ mode: 0755
+
+- name: Create the zuul-based reproducer file from template
+ template:
+ src: "{{ reproducer_zuul_based_quickstart_script }}"
+ dest: "{{ artcl_collect_dir }}/reproducer-zuul-based-quickstart.sh"
+ mode: 0755
+
+- name: Copy the tripleo-quickstart install-deps script
+ copy:
+ src: "/home/{{ undercloud_user }}/src/git.openstack.org/openstack/tripleo-quickstart/{{ item }}"
+ dest: "{{ artcl_collect_dir }}/{{ item }}"
+ mode: 0755
+ with_items:
+ - "install-deps.sh"
+
+- name: Tar the files needed for the zuul-based reproducer script
+ archive:
+ path:
+ - "{{ artcl_collect_dir }}/launcher-env-setup-playbook.yaml"
+ - "{{ artcl_collect_dir }}/launcher-playbook.yaml"
+ - "{{ artcl_collect_dir }}/reproducer-zuul-based-quickstart.sh"
+ - "{{ artcl_collect_dir }}/install-deps.sh"
+ dest: "{{ artcl_collect_dir }}/reproducer-zuul-based-quickstart.tar"
+ mode: 0755
+
+- name: Create zuul-based reproducer script documentation from template
+ template:
+ src: README-reproducer-zuul-based-quickstart.html.j2
+ dest: "{{ reproducer_zuul_based_quickstart_readme_file }}"
diff --git a/roles/create-zuul-based-reproducer/templates/README-reproducer-zuul-based-quickstart.html.j2 b/roles/create-zuul-based-reproducer/templates/README-reproducer-zuul-based-quickstart.html.j2
new file mode 100644
index 000000000..447c0ccc4
--- /dev/null
+++ b/roles/create-zuul-based-reproducer/templates/README-reproducer-zuul-based-quickstart.html.j2
@@ -0,0 +1,138 @@
+
+
+
+WARNING - WIP - NOT FOR GENERAL USE - README for Quickstart Job Zuul-based Reproducer Script
+
+
+ WARNING - WIP - NOT FOR GENERAL USE - How to reproduce a job result using the Zuul-based reproducer playbooks and script
+Check the top-level logs directory for a tar file reproducer-zuul-based-quickstart.tar.
+This tar archive contains three files:
+
+launcher-env-setup-playbook.yaml
- a playbook to clone repos and set up
+an Ansible environment to launch jobs
+launcher-playbook.yaml - a playbook that installs and starts up Zuul, Gerrit and
+other required services, and also creates and launches a reproducer job using
+the same dlrn hashes as in CI
+reproducer-zuul-based-quickstart.sh - a Bash script to provide an interface
+to run the above playbooks with various options
+
+Running these playbooks will set up Zuul, Gerrit, and related services in containers
+on the local system, and will then create a reproducer job which can be run on a
+cloud personal tenant or via libvirt on the local system.
+If no reproducer-zuul-based-quickstart.tar file is found, that usually means an
+infra failure before Quickstart could start or a problem in collecting logs.
+Check on IRC Freenode channel #tripleo to see if there's an ongoing infra
+issue.
+
+Setting up to run the Zuul-based reproducer
+
+Prior to running the Zuul-based reproducer, the following setup steps are needed -
+( only need to be done once per local system):
+
+
+
+Running the Zuul-based reproducer - using the Bash script
+
+wget the reproducer-zuul-based-quickstart.tar file. Note that
+the launcher-env-setup-playbook.yaml
will set up
+clone repos and set up 'roles', 'playbooks', and 'library' directories
+from which the tasks will be executed.
+Once the files are extracted from the archive, you can run the Bash script
+with the various options. Run the script with --help
option to
+output a list of available run options.
+
+
+Running the Zuul-based reproducer - using the playbooks directly
+
+The Bash script is not required although it is the supported path.
+The playbooks can be run directly using ansible-playbook
.
+The Bash script contains some package installation and Docker user/group setup
+that you will need to cover prior to running the playbooks directly.
+Please see the Bash scripts for details, especially if you are running the
+reproducer for the first time on teh local environment.
+The playbooks can be run as follows:
+
+ansible-playbook ./launcher-env-setup-playbook.yaml
+ansible-playbook ./launcher-playbook.yaml $OPTIONS
+
+The launcher-playbook.yaml
includes comments on how to run the playbook
+with the same options listed in the Bash script section above.
+
+
+Ansible tags and running repeatedly
+
+The Bash scripts runs with --tags all
passed to the
+launcher-playbook.yaml
.
+After the initial docker setup has run, it is not necessary to run through
+those setup steps for every reproducer. The launcher-playbook.yaml
+can be run with --skip-tags start
after the initial run.
+
+
+Monitoring the launched job
+
+The launcher-playbook.yaml
will create and push a job
+to a test1 testproject repo in a temp directory. This job will start and the
+related Zuul infrastructure logs can be viewed in:
+
+cd ~/tripleo-ci-reproducer
+docker-compose logs --tail=10 -f
+# Just view the scheduler and executor logs:
+docker-compose logs --tail=10 -f scheduler executor
+
+
+To see the job progress, you can access the web consoles of:
+
+- Gerrit: http://localhost:8080
+- Zuul: http://localhost:9000
+- Logs: http://localhost:8000
+
+If you are accessing a remote machine, replace localhost
with the ip address.
+
+
+User notes
+
+
+- Gerrit keys
+If your ssh keys have being created with a new version of OpenSSH, Zuul will
+fail when running with these keys as there is a Paramiko bug [1].
+It is recommended that keys be generated as follows:
+ssh-keygen -m PEM -t rsa
- accepting the passwordless option.
+Then update the public keys used with Gerrit upstream and RDO Gerrit.
+[1] https://storyboard.openstack.org/#!/story/2004842
+
+
+
+
+
diff --git a/roles/create-zuul-based-reproducer/templates/launcher-env-setup-playbook.yaml.j2 b/roles/create-zuul-based-reproducer/templates/launcher-env-setup-playbook.yaml.j2
new file mode 100644
index 000000000..0afcbbbb6
--- /dev/null
+++ b/roles/create-zuul-based-reproducer/templates/launcher-env-setup-playbook.yaml.j2
@@ -0,0 +1,58 @@
+# This playbook will clone repos and set up a directory
+# structure for running the launcher-playbook to start
+# the Zuul-based reproducer and run a job.
+
+{% raw %}
+- name: setup
+ hosts: localhost
+ tasks:
+ - name: Create directory structure
+ file:
+ path: "{{ item }}"
+ state: directory
+ with_items:
+ - git
+ - roles
+ - library
+ - playbooks/tripleo-ci-reproducer
+
+ - name: Clone repos needed for reproducer
+ git:
+ repo: "{{ item }}"
+ dest: "git/{{ item.replace('.git', '').split('/')[-1:]|join('/') }}"
+ update: yes
+ with_items:
+ - https://git.openstack.org/openstack/tripleo-quickstart.git
+ - https://github.com/rdo-infra/ansible-role-tripleo-ci-reproducer.git
+
+ - name: Copy roles and libraries for tripleo-quickstart
+ synchronize:
+ src: 'git/tripleo-quickstart/{{ item }}/'
+ dest: '{{ item }}/'
+ with_items:
+ - roles
+ - library
+
+ - name: Copy setup files from tripleo-quickstart
+ synchronize:
+ src: 'git/tripleo-quickstart/{{ item }}'
+ dest: "./{{ item }}"
+ with_items:
+ - install-deps.sh
+
+ - name: requirements from ansible-role-tripleo-ci-reproducer
+ synchronize:
+ src: 'git/ansible-role-tripleo-ci-reproducer/{{ item }}'
+ dest: './{{ item }}'
+ with_items:
+ - bindep.txt
+ - requirements.txt
+
+ - name: Copy ansible-role-tripleo-ci-reproducer roles and playbooks
+ synchronize:
+ src: 'git/ansible-role-tripleo-ci-reproducer{{ item.src_dir }}'
+ dest: '{{ item.dest_dir }}/'
+ with_items:
+ - { src_dir: '', dest_dir: 'roles' }
+ - { src_dir: '/playbooks/tripleo-ci-reproducer/', dest_dir: 'playbooks/tripleo-ci-reproducer' }
+{% endraw %}
diff --git a/roles/create-zuul-based-reproducer/templates/launcher-playbook.yaml.j2 b/roles/create-zuul-based-reproducer/templates/launcher-playbook.yaml.j2
new file mode 100644
index 000000000..31cc83f2b
--- /dev/null
+++ b/roles/create-zuul-based-reproducer/templates/launcher-playbook.yaml.j2
@@ -0,0 +1,82 @@
+# First install Ansible and run the launcher-env-setup-playbook.
+#
+# From the same dir, run:
+# >> ansible-playbook launcher-playbook.yaml -vv
+#
+# To run the libvirt option (available for non-OVB jobs):
+# Clone https://github.com/openstack/tripleo-quickstart and run:
+# >> export NODEPOOL_MIRROR=mirror.mtl01.inap.openstack.org
+# >> ansible-playbook launcher-playbook.yaml \
+# -e nodepool_provider=libvirt
+#
+# To run on a different cloud defined in clouds.yaml ( default is rdo-cloud):
+# >> ansible-playbook launcher-playbook.yaml \
+# -e cloud_name=''
+#
+# To force the job into failing status in order to hold the nodes (temporary option):
+# >> ansible-playbook launcher-playbook.yaml \
+# -e force_post_failure=true
+#
+# If your upstream gerrit user or rdo gerit user (and/or keys) are different
+# from your current $USER, there are options to set for each of those values.
+# See the reproducer-zuul-based-quickstart.sh for the options details.
+
+{% raw %}
+- hosts: localhost
+ tasks:
+ - name: Add the localhost to the inventory
+ add_host:
+ name: "localhost"
+ groups: "localhost"
+ ansible_host: 127.0.0.1
+ ansible_connection: local
+
+ - name: Add the primary to the inventory
+ add_host:
+ name: "localhost"
+ groups: "primary"
+ ansible_fqdn: "localhost"
+ ansible_user: "{{ lookup('env', 'USER') }}"
+ ansible_private_key_file: "/home/{{ ansible_user }}/.ssh/{{ user_pri_key | default('id_rsa') }}"
+ ansible_host: "localhost"
+{% endraw %}
+
+- import_playbook: playbooks/tripleo-ci-reproducer/pre.yaml
+
+- hosts: localhost
+ vars:
+ depends_on:
+ - {{ zuul.change_url }}
+ zuul_yaml: >-
+ - project:
+ check:
+ jobs:
+ - {{ zuul.job }}-dlrn-hash-tag
+
+ - job:
+ name: {{ zuul.job }}-dlrn-hash-tag
+ parent: {{ zuul.job }}
+ vars:
+ {% raw -%}
+ mirror_fqdn: {{ lookup('env', 'NODEPOOL_MIRROR') | default('mirror.regionone.rdo-cloud.rdoproject.org', true) }}
+ {% endraw -%}
+ {% if releases_file_output is defined -%}
+ ready_releases_file: |
+ {{ releases_file_output | replace('export', ' export') }}
+ {% endif -%}
+ featureset_override:
+ {% if featureset_override_file_output is defined -%}
+ {{ featureset_override_file_output | indent(14) }}
+ {% endif -%}
+ {% if dlrn_hash is defined or ('undercloud' in hostvars and 'dlrn_hash' in hostvars['undercloud']) -%}
+ dlrn_hash_tag:
+ {{ hostvars['undercloud'].dlrn_hash }}
+ {% endif -%}
+ {% if dlrn_hash_newest is defined or ('undercloud' in hostvars and 'dlrn_hash_newest' in hostvars['undercloud']) -%}
+ dlrn_hash_tag_newest:
+ {{ hostvars['undercloud'].dlrn_hash_newest }}
+ {%- endif %}
+
+ tasks:
+ - include_role:
+ name: ansible-role-tripleo-ci-reproducer
diff --git a/roles/create-zuul-based-reproducer/templates/reproducer-zuul-based-quickstart.sh.j2 b/roles/create-zuul-based-reproducer/templates/reproducer-zuul-based-quickstart.sh.j2
new file mode 100644
index 000000000..19519a230
--- /dev/null
+++ b/roles/create-zuul-based-reproducer/templates/reproducer-zuul-based-quickstart.sh.j2
@@ -0,0 +1,269 @@
+#!/bin/bash
+
+# See documentation for using the reproducer script:
+# README-reproducer-zuul-based-quickstart.html
+# (in the same top-level logs directory as this reproducer script).
+
+: ${WORKSPACE:=$(mktemp -d -t reproduce-tmp.XXXXX)}
+: ${LIBVIRT:=0}
+: ${CLOUD_NAME:="rdo-cloud"}
+: ${FORCE_POST_FAILURE:=0}
+: ${UPSTREAM_GERRIT_USER:="$USER"}
+: ${RDO_GERRIT_USER:="$USER"}
+: ${USER_SSH_KEY:="id_rsa"}
+: ${USER_SSH_PUB_KEY:="$USER_SSH_KEY.pub"}
+: ${SSH_KEY_PATH:="/home/$USER/.ssh"}
+: ${UPSTREAM_GERRIT_SSH_KEY:="id_rsa"}
+: ${RDO_GERRIT_SSH_KEY:="id_rsa"}
+: ${EXTRA_PARAMS:=""}
+
+usage () {
+ echo "Usage: $0 [options]"
+ echo ""
+ echo "Options:"
+ echo " -w, --workspace "
+ echo " directory where the repos and directories"
+ echo " are created. Defaults to creating a directory in /tmp"
+ echo " -l, --libvirt"
+ echo " Runs a 2-node multinode job or singlenode job on a"
+ echo " single virthost using libvirt to create the nodes."
+ echo " If a singlenode reproducer is run, two VMs will still be created."
+ echo " -c, --cloud-name"
+ echo " Host cloud, specified in the clouds.yaml, to target"
+ echo " Defaults to rdo-cloud"
+ echo " -f, --force-post-failure"
+ echo " Force job to fail so that the nodes will be held."
+ echo " Temporary solution"
+ echo " -ug, --upstream-gerrit-user"
+ echo " Set the upstream gerrit user required to clone repos."
+ echo " Defaults to the current $USER"
+ echo " -rg, --rdo-gerrit-user"
+ echo " Set the upstream RDO user required to clone RDO-related repos."
+ echo " Defaults to the current $USER"
+ echo " -k, --ssh-key"
+ echo " private ssh key used to set up an access nodes."
+ echo " Defaults to id_rsa."
+ echo " -kp, --ssh-key-public"
+ echo " public ssh key used to set up an access nodes."
+ echo " Defaults to $USER_SSH_KEY.pub"
+ echo " -skp, --ssh-key-path"
+ echo " Path to directory where user ssh keys are stored."
+ echo " Defaults to /home/$USER/.ssh"
+ echo " -ugk, --upstream-gerrit-key"
+ echo " Set the upstream gerrit private key."
+ echo " Defaults to the $USER_SSH_KEY."
+ echo " -rgk, --rdo-gerrit-key"
+ echo " Set the upstream RDO user key."
+ echo " Defaults to the $USER_SSH_KEY."
+ echo " -e, --extra-params"
+ echo " File or/and parameters used to override default"
+ echo " parameters for playbooks. Multiple files"
+ echo " can be passed [-e @file1.yml -e @file2.yml ...]"
+ echo " and arguments [-e var=value -e var2=value2 ...]"
+ echo " -h, --help print this help and exit"
+}
+
+set -e
+
+# Input argument assignments
+while [ "x$1" != "x" ]; do
+
+ case "$1" in
+ --workspace|-w)
+ # realpath fails if /some/path doesn't exist. It is created later
+ WORKSPACE=$(realpath $2 || echo -n $2)
+ shift
+ ;;
+
+ --libvirt|-l)
+ LIBVIRT=1
+ ;;
+
+ --cloud-name|-c)
+ CLOUD_NAME=$2
+ shift
+ ;;
+
+ --force-post-failure|-f)
+ FORCE_FAILURE=1
+ ;;
+
+ --upstream-gerrit-user|-ug)
+ UPSTREAM_GERRIT_USER=$2
+ shift
+ ;;
+
+ --rdo-gerrit-user|-rg)
+ RDO_GERRIT_USER=$2
+ shift
+ ;;
+
+ --ssh-key|-k)
+ USER_SSH_KEY=$2
+ shift
+ ;;
+
+ --ssh-key-public|-kp)
+ USER_SSH_PUB_KEY=$2
+ shift
+ ;;
+
+ --ssh-key-path|-skp)
+ SSH_KEY_PATH=$2
+ shift
+ ;;
+
+ --upstream-gerrit-key|-ugk)
+ UPSTREAM_GERRIT_SSH_KEY=$2
+ shift
+ ;;
+
+ --rdo-gerrit-key|-rgk)
+ RDO_GERRIT_SSH_KEY=$2
+ shift
+ ;;
+
+ --extra-params|-e)
+ [[ ${2::1} == "@" ]] && EXTRA_PARAMS+=("-e @$(realpath ${2#@}) ") || EXTRA_PARAMS+=("-e ${2} ")
+ shift
+ ;;
+
+ --help|-h)
+ usage
+ exit
+ ;;
+
+ --) shift
+ break
+ ;;
+
+ -*) echo "ERROR: unknown option: $1" >&2
+ usage >&2
+ exit 2
+ ;;
+
+ *) break
+ ;;
+ esac
+
+ shift
+done
+
+set -x
+
+# Install rpms and other requirements
+# Currently, only python2 is supported
+export USER_PYTHON_OVERRIDE=python2
+export USER_OVERRIDE_SUDO_CHECK=1
+curl -o bindep.txt https://raw.githubusercontent.com/rdo-infra/ansible-role-tripleo-ci-reproducer/master/bindep.txt
+
+source install-deps.sh
+# install just enough python
+install_deps
+# install bindep
+install_bindep
+# checks the $PWD for a file named
+# bindep.txt and installs
+# dependencies listed in the file.
+install_package_deps_via_bindep
+
+# Start from a clean workspace
+export WORKSPACE
+mkdir -p $WORKSPACE
+rsync -a *-playbook.yaml $WORKSPACE
+cd $WORKSPACE
+
+# Set up docker groups
+if ! groups | grep docker; then
+ echo "$USER is not in the docker group."
+ sudo groupadd docker
+ sudo usermod -aG docker $USER
+ echo "Add user immediately to the docker group."
+ echo "This will exit the script, please re-execute."
+ exec sg docker newgrp `id -gn`
+fi
+
+# Check the Docker config
+if [[ -f /etc/docker/daemon.json ]]; then
+ if cat /etc/docker/daemon.json | grep '"group": "docker"'; then
+ echo "docker group is already added to /etc/docker/daemon.json"
+ elif (( $(cat /etc/docker/daemon.json | wc -m) > 3 )); then
+ echo "/etc/docker/daemon.json is populated.
+ Exit this script and either clear the file or add the docker group."
+ exit 1
+ else
+ echo "The docker group will be added to /etc/docker/daemon.json."
+ fi
+fi
+
+# Check for passwordless sudo on the local system
+sudo -n true && passwordless_sudo="1" || passwordless_sudo="0"
+if [[ "$passwordless_sudo" == "0" ]]; then
+ echo " Passwordless sudo id used in:
+ https://github.com/rdo-infra/ansible-role-tripleo-ci-reproducer/playbooks/tripleo-ci-reproducer/pre.yaml
+ to set up the Docker config and to start and enable Docker.
+ Without passwordless sudo, the playbook will fail.
+
+ There are three options to proceed:
+ 1. Enable passwordless sudo and rerun the script to complete the install and job launch
+ 2. Edit the launcher.yaml playbook to pass the sudo password
+ >> --extra-vars ansible_sudo_pass='yourPassword'
+ 3. Read the pre.yaml playbook and execute the steps manually.
+ When you rerun the script, those steps will be skipped during the playbook execution.
+ "
+fi
+# Run the playbook to set up the launcher env
+ansible-playbook \
+ $WORKSPACE/launcher-env-setup-playbook.yaml \
+ -vv \
+ ${EXTRA_PARAMS[@]}
+
+# Set the options selected into EXTRA_PARAMS
+if [[ "$LIBVIRT" == "1" ]]; then
+ EXTRA_PARAMS="$EXTRA_PARAMS -e nodepool_provider=libvirt "
+ export NODEPOOL_MIRROR=mirror.mtl01.inap.openstack.org
+fi
+
+if [[ "$LIBVIRT" == "0" && "$CLOUD_NAME" != "rdo-cloud" ]]; then
+ EXTRA_PARAMS="$EXTRA_PARAMS -e cloud_name=$CLOUD_NAME "
+fi
+
+if [[ "$FORCE_POST_FAILURE" == "1" ]]; then
+ EXTRA_PARAMS="$EXTRA_PARAMS -e force_post_failure=true "
+fi
+
+if [[ "$UPSTREAM_GERRIT_USER" != "$USER" ]]; then
+ EXTRA_PARAMS="$EXTRA_PARAMS -e upstream_gerrit_user=$UPSTREAM_GERRIT_USER "
+fi
+
+if [[ "$RDO_GERRIT_USER" != "$USER" ]]; then
+ EXTRA_PARAMS="$EXTRA_PARAMS -e rdo_gerrit_user=$RDO_GERRIT_USER "
+fi
+
+if [[ "$USER_SSH_KEY" != "id_rsa" ]]; then
+ EXTRA_PARAMS="$EXTRA_PARAMS -e user_pri_key=$USER_SSH_KEY "
+fi
+
+if [[ "$USER_SSH_PUB_KEY" != "$USER_SSH_KEY.pub" ]]; then
+ EXTRA_PARAMS="$EXTRA_PARAMS -e user_pub_key=$USER_SSH_PUB_KEY "
+fi
+
+if [[ "$SSH_KEY_PATH" != "/home/$USER/.ssh" ]]; then
+ EXTRA_PARAMS="$EXTRA_PARAMS -e ssh_path=$SSH_KEY_PATH "
+fi
+
+if [[ "$UPSTREAM_GERRIT_SSH_KEY" != "$USER_SSH_KEY" ]]; then
+ EXTRA_PARAMS="$EXTRA_PARAMS -e upstream_gerrit_key=$UPSTREAM_GERRIT_SSH_KEY "
+fi
+
+if [[ "$RDO_GERRIT_SSH_KEY" != "$USER_SSH_KEY" ]]; then
+ EXTRA_PARAMS="$EXTRA_PARAMS -e rdo_gerrit_key=$RDO_GERRIT_SSH_KEY "
+fi
+
+
+# Run the launcher playbook
+ansible-playbook \
+ $WORKSPACE/launcher-playbook.yaml \
+ -vv \
+ --tags all \
+ ${EXTRA_PARAMS[@]}