add support to the new frontend system

Signed-off-by: Nurit Izrailov <nuriti@spotify.com>
This commit is contained in:
Nurit Izrailov
2024-07-23 11:33:26 -04:00
parent 2ab03460d5
commit e6c15cc304
14 changed files with 363 additions and 1 deletions
+18
View File
@@ -0,0 +1,18 @@
/*
* Copyright 2023 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export * from './alpha/index';
export { default } from './alpha/index';
@@ -0,0 +1,24 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { useEntity } from '@backstage/plugin-catalog-react';
import { KubernetesContent } from '../KubernetesContent';
import React from 'react';
export function KubernetesContentPage() {
const { entity } = useEntity();
return <KubernetesContent entity={entity} />;
}
+119
View File
@@ -0,0 +1,119 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
createApiExtension,
createApiFactory,
discoveryApiRef,
fetchApiRef,
} from '@backstage/frontend-plugin-api';
import {
KubernetesBackendClient,
kubernetesApiRef,
kubernetesProxyApiRef,
kubernetesAuthProvidersApiRef,
KubernetesAuthProviders,
KubernetesProxyClient,
kubernetesClusterLinkFormatterApiRef,
getDefaultFormatters,
KubernetesClusterLinkFormatter,
DEFAULT_FORMATTER_NAME,
} from '@backstage/plugin-kubernetes-react';
import {
gitlabAuthApiRef,
googleAuthApiRef,
microsoftAuthApiRef,
oktaAuthApiRef,
oneloginAuthApiRef,
} from '@backstage/core-plugin-api';
export const kubernetesApiExtension = createApiExtension({
factory: createApiFactory({
api: kubernetesApiRef,
deps: {
discoveryApi: discoveryApiRef,
fetchApi: fetchApiRef,
kubernetesAuthProvidersApi: kubernetesAuthProvidersApiRef,
},
factory: ({ discoveryApi, fetchApi, kubernetesAuthProvidersApi }) =>
new KubernetesBackendClient({
discoveryApi,
fetchApi,
kubernetesAuthProvidersApi,
}),
}),
});
export const kubernetesProxyApi = createApiExtension({
factory: createApiFactory({
api: kubernetesProxyApiRef,
deps: {
kubernetesApi: kubernetesApiRef,
},
factory: ({ kubernetesApi }) =>
new KubernetesProxyClient({
kubernetesApi,
}),
}),
});
export const kubernetesAuthProvidersApi = createApiExtension({
factory: createApiFactory({
api: kubernetesAuthProvidersApiRef,
deps: {
gitlabAuthApi: gitlabAuthApiRef,
googleAuthApi: googleAuthApiRef,
microsoftAuthApi: microsoftAuthApiRef,
oktaAuthApi: oktaAuthApiRef,
oneloginAuthApi: oneloginAuthApiRef,
},
factory: ({
gitlabAuthApi,
googleAuthApi,
microsoftAuthApi,
oktaAuthApi,
oneloginAuthApi,
}) => {
const oidcProviders = {
gitlab: gitlabAuthApi,
google: googleAuthApi,
microsoft: microsoftAuthApi,
okta: oktaAuthApi,
onelogin: oneloginAuthApi,
};
return new KubernetesAuthProviders({
microsoftAuthApi,
googleAuthApi,
oidcProviders,
});
},
}),
});
export const kubernetesClusterLinkFormatterApi = createApiExtension({
factory: createApiFactory({
api: kubernetesClusterLinkFormatterApiRef,
deps: { googleAuthApi: googleAuthApiRef },
factory: deps => {
const formatters = getDefaultFormatters(deps);
return new KubernetesClusterLinkFormatter({
formatters,
defaultFormatterName: DEFAULT_FORMATTER_NAME,
});
},
}),
});
@@ -0,0 +1,34 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react';
import {
compatWrapper,
convertLegacyRouteRef,
} from '@backstage/core-compat-api';
import { createEntityContentExtension } from '@backstage/plugin-catalog-react/alpha';
import { rootCatalogKubernetesRouteRef } from '../plugin';
export const entityKubernetesContent = createEntityContentExtension({
defaultPath: 'kubernetes',
defaultTitle: 'Kubernetes',
name: 'kubernetes',
routeRef: convertLegacyRouteRef(rootCatalogKubernetesRouteRef),
loader: () =>
import('./KubernetesContentPage').then(m =>
compatWrapper(<m.KubernetesContentPage />),
),
});
+17
View File
@@ -0,0 +1,17 @@
/*
* Copyright 2023 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export { default } from './plugin';
+33
View File
@@ -0,0 +1,33 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import React from 'react'; // Add this line to import React
import { createPageExtension } from '@backstage/frontend-plugin-api';
import {
compatWrapper,
convertLegacyRouteRef,
} from '@backstage/core-compat-api';
import { rootCatalogKubernetesRouteRef } from '../plugin';
export const kubernetesPage = createPageExtension({
defaultPath: '/kubernetes',
// you can reuse the existing routeRef
// by wrapping into the convertLegacyRouteRef.
routeRef: convertLegacyRouteRef(rootCatalogKubernetesRouteRef),
// these inputs usually match the props required by the component.
loader: () => import('../Router').then(m => compatWrapper(<m.Router />)),
});
+40
View File
@@ -0,0 +1,40 @@
/*
* Copyright 2024 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { convertLegacyRouteRefs } from '@backstage/core-compat-api';
import { createPlugin } from '@backstage/frontend-plugin-api';
import { kubernetesPage } from './pages';
import { entityKubernetesContent } from './entityContents';
import { rootCatalogKubernetesRouteRef } from '../plugin';
import {
kubernetesApiExtension as kubernetesApi,
kubernetesAuthProvidersApi,
kubernetesClusterLinkFormatterApi,
kubernetesProxyApi,
} from './apis';
export default createPlugin({
id: 'kubernetes',
extensions: [
kubernetesPage,
entityKubernetesContent,
kubernetesApi,
kubernetesProxyApi,
kubernetesAuthProvidersApi,
kubernetesClusterLinkFormatterApi,
],
routes: convertLegacyRouteRefs({ kubernetes: rootCatalogKubernetesRouteRef }),
});