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  }