in pkg/xds/context/mesh_context_builder.go [202:262]
func (m *meshContextBuilder) fetchResourceList(ctx context.Context, resType core_model.ResourceType, mesh *core_mesh.MeshResource, filterFn filterFn) (core_model.ResourceList, error) {
var listOptsFunc []core_store.ListOptionsFunc
desc, err := registry.Global().DescriptorFor(resType)
if err != nil {
return nil, err
}
switch desc.Scope {
case core_model.ScopeGlobal:
case core_model.ScopeMesh:
if mesh != nil {
listOptsFunc = append(listOptsFunc, core_store.ListByMesh(mesh.GetMeta().GetName()))
}
default:
return nil, fmt.Errorf("unknown resource scope:%s", desc.Scope)
}
listOptsFunc = append(listOptsFunc, core_store.ListOrdered())
list := desc.NewList()
// TODO: Currently, We only interested in Dataplane, Mapping, Mesh and MetaData
acceptedTypes := map[core_model.ResourceType]struct{}{
core_mesh.DataplaneType: {},
core_mesh.MappingType: {},
core_mesh.MeshType: {},
core_mesh.MetaDataType: {},
}
if _, ok := acceptedTypes[resType]; !ok {
// ignore non-dataplane resources
return list, nil
}
if err := m.rm.List(ctx, list, listOptsFunc...); err != nil {
return nil, err
}
if resType != core_mesh.ZoneIngressType && resType != core_mesh.DataplaneType && filterFn == nil {
// No post processing stuff so return the list as is
return list, nil
}
list, err = modifyAllEntries(list, func(resource core_model.Resource) (core_model.Resource, error) {
if filterFn != nil && !filterFn(resource) {
return nil, nil
}
switch resType {
case core_mesh.DataplaneType:
list, err = modifyAllEntries(list, func(resource core_model.Resource) (core_model.Resource, error) {
dp, ok := resource.(*core_mesh.DataplaneResource)
if !ok {
return nil, errors.New("entry is not a dataplane this shouldn't happen")
}
zi, err := xds_topology.ResolveDataplaneAddress(m.ipFunc, dp)
if err != nil {
return nil, nil
}
return zi, nil
})
}
return resource, nil
})
if err != nil {
return nil, err
}
return list, nil
}