in pkg/inject/inject.go [55:98]
func (m *SidecarInjector) Inject(ctx context.Context, pod *corev1.Pod) error {
injectMode, err := m.determineSidecarInjectMode(ctx, pod)
if err != nil {
return errors.Wrap(err, "failed to determine sidecarInject mode")
}
if injectMode == sidecarInjectModeDisabled {
return nil
}
vn, err := m.vnMembershipDesignator.Designate(ctx, pod)
if err != nil {
return err
}
vg, err := m.vgMembershipDesignator.DesignateForPod(ctx, pod)
if err != nil {
return err
}
if vn != nil && vg != nil {
return errors.Errorf("sidecarInject enabled for both virtualNode %s and virtualGateway %s on pod %s. Please use podSelector on one", vn.Name, vg.Name, pod.Name)
}
if (vn == nil || vn.Spec.MeshRef == nil) && (vg == nil || vg.Spec.MeshRef == nil) {
if injectMode == sidecarInjectModeEnabled {
return errors.New("sidecarInject enabled but no matching VirtualNode or VirtualGateway found")
}
return nil
}
var msRef *appmesh.MeshReference
if vn != nil {
msRef = vn.Spec.MeshRef
} else if vg != nil {
msRef = vg.Spec.MeshRef
} else {
return errors.New("No matching VirtualNode or VirtualGateway found to resolve Mesh reference")
}
ms, err := m.referenceResolver.ResolveMeshReference(ctx, *msRef)
if err != nil {
return err
}
return m.injectAppMeshPatches(ms, vn, vg, pod)
}