Skip to content
Snippets Groups Projects
Commit 1a46a935 authored by Lars Seipel's avatar Lars Seipel
Browse files

runner/libvirt: correctly handle os=none nodes

parent 34bab66c
No related branches found
No related tags found
No related merge requests found
...@@ -391,17 +391,21 @@ func (r *Runner) downloadBaseImages(ctx context.Context, t *topology.T) (err err ...@@ -391,17 +391,21 @@ func (r *Runner) downloadBaseImages(ctx context.Context, t *topology.T) (err err
wantImages := make(map[string]struct{}) wantImages := make(map[string]struct{})
haveImages := make(map[string]*libvirt.StorageVol) haveImages := make(map[string]*libvirt.StorageVol)
for _, d := range r.devices { for _, d := range r.devices {
u, err := url.Parse(d.topoDev.OSImage()) osImage := d.topoDev.OSImage()
if osImage == "" {
continue
}
u, err := url.Parse(osImage)
if err != nil { if err != nil {
return err return err
} }
vol, err := pool.LookupStorageVolByName(path.Base(u.Path)) vol, err := pool.LookupStorageVolByName(path.Base(u.Path))
if err == nil { if err == nil {
// skip over already present volumes // skip over already present volumes
haveImages[d.topoDev.OSImage()] = vol haveImages[osImage] = vol
continue continue
} }
wantImages[d.topoDev.OSImage()] = struct{}{} wantImages[osImage] = struct{}{}
} }
type result struct { type result struct {
...@@ -473,27 +477,30 @@ func (r *Runner) createVolumes(ctx context.Context, t *topology.T) (err error) { ...@@ -473,27 +477,30 @@ func (r *Runner) createVolumes(ctx context.Context, t *topology.T) (err error) {
for _, d := range r.devices { for _, d := range r.devices {
var backing *libvirtxml.StorageVolumeBackingStore var backing *libvirtxml.StorageVolumeBackingStore
var baseInfo *libvirt.StorageVolInfo var capacity int64
if osImage := d.topoDev.OSImage(); osImage != "none" { if osImage := d.topoDev.OSImage(); osImage != "" {
base := r.baseImages[osImage] base := r.baseImages[osImage]
if base == nil { if base == nil {
// we should've failed earlier already // we should've failed earlier already
panic("unexpected missing base image: " + panic("unexpected missing base image: " +
osImage) osImage)
} }
baseInfo, err = base.GetInfo() baseInfo, err := base.GetInfo()
if err != nil { if err != nil {
return fmt.Errorf("get-info: %w (bvol: %s)", return fmt.Errorf("get-info: %w (bvol: %s)",
err, osImage) err, osImage)
} }
capacity = int64(baseInfo.Capacity)
backing, err = newBackingStoreFromVol(base) backing, err = newBackingStoreFromVol(base)
if err != nil { if err != nil {
return err return err
} }
} else {
capacity = d.topoDev.DiskSize()
} }
xmlVol := newVolume(d.name, int64(baseInfo.Capacity)) xmlVol := newVolume(d.name, capacity)
xmlVol.BackingStore = backing xmlVol.BackingStore = backing
xmlStr, err := xmlVol.Marshal() xmlStr, err := xmlVol.Marshal()
if err != nil { if err != nil {
...@@ -607,6 +614,10 @@ func (r *Runner) customizeDomains(ctx context.Context, t *topology.T) (err error ...@@ -607,6 +614,10 @@ func (r *Runner) customizeDomains(ctx context.Context, t *topology.T) (err error
customizeCtx, cancel := context.WithCancel(ctx) customizeCtx, cancel := context.WithCancel(ctx)
defer cancel() defer cancel()
for _, d := range r.devices { for _, d := range r.devices {
if d.topoDev.OSImage() == "" {
// Cannot customize blank disk image.
continue
}
user := "root" user := "root"
if hasCumulusFunction(d) { if hasCumulusFunction(d) {
user = "cumulus" user = "cumulus"
...@@ -675,6 +686,9 @@ func (r *Runner) startDomains(ctx context.Context, t *topology.T) (err error) { ...@@ -675,6 +686,9 @@ func (r *Runner) startDomains(ctx context.Context, t *topology.T) (err error) {
if d.Function() == topology.Fake { if d.Function() == topology.Fake {
continue continue
} }
if d.OSImage() == "" {
continue
}
dom := r.domains[r.namePrefix+d.Name] dom := r.domains[r.namePrefix+d.Name]
if err := dom.Create(); err != nil { if err := dom.Create(); err != nil {
return fmt.Errorf("domain %s: %w", return fmt.Errorf("domain %s: %w",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment