Summary
The Azure Resource Graph emulator (server/azure/resourcegraph + resourcediscovery) returns a generic cross-cloud inventory rather than Azure-type-specific ARG rows. A real azure-sdk-for-go consumer that reads resource-type-specific fields (VM SKU, disk SKU/size, standalone managed disks, DB tier, etc.) cannot drive an end-to-end discovery/cost test against cloudemu today, because those fields aren't projected into the ARG response.
This blocks a real use case: pointing a production Azure discoverer + cost engine at cloudemu to verify SKU/tier/size-sensitive logic with no real account — which is otherwise cloudemu's strongest value proposition.
Evidence (real-SDK round trip)
Driving the real armresourcegraph client against httptest.NewTLSServer(azureserver.New(...)) with a VM and a CreateVolume disk seeded:
cloudP := cloudemu.NewAzure()
cloudP.VirtualMachines.RunInstances(ctx, computedriver.InstanceConfig{InstanceType: "Standard_D2s_v3"}, 1)
cloudP.VirtualMachines.CreateVolume(ctx, computedriver.VolumeConfig{Size: 4, VolumeType: "Premium_LRS"})
// ...azureserver.New(Drivers{VirtualMachines, Disks, ResourceDiscovery, SubscriptionID})...
Querying Resources | where type in~ (...) via the real SDK returns:
| Expected (real Azure ARG) |
cloudemu today |
VM row with sku.name = Standard_D2s_v3 (or properties.hardwareProfile.vmSize) |
VM row present, but SKU field empty — consumer reads InstanceType = "" |
microsoft.compute/disks row with sku.name + properties.diskSizeGB + managedBy |
No disk row emitted at all (CreateVolume volume not surfaced in ARG) |
Requested fidelity (fields real Azure ARG returns; needed for discovery/cost E2E)
1. Compute VMs — project into the ARG row:
sku.name or properties.hardwareProfile.vmSize = the VM size (e.g. Standard_D2s_v3)
properties.storageProfile.osDisk.osType (Linux/Windows)
properties.priority = Spot (interruptible pricing)
properties.licenseType (Windows_Server / RHEL_BYOS — Azure Hybrid Benefit)
2. Managed Disks (highest impact) — surface CreateVolume/CreateDisk volumes as first-class ARG resources of type microsoft.compute/disks with:
sku.name = Premium_LRS / StandardSSD_LRS / Standard_LRS / *_ZRS / PremiumV2_LRS / UltraSSD_LRS
properties.diskSizeGB = provisioned size
- top-level
managedBy = owning VM id (disk→VM parent link)
properties.diskIOPSReadWrite / properties.diskMBpsReadWrite (v2/Ultra)
3. PostgreSQL / MySQL Flexible Server — microsoft.dbforpostgresql/flexibleservers (+ mysql) with:
sku.name = the compute SKU (e.g. Standard_D2ds_v5)
properties.highAvailability.mode (ZoneRedundant / SameZone / Disabled)
4. Event Hubs — microsoft.eventhub/namespaces with sku.name/sku.tier (Basic / Standard / Premium).
Nice-to-have (secondary): SQL Managed Instance storage size, sqldatabase zoneRedundant, ML compute-instance vmSize + powerState.
Why it matters
With these fields, a real Azure discoverer + cost calculator can run a full offline E2E against cloudemu (discover → price → assert cost) for SKU/tier/size-sensitive logic. Today that verification stops at the SDK/protocol layer — cloudemu proves the wire round-trip and KQL, but not the resource-shape fidelity that downstream cost/rightsizing tools depend on.
Repro
Minimal armresourcegraph round-trip against azureserver.New with ResourceDiscovery wired (recipe already in server/azure/resourcegraph/sdk_test.go); seed a VM + volume as above and assert sku.name / diskSizeGB / a microsoft.compute/disks row.
Summary
The Azure Resource Graph emulator (
server/azure/resourcegraph+resourcediscovery) returns a generic cross-cloud inventory rather than Azure-type-specific ARG rows. A realazure-sdk-for-goconsumer that reads resource-type-specific fields (VM SKU, disk SKU/size, standalone managed disks, DB tier, etc.) cannot drive an end-to-end discovery/cost test against cloudemu today, because those fields aren't projected into the ARG response.This blocks a real use case: pointing a production Azure discoverer + cost engine at cloudemu to verify SKU/tier/size-sensitive logic with no real account — which is otherwise cloudemu's strongest value proposition.
Evidence (real-SDK round trip)
Driving the real
armresourcegraphclient againsthttptest.NewTLSServer(azureserver.New(...))with a VM and aCreateVolumedisk seeded:Querying
Resources | where type in~ (...)via the real SDK returns:sku.name=Standard_D2s_v3(orproperties.hardwareProfile.vmSize)InstanceType = ""microsoft.compute/disksrow withsku.name+properties.diskSizeGB+managedByCreateVolumevolume not surfaced in ARG)Requested fidelity (fields real Azure ARG returns; needed for discovery/cost E2E)
1. Compute VMs — project into the ARG row:
sku.nameorproperties.hardwareProfile.vmSize= the VM size (e.g.Standard_D2s_v3)properties.storageProfile.osDisk.osType(Linux/Windows)properties.priority=Spot(interruptible pricing)properties.licenseType(Windows_Server/RHEL_BYOS— Azure Hybrid Benefit)2. Managed Disks (highest impact) — surface
CreateVolume/CreateDiskvolumes as first-class ARG resources of typemicrosoft.compute/diskswith:sku.name=Premium_LRS/StandardSSD_LRS/Standard_LRS/*_ZRS/PremiumV2_LRS/UltraSSD_LRSproperties.diskSizeGB= provisioned sizemanagedBy= owning VM id (disk→VM parent link)properties.diskIOPSReadWrite/properties.diskMBpsReadWrite(v2/Ultra)3. PostgreSQL / MySQL Flexible Server —
microsoft.dbforpostgresql/flexibleservers(+ mysql) with:sku.name= the compute SKU (e.g.Standard_D2ds_v5)properties.highAvailability.mode(ZoneRedundant/SameZone/Disabled)4. Event Hubs —
microsoft.eventhub/namespaceswithsku.name/sku.tier(Basic/Standard/Premium).Nice-to-have (secondary): SQL Managed Instance storage size,
sqldatabasezoneRedundant, ML compute-instancevmSize+powerState.Why it matters
With these fields, a real Azure discoverer + cost calculator can run a full offline E2E against cloudemu (discover → price → assert cost) for SKU/tier/size-sensitive logic. Today that verification stops at the SDK/protocol layer — cloudemu proves the wire round-trip and KQL, but not the resource-shape fidelity that downstream cost/rightsizing tools depend on.
Repro
Minimal
armresourcegraphround-trip againstazureserver.NewwithResourceDiscoverywired (recipe already inserver/azure/resourcegraph/sdk_test.go); seed a VM + volume as above and assertsku.name/diskSizeGB/ amicrosoft.compute/disksrow.