func()

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
}