Skip to content

Commit d6a2169

Browse files
committed
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 8df1dc9 commit d6a2169

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
@@ -519,6 +519,7 @@ func TestExtraDependencies(t *testing.T) {
519519
t.Parallel()
520520
tmpDir := t.TempDir()
521521
createConfigMap(t, tmpDir, "configmap.yaml")
522+
createConfigPolicyManifest(t, tmpDir, "configpolicy.yaml")
522523

523524
tests := map[string]genOutTest{
524525
"policyDefaults.extraDependencies are propagated to all manifests": {
@@ -593,6 +594,30 @@ policies:
593594
wantFile: "testdata/ordering/manifest-extradeps.yaml",
594595
wantErr: "",
595596
},
597+
"manifest extraDependencies are handled with ConfigurationPolicy manifests": {
598+
tmpDir: tmpDir,
599+
generator: `
600+
apiVersion: policy.open-cluster-management.io/v1
601+
kind: PolicyGenerator
602+
metadata:
603+
name: test
604+
policyDefaults:
605+
consolidateManifests: false
606+
namespace: my-policies
607+
policies:
608+
- name: one
609+
manifests:
610+
- path: {{printf "%v/%v" .Dir "configpolicy.yaml"}}
611+
extraDependencies:
612+
- name: manifestextra
613+
- path: {{printf "%v/%v" .Dir "configmap.yaml"}}
614+
- name: two
615+
manifests:
616+
- path: {{printf "%v/%v" .Dir "configmap.yaml"}}
617+
`,
618+
wantFile: "testdata/ordering/manifest-extradeps-configpolicy.yaml",
619+
wantErr: "",
620+
},
596621
"extraDependencies defaults can be overwritten": {
597622
tmpDir: tmpDir,
598623
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)