From fba85f563c49eedb2fc0fdf524ec373e2410a563 Mon Sep 17 00:00:00 2001 From: Greg Dumas Date: Tue, 21 Nov 2023 09:21:32 -0500 Subject: [PATCH 01/27] Update README URLs Update broken URLs to zathras test config repository --- README | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README b/README index 5657a51..b74972e 100644 --- a/README +++ b/README @@ -225,6 +225,6 @@ systems: host_config: "m5.xlarge" -# ./burden --scenario aws_sample --test_def_dir https://git.com/user/zathras_config +# ./burden --scenario aws_sample --test_def_dir https://github.com/redhat-performance/zathras_test_configs -https://git.com/user/zathras_config: where the test config files can be found. +https://github.com/redhat-performance/zathras_test_configs: where the test config files can be found. From a81af1fe58b5807aff4ed65b9e73471bebdf2736 Mon Sep 17 00:00:00 2001 From: Greg Dumas Date: Tue, 2 Apr 2024 14:41:21 -0400 Subject: [PATCH 02/27] Change double quotes to single quotes The use of double quotes unintentionally led to Bash interpolating the contents of the string. --- bin/install.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bin/install.sh b/bin/install.sh index 78c004a..6e1b977 100644 --- a/bin/install.sh +++ b/bin/install.sh @@ -57,9 +57,9 @@ pip3 install yq --user # add yq install to path export PATH=/usr/local/bin:$PATH -echo "Before you can run Zathras: -echo "****Set up a scenario file" -echo "****If running a local system, create the local config file for the system under test (SUT)" -echo "****If using an existing system, ssh-copy-id between the system Zathras is installed on and the SUT." -echo "****If working in a cloud environment do not perform the ssh-copy-id." -echo "****Update/create the test configuration files in /zathras/config/ to reflect your requirements." +echo 'Before you can run Zathras:' +echo '****Set up a scenario file' +echo '****If running a local system, create the local config file for the system under test (SUT).' +echo '****If using an existing system, ssh-copy-id between the system Zathras is installed on and the SUT.' +echo '****If working in a cloud environment do not perform the ssh-copy-id.' +echo '****Update/create the test configuration files in /zathras/config/ to reflect your requirements.' From aee6930599bd02f2591a1216b434cf105b0b3b06 Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Wed, 11 Dec 2024 14:09:44 -0500 Subject: [PATCH 03/27] Add issue and PR templates --- .github/issue_template.md | 14 ++++++++++++++ .github/pull_request_template.md | 16 ++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 .github/issue_template.md create mode 100644 .github/pull_request_template.md diff --git a/.github/issue_template.md b/.github/issue_template.md new file mode 100644 index 0000000..7562375 --- /dev/null +++ b/.github/issue_template.md @@ -0,0 +1,14 @@ +# The problem +Write a short summary about what the reported problem/enhancement is. + +# Expected Behaviour +How should the program behave when it encounters +this issue? + +# Actual Behaviour +Describe how the program currently behaves when it +encounters this issue. + +# Screenshots or Relevant Logs +When applicable, attach a screenshot or relevant logs of +the issue. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..493851a --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,16 @@ +# Description +What does this PR do? Give a short summary + +# Before/After Comparison +Give some examples of the before/after behavior +of the program. + +# Clerical Stuff +Mention the issue this PR works toward resolving. If the +PR completely solves the issue, use "This closes #x" +to close the issue out automatically. + +Mention the JIRA ticket of the issue, this helps keep +everything together so we can find this PR easily. + +Relates to JIRA: RPOPC- From 2ea1597dfa0e24ebecaa245484c90627c6c1bf24 Mon Sep 17 00:00:00 2001 From: Greg Dumas Date: Fri, 20 Dec 2024 18:17:06 -0500 Subject: [PATCH 04/27] Resolve merge issues --- bin/install.sh | 100 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 71 insertions(+), 29 deletions(-) diff --git a/bin/install.sh b/bin/install.sh index 6e1b977..a985b2d 100644 --- a/bin/install.sh +++ b/bin/install.sh @@ -17,49 +17,91 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +set -eu -# Add the terraform repository from HashiCorp -# for reference: https://developer.hashicorp.com/terraform/cli/install/yum -# Currently supported distros: fedora, RHEL +# Check if script is being run as root +if (( $EUID == 0 )); then + read -p "For most use cases, running this script as root is NOT recommended. Are you sure? Y/N " yesno -# Get the operating system distribution -os_release=$(grep "^ID=" /etc/os-release | awk -F'=' '{print $2}') + case $yesno in + [Yy]* ) + echo "You answered yes, continuing install as root." ;; + [Nn]* ) + echo "You answered no, exiting"; exit 1 ;; + *) + echo "Unknown input, exiting"; exit 1 ;; + esac +else + echo "Not running as root, proceed." +fi -# Sometimes $release contains quotes that need to be removed -os_release_clean=$(echo $os_release | tr -d '"') +# check for and install system packages +packages=(ansible-core git jq python python3-pip terraform wget) -# The HashiCorp repository urls are case-sensitive -if [ $os_release_clean = 'rhel' ]; then - release='RHEL' -fi +for package in "${packages[@]}"; do + if dnf list installed "$package" &> /dev/null; then + echo "$package is installed." + elif [ $package == "terraform" ]; then + # Add the terraform repository from HashiCorp + # currently supported distros: fedora, RHEL + # reference: https://developer.hashicorp.com/terraform/cli/install/yum -# fedora -if [ $os_release_clean = 'fedora' ]; then - release='fedora' -fi + # Get operating system distribution + os_release=$(grep "^ID=" /etc/os-release | awk -F'=' '{print $2}') + + # Sometimes the $release contains quotes that need to be removed + os_release_clean=$(echo $os_release | tr -d '"') -# repo URL for terraform -repo_url="https://rpm.releases.hashicorp.com/${release}/hashicorp.repo" + # HashiCorp repo urls are case-sensitive + if [ $os_release_clean = 'rhel' ]; then + release='RHEL' + elif [ $os_release_clean = 'fedora' ]; then + release='fedora' + fi -# run dnf config-manager -dnf config-manager --add-repo $repo_url + # repo URL for terraform + repo_url="https://rpm.releases.hashicorp.com/${release}/hashicorp.repo" + # run dnf config-manager + sudo dnf config-manager --add-repo $repo_url + + # install the package + sudo dnf install terraform-1.9.8-1 -y || { + exit 1 + } + else + echo "Installing $package..." + sudo dnf install -y "$package" || { + exit 1 + } + fi + +done -# install other required packages -dnf update -y -dnf install ansible git jq python python3-pip terraform wget -y # pip install requirements -pip3 install -U boto --user -pip3 install yq --user +python_packages=(boto boto3 'yq==2.10.0') +for package in "${python_packages[@]}"; do + pip3 install "$package" --user || { + exit 1 + } +done + + +# install AWS collection for ansible +ansible_collections=(amazon.aws) +for collection in "${ansible_collections[@]}"; do + ansible-galaxy collection install "$collection" || { + exit 1 + } +done -# add yq install to path -export PATH=/usr/local/bin:$PATH echo 'Before you can run Zathras:' +echo '****Ensure ~/.local/bin is in your path' echo '****Set up a scenario file' -echo '****If running a local system, create the local config file for the system under test (SUT).' +echo '****If running a local system, create the local config file for the system under test (SUT)' echo '****If using an existing system, ssh-copy-id between the system Zathras is installed on and the SUT.' -echo '****If working in a cloud environment do not perform the ssh-copy-id.' -echo '****Update/create the test configuration files in /zathras/config/ to reflect your requirements.' +echo '****If working in a cloud environment do not perform the ssh-copy-id.' +echo '****Update/create the test configuration files in /zathras/config/ to reflect your requirements.' \ No newline at end of file From f120c8886db0263c4bc50a9bea6abaac48fcde6c Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Fri, 10 Jan 2025 10:02:10 -0500 Subject: [PATCH 05/27] Fix: Change SELinux defaults depending on os_vendor --- bin/burden | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/bin/burden b/bin/burden index 882cf4a..2bd8025 100755 --- a/bin/burden +++ b/bin/burden @@ -165,7 +165,7 @@ gl_run_prefix="" gl_scenario_to_run="" gl_scenario_to_restore="" gl_selinux_level="enforcing" -gl_selinux_state="enabled" +gl_selinux_state=$value_not_set gl_selinux_state_set=0 gl_ssh_key_file="" gl_show_os_versions=0; @@ -4073,6 +4073,14 @@ if [[ $gl_show_os_versions -eq 1 ]]; then cleanup_and_exit "" 0 fi +if [[ $gl_selinux_state == $value_not_set ]]; then + if [[ $gl_os_vendor == 'rhel' ]]; then + gl_selinux_state='enabled' + else + gl_selinux_state='disabled' + fi +fi + verify_selinux # From e7a5e265a42ecc0d310fbc529439c9c3ecfd8e32 Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Mon, 13 Jan 2025 10:45:30 -0500 Subject: [PATCH 06/27] Fix: Double quote strings and variables --- bin/burden | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bin/burden b/bin/burden index 2bd8025..ea2e52a 100755 --- a/bin/burden +++ b/bin/burden @@ -4073,11 +4073,11 @@ if [[ $gl_show_os_versions -eq 1 ]]; then cleanup_and_exit "" 0 fi -if [[ $gl_selinux_state == $value_not_set ]]; then - if [[ $gl_os_vendor == 'rhel' ]]; then - gl_selinux_state='enabled' +if [[ "$gl_selinux_state" == "$value_not_set" ]]; then + if [[ "$gl_os_vendor" == "rhel" ]]; then + gl_selinux_state="enabled" else - gl_selinux_state='disabled' + gl_selinux_state="disabled" fi fi From d569447d439870a290ddf33f5ae07c94320c186f Mon Sep 17 00:00:00 2001 From: Greg Dumas Date: Tue, 14 Jan 2025 08:00:35 -0500 Subject: [PATCH 07/27] Change single quotes to double quotes --- bin/install.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/bin/install.sh b/bin/install.sh index e4ce5c9..3f9e9c1 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -147,10 +147,10 @@ for collection in "${ansible_collections[@]}"; do done -echo 'Before you can run Zathras:' -echo '****Ensure ~/.local/bin is in your path' -echo '****Set up a scenario file' -echo '****If running a local system, create the local config file for the system under test (SUT)' -echo '****If using an existing system, ssh-copy-id between the system Zathras is installed on and the SUT.' -echo '****If working in a cloud environment do not perform the ssh-copy-id.' -echo '****Update/create the test configuration files in /zathras/config/ to reflect your requirements.' \ No newline at end of file +echo "Before you can run Zathras:" +echo "****Ensure ~/.local/bin is in your path" +echo "****Set up a scenario file" +echo "****If running a local system, create the local config file for the system under test (SUT)" +echo "****If using an existing system, ssh-copy-id between the system Zathras is installed on and the SUT." +echo "****If working in a cloud environment do not perform the ssh-copy-id." +echo "****Update/create the test configuration files in /zathras/config/ to reflect your requirements." \ No newline at end of file From 4aa8c079ee9d167b11b0506c860cbaf4522b52ef Mon Sep 17 00:00:00 2001 From: Greg Dumas Date: Tue, 14 Jan 2025 08:28:00 -0500 Subject: [PATCH 08/27] Remove trailing spaces. --- bin/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/install.sh b/bin/install.sh index 3f9e9c1..23c8544 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -152,5 +152,5 @@ echo "****Ensure ~/.local/bin is in your path" echo "****Set up a scenario file" echo "****If running a local system, create the local config file for the system under test (SUT)" echo "****If using an existing system, ssh-copy-id between the system Zathras is installed on and the SUT." -echo "****If working in a cloud environment do not perform the ssh-copy-id." -echo "****Update/create the test configuration files in /zathras/config/ to reflect your requirements." \ No newline at end of file +echo "****If working in a cloud environment do not perform the ssh-copy-id." +echo "****Update/create the test configuration files in /zathras/config/ to reflect your requirements." \ No newline at end of file From 3d27dbf6edf092b5d88b91013eee784ed7b37243 Mon Sep 17 00:00:00 2001 From: Greg Dumas Date: Tue, 14 Jan 2025 08:28:56 -0500 Subject: [PATCH 09/27] Remove double sudo. --- bin/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/install.sh b/bin/install.sh index 23c8544..08c04dd 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -99,7 +99,7 @@ for package in "${packages[@]}"; do repo_url="https://rpm.releases.hashicorp.com/${release}/hashicorp.repo" # run dnf config-manager - sudo sudo dnf config-manager --add-repo $repo_url + sudo dnf config-manager --add-repo $repo_url # install the package sudo dnf install terraform-1.9.8-1 -y || { From 56ac47eccc89427b785fe3d75c89180e80682f80 Mon Sep 17 00:00:00 2001 From: Greg Dumas Date: Tue, 14 Jan 2025 08:29:38 -0500 Subject: [PATCH 10/27] Fix indentation. --- bin/install.sh | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/bin/install.sh b/bin/install.sh index 08c04dd..7e6062f 100755 --- a/bin/install.sh +++ b/bin/install.sh @@ -94,12 +94,11 @@ for package in "${packages[@]}"; do elif [ $os_release_clean = 'fedora' ]; then release='fedora' fi + # repo URL for terraform + repo_url="https://rpm.releases.hashicorp.com/${release}/hashicorp.repo" - # repo URL for terraform - repo_url="https://rpm.releases.hashicorp.com/${release}/hashicorp.repo" - - # run dnf config-manager - sudo dnf config-manager --add-repo $repo_url + # run dnf config-manager + sudo dnf config-manager --add-repo $repo_url # install the package sudo dnf install terraform-1.9.8-1 -y || { From a90c1baf17b565dddb3efaed95a503b4edc77467 Mon Sep 17 00:00:00 2001 From: David Valin Date: Tue, 14 Jan 2025 11:19:25 -0500 Subject: [PATCH 11/27] Fix the aws cli check to check the existance of the command. --- bin/burden | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bin/burden b/bin/burden index 75fb76c..5fdbdd9 100755 --- a/bin/burden +++ b/bin/burden @@ -2092,10 +2092,11 @@ check_for_python() check_for_aws() { - aws_version=`dnf list installed | grep awscli.noarch` + aws_version=`aws --version 2> /dev/null` if [[ $? -eq 1 ]]; then - cleanup_and_exit "aws requires the aws clis to be installed\ndnf install -y awscli" 1 + cleanup_and_exit "aws requires the aws CLIs to be installed\ndnf install -y awscli or pip3 install awscli" 1 fi + aws_version=`echo $aws_version | cut -d'/' -f 2 | cut -d' ' -f 1` report_util_version aws_version "${aws_version}" } From d9290ec392547cdebb0345d8a21904fdc99dfc87 Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Tue, 14 Jan 2025 16:09:10 -0500 Subject: [PATCH 12/27] Fix: Add amazon to selinux_state=enabled check --- bin/burden | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/burden b/bin/burden index ea2e52a..f0a9ca6 100755 --- a/bin/burden +++ b/bin/burden @@ -4074,7 +4074,7 @@ if [[ $gl_show_os_versions -eq 1 ]]; then fi if [[ "$gl_selinux_state" == "$value_not_set" ]]; then - if [[ "$gl_os_vendor" == "rhel" ]]; then + if [[ "$gl_os_vendor" == "rhel" ]] || [[ "$gl_os_vendor" == "amazon" ]]; then gl_selinux_state="enabled" else gl_selinux_state="disabled" From cd099423d91f0e789e539c07e4da8555648824ad Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Wed, 15 Jan 2025 09:57:10 -0500 Subject: [PATCH 13/27] Feat(ci): Add issue labelling on PR review state --- .github/workflows/issue_tagging.yaml | 57 ++++++++++++++++++++++++++++ ci/determine_status.py | 26 +++++++++++++ ci/get_parent_issue.sh | 9 +++++ 3 files changed, 92 insertions(+) create mode 100644 .github/workflows/issue_tagging.yaml create mode 100644 ci/determine_status.py create mode 100755 ci/get_parent_issue.sh diff --git a/.github/workflows/issue_tagging.yaml b/.github/workflows/issue_tagging.yaml new file mode 100644 index 0000000..f649a83 --- /dev/null +++ b/.github/workflows/issue_tagging.yaml @@ -0,0 +1,57 @@ +name: Update parent issue + +permissions: + issues: write + +env: + ISSUE_STATE: pr_inprogress + REMOVE_ISSUES: --remove-label pr_approved --remove-label pr_review --remove-label pr_inprogress + GH_TOKEN: ${{ github.token }} + +on: + issue_comment: + pull_request_target: + types: + - review_requested + pull_request_review: + types: + - submitted +jobs: + update_parent_issue: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Get PR number on issue type + if: github.event_name == 'pull_request_review' + run: echo "PR_NUMBER=${{ github.event.pull_request.number }}" >> "$GITHUB_ENV" + + - name: Get PR number on PR event + if: github.event_name == 'pull_request_target' + run: echo "PR_NUMBER=${{ github.event.number }}" >> "$GITHUB_ENV" + + - name: Get parent issues + shell: bash + run: > + echo PARENT_ISSUE=$( + ./ci/get_parent_issue.sh + $PR_NUMBER + ) >> $GITHUB_ENV + + - name: Fail when unable to find a parent issue + if: env.PARENT_ISSUE == '' + run: echo "Could not find a parent issue" && exit 1 + + - name: Get PR state + run: > + echo PR_STATUS=pr_$( + gh pr view $PR_NUMBER --json reviewRequests,latestReviews | + python ./ci/determine_status.py + ) >> $GITHUB_ENV + + - name: Set parent issue state + run: > + echo "Updating $PARENT_ISSUE to $PR_STATUS" && + gh issue edit $PARENT_ISSUE $REMOVE_ISSUES && + gh issue edit $PARENT_ISSUE --add-label=$PR_STATUS + diff --git a/ci/determine_status.py b/ci/determine_status.py new file mode 100644 index 0000000..0640c07 --- /dev/null +++ b/ci/determine_status.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 + +import json + +def _main(file): + data = json.load(file) + + for review in data['latestReviews']: + if review['state'] == "CHANGES_REQUESTED": + return "inprogress" + + if len(data['reviewRequests']) > 0: + return "review" + + if len(data['latestReviews']) > 0: + return "approved" + + return "inprogress" #No PR Requests and no reviews + +if __name__ == "__main__": + import sys + in_file = sys.stdin + if len(sys.argv) > 1: + in_file = open(sys.argv[1], 'r') + print(_main(in_file)) + in_file.close() \ No newline at end of file diff --git a/ci/get_parent_issue.sh b/ci/get_parent_issue.sh new file mode 100755 index 0000000..f4fa292 --- /dev/null +++ b/ci/get_parent_issue.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +mentioned_issues=$(gh pr view "$1" --json body | jq -r .body | grep -Eo '#[0-9]+' | sed -e 's/#//g') + +for issue in $mentioned_issues; do + if gh issue view "$issue" --json id > /dev/null; then + echo "$issue" + fi +done From c8bbbca9a2a1f1486c4a11f02891a52b09912bf1 Mon Sep 17 00:00:00 2001 From: David Valin Date: Wed, 15 Jan 2025 11:19:01 -0500 Subject: [PATCH 14/27] Uperf requires us to be able to log back in to ourselves. Fix ssh setup. --- .../roles/ssh_key_exchange/tasks/main.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/ansible_roles/roles/ssh_key_exchange/tasks/main.yml b/ansible_roles/roles/ssh_key_exchange/tasks/main.yml index 988b659..a249db1 100644 --- a/ansible_roles/roles/ssh_key_exchange/tasks/main.yml +++ b/ansible_roles/roles/ssh_key_exchange/tasks/main.yml @@ -35,6 +35,22 @@ state: present key: "{{ lookup('file','buffer/{{ ip_list[0] }}-id_rsa.pub')}}" +- name: Copy the key add to authorized_keys using Ansible module + delegate_to: "{{ ip_list[0] }}" + become: yes + authorized_key: + user: root + state: present + key: "{{ lookup('file','buffer/{{ ip_list[0] }}-id_rsa.pub')}}" + +- name: Copy the key add to authorized_keys using Ansible module + delegate_to: "{{ ip_list[1] }}" + become: yes + authorized_key: + user: root + state: present + key: "{{ lookup('file','buffer/{{ ip_list[1] }}-id_rsa.pub')}}" + - name: Permit root login delegate_to: "{{ item }}" become: yes From 221ce0a0661757909dc61210f3a39d0a6dc30286 Mon Sep 17 00:00:00 2001 From: David Valin Date: Thu, 16 Jan 2025 08:29:04 -0500 Subject: [PATCH 15/27] Adding code to stop ansible from dumping to the screen. --- .../roles/log_and_terminate/tasks/main.yml | 10 ++++++++++ .../roles/terminate_on_error/tasks/main.yml | 8 +++++--- bin/burden | 19 ++++++++++++++++++- bin/kick_off.sh | 10 +++++++++- documentation/zathras_doc.adoc | 4 ++++ 5 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 ansible_roles/roles/log_and_terminate/tasks/main.yml diff --git a/ansible_roles/roles/log_and_terminate/tasks/main.yml b/ansible_roles/roles/log_and_terminate/tasks/main.yml new file mode 100644 index 0000000..2e1792f --- /dev/null +++ b/ansible_roles/roles/log_and_terminate/tasks/main.yml @@ -0,0 +1,10 @@ +--- +# tasks file for termination on failure + +- name: First,log to the error log + cmd: "echo Fatal error: {{ exit_msg }} >> {{ working_dir }}/error_log" + +- name: Aborting test + fail: + msg: "{{ exit_msg }}" + diff --git a/ansible_roles/roles/terminate_on_error/tasks/main.yml b/ansible_roles/roles/terminate_on_error/tasks/main.yml index 6c1df48..6a2e631 100644 --- a/ansible_roles/roles/terminate_on_error/tasks/main.yml +++ b/ansible_roles/roles/terminate_on_error/tasks/main.yml @@ -20,8 +20,10 @@ vars: tf_dir: "tf" when: config_info.cloud_terminate_instance == 1 and config_info.term_system == "yes" - - name: Aborting test - fail: - msg: "{{ exit_msg }}" + - name: Log failure + include_role: + name: log_and_terminate + vars: + exit_msg: "{{ exit_msg }}" when: status.rc == 1 diff --git a/bin/burden b/bin/burden index 5fdbdd9..9af9cb5 100755 --- a/bin/burden +++ b/bin/burden @@ -190,6 +190,7 @@ gl_max_systems_set=0 # should provide a usage. The --test_version_check option is present # so we can only check the versions via an option # +gl_ansible_verboisty="normal" gl_test_version_check=1 gl_update_test_versions=0 gl_disk_iops=0 @@ -1895,8 +1896,11 @@ create_ansible_options() if [[ "$gl_ssh_key_file" != "" ]]; then base_string="${base_string} -s $gl_ssh_key_file" fi + if [[ $gl_ansible_verboisty != "normal" ]]; then + base_string=${base_string}" -l $gl_ansible_verboisty" + fi echo $cli "${arguments[@]}" | sed "s/bin/./g" > ${run_dir}/exec_command - kick_off.sh $base_string | tee ${run_dir}/ansible_log & + kick_off.sh $base_string & pids[${pindex}]=$! let "pindex=$pindex+1" if [[ $pindex -eq $gl_max_systems ]]; then @@ -3042,6 +3046,10 @@ usage() echo "Usage: $0" echo "Version: "$version echo "General options" + echo " --ansible_noise_level : How much information ansible is to output." + echo " normal: standard ansible output" + echo " dense: just report the task executed" + echo " null: nothing reported" echo " --archive /: location to save the archive information to" echo " --child: tells burden it is a child of another burden process and not to" echo " perform the initial setup work" @@ -3218,6 +3226,14 @@ set_general_value() { shift_by=0 case "$1" in + --ansible_noise_level) + echo "$1 $2" >> $gl_cli_supplied_options + if [[ $2 != "normal" ]] && [[ $2 != "dense" ]] && [[ $2 != "null" ]]; then + cleanup_and_exit "$2 not valid value for --ansible_noise_level. Valid values are normal, dense or null" 1 + fi + gl_ansible_verboisty=$2 + shift_by=2 + ;; --archive) if [[ $gl_archive_location == $value_not_set ]]; then gl_archive_location=$2 @@ -3584,6 +3600,7 @@ grab_cli_data() # Define user options # ARGUMENT_LIST=( + "ansible_noise_level" "archive" "cloud_os_id" "create_attempts" diff --git a/bin/kick_off.sh b/bin/kick_off.sh index 429e002..71cb6f2 100755 --- a/bin/kick_off.sh +++ b/bin/kick_off.sh @@ -89,7 +89,8 @@ spot_recover=1 create_attempts=5 remove_dirs=0 ssh_key_file="" -while getopts "a:c:d:f:s:rS:t:" o; do +ansible_noise_level="normal" +while getopts "a:c:d:f:s:rS:t:l:" o; do case "${o}" in a) create_attempts=${OPTARG} @@ -103,6 +104,9 @@ while getopts "a:c:d:f:s:rS:t:" o; do f) tune_file=${OPTARG} ;; + l) + ansible_noise_level=${OPTARG} + ;; r) remove_dirs=1 ;; @@ -167,6 +171,10 @@ done export ANSIBLE_HOST_KEY_CHECKING=False echo "[defaults]" >> ansible.cfg echo "roles_path = ~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:~/.ansible/collections/ansible_collections/pbench/agent/roles" >> ansible.cfg +echo "log_path=${curdir}/ansible_log" >> ansible.cfg +if [[ $ansible_noise_level != "normal" ]]; then + echo "stdout_callback = $ansible_noise_level" >> ansible.cfg +fi current_test=0 for sys_config in ${individual}; do diff --git a/documentation/zathras_doc.adoc b/documentation/zathras_doc.adoc index 119ed0e..7271200 100644 --- a/documentation/zathras_doc.adoc +++ b/documentation/zathras_doc.adoc @@ -132,6 +132,10 @@ $ ./burden --verbose Usage: ./bin/burden Version: 3.0 General options + --ansible_noise_level: <level>: How much information ansible is to output. + normal: standard ansible output + dense: just report the task executed + null: nothing reported --archive <dir>/<results>: location to save the archive information to --child: tells burden it is a child of another burden process and not to perform the initial setup work From 220fad66ebb3408e38de0e008c13867c49e61714 Mon Sep 17 00:00:00 2001 From: David Valin Date: Thu, 16 Jan 2025 13:26:57 -0500 Subject: [PATCH 16/27] Indicationof test start/end --- bin/burden | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/bin/burden b/bin/burden index 9af9cb5..6c68459 100755 --- a/bin/burden +++ b/bin/burden @@ -1900,12 +1900,18 @@ create_ansible_options() base_string=${base_string}" -l $gl_ansible_verboisty" fi echo $cli "${arguments[@]}" | sed "s/bin/./g" > ${run_dir}/exec_command + test_info_str=`grep test_to_run: $run_dir/ansible_vars_main.yml | sed "s/\[//g" | sed "s/\]//g" | cut -d: -f 2 | sed "s/ //g"` + echo "Starting ${test_info_str} on ${host_or_cloud_inst}" kick_off.sh $base_string & - pids[${pindex}]=$! + index=$! + pids[${pindex}]="${index}:${test_info_str} on ${host_or_cloud_inst}" let "pindex=$pindex+1" if [[ $pindex -eq $gl_max_systems ]]; then - for pid in ${pids[*]}; do - wait $pid + for pid in "${pids[*]}"; do + wait_for=`echo $pid | cut -d ':' -f 1` + wait $wait_for + out_string=`echo $pid | cut -d ':' -f 2-` + echo Finsihed $out_string done pindex=0 fi @@ -1919,8 +1925,11 @@ create_ansible_options() # # Wait for everyone to finish up. # - for pid in ${pids[*]}; do - wait $pid + for pid in "${pids[*]}"; do + wait_for=`echo $pid | cut -d ':' -f 1` + wait $wait_for + out_string=`echo $pid | cut -d ':' -f 2-` + echo Finsihed $out_string done # From e3d24e2c4313a6c1ce898c4826f76276bf897aa2 Mon Sep 17 00:00:00 2001 From: David Valin Date: Fri, 17 Jan 2025 11:20:20 -0500 Subject: [PATCH 17/27] Update test versions to latest. --- config/autohpl.yml | 4 ++-- config/coremark_template.yml | 4 ++-- config/fio_template.yml | 4 ++-- config/linpack_template.yml | 4 ++-- config/passmark_template.yml | 4 ++-- config/pyperformance_template.yml | 4 ++-- config/reboot_measure.yml | 4 ++-- config/speccpu2017_template.yml | 4 ++-- config/uperf_template.yml | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/config/autohpl.yml b/config/autohpl.yml index e377dfd..00d74b7 100644 --- a/config/autohpl.yml +++ b/config/autohpl.yml @@ -1,6 +1,6 @@ location: https://github.com/redhat-performance/autohpl-wrapper/archive/refs/tags -exec_dir: "autohpl-wrapper-1.22/auto_hpl" -repo_file: "v1.22.zip" +exec_dir: "autohpl-wrapper-1.24/auto_hpl" +repo_file: "v1.24.zip" rhel_pkgs: gcc,make,gcc-gfortran,openblas-openmp,openmpi,openmpi-devel,wget,bc,perf,git,unzip ubuntu_pkgs: gcc,make,g++,python3-pip,mpi,libopenblas-base,mpi-default-bin,mpi-default-dev,mpi-specs,libmkl-intel-thread,libmkl-intel-ilp64,libmkl-intel-lp64,libmkl-core,libmkl-gnu-thread,zip,unzip amazon_pkgs: git,gcc,make,gcc-gfortran,blas,openmpi,openmpi-devel,wget,bc,zip,unzip diff --git a/config/coremark_template.yml b/config/coremark_template.yml index 0046b2f..6fee402 100644 --- a/config/coremark_template.yml +++ b/config/coremark_template.yml @@ -1,6 +1,6 @@ location: https://github.com/redhat-performance/coremark-wrapper/archive/refs/tags -exec_dir: "coremark-wrapper-1.21/coremark" -repo_file: "v1.21.zip" +exec_dir: "coremark-wrapper-1.22/coremark" +repo_file: "v1.22.zip" rhel_pkgs: bc,numactl,perf,git,unzip,perf ubuntu_pkgs: unzip,zip amazon_pkgs: bc,git,zip,unzip diff --git a/config/fio_template.yml b/config/fio_template.yml index f70340c..10607c7 100644 --- a/config/fio_template.yml +++ b/config/fio_template.yml @@ -1,6 +1,6 @@ location: https://github.com/redhat-performance/fio-wrapper/archive/refs/tags -exec_dir: "fio-wrapper-1.21/fio" -repo_file: "v1.21.zip" +exec_dir: "fio-wrapper-1.30/fio" +repo_file: "v1.30.zip" test_grouping: pbench_fio rhel_pkgs: gcc,numactl,python3,bc,fio,perf,git,unzip,perf ubuntu_pkgs: fio,unzip,zip diff --git a/config/linpack_template.yml b/config/linpack_template.yml index a040233..92ecf62 100644 --- a/config/linpack_template.yml +++ b/config/linpack_template.yml @@ -1,6 +1,6 @@ location: https://github.com/redhat-performance/linpack-wrapper/archive/refs/tags -exec_dir: "linpack-wrapper-2.4/linpack" -repo_file: "v2.4.zip" +exec_dir: "linpack-wrapper-2.5/linpack" +repo_file: "v2.5.zip" os_supported: all rhel_pkgs: bc,numactl,perf,git,unzip ubuntu_pkgs: unzip,zip,numactl diff --git a/config/passmark_template.yml b/config/passmark_template.yml index 5e190f9..042761d 100644 --- a/config/passmark_template.yml +++ b/config/passmark_template.yml @@ -1,6 +1,6 @@ location: https://github.com/redhat-performance/passmark-wrapper/archive/refs/tags -exec_dir: "passmark-wrapper-1.19/passmark" -repo_file: "v1.19.zip" +exec_dir: "passmark-wrapper-1.22/passmark" +repo_file: "v1.22.zip" rhel_pkgs: bc,numactl,perf,git,unzip,perf ubuntu_pkgs: unzip,zip amazon_pkgs: bc,git,zip,unzip diff --git a/config/pyperformance_template.yml b/config/pyperformance_template.yml index 09ad56b..766200a 100644 --- a/config/pyperformance_template.yml +++ b/config/pyperformance_template.yml @@ -1,6 +1,6 @@ location: https://github.com/redhat-performance/pyperf-wrapper/archive/refs/tags -exec_dir: "pyperf-wrapper-1.24/pyperf" -repo_file: "v1.24.zip" +exec_dir: "pyperf-wrapper-1.25/pyperf" +repo_file: "v1.25.zip" rhel_pkgs: bc,numactl,perf,pip,,python3-devel,git,unzip,perf,wget ubuntu_pkgs: unzip,zip,,python3-dev amazon_pkgs: bc,git,zip,unzip diff --git a/config/reboot_measure.yml b/config/reboot_measure.yml index 72f5c00..fb20251 100644 --- a/config/reboot_measure.yml +++ b/config/reboot_measure.yml @@ -1,5 +1,5 @@ location: https://github.com/redhat-performance/reboot_measurement/archive/refs/tags -exec_dir: "reboot_measurement-1.5/reboot_measurement" -repo_file: "v1.5.zip" +exec_dir: "reboot_measurement-1.6/reboot_measurement" +repo_file: "v1.6.zip" os_supported: all test_script_to_run: run_reboot.sh diff --git a/config/speccpu2017_template.yml b/config/speccpu2017_template.yml index 5673c45..3942e20 100644 --- a/config/speccpu2017_template.yml +++ b/config/speccpu2017_template.yml @@ -1,6 +1,6 @@ location: https://github.com/redhat-performance/speccpu2017-wrapper/archive/refs/tags -exec_dir: "speccpu2017-wrapper-1.18/speccpu2017" -repo_file: "v1.18.zip" +exec_dir: "speccpu2017-wrapper-1.19/speccpu2017" +repo_file: "v1.19.zip" rhel_pkgs_9: bc,libnsl,gcc-gfortran,nvme-cli,perf,libxcrypt-compat,git,unzip,perf,libxcrypt-compat rhel_pkgs: bc,libnsl,gcc-gfortran,perf,git,unzip,libxcrypt-compat ubuntu_pkgs: gcc,bc,gfortran,g++,unzip,zip diff --git a/config/uperf_template.yml b/config/uperf_template.yml index d169e1a..8e0a173 100644 --- a/config/uperf_template.yml +++ b/config/uperf_template.yml @@ -1,6 +1,6 @@ location: https://github.com/redhat-performance/uperf-wrapper/archive/refs/tags -exec_dir: "uperf-wrapper-1.21/uperf" -repo_file: "v1.21.zip" +exec_dir: "uperf-wrapper-1.26/uperf" +repo_file: "v1.26.zip" rhel_pkgs: python3,gcc,lksctp-tools-devel,bc,perf,git,unzip,perf ubuntu_pkgs: gcc,python3,libsctp-dev,lksctp-tools,libusrsctp-dev,make,net-tools,dh-autoreconf,zip,unzip amazon_pkgs: git,python3,gcc,lksctp-tools-devel,xorg-x11-xauth From 320d43b4f9bed498c2743fafee8ec70aef2321ff Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Fri, 17 Jan 2025 14:40:16 -0500 Subject: [PATCH 18/27] Fix: Add ability to manage multiple issues at the same time --- .github/workflows/issue_tagging.yaml | 14 ++++++++------ ci/get_parent_issue.sh | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/.github/workflows/issue_tagging.yaml b/.github/workflows/issue_tagging.yaml index f649a83..6f592c7 100644 --- a/.github/workflows/issue_tagging.yaml +++ b/.github/workflows/issue_tagging.yaml @@ -33,7 +33,7 @@ jobs: - name: Get parent issues shell: bash run: > - echo PARENT_ISSUE=$( + echo PARENT_ISSUES=$( ./ci/get_parent_issue.sh $PR_NUMBER ) >> $GITHUB_ENV @@ -42,16 +42,18 @@ jobs: if: env.PARENT_ISSUE == '' run: echo "Could not find a parent issue" && exit 1 - - name: Get PR state + - name: Get PR states run: > echo PR_STATUS=pr_$( gh pr view $PR_NUMBER --json reviewRequests,latestReviews | python ./ci/determine_status.py ) >> $GITHUB_ENV - - name: Set parent issue state + - name: Set parent issues state run: > - echo "Updating $PARENT_ISSUE to $PR_STATUS" && - gh issue edit $PARENT_ISSUE $REMOVE_ISSUES && - gh issue edit $PARENT_ISSUE --add-label=$PR_STATUS + for issue in $PARENT_ISSUES; do + echo "Updating $issue to $PR_STATUS" && + gh issue edit $issue $REMOVE_ISSUES && + gh issue edit $issue --add-label=$PR_STATUS + done diff --git a/ci/get_parent_issue.sh b/ci/get_parent_issue.sh index f4fa292..a07e199 100755 --- a/ci/get_parent_issue.sh +++ b/ci/get_parent_issue.sh @@ -4,6 +4,6 @@ mentioned_issues=$(gh pr view "$1" --json body | jq -r .body | grep -Eo '#[0-9]+ for issue in $mentioned_issues; do if gh issue view "$issue" --json id > /dev/null; then - echo "$issue" + echo -n "$issue " fi done From c8e1df2d09e26ff713c8b3c79326f5c0bdb8aef1 Mon Sep 17 00:00:00 2001 From: David Valin Date: Tue, 21 Jan 2025 07:10:43 -0500 Subject: [PATCH 19/27] Fix azure creation --- ansible_roles/roles/azure_create/files/tf/main_net_p1.tf | 2 ++ ansible_roles/roles/azure_create/files/tf/main_net_p2.tf | 6 ------ ansible_roles/roles/azure_create/files/tf/main_no_net.tf | 2 ++ ansible_roles/roles/azure_create/files/tf/vars.tf | 5 +++++ ansible_roles/roles/azure_create/files/tf/vm_spot_set.tf | 6 ------ ansible_roles/roles/azure_create/templates/tfvars.j2 | 2 ++ bin/burden | 4 +++- 7 files changed, 14 insertions(+), 13 deletions(-) diff --git a/ansible_roles/roles/azure_create/files/tf/main_net_p1.tf b/ansible_roles/roles/azure_create/files/tf/main_net_p1.tf index 3677b81..9663e01 100644 --- a/ansible_roles/roles/azure_create/files/tf/main_net_p1.tf +++ b/ansible_roles/roles/azure_create/files/tf/main_net_p1.tf @@ -8,6 +8,7 @@ terraform { } provider "azurerm" { features {} + subscription_id = var.az_subscription } # Define resource group @@ -53,6 +54,7 @@ resource "azurerm_public_ip" "publicip" { location = var.location resource_group_name = azurerm_resource_group.resource_group.name allocation_method = "Dynamic" + sku = "Basic" } # Create Network Security Group and rule diff --git a/ansible_roles/roles/azure_create/files/tf/main_net_p2.tf b/ansible_roles/roles/azure_create/files/tf/main_net_p2.tf index 75ef0fe..9ab3fd7 100644 --- a/ansible_roles/roles/azure_create/files/tf/main_net_p2.tf +++ b/ansible_roles/roles/azure_create/files/tf/main_net_p2.tf @@ -21,12 +21,6 @@ resource "azurerm_linux_virtual_machine" "virtualmachine" { storage_account_type = "Premium_LRS" } - plan { - name = var.sku - product = var.offer - publisher = var.publisher - } - source_image_reference { publisher = var.publisher offer = var.offer diff --git a/ansible_roles/roles/azure_create/files/tf/main_no_net.tf b/ansible_roles/roles/azure_create/files/tf/main_no_net.tf index 0727381..04d104d 100644 --- a/ansible_roles/roles/azure_create/files/tf/main_no_net.tf +++ b/ansible_roles/roles/azure_create/files/tf/main_no_net.tf @@ -8,6 +8,7 @@ terraform { } provider "azurerm" { features {} + subscription_id = var.az_subscription } resource "azurerm_resource_group" "resource_group" { @@ -41,6 +42,7 @@ resource "azurerm_public_ip" "publicip" { location = var.location resource_group_name = azurerm_resource_group.resource_group.name allocation_method = "Dynamic" + sku = "Basic" } # Create Network Security Group and rule diff --git a/ansible_roles/roles/azure_create/files/tf/vars.tf b/ansible_roles/roles/azure_create/files/tf/vars.tf index 7b8b1f8..1074cce 100644 --- a/ansible_roles/roles/azure_create/files/tf/vars.tf +++ b/ansible_roles/roles/azure_create/files/tf/vars.tf @@ -52,6 +52,11 @@ variable "vm_image" { default = "RedHat:RHEL:8_4:8.4.2021081003" } +variable "az_subscription" { + type = string + default = "none" +} + variable "publisher" { type = string default = "RedHat" diff --git a/ansible_roles/roles/azure_create/files/tf/vm_spot_set.tf b/ansible_roles/roles/azure_create/files/tf/vm_spot_set.tf index 36856f7..ed43657 100644 --- a/ansible_roles/roles/azure_create/files/tf/vm_spot_set.tf +++ b/ansible_roles/roles/azure_create/files/tf/vm_spot_set.tf @@ -19,12 +19,6 @@ resource "azurerm_linux_virtual_machine" "virtualmachine" { storage_account_type = "Premium_LRS" } - plan { - name = var.sku - product = var.offer - publisher = var.publisher - } - source_image_reference { publisher = var.publisher offer = var.offer diff --git a/ansible_roles/roles/azure_create/templates/tfvars.j2 b/ansible_roles/roles/azure_create/templates/tfvars.j2 index d6b922f..0df6fc9 100644 --- a/ansible_roles/roles/azure_create/templates/tfvars.j2 +++ b/ansible_roles/roles/azure_create/templates/tfvars.j2 @@ -1,9 +1,11 @@ resource_group = "{{ config_info.cloud_resource_group }}" machine_type = "{{ config_info.host_or_cloud_inst }}" +location = "{{ config_info.cloud_region }}" cloud_os_version = "{{ config_info.cloud_os_version }}" cloud_placement = "{{ config_info.cloud_placement }}" +az_subscription = "{{ config_info.az_subscription }}" run_label = "{{ config_info.user_running }}-{{ config_info.run_label | lower() | replace ('.','-',63) | replace('_','-',63) | replace('/','-')}}" diff --git a/bin/burden b/bin/burden index 5fdbdd9..ab11006 100755 --- a/bin/burden +++ b/bin/burden @@ -1254,13 +1254,15 @@ azure_specific_os_version() # The publisher field in the urn may be different case (go figure) then expected.. # So we need to go and pull the publisher from az_vm image show. # - azpublisher=`az vm image show --location eastus --urn ${gl_cloud_os_version} | grep publisher | cut -d: -f 2 | cut -d'"' -f 2` + az_subscription=`az account show | grep id | cut -d'"' -f 4` + azpublisher=$(echo $gl_cloud_os_version | cut -f1 -d:) azoffer=$(echo $gl_cloud_os_version | cut -f 2 -d:) azsku=$(echo $gl_cloud_os_version | cut -f 3 -d:) azversion=$(echo $gl_cloud_os_version | cut -f 4 -d:) echo " cloud_offer: ${azoffer}" >> ansible_vars_main.yml echo " cloud_publisher: ${azpublisher}" >> ansible_vars_main.yml echo " cloud_os_version: ${azversion}" >> ansible_vars_main.yml + echo " az_subscription: ${az_subscription}" >> ansible_vars_main.yml # # Because the sku may contain an _, and ansible when it replaces the # variables in the tfvars.j2 file later will unquote _. From 7df567fe4edec5b7564ae76a80b4050418ebe51e Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Tue, 21 Jan 2025 13:53:31 -0500 Subject: [PATCH 20/27] Doc(ci): Add documentation on how ci labelling workflow works --- ci/README.md | 8 ++++++++ ci/images/pr_labelling.png | Bin 0 -> 63256 bytes 2 files changed, 8 insertions(+) create mode 100644 ci/README.md create mode 100644 ci/images/pr_labelling.png diff --git a/ci/README.md b/ci/README.md new file mode 100644 index 0000000..240aef9 --- /dev/null +++ b/ci/README.md @@ -0,0 +1,8 @@ +# Workflows in this repository + +## Update parent issue +The idea behind this workflow is to keep Jira tickets in sync with the current status of their GitHub issue. A flowchart for how this works can be seen below. + +![flow chart for PR labelling workflow](ci/images/pr_labelling.png) + +This workflow does not work with forked repositories, since the `GITHUB_TOKEN` provided by GitHub runner will not have write access to the base repository unless the pull request originated from the base repository. diff --git a/ci/images/pr_labelling.png b/ci/images/pr_labelling.png new file mode 100644 index 0000000000000000000000000000000000000000..c2d1e4d2c3445c69a6b776d7840d34ec6a4bb982 GIT binary patch literal 63256 zcmd?RXH-*L*EVd!0!KYZL{ypu0YQ2b5U|jD6QrXc(vdDi5|ranx>5wB3IZZcx)30u zB2r`Mgc7BN79uTy)OYQ8?pvSl8RHw@`2N2B5ZHU|z4~0&yskNSl!=k{LH3jEJ9g|i zsH>x4wqwU`sU17^oZ7z^Tu};bIJ9F‰JD;D=0mM0E04fZpbtNoYIk*?3qSD%T} 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 z Date: Tue, 21 Jan 2025 13:54:46 -0500 Subject: [PATCH 21/27] Fix(ci): Change path of image import in workflow readme --- ci/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/README.md b/ci/README.md index 240aef9..eba79bb 100644 --- a/ci/README.md +++ b/ci/README.md @@ -3,6 +3,6 @@ ## Update parent issue The idea behind this workflow is to keep Jira tickets in sync with the current status of their GitHub issue. A flowchart for how this works can be seen below. -![flow chart for PR labelling workflow](ci/images/pr_labelling.png) +![flow chart for PR labelling workflow](images/pr_labelling.png) This workflow does not work with forked repositories, since the `GITHUB_TOKEN` provided by GitHub runner will not have write access to the base repository unless the pull request originated from the base repository. From 6178fc7a68de1d55f0c878a525494d29d51d6bad Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Tue, 21 Jan 2025 14:03:03 -0500 Subject: [PATCH 22/27] Doc(ci): Convert image to jpg so it has a background --- ci/README.md | 2 +- ci/images/pr_labelling.jpg | Bin 0 -> 50767 bytes ci/images/pr_labelling.png | Bin 63256 -> 0 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 ci/images/pr_labelling.jpg delete mode 100644 ci/images/pr_labelling.png diff --git a/ci/README.md b/ci/README.md index eba79bb..3bab370 100644 --- a/ci/README.md +++ b/ci/README.md @@ -3,6 +3,6 @@ ## Update parent issue The idea behind this workflow is to keep Jira tickets in sync with the current status of their GitHub issue. A flowchart for how this works can be seen below. -![flow chart for PR labelling workflow](images/pr_labelling.png) +![flow chart for PR labelling workflow](images/pr_labelling.jpg) This workflow does not work with forked repositories, since the `GITHUB_TOKEN` provided by GitHub runner will not have write access to the base repository unless the pull request originated from the base repository. diff --git a/ci/images/pr_labelling.jpg b/ci/images/pr_labelling.jpg new file mode 100644 index 0000000000000000000000000000000000000000..207d19b704af9b4baecc4dde0797b9eaa9d6c290 GIT binary patch literal 50767 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 bl_5QM3jtkE&jlutKZnKtpS&FyKPLYdlM~Hy literal 0 HcmV?d00001 diff --git a/ci/images/pr_labelling.png b/ci/images/pr_labelling.png deleted file mode 100644 index c2d1e4d2c3445c69a6b776d7840d34ec6a4bb982..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63256 zcmd?RXH-*L*EVd!0!KYZL{ypu0YQ2b5U|jD6QrXc(vdDi5|ranx>5wB3IZZcx)30u zB2r`Mgc7BN79uTy)OYQ8?pvSl8RHw@`2N2B5ZHU|z4~0&yskNSl!=k{LH3jEJ9g|i zsH>x4wqwU`sU17^oZ7z^Tu};bIJ9F‰JD;D=0mM0E04fZpbtNoYIk*?3qSD%T} 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 z Date: Tue, 21 Jan 2025 14:21:56 -0500 Subject: [PATCH 23/27] Add PR Requirement Checking (#145) * Add PR requirements to check for Jira and GitHub issue references * Update with PR edit, and fix branch bug * Docs(ci): Add documentation about PR requirement workflow --- .github/workflows/verify_pr_requirements.yaml | 29 +++++++++++++++++++ ci/README.md | 4 +++ 2 files changed, 33 insertions(+) create mode 100644 .github/workflows/verify_pr_requirements.yaml diff --git a/.github/workflows/verify_pr_requirements.yaml b/.github/workflows/verify_pr_requirements.yaml new file mode 100644 index 0000000..2538153 --- /dev/null +++ b/.github/workflows/verify_pr_requirements.yaml @@ -0,0 +1,29 @@ +name: Verify PR has JIRA ticket and issue number + +on: + pull_request: + types: + - opened + - edited + branches: + - main + +permissions: + contents: read + pull-requests: write # Need write to make comments + +jobs: + pr_issue_jira: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + repository: redhat-performance/pr-requirements + path: pr-requirements + ref: v1.0.0 + - uses: ./pr-requirements + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + jira_ticket: true + jira_project: RPOPC + jira_url: https://issues.redhat.com \ No newline at end of file diff --git a/ci/README.md b/ci/README.md index 3bab370..f5127c2 100644 --- a/ci/README.md +++ b/ci/README.md @@ -1,5 +1,9 @@ # Workflows in this repository +## Verify PR has JIRA ticket and issue number +This workflow is designed to enforce requirements for PR descriptions. At bare minimum it requires the PR to mention a related issue and mention the Jira Ticket number. Both of these are required since Sync2Jira does not know how to associate a PR with a Jira Ticket from the originating GitHub issue. + + ## Update parent issue The idea behind this workflow is to keep Jira tickets in sync with the current status of their GitHub issue. A flowchart for how this works can be seen below. From 2585a93bb00c2d93d71568d4737b85881f1d0fef Mon Sep 17 00:00:00 2001 From: David Valin Date: Tue, 21 Jan 2025 15:25:18 -0500 Subject: [PATCH 24/27] Code review changes. --- bin/burden | 14 +++++++------- bin/kick_off.sh | 9 ++++++++- documentation/zathras_doc.adoc | 2 +- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/bin/burden b/bin/burden index 6c68459..40c7ede 100755 --- a/bin/burden +++ b/bin/burden @@ -190,7 +190,7 @@ gl_max_systems_set=0 # should provide a usage. The --test_version_check option is present # so we can only check the versions via an option # -gl_ansible_verboisty="normal" +gl_ansible_verbosity="normal" gl_test_version_check=1 gl_update_test_versions=0 gl_disk_iops=0 @@ -1896,8 +1896,8 @@ create_ansible_options() if [[ "$gl_ssh_key_file" != "" ]]; then base_string="${base_string} -s $gl_ssh_key_file" fi - if [[ $gl_ansible_verboisty != "normal" ]]; then - base_string=${base_string}" -l $gl_ansible_verboisty" + if [[ $gl_ansible_verbosity != "normal" ]]; then + base_string=${base_string}" -l $gl_ansible_verbosity" fi echo $cli "${arguments[@]}" | sed "s/bin/./g" > ${run_dir}/exec_command test_info_str=`grep test_to_run: $run_dir/ansible_vars_main.yml | sed "s/\[//g" | sed "s/\]//g" | cut -d: -f 2 | sed "s/ //g"` @@ -3058,7 +3058,7 @@ usage() echo " --ansible_noise_level : How much information ansible is to output." echo " normal: standard ansible output" echo " dense: just report the task executed" - echo " null: nothing reported" + echo " silence: nothing reported" echo " --archive

