Skip to content

Commit b190a91

Browse files
authored
Use unique names with the consolidateManifests=false option (#27)
All generated configuration policies in a policy must be unique with the consolidateManifests=false option. The existing code did not account for that. Resolves: stolostron/backlog#17419 Signed-off-by: mprahl <[email protected]>
1 parent 0d76896 commit b190a91

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

internal/utils.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ func getPolicyTemplates(policyConf *types.PolicyConfig) ([]map[string]map[string
136136
policyTemplates := make([]map[string]map[string]interface{}, 0, policyTemplatesLength)
137137
for i, manifestGroup := range manifestGroups {
138138
complianceType := policyConf.Manifests[i].ComplianceType
139-
for _, manifest := range manifestGroup {
139+
for j, manifest := range manifestGroup {
140140
objTemplate := map[string]interface{}{
141141
"complianceType": complianceType,
142142
"objectDefinition": manifest,
@@ -147,7 +147,9 @@ func getPolicyTemplates(policyConf *types.PolicyConfig) ([]map[string]map[string
147147
} else {
148148
// casting each objTemplate with manifest to objectTemplates type
149149
// build policyTemplate for each objectTemplates
150-
policyTemplate := buildPolicyTemplate(policyConf, &[]map[string]interface{}{objTemplate})
150+
policyTemplate := buildPolicyTemplate(
151+
policyConf, i+j+1, &[]map[string]interface{}{objTemplate},
152+
)
151153
setNamespaceSelector(policyConf, policyTemplate)
152154
policyTemplates = append(policyTemplates, *policyTemplate)
153155
}
@@ -162,7 +164,7 @@ func getPolicyTemplates(policyConf *types.PolicyConfig) ([]map[string]map[string
162164

163165
// just build one policyTemplate by using the above consolidated objectTemplates
164166
if policyConf.ConsolidateManifests {
165-
policyTemplate := buildPolicyTemplate(policyConf, &objectTemplates)
167+
policyTemplate := buildPolicyTemplate(policyConf, 1, &objectTemplates)
166168
setNamespaceSelector(policyConf, policyTemplate)
167169
policyTemplates = append(policyTemplates, *policyTemplate)
168170
}
@@ -184,13 +186,23 @@ func setNamespaceSelector(policyConf *types.PolicyConfig, policyTemplate *map[st
184186
}
185187

186188
// buildPolicyTemplate generates single policy template by using objectTemplates with manifests.
187-
func buildPolicyTemplate(policyConf *types.PolicyConfig, objectTemplates *[]map[string]interface{}) *map[string]map[string]interface{} {
189+
// policyNum defines which number the configuration policy is in the policy. If it is greater than
190+
// one then the configuration policy name will have policyNum appended to it.
191+
func buildPolicyTemplate(
192+
policyConf *types.PolicyConfig, policyNum int, objectTemplates *[]map[string]interface{},
193+
) *map[string]map[string]interface{} {
194+
var name string
195+
if policyNum > 1 {
196+
name = fmt.Sprintf("%s%d", policyConf.Name, policyNum)
197+
} else {
198+
name = policyConf.Name
199+
}
188200
policyTemplate := map[string]map[string]interface{}{
189201
"objectDefinition": {
190202
"apiVersion": policyAPIVersion,
191203
"kind": configPolicyKind,
192204
"metadata": map[string]string{
193-
"name": policyConf.Name,
205+
"name": name,
194206
},
195207
"spec": map[string]interface{}{
196208
"object-templates": *objectTemplates,

internal/utils_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ data:
168168

169169
policyTemplate2 := policyTemplates[1]
170170
objdef2 := policyTemplate2["objectDefinition"]
171-
assertEqual(t, objdef2["metadata"].(map[string]string)["name"], "policy-app-config")
171+
assertEqual(t, objdef2["metadata"].(map[string]string)["name"], "policy-app-config2")
172172
spec2, ok := objdef2["spec"].(map[string]interface{})
173173
if !ok {
174174
t.Fatal("The spec field is an invalid format")

0 commit comments

Comments
 (0)