Skip to content

Commit 49c585b

Browse files
committed
feat: allow GitRepositoryVerification to reference cross-namespace ConfigMap/Secret
Signed-off-by: pranshul gupta <[email protected]>
1 parent 843cdbd commit 49c585b

File tree

2 files changed

+68
-25
lines changed

2 files changed

+68
-25
lines changed

config/rbac/role.yaml

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,19 @@ rules:
77
- apiGroups:
88
- ""
99
resources:
10-
- events
11-
verbs:
12-
- create
13-
- patch
14-
- apiGroups:
15-
- ""
16-
resources:
10+
- configmaps
1711
- secrets
1812
verbs:
1913
- get
2014
- list
2115
- watch
16+
- apiGroups:
17+
- ""
18+
resources:
19+
- events
20+
verbs:
21+
- create
22+
- patch
2223
- apiGroups:
2324
- ""
2425
resources:

internal/controller/gitrepository_controller.go

Lines changed: 60 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ func getPatchOptions(ownedConditions []string, controllerName string) []patch.Op
124124
// +kubebuilder:rbac:groups=source.toolkit.fluxcd.io,resources=gitrepositories/status,verbs=get;update;patch
125125
// +kubebuilder:rbac:groups=source.toolkit.fluxcd.io,resources=gitrepositories/finalizers,verbs=get;create;update;patch;delete
126126
// +kubebuilder:rbac:groups="",resources=events,verbs=create;patch
127+
// +kubebuilder:rbac:groups="",resources=configmaps,verbs=get;list;watch
127128

128129
// GitRepositoryReconciler reconciles a v1.GitRepository object.
129130
type GitRepositoryReconciler struct {
@@ -1073,25 +1074,66 @@ func (r *GitRepositoryReconciler) verifySignature(ctx context.Context, obj *sour
10731074
return sreconcile.ResultSuccess, nil
10741075
}
10751076

1076-
// Get secret with GPG data
1077-
publicKeySecret := types.NamespacedName{
1078-
Namespace: obj.Namespace,
1079-
Name: obj.Spec.Verification.SecretRef.Name,
1080-
}
1081-
secret := &corev1.Secret{}
1082-
if err := r.Client.Get(ctx, publicKeySecret, secret); err != nil {
1083-
e := serror.NewGeneric(
1084-
fmt.Errorf("PGP public keys secret error: %w", err),
1085-
"VerificationError",
1086-
)
1087-
conditions.MarkFalse(obj, sourcev1.SourceVerifiedCondition, e.Reason, "%s", e)
1088-
return sreconcile.ResultEmpty, e
1089-
}
1077+
var keyRings []string
1078+
1079+
if obj.Spec.Verification.PublicKeyRef != nil {
1080+
// new cross-namespace logic
1081+
ref := obj.Spec.Verification.PublicKeyRef
1082+
switch ref.Kind {
1083+
case "Secret":
1084+
var secret corev1.Secret
1085+
if err := r.Client.Get(ctx, types.NamespacedName{
1086+
Namespace: ref.Namespace,
1087+
Name: ref.Name,
1088+
}, &secret); err != nil {
1089+
e := serror.NewGeneric(
1090+
fmt.Errorf("PGP public keys secret error: %w", err),
1091+
"VerificationError",
1092+
)
1093+
conditions.MarkFalse(obj, sourcev1.SourceVerifiedCondition, e.Reason, "%s", e)
1094+
return sreconcile.ResultEmpty, e
1095+
}
1096+
for _, v := range secret.Data {
1097+
keyRings = append(keyRings, string(v))
1098+
}
1099+
1100+
case "ConfigMap":
1101+
var cm corev1.ConfigMap
1102+
if err := r.Client.Get(ctx, types.NamespacedName{
1103+
Namespace: ref.Namespace,
1104+
Name: ref.Name,
1105+
}, &cm); err != nil {
1106+
e := serror.NewGeneric(
1107+
fmt.Errorf("PGP public keys configmap error: %w", err),
1108+
"VerificationError",
1109+
)
1110+
conditions.MarkFalse(obj, sourcev1.SourceVerifiedCondition, e.Reason, "%s", e)
1111+
return sreconcile.ResultEmpty, e
1112+
}
1113+
for _, v := range cm.Data {
1114+
keyRings = append(keyRings, v)
1115+
}
1116+
}
1117+
} else {
1118+
// fallback to same-namespace SecretRef
1119+
publicKeySecret := types.NamespacedName{
1120+
Namespace: obj.Namespace,
1121+
Name: obj.Spec.Verification.SecretRef.Name,
1122+
}
1123+
secret := &corev1.Secret{}
1124+
if err := r.Client.Get(ctx, publicKeySecret, secret); err != nil {
1125+
e := serror.NewGeneric(
1126+
fmt.Errorf("PGP public keys secret error: %w", err),
1127+
"VerificationError",
1128+
)
1129+
conditions.MarkFalse(obj, sourcev1.SourceVerifiedCondition, e.Reason, "%s", e)
1130+
return sreconcile.ResultEmpty, e
1131+
}
1132+
for _, v := range secret.Data {
1133+
keyRings = append(keyRings, string(v))
1134+
}
1135+
}
10901136

1091-
var keyRings []string
1092-
for _, v := range secret.Data {
1093-
keyRings = append(keyRings, string(v))
1094-
}
10951137

10961138
var message strings.Builder
10971139
if obj.Spec.Verification.VerifyTag() {

0 commit comments

Comments
 (0)