@@ -46,6 +46,14 @@ func (a *API) getAvset() string {
46
46
return fmt .Sprintf ("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/availabilitySets/%s" , a .Opts .SubscriptionID , a .Opts .ResourceGroup , a .Opts .AvailabilitySet )
47
47
}
48
48
49
+ func (a * API ) getVMRG (rg string ) string {
50
+ vmrg := rg
51
+ if a .Opts .ResourceGroup != "" {
52
+ vmrg = a .Opts .ResourceGroup
53
+ }
54
+ return vmrg
55
+ }
56
+
49
57
func (a * API ) getVMParameters (name , userdata , sshkey , storageAccountURI string , ip * network.PublicIPAddress , nic * network.Interface ) compute.VirtualMachine {
50
58
osProfile := compute.OSProfile {
51
59
AdminUsername : util .StrToPtr ("core" ),
@@ -172,6 +180,9 @@ func (a *API) getVMParameters(name, userdata, sshkey, storageAccountURI string,
172
180
}
173
181
174
182
func (a * API ) CreateInstance (name , userdata , sshkey , resourceGroup , storageAccount string , network Network ) (* Machine , error ) {
183
+ // only VMs are created in the user supplied resource group, kola still manages a resource group
184
+ // for the gallery and storage account.
185
+ vmResourceGroup := a .getVMRG (resourceGroup )
175
186
subnet := network .subnet
176
187
177
188
ip , err := a .createPublicIP (resourceGroup )
@@ -193,22 +204,31 @@ func (a *API) CreateInstance(name, userdata, sshkey, resourceGroup, storageAccou
193
204
vmParams := a .getVMParameters (name , userdata , sshkey , fmt .Sprintf ("https://%s.blob.core.windows.net/" , storageAccount ), ip , nic )
194
205
plog .Infof ("Creating Instance %s" , name )
195
206
196
- future , err := a .compClient .CreateOrUpdate (context .TODO (), resourceGroup , name , vmParams )
207
+ clean := func () {
208
+ _ , _ = a .compClient .Delete (context .TODO (), vmResourceGroup , name , & forceDelete )
209
+ _ , _ = a .intClient .Delete (context .TODO (), resourceGroup , * nic .Name )
210
+ _ , _ = a .ipClient .Delete (context .TODO (), resourceGroup , * ip .Name )
211
+ }
212
+
213
+ future , err := a .compClient .CreateOrUpdate (context .TODO (), vmResourceGroup , name , vmParams )
197
214
if err != nil {
215
+ clean ()
198
216
return nil , err
199
217
}
200
218
err = future .WaitForCompletionRef (context .TODO (), a .compClient .Client )
201
219
if err != nil {
220
+ clean ()
202
221
return nil , err
203
222
}
204
223
_ , err = future .Result (a .compClient )
205
224
if err != nil {
225
+ clean ()
206
226
return nil , err
207
227
}
208
228
plog .Infof ("Instance %s created" , name )
209
229
210
230
err = util .WaitUntilReady (5 * time .Minute , 10 * time .Second , func () (bool , error ) {
211
- vm , err := a .compClient .Get (context .TODO (), resourceGroup , name , "" )
231
+ vm , err := a .compClient .Get (context .TODO (), vmResourceGroup , name , "" )
212
232
if err != nil {
213
233
return false , err
214
234
}
@@ -221,13 +241,11 @@ func (a *API) CreateInstance(name, userdata, sshkey, resourceGroup, storageAccou
221
241
})
222
242
plog .Infof ("Instance %s ready" , name )
223
243
if err != nil {
224
- _ , _ = a .compClient .Delete (context .TODO (), resourceGroup , name , & forceDelete )
225
- _ , _ = a .intClient .Delete (context .TODO (), resourceGroup , * nic .Name )
226
- _ , _ = a .ipClient .Delete (context .TODO (), resourceGroup , * ip .Name )
244
+ clean ()
227
245
return nil , fmt .Errorf ("waiting for machine to become active: %v" , err )
228
246
}
229
247
230
- vm , err := a .compClient .Get (context .TODO (), resourceGroup , name , "" )
248
+ vm , err := a .compClient .Get (context .TODO (), vmResourceGroup , name , "" )
231
249
if err != nil {
232
250
return nil , err
233
251
}
@@ -257,6 +275,7 @@ func (a *API) CreateInstance(name, userdata, sshkey, resourceGroup, storageAccou
257
275
// TerminateInstance deletes a VM created by CreateInstance. Public IP, NIC and
258
276
// OS disk are deleted automatically together with the VM.
259
277
func (a * API ) TerminateInstance (machine * Machine , resourceGroup string ) error {
278
+ resourceGroup = a .getVMRG (resourceGroup )
260
279
future , err := a .compClient .Delete (context .TODO (), resourceGroup , machine .ID , & forceDelete )
261
280
if err != nil {
262
281
return err
@@ -284,7 +303,8 @@ func (a *API) GetConsoleOutput(name, resourceGroup, storageAccount string) ([]by
284
303
k := * kr .Keys
285
304
key := * k [0 ].Value
286
305
287
- vm , err := a .compClient .Get (context .TODO (), resourceGroup , name , compute .InstanceViewTypesInstanceView )
306
+ vmResourceGroup := a .getVMRG (resourceGroup )
307
+ vm , err := a .compClient .Get (context .TODO (), vmResourceGroup , name , compute .InstanceViewTypesInstanceView )
288
308
if err != nil {
289
309
return nil , fmt .Errorf ("could not get VM: %v" , err )
290
310
}
0 commit comments