Skip to content

Commit

Permalink
fix: add generate name support
Browse files Browse the repository at this point in the history
Signed-off-by: Vishal Choudhary <[email protected]>
  • Loading branch information
vishal-chdhry committed Jun 27, 2024
1 parent c972e9c commit a03bd3f
Show file tree
Hide file tree
Showing 11 changed files with 84 additions and 47 deletions.
18 changes: 11 additions & 7 deletions pkg/api/cephr.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (

reportsv1 "github.com/kyverno/kyverno/api/reports/v1"
"github.com/kyverno/reports-server/pkg/storage"
"github.com/kyverno/reports-server/pkg/utils"
errorpkg "github.com/pkg/errors"
"k8s.io/apimachinery/pkg/api/errors"
metainternalversion "k8s.io/apimachinery/pkg/apis/meta/internalversion"
Expand Down Expand Up @@ -94,7 +95,7 @@ func (c *cephrStore) Get(ctx context.Context, name string, options *metav1.GetOp
klog.Infof("getting cluster ephemeral reports name=%s", name)
report, err := c.getCephr(name)
if err != nil || report == nil {
return nil, errors.NewNotFound(reportsv1.Resource("clusterephemeralreports"), name)
return nil, errors.NewNotFound(utils.ClusterEphemeralReportsGR, name)
}
return report, nil
}
Expand All @@ -120,6 +121,12 @@ func (c *cephrStore) Create(ctx context.Context, obj runtime.Object, createValid
if !ok {
return nil, errors.NewBadRequest("failed to validate cluster ephemeral report")
}
if cephr.Name == "" {
if cephr.GenerateName == "" {
return nil, errors.NewConflict(utils.ClusterEphemeralReportsGR, cephr.Name, fmt.Errorf("name and generate name not provided"))
}
cephr.Name = nameGenerator.GenerateName(cephr.GenerateName)
}

klog.Infof("creating cluster ephemeral reports name=%s", cephr.Name)
if !isDryRun {
Expand Down Expand Up @@ -154,7 +161,7 @@ func (c *cephrStore) Update(ctx context.Context, name string, objInfo rest.Updat
if err != nil {
klog.ErrorS(err, "failed to update resource")
}
if err := c.broadcaster.Action(watch.Added, r); err != nil {
if err := c.broadcaster.Action(watch.Modified, r); err != nil {
klog.ErrorS(err, "failed to broadcast event")
}
return updatedObject, true, nil
Expand Down Expand Up @@ -199,7 +206,7 @@ func (c *cephrStore) Delete(ctx context.Context, name string, deleteValidation r
cephr, err := c.getCephr(name)
if err != nil {
klog.ErrorS(err, "Failed to find cephrs", "name", name)
return nil, false, errors.NewNotFound(reportsv1.Resource("clusterephemeralreports"), name)
return nil, false, errors.NewNotFound(utils.ClusterEphemeralReportsGR, name)
}

err = deleteValidation(ctx, cephr)
Expand Down Expand Up @@ -239,14 +246,11 @@ func (c *cephrStore) DeleteCollection(ctx context.Context, deleteValidation rest

if !isDryRun {
for _, cephr := range cephrList.Items {
obj, isDeleted, err := c.Delete(ctx, cephr.GetName(), deleteValidation, options)
_, isDeleted, err := c.Delete(ctx, cephr.GetName(), deleteValidation, options)
if !isDeleted {
klog.ErrorS(err, "Failed to delete cephr", "name", cephr.GetName())
return nil, errors.NewBadRequest(fmt.Sprintf("Failed to delete cluster ephemral report: %s", cephr.GetName()))
}
if err := c.broadcaster.Action(watch.Deleted, obj); err != nil {
klog.ErrorS(err, "failed to broadcast event")
}
}
}
return cephrList, nil
Expand Down
19 changes: 11 additions & 8 deletions pkg/api/cpolr.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"strconv"

"github.com/kyverno/reports-server/pkg/storage"
"github.com/kyverno/reports-server/pkg/utils"
errorpkg "github.com/pkg/errors"
"k8s.io/apimachinery/pkg/api/errors"
metainternalversion "k8s.io/apimachinery/pkg/apis/meta/internalversion"
Expand Down Expand Up @@ -41,7 +42,6 @@ func (c *cpolrStore) New() runtime.Object {

func (c *cpolrStore) Destroy() {
}

func (c *cpolrStore) Kind() string {
return "ClusterPolicyReport"
}
Expand Down Expand Up @@ -94,7 +94,7 @@ func (c *cpolrStore) Get(ctx context.Context, name string, options *metav1.GetOp
klog.Infof("fetching cluster policy report name=%s", name)
report, err := c.getCpolr(name)
if err != nil || report == nil {
return nil, errors.NewNotFound(v1alpha2.Resource("clusterpolicyreports"), name)
return nil, errors.NewNotFound(utils.ClusterPolicyReportsGR, name)
}
return report, nil
}
Expand All @@ -120,6 +120,12 @@ func (c *cpolrStore) Create(ctx context.Context, obj runtime.Object, createValid
if !ok {
return nil, errors.NewBadRequest("failed to validate cluster policy report")
}
if cpolr.Name == "" {
if cpolr.GenerateName == "" {
return nil, errors.NewConflict(utils.ClusterPolicyReportsGR, cpolr.Name, fmt.Errorf("name and generate name not provided"))
}
cpolr.Name = nameGenerator.GenerateName(cpolr.GenerateName)
}

klog.Infof("creating cluster policy report name=%s", cpolr.Name)
if !isDryRun {
Expand Down Expand Up @@ -153,7 +159,7 @@ func (c *cpolrStore) Update(ctx context.Context, name string, objInfo rest.Updat
if err != nil {
klog.ErrorS(err, "failed to update resource")
}
if err := c.broadcaster.Action(watch.Added, r); err != nil {
if err := c.broadcaster.Action(watch.Modified, r); err != nil {
klog.ErrorS(err, "failed to broadcast event")
}
return updatedObject, true, nil
Expand Down Expand Up @@ -198,7 +204,7 @@ func (c *cpolrStore) Delete(ctx context.Context, name string, deleteValidation r
cpolr, err := c.getCpolr(name)
if err != nil {
klog.ErrorS(err, "Failed to find cpolrs", "name", name)
return nil, false, errors.NewNotFound(v1alpha2.Resource("clusterpolicyreports"), name)
return nil, false, errors.NewNotFound(utils.ClusterPolicyReportsGR, name)
}

err = deleteValidation(ctx, cpolr)
Expand Down Expand Up @@ -238,14 +244,11 @@ func (c *cpolrStore) DeleteCollection(ctx context.Context, deleteValidation rest

if !isDryRun {
for _, cpolr := range cpolrList.Items {
obj, isDeleted, err := c.Delete(ctx, cpolr.GetName(), deleteValidation, options)
_, isDeleted, err := c.Delete(ctx, cpolr.GetName(), deleteValidation, options)
if !isDeleted {
klog.ErrorS(err, "Failed to delete cpolr", "name", cpolr.GetName())
return nil, errors.NewBadRequest(fmt.Sprintf("Failed to delete cluster policy report: %s", cpolr.GetName()))
}
if err := c.broadcaster.Action(watch.Deleted, obj); err != nil {
klog.ErrorS(err, "failed to broadcast event")
}
}
}
return cpolrList, nil
Expand Down
18 changes: 11 additions & 7 deletions pkg/api/ephr.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (

reportsv1 "github.com/kyverno/kyverno/api/reports/v1"
"github.com/kyverno/reports-server/pkg/storage"
"github.com/kyverno/reports-server/pkg/utils"
errorpkg "github.com/pkg/errors"
"k8s.io/apimachinery/pkg/api/errors"
metainternalversion "k8s.io/apimachinery/pkg/apis/meta/internalversion"
Expand Down Expand Up @@ -99,7 +100,7 @@ func (p *ephrStore) Get(ctx context.Context, name string, options *metav1.GetOpt
klog.Infof("getting ephemeral reports name=%s namespace=%s", name, namespace)
report, err := p.getEphr(name, namespace)
if err != nil || report == nil {
return nil, errors.NewNotFound(reportsv1.Resource("ephemeralreports"), name)
return nil, errors.NewNotFound(utils.EphemeralReportsGR, name)
}
return report, nil
}
Expand All @@ -125,6 +126,12 @@ func (p *ephrStore) Create(ctx context.Context, obj runtime.Object, createValida
if !ok {
return nil, errors.NewBadRequest("failed to validate ephemeral report")
}
if ephr.Name == "" {
if ephr.GenerateName == "" {
return nil, errors.NewConflict(utils.EphemeralReportsGR, ephr.Name, fmt.Errorf("name and generate name not provided"))
}
ephr.Name = nameGenerator.GenerateName(ephr.GenerateName)
}

namespace := genericapirequest.NamespaceValue(ctx)

Expand Down Expand Up @@ -166,7 +173,7 @@ func (p *ephrStore) Update(ctx context.Context, name string, objInfo rest.Update
if err != nil {
klog.ErrorS(err, "failed to update resource")
}
if err := p.broadcaster.Action(watch.Added, r); err != nil {
if err := p.broadcaster.Action(watch.Modified, r); err != nil {
klog.ErrorS(err, "failed to broadcast event")
}
return updatedObject, true, nil
Expand Down Expand Up @@ -216,7 +223,7 @@ func (p *ephrStore) Delete(ctx context.Context, name string, deleteValidation re
ephr, err := p.getEphr(name, namespace)
if err != nil {
klog.ErrorS(err, "Failed to find ephrs", "name", name, "namespace", klog.KRef("", namespace))
return nil, false, errors.NewNotFound(reportsv1.Resource("ephemeralreports"), name)
return nil, false, errors.NewNotFound(utils.EphemeralReportsGR, name)
}

err = deleteValidation(ctx, ephr)
Expand Down Expand Up @@ -258,14 +265,11 @@ func (p *ephrStore) DeleteCollection(ctx context.Context, deleteValidation rest.

if !isDryRun {
for _, ephr := range ephrList.Items {
obj, isDeleted, err := p.Delete(ctx, ephr.GetName(), deleteValidation, options)
_, isDeleted, err := p.Delete(ctx, ephr.GetName(), deleteValidation, options)
if !isDeleted {
klog.ErrorS(err, "Failed to delete ephr", "name", ephr.GetName(), "namespace", klog.KRef("", namespace))
return nil, errors.NewBadRequest(fmt.Sprintf("Failed to delete ephemeral report: %s/%s", ephr.Namespace, ephr.GetName()))
}
if err := p.broadcaster.Action(watch.Deleted, obj); err != nil {
klog.ErrorS(err, "failed to broadcast event")
}
}
}
return ephrList, nil
Expand Down
7 changes: 7 additions & 0 deletions pkg/api/names.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package api

import "k8s.io/apiserver/pkg/storage/names"

var (
nameGenerator = names.SimpleNameGenerator
)
18 changes: 11 additions & 7 deletions pkg/api/polr.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"strconv"

"github.com/kyverno/reports-server/pkg/storage"
"github.com/kyverno/reports-server/pkg/utils"
errorpkg "github.com/pkg/errors"
"k8s.io/apimachinery/pkg/api/errors"
metainternalversion "k8s.io/apimachinery/pkg/apis/meta/internalversion"
Expand Down Expand Up @@ -99,7 +100,7 @@ func (p *polrStore) Get(ctx context.Context, name string, options *metav1.GetOpt
klog.Infof("getting policy reports name=%s namespace=%s", name, namespace)
report, err := p.getPolr(name, namespace)
if err != nil || report == nil {
return nil, errors.NewNotFound(v1alpha2.Resource("policyreports"), name)
return nil, errors.NewNotFound(utils.PolicyReportsGR, name)
}
return report, nil
}
Expand Down Expand Up @@ -131,6 +132,12 @@ func (p *polrStore) Create(ctx context.Context, obj runtime.Object, createValida
if len(polr.Namespace) == 0 {
polr.Namespace = namespace
}
if polr.Name == "" {
if polr.GenerateName == "" {
return nil, errors.NewConflict(utils.PolicyReportsGR, polr.Name, fmt.Errorf("name and generate name not provided"))
}
polr.Name = nameGenerator.GenerateName(polr.GenerateName)
}

klog.Infof("creating policy reports name=%s namespace=%s", polr.Name, polr.Namespace)
if !isDryRun {
Expand Down Expand Up @@ -167,7 +174,7 @@ func (p *polrStore) Update(ctx context.Context, name string, objInfo rest.Update
if err != nil {
klog.ErrorS(err, "failed to update resource")
}
if err := p.broadcaster.Action(watch.Added, r); err != nil {
if err := p.broadcaster.Action(watch.Modified, r); err != nil {
klog.ErrorS(err, "failed to broadcast event")
}
return updatedObject, true, nil
Expand Down Expand Up @@ -217,7 +224,7 @@ func (p *polrStore) Delete(ctx context.Context, name string, deleteValidation re
polr, err := p.getPolr(name, namespace)
if err != nil {
klog.ErrorS(err, "Failed to find polrs", "name", name, "namespace", klog.KRef("", namespace))
return nil, false, errors.NewNotFound(v1alpha2.Resource("policyreports"), name)
return nil, false, errors.NewNotFound(utils.PolicyReportsGR, name)
}

err = deleteValidation(ctx, polr)
Expand Down Expand Up @@ -259,14 +266,11 @@ func (p *polrStore) DeleteCollection(ctx context.Context, deleteValidation rest.

if !isDryRun {
for _, polr := range polrList.Items {
obj, isDeleted, err := p.Delete(ctx, polr.GetName(), deleteValidation, options)
_, isDeleted, err := p.Delete(ctx, polr.GetName(), deleteValidation, options)
if !isDeleted {
klog.ErrorS(err, "Failed to delete polr", "name", polr.GetName(), "namespace", klog.KRef("", namespace))
return nil, errors.NewBadRequest(fmt.Sprintf("Failed to delete policy report: %s/%s", polr.Namespace, polr.GetName()))
}
if err := p.broadcaster.Action(watch.Deleted, obj); err != nil {
klog.ErrorS(err, "failed to broadcast event")
}
}
}
return polrList, nil
Expand Down
2 changes: 0 additions & 2 deletions pkg/storage/inmemory/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ import (
"sigs.k8s.io/wg-policy-prototypes/policy-report/pkg/api/wgpolicyk8s.io/v1alpha2"
)

var groupResource = v1alpha2.SchemeGroupVersion.WithResource("policyreportsa").GroupResource()

type inMemoryDb struct {
sync.Mutex

Expand Down
9 changes: 5 additions & 4 deletions pkg/storage/inmemory/cpehr.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"sync"

reportsv1 "github.com/kyverno/kyverno/api/reports/v1"
"github.com/kyverno/reports-server/pkg/utils"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/klog/v2"
)
Expand Down Expand Up @@ -45,7 +46,7 @@ func (c *cephrdb) Get(ctx context.Context, name string) (reportsv1.ClusterEpheme
return val, nil
} else {
klog.Errorf("value not found for key:%s", key)
return reportsv1.ClusterEphemeralReport{}, errors.NewNotFound(groupResource, key)
return reportsv1.ClusterEphemeralReport{}, errors.NewNotFound(utils.ClusterEphemeralReportsGR, key)
}
}

Expand All @@ -57,7 +58,7 @@ func (c *cephrdb) Create(ctx context.Context, cephr reportsv1.ClusterEphemeralRe
klog.Infof("creating entry for key:%s", key)
if _, found := c.db[key]; found {
klog.Errorf("entry already exists k:%s", key)
return errors.NewAlreadyExists(groupResource, key)
return errors.NewAlreadyExists(utils.ClusterEphemeralReportsGR, key)
} else {
c.db[key] = cephr
klog.Infof("entry created for key:%s", key)
Expand All @@ -73,7 +74,7 @@ func (c *cephrdb) Update(ctx context.Context, cephr reportsv1.ClusterEphemeralRe
klog.Infof("updating entry for key:%s", key)
if _, found := c.db[key]; !found {
klog.Errorf("entry does not exist k:%s", key)
return errors.NewNotFound(groupResource, key)
return errors.NewNotFound(utils.ClusterEphemeralReportsGR, key)
} else {
c.db[key] = cephr
klog.Infof("entry updated for key:%s", key)
Expand All @@ -89,7 +90,7 @@ func (c *cephrdb) Delete(ctx context.Context, name string) error {
klog.Infof("deleting entry for key:%s", key)
if _, found := c.db[key]; !found {
klog.Errorf("entry does not exist k:%s", key)
return errors.NewNotFound(groupResource, key)
return errors.NewNotFound(utils.ClusterEphemeralReportsGR, key)
} else {
delete(c.db, key)
klog.Infof("entry deleted for key:%s", key)
Expand Down
9 changes: 5 additions & 4 deletions pkg/storage/inmemory/cpolr.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"fmt"
"sync"

"github.com/kyverno/reports-server/pkg/utils"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/klog/v2"
"sigs.k8s.io/wg-policy-prototypes/policy-report/pkg/api/wgpolicyk8s.io/v1alpha2"
Expand Down Expand Up @@ -45,7 +46,7 @@ func (c *cpolrdb) Get(ctx context.Context, name string) (v1alpha2.ClusterPolicyR
return val, nil
} else {
klog.Errorf("value not found for key:%s", key)
return v1alpha2.ClusterPolicyReport{}, errors.NewNotFound(groupResource, key)
return v1alpha2.ClusterPolicyReport{}, errors.NewNotFound(utils.ClusterPolicyReportsGR, key)
}
}

Expand All @@ -57,7 +58,7 @@ func (c *cpolrdb) Create(ctx context.Context, cpolr v1alpha2.ClusterPolicyReport
klog.Infof("creating entry for key:%s", key)
if _, found := c.db[key]; found {
klog.Errorf("entry already exists k:%s", key)
return errors.NewAlreadyExists(groupResource, key)
return errors.NewAlreadyExists(utils.ClusterPolicyReportsGR, key)
} else {
c.db[key] = cpolr
klog.Infof("entry created for key:%s", key)
Expand All @@ -73,7 +74,7 @@ func (c *cpolrdb) Update(ctx context.Context, cpolr v1alpha2.ClusterPolicyReport
klog.Infof("updating entry for key:%s", key)
if _, found := c.db[key]; !found {
klog.Errorf("entry does not exist k:%s", key)
return errors.NewNotFound(groupResource, key)
return errors.NewNotFound(utils.ClusterPolicyReportsGR, key)
} else {
c.db[key] = cpolr
klog.Infof("entry updated for key:%s", key)
Expand All @@ -89,7 +90,7 @@ func (c *cpolrdb) Delete(ctx context.Context, name string) error {
klog.Infof("deleting entry for key:%s", key)
if _, found := c.db[key]; !found {
klog.Errorf("entry does not exist k:%s", key)
return errors.NewNotFound(groupResource, key)
return errors.NewNotFound(utils.ClusterPolicyReportsGR, key)
} else {
delete(c.db, key)
klog.Infof("entry deleted for key:%s", key)
Expand Down
Loading

0 comments on commit a03bd3f

Please sign in to comment.