func()

in pkg/virtualnode/resource_manager.go [138:180]


func (m *defaultResourceManager) findVirtualServiceDependencies(ctx context.Context, vn *appmesh.VirtualNode) (map[types.NamespacedName]*appmesh.VirtualService, error) {
	vsByKey := make(map[types.NamespacedName]*appmesh.VirtualService)
	vsRefs := ExtractVirtualServiceReferences(vn)
	if m.enableBackendGroups {
		for _, backendGroupRef := range vn.Spec.BackendGroups {
			// Wildcard special case
			bgKey := references.ObjectKeyForBackendGroupReference(vn, backendGroupRef)
			if bgKey.Name == "*" {
				var listOptions client.ListOptions
				listOptions.Namespace = bgKey.Namespace
				vsList := &appmesh.VirtualServiceList{}
				if err := m.k8sClient.List(ctx, vsList, &listOptions); err != nil {
					return nil, fmt.Errorf("could not list virtualservices for namespace: %s", bgKey.Namespace)
				}
				for _, vs := range vsList.Items {
					vsRef := appmesh.VirtualServiceReference{
						Namespace: aws.String(vs.Namespace),
						Name:      vs.Name,
					}
					vsRefs = append(vsRefs, vsRef)
				}
			} else {
				bg, err := m.referencesResolver.ResolveBackendGroupReference(ctx, vn, backendGroupRef)
				if err != nil {
					return nil, errors.Wrapf(err, "failed to resolve backendGroupRef")
				}
				vsRefs = append(vsRefs, bg.Spec.VirtualServices...)
			}
		}
	}
	for _, vsRef := range vsRefs {
		vsKey := references.ObjectKeyForVirtualServiceReference(vn, vsRef)
		if _, ok := vsByKey[vsKey]; ok {
			continue
		}
		vs, err := m.referencesResolver.ResolveVirtualServiceReference(ctx, vn, vsRef)
		if err != nil {
			return nil, errors.Wrapf(err, "failed to resolve virtualServiceRef")
		}
		vsByKey[vsKey] = vs
	}
	return vsByKey, nil
}