Skip to content

Commit

Permalink
fix: fixed updating user connection details after update
Browse files Browse the repository at this point in the history
Signed-off-by: Armin Schlegel <armin.schlegel@gmx.de>
  • Loading branch information
siredmar committed Jun 5, 2023
1 parent 4bc72ff commit 5ec09ea
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 3 deletions.
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ require (
github.com/crossplane/crossplane-runtime v0.19.1
github.com/crossplane/crossplane-tools v0.0.0-20220901191540-806c0b01097b
github.com/edgefarm/vault-plugin-secrets-nats v1.1.0
github.com/go-test/deep v1.0.2
github.com/google/go-cmp v0.5.9
github.com/hashicorp/vault/api v1.9.0
github.com/hashicorp/vault/sdk v0.8.1
Expand Down
1 change: 1 addition & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,7 @@ github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/
github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-test/deep v1.0.2 h1:onZX1rnHT3Wv6cqNgYyFOOlgVKJrksuCMCRvJStbMYw=
github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
github.com/gobuffalo/flect v1.0.2 h1:eqjPGSo2WmjgY2XlpGwo2NXgL3RucAKo4k4qQMNA5sA=
github.com/gobuffalo/flect v1.0.2/go.mod h1:A5msMlrHtLqh9umBSnvabjsMrCcCpAyzglnDvkbYKHs=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
Expand Down
20 changes: 20 additions & 0 deletions internal/clients/issue/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,31 @@ import (
v1alpha1 "github.com/edgefarm/provider-natssecrets/apis/user/v1alpha1"
vault "github.com/edgefarm/provider-natssecrets/internal/clients"
natsbackend "github.com/edgefarm/vault-plugin-secrets-nats"
vaultv1alpha1 "github.com/edgefarm/vault-plugin-secrets-nats/pkg/claims/user/v1alpha1"
)

func UserPath(mount string, operator string, account string, user string) string {
return mount + "/issue/operator/" + operator + "/account/" + account + "/user/" + user
}

func fixEmptySlices(params *vaultv1alpha1.UserClaims) {
if params == nil {
return
}
if params.Permissions.Pub.Allow == nil {
params.Permissions.Pub.Allow = []string{}
}
if params.Permissions.Pub.Deny == nil {
params.Permissions.Pub.Deny = []string{}
}
if params.Permissions.Sub.Allow == nil {
params.Permissions.Sub.Allow = []string{}
}
if params.Permissions.Sub.Deny == nil {
params.Permissions.Sub.Deny = []string{}
}
}

func ReadUser(c *vault.Client, operator string, account string, user string) (*v1alpha1.UserParameters, *natsbackend.IssueUserStatus, error) {
path := UserPath(c.Mount, operator, account, user)

Expand All @@ -20,6 +39,7 @@ func ReadUser(c *vault.Client, operator string, account string, user string) (*v
return nil, nil, err
}
if resp != nil {
fixEmptySlices(&resp.Claims)
return &v1alpha1.UserParameters{
Operator: resp.Operator,
Account: resp.Account,
Expand Down
20 changes: 17 additions & 3 deletions internal/controller/user/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (
"github.com/crossplane/crossplane-runtime/pkg/connection"
"github.com/crossplane/crossplane-runtime/pkg/controller"
"github.com/crossplane/crossplane-runtime/pkg/event"
"github.com/crossplane/crossplane-runtime/pkg/logging"
"github.com/crossplane/crossplane-runtime/pkg/ratelimiter"
"github.com/crossplane/crossplane-runtime/pkg/reconciler/managed"
"github.com/crossplane/crossplane-runtime/pkg/resource"
Expand All @@ -44,6 +45,8 @@ import (
"github.com/edgefarm/provider-natssecrets/internal/clients/jwt"
"github.com/edgefarm/provider-natssecrets/internal/clients/nkey"
"github.com/edgefarm/provider-natssecrets/internal/controller/features"

deep "github.com/go-test/deep"
)

const (
Expand All @@ -69,7 +72,8 @@ func Setup(mgr ctrl.Manager, o controller.Options) error {
managed.WithExternalConnecter(&connector{
kube: mgr.GetClient(),
usage: resource.NewProviderConfigUsageTracker(mgr.GetClient(), &apisv1alpha1.ProviderConfigUsage{}),
newServiceFn: vault.NewRootClient}),
newServiceFn: vault.NewRootClient,
logger: o.Logger}),
managed.WithLogger(o.Logger.WithValues("controller", name)),
managed.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name))),
managed.WithConnectionPublishers(cps...))
Expand All @@ -87,6 +91,7 @@ type connector struct {
kube client.Client
usage resource.Tracker
newServiceFn func(creds []byte) (*vault.Client, error)
logger logging.Logger
}

type ProviderConfigSecretSpec struct {
Expand Down Expand Up @@ -129,13 +134,17 @@ func (c *connector) Connect(ctx context.Context, mg resource.Managed) (managed.E
return nil, errors.Wrap(err, errNewClient)
}

return &external{client: client}, nil
return &external{
client: client,
log: c.logger,
}, nil
}

// An ExternalClient observes, then either creates, updates, or deletes an
// external resource to ensure it reflects the managed resource's desired state.
type external struct {
client *vault.Client
log logging.Logger
}

const (
Expand Down Expand Up @@ -179,6 +188,11 @@ func (c *external) Observe(ctx context.Context, mg resource.Managed) (managed.Ex
}, nil
}

diff := deep.Equal(*data, cr.Spec.ForProvider)
if diff != nil {
c.log.Debug("Observe", "user", user)
c.log.Debug("Compare failed", "diff", diff)
}
if !reflect.DeepEqual(data, &cr.Spec.ForProvider) {
return managed.ExternalObservation{
ResourceExists: true,
Expand Down Expand Up @@ -247,7 +261,7 @@ func (c *external) Observe(ctx context.Context, mg resource.Managed) (managed.Ex
ResourceUpToDate: true,
}, nil
}
if j == nil {
if userCreds == nil {
cr.SetConditions(xpv1.Creating().WithMessage("Waiting for user creds to be created"))
return managed.ExternalObservation{
ResourceExists: true,
Expand Down

0 comments on commit 5ec09ea

Please sign in to comment.