Skip to content

✨ Make the webhook not stomp on container restartPolicy #22

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Feb 18, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ jobs:
name: Lint
runs-on: ubuntu-latest
steps:
- uses: actions/setup-go@v3
- uses: actions/setup-go@v5
with:
go-version: 1.17
go-version: "1.20"
- uses: actions/checkout@v3
- name: golangci-lint
uses: golangci/golangci-lint-action@v3
Expand All @@ -30,17 +30,17 @@ jobs:

steps:
- uses: actions/checkout@v2
- uses: actions/setup-go@v3
- uses: actions/setup-go@v5
with:
go-version: 1.17
go-version: "1.20"
- name: Install Kubebuilder
id: install-kubebuilder
run: |
os=$(go env GOOS)
arch=$(go env GOARCH)
version=2.3.1
curl -L https://github.com/kubernetes-sigs/kubebuilder/releases/download/v${version}/kubebuilder_${version}_${os}_${arch}.tar.gz | tar -xz -C /tmp/
sudo mv /tmp/kubebuilder_2.3.1_${os}_${arch} /usr/local/kubebuilder
version=1.29.3
curl -L https://storage.googleapis.com/kubebuilder-tools/kubebuilder-tools-${version}-${os}-${arch}.tar.gz | tar -xz -C /tmp/
sudo mv /tmp/kubebuilder /usr/local/kubebuilder
- run: make test

build:
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Build the manager binary
FROM golang:1.17 as builder
FROM golang:1.20 AS builder

WORKDIR /workspace
# Copy the Go Modules manifests
Expand Down
8 changes: 2 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# Image URL to use all building/pushing image targets
IMG ?= controller:latest
# Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
CRD_OPTIONS ?= "crd:trivialVersions=true"
CRD_OPTIONS ?= "crd"

# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
ifeq (,$(shell go env GOBIN))
Expand Down Expand Up @@ -69,11 +69,7 @@ controller-gen:
ifeq (, $(shell which controller-gen))
@{ \
set -e ;\
CONTROLLER_GEN_TMP_DIR=$$(mktemp -d) ;\
cd $$CONTROLLER_GEN_TMP_DIR ;\
go mod init tmp ;\
go get sigs.k8s.io/controller-tools/cmd/[email protected] ;\
rm -rf $$CONTROLLER_GEN_TMP_DIR ;\
go install sigs.k8s.io/controller-tools/cmd/[email protected] ;\
}
CONTROLLER_GEN=$(GOBIN)/controller-gen
else
Expand Down
1 change: 0 additions & 1 deletion api/v1beta1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions cmd/waiter/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"io"
"log"
"net/http"
"os"
Expand Down Expand Up @@ -63,7 +63,7 @@ func migratorReady(targetImage, migratorNamespace, migratorName, apiUrl string)
return false, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
body, err := io.ReadAll(resp.Body)
if err != nil {
return false, err
}
Expand Down
61 changes: 26 additions & 35 deletions components/migrations.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import (
"time"

cu "github.com/coderanger/controller-utils"
"github.com/go-logr/logr"
"github.com/pkg/errors"
appsv1 "k8s.io/api/apps/v1"
batchv1 "k8s.io/api/batch/v1"
Expand All @@ -48,11 +47,6 @@ import (

type migrationsComponent struct{}

type migrationsComponentWatchMap struct {
client client.Client
log logr.Logger
}

func Migrations() *migrationsComponent {
return &migrationsComponent{}
}
Expand All @@ -65,33 +59,30 @@ func (comp *migrationsComponent) Setup(ctx *cu.Context, bldr *ctrl.Builder) erro
bldr.Owns(&batchv1.Job{})
bldr.Watches(
&source.Kind{Type: &corev1.Pod{}},
&handler.EnqueueRequestsFromMapFunc{ToRequests: &migrationsComponentWatchMap{client: ctx.Client, log: ctx.Log}},
handler.EnqueueRequestsFromMapFunc(func(obj client.Object) []reconcile.Request {
// Obj is a Pod that just got an event, map it back to any matching Migrators.
requests := []reconcile.Request{}
// Find any Migrator objects that match this pod.
migrators, err := utils.ListMatchingMigrators(context.Background(), ctx.Client, obj)
if err != nil {
ctx.Log.Error(err, "error listing matching migrators")
// TODO Metric to track this for alerting.
return requests
}
for _, migrator := range migrators {
requests = append(requests, reconcile.Request{
NamespacedName: types.NamespacedName{
Name: migrator.Name,
Namespace: migrator.Namespace,
},
})
}
return requests
}),
)
return nil
}

// Watch map function used above.
// Obj is a Pod that just got an event, map it back to any matching Migrators.
func (m *migrationsComponentWatchMap) Map(obj handler.MapObject) []reconcile.Request {
requests := []reconcile.Request{}
// Find any Migrator objects that match this pod.
migrators, err := utils.ListMatchingMigrators(context.Background(), m.client, obj.Meta)
if err != nil {
m.log.Error(err, "error listing matching migrators")
// TODO Metric to track this for alerting.
return requests
}
for _, migrator := range migrators {
requests = append(requests, reconcile.Request{
NamespacedName: types.NamespacedName{
Name: migrator.Name,
Namespace: migrator.Namespace,
},
})
}
return requests
}

func (comp *migrationsComponent) Reconcile(ctx *cu.Context) (cu.Result, error) {
obj := ctx.Object.(*migrationsv1beta1.Migrator)

Expand Down Expand Up @@ -310,9 +301,9 @@ func (comp *migrationsComponent) Reconcile(ctx *cu.Context) (cu.Result, error) {
return cu.Result{}, nil
}

func (_ *migrationsComponent) findOwners(ctx *cu.Context, obj cu.Object) ([]cu.Object, error) {
func (_ *migrationsComponent) findOwners(ctx *cu.Context, obj client.Object) ([]client.Object, error) {
namespace := obj.GetNamespace()
owners := []cu.Object{}
owners := []client.Object{}
for {
owners = append(owners, obj)
ref := metav1.GetControllerOfNoCopy(obj)
Expand All @@ -329,15 +320,15 @@ func (_ *migrationsComponent) findOwners(ctx *cu.Context, obj cu.Object) ([]cu.O
}
return nil, errors.Wrapf(err, "error finding object type for owner reference %v", ref)
}
err = ctx.Client.Get(ctx, types.NamespacedName{Name: ref.Name, Namespace: namespace}, ownerObj)
obj = ownerObj.(client.Object)
err = ctx.Client.Get(ctx, types.NamespacedName{Name: ref.Name, Namespace: namespace}, obj)
if err != nil {
// Gracefully handle objects we don't have access to
if kerrors.IsForbidden(err) {
break
}
return nil, errors.Wrapf(err, "error finding object type for owner reference %v", ref)
}
obj = ownerObj.(cu.Object)
}
// Reverse the slice so it goes top -> bottom.
for i, j := 0, len(owners)-1; i < j; i, j = i+1, j-1 {
Expand All @@ -346,7 +337,7 @@ func (_ *migrationsComponent) findOwners(ctx *cu.Context, obj cu.Object) ([]cu.O
return owners, nil
}

func (_ *migrationsComponent) findSpecFor(ctx *cu.Context, obj cu.Object) *corev1.PodSpec {
func (_ *migrationsComponent) findSpecFor(ctx *cu.Context, obj client.Object) *corev1.PodSpec {
switch v := obj.(type) {
case *corev1.Pod:
return &v.Spec
Expand All @@ -373,7 +364,7 @@ func (_ *migrationsComponent) findSpecFor(ctx *cu.Context, obj cu.Object) *corev
}
}

func (comp *migrationsComponent) findOwnerSpec(ctx *cu.Context, obj cu.Object) (*corev1.PodSpec, error) {
func (comp *migrationsComponent) findOwnerSpec(ctx *cu.Context, obj client.Object) (*corev1.PodSpec, error) {
owners, err := comp.findOwners(ctx, obj)
if err != nil {
return nil, err
Expand Down
Loading
Loading