Skip to content

Commit 1779f49

Browse files
authored
Disable ACP
1 parent 1818e48 commit 1779f49

File tree

10 files changed

+13
-285
lines changed

10 files changed

+13
-285
lines changed

acp/client.go

-16
Original file line numberDiff line numberDiff line change
@@ -124,21 +124,5 @@ func (c *client) GetVersionWithBackoff(ctx context.Context) (*version.Version, e
124124
}
125125

126126
func (c *client) IsFeatureEnabled(ctx context.Context, feature string) error {
127-
fields := LogFields{"feature": feature}
128-
Logc(ctx).WithFields(fields).Debug("Checking if feature is enabled.")
129-
130-
if !c.Enabled() {
131-
Logc(ctx).WithFields(fields).Warning("Feature requires Trident-ACP to be enabled.")
132-
return errors.UnsupportedConfigError("acp is not enabled")
133-
}
134-
135-
// Entitled will return different errors based on the response from the API call. Return the exact error
136-
// so consumers of this client may act on certain error conditions.
137-
if err := c.restClient.Entitled(ctx, feature); err != nil {
138-
Logc(ctx).WithFields(fields).WithError(err).Error("Feature enablement failed.")
139-
return err
140-
}
141-
142-
Logc(ctx).WithFields(fields).Debug("Feature is enabled.")
143127
return nil
144128
}

acp/client_test.go

+1-33
Original file line numberDiff line numberDiff line change
@@ -92,38 +92,6 @@ func TestTridentACP_IsFeatureEnabled(t *testing.T) {
9292
// Reset the package-level state after the test completes.
9393
client := newClient(nil, false)
9494
err := client.IsFeatureEnabled(ctx, FeatureSnapshotRestore)
95-
assert.Error(t, err, "expected error")
96-
assert.True(t, errors.IsUnsupportedConfigError(err), "should be unsupported config error")
97-
assert.False(t, errors.IsUnlicensedError(err), "should not be unlicensed error")
98-
})
99-
100-
t.Run("WithAPIErrorDuringFeatureEntitlementCheck", func(t *testing.T) {
101-
// Reset the package-level state after the test completes.
102-
testFeature := FeatureSnapshotRestore
103-
104-
mockCtrl := gomock.NewController(t)
105-
mockRest := mock_acp.NewMockREST(mockCtrl)
106-
mockRest.EXPECT().Entitled(ctx, testFeature).Return(fmt.Errorf("api error"))
107-
108-
client := newClient(mockRest, true)
109-
err := client.IsFeatureEnabled(ctx, testFeature)
110-
assert.Error(t, err, "expected error")
111-
assert.False(t, errors.IsUnsupportedConfigError(err), "should not be unsupported config error")
112-
assert.False(t, errors.IsUnlicensedError(err), "should not be unlicensed error")
113-
})
114-
115-
t.Run("WhenFeatureIsNotSupported", func(t *testing.T) {
116-
// Reset the package-level state after the test completes.
117-
testFeature := FeatureSnapshotRestore
118-
119-
mockCtrl := gomock.NewController(t)
120-
mockRest := mock_acp.NewMockREST(mockCtrl)
121-
mockRest.EXPECT().Entitled(ctx, testFeature).Return(errors.UnlicensedError("unlicensed error"))
122-
123-
client := newClient(mockRest, true)
124-
err := client.IsFeatureEnabled(ctx, testFeature)
125-
assert.Error(t, err, "expected error")
126-
assert.False(t, errors.IsUnsupportedConfigError(err), "should be unsupported config error")
127-
assert.True(t, errors.IsUnlicensedError(err), "should be unlicensed error")
95+
assert.NoError(t, err, "expected no error")
12896
})
12997
}

cli/cmd/version.go

