in pkg/safeguards/manifestresults.go [38:111]
func GetManifestResults(ctx context.Context, manifestFiles []types.ManifestFile) ([]types.ManifestResult, error) {
if len(manifestFiles) == 0 {
return nil, fmt.Errorf("path cannot be empty")
}
manifestResults := make([]types.ManifestResult, 0)
// constraint client instantiation
c, err := getConstraintClient()
if err != nil {
return manifestResults, err
}
// retrieval of templates, constraints, and deployment
constraintTemplates, err := fc.ReadConstraintTemplates()
if err != nil {
return manifestResults, err
}
constraints, err := fc.ReadConstraints()
if err != nil {
return manifestResults, err
}
// loading of templates, constraints into constraint client
err = loadConstraintTemplates(ctx, c, constraintTemplates)
if err != nil {
return manifestResults, err
}
err = loadConstraints(ctx, c, constraints)
if err != nil {
return manifestResults, err
}
// organized map of manifest object by file name
manifestMap := make(map[string][]*unstructured.Unstructured, 0)
// aggregate of every manifest object into one list
allManifestObjects := []*unstructured.Unstructured{}
for _, m := range manifestFiles {
manifestObjects, err := fc.ReadManifests(m.ManifestContent) // read all the objects stored in a single file
if err != nil {
log.Errorf("reading objects %s", err.Error())
return manifestResults, err
}
allManifestObjects = append(allManifestObjects, manifestObjects...)
manifestMap[m.Name] = manifestObjects
}
if len(allManifestObjects) > 0 {
err := loadManifestObjects(ctx, c, allManifestObjects)
if err != nil {
return manifestResults, err
}
}
for _, m := range manifestFiles {
var objectViolations map[string][]string
// validation of deployment manifest with constraints, templates loaded
objectViolations, err = getObjectViolations(ctx, c, manifestMap[m.Name])
if err != nil {
log.Errorf("validating objects: %s", err.Error())
return manifestResults, err
}
manifestResults = append(manifestResults, types.ManifestResult{
Name: m.Name,
ObjectViolations: objectViolations,
ViolationsCount: len(objectViolations),
})
}
return manifestResults, nil
}