Skip to content

Merge pull request #16749 from anvial/JUJU-5269-inject-explicitly-use… #967

Merge pull request #16749 from anvial/JUJU-5269-inject-explicitly-use…

Merge pull request #16749 from anvial/JUJU-5269-inject-explicitly-use… #967

Workflow file for this run

name: "Migrate"
on:
push:
branches: [2.9, 3.1, 3.2, 3.3, main]
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
paths:
- '**.go'
- 'go.mod'
- 'snap/**'
- '.github/workflows/migrate.yml'
- 'scripts/dqlite/**'
- 'Makefile'
- 'make_functions.sh'
workflow_dispatch:
permissions:
contents: read
jobs:
migrate:
name: 3.1-to-4.x via ${{ matrix.client }} client
runs-on: [self-hosted, linux, arm64, aws, large]
if: github.event.pull_request.draft == false
strategy:
fail-fast: false
matrix:
# TODO: add microk8s tests
cloud: ["lxd"]
channel: ["3.1/stable"]
client: ['3.1', '4.x']
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: 'go.mod'
cache: true
- name: Set up Go env
run: |
echo "GOPATH=$(go env GOPATH)" >> $GITHUB_ENV
echo "$(go env GOPATH)/bin" >> $GITHUB_PATH
- name: Setup LXD
if: matrix.cloud == 'lxd'
uses: canonical/setup-lxd@v0.1.1
- name: Install Juju 3.1
run: |
sudo snap install juju --channel ${{ matrix.channel }}
mkdir -p ~/.local/share/juju
- name: Bootstrap a 3.1 controller and model
run: |
/snap/bin/juju version
/snap/bin/juju bootstrap lxd test31 --constraints "arch=$(go env GOARCH)"
/snap/bin/juju add-model test-migrate
/snap/bin/juju set-model-constraints arch=$(go env GOARCH)
/snap/bin/juju deploy ubuntu
# TODO: use juju-restore
# TODO: add users/permissions/models and test that those migrate over
- name: Upgrade client to 4.x
run: |
make juju jujud &>/dev/null
- name: Bootstrap 4.x controller
run: |
juju version
juju bootstrap lxd test4x --constraints "arch=$(go env GOARCH)"
juju switch controller
juju wait-for application controller
# TODO: create backup and juju restore
- name: Migrate default model to 4.x controller
run: |
# Determine which Juju client to use
JUJU='juju'
if [[ ${{ matrix.client }} == '3.1' ]]; then
JUJU='/snap/bin/juju'
fi
$JUJU switch test31
# Ensure application is fully deployed
# We have to use the old client to speak to the new controller, as
# this is blocked otherwise.
/snap/bin/juju wait-for application ubuntu
# Wait a few secs for the machine status to update
# so that migration prechecks pass.
sleep 10
$JUJU version
$JUJU migrate test-migrate test4x
- name: Check the migration was successful
run: |
set -x
juju switch test4x
juju status -m test4x/test-migrate
# Wait for 'test-migrate' model to come through
attempt=0
while true; do
RES=$(juju models | grep 'test-migrate' || true)
if [[ -n $RES ]]; then
break
fi
juju status
sleep 5
attempt=$((attempt+1))
if [ "$attempt" -eq 10 ]; then
echo "Migration timed out"
exit 1
fi
done
juju switch test-migrate
juju wait-for application ubuntu
juju deploy ubuntu yet-another-ubuntu
juju wait-for application yet-another-ubuntu