Skip to content

Commit 37d62ef

Browse files
remove serverRefList
1 parent 9236152 commit 37d62ef

File tree

2 files changed

+57
-283
lines changed

2 files changed

+57
-283
lines changed

internal/webhook/v1alpha1/bmcsettings_webhook.go

Lines changed: 14 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -54,61 +54,21 @@ func (v *BMCSettingsCustomValidator) ValidateCreate(ctx context.Context, obj run
5454
}
5555
bmcsettingslog.Info("Validation for BMCSettings upon creation", "name", bmcSettings.GetName())
5656

57-
if bmcSettings.Spec.BMCRef == nil && bmcSettings.Spec.ServerRefList == nil {
58-
return nil, apierrors.NewInvalid(
59-
schema.GroupKind{Group: bmcSettings.GroupVersionKind().Group, Kind: bmcSettings.Kind},
60-
bmcSettings.GetName(), field.ErrorList{field.Required(field.NewPath("spec"), "Spec.BMCRef or Spec.ServerRefList is required")})
61-
}
62-
6357
bmcSettingsList := &metalv1alpha1.BMCSettingsList{}
6458
if err := v.Client.List(ctx, bmcSettingsList); err != nil {
6559
return nil, fmt.Errorf("failed to list bmcSettingsList: %w", err)
6660
}
6761

68-
// this make one API call rather than multiple when trying to find duplicates
69-
serversList := &metalv1alpha1.ServerList{}
70-
if err := v.Client.List(ctx, serversList); err != nil {
71-
return nil, fmt.Errorf("failed to list serversList: %w", err)
72-
}
73-
serversMap := make(map[string]*metalv1alpha1.Server, len(serversList.Items))
74-
for _, server := range serversList.Items {
75-
serversMap[server.Name] = &server
76-
}
77-
78-
var bmcSettingsBMCName string
79-
var path string
80-
var bsBMCName string
81-
var err error
82-
// get the intended BMC
83-
if bmcSettings.Spec.BMCRef != nil {
84-
bmcSettingsBMCName = bmcSettings.Spec.BMCRef.Name
85-
path = "Spec.BMCRef"
86-
} else {
87-
bmcSettingsBMCName, err = getBMCNameFromServerRef(serversMap, bmcSettings)
88-
if err != nil {
89-
return nil, err
90-
}
91-
path = "Spec.ServerRefList"
92-
}
93-
94-
bmcsettingslog.Info("TEMP:bmcSettings", "bmcSettings name", bmcSettings.Name, "bmcSettings BMCRef", bmcSettings.Spec.BMCRef, "bmcSettings ServerList", bmcSettings.Spec.ServerRefList)
95-
9662
for _, bs := range bmcSettingsList.Items {
97-
bmcsettingslog.Info("TEMP:bs ", "bs name", bs.Name, "bs BMCRef", bs.Spec.BMCRef, "bs ServerList", bs.Spec.ServerRefList)
98-
if bs.Spec.BMCRef != nil {
99-
bsBMCName = bs.Spec.BMCRef.Name
100-
} else {
101-
bsBMCName, err = getBMCNameFromServerRef(serversMap, &bs)
102-
if err != nil {
103-
bmcsettingslog.Info("Skipping as no referred BMC was found", "BMCSettings", bs.Name, "error", err)
104-
continue
105-
}
106-
}
107-
if bsBMCName == bmcSettingsBMCName {
108-
err = fmt.Errorf("BMC (%v) referred in %v is duplicate of BMC (%v) referred in %v", bmcSettingsBMCName, bmcSettings.Name, bsBMCName, bs.Name)
63+
if bs.Spec.BMCRef.Name == bmcSettings.Spec.BMCRef.Name {
64+
err := fmt.Errorf("BMC (%v) referred in %v is duplicate of BMC (%v) referred in %v",
65+
bmcSettings.Spec.BMCRef.Name,
66+
bmcSettings.Name,
67+
bs.Spec.BMCRef.Name,
68+
bs.Name)
10969
return nil, apierrors.NewInvalid(
11070
schema.GroupKind{Group: bmcSettings.GroupVersionKind().Group, Kind: bmcSettings.Kind},
111-
bmcSettings.GetName(), field.ErrorList{field.Duplicate(field.NewPath("spec", path), err)})
71+
bmcSettings.GetName(), field.ErrorList{field.Duplicate(field.NewPath("spec", "BMCRef"), err)})
11272
}
11373
}
11474
return nil, nil
@@ -122,65 +82,24 @@ func (v *BMCSettingsCustomValidator) ValidateUpdate(ctx context.Context, oldObj,
12282
}
12383
bmcsettingslog.Info("Validation for BMCSettings upon update", "name", bmcSettings.GetName())
12484

