Skip to main content

Azure Resource IDs you can use

Project description

llamazure.rid : Resource IDs you can use

The llamazure.rid package provides a usable resource ID parser.

Benefits:

  • quickly get the actual resource targetted and not the basemost resource (for example, easily get a lock and not the resource it's on)
  • differentiate subscriptions, resource groups, resources, and child resources
  • preserve resource tree while keeping resource group and subscription information available
  • automatic case normalisation (seriously what's up with that)

This library includes several implementations of resource ID parsing. rid produces object-based resources; mp produces materialised-path based resources. Which to use? The mp makes it easy to traverse the bodies of Azure resources to reference other Azure resources. For example, if you have a Microsoft.Network/virtualNetworks and you want to show all of its ipConfigurations: You might get the virtualNetwork, list all ipConfigurations, and then join on the resource ID. In contrast, rid is harder to traverse azure resource data but easier to traverse the hierarchy. For example, it is very easy to get information about the target of a lock from the lock itself. It's also convenient to place rid into a tree structure, such as llamazure.rid.tresource; while mp use the materialised-path format for representing tree structures in relational systems.

rid : object-based resources

Usage

Just call parse to turn resource IDs into objects. That's it. The resource you want is the result, all the other information is chained in. You can also ask for the chain directly using the parse_chain method. This returns a list of all the parents of the resource, starting at the subscription. Having the chain is useful if you intend to use the hierarchy of resources, like pushing resources into a Tresource for the tree structure.

You'll know if a resource is a child resource if it has a non-None parent resource. It is a root resource if parent is None.

Examples

from llamazure.rid.rid import parse, Resource, ResourceGroup, Subscription
p = parse("/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/example/providers/Microsoft.Example/example_type/example_resource")

assert p == Resource(provider='microsoft.example',
         res_type='example_type',
         name='example_resource',
         rg=ResourceGroup(name='example',
                          sub=Subscription(uuid='00000000-0000-0000-0000-000000000000')),
         sub=Subscription(uuid='00000000-0000-0000-0000-000000000000'),
         parent=None)

mp : materialised-path-based resources

Usage

Just call parse to turn resource IDs into tuples of the path and the object. That's it. You can also get the parsed chain directly by using the parse_chain method. Having the chain might be less useful for mp than for rid. Materialised paths are often used to avoid having to join on parents, so having the parents may not be as helpful.

Examples

Parse the resource ID:

from llamazure.rid.mp import parse, Resource
path, resource = parse("/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/example/providers/Microsoft.Example/example_type/example_resource")

assert resource == Resource(
    path=path,
    provider='microsoft.example',
    res_type='example_type',
    name='example_resource',
    rg="/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/example",
    sub="/subscriptions/00000000-0000-0000-0000-000000000000"
)

Parse many resource IDs and convert them into a lookup table:

from llamazure.rid.mp import parse
resource_ids = [f"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/example/providers/Microsoft.Example/example_type/example_resource{i}" for i in range(10)]

resources = dict(parse(rid) for rid in resource_ids)

Design notes

Denormalised RG and Subscription

Denormalising the data by injecting the rg and subscription in every resource in the chain increases the usability. You can get this information directly, without having to walk up the tree. Also, not every resource has a resource group, so the data model already has to be looser to accomodate that fact. Denormalising also helps with the implementation somewhat, since we can just push forward with None in the resource group.

Classes for modelling

I used classes to model the type of object you get back. Sometimes this is annoying, like when you can get a Resource or a SubResource. But that's the reality of Azure.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

llamazure.rid-0.1.0.tar.gz (7.7 kB view details)

Uploaded Source

Built Distribution

llamazure.rid-0.1.0-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

Details for the file llamazure.rid-0.1.0.tar.gz.

File metadata

  • Download URL: llamazure.rid-0.1.0.tar.gz
  • Upload date:
  • Size: 7.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.12

File hashes

Hashes for llamazure.rid-0.1.0.tar.gz
Algorithm Hash digest
SHA256 5d9372024ee73499b8c8bf68125d787b31b41f2c1230675480541fee2c59e372
MD5 f72680028ba4072a6217d18f033899d3
BLAKE2b-256 8dd3388d12e0036d8da5c87fe5ea3675be5ea82957fc36ff5fa1749dadb9f4ad

See more details on using hashes here.

File details

Details for the file llamazure.rid-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for llamazure.rid-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 83765881ef26a0f64269327b1f7acd36ddd7002b44263691fd3da3d9ec1fd2b7
MD5 d5eeb349610060d9b00f8201578742ec
BLAKE2b-256 4959a7b5b4ab483dbda93cf67c4715f4d773e41ac55dd683f1729dec52414733

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page