Skip to content

Commit dd1f91f

Browse files
Refactor name setting for complex cases
https://issues.redhat.com/browse/ACM-12563 Signed-off-by: yiraeChristineKim <[email protected]>
1 parent 1617458 commit dd1f91f

File tree

5 files changed

+117
-19
lines changed

5 files changed

+117
-19
lines changed

docs/policygenerator-reference.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,8 @@ policies:
236236
- path: ""
237237
# Optional. This name is used when ConsolidateManifests is set to false and will serve as the ConfigurationPolicy name.
238238
# If multiple manifests are present in the path, an index number will be appended.
239+
# If multiple manifests are present and their names are provided, with `consolidateManifests` set to true,
240+
# the name of the first manifest will be used for all manifest paths.
239241
name: "my-config-name"
240242
# Optional. (See policyDefaults.complianceType for description.)
241243
complianceType: "musthave"

internal/ordering_test.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,10 +293,16 @@ metadata:
293293
policyDefaults:
294294
orderPolicies: true
295295
namespace: my-policies
296-
consolidateManifests: false
296+
consolidateManifests: true
297297
policies:
298298
- name: one
299299
manifests:
300+
- path: {{printf "%v/%v" .Dir "configmap.yaml"}}
301+
name: tiger
302+
- path: {{printf "%v/%v" .Dir "configmap.yaml"}}
303+
name: rabbit
304+
- path: {{printf "%v/%v" .Dir "object-templates-raw.yaml"}}
305+
name: bird
300306
- path: {{printf "%v/%v" .Dir "object-templates-raw.yaml"}}
301307
- path: {{printf "%v/%v" .Dir "object-templates-raw.yaml"}}
302308
`,

internal/testdata/ordering/manifest-extradeps-configpolicy.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ spec:
3838
apiVersion: policy.open-cluster-management.io/v1
3939
kind: ConfigurationPolicy
4040
metadata:
41-
name: one2
41+
name: one
4242
spec:
4343
object-templates:
4444
- complianceType: musthave

internal/testdata/ordering/manifest-level-name-raw-consolidate-true.yaml

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,42 @@ metadata:
1212
spec:
1313
disabled: false
1414
policy-templates:
15+
- objectDefinition:
16+
apiVersion: policy.open-cluster-management.io/v1
17+
kind: ConfigurationPolicy
18+
metadata:
19+
name: bird
20+
spec:
21+
object-templates-raw: |-
22+
- complianceType: musthave
23+
objectDefinition:
24+
apiVersion: v1
25+
kind: ConfigMap
26+
metadata:
27+
name: example
28+
namespace: default
29+
data:
30+
extraData: data
31+
remediationAction: inform
32+
severity: low
33+
- objectDefinition:
34+
apiVersion: policy.open-cluster-management.io/v1
35+
kind: ConfigurationPolicy
36+
metadata:
37+
name: bird2
38+
spec:
39+
object-templates-raw: |-
40+
- complianceType: musthave
41+
objectDefinition:
42+
apiVersion: v1
43+
kind: ConfigMap
44+
metadata:
45+
name: example
46+
namespace: default
47+
data:
48+
extraData: data
49+
remediationAction: inform
50+
severity: low
1551
- objectDefinition:
1652
apiVersion: policy.open-cluster-management.io/v1
1753
kind: ConfigurationPolicy
@@ -84,6 +120,47 @@ spec:
84120
extraData: data
85121
remediationAction: inform
86122
severity: low
123+
- objectDefinition:
124+
apiVersion: policy.open-cluster-management.io/v1
125+
kind: ConfigurationPolicy
126+
metadata:
127+
name: tiger
128+
spec:
129+
object-templates:
130+
- complianceType: musthave
131+
objectDefinition:
132+
apiVersion: v1
133+
data:
134+
game.properties: enemies=potato
135+
kind: ConfigMap
136+
metadata:
137+
name: my-configmap
138+
- complianceType: musthave
139+
objectDefinition:
140+
apiVersion: v1
141+
data:
142+
game.properties: enemies=cabbage
143+
kind: ConfigMap
144+
metadata:
145+
name: config-2
146+
- complianceType: musthave
147+
objectDefinition:
148+
apiVersion: v1
149+
data:
150+
game.properties: enemies=potato
151+
kind: ConfigMap
152+
metadata:
153+
name: my-configmap
154+
- complianceType: musthave
155+
objectDefinition:
156+
apiVersion: v1
157+
data:
158+
game.properties: enemies=cabbage
159+
kind: ConfigMap
160+
metadata:
161+
name: config-2
162+
remediationAction: inform
163+
severity: low
87164
remediationAction: inform
88165
---
89166
apiVersion: cluster.open-cluster-management.io/v1beta1

internal/utils.go

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,8 @@ func getPolicyTemplates(policyConf *types.PolicyConfig) ([]map[string]interface{
169169
objectTemplates := make([]map[string]interface{}, 0, objectTemplatesLength)
170170
policyTemplates := make([]map[string]interface{}, 0, policyTemplatesLength)
171171

172+
policyNameCounter := 0
173+
172174
for i, manifestGroup := range manifestGroups {
173175
complianceType := policyConf.Manifests[i].ComplianceType
174176
metadataComplianceType := policyConf.Manifests[i].MetadataComplianceType
@@ -177,7 +179,9 @@ func getPolicyTemplates(policyConf *types.PolicyConfig) ([]map[string]interface{
177179
ignorePending := policyConf.Manifests[i].IgnorePending
178180
extraDeps := policyConf.Manifests[i].ExtraDependencies
179181

180-
for j, manifest := range manifestGroup {
182+
manifestNameCounter := 0
183+
184+
for _, manifest := range manifestGroup {
181185
err := setGatekeeperEnforcementAction(manifest,
182186
policyConf.Manifests[i].GatekeeperEnforcementAction)
183187
if err != nil {
@@ -204,8 +208,7 @@ func getPolicyTemplates(policyConf *types.PolicyConfig) ([]map[string]interface{
204208
policyConf,
205209
manifest["object-templates-raw"],
206210
&policyConf.Manifests[i].ConfigurationPolicyOptions,
207-
getConfigurationPolicyName(policyConf, i, len(policyTemplates),
208-
j, !policyConf.ConsolidateManifests),
211+
getConfigurationPolicyName(policyConf, i, &policyNameCounter, &manifestNameCounter),
209212
)
210213
} else {
211214
policyTemplate = map[string]interface{}{"objectDefinition": manifest}
@@ -262,8 +265,8 @@ func getPolicyTemplates(policyConf *types.PolicyConfig) ([]map[string]interface{
262265
policyConf,
263266
[]map[string]interface{}{objTemplate},
264267
&policyConf.Manifests[i].ConfigurationPolicyOptions,
265-
getConfigurationPolicyName(policyConf, i, len(policyTemplates),
266-
j, !policyConf.ConsolidateManifests),
268+
getConfigurationPolicyName(policyConf, i,
269+
&policyNameCounter, &manifestNameCounter),
267270
)
268271

269272
setTemplateOptions(policyTemplate, ignorePending, extraDeps)
@@ -282,11 +285,13 @@ func getPolicyTemplates(policyConf *types.PolicyConfig) ([]map[string]interface{
282285
// just build one policyTemplate by using the above non-empty consolidated objectTemplates
283286
// ConsolidateManifests = true or there is non-policy-type manifest
284287
if policyConf.ConsolidateManifests && len(objectTemplates) > 0 {
288+
// If ConsolidateManifests is true and multiple manifest[].names are provided, the configuration policy
289+
// name will be the first name of manifest[].names
285290
policyTemplate := buildPolicyTemplate(
286291
policyConf,
287292
objectTemplates,
288293
&policyConf.ConfigurationPolicyOptions,
289-
getConfigurationPolicyName(policyConf, 0, 0, 0, false),
294+
getConfigurationPolicyName(policyConf, 0, &policyNameCounter, nil),
290295
)
291296
setTemplateOptions(policyTemplate, policyConf.IgnorePending, policyConf.ExtraDependencies)
292297
policyTemplates = append(policyTemplates, policyTemplate)
@@ -322,27 +327,35 @@ func getPolicyTemplates(policyConf *types.PolicyConfig) ([]map[string]interface{
322327
return policyTemplates, nil
323328
}
324329

325-
// This function returns configurationPolicyName with Index+1 based on the provided PolicyConfig.
326-
// When index is 0, it won't attach any number. When useManifestName is true,
327-
// it returns the policyConf.Manifests[manifestGroupIndex].Name otherwise,
328-
// It returns policyConf.Name + index
329-
func getConfigurationPolicyName(policyConf *types.PolicyConfig, manifestGroupIndex, policyNum,
330-
manifestIndex int, useManifestName bool,
330+
// getConfigurationPolicyName returns the `ConfigurationPolicy` name based on the provided PolicyConfig.
331+
// When a name is assigned, it increments the associated counter, using it as a suffix if it's greater
332+
// than one to create unique names. If both `manifest[].name` and `policies.name` are provided,
333+
// `manifest[].name` takes priority as the configuration name.
334+
func getConfigurationPolicyName(policyConf *types.PolicyConfig, manifestGroupIndex int,
335+
policyNameCounter *int, manifestNameCounter *int,
331336
) string {
332337
// Do not append a number to configName when it is used for the first time.
333338
configName := policyConf.Manifests[manifestGroupIndex].Name
334339

335-
if useManifestName && configName != "" {
336-
if manifestIndex > 0 {
337-
return fmt.Sprintf("%s%d", configName, manifestIndex+1)
340+
// For the case where ConsolidateManifests is true and the manifest's name is provided,
341+
if manifestNameCounter == nil && configName != "" {
342+
return configName
343+
}
344+
345+
if manifestNameCounter != nil && configName != "" {
346+
*manifestNameCounter++
347+
if *manifestNameCounter > 1 {
348+
return fmt.Sprintf("%s%d", configName, *manifestNameCounter)
338349
}
339350

340351
return configName
341352
}
342353

343354
configName = policyConf.Name
344-
if policyNum > 0 {
345-
return fmt.Sprintf("%s%d", configName, policyNum+1)
355+
356+
*policyNameCounter++
357+
if *policyNameCounter > 1 {
358+
return fmt.Sprintf("%s%d", configName, *policyNameCounter)
346359
}
347360

348361
return configName

0 commit comments

Comments
 (0)