From 7fd5f21fa087a29d5c17906752e97c6ddf9ec4e3 Mon Sep 17 00:00:00 2001 From: vadasambar Date: Wed, 13 Sep 2023 11:23:34 +0530 Subject: [PATCH] feat: add manifests - refactor main.go to use in-cluster rest config - add make recipies to build and push image --- Makefile | 10 ++++++- main.go | 43 +++++++++++++++++-------------- manifests/clusterrole.yaml | 15 +++++++++++ manifests/clusterrolebinding.yaml | 13 ++++++++++ manifests/job.yaml | 23 +++++++++++++++++ manifests/serviceaccount.yaml | 5 ++++ 6 files changed, 88 insertions(+), 21 deletions(-) create mode 100644 manifests/clusterrole.yaml create mode 100644 manifests/clusterrolebinding.yaml create mode 100644 manifests/job.yaml create mode 100644 manifests/serviceaccount.yaml diff --git a/Makefile b/Makefile index 252a669..fa70676 100644 --- a/Makefile +++ b/Makefile @@ -1,2 +1,10 @@ +all: build image push + build: - CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o install-kwok --ldflags "-s" \ No newline at end of file + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o install-kwok --ldflags "-s" + +image: + docker build -t ghcr.io/vadafoss/install-kwok:${TAG} -f Dockerfile.debian . + +push: + docker push ghcr.io/vadafoss/install-kwok:${TAG} \ No newline at end of file diff --git a/main.go b/main.go index a6d20f0..5053742 100644 --- a/main.go +++ b/main.go @@ -11,7 +11,6 @@ import ( "time" log "github.com/sirupsen/logrus" - "golang.org/x/mod/semver" "github.com/google/go-github/v53/github" rbacv1 "k8s.io/api/rbac/v1" @@ -20,7 +19,7 @@ import ( "k8s.io/cli-runtime/pkg/genericclioptions" "k8s.io/client-go/kubernetes" kubeclient "k8s.io/client-go/kubernetes" - "k8s.io/client-go/tools/clientcmd" + "k8s.io/client-go/rest" kubectlcmd "k8s.io/kubectl/pkg/cmd" ) @@ -33,32 +32,36 @@ func init() { func main() { - // Check and load kubeconfig from the path set - // in KUBECONFIG env variable (if not use default path of ~/.kube/config) - apiConfig, err := clientcmd.NewDefaultClientConfigLoadingRules().Load() - if err != nil { - panic(err) - } + // // Check and load kubeconfig from the path set + // // in KUBECONFIG env variable (if not use default path of ~/.kube/config) + // apiConfig, err := clientcmd.NewDefaultClientConfigLoadingRules().Load() + // if err != nil { + // panic(err) + // } - // Create rest config from kubeconfig - restConfig, err := clientcmd.NewDefaultClientConfig(*apiConfig, &clientcmd.ConfigOverrides{}).ClientConfig() + // // Create rest config from kubeconfig + // restConfig, err := clientcmd.NewDefaultClientConfig(*apiConfig, &clientcmd.ConfigOverrides{}).ClientConfig() + // if err != nil { + // panic(err) + // } + + restConfig, err := rest.InClusterConfig() if err != nil { panic(err) } - kubeClient := kubeclient.NewForConfigOrDie(restConfig) - rel, err := GetLatestKwokRelease() - if err != nil { - panic(err) - } + // rel, err := GetLatestKwokRelease() + // if err != nil { + // panic(err) + // } - c := semver.Compare(rel, constants.MinVersion) - if c < 0 { - log.Fatalf("latest release %s is a lower version than min required version %s\n", rel, constants.MinVersion) - } + // c := semver.Compare(rel, constants.MinVersion) + // if c < 0 { + // log.Fatalf("latest release %s is a lower version than min required version %s\n", rel, constants.MinVersion) + // } - installRelease = rel + installRelease = constants.MinVersion // if err := DeleteClusterRoleBinding(kubeClient); !errors.IsNotFound(err) { // log.Infof("failed deleting existing `kwok-provider` ClusterRoleBinding: %v", err) diff --git a/manifests/clusterrole.yaml b/manifests/clusterrole.yaml new file mode 100644 index 0000000..bb74c1c --- /dev/null +++ b/manifests/clusterrole.yaml @@ -0,0 +1,15 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + name: install-kwok-clusterrole +rules: + - apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + # resourceNames: + # - kwok-provider + verbs: + - create + - delete \ No newline at end of file diff --git a/manifests/clusterrolebinding.yaml b/manifests/clusterrolebinding.yaml new file mode 100644 index 0000000..aa03c94 --- /dev/null +++ b/manifests/clusterrolebinding.yaml @@ -0,0 +1,13 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + name: install-kwok-crb +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: install-kwok-clusterrole +subjects: + - kind: ServiceAccount + name: install-kwok + namespace: default diff --git a/manifests/job.yaml b/manifests/job.yaml new file mode 100644 index 0000000..73b79af --- /dev/null +++ b/manifests/job.yaml @@ -0,0 +1,23 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: install-kwok +spec: + template: + spec: + serviceAccountName: install-kwok + containers: + - name: install-kwok + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: SERVICE_ACCOUNT + valueFrom: + fieldRef: + fieldPath: spec.serviceAccountName + image: ghcr.io/vadafoss/install-kwok:debian4 + restartPolicy: Never + backoffLimit: 4 + \ No newline at end of file diff --git a/manifests/serviceaccount.yaml b/manifests/serviceaccount.yaml new file mode 100644 index 0000000..6ee7229 --- /dev/null +++ b/manifests/serviceaccount.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: install-kwok + namespace: default \ No newline at end of file