+8-15
Original file line numberDiff line numberDiff line change
@@ -226,21 +226,14 @@ func writeVersionTable(version *api.ClientVersionResponse) {
226226

227227
func writeVersionsTable(versions *api.VersionResponse) {
228228
table := tablewriter.NewWriter(os.Stdout)
229-
if versions.ACPServer != nil {
230-
table.SetHeader([]string{"Server Version", "Client Version", "ACP Version"})
231-
table.Append([]string{
232-
versions.Server.Version,
233-
versions.Client.Version,
234-
versions.ACPServer.Version,
235-
})
236-
} else {
237-
table.SetHeader([]string{"Server Version", "Client Version"})
238-
239-
table.Append([]string{
240-
versions.Server.Version,
241-
versions.Client.Version,
242-
})
243-
}
229+
230+
table.SetHeader([]string{"Server Version", "Client Version"})
231+
232+
table.Append([]string{
233+
versions.Server.Version,
234+
versions.Client.Version,
235+
})
236+
244237
table.Render()
245238
}
246239

frontend/crd/snapshot_restore_test.go

-78
Original file line numberDiff line numberDiff line change
@@ -247,84 +247,6 @@ func TestHandleActionSnapshotRestore(t *testing.T) {
247247
assert.True(t, apierrors.IsNotFound(err), "TASR should not have been found")
248248
}
249249

250-
func TestHandleActionSnapshotRestore_Disabled(t *testing.T) {
251-
// Reset the package-level state after the test completes.
252-
defer acp.SetAPI(acp.API())
253-
254-
mockCtrl := gomock.NewController(t)
255-
mockACP := mockacp.NewMockTridentACP(mockCtrl)
256-
acp.SetAPI(mockACP)
257-
orchestrator := mockcore.NewMockOrchestrator(mockCtrl)
258-
259-
tridentNamespace := "trident"
260-
kubeClient := GetTestKubernetesClientset()
261-
snapClient := GetTestSnapshotClientset()
262-
crdClient := GetTestCrdClientset()
263-
crdController, err := newTridentCrdControllerImpl(orchestrator, tridentNamespace, kubeClient, snapClient, crdClient)
264-
if err != nil {
265-
t.Fatalf("cannot create Trident CRD controller frontend; %v", err)
266-
}
267-
268-
// Mock out any expected calls on the ACP API.
269-
// This test expects the feature call to return false / unsupported.
270-
err = errors.UnsupportedError("unsupported feature")
271-
mockACP.EXPECT().IsFeatureEnabled(gomock.Any(), acp.FeatureSnapshotRestore).Return(err).AnyTimes()
272-
273-
// Activate the CRD controller and start monitoring
274-
if err = crdController.Activate(); err != nil {
275-
t.Fatalf("error while activating; %v", err)
276-
}
277-
time.Sleep(250 * time.Millisecond)
278-
279-
pvc := fakeSnapRestorePVC(snapRestorePVC1, namespace1, snapRestorePV1)
280-
_, _ = kubeClient.CoreV1().PersistentVolumeClaims(namespace1).Create(ctx(), pvc, createOpts)
281-
282-
pv := fakePV(snapRestorePVC1, namespace1, snapRestorePV1)
283-
_, _ = kubeClient.CoreV1().PersistentVolumes().Create(ctx(), pv, createOpts)
284-
285-
vs1Time := time.Now()
286-
vs2Time := vs1Time.Add(1 * time.Second)
287-
vs3Time := vs2Time.Add(1 * time.Second)
288-
289-
vs1 := fakeVS(snapRestoreSnap1, namespace1, snapRestoreVSC1, snapRestorePVC1, vs1Time)
290-
_, _ = snapClient.SnapshotV1().VolumeSnapshots(namespace1).Create(ctx(), vs1, createOpts)
291-
292-
vsc1 := fakeVSC(snapRestoreSnap1, namespace1, snapRestoreVSC1, snapRestoreSnapHandle1, vs1Time)
293-
_, _ = snapClient.SnapshotV1().VolumeSnapshotContents().Create(ctx(), vsc1, createOpts)
294-
295-
vs2 := fakeVS(snapRestoreSnap2, namespace1, snapRestoreVSC2, snapRestorePVC1, vs2Time)
296-
_, _ = snapClient.SnapshotV1().VolumeSnapshots(namespace1).Create(ctx(), vs2, createOpts)
297-
298-
vsc2 := fakeVSC(snapRestoreSnap2, namespace1, snapRestoreVSC2, snapRestoreSnapHandle2, vs2Time)
299-
_, _ = snapClient.SnapshotV1().VolumeSnapshotContents().Create(ctx(), vsc2, createOpts)
300-
301-
vs3 := fakeVS(snapRestoreSnap3, namespace1, snapRestoreVSC3, snapRestorePVC1, vs3Time)
302-
_, _ = snapClient.SnapshotV1().VolumeSnapshots(namespace1).Create(ctx(), vs3, createOpts)
303-
304-
vsc3 := fakeVSC(snapRestoreSnap3, namespace1, snapRestoreVSC3, snapRestoreSnapHandle3, vs3Time)
305-
_, _ = snapClient.SnapshotV1().VolumeSnapshotContents().Create(ctx(), vsc3, createOpts)
306-
307-
tasr := fakeTASR(tasr1, namespace1, snapRestorePVC1, snapRestoreSnap3)
308-
_, _ = crdClient.TridentV1().TridentActionSnapshotRestores(namespace1).Create(ctx(), tasr, createOpts)
309-
310-
// Wait until the operation completes
311-
for i := 0; i < 20; i++ {
312-
time.Sleep(250 * time.Millisecond)
313-
314-
tasr, err = crdClient.TridentV1().TridentActionSnapshotRestores(namespace1).Get(ctx(), tasr1, getOpts)
315-
if err != nil {
316-
if apierrors.IsNotFound(err) {
317-
continue
318-
}
319-
break
320-
} else if tasr.IsComplete() {
321-
break
322-
}
323-
}
324-
325-
assert.True(t, tasr.Failed(), "TASR operation did not fail")
326-
}
327-
328250
func TestHandleActionSnapshotRestore_InProgressError(t *testing.T) {
329251
// Reset the package-level state after the test completes.
330252
defer acp.SetAPI(acp.API())

frontend/crd/trident_action_mirror_update_test.go

-55
Original file line numberDiff line numberDiff line change
@@ -338,61 +338,6 @@ func TestHandleActionMirrorUpdate_InProgress(t *testing.T) {
338338
assert.True(t, tamu.Succeeded(), "TAMU operation failed")
339339
}
340340

341-
func TestHandleActionMirrorUpdate_InProgress_Disabled(t *testing.T) {
342-
// Reset the package-level state after the test completes.
343-
defer acp.SetAPI(acp.API())
344-
345-
mockCtrl := gomock.NewController(t)
346-
mockACP := mockacp.NewMockTridentACP(mockCtrl)
347-
acp.SetAPI(mockACP)
348-
orchestrator := mockcore.NewMockOrchestrator(mockCtrl)
349-
350-
tridentNamespace := "trident"
351-
kubeClient := GetTestKubernetesClientset()
352-
snapClient := GetTestSnapshotClientset()
353-
crdClient := GetTestCrdClientset()
354-
crdController, err := newTridentCrdControllerImpl(orchestrator, tridentNamespace, kubeClient, snapClient, crdClient)
355-
if err != nil {
356-
t.Fatalf("cannot create Trident CRD controller frontend, error: %v", err.Error())
357-
}
358-
359-
// Mock out any expected calls on the ACP API.
360-
err = errors.UnsupportedError("unsupported")
361-
mockACP.EXPECT().IsFeatureEnabled(gomock.Any(), acp.FeatureSnapshotMirrorUpdate).Return(err).AnyTimes()
362-
363-
// Activate the CRD controller and start monitoring
364-
if err = crdController.Activate(); err != nil {
365-
t.Fatalf("error while activating: %v", err.Error())
366-
}
367-
delaySeconds(1)
368-
369-
pvc := fakePVC(pvc1, namespace1, pv1)
370-
_, _ = kubeClient.CoreV1().PersistentVolumeClaims(namespace1).Create(ctx(), pvc, createOpts)
371-
372-
tmr := fakeTMR(tmrName1, namespace1, pvc1)
373-
_, _ = crdClient.TridentV1().TridentMirrorRelationships(namespace1).Create(ctx(), tmr, createOpts)
374-
375-
tamu := fakeTAMU(tamu1, namespace1, tmrName1, snapHandle1)
376-
_, _ = crdClient.TridentV1().TridentActionMirrorUpdates(namespace1).Create(ctx(), tamu, createOpts)
377-
378-
// Wait until the operation completes
379-
for i := 0; i < 5; i++ {
380-
time.Sleep(250 * time.Millisecond)
381-
382-
tamu, err = crdClient.TridentV1().TridentActionMirrorUpdates(namespace1).Get(ctx(), tamu1, getOpts)
383-
if err != nil {
384-
if apierrors.IsNotFound(err) {
385-
continue
386-
}
387-
break
388-
} else if tamu.IsComplete() {
389-
break
390-
}
391-
}
392-
393-
assert.True(t, tamu.Failed(), "TAMU operation was not disabled")
394-
}
395-
396341
func TestHandleActionMirrorUpdate_InProgressAtStartup(t *testing.T) {
397342
// Reset the package-level state after the test completes.
398343
defer acp.SetAPI(acp.API())

frontend/rest/controller_handlers.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -263,8 +263,7 @@ func GetVersion(w http.ResponseWriter, r *http.Request) {
263263
response.Error = err.Error()
264264
}
265265
response.Version = version
266-
267-
response.ACPVersion = GetACPVersion(ctx)
266+
response.ACPVersion = version
268267
return httpStatusCodeForGetUpdateList(err)
269268
},
270269
)

operator/controllers/orchestrator/controller.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1364,7 +1364,7 @@ func (c *Controller) updateTridentOrchestratorCRStatus(
13641364
Version: version,
13651365
Namespace: namespace,
13661366
CurrentInstallationParams: installParams,
1367-
ACPVersion: acpVersion,
1367+
ACPVersion: version,
13681368
}
13691369

13701370
if reflect.DeepEqual(tridentCR.Status, newStatusDetails) {

storage/backend_test.go

-38
Original file line numberDiff line numberDiff line change
@@ -149,44 +149,6 @@ func TestDeleteSnapshot_NotManaged(t *testing.T) {
149149
assert.Errorf(t, err, "expected err")
150150
}
151151

152-
func TestCloneVolume_FeatureDisabled(t *testing.T) {
153-
// Reset the package-level state after the test completes.
154-
defer acp.SetAPI(acp.API())
155-
156-
mockCtrl := gomock.NewController(t)
157-
mockACP := mockacp.NewMockTridentACP(mockCtrl)
158-
acp.SetAPI(mockACP)
159-
160-
// Mock out any expected calls on the ACP API.
161-
err := errors.UnsupportedError("unsupported")
162-
mockACP.EXPECT().IsFeatureEnabled(gomock.Any(), acp.FeatureReadOnlyClone).Return(err)
163-
164-
volumeName := "pvc-e9748b6b-8240-4fd8-97bc-868bf064ecd4"
165-
volumeInternalName := "trident_pvc_e9748b6b_8240_4fd8_97bc_868bf064ecd4"
166-
volumeConfig := &VolumeConfig{
167-
Version: "",
168-
Name: volumeName,
169-
InternalName: volumeInternalName,
170-
}
171-
volumeConfigDest := &VolumeConfig{
172-
Version: "",
173-
Name: "pvc-deadbeef-8240-4fd8-97bc-868bf064ecd4",
174-
InternalName: "trident_pvc_deadbeef_8240_4fd8_97bc_868bf064ecd4",
175-
ReadOnlyClone: true,
176-
}
177-
178-
backend := &StorageBackend{
179-
state: Offline,
180-
}
181-
pool := NewStoragePool(nil, "test-pool1")
182-
183-
// Both volume and snapshot not managed
184-
_, err = backend.CloneVolume(context.Background(), volumeConfig, volumeConfigDest, pool, false)
185-
186-
assert.Error(t, err, "expected err")
187-
assert.True(t, errors.IsUnsupportedError(err))
188-
}
189-
190152
func TestCloneVolume_BackendOffline(t *testing.T) {
191153
// Reset the package-level state after the test completes.
192154
defer acp.SetAPI(acp.API())

storage_drivers/azure/azure_anf_test.go

+1-9
Original file line numberDiff line numberDiff line change
@@ -8723,14 +8723,6 @@ func TestUpdateSnapshotDirectory_Failure(t *testing.T) {
87238723

87248724
volConfig, _, _, _, filesystem := getStructsForCreateNFSVolume(ctx, driver, storagePool)
87258725

8726-
// CASE: ACP is not enabled
8727-
mockACP.EXPECT().IsFeatureEnabled(gomock.Any(), acp.FeatureReadOnlyClone).Return(errors.New("mock error"))
8728-
result, err := driver.updateSnapshotDirectory(
8729-
ctx, volConfig.InternalName, filesystem, "TRUE", map[string]*storage.Volume{})
8730-
8731-
assert.Nil(t, result)
8732-
assert.NotNil(t, err)
8733-
87348726
// CASE: Error while modifying volume
87358727
mockACP.EXPECT().IsFeatureEnabled(gomock.Any(), acp.FeatureReadOnlyClone).Return(nil).AnyTimes()
87368728
mockAPI.EXPECT().RefreshAzureResources(ctx).Return(nil).AnyTimes()
@@ -8749,7 +8741,7 @@ func TestUpdateSnapshotDirectory_Failure(t *testing.T) {
87498741
},
87508742
}
87518743

8752-
result, err = driver.updateSnapshotDirectory(
8744+
result, err := driver.updateSnapshotDirectory(
87538745
ctx, volConfig.InternalName, filesystem, "TRUE", allVolumes)
87548746

87558747
assert.Nil(t, result)

storage_drivers/ontap/ontap_nas_qtree_test.go

+1-38
Original file line numberDiff line numberDiff line change
@@ -4506,35 +4506,6 @@ func TestCanSnapshot_InvalidSnapshotDir(t *testing.T) {
45064506
assert.NotNil(t, result, "result is nil")
45074507
}
45084508

4509-
func TestCreateSnapshot_Disabled(t *testing.T) {
4510-
// Reset the package-level state after the test completes.
4511-
defer acp.SetAPI(acp.API())
4512-
4513-
mockCtrl := gomock.NewController(t)
4514-
mockACP := mockacp.NewMockTridentACP(mockCtrl)
4515-
acp.SetAPI(mockACP)
4516-
// Mock out any expected calls on the ACP API.
4517-
err := errors.UnsupportedError("unsupported")
4518-
mockACP.EXPECT().IsFeatureEnabled(gomock.Any(), acp.FeatureReadOnlyClone).Return(err)
4519-
4520-
_, driver := newMockOntapNasQtreeDriver(t)
4521-
volConfig := &storage.VolumeConfig{
4522-
Size: "1g",
4523-
Encryption: "false",
4524-
FileSystem: "nfs",
4525-
InternalName: flexvol,
4526-
InternalID: volInternalID,
4527-
}
4528-
4529-
snapConfig := &storage.SnapshotConfig{
4530-
InternalName: "snap1",
4531-
VolumeInternalName: "vol1",
4532-
}
4533-
_, err = driver.CreateSnapshot(ctx, snapConfig, volConfig)
4534-
4535-
assert.Error(t, err, "no error occurred")
4536-
}
4537-
45384509
func TestCreateSnapshot_Success(t *testing.T) {
45394510
// Reset the package-level state after the test completes.
45404511
defer acp.SetAPI(acp.API())
@@ -5327,18 +5298,10 @@ func TestNASQtreeStorageDriver_UpdateSnapshotDirectory_Failure(t *testing.T) {
53275298
"pvc-99138d85-6259-4830-ada0-30e45e21f843": mockVol3,
53285299
}
53295300

5330-
// CASE: ACP is not enabled for this feature
5331-
mockACP.EXPECT().IsFeatureEnabled(gomock.Any(), acp.FeatureReadOnlyClone).Return(errors.UnsupportedError("unsupported"))
5332-
5333-
result, resultErr := driver.updateSnapshotDirectory(ctx, mockVol1.Config, "invalid", true, "", allVolumes)
5334-
5335-
assert.Error(t, resultErr)
5336-
assert.Nil(t, result)
5337-
53385301
// CASE: Invalid snapshot dir value
53395302
mockACP.EXPECT().IsFeatureEnabled(gomock.Any(), acp.FeatureReadOnlyClone).Return(nil).AnyTimes()
53405303

5341-
result, resultErr = driver.updateSnapshotDirectory(ctx, mockVol1.Config, "invalid", true, "", allVolumes)
5304+
result, resultErr := driver.updateSnapshotDirectory(ctx, mockVol1.Config, "invalid", true, "", allVolumes)
53425305

53435306
assert.Error(t, resultErr)
53445307
assert.True(t, errors.IsInvalidInputError(resultErr))

0 commit comments

Comments
 (0)