7
7
"github.com/kubernetes-csi/csi-proxy/pkg/cim"
8
8
"github.com/kubernetes-csi/csi-proxy/pkg/server/system/impl"
9
9
wmierrors "github.com/microsoft/wmi/pkg/errors"
10
- "github.com/microsoft/wmi/server2019/root/cimv2"
11
10
)
12
11
13
12
// Implements the System OS API calls. All code here should be very simple
@@ -26,8 +25,8 @@ type ServiceInfo struct {
26
25
Status uint32 `json:"Status"`
27
26
}
28
27
29
- type stateCheckFunc func () (bool , string , ServiceInterface , error )
30
- type stateTransitionFunc func (ServiceInterface ) error
28
+ type stateCheckFunc func () (bool , string , cim. ServiceInterface , error )
29
+ type stateTransitionFunc func (cim. ServiceInterface ) error
31
30
32
31
const (
33
32
// startServiceErrorCodeAccepted indicates the request is accepted
@@ -81,23 +80,13 @@ func serviceState(status string) uint32 {
81
80
return stateMappings [status ]
82
81
}
83
82
84
- type ServiceInterface interface {
85
- GetPropertyName () (string , error )
86
- GetPropertyDisplayName () (string , error )
87
- GetPropertyState () (string , error )
88
- GetPropertyStartMode () (string , error )
89
- GetDependents () ([]ServiceInterface , error )
90
- StartService () (result uint32 , err error )
91
- StopService () (result uint32 , err error )
92
- }
93
-
94
83
type ServiceManager interface {
95
84
WaitUntilServiceState (stateTransition stateTransitionFunc , stateCheck stateCheckFunc , interval time.Duration , timeout time.Duration ) (string , error )
96
85
GetDependentsForService (name string ) ([]string , error )
97
86
}
98
87
99
88
type ServiceFactory interface {
100
- GetService (name string ) (ServiceInterface , error )
89
+ GetService (name string ) (cim. ServiceInterface , error )
101
90
}
102
91
103
92
type APIImplementor struct {
@@ -106,7 +95,7 @@ type APIImplementor struct {
106
95
}
107
96
108
97
func New () APIImplementor {
109
- serviceFactory := Win32ServiceFactory {}
98
+ serviceFactory := cim. Win32ServiceFactory {}
110
99
return APIImplementor {
111
100
serviceFactory : serviceFactory ,
112
101
serviceManager : ServiceManagerImpl {
@@ -116,36 +105,36 @@ func New() APIImplementor {
116
105
}
117
106
118
107
func (APIImplementor ) GetBIOSSerialNumber () (string , error ) {
119
- bios , err := cim .QueryBIOSElement ([] string { "SerialNumber" } )
108
+ bios , err := cim .QueryBIOSElement (cim . BIOSSelectorList )
120
109
if err != nil {
121
110
return "" , fmt .Errorf ("failed to get BIOS element: %w" , err )
122
111
}
123
112
124
- sn , err := bios . GetPropertySerialNumber ( )
113
+ sn , err := cim . GetBIOSSerialNumber ( bios )
125
114
if err != nil {
126
115
return "" , fmt .Errorf ("failed to get BIOS serial number property: %w" , err )
127
116
}
128
117
129
118
return sn , nil
130
119
}
131
120
132
- func (APIImplementor ) GetService (name string ) (* ServiceInfo , error ) {
133
- service , err := cim . QueryServiceByName (name , [] string { "DisplayName" , "State" , "StartMode" } )
121
+ func (impl APIImplementor ) GetService (name string ) (* ServiceInfo , error ) {
122
+ service , err := impl . serviceFactory . GetService (name )
134
123
if err != nil {
135
124
return nil , fmt .Errorf ("failed to get service %s: %w" , name , err )
136
125
}
137
126
138
- displayName , err := service . GetPropertyDisplayName ( )
127
+ displayName , err := cim . GetServiceDisplayName ( service )
139
128
if err != nil {
140
129
return nil , fmt .Errorf ("failed to get displayName property of service %s: %w" , name , err )
141
130
}
142
131
143
- state , err := service . GetPropertyState ( )
132
+ state , err := cim . GetServiceState ( service )
144
133
if err != nil {
145
134
return nil , fmt .Errorf ("failed to get state property of service %s: %w" , name , err )
146
135
}
147
136
148
- startMode , err := service . GetPropertyStartMode ( )
137
+ startMode , err := cim . GetServiceStartMode ( service )
149
138
if err != nil {
150
139
return nil , fmt .Errorf ("failed to get startMode property of service %s: %w" , name , err )
151
140
}
@@ -158,20 +147,20 @@ func (APIImplementor) GetService(name string) (*ServiceInfo, error) {
158
147
}
159
148
160
149
func (impl APIImplementor ) StartService (name string ) error {
161
- startService := func (service ServiceInterface ) error {
150
+ startService := func (service cim. ServiceInterface ) error {
162
151
retVal , err := service .StartService ()
163
152
if err != nil || (retVal != startServiceErrorCodeAccepted && retVal != startServiceErrorCodeAlreadyRunning ) {
164
153
return fmt .Errorf ("error starting service name %s. return value: %d, error: %v" , name , retVal , err )
165
154
}
166
155
return nil
167
156
}
168
- serviceRunningCheck := func () (bool , string , ServiceInterface , error ) {
157
+ serviceRunningCheck := func () (bool , string , cim. ServiceInterface , error ) {
169
158
service , err := impl .serviceFactory .GetService (name )
170
159
if err != nil {
171
160
return false , "" , nil , err
172
161
}
173
162
174
- state , err := service . GetPropertyState ( )
163
+ state , err := cim . GetServiceState ( service )
175
164
if err != nil {
176
165
return false , state , service , err
177
166
}
@@ -193,7 +182,7 @@ func (impl APIImplementor) StartService(name string) error {
193
182
194
183
func (impl APIImplementor ) stopSingleService (name string ) (bool , error ) {
195
184
var dependentRunning bool
196
- stopService := func (service ServiceInterface ) error {
185
+ stopService := func (service cim. ServiceInterface ) error {
197
186
retVal , err := service .StopService ()
198
187
if err != nil || (retVal != stopServiceErrorCodeAccepted && retVal != stopServiceErrorCodeStopPending ) {
199
188
if retVal == stopServiceErrorCodeDependentRunning {
@@ -204,13 +193,13 @@ func (impl APIImplementor) stopSingleService(name string) (bool, error) {
204
193
}
205
194
return nil
206
195
}
207
- serviceStoppedCheck := func () (bool , string , ServiceInterface , error ) {
196
+ serviceStoppedCheck := func () (bool , string , cim. ServiceInterface , error ) {
208
197
service , err := impl .serviceFactory .GetService (name )
209
198
if err != nil {
210
199
return false , "" , nil , err
211
200
}
212
201
213
- state , err := service . GetPropertyState ( )
202
+ state , err := cim . GetServiceState ( service )
214
203
if err != nil {
215
204
return false , state , service , err
216
205
}
@@ -251,42 +240,6 @@ func (impl APIImplementor) StopService(name string, force bool) error {
251
240
return nil
252
241
}
253
242
254
- type Win32Service struct {
255
- * cimv2.Win32_Service
256
- }
257
-
258
- func (s * Win32Service ) GetDependents () ([]ServiceInterface , error ) {
259
- collection , err := s .GetAssociated ("Win32_DependentService" , "Win32_Service" , "Dependent" , "Antecedent" )
260
- if err != nil {
261
- return nil , err
262
- }
263
-
264
- var result []ServiceInterface
265
- for _ , coll := range collection {
266
- service , err := cimv2 .NewWin32_ServiceEx1 (coll )
267
- if err != nil {
268
- return nil , err
269
- }
270
-
271
- result = append (result , & Win32Service {
272
- service ,
273
- })
274
- }
275
- return result , nil
276
- }
277
-
278
- type Win32ServiceFactory struct {
279
- }
280
-
281
- func (impl Win32ServiceFactory ) GetService (name string ) (ServiceInterface , error ) {
282
- service , err := cim .QueryServiceByName (name , nil )
283
- if err != nil {
284
- return nil , err
285
- }
286
-
287
- return & Win32Service {Win32_Service : service }, nil
288
- }
289
-
290
243
type ServiceManagerImpl struct {
291
244
serviceFactory ServiceFactory
292
245
}
@@ -329,7 +282,7 @@ func (impl ServiceManagerImpl) WaitUntilServiceState(stateTransition stateTransi
329
282
330
283
func (impl ServiceManagerImpl ) GetDependentsForService (name string ) ([]string , error ) {
331
284
var serviceNames []string
332
- var servicesToCheck []ServiceInterface
285
+ var servicesToCheck []cim. ServiceInterface
333
286
servicesByName := map [string ]string {}
334
287
335
288
service , err := impl .serviceFactory .GetService (name )
@@ -343,12 +296,12 @@ func (impl ServiceManagerImpl) GetDependentsForService(name string) ([]string, e
343
296
service = servicesToCheck [i ]
344
297
i += 1
345
298
346
- serviceName , err := service . GetPropertyName ( )
299
+ serviceName , err := cim . GetServiceName ( service )
347
300
if err != nil {
348
301
return serviceNames , err
349
302
}
350
303
351
- currentState , err := service . GetPropertyState ( )
304
+ currentState , err := cim . GetServiceState ( service )
352
305
if err != nil {
353
306
return serviceNames , err
354
307
}
0 commit comments