Skip to content

Commit ec1cde6

Browse files
Merge pull request #229 from smallc2009/feature/support-annotation
Add --enable-annotations flag to allow custom annotations on generated Secrets
2 parents 22a4093 + 7b32dc8 commit ec1cde6

File tree

5 files changed

+41
-17
lines changed

5 files changed

+41
-17
lines changed

cmd/main.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,9 @@ func main() {
100100
var probeAddr string
101101
var secureMetrics bool
102102
var enableHTTP2 bool
103+
var enableAnnotations bool
103104
var tlsOpts []func(*tls.Config)
104-
flag.StringVar(&metricsAddr, "metrics-bind-address", "8080",
105+
flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080",
105106
"The address the metrics endpoint binds to. "+
106107
"Use :8443 for HTTPS or :8080 for HTTP, or leave as 0 to disable the metrics service.")
107108
flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081",
@@ -119,6 +120,8 @@ func main() {
119120
"The name of the metrics server key file.")
120121
flag.BoolVar(&enableHTTP2, "enable-http2", false,
121122
"If set, HTTP/2 will be enabled for the metrics")
123+
flag.BoolVar(&enableAnnotations, "enable-annotations", false,
124+
"If set, operator will add annotations to resources it manages.")
122125
opts := zap.Options{
123126
Development: true,
124127
}
@@ -289,9 +292,10 @@ func main() {
289292
}
290293

291294
if err = (&controller.OnePasswordItemReconciler{
292-
Client: mgr.GetClient(),
293-
Scheme: mgr.GetScheme(),
294-
OpClient: opClient,
295+
Client: mgr.GetClient(),
296+
Scheme: mgr.GetScheme(),
297+
OpClient: opClient,
298+
EnableAnnotations: enableAnnotations,
295299
}).SetupWithManager(mgr); err != nil {
296300
setupLog.Error(err, "unable to create controller", "controller", "OnePasswordItem")
297301
os.Exit(1)

internal/controller/deployment_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,5 +219,5 @@ func (r *DeploymentReconciler) handleApplyingDeployment(ctx context.Context, dep
219219
UID: deployment.GetUID(),
220220
}
221221

222-
return kubeSecrets.CreateKubernetesSecretFromItem(ctx, r.Client, secretName, namespace, item, annotations[op.RestartDeploymentsAnnotation], secretLabels, secretType, ownerRef)
222+
return kubeSecrets.CreateKubernetesSecretFromItem(ctx, r.Client, secretName, namespace, item, annotations[op.RestartDeploymentsAnnotation], secretLabels, annotations, secretType, ownerRef)
223223
}

internal/controller/onepassworditem_controller.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,9 @@ var finalizer = "onepassword.com/finalizer.secret"
5353
// OnePasswordItemReconciler reconciles a OnePasswordItem object
5454
type OnePasswordItemReconciler struct {
5555
client.Client
56-
Scheme *runtime.Scheme
57-
OpClient opclient.Client
56+
Scheme *runtime.Scheme
57+
OpClient opclient.Client
58+
EnableAnnotations bool
5859
}
5960

6061
// +kubebuilder:rbac:groups=onepassword.com,resources=onepassworditems,verbs=get;list;watch;create;update;patch;delete
@@ -163,6 +164,12 @@ func (r *OnePasswordItemReconciler) handleOnePasswordItem(ctx context.Context, r
163164
labels := resource.Labels
164165
secretType := resource.Type
165166
autoRestart := resource.Annotations[op.RestartDeploymentsAnnotation]
167+
var annotations map[string]string
168+
if r.EnableAnnotations {
169+
annotations = resource.Annotations
170+
} else {
171+
annotations = nil
172+
}
166173

167174
item, err := op.GetOnePasswordItemByPath(ctx, r.OpClient, resource.Spec.ItemPath)
168175
if err != nil {
@@ -181,7 +188,7 @@ func (r *OnePasswordItemReconciler) handleOnePasswordItem(ctx context.Context, r
181188
UID: resource.GetUID(),
182189
}
183190

184-
return kubeSecrets.CreateKubernetesSecretFromItem(ctx, r.Client, secretName, resource.Namespace, item, autoRestart, labels, secretType, ownerRef)
191+
return kubeSecrets.CreateKubernetesSecretFromItem(ctx, r.Client, secretName, resource.Namespace, item, autoRestart, labels, annotations, secretType, ownerRef)
185192
}
186193

187194
func (r *OnePasswordItemReconciler) updateStatus(ctx context.Context, resource *onepasswordv1.OnePasswordItem, err error) error {

pkg/kubernetessecrets/kubernetes_secrets_builder.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,16 @@ func CreateKubernetesSecretFromItem(
3737
item *model.Item,
3838
autoRestart string,
3939
labels map[string]string,
40+
secretAnnotations map[string]string,
4041
secretType string,
4142
ownerRef *metav1.OwnerReference,
4243
) error {
4344
itemVersion := fmt.Sprint(item.Version)
44-
secretAnnotations := map[string]string{
45-
VersionAnnotation: itemVersion,
46-
ItemPathAnnotation: fmt.Sprintf("vaults/%v/items/%v", item.VaultID, item.ID),
45+
if secretAnnotations == nil {
46+
secretAnnotations = map[string]string{}
4747
}
48+
secretAnnotations[VersionAnnotation] = itemVersion
49+
secretAnnotations[ItemPathAnnotation] = fmt.Sprintf("vaults/%v/items/%v", item.VaultID, item.ID)
4850

4951
if autoRestart != "" {
5052
_, err := utils.StringToBool(autoRestart)

pkg/kubernetessecrets/kubernetes_secrets_builder_test.go

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,11 @@ func TestCreateKubernetesSecretFromOnePasswordItem(t *testing.T) {
3636
kubeClient := fake.NewClientBuilder().Build()
3737
secretLabels := map[string]string{}
3838
secretType := ""
39-
39+
secretAnnotations := map[string]string{
40+
"testAnnotation": "exists",
41+
}
4042
err := CreateKubernetesSecretFromItem(ctx, kubeClient, secretName, namespace, &item, restartDeploymentAnnotation,
41-
secretLabels, secretType, nil)
43+
secretLabels, secretAnnotations, secretType, nil)
4244
if err != nil {
4345
t.Errorf("Unexpected error: %v", err)
4446
}
@@ -66,6 +68,9 @@ func TestKubernetesSecretFromOnePasswordItemOwnerReferences(t *testing.T) {
6668
kubeClient := fake.NewClientBuilder().Build()
6769
secretLabels := map[string]string{}
6870
secretType := ""
71+
secretAnnotations := map[string]string{
72+
"testAnnotation": "exists",
73+
}
6974

7075
ownerRef := &metav1.OwnerReference{
7176
Kind: "Deployment",
@@ -74,7 +79,7 @@ func TestKubernetesSecretFromOnePasswordItemOwnerReferences(t *testing.T) {
7479
UID: types.UID("test-uid"),
7580
}
7681
err := CreateKubernetesSecretFromItem(ctx, kubeClient, secretName, namespace, &item, restartDeploymentAnnotation,
77-
secretLabels, secretType, ownerRef)
82+
secretLabels, secretAnnotations, secretType, ownerRef)
7883
if err != nil {
7984
t.Errorf("Unexpected error: %v", err)
8085
}
@@ -116,9 +121,12 @@ func TestUpdateKubernetesSecretFromOnePasswordItem(t *testing.T) {
116121
kubeClient := fake.NewClientBuilder().Build()
117122
secretLabels := map[string]string{}
118123
secretType := ""
124+
secretAnnotations := map[string]string{
125+
"testAnnotation": "exists",
126+
}
119127

120128
err := CreateKubernetesSecretFromItem(ctx, kubeClient, secretName, namespace, &item, restartDeploymentAnnotation,
121-
secretLabels, secretType, nil)
129+
secretLabels, secretAnnotations, secretType, nil)
122130

123131
if err != nil {
124132
t.Errorf("Unexpected error: %v", err)
@@ -131,7 +139,7 @@ func TestUpdateKubernetesSecretFromOnePasswordItem(t *testing.T) {
131139
newItem.VaultID = testVaultUUID
132140
newItem.ID = testItemUUID
133141
err = CreateKubernetesSecretFromItem(ctx, kubeClient, secretName, namespace, &newItem, restartDeploymentAnnotation,
134-
secretLabels, secretType, nil)
142+
secretLabels, secretAnnotations, secretType, nil)
135143
if err != nil {
136144
t.Errorf("Unexpected error: %v", err)
137145
}
@@ -234,9 +242,12 @@ func TestCreateKubernetesTLSSecretFromOnePasswordItem(t *testing.T) {
234242
kubeClient := fake.NewClientBuilder().Build()
235243
secretLabels := map[string]string{}
236244
secretType := "kubernetes.io/tls"
245+
secretAnnotations := map[string]string{
246+
"testAnnotation": "exists",
247+
}
237248

238249
err := CreateKubernetesSecretFromItem(ctx, kubeClient, secretName, namespace, &item, restartDeploymentAnnotation,
239-
secretLabels, secretType, nil)
250+
secretLabels, secretAnnotations, secretType, nil)
240251
if err != nil {
241252
t.Errorf("Unexpected error: %v", err)
242253
}

0 commit comments

Comments
 (0)