in azext_edge/edge/util/id_tools.py [0:0]
def parse_resource_id(rid: str) -> Dict[str, str]:
"""Parses a resource_id into its various parts.
Returns a dictionary with a single key-value pair, 'name': rid, if invalid resource id.
:param rid: The resource id being parsed
:type rid: str
:returns: A dictionary with with following key/value pairs (if found):
- subscription: Subscription id
- resource_group: Name of resource group
- namespace: Namespace for the resource provider (i.e. Microsoft.Compute)
- type: Type of the root resource (i.e. virtualMachines)
- name: Name of the root resource
- child_namespace_{level}: Namespace for the child resoure of that level
- child_type_{level}: Type of the child resource of that level
- child_name_{level}: Name of the child resource of that level
- last_child_num: Level of the last child
- resource_parent: Computed parent in the following pattern: providers/{namespace}\
/{parent}/{type}/{name}
- resource_namespace: Same as namespace. Note that this may be different than the \
target resource's namespace.
- resource_type: Type of the target resource (not the parent)
- resource_name: Name of the target resource (not the parent)
:rtype: dict[str,str]
"""
if not rid:
return {}
match = _ARMID_RE.match(rid)
if match:
result = match.groupdict()
children = _CHILDREN_RE.finditer(result["children"] or "")
count = None
for count, child in enumerate(children):
result.update({key + "_%d" % (count + 1): group for key, group in child.groupdict().items()})
result["last_child_num"] = count + 1 if isinstance(count, int) else None
result = _populate_alternate_kwargs(result)
else:
result = {"name": rid}
return {key: value for key, value in result.items() if value is not None}