Skip to content

Commit 24c32b0

Browse files
author
Arvind Thirumurugan
committed
fixes
Signed-off-by: Arvind Thirumurugan <[email protected]>
1 parent 4386f48 commit 24c32b0

File tree

6 files changed

+220
-96
lines changed

6 files changed

+220
-96
lines changed

approval-request-controller/charts/approval-request-controller/templates/rbac.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ metadata:
66
labels:
77
{{- include "approval-request-controller.labels" . | nindent 4 }}
88
rules:
9+
# CRD access for checking prerequisites
10+
- apiGroups: ["apiextensions.k8s.io"]
11+
resources: ["customresourcedefinitions"]
12+
verbs: ["get", "list"]
13+
914
# ApprovalRequest and ClusterApprovalRequest
1015
- apiGroups: ["placement.kubernetes-fleet.io"]
1116
resources: ["approvalrequests", "clusterapprovalrequests"]

approval-request-controller/cmd/approvalrequestcontroller/main.go

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,12 @@ package main
1919
import (
2020
"context"
2121
"flag"
22+
"fmt"
2223
"os"
23-
"time"
2424

2525
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
2626
"k8s.io/apimachinery/pkg/runtime"
2727
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
28-
"k8s.io/apimachinery/pkg/util/wait"
2928
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
3029
"k8s.io/client-go/rest"
3130
"k8s.io/klog/v2"
@@ -74,7 +73,7 @@ func main() {
7473
config := ctrl.GetConfigOrDie()
7574

7675
// Check required CRDs are installed before starting
77-
if err := waitForRequiredCRDs(config); err != nil {
76+
if err := checkRequiredCRDs(config); err != nil {
7877
klog.ErrorS(err, "Required CRDs not found")
7978
os.Exit(1)
8079
}
@@ -126,8 +125,8 @@ func main() {
126125
}
127126
}
128127

129-
// waitForRequiredCRDs checks that all required CRDs are installed
130-
func waitForRequiredCRDs(config *rest.Config) error {
128+
// checkRequiredCRDs checks that all required CRDs are installed
129+
func checkRequiredCRDs(config *rest.Config) error {
131130
requiredCRDs := []string{
132131
"approvalrequests.placement.kubernetes-fleet.io",
133132
"clusterapprovalrequests.placement.kubernetes-fleet.io",
@@ -148,18 +147,23 @@ func waitForRequiredCRDs(config *rest.Config) error {
148147
}
149148

150149
ctx := context.Background()
151-
152-
return wait.PollImmediate(5*time.Second, 2*time.Minute, func() (bool, error) {
153-
for _, crdName := range requiredCRDs {
154-
crd := &apiextensionsv1.CustomResourceDefinition{}
155-
err := c.Get(ctx, client.ObjectKey{Name: crdName}, crd)
156-
if err != nil {
157-
klog.V(2).InfoS("CRD not found yet, waiting...", "crd", crdName)
158-
return false, nil
159-
}
150+
missingCRDs := []string{}
151+
152+
for _, crdName := range requiredCRDs {
153+
crd := &apiextensionsv1.CustomResourceDefinition{}
154+
err := c.Get(ctx, client.ObjectKey{Name: crdName}, crd)
155+
if err != nil {
156+
klog.ErrorS(err, "CRD not found", "crd", crdName)
157+
missingCRDs = append(missingCRDs, crdName)
158+
} else {
160159
klog.V(3).InfoS("CRD found", "crd", crdName)
161160
}
162-
klog.InfoS("All required CRDs are installed")
163-
return true, nil
164-
})
161+
}
162+
163+
if len(missingCRDs) > 0 {
164+
return fmt.Errorf("missing required CRDs: %v", missingCRDs)
165+
}
166+
167+
klog.InfoS("All required CRDs are installed")
168+
return nil
165169
}

approval-request-controller/docker/Dockerfile

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,19 @@ FROM golang:1.24 AS builder
44
WORKDIR /workspace
55

66
# Copy go mod files
7-
COPY go.mod go.sum* ./
7+
COPY approval-request-controller/go.mod approval-request-controller/go.sum* ./
88
RUN go mod download
99

1010
# Copy source code
11-
COPY apis/ apis/
12-
COPY pkg/controllers/approvalrequest/ pkg/controllers/approvalrequest/
13-
COPY pkg/utils/ pkg/utils/
14-
COPY approval-request-controller/cmd/ approval-request-controller/cmd/
11+
COPY approval-request-controller/apis/ apis/
12+
COPY approval-request-controller/pkg/ pkg/
13+
COPY approval-request-controller/cmd/ cmd/
1514

1615
# Build the controller
1716
ARG GOARCH=amd64
1817
RUN CGO_ENABLED=0 GOOS=linux GOARCH=${GOARCH} go build \
1918
-a -o approval-request-controller \
20-
./approval-request-controller/cmd/approvalrequestcontroller
19+
./cmd/approvalrequestcontroller
2120

2221
# Runtime stage
2322
FROM gcr.io/distroless/static:nonroot
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
#!/bin/bash
2+
set -e
3+
4+
# Configuration
5+
HUB_CONTEXT="kind-hub"
6+
IMAGE_NAME="approval-request-controller"
7+
IMAGE_TAG="latest"
8+
NAMESPACE="fleet-system"
9+
CHART_NAME="approval-request-controller"
10+
11+
echo "=== Installing ApprovalRequest Controller on hub cluster ==="
12+
echo "Hub cluster: ${HUB_CONTEXT}"
13+
echo "Namespace: ${NAMESPACE}"
14+
echo ""
15+
16+
# Step 0: Build and load Docker image
17+
echo "Step 0: Building and loading Docker image..."
18+
cd ..
19+
docker buildx build \
20+
--file approval-request-controller/docker/Dockerfile \
21+
--output=type=docker \
22+
--platform=linux/$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') \
23+
--tag ${IMAGE_NAME}:${IMAGE_TAG} \
24+
--build-arg GOARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') \
25+
.
26+
cd approval-request-controller
27+
kind load docker-image ${IMAGE_NAME}:${IMAGE_TAG} --name hub
28+
echo "✓ Docker image built and loaded into kind cluster"
29+
echo ""
30+
31+
# Step 1: Verify kubefleet CRDs are installed
32+
echo "Step 1: Verifying required kubefleet CRDs..."
33+
REQUIRED_CRDS=(
34+
"approvalrequests.placement.kubernetes-fleet.io"
35+
"clusterapprovalrequests.placement.kubernetes-fleet.io"
36+
"clusterresourceplacements.placement.kubernetes-fleet.io"
37+
"clusterresourceoverrides.placement.kubernetes-fleet.io"
38+
"clusterstagedupdateruns.placement.kubernetes-fleet.io"
39+
"stagedupdateruns.placement.kubernetes-fleet.io"
40+
)
41+
42+
MISSING_CRDS=()
43+
for crd in "${REQUIRED_CRDS[@]}"; do
44+
if ! kubectl --context=${HUB_CONTEXT} get crd ${crd} &>/dev/null; then
45+
MISSING_CRDS+=("${crd}")
46+
fi
47+
done
48+
49+
if [ ${#MISSING_CRDS[@]} -ne 0 ]; then
50+
echo "Error: Missing required CRDs from kubefleet hub-agent:"
51+
for crd in "${MISSING_CRDS[@]}"; do
52+
echo " - ${crd}"
53+
done
54+
echo ""
55+
echo "Please ensure kubefleet hub-agent is installed first."
56+
exit 1
57+
fi
58+
59+
echo "✓ All required kubefleet CRDs are installed"
60+
echo ""
61+
62+
# Step 2: Install helm chart on hub cluster (includes MetricCollector, MetricCollectorReport, WorkloadTracker CRDs)
63+
echo "Step 2: Installing helm chart on hub cluster..."
64+
helm upgrade --install ${CHART_NAME} ./charts/${CHART_NAME} \
65+
--kube-context=${HUB_CONTEXT} \
66+
--namespace ${NAMESPACE} \
67+
--create-namespace \
68+
--set image.repository=${IMAGE_NAME} \
69+
--set image.tag=${IMAGE_TAG} \
70+
--set image.pullPolicy=IfNotPresent \
71+
--set controller.logLevel=2
72+
73+
echo "✓ Helm chart installed on hub cluster"
74+
echo ""
75+
76+
# Step 3: Verify installation
77+
echo "Step 3: Verifying installation..."
78+
echo "Checking CRDs installed by this chart..."
79+
kubectl --context=${HUB_CONTEXT} get crd | grep -E "metriccollectors|metriccollectorreports|workloadtrackers" || echo " (CRDs may take a moment to appear)"
80+
81+
echo ""
82+
echo "Checking pods in ${NAMESPACE}..."
83+
kubectl --context=${HUB_CONTEXT} get pods -n ${NAMESPACE} -l app.kubernetes.io/name=${CHART_NAME}
84+
85+
echo ""
86+
echo "=== Installation Complete ==="
87+
echo ""
88+
echo "To check controller logs:"
89+
echo " kubectl --context=${HUB_CONTEXT} logs -n ${NAMESPACE} -l app.kubernetes.io/name=${CHART_NAME} -f"
90+
echo ""
91+
echo "To verify CRDs:"
92+
echo " kubectl --context=${HUB_CONTEXT} get crd | grep placement.kubernetes-fleet.io"
93+
echo ""
94+
echo "Next steps:"
95+
echo " 1. Create a WorkloadTracker to define which workloads to monitor"
96+
echo " 2. ApprovalRequests will be automatically processed when created by staged updates"
97+
echo ""

charts/hub-agent/templates/crds/placement.kubernetes-fleet.io_workloadtrackers.yaml

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)