mirror of https://github.com/hashicorp/packer
Merge pull request #5732 from KohlsTechnology/vagrant_google
Add vagrant post-processor support for Googlepull/5376/head
commit
074ddbea8e
@ -0,0 +1,42 @@
|
||||
package vagrant
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"text/template"
|
||||
|
||||
"github.com/hashicorp/packer/packer"
|
||||
)
|
||||
|
||||
type googleVagrantfileTemplate struct {
|
||||
Image string ""
|
||||
}
|
||||
|
||||
type GoogleProvider struct{}
|
||||
|
||||
func (p *GoogleProvider) KeepInputArtifact() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (p *GoogleProvider) Process(ui packer.Ui, artifact packer.Artifact, dir string) (vagrantfile string, metadata map[string]interface{}, err error) {
|
||||
// Create the metadata
|
||||
metadata = map[string]interface{}{"provider": "google"}
|
||||
|
||||
// Build up the template data to build our Vagrantfile
|
||||
tplData := &googleVagrantfileTemplate{}
|
||||
tplData.Image = artifact.Id()
|
||||
|
||||
// Build up the Vagrantfile
|
||||
var contents bytes.Buffer
|
||||
t := template.Must(template.New("vf").Parse(defaultGoogleVagrantfile))
|
||||
err = t.Execute(&contents, tplData)
|
||||
vagrantfile = contents.String()
|
||||
return
|
||||
}
|
||||
|
||||
var defaultGoogleVagrantfile = `
|
||||
Vagrant.configure("2") do |config|
|
||||
config.vm.provider :google do |google|
|
||||
google.image = "{{ .Image }}"
|
||||
end
|
||||
end
|
||||
`
|
||||
@ -0,0 +1,36 @@
|
||||
package vagrant
|
||||
|
||||
import (
|
||||
"github.com/hashicorp/packer/packer"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestGoogleProvider_impl(t *testing.T) {
|
||||
var _ Provider = new(GoogleProvider)
|
||||
}
|
||||
|
||||
func TestGoogleProvider_KeepInputArtifact(t *testing.T) {
|
||||
p := new(GoogleProvider)
|
||||
|
||||
if !p.KeepInputArtifact() {
|
||||
t.Fatal("should keep input artifact")
|
||||
}
|
||||
}
|
||||
|
||||
func TestGoogleProvider_ArtifactId(t *testing.T) {
|
||||
p := new(GoogleProvider)
|
||||
ui := testUi()
|
||||
artifact := &packer.MockArtifact{
|
||||
IdValue: "packer-1234",
|
||||
}
|
||||
|
||||
vagrantfile, _, err := p.Process(ui, artifact, "foo")
|
||||
if err != nil {
|
||||
t.Fatalf("should not have error: %s", err)
|
||||
}
|
||||
result := `google.image = "packer-1234"`
|
||||
if !strings.Contains(vagrantfile, result) {
|
||||
t.Fatalf("wrong substitution: %s", vagrantfile)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in new issue