Skip to content

Commit cd305c7

Browse files
committed
add new RBAC verbs
Signed-off-by: Benny Zlotnik <bzlotnik@redhat.com>
1 parent c1ebbb5 commit cd305c7

5 files changed

Lines changed: 44 additions & 12 deletions

File tree

controller/deploy/operator/config/rbac/role.yaml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,10 +243,11 @@ rules:
243243
- virtualtarget.jumpstarter.dev
244244
resources:
245245
- exportersets
246-
- virtualtargetclasses
247246
verbs:
248247
- get
249248
- list
249+
- patch
250+
- update
250251
- watch
251252
- apiGroups:
252253
- virtualtarget.jumpstarter.dev
@@ -263,3 +264,11 @@ rules:
263264
- get
264265
- patch
265266
- update
267+
- apiGroups:
268+
- virtualtarget.jumpstarter.dev
269+
resources:
270+
- virtualtargetclasses
271+
verbs:
272+
- get
273+
- list
274+
- watch

controller/deploy/operator/internal/controller/jumpstarter/exporterset.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ func exporterSetPolicyRules() []rbacv1.PolicyRule {
490490
{
491491
APIGroups: []string{"virtualtarget.jumpstarter.dev"},
492492
Resources: []string{"exportersets"},
493-
Verbs: []string{"get", "list", "watch"},
493+
Verbs: []string{"get", "list", "watch", "update", "patch"},
494494
},
495495
{
496496
APIGroups: []string{"virtualtarget.jumpstarter.dev"},

controller/deploy/operator/internal/controller/jumpstarter/exporterset_test.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,22 +120,20 @@ var _ = Describe("exporterSetPolicyRules", func() {
120120
Expect(groups).To(HaveKey("coordination.k8s.io"))
121121
})
122122

123-
It("should grant read-only access on exportersets (no create/update/delete)", func() {
123+
It("should grant read+update+patch access on exportersets (no create/delete)", func() {
124124
for _, rule := range rules {
125125
if containsString(rule.APIGroups, "virtualtarget.jumpstarter.dev") &&
126126
containsString(rule.Resources, "exportersets") &&
127127
!containsString(rule.Resources, "exportersets/status") &&
128128
!containsString(rule.Resources, "exportersets/scale") &&
129129
!containsString(rule.Resources, "exportersets/finalizers") {
130-
Expect(rule.Verbs).To(ContainElements("get", "list", "watch"))
130+
Expect(rule.Verbs).To(ContainElements("get", "list", "watch", "update", "patch"))
131131
Expect(rule.Verbs).NotTo(ContainElement("create"))
132-
Expect(rule.Verbs).NotTo(ContainElement("update"))
133-
Expect(rule.Verbs).NotTo(ContainElement("patch"))
134132
Expect(rule.Verbs).NotTo(ContainElement("delete"))
135133
return
136134
}
137135
}
138-
Fail("no rule found granting read-only access on exportersets")
136+
Fail("no rule found granting read+update+patch access on exportersets")
139137
})
140138

141139
It("should grant status/scale/finalizer access on exportersets", func() {

controller/deploy/operator/internal/controller/jumpstarter/jumpstarter_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ type JumpstarterReconciler struct {
126126

127127
// virtualtarget.jumpstarter.dev CRD resources (needed to grant permissions to managed
128128
// exporter-set provisioner controllers, see exporterSetPolicyRules)
129-
// +kubebuilder:rbac:groups=virtualtarget.jumpstarter.dev,resources=exportersets,verbs=get;list;watch
129+
// +kubebuilder:rbac:groups=virtualtarget.jumpstarter.dev,resources=exportersets,verbs=get;list;watch;update;patch
130130
// +kubebuilder:rbac:groups=virtualtarget.jumpstarter.dev,resources=exportersets/status;exportersets/scale,verbs=get;update;patch
131131
// +kubebuilder:rbac:groups=virtualtarget.jumpstarter.dev,resources=exportersets/finalizers,verbs=update
132132
// +kubebuilder:rbac:groups=virtualtarget.jumpstarter.dev,resources=virtualtargetclasses,verbs=get;list;watch

controller/hack/utils

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export CLUSTER_TYPE=${CLUSTER_TYPE:-kind}
1818
export K3S_KUBECONFIG=${K3S_KUBECONFIG:-/etc/rancher/k3s/k3s.yaml}
1919

2020
# Color codes for terminal output
21+
export RED='\033[0;31m'
2122
export GREEN='\033[0;32m'
2223
export YELLOW='\033[1;33m'
2324
export NC='\033[0m' # No Color
@@ -226,16 +227,40 @@ wait_for_jumpstarter_resources() {
226227

227228
# Wait for controller deployment to be ready
228229
echo -e "${GREEN} * Waiting for controller deployment to be ready ...${NC}"
229-
kubectl wait --namespace "${namespace}" \
230+
if ! kubectl wait --namespace "${namespace}" \
230231
--for=condition=available deployment/jumpstarter-controller \
231-
--timeout=180s
232+
--timeout=180s; then
233+
echo -e "${RED} * Controller deployment failed to become available. Collecting diagnostics ...${NC}"
234+
echo "--- Deployment status ---"
235+
kubectl get deployment jumpstarter-controller -n "${namespace}" -o wide 2>&1 || true
236+
echo "--- Pod status ---"
237+
kubectl get pods -n "${namespace}" -l app=jumpstarter-controller -o wide 2>&1 || true
238+
echo "--- Pod describe ---"
239+
kubectl describe pods -n "${namespace}" -l app=jumpstarter-controller 2>&1 || true
240+
echo "--- Pod logs ---"
241+
kubectl logs -n "${namespace}" -l app=jumpstarter-controller --tail=100 2>&1 || true
242+
echo "--- Events ---"
243+
kubectl get events -n "${namespace}" --sort-by='.lastTimestamp' --field-selector reason!=Pulling 2>&1 | tail -30 || true
244+
echo "--- Operator logs (last 50 lines) ---"
245+
kubectl logs -n jumpstarter-operator-system -l control-plane=controller-manager --tail=50 2>&1 || true
246+
exit 1
247+
fi
232248

233249
# Wait for router statefulset to be ready
234250
echo -e "${GREEN} * Waiting for router pods to be ready ...${NC}"
235-
kubectl wait --namespace "${namespace}" \
251+
if ! kubectl wait --namespace "${namespace}" \
236252
--for=condition=ready pod \
237253
--selector=app=jumpstarter-router-0 \
238-
--timeout=180s
254+
--timeout=180s; then
255+
echo -e "${RED} * Router pods failed to become ready. Collecting diagnostics ...${NC}"
256+
echo "--- Pod status ---"
257+
kubectl get pods -n "${namespace}" -l app=jumpstarter-router-0 -o wide 2>&1 || true
258+
echo "--- Pod describe ---"
259+
kubectl describe pods -n "${namespace}" -l app=jumpstarter-router-0 2>&1 || true
260+
echo "--- Pod logs ---"
261+
kubectl logs -n "${namespace}" -l app=jumpstarter-router-0 --tail=100 2>&1 || true
262+
exit 1
263+
fi
239264
}
240265

241266
# Wait for gRPC endpoint to be ready

0 commit comments

Comments
 (0)