diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 558930d6c..86da35c34 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -5,15 +5,22 @@ ``` openSUSE 42.2/ Centos7/ Ubuntu.. ``` ### Terraform Version Report -(Provided by running `terraform -v`.) -### Libvirt version +```sh +terraform -v +``` -```virsh --version``` +### Provider and libvirt versions -### terraform-provider-libvirt plugin version (git-hash) +```sh +terraform-provider-libvirt -version +``` -``` git log``` +If that gives you "was not built correctly", get the Git commit hash from your local provider repository: + +```sh +git describe --always --abbrev=40 --dirty +``` ___ # Description of Issue/Question diff --git a/Makefile b/Makefile index 172a354a4..3c7fa272a 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,15 @@ +LDFLAGS += -X main.version=$$(git describe --always --abbrev=40 --dirty) + default: build build: gofmtcheck golint vet - go build + go build -ldflags "${LDFLAGS}" install: go install test: - go test -v -covermode=count -coverprofile=profile.cov ./libvirt + go test -v -covermode=count -coverprofile=profile.cov . ./libvirt testacc: ./travis/run-tests-acceptance diff --git a/main.go b/main.go index ff25e89e5..7fee0a959 100644 --- a/main.go +++ b/main.go @@ -1,13 +1,32 @@ package main import ( - "github.com/dmacvicar/terraform-provider-libvirt/libvirt" - "github.com/hashicorp/terraform/plugin" + "flag" + "fmt" + "io" + "log" "math/rand" + "os" "time" + + "github.com/dmacvicar/terraform-provider-libvirt/libvirt" + "github.com/hashicorp/terraform/plugin" + libvirtgo "github.com/libvirt/libvirt-go" ) +var version = "was not built correctly" // set via the Makefile + func main() { + versionFlag := flag.Bool("version", false, "print version information and exit") + flag.Parse() + if *versionFlag { + err := printVersion(os.Stdout) + if err != nil { + log.Fatal(err) + } + os.Exit(0) + } + defer libvirt.CleanupLibvirtConnections() plugin.Serve(&plugin.ServeOpts{ @@ -15,6 +34,50 @@ func main() { }) } +func printVersion(writer io.Writer) error { + fmt.Fprintf(writer, "%s %s\n", os.Args[0], version) + + fmt.Fprintf(writer, "Compiled against library: libvirt %s\n", parseVersion(libvirtgo.VERSION_NUMBER)) + + libvirtVersion, err := libvirtgo.GetVersion() + if err != nil { + return err + } + fmt.Fprintf(writer, "Using library: libvirt %s\n", parseVersion(libvirtVersion)) + + conn, err := libvirtgo.NewConnect("") + if err != nil { + return err + } + defer conn.Close() + + hvType, err := conn.GetType() + if err != nil { + return err + } + libvirtVersion, err = conn.GetVersion() + if err != nil { + return err + } + fmt.Fprintf(writer, "Running hypervisor: %s %s\n", hvType, parseVersion(libvirtVersion)) + + libvirtVersion, err = conn.GetLibVersion() + if err != nil { + return err + } + fmt.Fprintf(writer, "Running against daemon: %s\n", parseVersion(libvirtVersion)) + + return nil +} + +func parseVersion(version uint32) string { + release := version % 1000 + version /= 1000 + minor := version % 1000 + major := version / 1000 + return fmt.Sprintf("%d.%d.%d", major, minor, release) +} + func init() { rand.Seed(time.Now().UTC().UnixNano()) } diff --git a/main_test.go b/main_test.go new file mode 100644 index 000000000..c4162025f --- /dev/null +++ b/main_test.go @@ -0,0 +1,21 @@ +package main + +import ( + "bytes" + "regexp" + "testing" +) + +func TestPrintVersion(t *testing.T) { + buf := &bytes.Buffer{} + err := printVersion(buf) + if err != nil { + t.Fatal(err) + } + output := buf.Bytes() + + re := regexp.MustCompile("^.*terraform-provider-libvirt.test was not built correctly\\nCompiled against library: libvirt [0-9.]*\\nUsing library: libvirt [0-9.]*\\nRunning hypervisor: .* [0-9.]*\\nRunning against daemon: [0-9.]*\\n$") + if !re.Match(output) { + t.Fatalf("unexpected output:\n%q", string(output)) + } +}