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 }