in alzlib.go [567:615]
func (az *AlzLib) getBuiltInPolicySets(ctx context.Context, names []string) error {
if az.clients.policyClient == nil {
return errors.New("Alzlib.getBuiltInPolicySets: policy client not set")
}
// We need to keep track of the names we've processed
// so that we can get the policy definitions referenced within them.
processedNames := make([]string, 0, len(names))
psclient := az.clients.policyClient.NewSetDefinitionsClient()
for _, name := range names {
if az.PolicySetDefinitionExists(name) {
continue
}
resp, err := psclient.GetBuiltIn(ctx, name, nil)
if err != nil {
return fmt.Errorf("Alzlib.getBuiltInPolicySets: error getting built-in policy set definition %s: %w", name, err)
}
// Add set definition to the AlzLib.
if err := az.AddPolicySetDefinitions(assets.NewPolicySetDefinition(resp.SetDefinition)); err != nil {
return fmt.Errorf("Alzlib.getBuiltInPolicySets: error adding built-in policy set definition %s: %w", name, err)
}
processedNames = append(processedNames, name)
}
// Get the policy definitions for newly added policy set definitions.
defnames := make([]string, 0)
for _, name := range processedNames {
def := az.PolicySetDefinition(name)
refs := def.PolicyDefinitionReferences()
if refs == nil {
return fmt.Errorf("Alzlib.getBuiltInPolicySets: error getting policy definition references for policy set definition `%s`. Either the policy set definition does not exist or cannot get policy definition references", name)
}
for _, ref := range refs {
resId, err := arm.ParseResourceID(*ref.PolicyDefinitionID)
if err != nil {
if ref.PolicyDefinitionID == nil {
return fmt.Errorf("Alzlib.getBuiltInPolicySets: error getting policy definition references for policy set definition `%s`: policy definition ID is nil", name)
}
return fmt.Errorf("Alzlib.getBuiltInPolicySets: error parsing resource id `%s` referenced in policy set `%s`", *ref.PolicyDefinitionID, name)
}
defnames = append(defnames, resId.Name)
}
}
if err := az.getBuiltInPolicies(ctx, defnames); err != nil {
return fmt.Errorf("Alzlib.getBuiltInPolicySets: error getting new built-in policy definitions referenced by policy sets: %w", err)
}
return nil
}