Merge pull request #17156 from SimonRichardson/generate-triggers #1036
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
name: "Migrate" | |
on: | |
push: | |
branches: [2.*, 3.*, 4.*, 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: migrate from ${{ matrix.channel }} client | |
timeout-minutes: 30 | |
runs-on: [self-hosted, linux, arm64, aws, xlarge] | |
if: github.event.pull_request.draft == false | |
strategy: | |
fail-fast: false | |
matrix: | |
# TODO: add microk8s tests | |
cloud: ["lxd"] | |
channel: ["local", "3.5/stable"] | |
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@4e959f8e0d9c5feb27d44c5e4d9a330a782edee0 | |
- name: Wait for LXD | |
if: matrix.cloud == 'lxd' | |
run: | | |
while ! ip link show lxdbr0; do | |
echo "Waiting for lxdbr0..." | |
sleep 10 | |
done | |
- name: Build local juju client | |
run: | | |
make juju jujud jujud-controller &>/dev/null | |
- name: Install Juju ${{ matrix.channel }} | |
if: ${{ matrix.channel != 'local' }} | |
run: | | |
mkdir -p ~/.local/share/juju | |
sudo snap install juju --channel ${{ matrix.channel }} | |
- name: Bootstrap a ${{ matrix.channel }} source controller and model | |
if: ${{ matrix.channel != 'local' }} | |
run: | | |
/snap/bin/juju version | |
/snap/bin/juju bootstrap lxd source-controller --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 | |
- name: Bootstrap a ${{ matrix.channel }} source controller and model | |
if: matrix.channel == 'local' | |
run: | | |
juju version | |
juju bootstrap lxd source-controller --constraints "arch=$(go env GOARCH)" | |
juju add-model test-migrate | |
juju set-model-constraints arch=$(go env GOARCH) | |
juju deploy ubuntu | |
- name: Bootstrap target controller | |
run: | | |
juju version | |
juju bootstrap lxd target-controller --constraints "arch=$(go env GOARCH)" | |
juju switch controller | |
juju wait-for application controller | |
- name: Migrate model to target controller | |
run: | | |
# Determine which Juju client to use | |
JUJU='juju' | |
if [[ ${{ matrix.channel }} != 'local' ]]; then | |
JUJU='/snap/bin/juju' | |
fi | |
$JUJU switch source-controller | |
# Ensure application is fully deployed | |
# We have to use the old client to speak to the new controller, as | |
# this is blocked otherwise. | |
$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 target-controller | |
- name: Check the migration was successful | |
run: | | |
set -x | |
juju switch target-controller | |
# 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 -m target-controller:test-migrate || true | |
sleep 5 | |
attempt=$((attempt+1)) | |
if [ "$attempt" -eq 10 ]; then | |
echo "Migration timed out" | |
echo "-------------------" | |
echo " - Migration source controller logs" | |
juju switch source-controller | |
juju debug-log -m controller || true | |
echo " - Migration target controller logs" | |
juju switch target-controller | |
juju debug-log -m controller || true | |
exit 1 | |
fi | |
done | |
juju status -m target-controller:test-migrate | |
juju switch test-migrate | |
juju wait-for application ubuntu | |
juju deploy ubuntu yet-another-ubuntu | |
juju wait-for application yet-another-ubuntu |