github.com/jbronn/packer@v0.1.6-0.20140120165540-8a1364dbd817/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  `