github.com/kaixiang/packer@v0.5.2-0.20140114230416-1f5786b0d7f1/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) Process(ui packer.Ui, artifact packer.Artifact, dir string) (vagrantfile string, metadata map[string]interface{}, err error) { 19 // Create the metadata 20 metadata = map[string]interface{}{"provider": "digital_ocean"} 21 22 // Determine the image and region... 23 tplData := &digitalOceanVagrantfileTemplate{} 24 25 parts := strings.Split(artifact.Id(), ":") 26 if len(parts) != 2 { 27 err = fmt.Errorf("Poorly formatted artifact ID: %s", artifact.Id()) 28 return 29 } 30 tplData.Region = parts[0] 31 tplData.Image = parts[1] 32 33 // Build up the Vagrantfile 34 var contents bytes.Buffer 35 t := template.Must(template.New("vf").Parse(defaultDigitalOceanVagrantfile)) 36 err = t.Execute(&contents, tplData) 37 vagrantfile = contents.String() 38 return 39 } 40 41 var defaultDigitalOceanVagrantfile = ` 42 Vagrant.configure("2") do |config| 43 config.vm.provider :digital_ocean do |digital_ocean| 44 digital_ocean.image = "{{ .Image }}" 45 digital_ocean.region = "{{ .Region }}" 46 end 47 end 48 `