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  `