Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,9 @@ func main() {
var probeAddr string
var secureMetrics bool
var enableHTTP2 bool
var enableAnnotations bool
var tlsOpts []func(*tls.Config)
flag.StringVar(&metricsAddr, "metrics-bind-address", "8080",
flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080",
"The address the metrics endpoint binds to. "+
"Use :8443 for HTTPS or :8080 for HTTP, or leave as 0 to disable the metrics service.")
flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081",
Expand All @@ -119,6 +120,8 @@ func main() {
"The name of the metrics server key file.")
flag.BoolVar(&enableHTTP2, "enable-http2", false,
"If set, HTTP/2 will be enabled for the metrics")
flag.BoolVar(&enableAnnotations, "enable-annotations", false,
"If set, operator will add annotations to resources it manages.")
opts := zap.Options{
Development: true,
}
Expand Down Expand Up @@ -289,9 +292,10 @@ func main() {
}

if err = (&controller.OnePasswordItemReconciler{
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
OpClient: opClient,
Client: mgr.GetClient(),
Scheme: mgr.GetScheme(),
OpClient: opClient,
EnableAnnotations: enableAnnotations,
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "OnePasswordItem")
os.Exit(1)
Expand Down
2 changes: 1 addition & 1 deletion internal/controller/deployment_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -219,5 +219,5 @@ func (r *DeploymentReconciler) handleApplyingDeployment(ctx context.Context, dep
UID: deployment.GetUID(),
}

return kubeSecrets.CreateKubernetesSecretFromItem(ctx, r.Client, secretName, namespace, item, annotations[op.RestartDeploymentsAnnotation], secretLabels, secretType, ownerRef)
return kubeSecrets.CreateKubernetesSecretFromItem(ctx, r.Client, secretName, namespace, item, annotations[op.RestartDeploymentsAnnotation], secretLabels, annotations, secretType, ownerRef)
}
13 changes: 10 additions & 3 deletions internal/controller/onepassworditem_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,9 @@ var finalizer = "onepassword.com/finalizer.secret"
// OnePasswordItemReconciler reconciles a OnePasswordItem object
type OnePasswordItemReconciler struct {
client.Client
Scheme *runtime.Scheme
OpClient opclient.Client
Scheme *runtime.Scheme
OpClient opclient.Client
EnableAnnotations bool
}

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

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

return kubeSecrets.CreateKubernetesSecretFromItem(ctx, r.Client, secretName, resource.Namespace, item, autoRestart, labels, secretType, ownerRef)
return kubeSecrets.CreateKubernetesSecretFromItem(ctx, r.Client, secretName, resource.Namespace, item, autoRestart, labels, annotations, secretType, ownerRef)
}

func (r *OnePasswordItemReconciler) updateStatus(ctx context.Context, resource *onepasswordv1.OnePasswordItem, err error) error {
Expand Down
8 changes: 5 additions & 3 deletions pkg/kubernetessecrets/kubernetes_secrets_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,16 @@ func CreateKubernetesSecretFromItem(
item *model.Item,
autoRestart string,
labels map[string]string,
secretAnnotations map[string]string,
secretType string,
ownerRef *metav1.OwnerReference,
) error {
itemVersion := fmt.Sprint(item.Version)
secretAnnotations := map[string]string{
VersionAnnotation: itemVersion,
ItemPathAnnotation: fmt.Sprintf("vaults/%v/items/%v", item.VaultID, item.ID),
if secretAnnotations == nil {
secretAnnotations = map[string]string{}
}
secretAnnotations[VersionAnnotation] = itemVersion
secretAnnotations[ItemPathAnnotation] = fmt.Sprintf("vaults/%v/items/%v", item.VaultID, item.ID)

if autoRestart != "" {
_, err := utils.StringToBool(autoRestart)
Expand Down
23 changes: 17 additions & 6 deletions pkg/kubernetessecrets/kubernetes_secrets_builder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,11 @@ func TestCreateKubernetesSecretFromOnePasswordItem(t *testing.T) {
kubeClient := fake.NewClientBuilder().Build()
secretLabels := map[string]string{}
secretType := ""

secretAnnotations := map[string]string{
"testAnnotation": "exists",
}
err := CreateKubernetesSecretFromItem(ctx, kubeClient, secretName, namespace, &item, restartDeploymentAnnotation,
secretLabels, secretType, nil)
secretLabels, secretAnnotations, secretType, nil)
if err != nil {
t.Errorf("Unexpected error: %v", err)
}
Expand Down Expand Up @@ -66,6 +68,9 @@ func TestKubernetesSecretFromOnePasswordItemOwnerReferences(t *testing.T) {
kubeClient := fake.NewClientBuilder().Build()
secretLabels := map[string]string{}
secretType := ""
secretAnnotations := map[string]string{
"testAnnotation": "exists",
}

ownerRef := &metav1.OwnerReference{
Kind: "Deployment",
Expand All @@ -74,7 +79,7 @@ func TestKubernetesSecretFromOnePasswordItemOwnerReferences(t *testing.T) {
UID: types.UID("test-uid"),
}
err := CreateKubernetesSecretFromItem(ctx, kubeClient, secretName, namespace, &item, restartDeploymentAnnotation,
secretLabels, secretType, ownerRef)
secretLabels, secretAnnotations, secretType, ownerRef)
if err != nil {
t.Errorf("Unexpected error: %v", err)
}
Expand Down Expand Up @@ -116,9 +121,12 @@ func TestUpdateKubernetesSecretFromOnePasswordItem(t *testing.T) {
kubeClient := fake.NewClientBuilder().Build()
secretLabels := map[string]string{}
secretType := ""
secretAnnotations := map[string]string{
"testAnnotation": "exists",
}

err := CreateKubernetesSecretFromItem(ctx, kubeClient, secretName, namespace, &item, restartDeploymentAnnotation,
secretLabels, secretType, nil)
secretLabels, secretAnnotations, secretType, nil)

if err != nil {
t.Errorf("Unexpected error: %v", err)
Expand All @@ -131,7 +139,7 @@ func TestUpdateKubernetesSecretFromOnePasswordItem(t *testing.T) {
newItem.VaultID = testVaultUUID
newItem.ID = testItemUUID
err = CreateKubernetesSecretFromItem(ctx, kubeClient, secretName, namespace, &newItem, restartDeploymentAnnotation,
secretLabels, secretType, nil)
secretLabels, secretAnnotations, secretType, nil)
if err != nil {
t.Errorf("Unexpected error: %v", err)
}
Expand Down Expand Up @@ -234,9 +242,12 @@ func TestCreateKubernetesTLSSecretFromOnePasswordItem(t *testing.T) {
kubeClient := fake.NewClientBuilder().Build()
secretLabels := map[string]string{}
secretType := "kubernetes.io/tls"
secretAnnotations := map[string]string{
"testAnnotation": "exists",
}

err := CreateKubernetesSecretFromItem(ctx, kubeClient, secretName, namespace, &item, restartDeploymentAnnotation,
secretLabels, secretType, nil)
secretLabels, secretAnnotations, secretType, nil)
if err != nil {
t.Errorf("Unexpected error: %v", err)
}
Expand Down
Loading