/
arm64.go
85 lines (70 loc) · 2.16 KB
/
arm64.go
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
package resources
import (
// import embed
_ "embed"
"fmt"
"sort"
"github.com/pulumi/pulumi-libvirt/sdk/go/libvirt"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
//go:embed arm64/domain.xsl
var arm64DomainXLS string
type ARM64ResourceCollection struct {
recipe string
}
func NewARM64ResourceCollection(recipe string) *ARM64ResourceCollection {
return &ARM64ResourceCollection{
recipe: recipe,
}
}
func (a *ARM64ResourceCollection) GetDomainXLS(args map[string]pulumi.StringInput) pulumi.StringOutput {
return formatResourceXML(arm64DomainXLS, args)
}
func (a *ARM64ResourceCollection) GetVolumeXML(args *RecipeLibvirtVolumeArgs) pulumi.StringOutput {
return GetDefaultVolumeXML(args, a.recipe)
}
func (a *ARM64ResourceCollection) GetPoolXML(args map[string]pulumi.StringInput) pulumi.StringOutput {
return GetDefaultPoolXML(args, a.recipe)
}
func (a *ARM64ResourceCollection) GetLibvirtDomainArgs(args *RecipeLibvirtDomainArgs) (*libvirt.DomainArgs, error) {
var cmdlines []map[string]interface{}
for cmd, val := range args.ExtraKernelParams {
cmdlines = append(cmdlines, map[string]interface{}{cmd: pulumi.String(val)})
}
cmdlines = append(cmdlines, kernelCmdlines...)
var disks libvirt.DomainDiskArray
sort.Slice(args.Disks, func(i, j int) bool {
return args.Disks[i].Target < args.Disks[j].Target
})
for _, disk := range args.Disks {
disks = append(disks, libvirt.DomainDiskArgs{
VolumeId: disk.VolumeID,
})
}
console, err := setupConsole(args.ConsoleType, args.DomainName)
if err != nil {
return nil, fmt.Errorf("failed to setup console for domain %s: %v", args.DomainName, err)
}
domainArgs := libvirt.DomainArgs{
Name: pulumi.String(args.DomainName),
Consoles: libvirt.DomainConsoleArray{
console,
},
Disks: disks,
Machine: pulumi.String("virt"),
Kernel: pulumi.String(args.KernelPath),
Cmdlines: pulumi.ToMapArray(cmdlines),
Memory: pulumi.Int(args.Memory),
Vcpu: pulumi.Int(args.Vcpu),
Xml: libvirt.DomainXmlArgs{
Xslt: args.Xls,
},
}
if args.Machine != "" {
domainArgs.Machine = pulumi.String(args.Machine)
}
if args.Type != "" {
domainArgs.Type = pulumi.String(args.Type)
}
return &domainArgs, nil
}