feat(arm-builder): print warning on zone resiliency for currently not supported locations

This commit is contained in:
Manuel Riezebosch 2019-02-15 16:24:19 +01:00
parent f31031f6b1
commit d79b54e46a
3 changed files with 57 additions and 0 deletions

View File

@ -139,6 +139,8 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
b.config.Location = *group.Location
}
b.config.validateLocationZoneResiliency(ui.Say)
if b.config.StorageAccount != "" {
account, err := b.getBlobAccount(ctx, azureClient, b.config.ResourceGroupName, b.config.StorageAccount)
if err != nil {

View File

@ -725,3 +725,23 @@ func isValidAzureName(re *regexp.Regexp, rgn string) bool {
!strings.HasSuffix(rgn, ".") &&
!strings.HasSuffix(rgn, "-")
}
func (c *Config) validateLocationZoneResiliency(say func(s string)) {
// Docs on regions that support Availibility Zones:
// https://docs.microsoft.com/en-us/azure/availability-zones/az-overview#regions-that-support-availability-zones
// Query technical names for locations:
// az account list-locations --query '[].name' -o tsv
var zones = make(map[string]struct{})
zones["westeurope"] = struct{}{}
zones["centralus"] = struct{}{}
zones["eastus2"] = struct{}{}
zones["francecentral"] = struct{}{}
zones["northeurope"] = struct{}{}
zones["southeastasia"] = struct{}{}
zones["westus2"] = struct{}{}
if _, ok := zones[c.Location]; !ok {
say(fmt.Sprintf("WARNING: Zone resiliency may not be supported in %s, checkout the docs at https://docs.microsoft.com/en-us/azure/availability-zones/", c.Location))
}
}

View File

@ -1681,7 +1681,42 @@ func TestConfigShouldRejectSharedImageGalleryWithVhdTarget(t *testing.T) {
if err != nil {
t.Log("expected an error if Shared Image Gallery source is used with VHD target", err)
}
}
func Test_GivenZoneNotSupportingResiliency_ConfigValidate_ShouldWarn(t *testing.T) {
builderValues := getArmBuilderConfiguration()
builderValues["managed_image_zone_resilient"] = "true"
builderValues["location"] = "ukwest"
c, _, err := newConfig(builderValues, getPackerConfiguration())
if err != nil {
t.Errorf("newConfig failed with %q", err)
}
var m = ""
c.validateLocationZoneResiliency(func(s string) { m = s })
if m != "WARNING: Zone resiliency may not be supported in ukwest, checkout the docs at https://docs.microsoft.com/en-us/azure/availability-zones/" {
t.Errorf("warning message not as expected: %s", m)
}
}
func Test_GivenZoneSupportingResiliency_ConfigValidate_ShouldNotWarn(t *testing.T) {
builderValues := getArmBuilderConfiguration()
builderValues["managed_image_zone_resilient"] = "true"
builderValues["location"] = "westeurope"
c, _, err := newConfig(builderValues, getPackerConfiguration())
if err != nil {
t.Errorf("newConfig failed with %q", err)
}
var m = ""
c.validateLocationZoneResiliency(func(s string) { m = s })
if m != "" {
t.Errorf("warning message not as expected: %s", m)
}
}
func getArmBuilderConfiguration() map[string]string {