@@ -18,7 +18,6 @@ import (
18
18
"github.com/Azure/go-autorest/autorest/azure"
19
19
"github.com/golang/glog"
20
20
yaml "gopkg.in/yaml.v2"
21
- corev1 "k8s.io/api/core/v1"
22
21
)
23
22
24
23
// Client is a cloud provider client
@@ -31,10 +30,10 @@ type Client struct {
31
30
32
31
// ClientInt client interface
33
32
type ClientInt interface {
34
- RemoveUserMSI (userAssignedMSIID string , node * corev1. Node ) error
35
- AssignUserMSI (userAssignedMSIID string , node * corev1. Node ) error
36
- UpdateUserMSI (addUserAssignedMSIIDs []string , removeUserAssignedMSIIDs [] string , node * corev1. Node ) error
37
- GetUserMSIs (node * corev1. Node ) ([]string , error )
33
+ RemoveUserMSI (userAssignedMSIID , name string , isvmss bool ) error
34
+ AssignUserMSI (userAssignedMSIID , name string , isvmss bool ) error
35
+ UpdateUserMSI (addUserAssignedMSIIDs , removeUserAssignedMSIIDs []string , name string , isvmss bool ) error
36
+ GetUserMSIs (name string , isvmss bool ) ([]string , error )
38
37
}
39
38
40
39
// NewCloudProvider returns a azure cloud provider client
@@ -152,9 +151,9 @@ func withInspection() autorest.PrepareDecorator {
152
151
}
153
152
}
154
153
155
- // GetUserMSIs will return a list of all identities on the node
156
- func (c * Client ) GetUserMSIs (node * corev1. Node ) ([]string , error ) {
157
- idH , _ , err := c .getIdentityResource (node )
154
+ // GetUserMSIs will return a list of all identities on the node or vmss based on value of isvmss
155
+ func (c * Client ) GetUserMSIs (name string , isvmss bool ) ([]string , error ) {
156
+ idH , _ , err := c .getIdentityResource (name , isvmss )
158
157
if err != nil {
159
158
glog .Errorf ("GetUserMSIs: get identity resource failed with error %v" , err )
160
159
return nil , err
@@ -168,8 +167,8 @@ func (c *Client) GetUserMSIs(node *corev1.Node) ([]string, error) {
168
167
}
169
168
170
169
// UpdateUserMSI will batch process the removal and addition of ids
171
- func (c * Client ) UpdateUserMSI (addUserAssignedMSIIDs []string , removeUserAssignedMSIIDs [] string , node * corev1. Node ) error {
172
- idH , updateFunc , err := c .getIdentityResource (node )
170
+ func (c * Client ) UpdateUserMSI (addUserAssignedMSIIDs , removeUserAssignedMSIIDs []string , name string , isvmss bool ) error {
171
+ idH , updateFunc , err := c .getIdentityResource (name , isvmss )
173
172
if err != nil {
174
173
return err
175
174
}
@@ -184,43 +183,43 @@ func (c *Client) UpdateUserMSI(addUserAssignedMSIIDs []string, removeUserAssigne
184
183
for _ , userAssignedMSIID := range removeUserAssignedMSIIDs {
185
184
requiresUpdate = true
186
185
if err := info .RemoveUserIdentity (userAssignedMSIID ); err != nil {
187
- return fmt .Errorf ("could not remove identity from node %s: %v" , node . Name , err )
186
+ return fmt .Errorf ("could not remove identity from node %s: %v" , name , err )
188
187
}
189
188
}
190
189
// add new ids to the list
191
190
for _ , userAssignedMSIID := range addUserAssignedMSIIDs {
192
191
addedToList := info .AppendUserIdentity (userAssignedMSIID )
193
192
if ! addedToList {
194
- glog .V (6 ).Infof ("Identity %s already assigned to node %s. Skipping assignment." , userAssignedMSIID , node . Name )
193
+ glog .V (6 ).Infof ("Identity %s already assigned to node %s. Skipping assignment." , userAssignedMSIID , name )
195
194
}
196
195
requiresUpdate = requiresUpdate || addedToList
197
196
}
198
197
if requiresUpdate {
199
- glog .Infof ("Updating user assigned MSIs on %s" , node . Name )
198
+ glog .Infof ("Updating user assigned MSIs on %s" , name )
200
199
timeStarted := time .Now ()
201
200
if err := updateFunc (); err != nil {
202
201
return err
203
202
}
204
- glog .V (6 ).Infof ("UpdateUserMSI of %s completed in %s" , node . Name , time .Since (timeStarted ))
203
+ glog .V (6 ).Infof ("UpdateUserMSI of %s completed in %s" , name , time .Since (timeStarted ))
205
204
}
206
205
return nil
207
206
}
208
207
209
208
//RemoveUserMSI - Use the underlying cloud api calls and remove the given user assigned MSI from the vm.
210
- func (c * Client ) RemoveUserMSI (userAssignedMSIID string , node * corev1. Node ) error {
211
- idH , updateFunc , err := c .getIdentityResource (node )
209
+ func (c * Client ) RemoveUserMSI (userAssignedMSIID , name string , isvmss bool ) error {
210
+ idH , updateFunc , err := c .getIdentityResource (name , isvmss )
212
211
if err != nil {
213
212
return err
214
213
}
215
214
216
215
info := idH .IdentityInfo ()
217
216
if info == nil {
218
- glog .Errorf ("Identity null for vm: %s " , node . Name )
219
- return fmt .Errorf ("identity null for vm: %s " , node . Name )
217
+ glog .Errorf ("Identity null for vm: %s " , name )
218
+ return fmt .Errorf ("identity null for vm: %s " , name )
220
219
}
221
220
222
221
if err := info .RemoveUserIdentity (userAssignedMSIID ); err != nil {
223
- return fmt .Errorf ("could not remove identity from node %s: %v" , node . Name , err )
222
+ return fmt .Errorf ("could not remove identity from node %s: %v" , name , err )
224
223
}
225
224
226
225
if err := updateFunc (); err != nil {
@@ -232,18 +231,18 @@ func (c *Client) RemoveUserMSI(userAssignedMSIID string, node *corev1.Node) erro
232
231
}
233
232
234
233
// AssignUserMSI - Use the underlying cloud api call and add the given user assigned MSI to the vm
235
- func (c * Client ) AssignUserMSI (userAssignedMSIID string , node * corev1. Node ) error {
234
+ func (c * Client ) AssignUserMSI (userAssignedMSIID , name string , isvmss bool ) error {
236
235
// Get the vm using the VmClient
237
236
// Update the assigned identity into the VM using the CreateOrUpdate
238
237
239
- glog .Infof ("Find %s in resource group: %s" , node . Name , c .Config .ResourceGroupName )
238
+ glog .Infof ("Find %s in resource group: %s" , name , c .Config .ResourceGroupName )
240
239
timeStarted := time .Now ()
241
240
242
- idH , updateFunc , err := c .getIdentityResource (node )
241
+ idH , updateFunc , err := c .getIdentityResource (name , isvmss )
243
242
if err != nil {
244
243
return err
245
244
}
246
- glog .V (6 ).Infof ("Get of %s completed in %s" , node . Name , time .Since (timeStarted ))
245
+ glog .V (6 ).Infof ("Get of %s completed in %s" , name , time .Since (timeStarted ))
247
246
248
247
info := idH .IdentityInfo ()
249
248
if info == nil {
@@ -255,34 +254,17 @@ func (c *Client) AssignUserMSI(userAssignedMSIID string, node *corev1.Node) erro
255
254
if err := updateFunc (); err != nil {
256
255
return err
257
256
}
258
- glog .V (6 ).Infof ("CreateOrUpdate of %s completed in %s" , node . Name , time .Since (timeStarted ))
257
+ glog .V (6 ).Infof ("CreateOrUpdate of %s completed in %s" , name , time .Since (timeStarted ))
259
258
} else {
260
- glog .V (6 ).Infof ("Identity %s already assigned to node %s. Skipping assignment." , userAssignedMSIID , node . Name )
259
+ glog .V (6 ).Infof ("Identity %s already assigned to node %s. Skipping assignment." , userAssignedMSIID , name )
261
260
}
262
261
return nil
263
262
}
264
263
265
- func (c * Client ) getIdentityResource (node * corev1.Node ) (idH IdentityHolder , update func () error , retErr error ) {
266
- name := node .Name // fallback in case parsing the provider spec fails
264
+ func (c * Client ) getIdentityResource (name string , isvmss bool ) (idH IdentityHolder , update func () error , retErr error ) {
267
265
rg := c .Config .ResourceGroupName
268
- r , err := ParseResourceID (node .Spec .ProviderID )
269
- if err != nil {
270
- glog .Warningf ("Could not parse Azure node resource ID: %v" , err )
271
- }
272
-
273
- rt := vmTypeOrDefault (& r , c .Config .VMType )
274
- glog .V (6 ).Infof ("Using resource type %s for node %s" , rt , name )
275
-
276
- if r .ResourceGroup != "" {
277
- rg = r .ResourceGroup
278
- }
279
-
280
- if r .ResourceName != "" {
281
- name = r .ResourceName
282
- }
283
266
284
- switch rt {
285
- case "vmss" :
267
+ if isvmss {
286
268
vmss , err := c .VMSSClient .Get (rg , name )
287
269
if err != nil {
288
270
return nil , nil , err
@@ -292,16 +274,17 @@ func (c *Client) getIdentityResource(node *corev1.Node) (idH IdentityHolder, upd
292
274
return c .VMSSClient .CreateOrUpdate (rg , name , vmss )
293
275
}
294
276
idH = & vmssIdentityHolder {& vmss }
295
- default :
296
- vm , err := c . VMClient . Get ( rg , name )
297
- if err != nil {
298
- return nil , nil , err
299
- }
300
- update = func () error {
301
- return c . VMClient . CreateOrUpdate ( rg , name , vm )
302
- }
303
- idH = & vmIdentityHolder { & vm }
277
+ return idH , update , nil
278
+ }
279
+
280
+ vm , err := c . VMClient . Get ( rg , name )
281
+ if err != nil {
282
+ return nil , nil , err
283
+ }
284
+ update = func () error {
285
+ return c . VMClient . CreateOrUpdate ( rg , name , vm )
304
286
}
287
+ idH = & vmIdentityHolder {& vm }
305
288
306
289
return idH , update , nil
307
290
}
@@ -315,7 +298,9 @@ var (
315
298
)
316
299
317
300
const (
318
- VMResourceType = "virtualMachines"
301
+ // VMResourceType virtual machine resource type
302
+ VMResourceType = "virtualMachines"
303
+ // VMSSResourceType virtual machine scale sets resource type
319
304
VMSSResourceType = "virtualMachineScaleSets"
320
305
)
321
306
0 commit comments