summaryrefslogtreecommitdiff
path: root/importXML.go
blob: 4f798bbea07c717a4d8c2fd9cbc9c84cb66f9851 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// Copyright 2024 WIT.COM Inc Licensed GPL 3.0

package virtigolib

import (
	"errors"
	"fmt"

	pb "go.wit.com/lib/protobuf/virtbuf"
	"go.wit.com/log"
	"libvirt.org/go/libvirtxml"
)

// import a libvirt xml domain
func ImportXML(domcfg *libvirtxml.Domain) (*pb.Droplet, []*pb.Event, error) {
	var alle []*pb.Event
	var d *pb.Droplet
	if domcfg == nil {
		return nil, alle, errors.New("domcfg == nil")
	}

	d = new(pb.Droplet)
	d.Hostname = domcfg.Name
	d.Uuid = domcfg.UUID
	d.StartState = pb.DropletState_OFF
	if d.Current == nil {
		d.Current = new(pb.Current)
	}
	d.Current.State = pb.DropletState_UNKNOWN

	alle, err := updateDroplet(d, domcfg)
	if err != nil {
		log.Info("updateDroplet() failed for", d.Hostname)
		return d, alle, errors.New("update failed for " + domcfg.Name)
	}
	log.Info("added new droplet", domcfg.Name, domcfg.UUID)
	s, err := DumpNonStandardXML(domcfg)
	if err != nil {
		reason := s + "\n"
		reason = fmt.Sprintln("DumpNonStandardXML() on", domcfg.Name, "failed for", err)
		log.Info(reason)
		return d, alle, errors.New(reason)
	}
	return d, alle, nil
}