Skip to content

Commit

Permalink
seed: return snap types as specified by the model for essential snaps
Browse files Browse the repository at this point in the history
this information is available, no reason for code using seed to have
to find it again (typically having to open the snaps)
  • Loading branch information
pedronis committed Feb 25, 2020
1 parent 1a2272d commit 001b5e6
Show file tree
Hide file tree
Showing 6 changed files with 482 additions and 372 deletions.
17 changes: 17 additions & 0 deletions seed/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,3 +100,20 @@ func readInfo(snapPath string, si *snap.SideInfo) (*snap.Info, error) {
}
return snap.ReadInfoFromSnapFile(snapf, si)
}

func snapTypeFromModel(modSnap *asserts.ModelSnap) snap.Type {
switch modSnap.SnapType {
case "base":
return snap.TypeBase
case "core":
return snap.TypeOS
case "gadget":
return snap.TypeGadget
case "kernel":
return snap.TypeKernel
case "snapd":
return snap.TypeSnapd
default:
return snap.TypeApp
}
}
4 changes: 4 additions & 0 deletions seed/seed.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ type Snap struct {

SideInfo *snap.SideInfo

// EssentialType is the type of the snap as specified by the model.
// Provided only for essential snaps (Essential = true).
EssentialType snap.Type

Essential bool
Required bool

Expand Down
17 changes: 11 additions & 6 deletions seed/seed16.go
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ func (s *seed16) LoadMeta(tm timings.Measurer) error {
}

// add the essential snaps
addEssential := func(snapName string, pinnedTrack string) (*Snap, error) {
addEssential := func(snapName string, pinnedTrack string, essType snap.Type) (*Snap, error) {
// be idempotent
if added[snapName] {
return nil, nil
Expand All @@ -211,6 +211,11 @@ func (s *seed16) LoadMeta(tm timings.Measurer) error {
return nil, err
}

if essType == snap.TypeBase && snapName == "core" {
essType = snap.TypeOS
}

seedSnap.EssentialType = essType
seedSnap.Essential = true
seedSnap.Required = true
added[snapName] = true
Expand All @@ -222,25 +227,25 @@ func (s *seed16) LoadMeta(tm timings.Measurer) error {
if len(yamlSnaps) != 0 {
// ensure "snapd" snap is installed first
if model.Base() != "" || classicWithSnapd {
if _, err := addEssential("snapd", ""); err != nil {
if _, err := addEssential("snapd", "", snap.TypeSnapd); err != nil {
return err
}
}
if !classicWithSnapd {
if _, err := addEssential(baseSnap, ""); err != nil {
if _, err := addEssential(baseSnap, "", snap.TypeBase); err != nil {
return err
}
}
}

if kernelName := model.Kernel(); kernelName != "" {
if _, err := addEssential(kernelName, model.KernelTrack()); err != nil {
if _, err := addEssential(kernelName, model.KernelTrack(), snap.TypeKernel); err != nil {
return err
}
}

if gadgetName := model.Gadget(); gadgetName != "" {
gadget, err := addEssential(gadgetName, model.GadgetTrack())
gadget, err := addEssential(gadgetName, model.GadgetTrack(), snap.TypeGadget)
if err != nil {
return err
}
Expand All @@ -260,7 +265,7 @@ func (s *seed16) LoadMeta(tm timings.Measurer) error {
if baseSnap != "" && gadgetBase != baseSnap {
return fmt.Errorf("cannot use gadget snap because its base %q is different from model base %q", gadgetBase, model.Base())
}
if _, err = addEssential(gadgetBase, ""); err != nil {
if _, err = addEssential(gadgetBase, "", snap.TypeBase); err != nil {
return err
}
}
Expand Down
Loading

0 comments on commit 001b5e6

Please sign in to comment.