Skip to content

Commit

Permalink
feat: add support for --all-namespaces (-A) (#50)
Browse files Browse the repository at this point in the history
* feat: add support for all namespaces

Signed-off-by: Vishal Choudhary <[email protected]>

* fix: remove exponential sleep

Signed-off-by: Vishal Choudhary <[email protected]>

---------

Signed-off-by: Vishal Choudhary <[email protected]>
Co-authored-by: Jim Bugwadia <[email protected]>
  • Loading branch information
vishal-chdhry and JimBugwadia authored Feb 5, 2024
1 parent 3dd72a0 commit 37729fb
Show file tree
Hide file tree
Showing 8 changed files with 47 additions and 10 deletions.
7 changes: 6 additions & 1 deletion pkg/api/cephr.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ func (c *cephrStore) List(ctx context.Context, options *metainternalversion.List
// fieldSelector = options.FieldSelector
// }
}
klog.Infof("listing cluster ephemeral reports")
list, err := c.listCephr()
if err != nil {
return nil, errors.NewBadRequest("failed to list resource clusterephemeralreport")
Expand All @@ -86,6 +87,7 @@ func (c *cephrStore) List(ctx context.Context, options *metainternalversion.List
}

func (c *cephrStore) Get(ctx context.Context, name string, options *metav1.GetOptions) (runtime.Object, error) {
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)
Expand Down Expand Up @@ -115,6 +117,7 @@ func (c *cephrStore) Create(ctx context.Context, obj runtime.Object, createValid
return nil, errors.NewBadRequest("failed to validate cluster ephemeral report")
}

klog.Infof("creating cluster ephemeral reports name=%s", cephr.Name)
if !isDryRun {
if err := c.createCephr(cephr); err != nil {
return nil, errors.NewBadRequest(fmt.Sprintf("cannot create cluster ephemeral report: %s", err.Error()))
Expand Down Expand Up @@ -171,8 +174,9 @@ func (c *cephrStore) Update(ctx context.Context, name string, objInfo rest.Updat
return nil, false, errors.NewBadRequest("failed to validate cluster ephemeral report")
}

klog.Infof("updating cluster ephemeral reports name=%s", cephr.Name)
if !isDryRun {
if err := c.createCephr(cephr); err != nil {
if err := c.updateCephr(cephr, false); err != nil {
return nil, false, errors.NewBadRequest(fmt.Sprintf("cannot create cluster ephemeral report: %s", err.Error()))
}
if err := c.broadcaster.Action(watch.Modified, updatedObject); err != nil {
Expand All @@ -198,6 +202,7 @@ func (c *cephrStore) Delete(ctx context.Context, name string, deleteValidation r
return nil, false, errors.NewBadRequest(fmt.Sprintf("invalid resource: %s", err.Error()))
}

klog.Infof("deleting cluster ephemeral reports name=%s", cephr.Name)
if !isDryRun {
if err = c.deleteCephr(cephr); err != nil {
klog.ErrorS(err, "failed to delete cephr", "name", name)
Expand Down
7 changes: 6 additions & 1 deletion pkg/api/cpolr.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ func (c *cpolrStore) List(ctx context.Context, options *metainternalversion.List
// fieldSelector = options.FieldSelector
// }
}
klog.Infof("listing all cluster policy reports")
list, err := c.listCpolr()
if err != nil {
return nil, errors.NewBadRequest("failed to list resource clusterpolicyreport")
Expand All @@ -86,6 +87,7 @@ func (c *cpolrStore) List(ctx context.Context, options *metainternalversion.List
}

func (c *cpolrStore) Get(ctx context.Context, name string, options *metav1.GetOptions) (runtime.Object, error) {
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)
Expand Down Expand Up @@ -115,6 +117,7 @@ func (c *cpolrStore) Create(ctx context.Context, obj runtime.Object, createValid
return nil, errors.NewBadRequest("failed to validate cluster policy report")
}

klog.Infof("creating cluster policy report name=%s", cpolr.Name)
if !isDryRun {
if err := c.createCpolr(cpolr); err != nil {
return nil, errors.NewBadRequest(fmt.Sprintf("cannot create cluster policy report: %s", err.Error()))
Expand Down Expand Up @@ -171,8 +174,9 @@ func (c *cpolrStore) Update(ctx context.Context, name string, objInfo rest.Updat
return nil, false, errors.NewBadRequest("failed to validate cluster policy report")
}

klog.Infof("updating cluster policy report name=%s", cpolr.Name)
if !isDryRun {
if err := c.createCpolr(cpolr); err != nil {
if err := c.updateCpolr(cpolr, false); err != nil {
return nil, false, errors.NewBadRequest(fmt.Sprintf("cannot create cluster policy report: %s", err.Error()))
}
if err := c.broadcaster.Action(watch.Modified, updatedObject); err != nil {
Expand All @@ -198,6 +202,7 @@ func (c *cpolrStore) Delete(ctx context.Context, name string, deleteValidation r
return nil, false, errors.NewBadRequest(fmt.Sprintf("invalid resource: %s", err.Error()))
}

klog.Infof("deleting cluster policy report name=%s", cpolr.Name)
if !isDryRun {
if err = c.deleteCpolr(cpolr); err != nil {
klog.ErrorS(err, "failed to delete cpolr", "name", name)
Expand Down
8 changes: 8 additions & 0 deletions pkg/api/ephr.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ func (p *ephrStore) List(ctx context.Context, options *metainternalversion.ListO
// }
}
namespace := genericapirequest.NamespaceValue(ctx)

klog.Infof("listing ephemeral reports for namespace=%s", namespace)
list, err := p.listEphr(namespace)
if err != nil {
return nil, errors.NewBadRequest("failed to list resource ephemeralreport")
Expand All @@ -89,6 +91,8 @@ func (p *ephrStore) List(ctx context.Context, options *metainternalversion.ListO

func (p *ephrStore) Get(ctx context.Context, name string, options *metav1.GetOptions) (runtime.Object, error) {
namespace := genericapirequest.NamespaceValue(ctx)

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)
Expand Down Expand Up @@ -119,10 +123,12 @@ func (p *ephrStore) Create(ctx context.Context, obj runtime.Object, createValida
}

namespace := genericapirequest.NamespaceValue(ctx)

if len(ephr.Namespace) == 0 {
ephr.Namespace = namespace
}

klog.Infof("creating ephemeral reports name=%s namespace=%s", ephr.Name, ephr.Namespace)
if !isDryRun {
err := p.createEphr(ephr)
if err != nil {
Expand Down Expand Up @@ -185,6 +191,7 @@ func (p *ephrStore) Update(ctx context.Context, name string, objInfo rest.Update
ephr.Namespace = namespace
}

klog.Infof("updating ephemeral reports name=%s namespace=%s", ephr.Name, ephr.Namespace)
if !isDryRun {
err := p.updateEphr(ephr, false)
if err != nil {
Expand Down Expand Up @@ -214,6 +221,7 @@ func (p *ephrStore) Delete(ctx context.Context, name string, deleteValidation re
return nil, false, errors.NewBadRequest(fmt.Sprintf("invalid resource: %s", err.Error()))
}

klog.Infof("deleting ephemeral reports name=%s namespace=%s", ephr.Name, ephr.Namespace)
if !isDryRun {
err = p.deleteEphr(ephr)
if err != nil {
Expand Down
8 changes: 8 additions & 0 deletions pkg/api/polr.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ func (p *polrStore) List(ctx context.Context, options *metainternalversion.ListO
// }
}
namespace := genericapirequest.NamespaceValue(ctx)

klog.Infof("listing policy reports for namespace=%s", namespace)
list, err := p.listPolr(namespace)
if err != nil {
return nil, errors.NewBadRequest("failed to list resource policyreport")
Expand All @@ -89,6 +91,8 @@ func (p *polrStore) List(ctx context.Context, options *metainternalversion.ListO

func (p *polrStore) Get(ctx context.Context, name string, options *metav1.GetOptions) (runtime.Object, error) {
namespace := genericapirequest.NamespaceValue(ctx)

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)
Expand Down Expand Up @@ -119,10 +123,12 @@ func (p *polrStore) Create(ctx context.Context, obj runtime.Object, createValida
}

namespace := genericapirequest.NamespaceValue(ctx)

if len(polr.Namespace) == 0 {
polr.Namespace = namespace
}

klog.Infof("creating policy reports name=%s namespace=%s", polr.Name, polr.Namespace)
if !isDryRun {
err := p.createPolr(polr)
if err != nil {
Expand Down Expand Up @@ -185,6 +191,7 @@ func (p *polrStore) Update(ctx context.Context, name string, objInfo rest.Update
polr.Namespace = namespace
}

klog.Infof("updating policy reports name=%s namespace=%s", polr.Name, polr.Namespace)
if !isDryRun {
err := p.updatePolr(polr, false)
if err != nil {
Expand Down Expand Up @@ -214,6 +221,7 @@ func (p *polrStore) Delete(ctx context.Context, name string, deleteValidation re
return nil, false, errors.NewBadRequest(fmt.Sprintf("invalid resource: %s", err.Error()))
}

klog.Infof("deleting policy reports name=%s namespace=%s", polr.Name, polr.Namespace)
if !isDryRun {
err = p.deletePolr(polr)
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion pkg/app/opts/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ func (o Options) restConfig() (*rest.Config, error) {
return nil, fmt.Errorf("unable to construct lister client config: %v", err)
}

config.ContentType = "application/vnd.kubernetes.protobuf"
// config.ContentType = "application/vnd.kubernetes.protobuf"

err = rest.SetKubernetesDefaults(config)
if err != nil {
Expand Down
8 changes: 7 additions & 1 deletion pkg/storage/db/ephr.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,14 @@ func (p *ephrdb) List(ctx context.Context, namespace string) ([]reportsv1.Epheme
klog.Infof("listing all values for namespace:%s", namespace)
res := make([]reportsv1.EphemeralReport, 0)
var jsonb string
var rows *sql.Rows
var err error

rows, err := p.db.Query("SELECT report FROM ephemeralreports WHERE namespace = $1", namespace)
if len(namespace) == 0 {
rows, err = p.db.Query("SELECT report FROM ephemeralreports")
} else {
rows, err = p.db.Query("SELECT report FROM ephemeralreports WHERE namespace = $1", namespace)
}
if err != nil {
klog.ErrorS(err, "ephemeralreport list: ")
return nil, fmt.Errorf("ephemeralreport list %q: %v", namespace, err)
Expand Down
8 changes: 3 additions & 5 deletions pkg/storage/db/new.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ import (
)

const (
maxRetries = 10
backoffDuration = 15 * time.Second
maxRetries = 10
sleepDuration = 15 * time.Second
)

func New(config *PostgresConfig) (api.Storage, error) {
Expand All @@ -24,16 +24,14 @@ func New(config *PostgresConfig) (api.Storage, error) {
return nil, err
}

sleepDuration := 0 * time.Second
for attempt := 1; attempt <= maxRetries; attempt++ {
time.Sleep(sleepDuration)
klog.Infof("pinging postgres db, attempt: %d", attempt)
err := db.PingContext(context.TODO())
if err == nil {
break
}
klog.Error("failed to ping db", err.Error())
sleepDuration = sleepDuration + backoffDuration
time.Sleep(sleepDuration)
}

err = db.Ping()
Expand Down
9 changes: 8 additions & 1 deletion pkg/storage/db/polr.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,15 @@ func (p *polrdb) List(ctx context.Context, namespace string) ([]v1alpha2.PolicyR
klog.Infof("listing all values for namespace:%s", namespace)
res := make([]v1alpha2.PolicyReport, 0)
var jsonb string
var rows *sql.Rows
var err error

if len(namespace) == 0 {
rows, err = p.db.Query("SELECT report FROM policyreports")
} else {
rows, err = p.db.Query("SELECT report FROM policyreports WHERE namespace = $1", namespace)
}

rows, err := p.db.Query("SELECT report FROM policyreports WHERE namespace = $1", namespace)
if err != nil {
klog.ErrorS(err, "policyreport list: ")
return nil, fmt.Errorf("policyreport list %q: %v", namespace, err)
Expand Down

0 comments on commit 37729fb

Please sign in to comment.