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