github.com/kikitux/packer@v0.10.1-0.20160322154024-6237df566f9f/builder/azure/arm/deployment_factory.go (about)

     1  // Copyright (c) Microsoft Corporation. All rights reserved.
     2  // Licensed under the MIT License. See the LICENSE file in builder/azure for license information.
     3  
     4  package arm
     5  
     6  import (
     7  	"encoding/json"
     8  
     9  	"github.com/Azure/azure-sdk-for-go/arm/resources/resources"
    10  )
    11  
    12  type DeploymentFactory struct {
    13  	template string
    14  }
    15  
    16  func newDeploymentFactory(template string) DeploymentFactory {
    17  	return DeploymentFactory{
    18  		template: template,
    19  	}
    20  }
    21  
    22  func (f *DeploymentFactory) create(templateParameters TemplateParameters) (*resources.Deployment, error) {
    23  	template, err := f.getTemplate(templateParameters)
    24  	if err != nil {
    25  		return nil, err
    26  	}
    27  
    28  	parameters, err := f.getTemplateParameters(templateParameters)
    29  	if err != nil {
    30  		return nil, err
    31  	}
    32  
    33  	return &resources.Deployment{
    34  		Properties: &resources.DeploymentProperties{
    35  			Mode:       resources.Incremental,
    36  			Template:   template,
    37  			Parameters: parameters,
    38  		},
    39  	}, nil
    40  }
    41  
    42  func (f *DeploymentFactory) getTemplate(templateParameters TemplateParameters) (*map[string]interface{}, error) {
    43  	var t map[string]interface{}
    44  	err := json.Unmarshal([]byte(f.template), &t)
    45  
    46  	if err != nil {
    47  		return nil, err
    48  	}
    49  
    50  	return &t, nil
    51  }
    52  
    53  func (f *DeploymentFactory) getTemplateParameters(templateParameters TemplateParameters) (*map[string]interface{}, error) {
    54  	b, err := json.Marshal(templateParameters)
    55  	if err != nil {
    56  		return nil, err
    57  	}
    58  
    59  	var t map[string]interface{}
    60  	err = json.Unmarshal(b, &t)
    61  	if err != nil {
    62  		return nil, err
    63  	}
    64  
    65  	return &t, nil
    66  }