diff --git a/Dockerfile b/Dockerfile index 60953ae..4b0b93b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,8 @@ FROM golang:1.11-stretch as builder WORKDIR /build -COPY * ./ +COPY go.mod go.sum ./ RUN go get +COPY * ./ RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o default-request-adder . FROM scratch diff --git a/main.go b/main.go index dc1997c..98265f9 100644 --- a/main.go +++ b/main.go @@ -1,16 +1,12 @@ package main import ( - "fmt" "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" - "log" - "time" - - "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" + "log" ) func main() { @@ -22,42 +18,32 @@ func main() { if err != nil { panic(err.Error()) } - for { - namespaces, err := clientset.CoreV1().Namespaces().List(metav1.ListOptions{}) - if err != nil { - panic(err.Error()) - } + namespaces, err := clientset.CoreV1().Namespaces().List(metav1.ListOptions{}) + if err != nil { + panic(err.Error()) + } - for _, ns := range namespaces.Items { - fmt.Printf("Checking for LimitRange named extreme-request-defaults in namespace '%v'\n", ns.Name) - if limitRange, err := clientset.CoreV1().LimitRanges(ns.Name).List(metav1.ListOptions{FieldSelector:"metadata.name=extreme-request-defaults"}); err == nil && len(limitRange.Items) == 0 { - fmt.Printf("Trying to create LimitaRange\n") - limits := []v1.LimitRangeItem{ - { - DefaultRequest:v1.ResourceList{"memory": *resource.NewQuantity(1024*1024*1024*1024, resource.BinarySI)}, - }, - } - if _, err := clientset.CoreV1().LimitRanges(ns.Name).Create(&v1.LimitRange{Spec: v1.LimitRangeSpec{Limits: limits}}); err != nil { - log.Printf("Unable to create LimitRange in namespace '%v'\n", ns.Name) - } + for _, ns := range namespaces.Items { + log.Printf("Checking for LimitRange named extreme-request-defaults in namespace '%v'\n", ns.Name) + if limitRange, err := clientset.CoreV1().LimitRanges(ns.Name).List(metav1.ListOptions{FieldSelector: "metadata.name=extreme-request-defaults"}); err == nil && len(limitRange.Items) == 0 { + log.Printf("Trying to create LimitaRange\n") + limits := []v1.LimitRangeItem{ + { + DefaultRequest: v1.ResourceList{"memory": *resource.NewQuantity(1024*1024*1024*1024, resource.BinarySI)}, + Type: "Container", + }, + } + limitRange := v1.LimitRange{ + Spec: v1.LimitRangeSpec{Limits: limits}, + ObjectMeta: metav1.ObjectMeta{ + Name: "extreme-request-defaults", + }, + } + if _, err := clientset.CoreV1().LimitRanges(ns.Name).Create(&limitRange); err != nil { + log.Printf("Unable to create LimitRange in namespace '%v': Error: %v\n", ns.Name, err) + } else { + log.Printf("LimitRange extreme-request-defaults created in namespace '%v'\n", ns.Name) } } - fmt.Printf("There are %d pods in the cluster\n", len(namespaces.Items)) - - // Examples for error handling: - // - Use helper functions like e.g. errors.IsNotFound() - // - And/or cast to StatusError and use its properties like e.g. ErrStatus.Message - _, err = clientset.CoreV1().Pods("default").Get("example-xxxxx", metav1.GetOptions{}) - if errors.IsNotFound(err) { - fmt.Printf("Pod not found\n") - } else if statusError, isStatus := err.(*errors.StatusError); isStatus { - fmt.Printf("Error getting pod %v\n", statusError.ErrStatus.Message) - } else if err != nil { - panic(err.Error()) - } else { - fmt.Printf("Found pod\n") - } - - time.Sleep(10 * time.Second) } }