Skip to content

Commit

Permalink
feat: supporting adding external-name annotation to resources (#3)
Browse files Browse the repository at this point in the history
* feat: supporting adding external-name annotation to resources

Signed-off-by: Armin Schlegel <armin.schlegel@gmx.de>
  • Loading branch information
siredmar committed Apr 19, 2023
1 parent 5899f1f commit 4bc72ff
Show file tree
Hide file tree
Showing 5 changed files with 167 additions and 30 deletions.
39 changes: 33 additions & 6 deletions internal/controller/account/account.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package account

import (
"context"
"fmt"
"reflect"
"time"

Expand Down Expand Up @@ -127,14 +128,31 @@ type external struct {
client *vault.Client
}

const (
annotationExternalName = "crossplane.io/external-name"
)

func getExternalName(r *v1alpha1.Account) (string, error) {
annotations := r.GetAnnotations()
if annotations != nil {
if val, ok := annotations[annotationExternalName]; ok {
return val, nil
}
}
return "", fmt.Errorf("External name annotation not found for %s", r.GetName())
}

func (c *external) Observe(ctx context.Context, mg resource.Managed) (managed.ExternalObservation, error) {
cr, ok := mg.(*v1alpha1.Account)
if !ok {
return managed.ExternalObservation{}, errors.New(errNotAccount)
}

operator := cr.Spec.ForProvider.Operator
account := cr.Name
account, err := getExternalName(cr)
if err != nil {
return managed.ExternalObservation{}, err
}
data, status, err := issue.ReadAccount(c.client, operator, account)
if err != nil {
cr.SetConditions(xpv1.Unavailable().WithMessage(err.Error()))
Expand Down Expand Up @@ -243,8 +261,11 @@ func (c *external) Create(ctx context.Context, mg resource.Managed) (managed.Ext
cr.SetConditions(xpv1.Creating())

operator := cr.Spec.ForProvider.Operator
account := cr.Name
err := issue.WriteAccount(c.client, operator, account, &cr.Spec.ForProvider)
account, err := getExternalName(cr)
if err != nil {
return managed.ExternalCreation{}, err
}
err = issue.WriteAccount(c.client, operator, account, &cr.Spec.ForProvider)
if err != nil {
return managed.ExternalCreation{}, err
}
Expand All @@ -263,7 +284,10 @@ func (c *external) Update(ctx context.Context, mg resource.Managed) (managed.Ext
}

operator := cr.Spec.ForProvider.Operator
account := cr.Name
account, err := getExternalName(cr)
if err != nil {
return managed.ExternalUpdate{}, err
}

// check if operator id has changed
if cr.Status.AtProvider.Operator != "" && cr.Status.AtProvider.Account != "" {
Expand All @@ -276,7 +300,7 @@ func (c *external) Update(ctx context.Context, mg resource.Managed) (managed.Ext
}
}

err := issue.WriteAccount(c.client, operator, account, &cr.Spec.ForProvider)
err = issue.WriteAccount(c.client, operator, account, &cr.Spec.ForProvider)
if err != nil {
return managed.ExternalUpdate{}, err
}
Expand All @@ -294,7 +318,10 @@ func (c *external) Delete(ctx context.Context, mg resource.Managed) error {
}

operator := cr.Spec.ForProvider.Operator
account := cr.Name
account, err := getExternalName(cr)
if err != nil {
return err
}

return issue.DeleteAccount(c.client, operator, account)
}
40 changes: 34 additions & 6 deletions internal/controller/accountSigningKey/accountSigningKey.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package accountSigningKey

import (
"context"
"fmt"

"github.com/edgefarm/provider-natssecrets/apis/accountSigningKey/v1alpha1"
"github.com/edgefarm/provider-natssecrets/internal/clients/nkey"
Expand Down Expand Up @@ -123,6 +124,20 @@ type external struct {
client *vault.Client
}

const (
annotationExternalName = "crossplane.io/external-name"
)

func getExternalName(r *v1alpha1.AccountSigningKey) (string, error) {
annotations := r.GetAnnotations()
if annotations != nil {
if val, ok := annotations[annotationExternalName]; ok {
return val, nil
}
}
return "", fmt.Errorf("External name annotation not found for %s", r.GetName())
}

func (c *external) Observe(ctx context.Context, mg resource.Managed) (managed.ExternalObservation, error) {
cr, ok := mg.(*v1alpha1.AccountSigningKey)
if !ok {
Expand All @@ -131,7 +146,10 @@ func (c *external) Observe(ctx context.Context, mg resource.Managed) (managed.Ex

operator := cr.Spec.ForProvider.Operator
account := cr.Spec.ForProvider.Account
key := cr.Name
key, err := getExternalName(cr)
if err != nil {
return managed.ExternalObservation{}, err
}
data, status, err := nkey.ReadAccountSigningKey(c.client, operator, account, key)
if err != nil {
cr.SetConditions(xpv1.Unavailable().WithMessage(err.Error()))
Expand Down Expand Up @@ -211,8 +229,12 @@ func (c *external) Create(ctx context.Context, mg resource.Managed) (managed.Ext

operator := cr.Spec.ForProvider.Operator
account := cr.Spec.ForProvider.Account
key := cr.Name
err := nkey.WriteAccountSigningKey(c.client, operator, account, key, &cr.Spec.ForProvider)
key, err := getExternalName(cr)
if err != nil {
return managed.ExternalCreation{}, err
}

err = nkey.WriteAccountSigningKey(c.client, operator, account, key, &cr.Spec.ForProvider)
if err != nil {
return managed.ExternalCreation{}, err
}
Expand All @@ -232,8 +254,11 @@ func (c *external) Update(ctx context.Context, mg resource.Managed) (managed.Ext

operator := cr.Spec.ForProvider.Operator
account := cr.Spec.ForProvider.Account
key := cr.Name
err := nkey.WriteAccountSigningKey(c.client, operator, account, key, &cr.Spec.ForProvider)
key, err := getExternalName(cr)
if err != nil {
return managed.ExternalUpdate{}, err
}
err = nkey.WriteAccountSigningKey(c.client, operator, account, key, &cr.Spec.ForProvider)
if err != nil {
return managed.ExternalUpdate{}, err
}
Expand All @@ -252,6 +277,9 @@ func (c *external) Delete(ctx context.Context, mg resource.Managed) error {

operator := cr.Spec.ForProvider.Operator
account := cr.Spec.ForProvider.Account
key := cr.Name
key, err := getExternalName(cr)
if err != nil {
return err
}
return nkey.DeleteAccountSigningKey(c.client, operator, account, key)
}
40 changes: 34 additions & 6 deletions internal/controller/operator/operator.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package operator

import (
"context"
"fmt"
"reflect"

"github.com/pkg/errors"
Expand Down Expand Up @@ -124,13 +125,30 @@ type external struct {
client *vault.Client
}

const (
annotationExternalName = "crossplane.io/external-name"
)

func getExternalName(r *v1alpha1.Operator) (string, error) {
annotations := r.GetAnnotations()
if annotations != nil {
if val, ok := annotations[annotationExternalName]; ok {
return val, nil
}
}
return "", fmt.Errorf("External name annotation not found for %s", r.GetName())
}

func (c *external) Observe(ctx context.Context, mg resource.Managed) (managed.ExternalObservation, error) {
cr, ok := mg.(*v1alpha1.Operator)
if !ok {
return managed.ExternalObservation{}, errors.New(errNotOperator)
}

operator := cr.Name
operator, err := getExternalName(cr)
if err != nil {
return managed.ExternalObservation{}, err
}

// check if operator in vault exists
// if not, call create
Expand Down Expand Up @@ -235,8 +253,12 @@ func (c *external) Create(ctx context.Context, mg resource.Managed) (managed.Ext
cr.SetConditions(xpv1.Creating())

// create operator in vault
operator := cr.Name
err := issue.WriteOperator(c.client, operator, &cr.Spec.ForProvider)
operator, err := getExternalName(cr)
if err != nil {
return managed.ExternalCreation{}, err
}

err = issue.WriteOperator(c.client, operator, &cr.Spec.ForProvider)
if err != nil {
return managed.ExternalCreation{}, err
}
Expand All @@ -254,10 +276,13 @@ func (c *external) Update(ctx context.Context, mg resource.Managed) (managed.Ext
return managed.ExternalUpdate{}, errors.New(errNotOperator)
}

operator := cr.Name
operator, err := getExternalName(cr)
if err != nil {
return managed.ExternalUpdate{}, err
}

// update operator
err := issue.WriteOperator(c.client, operator, &cr.Spec.ForProvider)
err = issue.WriteOperator(c.client, operator, &cr.Spec.ForProvider)
if err != nil {
return managed.ExternalUpdate{}, err
}
Expand All @@ -278,6 +303,9 @@ func (c *external) Delete(ctx context.Context, mg resource.Managed) error {
cr.SetConditions(xpv1.Deleting())

// delete operator
operator := cr.Name
operator, err := getExternalName(cr)
if err != nil {
return err
}
return issue.DeleteOperator(c.client, operator)
}
39 changes: 33 additions & 6 deletions internal/controller/operatorSigningKey/operatorSigningKey.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package operatorSigningKey

import (
"context"
"fmt"

"github.com/edgefarm/provider-natssecrets/apis/operatorSigningKey/v1alpha1"
"github.com/edgefarm/provider-natssecrets/internal/clients/nkey"
Expand Down Expand Up @@ -123,14 +124,31 @@ type external struct {
client *vault.Client
}

const (
annotationExternalName = "crossplane.io/external-name"
)

func getExternalName(r *v1alpha1.OperatorSigningKey) (string, error) {
annotations := r.GetAnnotations()
if annotations != nil {
if val, ok := annotations[annotationExternalName]; ok {
return val, nil
}
}
return "", fmt.Errorf("External name annotation not found for %s", r.GetName())
}

func (c *external) Observe(ctx context.Context, mg resource.Managed) (managed.ExternalObservation, error) {
cr, ok := mg.(*v1alpha1.OperatorSigningKey)
if !ok {
return managed.ExternalObservation{}, errors.New(errNotOperatorSigningKey)
}

operator := cr.Spec.ForProvider.Operator
key := cr.Name
key, err := getExternalName(cr)
if err != nil {
return managed.ExternalObservation{}, err
}
data, status, err := nkey.ReadOperatorSigningKey(c.client, operator, key)
if err != nil {
cr.SetConditions(xpv1.Unavailable().WithMessage(err.Error()))
Expand Down Expand Up @@ -209,8 +227,11 @@ func (c *external) Create(ctx context.Context, mg resource.Managed) (managed.Ext
cr.SetConditions(xpv1.Creating())

operator := cr.Spec.ForProvider.Operator
key := cr.Name
err := nkey.WriteOperatorSigningKey(c.client, operator, key, &cr.Spec.ForProvider)
key, err := getExternalName(cr)
if err != nil {
return managed.ExternalCreation{}, err
}
err = nkey.WriteOperatorSigningKey(c.client, operator, key, &cr.Spec.ForProvider)
if err != nil {
return managed.ExternalCreation{}, err
}
Expand All @@ -229,9 +250,12 @@ func (c *external) Update(ctx context.Context, mg resource.Managed) (managed.Ext
}

operator := cr.Spec.ForProvider.Operator
key := cr.Name
key, err := getExternalName(cr)
if err != nil {
return managed.ExternalUpdate{}, err
}

err := nkey.WriteOperatorSigningKey(c.client, operator, key, &cr.Spec.ForProvider)
err = nkey.WriteOperatorSigningKey(c.client, operator, key, &cr.Spec.ForProvider)
if err != nil {
return managed.ExternalUpdate{}, err
}
Expand All @@ -249,7 +273,10 @@ func (c *external) Delete(ctx context.Context, mg resource.Managed) error {
}

operator := cr.Spec.ForProvider.Operator
key := cr.Name
key, err := getExternalName(cr)
if err != nil {
return err
}

return nkey.DeleteOperatorSigningKey(c.client, operator, key)
}
Loading

0 comments on commit 4bc72ff

Please sign in to comment.