github.com/marksheahan/packer@v0.10.2-0.20160613200515-1acb2d6645a0/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 return createDeploymentParameters(KeyVault, params) 24 } 25 26 func GetVirtualMachineDeployment(config *Config) (*resources.Deployment, error) { 27 params := &template.TemplateParameters{ 28 AdminUsername: &template.TemplateParameter{Value: config.UserName}, 29 AdminPassword: &template.TemplateParameter{Value: config.Password}, 30 DnsNameForPublicIP: &template.TemplateParameter{Value: config.tmpComputeName}, 31 OSDiskName: &template.TemplateParameter{Value: config.tmpOSDiskName}, 32 StorageAccountBlobEndpoint: &template.TemplateParameter{Value: config.storageAccountBlobEndpoint}, 33 VMSize: &template.TemplateParameter{Value: config.VMSize}, 34 VMName: &template.TemplateParameter{Value: config.tmpComputeName}, 35 } 36 37 builder, _ := template.NewTemplateBuilder() 38 osType := compute.Linux 39 40 switch config.OSType { 41 case constants.Target_Linux: 42 builder.BuildLinux(config.sshAuthorizedKey) 43 case constants.Target_Windows: 44 osType = compute.Windows 45 builder.BuildWindows(config.tmpKeyVaultName, config.tmpWinRMCertificateUrl) 46 } 47 48 if config.ImageUrl != "" { 49 builder.SetImageUrl(config.ImageUrl, osType) 50 } else { 51 builder.SetMarketPlaceImage(config.ImagePublisher, config.ImageOffer, config.ImageSku, config.ImageVersion) 52 } 53 54 doc, _ := builder.ToJSON() 55 return createDeploymentParameters(*doc, params) 56 } 57 58 func createDeploymentParameters(doc string, parameters *template.TemplateParameters) (*resources.Deployment, error) { 59 var template map[string]interface{} 60 err := json.Unmarshal(([]byte)(doc), &template) 61 if err != nil { 62 return nil, err 63 } 64 65 bs, err := json.Marshal(*parameters) 66 if err != nil { 67 return nil, err 68 } 69 70 var templateParameters map[string]interface{} 71 err = json.Unmarshal(bs, &templateParameters) 72 if err != nil { 73 return nil, err 74 } 75 76 return &resources.Deployment{ 77 Properties: &resources.DeploymentProperties{ 78 Mode: resources.Incremental, 79 Template: &template, 80 Parameters: &templateParameters, 81 }, 82 }, nil 83 }