github.com/amanya/packer@v0.12.1-0.20161117214323-902ac5ab2eb6/builder/azure/arm/template_factory.go (about) 1 package arm 2 3 import ( 4 "encoding/json" 5 6 "github.com/Azure/azure-sdk-for-go/arm/compute" 7 "github.com/Azure/azure-sdk-for-go/arm/resources/resources" 8 9 "github.com/mitchellh/packer/builder/azure/common/constants" 10 "github.com/mitchellh/packer/builder/azure/common/template" 11 ) 12 13 type templateFactoryFunc func(*Config) (*resources.Deployment, error) 14 15 func GetKeyVaultDeployment(config *Config) (*resources.Deployment, error) { 16 params := &template.TemplateParameters{ 17 KeyVaultName: &template.TemplateParameter{Value: config.tmpKeyVaultName}, 18 KeyVaultSecretValue: &template.TemplateParameter{Value: config.winrmCertificate}, 19 ObjectId: &template.TemplateParameter{Value: config.ObjectID}, 20 TenantId: &template.TemplateParameter{Value: config.TenantID}, 21 } 22 23 builder, _ := template.NewTemplateBuilder(template.KeyVault) 24 builder.SetTags(&config.AzureTags) 25 26 doc, _ := builder.ToJSON() 27 return createDeploymentParameters(*doc, params) 28 } 29 30 func GetVirtualMachineDeployment(config *Config) (*resources.Deployment, error) { 31 params := &template.TemplateParameters{ 32 AdminUsername: &template.TemplateParameter{Value: config.UserName}, 33 AdminPassword: &template.TemplateParameter{Value: config.Password}, 34 DnsNameForPublicIP: &template.TemplateParameter{Value: config.tmpComputeName}, 35 OSDiskName: &template.TemplateParameter{Value: config.tmpOSDiskName}, 36 StorageAccountBlobEndpoint: &template.TemplateParameter{Value: config.storageAccountBlobEndpoint}, 37 VMSize: &template.TemplateParameter{Value: config.VMSize}, 38 VMName: &template.TemplateParameter{Value: config.tmpComputeName}, 39 } 40 41 builder, _ := template.NewTemplateBuilder(template.BasicTemplate) 42 osType := compute.Linux 43 44 switch config.OSType { 45 case constants.Target_Linux: 46 builder.BuildLinux(config.sshAuthorizedKey) 47 case constants.Target_Windows: 48 osType = compute.Windows 49 builder.BuildWindows(config.tmpKeyVaultName, config.tmpWinRMCertificateUrl) 50 } 51 52 if config.ImageUrl != "" { 53 builder.SetImageUrl(config.ImageUrl, osType) 54 } else { 55 builder.SetMarketPlaceImage(config.ImagePublisher, config.ImageOffer, config.ImageSku, config.ImageVersion) 56 } 57 58 if config.OSDiskSizeGB > 0 { 59 builder.SetOSDiskSizeGB(config.OSDiskSizeGB) 60 } 61 62 if config.customData != "" { 63 builder.SetCustomData(config.customData) 64 } 65 66 if config.VirtualNetworkName != "" { 67 builder.SetVirtualNetwork( 68 config.VirtualNetworkResourceGroupName, 69 config.VirtualNetworkName, 70 config.VirtualNetworkSubnetName) 71 } 72 73 builder.SetTags(&config.AzureTags) 74 doc, _ := builder.ToJSON() 75 return createDeploymentParameters(*doc, params) 76 } 77 78 func createDeploymentParameters(doc string, parameters *template.TemplateParameters) (*resources.Deployment, error) { 79 var template map[string]interface{} 80 err := json.Unmarshal(([]byte)(doc), &template) 81 if err != nil { 82 return nil, err 83 } 84 85 bs, err := json.Marshal(*parameters) 86 if err != nil { 87 return nil, err 88 } 89 90 var templateParameters map[string]interface{} 91 err = json.Unmarshal(bs, &templateParameters) 92 if err != nil { 93 return nil, err 94 } 95 96 return &resources.Deployment{ 97 Properties: &resources.DeploymentProperties{ 98 Mode: resources.Incremental, 99 Template: &template, 100 Parameters: &templateParameters, 101 }, 102 }, nil 103 }