func checkAllDefinitionsAreReferenced()

in internal/tools/checks/checkAllDefinitionsAreReferenced.go [16:38]


func checkAllDefinitionsAreReferenced(azany any) error {
	az, ok := azany.(*alzlib.AlzLib)
	if !ok {
		return fmt.Errorf("checkAllDefinitionsAreReferenced: expected *alzlib.AlzLib, got %T", azany)
	}
	// Test if we have policy (set) definitions that are not referenced by any archetype
	referencedPds := mapset.NewThreadUnsafeSet[string]()
	referencedPsds := mapset.NewThreadUnsafeSet[string]()
	referencedRds := mapset.NewThreadUnsafeSet[string]()
	for _, archetypeName := range az.Archetypes() {
		archetype := az.Archetype(archetypeName) // nolint: errcheck
		referencedPds = referencedPds.Union(archetype.PolicyDefinitions)
		referencedPsds = referencedPsds.Union(archetype.PolicySetDefinitions)
		referencedRds = referencedRds.Union(archetype.RoleDefinitions)
	}
	unreferencedPds := mapset.NewThreadUnsafeSet(az.PolicyDefinitions()...).Difference(referencedPds).ToSlice()
	unreferencedPsds := mapset.NewThreadUnsafeSet(az.PolicySetDefinitions()...).Difference(referencedPsds).ToSlice()
	unreferencedRds := mapset.NewThreadUnsafeSet(az.RoleDefinitions()...).Difference(referencedRds).ToSlice()
	if len(unreferencedPds) > 0 || len(unreferencedPsds) > 0 || len(unreferencedRds) > 0 {
		return fmt.Errorf("checkAllDefinitionsAreReferenced: found unreferenced definitions [policyDefinitions] [policySetDefinitions] [roleDefinitions]: %v, %v, %v", unreferencedPds, unreferencedPsds, unreferencedRds)
	}
	return nil
}