Skip to content

Commit 5dba530

Browse files
carlyjiangYu Jiang
and
Yu Jiang
authored
upgrade dependencies, go version, controller-runtime, controller-gen (#170)
Signed-off-by: Yu Jiang <[email protected]> Co-authored-by: Yu Jiang <[email protected]>
1 parent 4b80a9d commit 5dba530

18 files changed

+626
-1173
lines changed

.github/workflows/unit_test.yaml

+1-5
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,11 @@ jobs:
1414
- name: Set up Go 1.x
1515
uses: actions/setup-go@v4
1616
with:
17-
go-version: 1.17
17+
go-version: 1.21
1818

1919
- name: Check out code into the Go module directory
2020
uses: actions/checkout@v4
2121

22-
- name: Setup kubebuilder
23-
run: |
24-
make kubebuilder
25-
2622
- name: Build
2723
run: |
2824
make docker-build

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,6 @@ kubebuilder*
2121
.idea/
2222
bin/
2323
.tool-versions
24+
.DS_Store
25+
26+
manager

Dockerfile

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Build the manager binary
2-
FROM golang:1.17 as builder
2+
FROM golang:1.21 as builder
33

44
WORKDIR /workspace
55
# Copy the Go Modules manifests
@@ -10,13 +10,12 @@ COPY go.sum go.sum
1010
RUN go mod download
1111

1212
# Copy the go source
13-
COPY main.go main.go
13+
COPY cmd/ cmd/
1414
COPY api/ api/
15-
COPY controllers/ controllers/
16-
COPY pkg pkg/
17-
COPY internal internal/
15+
COPY pkg/ pkg/
16+
COPY internal/ internal/
1817
# Build
19-
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -v -a -o manager main.go
18+
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -v -a -o manager cmd/main.go
2019

2120
# Use distroless as minimal base image to package the manager binary
2221
# Refer to https://github.com/GoogleContainerTools/distroless for more details

Makefile

+20-17
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@ IMG ?= keikoproj/iam-manager:latest
33

44
# Tools required to run the full suite of tests properly
55
OSNAME ?= $(shell uname -s | tr A-Z a-z)
6-
KUBEBUILDER_VER ?= 2.2.0
76
KUBEBUILDER_ARCH ?= amd64
7+
ENVTEST_K8S_VERSION = 1.28.0
8+
9+
LOCALBIN ?= $(shell pwd)/bin
10+
$(LOCALBIN):
11+
mkdir -p $(LOCALBIN)
812

913
# Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
1014
CRD_OPTIONS ?= "crd:trivialVersions=true"
@@ -22,6 +26,8 @@ CLUSTER_NAME ?= k8s_test_keiko
2226
CLUSTER_OIDC_ISSUER_URL ?= https://google.com/OIDC
2327
DEFAULT_TRUST_POLICY ?= '{"Version": "2012-10-17", "Statement": [{"Effect": "Allow","Principal": {"Federated": "arn:aws:iam::AWS_ACCOUNT_ID:oidc-provider/OIDC_PROVIDER"},"Action": "sts:AssumeRoleWithWebIdentity","Condition": {"StringEquals": {"OIDC_PROVIDER:sub": "system:serviceaccount:{{.NamespaceName}}:SERVICE_ACCOUNT_NAME"}}}, {"Effect": "Allow","Principal": {"AWS": ["arn:aws:iam::{{.AccountID}}:role/trust_role"]},"Action": "sts:AssumeRole"}]}'
2428

29+
ENVTEST ?= $(LOCALBIN)/setup-envtest
30+
2531
# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
2632
ifeq (,$(shell go env GOBIN))
2733
GOBIN := $(shell go env GOPATH)/bin
@@ -31,23 +37,15 @@ endif
3137

3238
all: manager
3339

34-
.PHONY: kubebuilder
35-
kubebuilder:
36-
@echo "Downloading and installing Kubebuilder - this requires sudo privileges"
37-
curl -fsSL -O "https://github.com/kubernetes-sigs/kubebuilder/releases/download/v$(KUBEBUILDER_VER)/kubebuilder_$(KUBEBUILDER_VER)_$(OSNAME)_$(KUBEBUILDER_ARCH).tar.gz"
38-
rm -rf kubebuilder && mkdir -p kubebuilder
39-
tar -zxvf kubebuilder_$(KUBEBUILDER_VER)_$(OSNAME)_$(KUBEBUILDER_ARCH).tar.gz --strip-components 1 -C kubebuilder
40-
sudo cp -rf kubebuilder /usr/local
41-
4240
mock:
43-
go get -u github.com/golang/mock/mockgen
41+
go install github.com/golang/mock/mockgen@v1.6.0
4442
@echo "mockgen is in progess"
4543
@for pkg in $(shell go list ./...) ; do \
4644
go generate ./... ;\
4745
done
4846

4947
# Run tests
50-
test: mock generate fmt manifests
48+
test: mock generate fmt manifests envtest
5149
KUBECONFIG=$(KUBECONFIG) \
5250
LOCAL=$(LOCAL) \
5351
ALLOWED_POLICY_ACTION=$(ALLOWED_POLICY_ACTION) \
@@ -60,15 +58,15 @@ test: mock generate fmt manifests
6058
CLUSTER_NAME=$(CLUSTER_NAME) \
6159
CLUSTER_OIDC_ISSUER_URL="$(CLUSTER_OIDC_ISSUER_URL)" \
6260
DEFAULT_TRUST_POLICY=$(DEFAULT_TRUST_POLICY) \
63-
go test ./... -coverprofile cover.out
61+
KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path)" go test ./... -coverprofile cover.out
6462

