summaryrefslogtreecommitdiff
path: root/xml.go
blob: dbfd17d8cd9e2933b2795df816905ce989a175da (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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// Copyright 2024 WIT.COM Inc Licensed GPL 3.0

package main

import (
	"fmt"
	"os"

	"go.wit.com/log"
	"libvirt.org/go/libvirtxml"
)

func makeStandardXml(d *DropletT) {
	log.Info("create new xml file for:", d.Hostname)
	domcfg := &libvirtxml.Domain{}

	addDefaults(domcfg, "standard.x86")
	addDefaults(domcfg, "memory")
	addDefaults(domcfg, "network")
	addDefaults(domcfg, "spice")
	addDefaults(domcfg, "qcow")
	addDefaults(domcfg, d.Hostname)

	fmt.Printf("Virt type %s\n", domcfg.Type)
	fmt.Printf("Virt name %s\n", domcfg.Name)
	fmt.Printf("Virt UUID %s\n", domcfg.UUID)
	fmt.Printf("Virt Memory %s\n", domcfg.Memory)
	// domcfg.Memory = 3333
	fmt.Printf("Virt Devices %s\n", domcfg.Devices.Disks)
	// log.Spew(domcfg.Devices)
	// fmt.Printf("Virt Devices %s\n", domcfg.DiskDriver)
	log.Info("DISKS")
	log.Info("DISKS")
	log.Info("")
	// structure DomainDeviceList shows what can be done as a range
	for i, x := range domcfg.Devices.Disks {
		// Create a new DomainDiskSourceFile struct
		newSource := &libvirtxml.DomainDiskSourceFile{
			File: "mynew.qcow2", // Set the file name here
		}

		// Assign it to the disk's source
		domcfg.Devices.Disks[i].Source.File = newSource

		// fmt.Printf("Disk Source %s\n", name)
		fmt.Printf("Disk Device %s\n", x.Source.File)
	}

	xmldoc, err := domcfg.Marshal()

	if err != nil {
		fmt.Println("can't make xml file error:\n", err)
		return
	}

	// fmt.Printf("Virt type %s\n", xmldoc)

	outfile := "/tmp/" + d.Hostname + ".xml"
	regfile, _ := os.OpenFile(outfile, os.O_RDWR|os.O_CREATE, 0666)
	fmt.Fprintln(regfile, xmldoc)

	log.Info("File is in", outfile)
}

func addDefaults(d *libvirtxml.Domain, filename string) {
	fullname := "resources/xml/" + filename + ".xml"
	pfile, err := resources.ReadFile(fullname)
	if err != nil {
		log.Println("ERROR:", err)
		return
	}

	err = d.Unmarshal(string(pfile))
	if err != nil {
		log.Info("Marshal failed on file", filename)
		return
	}
}

func simpleDisk(domcfg *libvirtxml.Domain, filename string) {
	// Clear out the existing disks (if any)
	domcfg.Devices.Disks = nil

	// Define a new disk with "mynew.qcow2"
	newDisk := libvirtxml.DomainDisk{
		Device: "disk",
		Driver: &libvirtxml.DomainDiskDriver{
			Name: "qemu",
			Type: "qcow2",
		},
		Source: &libvirtxml.DomainDiskSource{
			File: &libvirtxml.DomainDiskSourceFile{
				File: filename,
			},
		},
		Target: &libvirtxml.DomainDiskTarget{
			Dev: "vda",
			Bus: "virtio",
		},
	}

	// Add the new disk to the domain configuration
	domcfg.Devices.Disks = append(domcfg.Devices.Disks, newDisk)
}