68 lines
2.0 KiB
Go
68 lines
2.0 KiB
Go
package vagrant
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
packersdk "github.com/hashicorp/packer-plugin-sdk/packer"
|
|
)
|
|
|
|
type AzureProvider struct{}
|
|
|
|
func (p *AzureProvider) KeepInputArtifact() bool {
|
|
return true
|
|
}
|
|
|
|
func (p *AzureProvider) Process(ui packersdk.Ui, artifact packersdk.Artifact, dir string) (vagrantfile string, metadata map[string]interface{}, err error) {
|
|
// Create the metadata
|
|
metadata = map[string]interface{}{"provider": "azure"}
|
|
|
|
var AzureImageProps map[string]string
|
|
AzureImageProps = make(map[string]string)
|
|
|
|
// HACK(double16): It appears we can not access the Azure Artifact directly, so parse String()
|
|
artifactString := artifact.String()
|
|
ui.Message(fmt.Sprintf("artifact string: '%s'", artifactString))
|
|
lines := strings.Split(artifactString, "\n")
|
|
for l := 0; l < len(lines); l++ {
|
|
split := strings.Split(lines[l], ": ")
|
|
if len(split) > 1 {
|
|
AzureImageProps[strings.TrimSpace(split[0])] = strings.TrimSpace(split[1])
|
|
}
|
|
}
|
|
ui.Message(fmt.Sprintf("artifact string parsed: %+v", AzureImageProps))
|
|
|
|
if AzureImageProps["ManagedImageId"] != "" {
|
|
vagrantfile = fmt.Sprintf(managedImageVagrantfile, AzureImageProps["ManagedImageLocation"], AzureImageProps["ManagedImageId"])
|
|
} else if AzureImageProps["OSDiskUri"] != "" {
|
|
vagrantfile = fmt.Sprintf(vhdVagrantfile, AzureImageProps["StorageAccountLocation"], AzureImageProps["OSDiskUri"], AzureImageProps["OSType"])
|
|
} else {
|
|
err = fmt.Errorf("No managed image nor VHD URI found in artifact: %s", artifactString)
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
var managedImageVagrantfile = `
|
|
Vagrant.configure("2") do |config|
|
|
config.vm.provider :azure do |azure, override|
|
|
azure.location = "%s"
|
|
azure.vm_managed_image_id = "%s"
|
|
override.winrm.transport = :ssl
|
|
override.winrm.port = 5986
|
|
end
|
|
end
|
|
`
|
|
|
|
var vhdVagrantfile = `
|
|
Vagrant.configure("2") do |config|
|
|
config.vm.provider :azure do |azure, override|
|
|
azure.location = "%s"
|
|
azure.vm_vhd_uri = "%s"
|
|
azure.vm_operating_system = "%s"
|
|
override.winrm.transport = :ssl
|
|
override.winrm.port = 5986
|
|
end
|
|
end
|
|
`
|