/
cloudstack.go
85 lines (77 loc) 路 2.17 KB
/
cloudstack.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 cluster
import anywherev1 "github.com/aws/eks-anywhere/pkg/api/v1alpha1"
func cloudstackEntry() *ConfigManagerEntry {
return &ConfigManagerEntry{
APIObjectMapping: map[string]APIObjectGenerator{
anywherev1.CloudStackDatacenterKind: func() APIObject {
return &anywherev1.CloudStackDatacenterConfig{}
},
anywherev1.CloudStackMachineConfigKind: func() APIObject {
return &anywherev1.CloudStackMachineConfig{}
},
},
Processors: []ParsedProcessor{
processCloudStackDatacenter,
machineConfigsProcessor(processCloudStackMachineConfig),
},
Defaulters: []Defaulter{
func(c *Config) error {
return nil
},
},
Validations: []Validation{
func(c *Config) error {
if c.CloudStackDatacenter != nil {
return c.CloudStackDatacenter.Validate()
}
return nil
},
func(c *Config) error {
for _, m := range c.CloudStackMachineConfigs {
if err := m.Validate(); err != nil {
return err
}
}
return nil
},
func(c *Config) error {
if c.CloudStackDatacenter != nil {
if err := validateSameNamespace(c, c.CloudStackDatacenter); err != nil {
return err
}
}
return nil
},
func(c *Config) error {
for _, v := range c.CloudStackMachineConfigs {
if err := validateSameNamespace(c, v); err != nil {
return err
}
}
return nil
},
},
}
}
func processCloudStackDatacenter(c *Config, objects ObjectLookup) {
if c.Cluster.Spec.DatacenterRef.Kind == anywherev1.CloudStackDatacenterKind {
datacenter := objects.GetFromRef(c.Cluster.APIVersion, c.Cluster.Spec.DatacenterRef)
c.CloudStackDatacenter = datacenter.(*anywherev1.CloudStackDatacenterConfig)
}
}
func processCloudStackMachineConfig(c *Config, objects ObjectLookup, machineRef *anywherev1.Ref) {
if machineRef == nil {
return
}
if machineRef.Kind != anywherev1.CloudStackMachineConfigKind {
return
}
if c.CloudStackMachineConfigs == nil {
c.CloudStackMachineConfigs = map[string]*anywherev1.CloudStackMachineConfig{}
}
m := objects.GetFromRef(c.Cluster.APIVersion, *machineRef)
if m == nil {
return
}
c.CloudStackMachineConfigs[m.GetName()] = m.(*anywherev1.CloudStackMachineConfig)
}