internal/scanners/management_groups.go (42 lines of code) (raw):
package scanners
import (
"context"
"github.com/Azure/azqr/internal/models"
"github.com/Azure/azqr/internal/to"
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managementgroups/armmanagementgroups"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/subscription/armsubscription"
"github.com/rs/zerolog/log"
)
type ManagementGroupsScanner struct{}
func (sc ManagementGroupsScanner) ListSubscriptions(ctx context.Context, cred azcore.TokenCredential, groupID string, filters *models.Filters, options *arm.ClientOptions) map[string]string {
client, err := armmanagementgroups.NewClientFactory(cred, options)
if err != nil {
log.Fatal().Err(err).Msg("Failed to create management groups client")
}
resultPager := client.NewManagementGroupSubscriptionsClient().NewGetSubscriptionsUnderManagementGroupPager(groupID, nil)
subscriptions := make([]*armmanagementgroups.SubscriptionUnderManagementGroup, 0)
for resultPager.More() {
pageResp, err := resultPager.NextPage(ctx)
if err != nil {
log.Fatal().Err(err).Msg("Failed to list management group subscriptions")
}
for _, s := range pageResp.Value {
if s.Properties.State != to.Ptr(string(armsubscription.SubscriptionStateDisabled)) &&
s.Properties.State != to.Ptr(string(armsubscription.SubscriptionStateDeleted)) {
subscriptions = append(subscriptions, s)
}
}
}
result := map[string]string{}
for _, s := range subscriptions {
sid := *s.Name
if filters.Azqr.IsSubscriptionExcluded(sid) {
log.Info().Msgf("Skipping subscriptions/...%s", sid[29:])
continue
}
result[sid] = *s.Properties.DisplayName
}
return result
}