Skip to content

Commit 695c67f

Browse files
committed
fix: address sttts feedback
1 parent 4e6ed58 commit 695c67f

File tree

8 files changed

+231
-528
lines changed

8 files changed

+231
-528
lines changed

pkg/controller/operators/catalog/operator.go

Lines changed: 2 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -1306,65 +1306,6 @@ func (o *Operator) ResolvePlan(plan *v1alpha1.InstallPlan) error {
13061306
return nil
13071307
}
13081308

1309-
func GetCRDV1VersionsMap(crd *apiextensionsv1.CustomResourceDefinition) map[string]struct{} {
1310-
versionsMap := map[string]struct{}{}
1311-
1312-
for _, version := range crd.Spec.Versions {
1313-
versionsMap[version.Name] = struct{}{}
1314-
}
1315-
return versionsMap
1316-
}
1317-
1318-
// Ensure all existing served versions are present in new CRD
1319-
func GetCRDV1Beta1VersionsMap(crd *apiextensionsv1beta1.CustomResourceDefinition) map[string]struct{} {
1320-
versionsMap := map[string]struct{}{}
1321-
1322-
for _, version := range crd.Spec.Versions {
1323-
versionsMap[version.Name] = struct{}{}
1324-
}
1325-
if crd.Spec.Version != "" {
1326-
versionsMap[crd.Spec.Version] = struct{}{}
1327-
}
1328-
1329-
return versionsMap
1330-
}
1331-
1332-
// Ensure all existing served versions are present in new CRD
1333-
func EnsureV1CRDVersions(oldCRD *apiextensionsv1.CustomResourceDefinition, newCRD *apiextensionsv1.CustomResourceDefinition) error {
1334-
newCRDVersions := GetCRDV1VersionsMap(newCRD)
1335-
1336-
for _, oldVersion := range oldCRD.Spec.Versions {
1337-
if oldVersion.Served {
1338-
_, ok := newCRDVersions[oldVersion.Name]
1339-
if !ok {
1340-
return fmt.Errorf("New CRD (%s) must contain existing served versions (%s)", oldCRD.Name, oldVersion.Name)
1341-
}
1342-
}
1343-
}
1344-
return nil
1345-
}
1346-
1347-
// Ensure all existing served versions are present in new CRD
1348-
func EnsureV1Beta1CRDVersions(oldCRD *apiextensionsv1beta1.CustomResourceDefinition, newCRD *apiextensionsv1beta1.CustomResourceDefinition) error {
1349-
newCRDVersions := GetCRDV1Beta1VersionsMap(newCRD)
1350-
1351-
for _, oldVersion := range oldCRD.Spec.Versions {
1352-
if oldVersion.Served {
1353-
_, ok := newCRDVersions[oldVersion.Name]
1354-
if !ok {
1355-
return fmt.Errorf("New CRD (%s) must contain existing served versions (%s)", oldCRD.Name, oldVersion.Name)
1356-
}
1357-
}
1358-
}
1359-
if oldCRD.Spec.Version != "" {
1360-
_, ok := newCRDVersions[oldCRD.Spec.Version]
1361-
if !ok {
1362-
return fmt.Errorf("New CRD (%s) must contain existing version (%s)", oldCRD.Name, oldCRD.Spec.Version)
1363-
}
1364-
}
1365-
return nil
1366-
}
1367-
13681309
// Validate all existing served versions against new CRD's validation (if changed)
13691310
func validateV1CRDCompatibility(dynamicClient dynamic.Interface, oldCRD *apiextensionsv1.CustomResourceDefinition, newCRD *apiextensionsv1.CustomResourceDefinition) error {
13701311
logrus.Debugf("Comparing %#v to %#v", oldCRD.Spec.Versions, newCRD.Spec.Versions)
@@ -1403,10 +1344,8 @@ func validateV1CRDCompatibility(dynamicClient dynamic.Interface, oldCRD *apiexte
14031344
// Validate all existing served versions against new CRD's validation (if changed)
14041345
func validateV1Beta1CRDCompatibility(dynamicClient dynamic.Interface, oldCRD *apiextensionsv1beta1.CustomResourceDefinition, newCRD *apiextensionsv1beta1.CustomResourceDefinition) error {
14051346
logrus.Debugf("Comparing %#v to %#v", oldCRD.Spec.Validation, newCRD.Spec.Validation)
1406-
// If validation schema is unchanged, return right away
1407-
if reflect.DeepEqual(oldCRD.Spec.Validation, newCRD.Spec.Validation) {
1408-
return nil
1409-
}
1347+
1348+
// TODO return early of all versions are equal
14101349
convertedCRD := &apiextensions.CustomResourceDefinition{}
14111350
if err := apiextensionsv1beta1.Convert_v1beta1_CustomResourceDefinition_To_apiextensions_CustomResourceDefinition(newCRD, convertedCRD, nil); err != nil {
14121351
return err
@@ -1451,55 +1390,6 @@ func validateExistingCRs(dynamicClient dynamic.Interface, gvr schema.GroupVersio
14511390
return nil
14521391
}
14531392

1454-
// Attempt to remove stored versions that have been deprecated before allowing
1455-
// those versions to be removed from the new CRD.
1456-
// The function may not always succeed as storedVersions requires at least one
1457-
// version. If there is only stored version, it won't be removed until a new
1458-
// stored version is added.
1459-
func removeDeprecatedV1StoredVersions(oldCRD *apiextensionsv1.CustomResourceDefinition, newCRD *apiextensionsv1.CustomResourceDefinition) []string {
1460-
// StoredVersions requires to have at least one version.
1461-
if len(oldCRD.Status.StoredVersions) <= 1 {
1462-
return nil
1463-
}
1464-
1465-
newStoredVersions := []string{}
1466-
newCRDVersions := GetCRDV1VersionsMap(newCRD)
1467-
for _, v := range oldCRD.Status.StoredVersions {
1468-
_, ok := newCRDVersions[v]
1469-
if ok {
1470-
newStoredVersions = append(newStoredVersions, v)
1471-
}
1472-
}
1473-
1474-
if len(newStoredVersions) < 1 {
1475-
return nil
1476-
} else {
1477-
return newStoredVersions
1478-
}
1479-
}
1480-
1481-
func removeDeprecatedV1Beta1StoredVersions(oldCRD *apiextensionsv1beta1.CustomResourceDefinition, newCRD *apiextensionsv1beta1.CustomResourceDefinition) []string {
1482-
// StoredVersions requires to have at least one version.
1483-
if len(oldCRD.Status.StoredVersions) <= 1 {
1484-
return nil
1485-
}
1486-
1487-
newStoredVersions := []string{}
1488-
newCRDVersions := GetCRDV1Beta1VersionsMap(newCRD)
1489-
for _, v := range oldCRD.Status.StoredVersions {
1490-
_, ok := newCRDVersions[v]
1491-
if ok {
1492-
newStoredVersions = append(newStoredVersions, v)
1493-
}
1494-
}
1495-
1496-
if len(newStoredVersions) < 1 {
1497-
return nil
1498-
} else {
1499-
return newStoredVersions
1500-
}
1501-
}
1502-
15031393
// ExecutePlan applies a planned InstallPlan to a namespace.
15041394
func (o *Operator) ExecutePlan(plan *v1alpha1.InstallPlan) error {
15051395
if plan.Status.Phase != v1alpha1.InstallPlanPhaseInstalling {

pkg/controller/operators/catalog/operator_test.go

Lines changed: 0 additions & 197 deletions
Original file line numberDiff line numberDiff line change
@@ -135,203 +135,6 @@ func TestTransitionInstallPlan(t *testing.T) {
135135
}
136136
}
137137

138-
func TestEnsureV1CRDVersions(t *testing.T) {
139-
mainCRDPlural := "ins-main-abcde"
140-
141-
currentVersions := []apiextensionsv1.CustomResourceDefinitionVersion{
142-
{
143-
Name: "v1alpha1",
144-
Served: true,
145-
Storage: true,
146-
},
147-
}
148-
149-
addedVersions := []apiextensionsv1.CustomResourceDefinitionVersion{
150-
{
151-
Name: "v1alpha1",
152-
Served: true,
153-
Storage: false,
154-
},
155-
{
156-
Name: "v1alpha2",
157-
Served: true,
158-
Storage: true,
159-
},
160-
}
161-
162-
missingVersions := []apiextensionsv1.CustomResourceDefinitionVersion{
163-
{
164-
Name: "v1alpha2",
165-
Served: true,
166-
Storage: true,
167-
},
168-
}
169-
170-
tests := []struct {
171-
name string
172-
oldCRD apiextensionsv1.CustomResourceDefinition
173-
newCRD apiextensionsv1.CustomResourceDefinition
174-
expectedFailure bool
175-
}{
176-
{
177-
name: "existing versions are present",
178-
oldCRD: func() apiextensionsv1.CustomResourceDefinition {
179-
oldCRD := v1crd(mainCRDPlural)
180-
oldCRD.Spec.Versions = currentVersions
181-
return oldCRD
182-
}(),
183-
newCRD: func() apiextensionsv1.CustomResourceDefinition {
184-
newCRD := v1crd(mainCRDPlural)
185-
newCRD.Spec.Versions = addedVersions
186-
return newCRD
187-
}(),
188-
expectedFailure: false,
189-
},
190-
{
191-
name: "missing versions in new CRD 1",
192-
oldCRD: func() apiextensionsv1.CustomResourceDefinition {
193-
oldCRD := v1crd(mainCRDPlural)
194-
oldCRD.Spec.Versions = currentVersions
195-
return oldCRD
196-
}(),
197-
newCRD: func() apiextensionsv1.CustomResourceDefinition {
198-
newCRD := v1crd(mainCRDPlural)
199-
newCRD.Spec.Versions = missingVersions
200-
return newCRD
201-
}(),
202-
expectedFailure: true,
203-
},
204-
{
205-
name: "missing version in new CRD 2",
206-
oldCRD: func() apiextensionsv1.CustomResourceDefinition {
207-
oldCRD := v1crd(mainCRDPlural)
208-
oldCRD.Spec.Versions[0].Name = "v1alpha1"
209-
return oldCRD
210-
}(),
211-
newCRD: func() apiextensionsv1.CustomResourceDefinition {
212-
newCRD := v1crd(mainCRDPlural)
213-
newCRD.Spec.Versions[0].Name = "v1alpha2"
214-
return newCRD
215-
}(),
216-
expectedFailure: true,
217-
},
218-
{
219-
name: "existing version is present in new CRD's versions",
220-
oldCRD: func() apiextensionsv1.CustomResourceDefinition {
221-
oldCRD := v1crd(mainCRDPlural)
222-
oldCRD.Spec.Versions[0].Name = "v1alpha1"
223-
return oldCRD
224-
}(),
225-
newCRD: func() apiextensionsv1.CustomResourceDefinition {
226-
newCRD := v1crd(mainCRDPlural)
227-
newCRD.Spec.Versions = addedVersions
228-
return newCRD
229-
}(),
230-
expectedFailure: false,
231-
},
232-
}
233-
234-
for _, tt := range tests {
235-
err := EnsureV1CRDVersions(&tt.oldCRD, &tt.newCRD)
236-
if tt.expectedFailure {
237-
require.Error(t, err)
238-
}
239-
}
240-
}
241-
242-
func TestRemoveDeprecatedV1StoredVersions(t *testing.T) {
243-
mainCRDPlural := "ins-main-test"
244-
245-
currentVersions := []apiextensionsv1.CustomResourceDefinitionVersion{
246-
{
247-
Name: "v1alpha1",
248-
Served: true,
249-
Storage: false,
250-
},
251-
{
252-
Name: "v1alpha2",
253-
Served: true,
254-
Storage: true,
255-
},
256-
}
257-
258-
newVersions := []apiextensionsv1.CustomResourceDefinitionVersion{
259-
{
260-
Name: "v1alpha2",
261-
Served: true,
262-
Storage: false,
263-
},
264-
{
265-
Name: "apiextensionsv1beta1",
266-
Served: true,
267-
Storage: true,
268-
},
269-
}
270-
271-
crdStatusStoredVersions := apiextensionsv1.CustomResourceDefinitionStatus{
272-
StoredVersions: []string{},
273-
}
274-
275-
tests := []struct {
276-
name string
277-
oldCRD apiextensionsv1.CustomResourceDefinition
278-
newCRD apiextensionsv1.CustomResourceDefinition
279-
expectedResult []string
280-
}{
281-
{
282-
name: "only one stored version exists",
283-
oldCRD: func() apiextensionsv1.CustomResourceDefinition {
284-
oldCRD := v1crd(mainCRDPlural)
285-
oldCRD.Spec.Versions = currentVersions
286-
oldCRD.Status = crdStatusStoredVersions
287-
oldCRD.Status.StoredVersions = []string{"v1alpha1"}
288-
return oldCRD
289-
}(),
290-
newCRD: func() apiextensionsv1.CustomResourceDefinition {
291-
newCRD := v1crd(mainCRDPlural)
292-
newCRD.Spec.Versions = newVersions
293-
return newCRD
294-
}(),
295-
expectedResult: nil,
296-
},
297-
{
298-
name: "multiple stored versions with one deprecated version",
299-
oldCRD: func() apiextensionsv1.CustomResourceDefinition {
300-
oldCRD := v1crd(mainCRDPlural)
301-
oldCRD.Spec.Versions = currentVersions
302-
oldCRD.Status.StoredVersions = []string{"v1alpha1", "v1alpha2"}
303-
return oldCRD
304-
}(),
305-
newCRD: func() apiextensionsv1.CustomResourceDefinition {
306-
newCRD := v1crd(mainCRDPlural)
307-
newCRD.Spec.Versions = newVersions
308-
return newCRD
309-
}(),
310-
expectedResult: []string{"v1alpha2"},
311-
},
312-
{
313-
name: "multiple stored versions with all deprecated version",
314-
oldCRD: func() apiextensionsv1.CustomResourceDefinition {
315-
oldCRD := v1crd(mainCRDPlural)
316-
oldCRD.Spec.Versions = currentVersions
317-
oldCRD.Status.StoredVersions = []string{"v1alpha1", "v1alpha3"}
318-
return oldCRD
319-
}(),
320-
newCRD: func() apiextensionsv1.CustomResourceDefinition {
321-
newCRD := v1crd(mainCRDPlural)
322-
newCRD.Spec.Versions = newVersions
323-
return newCRD
324-
}(),
325-
expectedResult: nil,
326-
},
327-
}
328-
329-
for _, tt := range tests {
330-
resultCRD := removeDeprecatedV1StoredVersions(&tt.oldCRD, &tt.newCRD)
331-
require.Equal(t, tt.expectedResult, resultCRD)
332-
}
333-
}
334-
335138
func TestExecutePlan(t *testing.T) {
336139
namespace := "ns"
337140

0 commit comments

Comments
 (0)