@@ -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" ),
@@ -165,6 +173,9 @@ func (a *API) getVMParameters(name, userdata, sshkey, storageAccountURI string,
165
173
}
166
174
167
175
func (a * API ) CreateInstance (name , userdata , sshkey , resourceGroup , storageAccount string , network Network ) (* Machine , error ) {
176
+ // only VMs are created in the user supplied resource group, kola still manages a resource group
177
+ // for the gallery and storage account.
178
+ vmResourceGroup := a .getVMRG (resourceGroup )
168
179
subnet := network .subnet
169
180
170
181
ip , err := a .createPublicIP (resourceGroup )
@@ -186,22 +197,31 @@ func (a *API) CreateInstance(name, userdata, sshkey, resourceGroup, storageAccou
186
197
vmParams := a .getVMParameters (name , userdata , sshkey , fmt .Sprintf ("https://%s.blob.core.windows.net/" , storageAccount ), ip , nic )
187
198
plog .Infof ("Creating Instance %s" , name )
188
199
189
- future , err := a .compClient .CreateOrUpdate (context .TODO (), resourceGroup , name , vmParams )
200
+ clean := func () {
201
+ _ , _ = a .compClient .Delete (context .TODO (), vmResourceGroup , name , & forceDelete )
202
+ _ , _ = a .intClient .Delete (context .TODO (), resourceGroup , * nic .Name )
203
+ _ , _ = a .ipClient .Delete (context .TODO (), resourceGroup , * ip .Name )
204
+ }
205
+
206
+ future , err := a .compClient .CreateOrUpdate (context .TODO (), vmResourceGroup , name , vmParams )
190
207
if err != nil {
208
+ clean ()
191
209
return nil , err
192
210
}
193
211
err = future .WaitForCompletionRef (context .TODO (), a .compClient .Client )
194
212
if err != nil {
213
+ clean ()
195
214
return nil , err
196
215
}
197
216
_ , err = future .Result (a .compClient )
198
217
if err != nil {
218
+ clean ()
199
219
return nil , err
200
220
}
201
221
plog .Infof ("Instance %s created" , name )
202
222
203
223
err = util .WaitUntilReady (5 * time .Minute , 10 * time .Second , func () (bool , error ) {
204
- vm , err := a .compClient .Get (context .TODO (), resourceGroup , name , "" )
224
+ vm , err := a .compClient .Get (context .TODO (), vmResourceGroup , name , "" )
205
225
if err != nil {
206
226
return false , err
207
227
}
@@ -214,13 +234,11 @@ func (a *API) CreateInstance(name, userdata, sshkey, resourceGroup, storageAccou
214
234
})
215
235
plog .Infof ("Instance %s ready" , name )
216
236
if err != nil {
217
- _ , _ = a .compClient .Delete (context .TODO (), resourceGroup , name , & forceDelete )
218
- _ , _ = a .intClient .Delete (context .TODO (), resourceGroup , * nic .Name )
219
- _ , _ = a .ipClient .Delete (context .TODO (), resourceGroup , * ip .Name )
237
+ clean ()
220
238
return nil , fmt .Errorf ("waiting for machine to become active: %v" , err )
221
239
}
222
240
223
- vm , err := a .compClient .Get (context .TODO (), resourceGroup , name , "" )
241
+ vm , err := a .compClient .Get (context .TODO (), vmResourceGroup , name , "" )
224
242
if err != nil {
225
243
return nil , err
226
244
}
@@ -250,6 +268,7 @@ func (a *API) CreateInstance(name, userdata, sshkey, resourceGroup, storageAccou
250
268
// TerminateInstance deletes a VM created by CreateInstance. Public IP, NIC and
251
269
// OS disk are deleted automatically together with the VM.
252
270
func (a * API ) TerminateInstance (machine * Machine , resourceGroup string ) error {
271
+ resourceGroup = a .getVMRG (resourceGroup )
253
272
future , err := a .compClient .Delete (context .TODO (), resourceGroup , machine .ID , & forceDelete )
254
273
if err != nil {
255
274
return err
@@ -277,7 +296,8 @@ func (a *API) GetConsoleOutput(name, resourceGroup, storageAccount string) ([]by
277
296
k := * kr .Keys
278
297
key := * k [0 ].Value
279
298
280
- vm , err := a .compClient .Get (context .TODO (), resourceGroup , name , compute .InstanceViewTypesInstanceView )
299
+ vmResourceGroup := a .getVMRG (resourceGroup )
300
+ vm , err := a .compClient .Get (context .TODO (), vmResourceGroup , name , compute .InstanceViewTypesInstanceView )
281
301
if err != nil {
282
302
return nil , fmt .Errorf ("could not get VM: %v" , err )
283
303
}
0 commit comments