diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index d79d0c0..d03fadc 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -22,7 +22,7 @@ on: jobs: test: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Checkout @@ -53,4 +53,4 @@ jobs: args: --timeout 3m - name: Run tests - run: go test -race -shuffle=on -v ./... \ No newline at end of file + run: go test -race -shuffle=on -v ./... diff --git a/pkg/diskapi/diskapi.go b/pkg/diskapi/diskapi.go index 89dd91e..f1c1958 100644 --- a/pkg/diskapi/diskapi.go +++ b/pkg/diskapi/diskapi.go @@ -70,6 +70,7 @@ type CreateDiskRequest struct { ZoneID string TypeID string Size int64 + BlockSize int64 SnapshotID string DiskPlacementPolicy *DiskPlacementPolicy KMSKeyID string diff --git a/pkg/diskapi/public/public.go b/pkg/diskapi/public/public.go index 7fa94cb..e02d0f4 100644 --- a/pkg/diskapi/public/public.go +++ b/pkg/diskapi/public/public.go @@ -83,6 +83,7 @@ func (d *publicDiskAPI) CreateDisk(ctx context.Context, req *diskapi.CreateDiskR Name: req.Name, Labels: labels, Size: req.Size, + BlockSize: req.BlockSize, DiskPlacementPolicy: convertDiskPlacementPolicyToComputeAPI(req.DiskPlacementPolicy), KmsKeyId: req.KMSKeyID, }, diff --git a/pkg/diskapi/public/public_test.go b/pkg/diskapi/public/public_test.go index 365c72b..875ed52 100644 --- a/pkg/diskapi/public/public_test.go +++ b/pkg/diskapi/public/public_test.go @@ -40,26 +40,28 @@ import ( ) const ( - zoneID = "ru-central1-a" - diskName = "NewVolume" - diskTypeID = "mytype" - instanceID = "NewInstance" - kmsKeyID = "kms-key-id" - defaultDiskSizeBytes = 4 * 1024 * 1024 * 1024 + zoneID = "ru-central1-a" + diskName = "NewVolume" + diskTypeID = "mytype" + instanceID = "NewInstance" + kmsKeyID = "kms-key-id" + defaultDiskSizeBytes = 4 * 1024 * 1024 * 1024 + defaultBlockSizeBytes = 4 * 1024 ) type testResources struct { - t *testing.T - folderID string - networkFolderID string - clusterFolderID string - networkID string - zoneID string - diskTypeID string - diskName string - testData *testData - defaultDiskSizeBytes int64 - kmsKeyID string + t *testing.T + folderID string + networkFolderID string + clusterFolderID string + networkID string + zoneID string + diskTypeID string + diskName string + testData *testData + defaultDiskSizeBytes int64 + defaultBlockSizeBytes int64 + kmsKeyID string } type controllerTest struct { @@ -76,11 +78,12 @@ func TestCreateDisk(t *testing.T) { disk, err := test.diskapi.CreateDisk( context.Background(), &diskapi.CreateDiskRequest{ - Name: test.cloudRes.diskName, - ZoneID: test.cloudRes.zoneID, - TypeID: test.cloudRes.diskTypeID, - Size: test.cloudRes.defaultDiskSizeBytes, - KMSKeyID: test.cloudRes.kmsKeyID, + Name: test.cloudRes.diskName, + ZoneID: test.cloudRes.zoneID, + TypeID: test.cloudRes.diskTypeID, + Size: test.cloudRes.defaultDiskSizeBytes, + BlockSize: test.cloudRes.defaultBlockSizeBytes, + KMSKeyID: test.cloudRes.kmsKeyID, }) require.NoError(t, err) assert.Equal(t, disk.Name, test.cloudRes.diskName) @@ -92,10 +95,11 @@ func TestExpandDisk(t *testing.T) { disk, err := test.diskapi.CreateDisk( context.Background(), &diskapi.CreateDiskRequest{ - Name: test.cloudRes.diskName, - ZoneID: test.cloudRes.zoneID, - TypeID: test.cloudRes.diskTypeID, - Size: test.cloudRes.defaultDiskSizeBytes, + Name: test.cloudRes.diskName, + ZoneID: test.cloudRes.zoneID, + TypeID: test.cloudRes.diskTypeID, + Size: test.cloudRes.defaultDiskSizeBytes, + BlockSize: test.cloudRes.defaultBlockSizeBytes, }) require.NoError(t, err) newSize := disk.Size + 4*1024*1024*1024 @@ -127,10 +131,11 @@ func TestDeleteDisk(t *testing.T) { disk, err := test.diskapi.CreateDisk( context.Background(), &diskapi.CreateDiskRequest{ - Name: test.cloudRes.diskName, - ZoneID: test.cloudRes.zoneID, - TypeID: test.cloudRes.diskTypeID, - Size: test.cloudRes.defaultDiskSizeBytes, + Name: test.cloudRes.diskName, + ZoneID: test.cloudRes.zoneID, + TypeID: test.cloudRes.diskTypeID, + Size: test.cloudRes.defaultDiskSizeBytes, + BlockSize: test.cloudRes.defaultBlockSizeBytes, }) require.NoError(t, err) @@ -168,10 +173,11 @@ func TestGetDisk(t *testing.T) { disk, err := test.diskapi.CreateDisk( context.Background(), &diskapi.CreateDiskRequest{ - Name: test.cloudRes.diskName, - ZoneID: test.cloudRes.zoneID, - TypeID: test.cloudRes.diskTypeID, - Size: test.cloudRes.defaultDiskSizeBytes, + Name: test.cloudRes.diskName, + ZoneID: test.cloudRes.zoneID, + TypeID: test.cloudRes.diskTypeID, + Size: test.cloudRes.defaultDiskSizeBytes, + BlockSize: test.cloudRes.defaultBlockSizeBytes, }) require.NoError(t, err) @@ -201,10 +207,11 @@ func TestGetDiskByName(t *testing.T) { disk, err := test.diskapi.CreateDisk( context.Background(), &diskapi.CreateDiskRequest{ - Name: test.cloudRes.diskName, - ZoneID: test.cloudRes.zoneID, - TypeID: test.cloudRes.diskTypeID, - Size: test.cloudRes.defaultDiskSizeBytes, + Name: test.cloudRes.diskName, + ZoneID: test.cloudRes.zoneID, + TypeID: test.cloudRes.diskTypeID, + Size: test.cloudRes.defaultDiskSizeBytes, + BlockSize: test.cloudRes.defaultBlockSizeBytes, }) require.NoError(t, err) @@ -225,10 +232,11 @@ func TestListDisks(t *testing.T) { disk, err := test.diskapi.CreateDisk( context.Background(), &diskapi.CreateDiskRequest{ - Name: test.cloudRes.diskName, - ZoneID: test.cloudRes.zoneID, - TypeID: test.cloudRes.diskTypeID, - Size: test.cloudRes.defaultDiskSizeBytes, + Name: test.cloudRes.diskName, + ZoneID: test.cloudRes.zoneID, + TypeID: test.cloudRes.diskTypeID, + Size: test.cloudRes.defaultDiskSizeBytes, + BlockSize: test.cloudRes.defaultBlockSizeBytes, }) require.NoError(t, err) diff --git a/pkg/services/constants.go b/pkg/services/constants.go index a751e0c..728422a 100644 --- a/pkg/services/constants.go +++ b/pkg/services/constants.go @@ -37,6 +37,8 @@ const ( DiskPlacementGroupPartitionKey = "diskPlacementGroupPartition" KMSKeyIDKey = "kmsKeyId" + + BlockSizeKey = "blockSize" ) var ( diff --git a/pkg/services/controller/controller.go b/pkg/services/controller/controller.go index 42128e9..57a78c7 100644 --- a/pkg/services/controller/controller.go +++ b/pkg/services/controller/controller.go @@ -604,6 +604,17 @@ func (c *controller) createNewVolume( diskAPIRequest.TypeID = volumeTypeID + blockSizeStr := parameters[services.BlockSizeKey] + if blockSizeStr != "" { + blockSize, err := strconv.ParseInt(blockSizeStr, 10, 64) + if err != nil { + return nil, fmt.Errorf("failed to parse blockSize: %w", err) + } + diskAPIRequest.BlockSize = blockSize + } + + klog.Infof("blockSize: %d", diskAPIRequest.BlockSize) + size, err := getVolumeSize(req.GetCapacityRange()) if err != nil { return nil, err