mirror of
https://github.com/kyverno/kyverno.git
synced 2024-12-15 17:51:20 +00:00
e0ab72bb9a
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
|
|
}
|