Skip to content

Commit 746a43a

Browse files
committed
Add getDiskNumberbyDiskName into disk API
Add a function to disk api for getting the disk id through a diskutil.exe with source code here https://gist.github.com/ddebroy/f43cceb2af256bd425bad4502bd8b099
1 parent 49ccfef commit 746a43a

File tree

9 files changed

+269
-38
lines changed

9 files changed

+269
-38
lines changed

client/api/disk/v1alpha1/api.pb.go

Lines changed: 160 additions & 38 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

client/api/disk/v1alpha1/api.proto

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ service Disk {
1313

1414
// Rescan refreshes the host's storage cache
1515
rpc Rescan(RescanRequest) returns (RescanResponse) {}
16+
17+
// GetDiskNumberByName returns disk number based on the passing disk name information
18+
rpc GetDiskNumberByName(GetDiskNumberByNameRequest) returns (GetDiskNumberByNameResponse) {}
1619
}
1720

1821
message ListDiskLocationsRequest {
@@ -47,3 +50,14 @@ message RescanRequest {
4750
message RescanResponse {
4851
// Intentionally empty
4952
}
53+
54+
55+
message GetDiskNumberByNameRequest {
56+
// Disk ID
57+
string disk_name = 1;
58+
}
59+
60+
message GetDiskNumberByNameResponse {
61+
// Disk number
62+
string disk_number = 1;
63+
}

client/groups/disk/v1alpha1/client_generated.go

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/os/disk/api.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,3 +122,12 @@ func (APIImplementor) CreatePartition(diskID string) error {
122122
}
123123
return nil
124124
}
125+
126+
func (APIImplementor) GetDiskNumberByName(diskName string) (string, error) {
127+
out, err := exec.Command("DiskUtil.exe", "-GetDiskNumberWithId", diskName).CombinedOutput()
128+
outString := string(out)
129+
if err != nil {
130+
return "", fmt.Errorf("error getting disk number. %v, output %v", err, out)
131+
}
132+
return strings.TrimSpace(outString), nil
133+
}

internal/server/disk/internal/types.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,12 @@ type RescanRequest struct {
2828

2929
type RescanResponse struct {
3030
}
31+
32+
type GetDiskNumberByNameRequest struct {
33+
// Disk device ID of the disk to partition
34+
DiskName string
35+
}
36+
37+
type GetDiskNumberByNameResponse struct {
38+
DiskNumber string
39+
}

internal/server/disk/internal/types_generated.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/server/disk/internal/v1alpha1/conversion_generated.go

Lines changed: 40 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/server/disk/internal/v1alpha1/server_generated.go

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/server/disk/server.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ type API interface {
2020
PartitionsExist(diskID string) (bool, error)
2121
CreatePartition(diskID string) error
2222
Rescan() error
23+
GetDiskNumberByName(diskName string) (string, error)
2324
}
2425

2526
func NewServer(hostAPI API) (*Server, error) {
@@ -93,3 +94,15 @@ func (s *Server) Rescan(context context.Context, request *internal.RescanRequest
9394
}
9495
return response, nil
9596
}
97+
98+
func (s *Server) GetDiskNumberByName(context context.Context, request *internal.GetDiskNumberByNameRequest, version apiversion.Version) (*internal.GetDiskNumberByNameResponse, error) {
99+
response := &internal.GetDiskNumberByNameResponse{}
100+
diskName := request.DiskName
101+
number, err := s.hostAPI.GetDiskNumberByName(diskName)
102+
if err != nil {
103+
return nil, err
104+
}
105+
106+
response.DiskNumber = number
107+
return response, nil
108+
}

0 commit comments

Comments
 (0)