/: location to save the archive information to" echo " --child: tells burden it is a child of another burden process and not to" echo " perform the initial setup work" @@ -3237,10 +3237,10 @@ set_general_value() case "$1" in --ansible_noise_level) echo "$1 $2" >> $gl_cli_supplied_options - if [[ $2 != "normal" ]] && [[ $2 != "dense" ]] && [[ $2 != "null" ]]; then - cleanup_and_exit "$2 not valid value for --ansible_noise_level. Valid values are normal, dense or null" 1 + if [[ $2 != "normal" ]] && [[ $2 != "dense" ]] && [[ $2 != "silence" ]]; then + cleanup_and_exit "$2 not valid value for --ansible_noise_level. Valid values are normal, dense or silence" 1 fi - gl_ansible_verboisty=$2 + gl_ansible_verbosity=$2 shift_by=2 ;; --archive) diff --git a/bin/kick_off.sh b/bin/kick_off.sh index 71cb6f2..f30cbcd 100755 --- a/bin/kick_off.sh +++ b/bin/kick_off.sh @@ -173,7 +173,14 @@ echo "[defaults]" >> ansible.cfg echo "roles_path = ~/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:~/.ansible/collections/ansible_collections/pbench/agent/roles" >> ansible.cfg echo "log_path=${curdir}/ansible_log" >> ansible.cfg if [[ $ansible_noise_level != "normal" ]]; then - echo "stdout_callback = $ansible_noise_level" >> ansible.cfg + if [[ $ansible_noise_level == "silence" ]]; then + # + # Ansible option for no output is null. + # + echo "stdout_callback = null" >> ansible.cfg + else + echo "stdout_callback = $ansible_noise_level" >> ansible.cfg + fi fi current_test=0 for sys_config in ${individual}; diff --git a/documentation/zathras_doc.adoc b/documentation/zathras_doc.adoc index 7271200..e24c0dd 100644 --- a/documentation/zathras_doc.adoc +++ b/documentation/zathras_doc.adoc @@ -135,7 +135,7 @@ General options --ansible_noise_level: <level>: How much information ansible is to output. normal: standard ansible output dense: just report the task executed - null: nothing reported + silence: nothing reported --archive <dir>/<results>: location to save the archive information to --child: tells burden it is a child of another burden process and not to perform the initial setup work From d337a5cd31bf32de4351d610890cec7f4f458b86 Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Wed, 22 Jan 2025 09:39:07 -0500 Subject: [PATCH 25/27] Add label checking for group reviews (#153) * Feat: Add ability to check for a label marking a group review approval * Docs(ci): Add documentation about group review label * Docs(ci): Add example of GitHub CLI adding a label to a pr --- .github/workflows/check_review_label.yaml | 20 ++++++++++++++++++++ ci/README.md | 7 +++++++ 2 files changed, 27 insertions(+) create mode 100644 .github/workflows/check_review_label.yaml diff --git a/.github/workflows/check_review_label.yaml b/.github/workflows/check_review_label.yaml new file mode 100644 index 0000000..e850681 --- /dev/null +++ b/.github/workflows/check_review_label.yaml @@ -0,0 +1,20 @@ +name: Verify group review + +on: + pull_request: + types: + - opened + - labeled + +env: + TARGET_LABEL: 'group_review_lgtm' + +jobs: + check_review_label: + runs-on: ubuntu-latest + steps: + - run: echo "::error Missing review label" && exit 1 + if: "!contains(github.event.pull_request.labels.*.name, env.TARGET_LABEL)" + + - run: echo "Has review label" + diff --git a/ci/README.md b/ci/README.md index f5127c2..b77bdea 100644 --- a/ci/README.md +++ b/ci/README.md @@ -1,5 +1,12 @@ # Workflows in this repository +## Verify group review +This workflow requires PRs to have an additional label before they can be merged into the main branch. Currently the label is `group_review_lgtm`, which is intended to be issued once the PR has been through a group review. + +This can be done via the GitHub CLI by using the command +`gh pr edit --add-label group_review_lgtm`. + + ## Verify PR has JIRA ticket and issue number This workflow is designed to enforce requirements for PR descriptions. At bare minimum it requires the PR to mention a related issue and mention the Jira Ticket number. Both of these are required since Sync2Jira does not know how to associate a PR with a Jira Ticket from the originating GitHub issue. From bb3fbef2cba5ac71610e4a718a0813c28352956e Mon Sep 17 00:00:00 2001 From: David Valin Date: Wed, 22 Jan 2025 12:09:52 -0500 Subject: [PATCH 26/27] Change egrep to grep -E --- bin/burden | 10 +++++----- tools_bin/data_gather | 2 +- tools_bin/get_hw_config | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bin/burden b/bin/burden index 9e7df1b..d519d49 100755 --- a/bin/burden +++ b/bin/burden @@ -306,7 +306,7 @@ azure_image_lookup() echo "Pulling requested Azure OS image information, may take a bit." end_date=`date +"%Y"` let "start_date=$end_date-1" - az vm image list --all --publisher $publisher --output tsv | egrep ".$start_date|.$end_date" + az vm image list --all --publisher $publisher --output tsv | grep -E ".$start_date|.$end_date" cleanup_and_exit "" 0 } @@ -325,7 +325,7 @@ gcp_image_lookup() echo "Pulling requested GCP OS image information, may take a bit." end_date=`date +"%Y"` let "start_date=$end_date-1" - gcloud compute images list --format="table(NAME,PROJECT,creationTimestamp.date(tz=LOCAL))" | grep "$project" | egrep ".$start_date|.$end_date" + gcloud compute images list --format="table(NAME,PROJECT,creationTimestamp.date(tz=LOCAL))" | grep "$project" | grep -E ".$start_date|.$end_date" cleanup_and_exit "" 0 } @@ -359,7 +359,7 @@ show_aws_images() if [[ $2 -eq 0 ]]; then echo "Pulling requested AWS OS image information, may take a bit." if [[ $gl_os_vendor != "private" ]]; then - aws ec2 describe-images --query 'sort_by(Images, &CreationDate)[*].[CreationDate,Name,ImageId]' --filters "$filter" --output table | egrep "${start_date}|${end_date}" + aws ec2 describe-images --query 'sort_by(Images, &CreationDate)[*].[CreationDate,Name,ImageId]' --filters "$filter" --output table | grep -E "${start_date}|${end_date}" else get_cloud_acct_id aws ec2 describe-images --owners $gl_cloud_acct_id --output table --query 'sort_by(Images, &CreationDate)[*].[CreationDate,Name,ImageId]' @@ -378,7 +378,7 @@ show_aws_images() ami_check=$ami ami_arch="" fi - ami_value=`aws ec2 describe-images --query 'sort_by(Images, &CreationDate)[*].[CreationDate,Name,ImageId]' --filters "$filter" --output table | egrep "${start_date}|${end_date}" | grep "${ami_check}"` + ami_value=`aws ec2 describe-images --query 'sort_by(Images, &CreationDate)[*].[CreationDate,Name,ImageId]' --filters "$filter" --output table | grep -E "${start_date}|${end_date}" | grep "${ami_check}"` if [[ $ami_value != "" ]]; then # # check_for_private_amis @@ -1289,7 +1289,7 @@ aws_specific_os_version() else ami_check=$ami fi - ami_value=`aws ec2 describe-images --query 'sort_by(Images, &CreationDate)[*].[CreationDate,Name,ImageId]' --filters "$filter" --output table | egrep "${start_date}|${end_date}" | grep "${ami_check}"` + ami_value=`aws ec2 describe-images --query 'sort_by(Images, &CreationDate)[*].[CreationDate,Name,ImageId]' --filters "$filter" --output table | grep -E "${start_date}|${end_date}" | grep "${ami_check}"` if [[ $ami_value == "" ]]; then get_cloud_acct_id ami_value=`aws ec2 describe-images --owners $gl_cloud_acct_id | grep IMAGES | grep $ami_check` diff --git a/tools_bin/data_gather b/tools_bin/data_gather index a81b3c6..7abeb8b 100755 --- a/tools_bin/data_gather +++ b/tools_bin/data_gather @@ -31,7 +31,7 @@ grep "^NUMA node" /tmp/lscpu.tmp echo ============================================== echo Memory information echo ============================================== -cat /proc/meminfo | egrep "MemTotal:|Hugepagesize:|HardwareCorrupted:" +cat /proc/meminfo | grep -E "MemTotal:|Hugepagesize:|HardwareCorrupted:" echo Numa memory per node numactl --hardware | grep size # diff --git a/tools_bin/get_hw_config b/tools_bin/get_hw_config index 8a83e28..d091aec 100755 --- a/tools_bin/get_hw_config +++ b/tools_bin/get_hw_config @@ -30,7 +30,7 @@ NUMB_SOCKETS=`grep "Socket(s):" /tmp/lscpu | cut -d: -f 2` cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | sort -nu > /tmp/hyper_list -hyper=`egrep '(-|,)' /tmp/hyper_list` +hyper=`grep -E '(-|,)' /tmp/hyper_list` echo numb_cpus: $NUMB_CPUS echo cores_per_socket: $CORES_PER_SOCKET @@ -39,7 +39,7 @@ echo numb_sockets: $NUMB_SOCKETS cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | sort -nu > /tmp/hyper_list -hyper=`egrep '(-|,)' /tmp/hyper_list` +hyper=`grep -E '(-|,)' /tmp/hyper_list` if [ -z "$hyper" ]; then From 26fdc261b51f698da978b9f79b7162e4c6ddb8e6 Mon Sep 17 00:00:00 2001 From: Keith Valin Date: Tue, 28 Jan 2025 11:41:39 -0500 Subject: [PATCH 27/27] Fix(ci): Remove issue_comment trigger, fix typo in conditional (#159) --- .github/workflows/issue_tagging.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/issue_tagging.yaml b/.github/workflows/issue_tagging.yaml index 6f592c7..34e4db4 100644 --- a/.github/workflows/issue_tagging.yaml +++ b/.github/workflows/issue_tagging.yaml @@ -9,7 +9,6 @@ env: GH_TOKEN: ${{ github.token }} on: - issue_comment: pull_request_target: types: - review_requested @@ -39,7 +38,7 @@ jobs: ) >> $GITHUB_ENV - name: Fail when unable to find a parent issue - if: env.PARENT_ISSUE == '' + if: env.PARENT_ISSUES == '' run: echo "Could not find a parent issue" && exit 1 - name: Get PR states