system-config/playbooks/zuul/upgrade-review.yaml
Clark Boylan ca97f1e0d6 Add gerrit 3.8 to 3.9 upgrade testing
The Gerrit 3.9 release notes [0] indicate this is a very similar upgrade
to the previous 3.7 to 3.8 upgrade. Specifically we only need to run
init and online reindexing will occur on startup of the new version.
For this reason not much changes other than version numbers.

[0] https://www.gerritcodereview.com/3.9.html

Change-Id: I11f7b3d5e0c545d9b78fb656ea1f09fe57b5994e
2023-12-01 14:01:40 -08:00

144 lines
4.8 KiB
YAML

# Note this playbook is in the zuul/ dir because it is very test specific
# currently. We could potentially rewrite things so that this can be used
# in production but it isn't currently ready for that.
#
# In particular it bootstraps users and test changes assuming a test env.
- name: Ensure initial gerrit state without starting Gerrit
import_playbook: ../service-review.yaml
vars:
gerrit_container_image: docker.io/opendevorg/gerrit:3.8
gerrit_run_init: false
gerrit_run_reindex: false
gerrit_run_compose_up: false
- hosts: "review:!disabled"
name: "Record pre Gerrit deployment configuration state"
tasks:
# This allows us to check that our config file isn't modified by newer
# Gerrit versions.
- name: Backup config files pre deploy
block:
- name: Find .config files
find:
paths: /home/gerrit2/review_site/etc
patterns: '*.config'
register: _config_files_pre_deploy
- name: 'Backup config file'
copy:
src: '{{ item }}'
dest: '{{ item }}.pre-deploy'
remote_src: true
loop: "{{ _config_files_pre_deploy.files | map(attribute='path') | list }}"
- name: Start Gerrit on the old version of Gerrit
import_playbook: ../service-review.yaml
vars:
gerrit_container_image: docker.io/opendevorg/gerrit:3.8
- hosts: "review:!disabled"
name: "Wait for gerrit to be up and running"
tasks:
- name: Pause for a few seconds to give gerrit time to start
wait_for:
timeout: 30
- name: Bootstrap gerrit to be semi useable
# This is necessary to perform actions on the old side pre upgrade
import_playbook: ./bootstrap-test-review.yaml
- hosts: "review:!disabled"
name: "Prepare Gerrit for Upgrade"
tasks:
- name: Stop gerrit before we upgrade
shell:
cmd: docker-compose down
chdir: /etc/gerrit-compose/
# This allows us to check that our config file isn't modified by newer
# Gerrit versions.
- name: Backup config files pre upgrade
block:
- name: Find .config files
find:
paths: /home/gerrit2/review_site/etc
patterns: '*.config'
register: _config_files_pre_upgrade
- name: 'Backup config file'
copy:
src: '{{ item }}'
dest: '{{ item }}.pre-upgrade'
remote_src: true
loop: "{{ _config_files_pre_upgrade.files | map(attribute='path') | list }}"
# Record h2 cache files. We will use this to highlight any new caches
# under the new Gerrit version.
- name: Record Gerrit old cache files
find:
paths: /home/gerrit2/review_site/cache
patterns: '*.h2.db'
register: _old_cache_files
- name: Perform gerrit upgrade
import_playbook: ../service-review.yaml
vars:
gerrit_container_image: docker.io/opendevorg/gerrit:3.9
gerrit_run_init: true
# Gerrit 3.8 -> 3.9 upgrade does not require an offline reindex
gerrit_run_reindex: false
- hosts: "review:!disabled"
name: "Post upgrade config check"
tasks:
- name: Diff config files pre deploy to pre upgrade
shell: |
set -o pipefail
diff -u {{ item }}.pre-deploy {{ item }}.pre-upgrade | tee {{ item }}.deploy.diff
args:
executable: /bin/bash
loop: "{{ _config_files_pre_upgrade.files | map(attribute='path') | list }}"
register: _diff_output_deploy
- name: Diff config files pre upgrade to post upgrade
shell: |
set -o pipefail
diff -u {{ item }}.pre-upgrade {{ item }} | tee {{ item }}.upgrade.diff
args:
executable: /bin/bash
loop: "{{ _config_files_pre_upgrade.files | map(attribute='path') | list }}"
register: _diff_output_upgrade
- name: Check the config diffs after deployment
fail:
msg: 'Difference detected in file {{ item.item }} '
when: item.rc != 0
loop: '{{ _diff_output_deploy.results }}'
- name: Check the config diffs after upgrade
fail:
msg: 'Difference detected in file {{ item.item }} '
when: item.rc != 0
loop: '{{ _diff_output_upgrade.results }}'
- name: Record Gerrit new cache files
find:
paths: /home/gerrit2/review_site/cache
patterns: '*.h2.db'
register: _new_cache_files
- name: Manipulate find data for caches
set_fact:
_old_cache_paths: "{{ _old_cache_files.files | map(attribute='path') | list }}"
_new_cache_paths: "{{ _new_cache_files.files | map(attribute='path') | list }}"
- name: Find delta between cache listings
set_fact:
_gerrit_cache_difference: "{{ _old_cache_paths | symmetric_difference(_new_cache_paths) }}"
- name: Check for new cache files
debug:
msg: "The new Gerrit version produces new on disk caches: {{ _gerrit_cache_difference }}"
when: _gerrit_cache_difference | length > 0