Skip to content

Commit 8890de1

Browse files
dhaiducekopenshift-merge-robot
authored andcommitted
Fix ExtraDependencies for ConfigPolicy manifests
When a `ConfigurationPolicy` manifest was provided directly, `extraDependencies` was being set at the `objectDefinition` level rather than the `policy-templates` level. ref: https://issues.redhat.com/browse/ACM-7353 Signed-off-by: Dale Haiducek <[email protected]>
1 parent 36a630d commit 8890de1

File tree

4 files changed

+186
-1
lines changed

4 files changed

+186
-1
lines changed

internal/ordering_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,7 @@ func TestExtraDependencies(t *testing.T) {
543543
t.Parallel()
544544
tmpDir := t.TempDir()
545545
createConfigMap(t, tmpDir, "configmap.yaml")
546+
createConfigPolicyManifest(t, tmpDir, "configpolicy.yaml")
546547

547548
tests := map[string]genOutTest{
548549
"policyDefaults.extraDependencies are propagated to all manifests": {
@@ -641,6 +642,30 @@ policies:
641642
wantFile: "testdata/ordering/manifest-extradeps.yaml",
642643
wantErr: "",
643644
},
645+
"manifest extraDependencies are handled with ConfigurationPolicy manifests": {
646+
tmpDir: tmpDir,
647+
generator: `
648+
apiVersion: policy.open-cluster-management.io/v1
649+
kind: PolicyGenerator
650+
metadata:
651+
name: test
652+
policyDefaults:
653+
consolidateManifests: false
654+
namespace: my-policies
655+
policies:
656+
- name: one
657+
manifests:
658+
- path: {{printf "%v/%v" .Dir "configpolicy.yaml"}}
659+
extraDependencies:
660+
- name: manifestextra
661+
- path: {{printf "%v/%v" .Dir "configmap.yaml"}}
662+
- name: two
663+
manifests:
664+
- path: {{printf "%v/%v" .Dir "configmap.yaml"}}
665+
`,
666+
wantFile: "testdata/ordering/manifest-extradeps-configpolicy.yaml",
667+
wantErr: "",
668+
},
644669
"extraDependencies defaults can be overwritten": {
645670
tmpDir: tmpDir,
646671
generator: `

internal/plugin_config_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,35 @@ data:
3030
}
3131
}
3232

33+
func createConfigPolicyManifest(t *testing.T, tmpDir, filename string) {
34+
t.Helper()
35+
36+
manifestsPath := path.Join(tmpDir, filename)
37+
yamlContent := `
38+
apiVersion: policy.open-cluster-management.io/v1
39+
kind: ConfigurationPolicy
40+
metadata:
41+
name: configpolicy-my-configmap
42+
spec:
43+
object-templates:
44+
- complianceType: musthave
45+
objectDefinition:
46+
apiVersion: v1
47+
data:
48+
game.properties: enemies=potato
49+
kind: ConfigMap
50+
metadata:
51+
name: my-configmap
52+
remediationAction: inform
53+
severity: low
54+
`
55+
56+
err := os.WriteFile(manifestsPath, []byte(yamlContent), 0o666)
57+
if err != nil {
58+
t.Fatalf("Failed to write %s", manifestsPath)
59+
}
60+
}
61+
3362
func createIamPolicyManifest(t *testing.T, tmpDir, filename string) {
3463
t.Helper()
3564

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
---
2+
apiVersion: policy.open-cluster-management.io/v1
3+
kind: Policy
4+
metadata:
5+
annotations:
6+
policy.open-cluster-management.io/categories: CM Configuration Management
7+
policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
8+
policy.open-cluster-management.io/standards: NIST SP 800-53
9+
name: one
10+
namespace: my-policies
11+
spec:
12+
disabled: false
13+
policy-templates:
14+
- extraDependencies:
15+
- apiVersion: policy.open-cluster-management.io/v1
16+
compliance: Compliant
17+
kind: Policy
18+
name: manifestextra
19+
namespace: my-policies
20+
objectDefinition:
21+
apiVersion: policy.open-cluster-management.io/v1
22+
kind: ConfigurationPolicy
23+
metadata:
24+
name: configpolicy-my-configmap
25+
spec:
26+
object-templates:
27+
- complianceType: musthave
28+
objectDefinition:
29+
apiVersion: v1
30+
data:
31+
game.properties: enemies=potato
32+
kind: ConfigMap
33+
metadata:
34+
name: my-configmap
35+
remediationAction: inform
36+
severity: low
37+
- objectDefinition:
38+
apiVersion: policy.open-cluster-management.io/v1
39+
kind: ConfigurationPolicy
40+
metadata:
41+
name: one2
42+
spec:
43+
object-templates:
44+
- complianceType: musthave
45+
objectDefinition:
46+
apiVersion: v1
47+
data:
48+
game.properties: enemies=potato
49+
kind: ConfigMap
50+
metadata:
51+
name: my-configmap
52+
remediationAction: inform
53+
severity: low
54+
remediationAction: inform
55+
---
56+
apiVersion: policy.open-cluster-management.io/v1
57+
kind: Policy
58+
metadata:
59+
annotations:
60+
policy.open-cluster-management.io/categories: CM Configuration Management
61+
policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
62+
policy.open-cluster-management.io/standards: NIST SP 800-53
63+
name: two
64+
namespace: my-policies
65+
spec:
66+
disabled: false
67+
policy-templates:
68+
- objectDefinition:
69+
apiVersion: policy.open-cluster-management.io/v1
70+
kind: ConfigurationPolicy
71+
metadata:
72+
name: two
73+
spec:
74+
object-templates:
75+
- complianceType: musthave
76+
objectDefinition:
77+
apiVersion: v1
78+
data:
79+
game.properties: enemies=potato
80+
kind: ConfigMap
81+
metadata:
82+
name: my-configmap
83+
remediationAction: inform
84+
severity: low
85+
remediationAction: inform
86+
---
87+
apiVersion: apps.open-cluster-management.io/v1
88+
kind: PlacementRule
89+
metadata:
90+
name: placement-one
91+
namespace: my-policies
92+
spec:
93+
clusterSelector:
94+
matchExpressions: []
95+
---
96+
apiVersion: apps.open-cluster-management.io/v1
97+
kind: PlacementRule
98+
metadata:
99+
name: placement-two
100+
namespace: my-policies
101+
spec:
102+
clusterSelector:
103+
matchExpressions: []
104+
---
105+
apiVersion: policy.open-cluster-management.io/v1
106+
kind: PlacementBinding
107+
metadata:
108+
name: binding-one
109+
namespace: my-policies
110+
placementRef:
111+
apiGroup: apps.open-cluster-management.io
112+
kind: PlacementRule
113+
name: placement-one
114+
subjects:
115+
- apiGroup: policy.open-cluster-management.io
116+
kind: Policy
117+
name: one
118+
---
119+
apiVersion: policy.open-cluster-management.io/v1
120+
kind: PlacementBinding
121+
metadata:
122+
name: binding-two
123+
namespace: my-policies
124+
placementRef:
125+
apiGroup: apps.open-cluster-management.io
126+
kind: PlacementRule
127+
name: placement-two
128+
subjects:
129+
- apiGroup: policy.open-cluster-management.io
130+
kind: Policy
131+
name: two

internal/utils.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ func getPolicyTemplates(policyConf *types.PolicyConfig) ([]map[string]interface{
189189

190190
// Only set dependency options if it's an OCM policy
191191
if isOcmPolicy {
192-
setTemplateOptions(manifest, ignorePending, extraDeps)
192+
setTemplateOptions(policyTemplate, ignorePending, extraDeps)
193193
}
194194

195195
policyTemplates = append(policyTemplates, policyTemplate)

0 commit comments

Comments
 (0)