Skip to content

Commit 3cd1126

Browse files
authored
Fixed volume creation for disaggregated ONTAP 9.17+
1 parent 2988208 commit 3cd1126

File tree

2 files changed

+49
-6
lines changed

2 files changed

+49
-6
lines changed

storage_drivers/ontap/api/ontap_rest.go

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -288,9 +288,10 @@ func NewRestClientFromOntapConfig(
288288
}
289289

290290
var (
291-
MinimumONTAPVersion = versionutils.MustParseSemantic("9.12.1")
292-
MinimumONTAPVersionDefault = versionutils.MustParseSemantic("9.15.1")
293-
MinimumASAR2Version = versionutils.MustParseSemantic("9.16.1")
291+
MinimumONTAPVersion = versionutils.MustParseSemantic("9.12.1")
292+
MinimumONTAPVersionDefault = versionutils.MustParseSemantic("9.15.1")
293+
MinimumASAR2Version = versionutils.MustParseSemantic("9.16.1")
294+
MinimumDisaggregatedTieringPolicyRemovedVersion = versionutils.MustParseSemantic("9.17.0")
294295
)
295296

296297
func IsRESTSupported(version string) (bool, error) {
@@ -4095,9 +4096,19 @@ func (c *RestClient) EmsAutosupportLog(
40954096

40964097
func (c *RestClient) TieringPolicyValue(
40974098
ctx context.Context,
4098-
) string {
4099-
// Becase the REST API is always > ONTAP 9.5, just default to "none"
4100-
tieringPolicy := "none"
4099+
) (tieringPolicy string) {
4100+
// Use "none" for unified ONTAP, and "" for disaggregated ONTAP.
4101+
tieringPolicy = "none"
4102+
4103+
parsedVersion, err := versionutils.ParseSemantic(c.OntapVersion)
4104+
if err != nil {
4105+
return
4106+
}
4107+
4108+
// TODO (cknight): verify this also applies to ASA r2
4109+
if c.disaggregated && parsedVersion.AtLeast(MinimumDisaggregatedTieringPolicyRemovedVersion) {
4110+
tieringPolicy = "" // An empty string prevents sending tieringPolicy when creating volumes.
4111+
}
41014112
return tieringPolicy
41024113
}
41034114

storage_drivers/ontap/api/ontap_rest_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3405,6 +3405,38 @@ func TestOntapREST_TieringPolicy(t *testing.T) {
34053405
server.Close()
34063406
}
34073407

3408+
func TestOntapREST_TieringPolicy_Disaggregated_916(t *testing.T) {
3409+
server := httptest.NewServer(http.HandlerFunc(mockResourceNotFound))
3410+
rs := newRestClient(server.Listener.Addr().String(), server.Client())
3411+
rs.disaggregated = true
3412+
rs.OntapVersion = "9.16.1"
3413+
assert.NotNil(t, rs)
3414+
tieringPolicy := rs.TieringPolicyValue(ctx)
3415+
assert.Equal(t, "none", tieringPolicy)
3416+
server.Close()
3417+
}
3418+
3419+
func TestOntapREST_TieringPolicy_Disaggregated_917(t *testing.T) {
3420+
server := httptest.NewServer(http.HandlerFunc(mockResourceNotFound))
3421+
rs := newRestClient(server.Listener.Addr().String(), server.Client())
3422+
rs.disaggregated = true
3423+
rs.OntapVersion = "9.17.0"
3424+
assert.NotNil(t, rs)
3425+
tieringPolicy := rs.TieringPolicyValue(ctx)
3426+
assert.Equal(t, "", tieringPolicy)
3427+
server.Close()
3428+
}
3429+
3430+
func TestOntapREST_TieringPolicy_InvalidVersion(t *testing.T) {
3431+
server := httptest.NewServer(http.HandlerFunc(mockResourceNotFound))
3432+
rs := newRestClient(server.Listener.Addr().String(), server.Client())
3433+
rs.OntapVersion = "invalid"
3434+
assert.NotNil(t, rs)
3435+
tieringPolicy := rs.TieringPolicyValue(ctx)
3436+
assert.Equal(t, "none", tieringPolicy)
3437+
server.Close()
3438+
}
3439+
34083440
func mockNvmeNamespaceListResponse(hasNextLink bool, w http.ResponseWriter, r *http.Request) {
34093441
numRecords := int64(1)
34103442
size := int64(1073741824)

0 commit comments

Comments
 (0)