in alzlib.go [460:517]
func (az *AlzLib) GetDefinitionsFromAzure(ctx context.Context, pds []string) error {
policyDefsToGet := mapset.NewThreadUnsafeSet[string]()
policySetDefsToGet := mapset.NewThreadUnsafeSet[string]()
for _, pd := range pds {
resId, err := arm.ParseResourceID(pd)
if err != nil {
return fmt.Errorf("Alzlib.GetDefinitionsFromAzure: error parsing resource ID %s: %w", pd, err)
}
switch strings.ToLower(resId.ResourceType.Type) {
case "policydefinitions":
if !az.PolicyDefinitionExists(resId.Name) {
policyDefsToGet.Add(resId.Name)
}
case "policysetdefinitions":
// If the set is not present, OR if the set contains referenced definitions that are not present
// add it to the list of set defs to get.
exists := az.PolicySetDefinitionExists(resId.Name)
if exists {
psd := az.PolicySetDefinition(resId.Name)
if psd == nil {
return fmt.Errorf("Alzlib.GetDefinitionsFromAzure: error getting policy set definition %s: %w", pd, err)
}
pdrefs := psd.PolicyDefinitionReferences()
if pdrefs == nil {
return fmt.Errorf("Alzlib.GetDefinitionsFromAzure: error getting policy definition references for policy set definition %s: %w", pd, err)
}
for _, ref := range pdrefs {
subResId, err := arm.ParseResourceID(*ref.PolicyDefinitionID)
if err != nil {
return fmt.Errorf("Alzlib.GetDefinitionsFromAzure: policy set definition %s error parsing referenced definition resource id: %w", *psd.Name, err)
}
if _, exists := az.policyDefinitions[subResId.Name]; !exists {
policyDefsToGet.Add(subResId.Name)
}
}
} else {
policySetDefsToGet.Add(resId.Name)
}
default:
return fmt.Errorf("Alzlib.GetDefinitionsFromAzure: unexpected policy definition type when processing assignments: %s", pd)
}
}
// Add the referenced built-in definitions and set definitions to the AlzLib struct
// so that we can use the data to determine the correct role assignments at scope.
if policyDefsToGet.Cardinality() != 0 {
if err := az.getBuiltInPolicies(ctx, policyDefsToGet.ToSlice()); err != nil {
return fmt.Errorf("Alzlib.GetDefinitionsFromAzure: error getting built-in policy definitions: %w", err)
}
}
if policySetDefsToGet.Cardinality() != 0 {
if err := az.getBuiltInPolicySets(ctx, policySetDefsToGet.ToSlice()); err != nil {
return fmt.Errorf("Alzlib.GetDefinitionsFromAzure: error getting built-in policy set definitions: %w", err)
}
}
return nil
}