mirror of https://github.com/grafana/grafana.git
FS: Remove multiTenantFrontend flag (#110776)
* FS: Move multiTenantFrontend evaluation to OpenFeature * comment * actually, just remove the toggle * fix k8s prefs test using toggle * replace frontend flag usage * codeowners * move isFrontendService just into core * put back comment
This commit is contained in:
parent
7651b7b77e
commit
4e05bb36f2
|
@ -870,6 +870,7 @@ playwright.storybook.config.ts @grafana/grafana-frontend-platform
|
|||
/public/app/core/utils/accessControl.ts @grafana/identity-access-team
|
||||
/public/app/core/utils/applyStateChanges.ts @grafana/dashboards-squad
|
||||
/public/app/core/utils/arrayMove.ts @grafana/grafana-frontend-platform
|
||||
/public/app/core/utils/isFrontendService.ts @grafana/grafana-frontend-platform
|
||||
/public/app/core/utils/auth.ts @grafana/identity-access-team
|
||||
/public/app/core/utils/browser* @grafana/grafana-frontend-platform
|
||||
/public/app/core/utils/colors.ts @grafana/grafana-frontend-platform
|
||||
|
|
|
@ -35,7 +35,7 @@ services:
|
|||
GF_DEFAULT_APP_MODE: development
|
||||
GF_PANELS_ENABLE_ALPHA: true
|
||||
GF_SERVER_CDN_URL: http://localhost:3010
|
||||
GF_FEATURE_TOGGLES_ENABLE: multiTenantFrontend enableNativeHTTPHistogram
|
||||
GF_FEATURE_TOGGLES_ENABLE: enableNativeHTTPHistogram
|
||||
GF_DATABASE_URL: postgres://grafana:grafana@postgres:5432/grafana
|
||||
GF_SERVER_ROUTER_LOGGING: true
|
||||
GF_LOG_LEVEL: info
|
||||
|
|
|
@ -195,6 +195,9 @@ export interface BootData {
|
|||
light: string;
|
||||
dark: string;
|
||||
};
|
||||
|
||||
/** @deprecated Internal Grafana usage only. This property will be removed at any time. */
|
||||
_femt?: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -965,10 +965,6 @@ export interface FeatureToggles {
|
|||
*/
|
||||
pluginsAutoUpdate?: boolean;
|
||||
/**
|
||||
* Register MT frontend
|
||||
*/
|
||||
multiTenantFrontend?: boolean;
|
||||
/**
|
||||
* Enables the alerting list view v2 preview toggle
|
||||
*/
|
||||
alertingListViewV2PreviewToggle?: boolean;
|
||||
|
|
|
@ -84,10 +84,8 @@ func (hs *HTTPServer) registerRoutes() {
|
|||
r.Get("/login", hs.LoginView)
|
||||
r.Get("/invite/:code", hs.Index)
|
||||
|
||||
if hs.Features.IsEnabledGlobally(featuremgmt.FlagMultiTenantFrontend) {
|
||||
// Temporarily expose the full bootdata via API
|
||||
r.Get("/bootdata", reqNoAuth, hs.GetBootdata)
|
||||
}
|
||||
// Temporary MT-frontend config endpoint
|
||||
r.Get("/bootdata", reqNoAuth, hs.GetBootdata)
|
||||
|
||||
// authed views
|
||||
r.Get("/", reqSignedIn, hs.Index)
|
||||
|
|
|
@ -32,9 +32,12 @@ import (
|
|||
// NOTE: this should not be added to the public API docs, and is useful for a transition
|
||||
// towards a fully static index.html -- this will likely be replaced with multiple calls
|
||||
func (hs *HTTPServer) GetBootdata(c *contextmodel.ReqContext) {
|
||||
c, span := hs.injectSpan(c, "api.GetBootdata")
|
||||
defer span.End()
|
||||
|
||||
data, err := hs.setIndexViewData(c)
|
||||
if err != nil {
|
||||
c.Handle(hs.Cfg, http.StatusInternalServerError, "Failed to get settings", err)
|
||||
c.JsonApiErr(http.StatusInternalServerError, "Failed to get settings", err)
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, data)
|
||||
|
|
|
@ -1664,13 +1664,6 @@ var (
|
|||
FrontendOnly: false,
|
||||
Owner: grafanaPluginsPlatformSquad,
|
||||
},
|
||||
{
|
||||
Name: "multiTenantFrontend",
|
||||
Description: "Register MT frontend",
|
||||
Stage: FeatureStageExperimental,
|
||||
FrontendOnly: false,
|
||||
Owner: grafanaFrontendPlatformSquad,
|
||||
},
|
||||
{
|
||||
Name: "alertingListViewV2PreviewToggle",
|
||||
Description: "Enables the alerting list view v2 preview toggle",
|
||||
|
|
|
@ -216,7 +216,6 @@ grafanaAssistantInProfilesDrilldown,GA,@grafana/observability-traces-and-profili
|
|||
postgresDSUsePGX,experimental,@grafana/oss-big-tent,false,false,false
|
||||
tempoAlerting,experimental,@grafana/observability-traces-and-profiling,false,false,true
|
||||
pluginsAutoUpdate,experimental,@grafana/plugins-platform-backend,false,false,false
|
||||
multiTenantFrontend,experimental,@grafana/grafana-frontend-platform,false,false,false
|
||||
alertingListViewV2PreviewToggle,privatePreview,@grafana/alerting-squad,false,false,true
|
||||
alertRuleUseFiredAtForStartsAt,experimental,@grafana/alerting-squad,false,false,false
|
||||
alertingBulkActionsInUI,GA,@grafana/alerting-squad,false,false,true
|
||||
|
|
|
|
@ -875,10 +875,6 @@ const (
|
|||
// Enables auto-updating of users installed plugins
|
||||
FlagPluginsAutoUpdate = "pluginsAutoUpdate"
|
||||
|
||||
// FlagMultiTenantFrontend
|
||||
// Register MT frontend
|
||||
FlagMultiTenantFrontend = "multiTenantFrontend"
|
||||
|
||||
// FlagAlertingListViewV2PreviewToggle
|
||||
// Enables the alerting list view v2 preview toggle
|
||||
FlagAlertingListViewV2PreviewToggle = "alertingListViewV2PreviewToggle"
|
||||
|
|
|
@ -2229,7 +2229,8 @@
|
|||
"metadata": {
|
||||
"name": "multiTenantFrontend",
|
||||
"resourceVersion": "1753448760331",
|
||||
"creationTimestamp": "2025-04-25T09:24:25Z"
|
||||
"creationTimestamp": "2025-04-25T09:24:25Z",
|
||||
"deletionTimestamp": "2025-09-08T17:06:39Z"
|
||||
},
|
||||
"spec": {
|
||||
"description": "Register MT frontend",
|
||||
|
|
|
@ -252,7 +252,7 @@
|
|||
const rawBootData = await loadBootData();
|
||||
|
||||
window.grafanaBootData = {
|
||||
_femt: true,
|
||||
_femt: true, // isFrontendService() needs this
|
||||
...rawBootData,
|
||||
}
|
||||
|
||||
|
|
|
@ -30,7 +30,6 @@ func TestIntegrationPreferences(t *testing.T) {
|
|||
DisableAnonymous: true,
|
||||
EnableFeatureToggles: []string{
|
||||
featuremgmt.FlagGrafanaAPIServerWithExperimentalAPIs,
|
||||
featuremgmt.FlagMultiTenantFrontend, // So we can compare to boot-data preferences
|
||||
},
|
||||
})
|
||||
|
||||
|
|
|
@ -22,9 +22,9 @@ describe('SignInLink', () => {
|
|||
expect(link).toHaveAttribute('target', '_self');
|
||||
});
|
||||
|
||||
describe('with multiTenantFrontend toggle enabled', () => {
|
||||
describe('with frontend-service enabled', () => {
|
||||
beforeAll(() => {
|
||||
config.featureToggles.multiTenantFrontend = true;
|
||||
config.bootData._femt = true;
|
||||
});
|
||||
|
||||
it('should render a link to the login page', () => {
|
||||
|
|
|
@ -4,12 +4,12 @@ import { useLocation } from 'react-router-dom-v5-compat';
|
|||
|
||||
import { GrafanaTheme2, locationUtil, textUtil } from '@grafana/data';
|
||||
import { Trans } from '@grafana/i18n';
|
||||
import { config } from '@grafana/runtime';
|
||||
import { useStyles2 } from '@grafana/ui';
|
||||
import { contextSrv } from 'app/core/services/context_srv';
|
||||
import { isFrontendService } from 'app/core/utils/isFrontendService';
|
||||
|
||||
export function SignInLink() {
|
||||
const femt = Boolean(config.featureToggles.multiTenantFrontend);
|
||||
const femt = isFrontendService();
|
||||
const location = useLocation();
|
||||
const styles = useStyles2(getStyles);
|
||||
let loginUrl = femt
|
||||
|
|
|
@ -3,6 +3,7 @@ import { Navigate, useLocation } from 'react-router-dom-v5-compat';
|
|||
|
||||
import { config, locationSearchToObject, navigationLogger, reportPageview } from '@grafana/runtime';
|
||||
import { ErrorBoundary } from '@grafana/ui';
|
||||
import { isFrontendService } from 'app/core/utils/isFrontendService';
|
||||
|
||||
import { useGrafana } from '../context/GrafanaContext';
|
||||
import { contextSrv } from '../services/context_srv';
|
||||
|
@ -64,7 +65,7 @@ export function GrafanaRouteWrapper({ route }: Pick<Props, 'route'>) {
|
|||
const location = useLocation();
|
||||
|
||||
// Perform login check in the frontend now
|
||||
if (config.featureToggles.multiTenantFrontend) {
|
||||
if (isFrontendService()) {
|
||||
const routeRequiresSignin = !route.allowAnonymous && !config.anonymousEnabled;
|
||||
if (routeRequiresSignin && !contextSrv.isSignedIn) {
|
||||
contextSrv.setRedirectToUrl();
|
||||
|
|
|
@ -23,7 +23,7 @@ export interface RouteDescriptor {
|
|||
|
||||
/**
|
||||
* Allow the route to be access by anonymous users.
|
||||
* Currently only used if the `multiTenantFrontend` feature toggle is enabled.
|
||||
* Currently only used when using the frontend-service.
|
||||
*/
|
||||
allowAnonymous?: boolean;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
import { config } from '@grafana/runtime';
|
||||
|
||||
/**
|
||||
* Returns true if the current instance is using the frontend-service.
|
||||
* @internal
|
||||
*/
|
||||
export function isFrontendService() {
|
||||
return config.bootData._femt;
|
||||
}
|
Loading…
Reference in New Issue