github.com/tonnydourado/packer@v0.6.1-0.20140701134019-5d0cd9676a37/post-processor/vagrant/digitalocean.go (about) 1 package vagrant 2 3 import ( 4 "bytes" 5 "fmt" 6 "github.com/mitchellh/packer/packer" 7 "strings" 8 "text/template" 9 ) 10 11 type digitalOceanVagrantfileTemplate struct { 12 Image string "" 13 Region string "" 14 } 15 16 type DigitalOceanProvider struct{} 17 18 func (p *DigitalOceanProvider) KeepInputArtifact() bool { 19 return true 20 } 21 22 func (p *DigitalOceanProvider) Process(ui packer.Ui, artifact packer.Artifact, dir string) (vagrantfile string, metadata map[string]interface{}, err error) { 23 // Create the metadata 24 metadata = map[string]interface{}{"provider": "digital_ocean"} 25 26 // Determine the image and region... 27 tplData := &digitalOceanVagrantfileTemplate{} 28 29 parts := strings.Split(artifact.Id(), ":") 30 if len(parts) != 2 { 31 err = fmt.Errorf("Poorly formatted artifact ID: %s", artifact.Id()) 32 return 33 } 34 tplData.Region = parts[0] 35 tplData.Image = parts[1] 36 37 // Build up the Vagrantfile 38 var contents bytes.Buffer 39 t := template.Must(template.New("vf").Parse(defaultDigitalOceanVagrantfile)) 40 err = t.Execute(&contents, tplData) 41 vagrantfile = contents.String() 42 return 43 } 44 45 var defaultDigitalOceanVagrantfile = ` 46 Vagrant.configure("2") do |config| 47 config.vm.provider :digital_ocean do |digital_ocean| 48 digital_ocean.image = "{{ .Image }}" 49 digital_ocean.region = "{{ .Region }}" 50 end 51 end 52 `