
MAAS 3.5がリリースされました。MAAS 3.5ではpacker-maasでイメージを作って動かすことができるディストリビューションのいくつかを正式にサポートしたのもあって、リリースされたら早速試そうと思っていました。
MAAS | Reference: Release notes MAAS 3.5
リリースノートによると、イメージの保管方法が変わった(データベースからリージョンコントローラーのパスへ)こと、 その変更によるイメージの同期が高速化されたこと、Soft Power Offのサポート、Oracle LinuxのサポートがStableになったこと、Ephemeral OS deploymentsのサポートがされたことが大きなMAAS 3.5のトピックであるようです。
Ephemeral OS deploymentsはOSをデプロイするときに、ストレージかメモリーにOSを書き込んで起動するかを選択できます。 メモリーに書き込んだ場合は再起動すれば変更した内容は消えてしまいますが、コンピュートとして使い、永続化データをネットワークストレージに書き込むなどの特定の用途では使えると思います。

というわけで、いつものようにLinux KVMのVMスナップショットを作成して、アップグレードに挑戦です。 今考えてみればリリースノートを斜め読みせずにきちんとみていれば後であたふたせずに済みました。
アップグレードに挑戦
私はsnapではなく、debパッケージでUbuntu 22.04でMAASサーバーを動かしています。 そのため、次のように実行してアップグレードします。
$ sudo apt-add-repository ppa:maas/3.5 $ sudo apt-get -y update $ sudo apt-get -y dist-upgrade maas $ sudo reboot
完了後は数分待てばいつもはアップグレードが完了するのですが、数分待っても画面がこのような表示のままでした。 3分経っても、5分経っても、6分経っても。。

ブラウザーを変えても、Cookieを削除してもこの状態でした。問題はMAAS側にありそうです。
またMAAS DNSによるホストの名前解決に失敗するようで、ノードにFQDNアドレスを用いてpingを実行しても到達できなくなりました。 これは失敗したということでしょうか?
試しに元のバージョンに戻すと正常に動く
スナップショットから以前の環境に復元すると、アップグレード前のMAAS 3.3.7は問題なく動作します。 MAAS 3.5のIssueがないか確認しましたが、特にそのようなものは見つけられませんでした(この段階でログを見ればよかったなあと今考えればそう思います。焦ってしまってみるのを忘れました)。
MAAS Discourseに書いてみました
掲示板に書いてみました。開発者の一人が反応してくれて、結局は「MAAS 3.5で大きめの仕様変更があって、その部分のマイグレーションに時間がかかるため、通常のMAASのアップグレードよりも時間がかかる」ということでした。手元の環境では15分から20分程度待てば、MAAS Dashboardが表示されました。
新しいMAAS Dashboardは左側にメインメニューが表示され、上部にはサブメニューが表示されるようです。何十年もメニューは上部にあるのが当たり前だったので慣れるまで少し時間がかかりそうですが、階層が深くないような作りになっているので、慣れればこっちの方が使いやすそうです。

対応しているOSは変わったのか?
以前、AlmaLinuxを動かすために、distro.pyにパッチを当てていました。
MAAS 3.5アップグレード後はこのファイルが更新されて、AlmaLinuxはパッチ適用せずに使えるようになったようです。 ちなみにolはOracle Linuxの略です。packer-maasリポジトリーのREADMEは更新されていませんが、Oracle LinuxはMAAS 3.5でStable 扱いになったようです。
実際のファイルをちょっと覗いてみると、almalinuxやolが見つかります。CentOS Streamはcentosとにして認識されますので、引き続きパッチ適用せずに使えます。Rocky Linuxも以前のバージョンから問題なく使えています。
$ less /usr/lib/python3/dist-packages/curtin/distro.py
...
from .log import LOG
DistroInfo = namedtuple('DistroInfo', ('variant', 'family'))
DISTRO_NAMES = ['arch', 'centos', 'debian', 'fedora', 'freebsd', 'gentoo',
'ol', 'opensuse', 'redhat', 'rhel', 'sles', 'suse', 'ubuntu',
'rocky', 'almalinux']
...
DISTROS = distro_enum(*DISTRO_NAMES)
OS_FAMILIES = {
DISTROS.debian: [DISTROS.debian, DISTROS.ubuntu],
DISTROS.redhat: [DISTROS.centos, DISTROS.fedora, DISTROS.ol,
DISTROS.redhat, DISTROS.rhel, DISTROS.rocky,
DISTROS.almalinux],
DISTROS.gentoo: [DISTROS.gentoo],
DISTROS.freebsd: [DISTROS.freebsd],
DISTROS.suse: [DISTROS.opensuse, DISTROS.sles, DISTROS.suse],
DISTROS.arch: [DISTROS.arch],
}