mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-09 17:37:12 +00:00
This PR refactors the reports generation code. It removes RCR and CRCR crds and replaces them with AdmissionReport, ClusterAdmissionReport, BackgroundScanReport and ClusterBackgroundScanReport crds. The new reports system is based on 4 controllers: Admission reports controller is responsible for cleaning up admission reports and attaching admission reports to their corresponding resource in case of a creation Background scan reports controller is responsible for creating background scan reports when a resource and/or policy changes Aggregation controller takes care of aggregation per resource reports into higher level reports (per namespace) Resources controller is responsible for watching reports that need background scan reports I added two new flags to disable admission reports and/or background scan reports, the whole reporting system can be disabled if something goes wrong. I also added a flag to split reports in chunks to avoid creating too large resources. Signed-off-by: Charles-Edouard Brétéché <charled.breteche@gmail.com> Signed-off-by: prateekpandey14 <prateek.pandey@nirmata.com> Signed-off-by: Charles-Edouard Brétéché <charled.breteche@gmail.com> Signed-off-by: prateekpandey14 <prateek.pandey@nirmata.com> Co-authored-by: prateekpandey14 <prateek.pandey@nirmata.com>
72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package toggle
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
)
|
|
|
|
const (
|
|
// autogen
|
|
AutogenInternalsFlagName = "autogenInternals"
|
|
AutogenInternalsDescription = "Enables autogen internal policies. When this is 'true' policy rules should not be mutated."
|
|
autogenInternalsEnvVar = "FLAG_AUTOGEN_INTERNALS"
|
|
defaultAutogenInternals = true
|
|
// protect managed resource
|
|
ProtectManagedResourcesFlagName = "protectManagedResources"
|
|
ProtectManagedResourcesDescription = "Set the flag to 'true', to enable managed resources protection."
|
|
protectManagedResourcesEnvVar = "FLAG_PROTECT_MANAGED_RESOURCES"
|
|
defaultProtectManagedResources = false
|
|
)
|
|
|
|
var (
|
|
AutogenInternals = newToggle(defaultAutogenInternals, autogenInternalsEnvVar)
|
|
ProtectManagedResources = newToggle(defaultProtectManagedResources, protectManagedResourcesEnvVar)
|
|
)
|
|
|
|
type Toggle interface {
|
|
Enabled() bool
|
|
Parse(string) error
|
|
}
|
|
|
|
type toggle struct {
|
|
value *bool
|
|
defaultValue bool
|
|
envVar string
|
|
}
|
|
|
|
func newToggle(defaultValue bool, envVar string) *toggle {
|
|
return &toggle{
|
|
defaultValue: defaultValue,
|
|
envVar: envVar,
|
|
}
|
|
}
|
|
|
|
func (t *toggle) Parse(in string) error {
|
|
if value, err := getBool(in); err != nil {
|
|
return err
|
|
} else {
|
|
t.value = value
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func (t *toggle) Enabled() bool {
|
|
if t.value != nil {
|
|
return *t.value
|
|
}
|
|
if value, err := getBool(os.Getenv(t.envVar)); err == nil && value != nil {
|
|
return *value
|
|
}
|
|
return t.defaultValue
|
|
}
|
|
|
|
func getBool(in string) (*bool, error) {
|
|
if in == "" {
|
|
return nil, nil
|
|
}
|
|
value, err := strconv.ParseBool(in)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &value, nil
|
|
}
|