func()

in internal/meta/meta_rg.go [93:154]


func (meta MetaResourceGroup) queryResourceSet(ctx context.Context, rg string) (*resourceset.AzureResourceSet, error) {
	var rl []resourceset.AzureResource

	// Try to get the resource group (with any extension resources) first, in case it doesn't exist.
	opt := azlist.Option{
		Logger:                 meta.logger.WithGroup("azlist"),
		SubscriptionId:         meta.subscriptionId,
		Cred:                   meta.azureSDKCred,
		ClientOpt:              meta.azureSDKClientOpt,
		Parallelism:            meta.parallelism,
		ExtensionResourceTypes: extBuilder{includeRoleAssignment: meta.includeRoleAssignment}.Build(),
		ARGTable:               "ResourceContainers",
	}
	lister, err := azlist.NewLister(opt)
	if err != nil {
		return nil, fmt.Errorf("building azlister for listing resource group only: %v", err)
	}
	result, err := lister.List(ctx, fmt.Sprintf("name == %q", rg))
	if err != nil {
		return nil, fmt.Errorf("listing resource group only: %w", err)
	}
	for _, res := range result.Resources {
		res := resourceset.AzureResource{
			Id:         res.Id,
			Properties: res.Properties,
		}
		rl = append(rl, res)
	}

	// Skip the resource listing if the resource group itself doesn't exist.
	if len(result.Resources) == 0 {
		return &resourceset.AzureResourceSet{}, nil
	}

	// List the resources within the resource group.
	opt = azlist.Option{
		Logger:                 meta.logger.WithGroup("azlist"),
		SubscriptionId:         meta.subscriptionId,
		Cred:                   meta.azureSDKCred,
		ClientOpt:              meta.azureSDKClientOpt,
		Parallelism:            meta.parallelism,
		ExtensionResourceTypes: extBuilder{includeRoleAssignment: meta.includeRoleAssignment}.Build(),
		Recursive:              true,
	}
	lister, err = azlist.NewLister(opt)
	if err != nil {
		return nil, fmt.Errorf("building azlister for listing resource group: %v", err)
	}
	result, err = lister.List(ctx, fmt.Sprintf("resourceGroup =~ %q", rg))
	if err != nil {
		return nil, fmt.Errorf("listing resource group: %w", err)
	}
	for _, res := range result.Resources {
		res := resourceset.AzureResource{
			Id:         res.Id,
			Properties: res.Properties,
		}
		rl = append(rl, res)
	}

	return &resourceset.AzureResourceSet{Resources: rl}, nil
}