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
}