Skip to content

Commit c55b906

Browse files
committed
Use WMI instead of PowerShell for OS operations
1 parent 67871ec commit c55b906

File tree

1,713 files changed

+477836
-411
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,713 files changed

+477836
-411
lines changed

go.mod

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
module github.com/kubernetes-csi/csi-proxy
22

3-
go 1.20
3+
go 1.22
4+
5+
toolchain go1.23.2
46

57
require (
68
github.com/Microsoft/go-winio v0.6.1
9+
github.com/go-ole/go-ole v1.3.0
710
github.com/google/go-cmp v0.6.0
811
github.com/iancoleman/strcase v0.3.0
912
github.com/kubernetes-csi/csi-proxy/client v0.0.0-00010101000000-000000000000
13+
github.com/microsoft/wmi v0.23.0
1014
github.com/pkg/errors v0.9.1
1115
github.com/sergi/go-diff v1.3.1
1216
github.com/spf13/pflag v1.0.5

go.sum

+6
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7
1616
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
1717
github.com/go-logr/logr v1.2.0 h1:QK40JKJyMdUDz+h+xvCsru/bJhvG0UxvePV0ufL/AcE=
1818
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
19+
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
20+
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
1921
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
2022
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
2123
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -50,6 +52,8 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
5052
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
5153
github.com/mauriciopoppe/gengo v0.0.0-20210525224835-9c78f58f3486 h1:+l047vEi0SyAzdVToIaAcfoY5DwwGW+OyqTdH/P3TTg=
5254
github.com/mauriciopoppe/gengo v0.0.0-20210525224835-9c78f58f3486/go.mod h1:xXv3T4UXTLta31wMhVezwVkc26OLei4hMbLeBJbPmxc=
55+
github.com/microsoft/wmi v0.23.0 h1:EbgjakKBOfb4QaTJNiGkfKrb2RWv7wpyicI2g3DHWkw=
56+
github.com/microsoft/wmi v0.23.0/go.mod h1:PNc5VFG7cpB7VOb3ILZNuWMWsqFfYLPyzpoiFkA6fAQ=
5357
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
5458
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
5559
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -85,10 +89,12 @@ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJ
8589
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
8690
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
8791
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
92+
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
8893
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
8994
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
9095
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
9196
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
97+
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
9298
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
9399
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
94100
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

integrationtests/iscsi_ps_scripts.go

+14-9
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,14 @@ $ProgressPreference = "SilentlyContinue"
4242
$targetName = "%s"
4343
4444
# Get local IPv4 (e.g. 10.30.1.15, not 127.0.0.1)
45-
$address = $(Get-NetIPAddress | Where-Object { $_.InterfaceAlias -eq "Ethernet" -and $_.AddressFamily -eq "IPv4" }).IPAddress
45+
$address = $(Get-NetIPAddress | Where-Object { $_.InterfaceAlias -eq "%s" -and $_.AddressFamily -eq "IPv4" }).IPAddress
4646
4747
# Create virtual disk in RAM
48-
New-IscsiVirtualDisk -Path "ramdisk:scratch-${targetName}.vhdx" -Size 100MB | Out-Null
48+
New-IscsiVirtualDisk -Path "ramdisk:scratch-${targetName}.vhdx" -Size 100MB -ComputerName $env:computername | Out-Null
4949
5050
# Create a target that allows all initiator IQNs and map a disk to the new target
51-
$target = New-IscsiServerTarget -TargetName $targetName -InitiatorIds @("Iqn:*")
52-
Add-IscsiVirtualDiskTargetMapping -TargetName $targetName -DevicePath "ramdisk:scratch-${targetName}.vhdx" | Out-Null
51+
$target = New-IscsiServerTarget -TargetName $targetName -InitiatorIds @("Iqn:*") -ComputerName $env:computername
52+
Add-IscsiVirtualDiskTargetMapping -TargetName $targetName -DevicePath "ramdisk:scratch-${targetName}.vhdx" -ComputerName $env:computername | Out-Null
5353
5454
$output = @{
5555
"iqn" = "$($target.TargetIqn)"
@@ -68,7 +68,7 @@ $username = "%s"
6868
$password = "%s"
6969
$securestring = ConvertTo-SecureString -String $password -AsPlainText -Force
7070
$chap = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList ($username, $securestring)
71-
Set-IscsiServerTarget -TargetName $targetName -EnableChap $true -Chap $chap
71+
Set-IscsiServerTarget -TargetName $targetName -EnableChap $true -Chap $chap -ComputerName $env:computername
7272
`
7373

7474
func setChap(targetName string, username string, password string) error {
@@ -92,7 +92,7 @@ $securestring = ConvertTo-SecureString -String $password -AsPlainText -Force
9292
9393
# Windows initiator does not uses the username for mutual authentication
9494
$chap = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList ($username, $securestring)
95-
Set-IscsiServerTarget -TargetName $targetName -EnableReverseChap $true -ReverseChap $chap
95+
Set-IscsiServerTarget -TargetName $targetName -EnableReverseChap $true -ReverseChap $chap -ComputerName $env:computername
9696
`
9797

9898
func setReverseChap(targetName string, password string) error {
@@ -131,8 +131,8 @@ Get-IscsiTarget | Disconnect-IscsiTarget -Confirm:$false
131131
Get-IscsiTargetPortal | Remove-IscsiTargetPortal -confirm:$false
132132
133133
# Clean target
134-
Get-IscsiServerTarget | Remove-IscsiServerTarget
135-
Get-IscsiVirtualDisk | Remove-IscsiVirtualDisk
134+
Get-IscsiServerTarget -ComputerName $env:computername | Remove-IscsiServerTarget
135+
Get-IscsiVirtualDisk -ComputerName $env:computername | Remove-IscsiVirtualDisk
136136
137137
# Stop iSCSI initiator
138138
Get-Service "MsiSCSI" | Stop-Service
@@ -173,7 +173,12 @@ func runPowershellScript(script string) (string, error) {
173173
}
174174

175175
func setupEnv(targetName string) (*IscsiSetupConfig, error) {
176-
script := fmt.Sprintf(IscsiEnvironmentSetupScript, targetName)
176+
ethernetName := "Ethernet"
177+
if val, ok := os.LookupEnv("ETHERNET_NAME"); ok {
178+
ethernetName = val
179+
}
180+
181+
script := fmt.Sprintf(IscsiEnvironmentSetupScript, targetName, ethernetName)
177182
out, err := runPowershellScript(script)
178183
if err != nil {
179184
return nil, fmt.Errorf("failed setting up environment. err=%v", err)

pkg/cim/disk.go

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package cim
2+
3+
import (
4+
"fmt"
5+
"strconv"
6+
7+
"github.com/microsoft/wmi/pkg/base/query"
8+
"github.com/microsoft/wmi/server2019/root/microsoft/windows/storage"
9+
)
10+
11+
const (
12+
// PartitionStyleUnknown indicates an unknown partition table format
13+
PartitionStyleUnknown = 0
14+
// PartitionStyleGPT indicates the disk uses GUID Partition Table (GPT) format
15+
PartitionStyleGPT = 2
16+
17+
// GPTPartitionTypeBasicData is the GUID for basic data partitions in GPT
18+
// Used for general purpose storage partitions
19+
GPTPartitionTypeBasicData = "{ebd0a0a2-b9e5-4433-87c0-68b6b72699c7}"
20+
// GPTPartitionTypeMicrosoftReserved is the GUID for Microsoft Reserved Partition (MSR)
21+
// Reserved by Windows for system use
22+
GPTPartitionTypeMicrosoftReserved = "{e3c9e316-0b5c-4db8-817d-f92df00215ae}"
23+
)
24+
25+
// QueryDiskByNumber retrieves disk information for a specific disk identified by its number.
26+
func QueryDiskByNumber(diskNumber uint32, selectorList []string) (*storage.MSFT_Disk, error) {
27+
diskQuery := query.NewWmiQueryWithSelectList("MSFT_Disk", selectorList, "Number", strconv.Itoa(int(diskNumber)))
28+
instances, err := QueryInstances(WMINamespaceStorage, diskQuery)
29+
if err != nil {
30+
return nil, err
31+
}
32+
33+
disk, err := storage.NewMSFT_DiskEx1(instances[0])
34+
if err != nil {
35+
return nil, fmt.Errorf("failed to query disk %d. error: %v", diskNumber, err)
36+
}
37+
38+
return disk, nil
39+
}
40+
41+
// ListDisks retrieves information about all available disks.
42+
func ListDisks(selectorList []string) ([]*storage.MSFT_Disk, error) {
43+
diskQuery := query.NewWmiQueryWithSelectList("MSFT_Disk", selectorList)
44+
instances, err := QueryInstances(WMINamespaceStorage, diskQuery)
45+
if IgnoreNotFound(err) != nil {
46+
return nil, err
47+
}
48+
49+
var disks []*storage.MSFT_Disk
50+
for _, instance := range instances {
51+
disk, err := storage.NewMSFT_DiskEx1(instance)
52+
if err != nil {
53+
return nil, fmt.Errorf("failed to query disk %v. error: %v", instance, err)
54+
}
55+
56+
disks = append(disks, disk)
57+
}
58+
59+
return disks, nil
60+
}

0 commit comments

Comments
 (0)