Created
August 8, 2024 10:31
-
-
Save anjannath/ddbd8e5270fa83e674329f5afec00ea2 to your computer and use it in GitHub Desktop.
Filter Azure compute resources
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"context" | |
"fmt" | |
"log" | |
"os" | |
"strconv" | |
"sync" | |
"github.com/Azure/azure-sdk-for-go/sdk/azidentity" | |
armcompute "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6" | |
) | |
func main() { | |
cred, err := azidentity.NewDefaultAzureCredential(nil) | |
if err != nil { | |
log.Fatalf("failed to obtain a credential: %v", err) | |
} | |
ctx := context.Background() | |
subscriptionId := os.Getenv("ARM_SUBSCRIPTION_ID") | |
clientFactory, err := armcompute.NewClientFactory(subscriptionId, cred, nil) | |
if err != nil { | |
log.Fatalf("failed to create client: %v", err) | |
} | |
pager := clientFactory.NewResourceSKUsClient().NewListPager(&armcompute.ResourceSKUsClientListOptions{Filter: nil, | |
IncludeExtendedLocations: nil, | |
}) | |
wg := &sync.WaitGroup{} | |
for pager.More() { | |
page, err := pager.NextPage(ctx) | |
if err != nil { | |
log.Fatalf("failed to advance page: %v", err) | |
} | |
wg.Add(1) | |
go FilterVMs(wg, page, filterCPUsAndMemory(64, 256)) | |
} | |
wg.Wait() | |
} | |
type filterFunc func(*armcompute.ResourceSKU) bool | |
func filterCPUsAndMemory(cpus, memory uint64) filterFunc { | |
return func(res *armcompute.ResourceSKU) bool { | |
choose := false | |
for _, capability := range res.Capabilities { | |
if *capability.Name == "vCPUs" { | |
vCpus, err := strconv.ParseUint(*capability.Value, 10, 64) | |
if err != nil { | |
return false | |
} | |
choose = choose || (vCpus >= cpus) | |
} | |
if *capability.Name == "MemoryGB" { | |
mem, err := strconv.ParseUint(*capability.Value, 10, 64) | |
if err != nil { | |
return false | |
} | |
choose = choose && (mem == memory) | |
} | |
} | |
return choose | |
} | |
} | |
func filterCPUsMemoryAndDedicatedHost(cpus, memory uint64) filterFunc { | |
return func(res *armcompute.ResourceSKU) bool { | |
// figure out the instance name family type and compare to dedicated hosts family list | |
return false | |
} | |
} | |
func FilterVMs(wg *sync.WaitGroup, skus armcompute.ResourceSKUsClientListResponse, filter filterFunc) { | |
defer wg.Done() | |
for _, v := range skus.Value { | |
if filter(v) { | |
fmt.Println("VirtualMachine name: ", *v.Name) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment