-
Notifications
You must be signed in to change notification settings - Fork 55
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
First iteration of backup restore, covering use case of restoring degraded PE instance. Migration functionality to be introduced in further release. --------- Co-authored-by: Neil Anderson <neil.anderson@puppet.com> Co-authored-by: Neil Anderson <ragingra@users.noreply.github.com> Co-authored-by: JHunniford <97452751+J-Hunniford@users.noreply.github.com> Co-authored-by: Dimitri Tischenko <dimitri.tischenko@perforce.com> Co-authored-by: Ben Ford <ben.ford@puppetlabs.com>
- Loading branch information
1 parent
d1edf04
commit 9cb918e
Showing
31 changed files
with
1,920 additions
and
75 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,241 @@ | ||
--- | ||
name: "Backup and restore test" | ||
|
||
on: | ||
workflow_dispatch: | ||
inputs: | ||
image: | ||
description: "GCP image for test cluster" | ||
required: true | ||
default: "almalinux-cloud/almalinux-8" | ||
architecture: | ||
description: "PE architecture to test" | ||
required: true | ||
default: "standard" | ||
version: | ||
description: "PE version to install" | ||
required: true | ||
default: "2021.7.4" | ||
ssh-debugging: | ||
description: "Boolean; whether or not to pause for ssh debugging" | ||
required: true | ||
default: "false" | ||
|
||
jobs: | ||
backup: | ||
name: "Backup: Cluster A: PE ${{ inputs.version }} ${{ inputs.architecture }} on ${{ inputs.image }}" | ||
runs-on: ubuntu-20.04 | ||
env: | ||
BOLT_GEM: true | ||
BOLT_DISABLE_ANALYTICS: true | ||
LANG: "en_US.UTF-8" | ||
|
||
steps: | ||
- name: "Start SSH session" | ||
if: ${{ github.event.inputs.ssh-debugging == 'true' }} | ||
uses: luchihoratiu/debug-via-ssh@main | ||
with: | ||
NGROK_AUTH_TOKEN: ${{ secrets.NGROK_AUTH_TOKEN }} | ||
SSH_PASS: ${{ secrets.SSH_PASS }} | ||
|
||
- name: "Checkout Source" | ||
uses: actions/checkout@v2 | ||
|
||
- name: "Activate Ruby 2.7" | ||
uses: ruby/setup-ruby@v1 | ||
with: | ||
ruby-version: "2.7" | ||
bundler-cache: true | ||
|
||
- name: "Print bundle environment" | ||
if: ${{ github.repository_owner == 'puppetlabs' }} | ||
run: | | ||
echo ::group::info:bundler | ||
bundle env | ||
echo ::endgroup:: | ||
- name: "Provision test cluster" | ||
timeout-minutes: 15 | ||
run: | | ||
echo ::group::prepare | ||
mkdir -p $HOME/.ssh | ||
echo 'Host *' > $HOME/.ssh/config | ||
echo ' ServerAliveInterval 150' >> $HOME/.ssh/config | ||
echo ' ServerAliveCountMax 2' >> $HOME/.ssh/config | ||
bundle exec rake spec_prep | ||
echo ::endgroup:: | ||
echo ::group::provision | ||
bundle exec bolt plan run peadm_spec::provision_test_cluster \ | ||
--modulepath spec/fixtures/modules \ | ||
provider=provision_service \ | ||
image=${{ inputs.image }} \ | ||
architecture=${{ inputs.architecture }} | ||
echo ::endgroup:: | ||
echo ::group::info:request | ||
cat request.json || true; echo | ||
echo ::endgroup:: | ||
echo ::group::info:inventory | ||
sed -e 's/password: .*/password: "[redacted]"/' < spec/fixtures/litmus_inventory.yaml || true | ||
echo ::endgroup:: | ||
# - name: Save inventory file A to an artifact | ||
# uses: actions/upload-artifact@v3 | ||
# with: | ||
# name: inventory_A | ||
# path: spec/fixtures/litmus_inventory.yaml | ||
|
||
- name: "Install PE on test cluster" | ||
timeout-minutes: 120 | ||
run: | | ||
bundle exec bolt plan run peadm_spec::install_test_cluster \ | ||
--inventoryfile spec/fixtures/litmus_inventory.yaml \ | ||
--modulepath spec/fixtures/modules \ | ||
architecture=${{ inputs.architecture }} \ | ||
version=${{ inputs.version }} | ||
- name: "Start SSH session" | ||
if: github.event.inputs.ssh-debugging == 'true' | ||
uses: luchihoratiu/debug-via-ssh@main | ||
with: | ||
NGROK_AUTH_TOKEN: ${{ secrets.NGROK_AUTH_TOKEN }} | ||
SSH_PASS: ${{ secrets.SSH_PASS }} | ||
|
||
# - name: Download artifacts | ||
# # if: always() | ||
# uses: actions/download-artifact@v3 | ||
# with: | ||
# path: spec/fixtures/ | ||
|
||
- name: perform PE backup of cluster A | ||
timeout-minutes: 10 | ||
continue-on-error: true | ||
run: | | ||
echo ::group::prepare | ||
mkdir -p $HOME/.ssh | ||
echo 'Host *' > $HOME/.ssh/config | ||
echo ' ServerAliveInterval 150' >> $HOME/.ssh/config | ||
echo ' ServerAliveCountMax 2' >> $HOME/.ssh/config | ||
bundle exec rake spec_prep | ||
echo ::endgroup:: | ||
echo ::group::backup | ||
bundle exec bolt plan run peadm_spec::test_backup \ | ||
--inventoryfile spec/fixtures/litmus_inventory.yaml \ | ||
--modulepath spec/fixtures/modules | ||
echo ::endgroup:: | ||
- name: "Wait as long as the file ${HOME}/pause file is present" | ||
continue-on-error: true | ||
# if: ${{ always() && github.event.inputs.ssh-debugging == 'true' }} | ||
if: github.event.inputs.ssh-debugging == 'true' | ||
run: | | ||
while [ -f "${HOME}/pause" ] ; do | ||
echo "${HOME}/pause present, sleeping for 60 seconds..." | ||
sleep 10 | ||
done | ||
echo "${HOME}/pause absent, continuing workflow." | ||
- name: "Tear down cluster A" | ||
if: always() | ||
run: | | ||
if [ -f spec/fixtures/litmus_inventory.yaml ]; then | ||
echo ::group::tear_down | ||
bundle exec rake 'litmus:tear_down' | ||
echo ::endgroup:: | ||
echo ::group::info:request | ||
cat request.json || true; echo | ||
echo ::endgroup:: | ||
fi | ||
restore: | ||
name: "Restore: Cluster B: PE ${{ inputs.version }} ${{ inputs.architecture }} on ${{ inputs.image }}" | ||
runs-on: ubuntu-20.04 | ||
env: | ||
BOLT_GEM: true | ||
BOLT_DISABLE_ANALYTICS: true | ||
LANG: "en_US.UTF-8" | ||
|
||
steps: | ||
- name: "Checkout Source" | ||
uses: actions/checkout@v2 | ||
|
||
- name: "Activate Ruby 2.7" | ||
uses: ruby/setup-ruby@v1 | ||
with: | ||
ruby-version: "2.7" | ||
bundler-cache: true | ||
|
||
- name: "Print bundle environment" | ||
if: ${{ github.repository_owner == 'puppetlabs' }} | ||
run: | | ||
echo ::group::info:bundler | ||
bundle env | ||
echo ::endgroup:: | ||
- name: "Provision test cluster" | ||
timeout-minutes: 15 | ||
run: | | ||
echo ::group::prepare | ||
mkdir -p $HOME/.ssh | ||
echo 'Host *' > $HOME/.ssh/config | ||
echo ' ServerAliveInterval 150' >> $HOME/.ssh/config | ||
echo ' ServerAliveCountMax 2' >> $HOME/.ssh/config | ||
bundle exec rake spec_prep | ||
echo ::endgroup:: | ||
echo ::group::provision | ||
bundle exec bolt plan run peadm_spec::provision_test_cluster \ | ||
--modulepath spec/fixtures/modules \ | ||
provider=provision_service \ | ||
image=${{ inputs.image }} \ | ||
architecture=${{ inputs.architecture }} | ||
echo ::endgroup:: | ||
echo ::group::info:request | ||
cat request.json || true; echo | ||
echo ::endgroup:: | ||
echo ::group::info:inventory | ||
sed -e 's/password: .*/password: "[redacted]"/' < spec/fixtures/litmus_inventory.yaml || true | ||
echo ::endgroup:: | ||
# - name: Save inventory file B to an artifact | ||
# uses: actions/upload-artifact@v3 | ||
# with: | ||
# name: inventory_B | ||
# path: spec/fixtures/litmus_inventory.yaml | ||
|
||
- name: "Install PE on test cluster" | ||
timeout-minutes: 120 | ||
run: | | ||
bundle exec bolt plan run peadm_spec::install_test_cluster \ | ||
--inventoryfile spec/fixtures/litmus_inventory.yaml \ | ||
--modulepath spec/fixtures/modules \ | ||
architecture=${{ inputs.architecture }} \ | ||
version=${{ inputs.version }} | ||
- name: Wait for backup to finish | ||
uses: lewagon/wait-on-check-action@v1.3.1 | ||
with: | ||
ref: ${{ github.ref }} | ||
check-name: "Backup: Cluster A: PE ${{ inputs.version }} ${{ inputs.architecture }} on ${{ inputs.image }}" | ||
repo-token: ${{ secrets.GITHUB_TOKEN }} | ||
wait-interval: 10 | ||
|
||
- name: "Tear down cluster B" | ||
if: always() | ||
run: | | ||
cp spec/fixtures/inventory_B/litmus_inventory.yaml spec/fixtures/litmus_inventory.yaml || true | ||
if [ -f spec/fixtures/litmus_inventory.yaml ]; then | ||
echo ::group::tear_down | ||
bundle exec rake 'litmus:tear_down' | ||
echo ::endgroup:: | ||
echo ::group::info:request | ||
cat request.json || true; echo | ||
echo ::endgroup:: | ||
fi |
Oops, something went wrong.