Skip to content

Commit be81561

Browse files
willkutlermprahl
authored andcommitted
Add support for policyDefaults.disabled
Signed-off-by: Will Kutler <[email protected]>
1 parent a26a18e commit be81561

File tree

4 files changed

+56
-0
lines changed

4 files changed

+56
-0
lines changed

docs/policygenerator-reference.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ policyDefaults:
2525
# manifests being wrapped in the policy. If set to false, a configuration policy per manifest will
2626
# be generated. This defaults to true.
2727
consolidateManifests: true
28+
# Optional. Determines whether the policy is enabled or disabled. A disabled policy will not be
29+
# propagated to any managed clusters and will show no status as a result.
30+
disabled: false
2831
# Optional. This is how often a policy should be evaluated when in a particular compliance state.
2932
# When managed clusters have low CPU resources, the evaluation interval can be increased to
3033
# to reduce CPU usage on the Kubernetes API.

internal/plugin.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,13 @@ func (p *Plugin) applyDefaults(unmarshaledConfig map[string]interface{}) {
465465
policy.ConsolidateManifests = p.PolicyDefaults.ConsolidateManifests
466466
}
467467

468+
disabledValue, setDisabled := getPolicyBool(unmarshaledConfig, i, "disabled")
469+
if setDisabled {
470+
policy.Disabled = disabledValue
471+
} else {
472+
policy.Disabled = p.PolicyDefaults.Disabled
473+
}
474+
468475
// Determine whether defaults are set for placement
469476
plcDefaultSet := len(p.PolicyDefaults.Placement.LabelSelector) != 0 || p.PolicyDefaults.Placement.PlacementPath != ""
470477
plrDefaultSet := len(p.PolicyDefaults.Placement.ClusterSelectors) != 0 || p.PolicyDefaults.Placement.PlacementRulePath != ""

internal/plugin_config_test.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ policies:
211211
assertEqual(t, p.Metadata.Name, "policy-generator-name")
212212
assertEqual(t, p.PlacementBindingDefaults.Name, "")
213213
assertReflectEqual(t, p.PolicyDefaults.Categories, []string{"CM Configuration Management"})
214+
assertEqual(t, p.PolicyDefaults.Disabled, false)
214215
assertEqual(t, p.PolicyDefaults.ComplianceType, "musthave")
215216
assertEqual(t, p.PolicyDefaults.MetadataComplianceType, "")
216217
assertReflectEqual(t, p.PolicyDefaults.Controls, []string{"CM-2 Baseline Configuration"})
@@ -228,6 +229,7 @@ policies:
228229

229230
policy := p.Policies[0]
230231
assertReflectEqual(t, policy.Categories, []string{"CM Configuration Management"})
232+
assertEqual(t, policy.Disabled, false)
231233
assertEqual(t, policy.ComplianceType, "musthave")
232234
assertEqual(t, policy.MetadataComplianceType, "")
233235
assertReflectEqual(t, policy.Controls, []string{"CM-2 Baseline Configuration"})
@@ -1127,3 +1129,46 @@ func TestPolicySetConfig(t *testing.T) {
11271129
})
11281130
}
11291131
}
1132+
1133+
func TestDisabled(t *testing.T) {
1134+
t.Parallel()
1135+
tmpDir := t.TempDir()
1136+
createConfigMap(t, tmpDir, "configmap.yaml")
1137+
configMapPath := path.Join(tmpDir, "configmap.yaml")
1138+
defaultsConfig := fmt.Sprintf(
1139+
`
1140+
apiVersion: policy.open-cluster-management.io/v1
1141+
kind: PolicyGenerator
1142+
metadata:
1143+
name: policy-generator-name
1144+
policyDefaults:
1145+
namespace: my-policies
1146+
disabled: true
1147+
policies:
1148+
- name: policy-app-config
1149+
disabled: false
1150+
manifests:
1151+
- path: %s
1152+
namespaceSelector:
1153+
include:
1154+
- app-ns
1155+
remediationAction: inform
1156+
- name: policy-app-config2
1157+
manifests:
1158+
- path: %s
1159+
`,
1160+
configMapPath,
1161+
configMapPath,
1162+
)
1163+
p := Plugin{}
1164+
err := p.Config([]byte(defaultsConfig), tmpDir)
1165+
if err != nil {
1166+
t.Fatal(err.Error())
1167+
}
1168+
1169+
assertEqual(t, p.PolicyDefaults.Disabled, true)
1170+
enabledPolicy := p.Policies[0]
1171+
assertEqual(t, enabledPolicy.Disabled, false)
1172+
disabledPolicy := p.Policies[1]
1173+
assertEqual(t, disabledPolicy.Disabled, true)
1174+
}

internal/types/types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ type PolicyDefaults struct {
6666
Severity string `json:"severity,omitempty" yaml:"severity,omitempty"`
6767
Standards []string `json:"standards,omitempty" yaml:"standards,omitempty"`
6868
ConsolidateManifests bool `json:"consolidateManifests,omitempty" yaml:"consolidateManifests,omitempty"`
69+
Disabled bool `json:"disabled,omitempty" yaml:"disabled,omitempty"`
6970
InformGatekeeperPolicies bool `json:"informGatekeeperPolicies,omitempty" yaml:"informGatekeeperPolicies,omitempty"`
7071
InformKyvernoPolicies bool `json:"informKyvernoPolicies,omitempty" yaml:"informKyvernoPolicies,omitempty"`
7172
GeneratePlacementWhenInSet bool `json:"generatePlacementWhenInSet,omitempty" yaml:"generatePlacementWhenInSet,omitempty"`

0 commit comments

Comments
 (0)