@@ -11,6 +11,7 @@ import (
1111 "github.com/Azure/packer-azure/packer/builder/azure/common/constants"
1212
1313 "github.com/Azure/azure-sdk-for-go/management"
14+ "github.com/Azure/azure-sdk-for-go/management/location"
1415 "github.com/Azure/azure-sdk-for-go/management/osimage"
1516 "github.com/Azure/azure-sdk-for-go/management/storageservice"
1617 vm "github.com/Azure/azure-sdk-for-go/management/virtualmachine"
@@ -31,9 +32,42 @@ func (*StepValidate) Run(state multistep.StateBag) multistep.StepAction {
3132
3233 ui .Say ("Validating Azure options..." )
3334
35+ locationsResponse , err := location .NewClient (client ).ListLocations ()
36+ if err != nil {
37+ err = fmt .Errorf ("Error checking location: %v" , err )
38+ state .Put ("error" , err )
39+ ui .Error (err .Error ())
40+ return multistep .ActionHalt
41+ }
42+ if err := func () error {
43+ for _ , l := range locationsResponse .Locations {
44+ if config .Location == l .Name {
45+ ui .Message ("Checking instance size availability..." )
46+ if ! func () bool {
47+ for _ , size := range l .VirtualMachineRoleSizes {
48+ if size == config .InstanceSize {
49+ return true
50+ }
51+ }
52+ return false
53+ }() {
54+ sizes := strings .Join (l .VirtualMachineRoleSizes , "," )
55+ return fmt .Errorf ("Instance size %q not available in location %q for this subscription, valid instance sizes: %s" ,
56+ config .InstanceSize , config .Location , sizes )
57+ }
58+ return nil
59+ }
60+ }
61+ return fmt .Errorf ("Location %q not available for this subscription, valid locations: %s" , config .Location , locationsResponse .String ())
62+ }(); err != nil {
63+ state .Put ("error" , err )
64+ ui .Error (err .Error ())
65+ return multistep .ActionHalt
66+ }
67+
3468 role := vmutils .NewVMConfiguration (config .tmpVmName , config .InstanceSize )
3569
36- ui .Message ("Checking Storage Account ..." )
70+ ui .Message ("Checking storage account ..." )
3771 destinationVhd , err := validateStorageAccount (config , client )
3872 if err != nil {
3973 err = fmt .Errorf ("Error checking storage account: %v" , err )
@@ -203,7 +237,7 @@ func validateStorageAccount(config *Config, client management.Client) (string, e
203237 }
204238
205239 if sa .StorageServiceProperties .Location != config .Location {
206- return "" , fmt .Errorf ("Storage Account %q is not in location %q, but in location %q." ,
240+ return "" , fmt .Errorf ("Storage account %q is not in location %q, but in location %q." ,
207241 config .StorageAccount , sa .StorageServiceProperties .Location , config .Location )
208242 }
209243
0 commit comments