6563
# Build manager binary
6664
manager: generate fmt vet update
67-
go build -o bin/manager main.go
65+
go build -o bin/manager cmd/main.go
6866

6967
# Run against the configured Kubernetes cluster in ~/.kube/config
7068
run: generate fmt vet manifests
71-
go run ./main.go
69+
go run ./cmd/main.go
7270

7371
# Install CRDs into a cluster
7472
install: manifests
@@ -96,8 +94,8 @@ update: manifests
9694

9795
# Generate manifests e.g. CRD, RBAC etc.
9896
manifests: controller-gen
99-
$(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases
100-
$(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd_no_webhook/bases
97+
$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases
98+
$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd_no_webhook/bases
10199

102100

103101
# Run go fmt against code
@@ -124,8 +122,13 @@ docker-push:
124122
# download controller-gen if necessary
125123
controller-gen:
126124
ifeq (, $(shell which controller-gen))
127-
go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.2.5
125+
go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.13.0
128126
CONTROLLER_GEN=$(GOBIN)/controller-gen
129127
else
130128
CONTROLLER_GEN=$(shell which controller-gen)
131129
endif
130+
131+
.PHONY: envtest
132+
envtest: $(ENVTEST) ## Download envtest-setup locally if necessary.
133+
$(ENVTEST): $(LOCALBIN)
134+
test -s $(LOCALBIN)/setup-envtest || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest

PROJECT

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version: "2"
1+
version: "3"
22
domain: keikoproj.io
33
repo: github.com/keikoproj/iam-manager
44
resources:

api/v1alpha1/iamrole_webhook.go

+9-8
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"k8s.io/apimachinery/pkg/util/validation/field"
2828
ctrl "sigs.k8s.io/controller-runtime"
2929
"sigs.k8s.io/controller-runtime/pkg/webhook"
30+
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
3031

3132
"github.com/keikoproj/iam-manager/internal/config"
3233
"github.com/keikoproj/iam-manager/pkg/k8s"
@@ -58,7 +59,7 @@ func (r *Iamrole) SetupWebhookWithManager(mgr ctrl.Manager) error {
5859

5960
// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
6061

61-
// +kubebuilder:webhook:path=/mutate-iammanager-keikoproj-io-v1alpha1-iamrole,mutating=true,failurePolicy=fail,groups=iammanager.keikoproj.io,resources=iamroles,verbs=create;update,versions=v1alpha1,name=miamrole.kb.io
62+
// +kubebuilder:webhook:path=/mutate-iammanager-keikoproj-io-v1alpha1-iamrole,mutating=true,failurePolicy=fail,groups=iammanager.keikoproj.io,resources=iamroles,verbs=create;update,versions=v1alpha1,name=miamrole.kb.io,sideEffects=none,admissionReviewVersions=v1
6263

6364
var _ webhook.Defaulter = &Iamrole{}
6465

@@ -74,33 +75,33 @@ func (r *Iamrole) Default() {
7475
}
7576

7677
// TODO(user): change verbs to "verbs=create;update;delete" if you want to enable deletion validation.
77-
// +kubebuilder:webhook:verbs=create;update,path=/validate-iammanager-keikoproj-io-v1alpha1-iamrole,mutating=false,failurePolicy=fail,groups=iammanager.keikoproj.io,resources=iamroles,versions=v1alpha1,name=viamrole.kb.io
78+
// +kubebuilder:webhook:verbs=create;update,path=/validate-iammanager-keikoproj-io-v1alpha1-iamrole,mutating=false,failurePolicy=fail,groups=iammanager.keikoproj.io,resources=iamroles,versions=v1alpha1,name=viamrole.kb.io,sideEffects=none,admissionReviewVersions=v1
7879

7980
var _ webhook.Validator = &Iamrole{}
8081

8182
// ValidateCreate implements webhook.Validator so a webhook will be registered for the type
82-
func (r *Iamrole) ValidateCreate() error {
83+
func (r *Iamrole) ValidateCreate() (admission.Warnings, error) {
8384
log := logging.Logger(context.Background(), "v1alpha1", "ValidateCreate")
8485
log.Info("validating create request", "name", r.Name)
8586

86-
return r.validateIAMPolicy(false)
87+
return []string{}, r.validateIAMPolicy(false)
8788
}
8889

8990
// ValidateUpdate implements webhook.Validator so a webhook will be registered for the type
90-
func (r *Iamrole) ValidateUpdate(old runtime.Object) error {
91+
func (r *Iamrole) ValidateUpdate(old runtime.Object) (admission.Warnings, error) {
9192
log := logging.Logger(context.Background(), "v1alpha1", "ValidateCreate")
9293
log.Info("validate update", "name", r.Name)
9394

94-
return r.validateIAMPolicy(true)
95+
return []string{}, r.validateIAMPolicy(true)
9596
}
9697

9798
// ValidateDelete implements webhook.Validator so a webhook will be registered for the type
98-
func (r *Iamrole) ValidateDelete() error {
99+
func (r *Iamrole) ValidateDelete() (admission.Warnings, error) {
99100
log := logging.Logger(context.Background(), "v1alpha1", "ValidateDelete")
100101
log.Info("validate delete", "name", r.Name)
101102

102103
// TODO(user): fill in your validation logic upon object deletion.
103-
return nil
104+
return []string{}, nil
104105
}
105106

106107
func (r *Iamrole) validateIAMPolicy(isItUpdate bool) error {

api/v1alpha1/zz_generated.deepcopy.go

-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

main.go cmd/main.go

+9-6
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,14 @@ import (
2727
ctrl "sigs.k8s.io/controller-runtime"
2828
"sigs.k8s.io/controller-runtime/pkg/manager"
2929

30+
metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
31+
"sigs.k8s.io/controller-runtime/pkg/webhook"
32+
3033
// +kubebuilder:scaffold:imports
3134

3235
iammanagerv1alpha1 "github.com/keikoproj/iam-manager/api/v1alpha1"
33-
"github.com/keikoproj/iam-manager/controllers"
3436
"github.com/keikoproj/iam-manager/internal/config"
37+
"github.com/keikoproj/iam-manager/internal/controllers"
3538
"github.com/keikoproj/iam-manager/internal/utils"
3639
"github.com/keikoproj/iam-manager/pkg/awsapi"
3740
"github.com/keikoproj/iam-manager/pkg/k8s"
@@ -65,11 +68,11 @@ func main() {
6568
go config.RunConfigMapInformer(context.Background())
6669

6770
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
68-
Scheme: scheme,
69-
MetricsBindAddress: metricsAddr,
70-
LeaderElection: enableLeaderElection,
71-
Port: 9443,
72-
LeaderElectionID: "controller-leader-election-helper",
71+
Scheme: scheme,
72+
Metrics: metricsserver.Options{BindAddress: metricsAddr},
73+
LeaderElection: enableLeaderElection,
74+
WebhookServer: webhook.NewServer(webhook.Options{Port: 9443}),
75+
LeaderElectionID: "controller-leader-election-helper",
7376
})
7477

7578
if err != nil {

0 commit comments

Comments
 (0)