snap_preseed: support channel specification with snap name

snap_name[/classic]=track/risk/branch is now the supported snap name
specification, which allows to specify the full default track and
optional classic confinemnt.

Supporting such specification in the seedtext allows one to specify a
better default channel. For example, this will allow lxd to switch
from latest/stable/ubuntu-20.04 to 4.0/stable/ubuntu-20.04 as 4.0 is
the LTS track matching 20.04 support timeframe.

LP: #1882374

(cherry picked from commit 7bae9201d2)
(cherry picked from commit 2976a99f29)
(cherry picked from commit d542e8e4a0)
uc20-no-fixed-size
Dimitri John Ledkov 5 years ago
parent e39a40e2a5
commit 896b5962db
No known key found for this signature in database
GPG Key ID: 9B8EC849D5EF70ED

@ -626,11 +626,31 @@ snap_prepare() {
snap_preseed() { snap_preseed() {
# Preseed a snap in the image (snap_prepare must be called once prior) # Preseed a snap in the image (snap_prepare must be called once prior)
local CHROOT_ROOT=$1 local CHROOT_ROOT=$1
# $2 can be in the form of snap_name/classic=track/risk/branch
local SNAP=$2 local SNAP=$2
# strip CHANNEL specification
SNAP=${SNAP%=*}
# strip /classic confinement
local SNAP_NAME=${SNAP%/*} local SNAP_NAME=${SNAP%/*}
# Per Ubuntu policy, all seeded snaps (with the exception of the core # Seed from the specified channel (e.g. core18 latest/stable)
# snap) must pull from stable/ubuntu-$(release_ver) as their channel. # Or Channel endcoded in the snap name (e.g. lxd=4.0/stable/ubuntu-20.04)
local CHANNEL=${3:-"stable/ubuntu-$(release_ver)"} # Or Ubuntu policy default channel latest/stable/ubuntu-$(release_ver)
local CHANNEL=${3:-}
if [ -z "$CHANNEL" ]; then
case $2 in
*=*)
CHANNEL=${2#*=}
;;
*)
CHANNEL="stable/ubuntu-$(release_ver)"
;;
esac
fi
# At this point:
# SNAP_NAME is just the snap name
# SNAP is either $SNAP_NAME or $SNAP_NAME/classic for classic confined
# CHANNEL is the channel
if [ ! -e "$CHROOT_ROOT/var/lib/snapd/seed/assertions/model" ]; then if [ ! -e "$CHROOT_ROOT/var/lib/snapd/seed/assertions/model" ]; then
echo "ERROR: Snap model assertion not present, snap_prepare must be called" echo "ERROR: Snap model assertion not present, snap_prepare must be called"

Loading…
Cancel
Save