Skip to content

Commit 0c395d2

Browse files
Phase 1 - Refactor PowerVS Machine Spec (#1035)
* Refactor PVS Specs: change SysType to SystemType Signed-off-by: Prajyot-Parab <[email protected]> * Refactor PVS Specs: change ProcType to ProcessorType Signed-off-by: Prajyot-Parab <[email protected]> * Refactor PVS Specs: change type of Processors field Signed-off-by: Prajyot-Parab <[email protected]> * Refactor PVS Specs: change Memory to MemoryGiB Signed-off-by: Prajyot-Parab <[email protected]> Signed-off-by: Prajyot-Parab <[email protected]>
1 parent 2d37109 commit 0c395d2

20 files changed

+549
-435
lines changed

api/v1beta1/ibmpowervs_conversion.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@ limitations under the License.
1717
package v1beta1
1818

1919
import (
20+
"fmt"
21+
"strconv"
22+
"strings"
23+
24+
apiconversion "k8s.io/apimachinery/pkg/conversion"
25+
"k8s.io/apimachinery/pkg/util/intstr"
26+
2027
"sigs.k8s.io/controller-runtime/pkg/conversion"
2128

2229
infrav1beta2 "sigs.k8s.io/cluster-api-provider-ibmcloud/api/v1beta2"
@@ -141,3 +148,48 @@ func (dst *IBMPowerVSImageList) ConvertFrom(srcRaw conversion.Hub) error {
141148

142149
return Convert_v1beta2_IBMPowerVSImageList_To_v1beta1_IBMPowerVSImageList(src, dst, nil)
143150
}
151+
152+
func Convert_v1beta1_IBMPowerVSMachineSpec_To_v1beta2_IBMPowerVSMachineSpec(in *IBMPowerVSMachineSpec, out *infrav1beta2.IBMPowerVSMachineSpec, s apiconversion.Scope) error {
153+
out.SystemType = in.SysType
154+
out.Processors = intstr.FromString(in.Processors)
155+
156+
memory, err := strconv.ParseFloat(in.Memory, 64)
157+
if err != nil {
158+
return fmt.Errorf("failed to convert memory(%s) to float64", in.Memory)
159+
}
160+
out.MemoryGiB = int32(memory)
161+
162+
switch in.ProcType {
163+
case strings.ToLower(string(infrav1beta2.PowerVSProcessorTypeDedicated)):
164+
out.ProcessorType = infrav1beta2.PowerVSProcessorTypeDedicated
165+
case strings.ToLower(string(infrav1beta2.PowerVSProcessorTypeShared)):
166+
out.ProcessorType = infrav1beta2.PowerVSProcessorTypeShared
167+
case strings.ToLower(string(infrav1beta2.PowerVSProcessorTypeCapped)):
168+
out.ProcessorType = infrav1beta2.PowerVSProcessorTypeCapped
169+
}
170+
171+
return autoConvert_v1beta1_IBMPowerVSMachineSpec_To_v1beta2_IBMPowerVSMachineSpec(in, out, s)
172+
}
173+
174+
func Convert_v1beta2_IBMPowerVSMachineSpec_To_v1beta1_IBMPowerVSMachineSpec(in *infrav1beta2.IBMPowerVSMachineSpec, out *IBMPowerVSMachineSpec, s apiconversion.Scope) error {
175+
out.SysType = in.SystemType
176+
out.Memory = strconv.FormatInt(int64(in.MemoryGiB), 10)
177+
178+
switch in.Processors.Type {
179+
case intstr.Int:
180+
out.Processors = strconv.FormatInt(int64(in.Processors.IntVal), 10)
181+
case intstr.String:
182+
out.Processors = in.Processors.StrVal
183+
}
184+
185+
switch in.ProcessorType {
186+
case infrav1beta2.PowerVSProcessorTypeDedicated:
187+
out.ProcType = strings.ToLower(string(infrav1beta2.PowerVSProcessorTypeDedicated))
188+
case infrav1beta2.PowerVSProcessorTypeShared:
189+
out.ProcType = strings.ToLower(string(infrav1beta2.PowerVSProcessorTypeShared))
190+
case infrav1beta2.PowerVSProcessorTypeCapped:
191+
out.ProcType = strings.ToLower(string(infrav1beta2.PowerVSProcessorTypeCapped))
192+
}
193+
194+
return autoConvert_v1beta2_IBMPowerVSMachineSpec_To_v1beta1_IBMPowerVSMachineSpec(in, out, s)
195+
}

api/v1beta1/zz_generated.conversion.go

Lines changed: 62 additions & 32 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/v1beta2/common.go

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -19,44 +19,25 @@ package v1beta2
1919
import (
2020
"strconv"
2121

22+
"k8s.io/apimachinery/pkg/util/intstr"
2223
"k8s.io/apimachinery/pkg/util/validation/field"
2324
)
2425

2526
func defaultIBMPowerVSMachineSpec(spec *IBMPowerVSMachineSpec) {
26-
if spec.Memory == "" {
27-
spec.Memory = "4"
27+
if spec.MemoryGiB == 0 {
28+
spec.MemoryGiB = 2
2829
}
29-
if spec.Processors == "" {
30-
spec.Processors = "0.25"
30+
if spec.Processors.StrVal == "" && spec.Processors.IntVal == 0 {
31+
spec.Processors = intstr.FromString("0.25")
3132
}
32-
if spec.SysType == "" {
33-
spec.SysType = "s922"
33+
if spec.SystemType == "" {
34+
spec.SystemType = "s922"
3435
}
35-
if spec.ProcType == "" {
36-
spec.ProcType = "shared"
36+
if spec.ProcessorType == "" {
37+
spec.ProcessorType = PowerVSProcessorTypeShared
3738
}
3839
}
3940

40-
func validateIBMPowerVSSysType(spec IBMPowerVSMachineSpec) (bool, IBMPowerVSMachineSpec) {
41-
sysTypes := [...]string{"s922", "e980"}
42-
for _, st := range sysTypes {
43-
if spec.SysType == st {
44-
return true, IBMPowerVSMachineSpec{}
45-
}
46-
}
47-
return false, spec
48-
}
49-
50-
func validateIBMPowerVSProcType(spec IBMPowerVSMachineSpec) (bool, IBMPowerVSMachineSpec) {
51-
procTypes := [...]string{"shared", "dedicated", "capped"}
52-
for _, pt := range procTypes {
53-
if spec.ProcType == pt {
54-
return true, IBMPowerVSMachineSpec{}
55-
}
56-
}
57-
return false, spec
58-
}
59-
6041
func validateIBMPowerVSResourceReference(res IBMPowerVSResourceReference, resType string) (bool, *field.Error) {
6142
if res.ID != nil && res.Name != nil {
6243
return false, field.Invalid(field.NewPath("spec", resType), res, "Only one of "+resType+" - ID or Name may be specified")
@@ -71,17 +52,25 @@ func validateIBMPowerVSNetworkReference(res IBMPowerVSResourceReference) (bool,
7152
return true, nil
7253
}
7354

74-
func validateIBMPowerVSMemoryValues(resValue string) bool {
75-
if val, err := strconv.ParseUint(resValue, 10, 64); err != nil || val < 2 {
55+
func validateIBMPowerVSMemoryValues(resValue int32) bool {
56+
if val := float64(resValue); val < 2 {
7657
return false
7758
}
7859
return true
7960
}
8061

81-
func validateIBMPowerVSProcessorValues(resValue string) bool {
82-
if val, err := strconv.ParseFloat(resValue, 64); err != nil || val < 0.25 {
83-
return false
62+
func validateIBMPowerVSProcessorValues(resValue intstr.IntOrString) bool {
63+
switch resValue.Type {
64+
case intstr.Int:
65+
if val := float64(resValue.IntVal); val < 0.25 {
66+
return false
67+
}
68+
case intstr.String:
69+
if val, err := strconv.ParseFloat(resValue.StrVal, 64); err != nil || val < 0.25 {
70+
return false
71+
}
8472
}
73+
8574
return true
8675
}
8776

0 commit comments

Comments
 (0)