func()

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
}