in pkg/mesh/membership_designator.go [36:72]
func (d *membershipDesignator) Designate(ctx context.Context, obj metav1.Object) (*appmesh.Mesh, error) {
objNS := corev1.Namespace{}
if err := d.k8sClient.Get(ctx, types.NamespacedName{Name: obj.GetNamespace()}, &objNS); err != nil {
return nil, errors.Wrapf(err, "failed to get namespace: %s", obj.GetNamespace())
}
meshList := appmesh.MeshList{}
if err := d.k8sClient.List(ctx, &meshList); err != nil {
return nil, errors.Wrap(err, "failed to list meshes in cluster")
}
var meshCandidates []*appmesh.Mesh
for _, meshObj := range meshList.Items {
selector, err := metav1.LabelSelectorAsSelector(meshObj.Spec.NamespaceSelector)
if err != nil {
return nil, err
}
if selector.Matches(labels.Set(objNS.Labels)) {
meshCandidates = append(meshCandidates, meshObj.DeepCopy())
}
}
if len(meshCandidates) == 0 {
return nil, errors.Errorf("failed to find matching mesh for namespace: %s, expecting 1 but found %d",
obj.GetNamespace(), 0)
}
if len(meshCandidates) > 1 {
var meshCandidatesNames []string
for _, mesh := range meshCandidates {
meshCandidatesNames = append(meshCandidatesNames, mesh.Name)
}
return nil, errors.Errorf("found multiple matching meshes for namespace: %s, expecting 1 but found %d: %s",
obj.GetNamespace(), len(meshCandidates), strings.Join(meshCandidatesNames, ","))
}
if !meshCandidates[0].DeletionTimestamp.IsZero() {
return nil, errors.Errorf("unable to create new content in mesh %s because it is being terminated", meshCandidates[0].Name)
}
return meshCandidates[0], nil
}