diff --git a/builder/azure/arm/builder.go b/builder/azure/arm/builder.go index f7a555e3a..1bd5e36f2 100644 --- a/builder/azure/arm/builder.go +++ b/builder/azure/arm/builder.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "golang.org/x/net/html/atom" "log" "os" "runtime" @@ -140,30 +141,6 @@ func (b *Builder) Run(ctx context.Context, ui packer.Ui, hook packer.Hook) (pack ui.Error("Warning: You are using Azure Packer Builder to create VHDs which is being deprecated, consider using Managed Images. Learn more http://aka.ms/packermanagedimage") } - // for Managed Images, validate that Shared Gallery Image exists before publishing to SIG - if b.config.isManagedImage() && b.config.SharedGalleryDestination.SigDestinationGalleryName != "" { - _, err = azureClient.GalleryImagesClient.Get(ctx, b.config.SharedGalleryDestination.SigDestinationResourceGroup, b.config.SharedGalleryDestination.SigDestinationGalleryName, b.config.SharedGalleryDestination.SigDestinationImageName) - if err != nil { - return nil, fmt.Errorf("the Shared Gallery Image to which to publish the managed image version to does not exists in the resource group %s", b.config.SharedGalleryDestination.SigDestinationResourceGroup) - } - // SIG requires that replication regions include the region in which the Managed Image resides - foundMandatoryReplicationRegion := false - for _, region := range b.config.SharedGalleryDestination.SigDestinationReplicationRegions { - // change region to lower-case and strip spaces - normalizedRegion := normalizeAzureRegion(region) - if strings.EqualFold(normalizedRegion, b.config.manageImageLocation) { - foundMandatoryReplicationRegion = true - break - } - } - if foundMandatoryReplicationRegion == false { - // return nil, fmt.Errorf("SIG requires that replication regions %v include the region %s in which the Managed Image resides", b.config.SharedGalleryDestination.SigDestinationReplicationRegions, b.config.manageImageLocation) - b.config.SharedGalleryDestination.SigDestinationReplicationRegions = append(b.config.SharedGalleryDestination.SigDestinationReplicationRegions, b.config.manageImageLocation) - b.stateBag.Put(constants.ArmManagedImageSharedGalleryReplicationRegions, b.config.SharedGalleryDestination.SigDestinationReplicationRegions) - ui.Say(fmt.Sprintf("Adding Managed Image region SIG replications regions %v", b.stateBag.Get(constants.ArmManagedImageSharedGalleryReplicationRegions))) - } - } - if b.config.BuildResourceGroupName != "" { group, err := azureClient.GroupsClient.Get(ctx, b.config.BuildResourceGroupName) if err != nil { @@ -201,6 +178,33 @@ func (b *Builder) Run(ctx context.Context, ui packer.Ui, hook packer.Hook) (pack deploymentName := b.stateBag.Get(constants.ArmDeploymentName).(string) + // For Managed Images, validate that Shared Gallery Image exists before publishing to SIG + if b.config.isManagedImage() && b.config.SharedGalleryDestination.SigDestinationGalleryName != "" { + _, err = azureClient.GalleryImagesClient.Get(ctx, b.config.SharedGalleryDestination.SigDestinationResourceGroup, b.config.SharedGalleryDestination.SigDestinationGalleryName, b.config.SharedGalleryDestination.SigDestinationImageName) + if err != nil { + return nil, fmt.Errorf("the Shared Gallery Image to which to publish the managed image version to does not exists in the resource group %s", b.config.SharedGalleryDestination.SigDestinationResourceGroup) + } + // SIG requires that replication regions include the region in which the Managed Image resides + managedImageLocation := normalizeAzureRegion(b.stateBag.Get(constants.ArmLocation).(string)) + foundMandatoryReplicationRegion := false + var normalizedReplicationRegions []string + for _, region := range b.config.SharedGalleryDestination.SigDestinationReplicationRegions { + // change region to lower-case and strip spaces + normalizedRegion := normalizeAzureRegion(region) + normalizedReplicationRegions = append(normalizedReplicationRegions, normalizedRegion) + if strings.EqualFold(normalizedRegion, managedImageLocation) { + foundMandatoryReplicationRegion = true + continue + } + } + if foundMandatoryReplicationRegion == false { + b.config.SharedGalleryDestination.SigDestinationReplicationRegions = append(normalizedReplicationRegions, managedImageLocation) + } + b.stateBag.Put(constants.ArmManagedImageSharedGalleryReplicationRegions, b.config.SharedGalleryDestination.SigDestinationReplicationRegions) + // TODO: amrita remove this log line + ui.Say(fmt.Sprintf("Managed Image region to SIG replications regions %v", b.stateBag.Get(constants.ArmManagedImageSharedGalleryReplicationRegions))) + } + if b.config.OSType == constants.Target_Linux { steps = []multistep.Step{ NewStepCreateResourceGroup(azureClient, ui), @@ -396,7 +400,6 @@ func (b *Builder) configureStateBag(stateBag multistep.StateBag) { stateBag.Put(constants.ArmManagedImageDataDiskSnapshotPrefix, b.config.ManagedImageDataDiskSnapshotPrefix) stateBag.Put(constants.ArmAsyncResourceGroupDelete, b.config.AsyncResourceGroupDelete) if b.config.isManagedImage() && b.config.SharedGalleryDestination.SigDestinationGalleryName != "" { - stateBag.Put(constants.ArmManagedImageSigPublishSubscription, b.config.SharedGalleryDestination.SigDestinationSubscription) stateBag.Put(constants.ArmManagedImageSigPublishResourceGroup, b.config.SharedGalleryDestination.SigDestinationResourceGroup) stateBag.Put(constants.ArmManagedImageSharedGalleryName, b.config.SharedGalleryDestination.SigDestinationGalleryName) stateBag.Put(constants.ArmManagedImageSharedGalleryImageName, b.config.SharedGalleryDestination.SigDestinationImageName) diff --git a/builder/azure/arm/config.go b/builder/azure/arm/config.go index 7dd94efe5..2cc70f43f 100644 --- a/builder/azure/arm/config.go +++ b/builder/azure/arm/config.go @@ -74,7 +74,6 @@ type SharedImageGallery struct { } type SharedImageGalleryDestination struct { - SigDestinationSubscription string `mapstructure:"subscription"` SigDestinationResourceGroup string `mapstructure:"resource_group"` SigDestinationGalleryName string `mapstructure:"gallery_name"` SigDestinationImageName string `mapstructure:"image_name"` @@ -636,9 +635,6 @@ func assertRequiredParametersSet(c *Config, errs *packer.MultiError) { } if c.SharedGalleryDestination.SigDestinationGalleryName != "" { - if c.SharedGalleryDestination.SigDestinationSubscription == "" { - errs = packer.MultiErrorAppend(errs, fmt.Errorf("A subscription must be specified for shared_image_gallery_destination")) - } if c.SharedGalleryDestination.SigDestinationResourceGroup == "" { errs = packer.MultiErrorAppend(errs, fmt.Errorf("A resource_group must be specified for shared_image_gallery_destination")) } diff --git a/builder/azure/arm/step_publish_to_shared_image_gallery.go b/builder/azure/arm/step_publish_to_shared_image_gallery.go index 926e4d705..f290281cd 100644 --- a/builder/azure/arm/step_publish_to_shared_image_gallery.go +++ b/builder/azure/arm/step_publish_to_shared_image_gallery.go @@ -11,7 +11,7 @@ import ( type StepPublishToSharedImageGallery struct { client *AzureClient - publish func(ctx context.Context, mdiID, miSigPubSubscription, miSigPubRg, miSIGalleryName, miSGImageName, miSGImageVersion string, miSigReplicationRegions []string, location string, tags map[string]*string) error + publish func(ctx context.Context, mdiID, miSigPubRg, miSIGalleryName, miSGImageName, miSGImageVersion string, miSigReplicationRegions []string, location string, tags map[string]*string) error say func(message string) error func(e error) toSIG func() bool @@ -35,7 +35,7 @@ func NewStepPublishToSharedImageGallery(client *AzureClient, ui packer.Ui, confi return step } -func (s *StepPublishToSharedImageGallery) publishToSig(ctx context.Context, mdiID string, miSigPubSubscription string, miSigPubRg string, miSIGalleryName string, miSGImageName string, miSGImageVersion string, miSigReplicationRegions []string, location string, tags map[string]*string) error { +func (s *StepPublishToSharedImageGallery) publishToSig(ctx context.Context, mdiID string, miSigPubRg string, miSIGalleryName string, miSGImageName string, miSGImageVersion string, miSigReplicationRegions []string, location string, tags map[string]*string) error { replicationRegions := make([]compute.TargetRegion, len(miSigReplicationRegions)) for i, v := range miSigReplicationRegions { @@ -90,21 +90,19 @@ func (s *StepPublishToSharedImageGallery) Run(ctx context.Context, stateBag mult s.say("Publishing to Shared Image Gallery ...") - var miSigPubSubscription = stateBag.Get(constants.ArmManagedImageSigPublishSubscription).(string) var miSigPubRg = stateBag.Get(constants.ArmManagedImageSigPublishResourceGroup).(string) var miSIGalleryName = stateBag.Get(constants.ArmManagedImageSharedGalleryName).(string) var miSGImageName = stateBag.Get(constants.ArmManagedImageSharedGalleryImageName).(string) var miSGImageVersion = stateBag.Get(constants.ArmManagedImageSharedGalleryImageVersion).(string) - var location = stateBag.Get(constants.ArmManagedImageLocation).(string) + var location = stateBag.Get(constants.ArmLocation).(string) var tags = stateBag.Get(constants.ArmTags).(map[string]*string) var miSigReplicationRegions = stateBag.Get(constants.ArmManagedImageSharedGalleryReplicationRegions).([]string) - var targetManagedImageResourceGroupName = stateBag.Get(constants.ArmManagedImageResourceGroupName).(string) + var targetManagedImageResourceGroupName = stateBag.Get(constants.ArmLocation).(string) var targetManagedImageName = stateBag.Get(constants.ArmManagedImageName).(string) var managedImageSubscription = stateBag.Get(constants.ArmManagedImageSubscription).(string) var mdiID = fmt.Sprintf("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Compute/images/%s", managedImageSubscription, targetManagedImageResourceGroupName, targetManagedImageName) s.say(fmt.Sprintf(" -> MDI ID used for SIG publish : '%s'", mdiID)) - s.say(fmt.Sprintf(" -> SIG publish subscription : '%s'", miSigPubSubscription)) s.say(fmt.Sprintf(" -> SIG publish resource group : '%s'", miSigPubRg)) s.say(fmt.Sprintf(" -> SIG gallery name : '%s'", miSIGalleryName)) s.say(fmt.Sprintf(" -> SIG image name : '%s'", miSGImageName)) @@ -112,7 +110,7 @@ func (s *StepPublishToSharedImageGallery) Run(ctx context.Context, stateBag mult s.say(fmt.Sprintf(" -> SIG replication regions : '%v'", miSigReplicationRegions)) s.say(fmt.Sprintf(" -> SIG publish location : '%s'", location)) s.say(fmt.Sprintf(" -> SIG publish tags : '%v'", tags)) - err := s.publish(ctx, mdiID, miSigPubSubscription, miSigPubRg, miSIGalleryName, miSGImageName, miSGImageVersion, miSigReplicationRegions, location, tags) + err := s.publish(ctx, mdiID, miSigPubRg, miSIGalleryName, miSGImageName, miSGImageVersion, miSigReplicationRegions, location, tags) if err != nil { stateBag.Put(constants.Error, err) diff --git a/builder/azure/common/constants/stateBag.go b/builder/azure/common/constants/stateBag.go index 52603f7ea..cd3c597f0 100644 --- a/builder/azure/common/constants/stateBag.go +++ b/builder/azure/common/constants/stateBag.go @@ -34,7 +34,6 @@ const ( ArmManagedImageResourceGroupName string = "arm.ManagedImageResourceGroupName" ArmManagedImageLocation string = "arm.ManagedImageLocation" ArmManagedImageName string = "arm.ManagedImageName" - ArmManagedImageSigPublishSubscription string = "arm.ManagedImageSigPublishSubscription" ArmManagedImageSigPublishResourceGroup string = "arm.ManagedImageSigPublishResourceGroup" ArmManagedImageSharedGalleryName string = "arm.ManagedImageSharedGalleryName" ArmManagedImageSharedGalleryImageName string = "arm.ManagedImageSharedGalleryImageName" diff --git a/website/source/docs/builders/azure.html.md b/website/source/docs/builders/azure.html.md index 0ab563811..2a4c07f7c 100644 --- a/website/source/docs/builders/azure.html.md +++ b/website/source/docs/builders/azure.html.md @@ -135,7 +135,6 @@ Following is an example. "shared_image_gallery_destination": { - "subscription": "00000000-0000-0000-0000-00000000000", "resource_group": "ResourceGroup", "gallery_name": "GalleryName", "image_name": "ImageName",