125-
if bmcSettings.Spec.BMCRef == nil && bmcSettings.Spec.ServerRefList == nil {
126-
return nil, apierrors.NewInvalid(
127-
schema.GroupKind{Group: bmcSettings.GroupVersionKind().Group, Kind: bmcSettings.Kind},
128-
bmcSettings.GetName(), field.ErrorList{field.Required(field.NewPath("spec"), "Spec.BMCRef or Spec.ServerRefList is required")})
129-
}
130-
13185
bmcSettingsList := &metalv1alpha1.BMCSettingsList{}
13286
if err := v.Client.List(ctx, bmcSettingsList); err != nil {
13387
return nil, fmt.Errorf("failed to list bmcSettingsList: %w", err)
13488
}
13589

136-
// this make one API call rather than multiple when trying to find duplicates
137-
serversList := &metalv1alpha1.ServerList{}
138-
if err := v.Client.List(ctx, serversList); err != nil {
139-
return nil, fmt.Errorf("failed to list serversList: %w", err)
140-
}
141-
serversMap := make(map[string]*metalv1alpha1.Server, len(serversList.Items))
142-
for _, server := range serversList.Items {
143-
serversMap[server.Name] = &server
144-
}
145-
146-
var bmcSettingsBMCName string
147-
var path string
148-
var bsBMCName string
149-
var err error
150-
151-
// get the intended BMC
152-
if bmcSettings.Spec.BMCRef != nil {
153-
bmcSettingsBMCName = bmcSettings.Spec.BMCRef.Name
154-
path = "Spec.BMCRef"
155-
} else {
156-
bmcSettingsBMCName, err = getBMCNameFromServerRef(serversMap, bmcSettings)
157-
if err != nil {
158-
return nil, err
159-
}
160-
path = "Spec.ServerRefList"
161-
}
162-
163-
bmcsettingslog.Info("TEMP:bmcSettings", "bmcSettings name", bmcSettings.Name, "bmcSettings BMCRef", bmcSettings.Spec.BMCRef, "bmcSettings ServerList", bmcSettings.Spec.ServerRefList)
164-
16590
for _, bs := range bmcSettingsList.Items {
16691
if bmcSettings.Name == bs.Name {
16792
continue
16893
}
169-
bmcsettingslog.Info("TEMP: bs", "bs name", bs.Name, "bs BMCRef", bs.Spec.BMCRef, "bs ServerList", bs.Spec.ServerRefList)
170-
if bs.Spec.BMCRef != nil {
171-
bsBMCName = bs.Spec.BMCRef.Name
172-
} else {
173-
bsBMCName, err = getBMCNameFromServerRef(serversMap, &bs)
174-
if err != nil {
175-
bmcsettingslog.Info("Skipping as no referred BMC was found", "BMCSettings", bs.Name, "error", err)
176-
continue
177-
}
178-
}
179-
if bsBMCName == bmcSettingsBMCName {
180-
err = fmt.Errorf("BMC (%v) referred in %v is duplicate of BMC (%v) referred in %v", bmcSettingsBMCName, bmcSettings.Name, bsBMCName, bs.Name)
94+
if bs.Spec.BMCRef.Name == bmcSettings.Spec.BMCRef.Name && bmcSettings.Name != bs.Name {
95+
err := fmt.Errorf("BMC (%v) referred in %v is duplicate of BMC (%v) referred in %v",
96+
bmcSettings.Spec.BMCRef.Name,
97+
bmcSettings.Name,
98+
bs.Spec.BMCRef.Name,
99+
bs.Name)
181100
return nil, apierrors.NewInvalid(
182101
schema.GroupKind{Group: bmcSettings.GroupVersionKind().Group, Kind: bmcSettings.Kind},
183-
bmcSettings.GetName(), field.ErrorList{field.Duplicate(field.NewPath("spec", path), err)})
102+
bmcSettings.GetName(), field.ErrorList{field.Duplicate(field.NewPath("spec", "BMCRef"), err)})
184103
}
185104
}
186105
return nil, nil
@@ -196,13 +115,3 @@ func (v *BMCSettingsCustomValidator) ValidateDelete(ctx context.Context, obj run
196115

197116
return nil, nil
198117
}
199-
200-
func getBMCNameFromServerRef(serversMap map[string]*metalv1alpha1.Server, bmcSettings *metalv1alpha1.BMCSettings) (string, error) {
201-
for _, serverRef := range bmcSettings.Spec.ServerRefList {
202-
bmcsettingslog.Info("TEMP: Validation ", "serverRef", serverRef, "serversMap[serverRef.Name]", serversMap)
203-
if server, ok := serversMap[serverRef.Name]; ok && server != nil && server.Spec.BMCRef != nil {
204-
return server.Spec.BMCRef.Name, nil
205-
}
206-
}
207-
return "", fmt.Errorf("no servers found with reference to BMC in given 'ServerRefList' %v", bmcSettings.Spec.ServerRefList)
208-
}

0 commit comments

Comments
 (0)