in alzlib.go [668:715]
func (az *AlzLib) generateArchetypes(res *processor.Result) error {
// add empty archetype if it doesn't exist.
if _, exists := az.archetypes["empty"]; !exists {
if _, exists := res.LibArchetypes["empty"]; !exists {
res.LibArchetypes["empty"] = &processor.LibArchetype{
Name: "empty",
PolicyAssignments: mapset.NewThreadUnsafeSet[string](),
PolicyDefinitions: mapset.NewThreadUnsafeSet[string](),
PolicySetDefinitions: mapset.NewThreadUnsafeSet[string](),
RoleDefinitions: mapset.NewThreadUnsafeSet[string](),
}
}
}
// generate alzlib archetypes.
for k, v := range res.LibArchetypes {
if _, exists := az.archetypes[k]; exists && !az.Options.AllowOverwrite {
return fmt.Errorf("Alzlib.generateArchetypes: archetype %s already exists in the library", v.Name)
}
arch := NewArchetype(v.Name)
for pd := range v.PolicyDefinitions.Iter() {
if _, ok := az.policyDefinitions[pd]; !ok {
return fmt.Errorf("Alzlib.generateArchetypes: error processing archetype %s, policy definition %s does not exist in the library", k, pd)
}
arch.PolicyDefinitions.Add(pd)
}
for psd := range v.PolicySetDefinitions.Iter() {
if _, ok := az.policySetDefinitions[psd]; !ok {
return fmt.Errorf("Alzlib.generateArchetypes: error processing archetype %s, policy set definition %s does not exist in the library", k, psd)
}
arch.PolicySetDefinitions.Add(psd)
}
for pa := range v.PolicyAssignments.Iter() {
if _, ok := az.policyAssignments[pa]; !ok {
return fmt.Errorf("Alzlib.generateArchetypes: error processing archetype %s, policy assignment %s does not exist in the library", k, pa)
}
arch.PolicyAssignments.Add(pa)
}
for rd := range v.RoleDefinitions.Iter() {
if _, ok := az.roleDefinitions[rd]; !ok {
return fmt.Errorf("Alzlib.generateArchetypes: error processing archetype %s, role definition %s does not exist in the library", k, rd)
}
arch.RoleDefinitions.Add(rd)
}
az.archetypes[v.Name] = arch
}
return nil
}