func getParentIds()

in tools/generator-example-doc/main.go [215:269]


func getParentIds(resourceType string) []string {
	const defaultParentId = "{any azure resource id}"
	apiVersions := azure.GetApiVersions(resourceType)
	if len(apiVersions) == 0 {
		return nil
	}
	resourceDef, err := azure.GetResourceDefinition(resourceType, apiVersions[0])
	if err != nil || resourceDef == nil {
		return nil
	}

	if utils.IsTopLevelResourceType(resourceType) {
		scopeIds := make([]string, 0)
		for _, scope := range resourceDef.ScopeTypes {
			switch scope {
			case types.Tenant:
				scopeIds = append(scopeIds, "/")
			case types.Subscription:
				scopeIds = append(scopeIds, "/subscriptions/{subscriptionId}")
			case types.ManagementGroup:
				scopeIds = append(scopeIds, "/providers/Microsoft.Management/managementGroups/{managementGroupId}")
			case types.ResourceGroup:
				scopeIds = append(scopeIds, "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}")
			case types.Extension:
				scopeIds = append(scopeIds, defaultParentId)
			default:
				scopeIds = append(scopeIds, defaultParentId)
			}
		}
		return scopeIds
	}

	parentResourceType := resourceType[:strings.LastIndex(resourceType, "/")]
	parentResourceParentIds := getParentIds(parentResourceType)
	if len(parentResourceParentIds) == 0 {
		return []string{defaultParentId}
	}

	parentIds := make([]string, 0)
	lastSegment := parentResourceType[strings.LastIndex(parentResourceType, "/")+1:]
	resourceProvider := strings.Split(parentResourceType, "/")[0]
	for _, parentId := range parentResourceParentIds {
		if parentId == defaultParentId {
			parentIds = append(parentIds, defaultParentId)
			continue
		}
		if utils.IsTopLevelResourceType(parentResourceType) {
			parentIds = append(parentIds, fmt.Sprintf("%s/providers/%s/%s/{resourceName}", parentId, resourceProvider, lastSegment))
		} else {
			parentIds = append(parentIds, fmt.Sprintf("%s/%s/{resourceName}", parentId, lastSegment))
		}
	}

	return parentIds
}