From bb0577c636b92b521d0bfee8d43b9349be662173 Mon Sep 17 00:00:00 2001 From: daemon1024 Date: Mon, 20 Sep 2021 11:45:28 +0530 Subject: [PATCH] Add Version Command Displays version info of the cli and running kubearmor image Signed-off-by: Barun Acharya --- Makefile | 7 ++++++- cmd/version.go | 26 ++++++++++++++++++++++++++ version/version.go | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 cmd/version.go create mode 100644 version/version.go diff --git a/Makefile b/Makefile index 60605d52..f7c051de 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,10 @@ CURDIR=$(shell pwd) +VERSION=$(shell git describe --tags --dirty --always) .PHONY: build build: - cd $(CURDIR); go mod tidy; go build -o karmor \ No newline at end of file + cd $(CURDIR) + go mod tidy + CGO_ENABLED=0 go build \ + -ldflags "-w -s -X github.com/kubearmor/kubearmor-client/version.version=${VERSION}" \ + -o karmor \ No newline at end of file diff --git a/cmd/version.go b/cmd/version.go new file mode 100644 index 00000000..dfa46a00 --- /dev/null +++ b/cmd/version.go @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: Apache-2.0 +// Copyright 2021 Authors of KubeArmor + +package cmd + +import ( + "github.com/kubearmor/kubearmor-client/version" + "github.com/spf13/cobra" +) + +// versionCmd represents the get command +var versionCmd = &cobra.Command{ + Use: "version", + Short: "Display version information", + Long: `Display version information`, + RunE: func(cmd *cobra.Command, args []string) error { + if err := version.PrintVersion(client); err != nil { + return err + } + return nil + }, +} + +func init() { + rootCmd.AddCommand(versionCmd) +} diff --git a/version/version.go b/version/version.go new file mode 100644 index 00000000..deb4faf4 --- /dev/null +++ b/version/version.go @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: Apache-2.0 +// Copyright 2021 Authors of KubeArmor + +package version + +import ( + "context" + "fmt" + "runtime" + + "github.com/kubearmor/kubearmor-client/k8s" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +var version string + +func PrintVersion(c *k8s.Client) error { + fmt.Printf("karmor version %s %s/%s\n", version, runtime.GOOS, runtime.GOARCH) + kubearmorVersion, err := getKubeArmorVersion(c) + if err != nil { + return nil + } + if kubearmorVersion == "" { + fmt.Printf("kubearmor not running\n") + return nil + } + fmt.Printf("kubearmor image (running) version %s\n", kubearmorVersion) + return nil +} + +func getKubeArmorVersion(c *k8s.Client) (string, error) { + pods, err := c.K8sClientset.CoreV1().Pods("kube-system").List(context.Background(), metav1.ListOptions{LabelSelector: "kubearmor-app=kubearmor"}) + if err != nil { + return "", err + } + if len(pods.Items) > 0 { + image := pods.Items[0].Spec.Containers[0].Image + return image, nil + } + return "", nil +}