@backstage-community/plugin-ocm-backend 5.2.5 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  ### Dependencies
2
2
 
3
+ ## 5.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - e0796ca: Backstage version bump to v1.35.0
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [e0796ca]
12
+ - @backstage-community/plugin-ocm-common@3.7.0
13
+
3
14
  ## 5.2.5
4
15
 
5
16
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.cjs.js","sources":["../src/bundle.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createBackendFeatureLoader } from '@backstage/backend-plugin-api';\n\nimport { catalogModuleOCMEntityProvider } from './providers';\nimport { ocmPlugin } from './service/router';\n\n/**\n * @public\n */\nexport const bundle = createBackendFeatureLoader({\n async loader() {\n return [catalogModuleOCMEntityProvider, ocmPlugin];\n },\n});\n"],"names":["createBackendFeatureLoader","catalogModuleOCMEntityProvider","ocmPlugin"],"mappings":";;;;;;;;;;;AAwBO,MAAM,SAASA,2CAA2B,CAAA;AAAA,EAC/C,MAAM,MAAS,GAAA;AACb,IAAO,OAAA,CAACC,yCAAgCC,gBAAS,CAAA,CAAA;AAAA,GACnD;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"bundle.cjs.js","sources":["../src/bundle.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createBackendFeatureLoader } from '@backstage/backend-plugin-api';\n\nimport { catalogModuleOCMEntityProvider } from './providers';\nimport { ocmPlugin } from './service/router';\n\n/**\n * @public\n */\nexport const bundle = createBackendFeatureLoader({\n async loader() {\n return [catalogModuleOCMEntityProvider, ocmPlugin];\n },\n});\n"],"names":["createBackendFeatureLoader","catalogModuleOCMEntityProvider","ocmPlugin"],"mappings":";;;;;;;;;;;AAwBO,MAAM,SAASA,2CAA2B,CAAA;AAAA,EAC/C,MAAM,MAAS,GAAA;AACb,IAAO,OAAA,CAACC,yCAAgCC,gBAAS,CAAA;AAAA;AAErD,CAAC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.cjs.js","sources":["../src/constants.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const CONSOLE_CLAIM = 'consoleurl.cluster.open-cluster-management.io';\nexport const HUB_CLUSTER_NAME_IN_OCM = 'local-cluster';\nexport const ANNOTATION_KUBERNETES_API_SERVER = 'kubernetes.io/api-server';\n"],"names":[],"mappings":";;AAeO,MAAM,aAAgB,GAAA,gDAAA;AACtB,MAAM,uBAA0B,GAAA,gBAAA;AAChC,MAAM,gCAAmC,GAAA;;;;;;"}
1
+ {"version":3,"file":"constants.cjs.js","sources":["../src/constants.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const CONSOLE_CLAIM = 'consoleurl.cluster.open-cluster-management.io';\nexport const HUB_CLUSTER_NAME_IN_OCM = 'local-cluster';\nexport const ANNOTATION_KUBERNETES_API_SERVER = 'kubernetes.io/api-server';\n"],"names":[],"mappings":";;AAeO,MAAM,aAAgB,GAAA;AACtB,MAAM,uBAA0B,GAAA;AAChC,MAAM,gCAAmC,GAAA;;;;;;"}
@@ -61,7 +61,7 @@ const getHubClusterFromConfig = (id, config, globalConfig) => {
61
61
  owner: config.getOptionalString(OWNER_KEY) ?? "unknown",
62
62
  schedule: config.has("schedule") ? backendPluginApi.readSchedulerServiceTaskScheduleDefinitionFromConfig(
63
63
  config.getConfig("schedule")
64
- ) : void 0
64
+ ) : undefined
65
65
  };
66
66
  };
67
67
  const readOcmConfigs = (config) => {
@@ -1 +1 @@
1
- {"version":3,"file":"config.cjs.js","sources":["../../src/helpers/config.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { readSchedulerServiceTaskScheduleDefinitionFromConfig } from '@backstage/backend-plugin-api';\nimport type { Config } from '@backstage/config';\n\nimport { OcmConfig } from '../types';\n\nconst KUBERNETES_PLUGIN_CONFIG = 'kubernetes.clusterLocatorMethods';\nconst OCM_PREFIX = 'catalog.providers.ocm';\nconst KUBERNETES_PLUGIN_KEY = 'kubernetesPluginRef';\nconst OWNER_KEY = 'owner';\n\nconst isValidUrl = (url: string): boolean => {\n try {\n // eslint-disable-next-line no-new\n new URL(url);\n } catch (error) {\n return false;\n }\n return true;\n};\n\nexport const deferToKubernetesPlugin = (config: Config): boolean => {\n if (config.has(KUBERNETES_PLUGIN_KEY)) {\n return true;\n }\n return false;\n};\n\nexport const getHubClusterFromKubernetesConfig = (\n id: string,\n config: Config,\n globalConfig: Config,\n): Config => {\n const name = config.getOptionalString(KUBERNETES_PLUGIN_KEY);\n const _logTemplate = `Hub cluster ${OCM_PREFIX}.${id}.${KUBERNETES_PLUGIN_KEY}=${name}`;\n\n const hub = globalConfig\n .getConfigArray(KUBERNETES_PLUGIN_CONFIG)\n .flatMap(method => method.getOptionalConfigArray('clusters') || [])\n .find(cluster => cluster.getString('name') === name);\n if (!hub) {\n throw new Error(\n `${_logTemplate} not defined in kubernetes in ${KUBERNETES_PLUGIN_CONFIG}.clusters`,\n );\n }\n\n if (hub.getString('authProvider') !== 'serviceAccount') {\n throw new Error(`${_logTemplate} has to authenticate via 'serviceAccount'`);\n }\n return hub;\n};\n\nexport const getHubClusterFromOcmConfig = (\n id: string,\n config: Config,\n): Config => {\n // Check if required values are valid\n const requiredValues = ['name', 'url'];\n requiredValues.forEach(key => {\n if (!config.has(key)) {\n throw new Error(\n `Value must be specified in config at '${OCM_PREFIX}.${id}.${key}'`,\n );\n }\n });\n return config;\n};\n\nexport const getHubClusterFromConfig = (\n id: string,\n config: Config,\n globalConfig: Config,\n): OcmConfig => {\n const hub = deferToKubernetesPlugin(config)\n ? getHubClusterFromKubernetesConfig(id, config, globalConfig)\n : getHubClusterFromOcmConfig(id, config);\n\n const url = hub.getString('url');\n if (!isValidUrl(url)) {\n throw new Error(`\"${url}\" is not a valid url`);\n }\n\n return {\n id,\n url,\n hubResourceName: hub.getString('name'),\n serviceAccountToken: hub.getOptionalString('serviceAccountToken'),\n skipTLSVerify: hub.getOptionalBoolean('skipTLSVerify') || false,\n caData: hub.getOptionalString('caData'),\n owner: config.getOptionalString(OWNER_KEY) ?? 'unknown',\n schedule: config.has('schedule')\n ? readSchedulerServiceTaskScheduleDefinitionFromConfig(\n config.getConfig('schedule'),\n )\n : undefined,\n };\n};\n\nexport const readOcmConfigs = (config: Config): OcmConfig[] => {\n const ocmConfigs = config.getOptionalConfig(OCM_PREFIX);\n\n if (!ocmConfigs) {\n return [];\n }\n\n return ocmConfigs\n .keys()\n .map(id => getHubClusterFromConfig(id, ocmConfigs.getConfig(id), config));\n};\n"],"names":["readSchedulerServiceTaskScheduleDefinitionFromConfig"],"mappings":";;;;AAoBA,MAAM,wBAA2B,GAAA,kCAAA,CAAA;AACjC,MAAM,UAAa,GAAA,uBAAA,CAAA;AACnB,MAAM,qBAAwB,GAAA,qBAAA,CAAA;AAC9B,MAAM,SAAY,GAAA,OAAA,CAAA;AAElB,MAAM,UAAA,GAAa,CAAC,GAAyB,KAAA;AAC3C,EAAI,IAAA;AAEF,IAAA,IAAI,IAAI,GAAG,CAAA,CAAA;AAAA,WACJ,KAAO,EAAA;AACd,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAO,OAAA,IAAA,CAAA;AACT,CAAA,CAAA;AAEa,MAAA,uBAAA,GAA0B,CAAC,MAA4B,KAAA;AAClE,EAAI,IAAA,MAAA,CAAO,GAAI,CAAA,qBAAqB,CAAG,EAAA;AACrC,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACA,EAAO,OAAA,KAAA,CAAA;AACT,EAAA;AAEO,MAAM,iCAAoC,GAAA,CAC/C,EACA,EAAA,MAAA,EACA,YACW,KAAA;AACX,EAAM,MAAA,IAAA,GAAO,MAAO,CAAA,iBAAA,CAAkB,qBAAqB,CAAA,CAAA;AAC3D,EAAM,MAAA,YAAA,GAAe,eAAe,UAAU,CAAA,CAAA,EAAI,EAAE,CAAI,CAAA,EAAA,qBAAqB,IAAI,IAAI,CAAA,CAAA,CAAA;AAErF,EAAM,MAAA,GAAA,GAAM,aACT,cAAe,CAAA,wBAAwB,EACvC,OAAQ,CAAA,CAAA,MAAA,KAAU,OAAO,sBAAuB,CAAA,UAAU,KAAK,EAAE,EACjE,IAAK,CAAA,CAAA,OAAA,KAAW,QAAQ,SAAU,CAAA,MAAM,MAAM,IAAI,CAAA,CAAA;AACrD,EAAA,IAAI,CAAC,GAAK,EAAA;AACR,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,EAAG,YAAY,CAAA,8BAAA,EAAiC,wBAAwB,CAAA,SAAA,CAAA;AAAA,KAC1E,CAAA;AAAA,GACF;AAEA,EAAA,IAAI,GAAI,CAAA,SAAA,CAAU,cAAc,CAAA,KAAM,gBAAkB,EAAA;AACtD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAG,EAAA,YAAY,CAA2C,yCAAA,CAAA,CAAA,CAAA;AAAA,GAC5E;AACA,EAAO,OAAA,GAAA,CAAA;AACT,EAAA;AAEa,MAAA,0BAAA,GAA6B,CACxC,EAAA,EACA,MACW,KAAA;AAEX,EAAM,MAAA,cAAA,GAAiB,CAAC,MAAA,EAAQ,KAAK,CAAA,CAAA;AACrC,EAAA,cAAA,CAAe,QAAQ,CAAO,GAAA,KAAA;AAC5B,IAAA,IAAI,CAAC,MAAA,CAAO,GAAI,CAAA,GAAG,CAAG,EAAA;AACpB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAyC,sCAAA,EAAA,UAAU,CAAI,CAAA,EAAA,EAAE,IAAI,GAAG,CAAA,CAAA,CAAA;AAAA,OAClE,CAAA;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AACD,EAAO,OAAA,MAAA,CAAA;AACT,EAAA;AAEO,MAAM,uBAA0B,GAAA,CACrC,EACA,EAAA,MAAA,EACA,YACc,KAAA;AACd,EAAM,MAAA,GAAA,GAAM,uBAAwB,CAAA,MAAM,CACtC,GAAA,iCAAA,CAAkC,EAAI,EAAA,MAAA,EAAQ,YAAY,CAAA,GAC1D,0BAA2B,CAAA,EAAA,EAAI,MAAM,CAAA,CAAA;AAEzC,EAAM,MAAA,GAAA,GAAM,GAAI,CAAA,SAAA,CAAU,KAAK,CAAA,CAAA;AAC/B,EAAI,IAAA,CAAC,UAAW,CAAA,GAAG,CAAG,EAAA;AACpB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAI,CAAA,EAAA,GAAG,CAAsB,oBAAA,CAAA,CAAA,CAAA;AAAA,GAC/C;AAEA,EAAO,OAAA;AAAA,IACL,EAAA;AAAA,IACA,GAAA;AAAA,IACA,eAAA,EAAiB,GAAI,CAAA,SAAA,CAAU,MAAM,CAAA;AAAA,IACrC,mBAAA,EAAqB,GAAI,CAAA,iBAAA,CAAkB,qBAAqB,CAAA;AAAA,IAChE,aAAe,EAAA,GAAA,CAAI,kBAAmB,CAAA,eAAe,CAAK,IAAA,KAAA;AAAA,IAC1D,MAAA,EAAQ,GAAI,CAAA,iBAAA,CAAkB,QAAQ,CAAA;AAAA,IACtC,KAAO,EAAA,MAAA,CAAO,iBAAkB,CAAA,SAAS,CAAK,IAAA,SAAA;AAAA,IAC9C,QAAU,EAAA,MAAA,CAAO,GAAI,CAAA,UAAU,CAC3B,GAAAA,qEAAA;AAAA,MACE,MAAA,CAAO,UAAU,UAAU,CAAA;AAAA,KAE7B,GAAA,KAAA,CAAA;AAAA,GACN,CAAA;AACF,EAAA;AAEa,MAAA,cAAA,GAAiB,CAAC,MAAgC,KAAA;AAC7D,EAAM,MAAA,UAAA,GAAa,MAAO,CAAA,iBAAA,CAAkB,UAAU,CAAA,CAAA;AAEtD,EAAA,IAAI,CAAC,UAAY,EAAA;AACf,IAAA,OAAO,EAAC,CAAA;AAAA,GACV;AAEA,EAAA,OAAO,UACJ,CAAA,IAAA,EACA,CAAA,GAAA,CAAI,CAAM,EAAA,KAAA,uBAAA,CAAwB,EAAI,EAAA,UAAA,CAAW,SAAU,CAAA,EAAE,CAAG,EAAA,MAAM,CAAC,CAAA,CAAA;AAC5E;;;;;;;;"}
1
+ {"version":3,"file":"config.cjs.js","sources":["../../src/helpers/config.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { readSchedulerServiceTaskScheduleDefinitionFromConfig } from '@backstage/backend-plugin-api';\nimport type { Config } from '@backstage/config';\n\nimport { OcmConfig } from '../types';\n\nconst KUBERNETES_PLUGIN_CONFIG = 'kubernetes.clusterLocatorMethods';\nconst OCM_PREFIX = 'catalog.providers.ocm';\nconst KUBERNETES_PLUGIN_KEY = 'kubernetesPluginRef';\nconst OWNER_KEY = 'owner';\n\nconst isValidUrl = (url: string): boolean => {\n try {\n // eslint-disable-next-line no-new\n new URL(url);\n } catch (error) {\n return false;\n }\n return true;\n};\n\nexport const deferToKubernetesPlugin = (config: Config): boolean => {\n if (config.has(KUBERNETES_PLUGIN_KEY)) {\n return true;\n }\n return false;\n};\n\nexport const getHubClusterFromKubernetesConfig = (\n id: string,\n config: Config,\n globalConfig: Config,\n): Config => {\n const name = config.getOptionalString(KUBERNETES_PLUGIN_KEY);\n const _logTemplate = `Hub cluster ${OCM_PREFIX}.${id}.${KUBERNETES_PLUGIN_KEY}=${name}`;\n\n const hub = globalConfig\n .getConfigArray(KUBERNETES_PLUGIN_CONFIG)\n .flatMap(method => method.getOptionalConfigArray('clusters') || [])\n .find(cluster => cluster.getString('name') === name);\n if (!hub) {\n throw new Error(\n `${_logTemplate} not defined in kubernetes in ${KUBERNETES_PLUGIN_CONFIG}.clusters`,\n );\n }\n\n if (hub.getString('authProvider') !== 'serviceAccount') {\n throw new Error(`${_logTemplate} has to authenticate via 'serviceAccount'`);\n }\n return hub;\n};\n\nexport const getHubClusterFromOcmConfig = (\n id: string,\n config: Config,\n): Config => {\n // Check if required values are valid\n const requiredValues = ['name', 'url'];\n requiredValues.forEach(key => {\n if (!config.has(key)) {\n throw new Error(\n `Value must be specified in config at '${OCM_PREFIX}.${id}.${key}'`,\n );\n }\n });\n return config;\n};\n\nexport const getHubClusterFromConfig = (\n id: string,\n config: Config,\n globalConfig: Config,\n): OcmConfig => {\n const hub = deferToKubernetesPlugin(config)\n ? getHubClusterFromKubernetesConfig(id, config, globalConfig)\n : getHubClusterFromOcmConfig(id, config);\n\n const url = hub.getString('url');\n if (!isValidUrl(url)) {\n throw new Error(`\"${url}\" is not a valid url`);\n }\n\n return {\n id,\n url,\n hubResourceName: hub.getString('name'),\n serviceAccountToken: hub.getOptionalString('serviceAccountToken'),\n skipTLSVerify: hub.getOptionalBoolean('skipTLSVerify') || false,\n caData: hub.getOptionalString('caData'),\n owner: config.getOptionalString(OWNER_KEY) ?? 'unknown',\n schedule: config.has('schedule')\n ? readSchedulerServiceTaskScheduleDefinitionFromConfig(\n config.getConfig('schedule'),\n )\n : undefined,\n };\n};\n\nexport const readOcmConfigs = (config: Config): OcmConfig[] => {\n const ocmConfigs = config.getOptionalConfig(OCM_PREFIX);\n\n if (!ocmConfigs) {\n return [];\n }\n\n return ocmConfigs\n .keys()\n .map(id => getHubClusterFromConfig(id, ocmConfigs.getConfig(id), config));\n};\n"],"names":["readSchedulerServiceTaskScheduleDefinitionFromConfig"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"kubernetes.cjs.js","sources":["../../src/helpers/kubernetes.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\nimport {\n CustomObjectsApi,\n KubeConfig,\n KubernetesListObject,\n} from '@kubernetes/client-node';\n\nimport http from 'http';\n\nimport { ManagedCluster, ManagedClusterInfo, OcmConfig } from '../types';\n\nexport const hubApiClient = (\n clusterConfig: OcmConfig,\n logger: LoggerService,\n): CustomObjectsApi => {\n const kubeConfig = new KubeConfig();\n\n if (!clusterConfig.serviceAccountToken) {\n logger.info('Using default kubernetes config');\n kubeConfig.loadFromDefault();\n return kubeConfig.makeApiClient(CustomObjectsApi);\n }\n\n logger.info('Loading kubernetes config from config file');\n\n const user = {\n name: 'backstage',\n token: clusterConfig.serviceAccountToken,\n };\n\n const context = {\n name: clusterConfig.hubResourceName,\n user: user.name,\n cluster: clusterConfig.hubResourceName,\n };\n\n kubeConfig.loadFromOptions({\n clusters: [\n {\n server: clusterConfig.url,\n name: clusterConfig.hubResourceName,\n skipTLSVerify: clusterConfig.skipTLSVerify,\n caData: clusterConfig.caData,\n },\n ],\n users: [user],\n contexts: [context],\n currentContext: context.name,\n });\n return kubeConfig.makeApiClient(CustomObjectsApi);\n};\n\nconst kubeApiResponseHandler = <T extends Object>(\n call: Promise<{\n response: http.IncomingMessage;\n body: object;\n }>,\n) => {\n return call\n .then(r => {\n return r.body as T;\n })\n .catch(r => {\n if (!r.body) {\n throw Object.assign(new Error(r.message), {\n // If there is no body, there is no status code, default to 500\n statusCode: 500,\n name: r.message,\n });\n } else if (typeof r.body === 'string') {\n throw Object.assign(new Error(r.body), {\n statusCode: r.body.code || r.statusCode,\n name: r.body,\n });\n }\n throw Object.assign(new Error(r.body.reason), {\n // Name and statusCode are required by the backstage error handler\n statusCode: r.body.code || r.statusCode,\n name: r.body.reason,\n ...r.body,\n });\n });\n};\n\nexport const getManagedCluster = (api: CustomObjectsApi, name: string) => {\n return kubeApiResponseHandler<ManagedCluster>(\n api.getClusterCustomObject(\n 'cluster.open-cluster-management.io',\n 'v1',\n 'managedclusters',\n name,\n ),\n );\n};\n\nexport const listManagedClusters = (api: CustomObjectsApi) => {\n return kubeApiResponseHandler<KubernetesListObject<ManagedCluster>>(\n api.listClusterCustomObject(\n 'cluster.open-cluster-management.io',\n 'v1',\n 'managedclusters',\n ),\n );\n};\n\nexport const getManagedClusterInfo = (api: CustomObjectsApi, name: string) => {\n return kubeApiResponseHandler<ManagedClusterInfo>(\n api.getNamespacedCustomObject(\n 'internal.open-cluster-management.io',\n 'v1beta1',\n name,\n 'managedclusterinfos',\n name,\n ),\n );\n};\n\nexport const listManagedClusterInfos = (api: CustomObjectsApi) => {\n return kubeApiResponseHandler<KubernetesListObject<ManagedClusterInfo>>(\n api.listClusterCustomObject(\n 'internal.open-cluster-management.io',\n 'v1beta1',\n 'managedclusterinfos',\n ),\n );\n};\n"],"names":["KubeConfig","CustomObjectsApi"],"mappings":"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"}
1
+ {"version":3,"file":"kubernetes.cjs.js","sources":["../../src/helpers/kubernetes.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { LoggerService } from '@backstage/backend-plugin-api';\n\nimport {\n CustomObjectsApi,\n KubeConfig,\n KubernetesListObject,\n} from '@kubernetes/client-node';\n\nimport http from 'http';\n\nimport { ManagedCluster, ManagedClusterInfo, OcmConfig } from '../types';\n\nexport const hubApiClient = (\n clusterConfig: OcmConfig,\n logger: LoggerService,\n): CustomObjectsApi => {\n const kubeConfig = new KubeConfig();\n\n if (!clusterConfig.serviceAccountToken) {\n logger.info('Using default kubernetes config');\n kubeConfig.loadFromDefault();\n return kubeConfig.makeApiClient(CustomObjectsApi);\n }\n\n logger.info('Loading kubernetes config from config file');\n\n const user = {\n name: 'backstage',\n token: clusterConfig.serviceAccountToken,\n };\n\n const context = {\n name: clusterConfig.hubResourceName,\n user: user.name,\n cluster: clusterConfig.hubResourceName,\n };\n\n kubeConfig.loadFromOptions({\n clusters: [\n {\n server: clusterConfig.url,\n name: clusterConfig.hubResourceName,\n skipTLSVerify: clusterConfig.skipTLSVerify,\n caData: clusterConfig.caData,\n },\n ],\n users: [user],\n contexts: [context],\n currentContext: context.name,\n });\n return kubeConfig.makeApiClient(CustomObjectsApi);\n};\n\nconst kubeApiResponseHandler = <T extends Object>(\n call: Promise<{\n response: http.IncomingMessage;\n body: object;\n }>,\n) => {\n return call\n .then(r => {\n return r.body as T;\n })\n .catch(r => {\n if (!r.body) {\n throw Object.assign(new Error(r.message), {\n // If there is no body, there is no status code, default to 500\n statusCode: 500,\n name: r.message,\n });\n } else if (typeof r.body === 'string') {\n throw Object.assign(new Error(r.body), {\n statusCode: r.body.code || r.statusCode,\n name: r.body,\n });\n }\n throw Object.assign(new Error(r.body.reason), {\n // Name and statusCode are required by the backstage error handler\n statusCode: r.body.code || r.statusCode,\n name: r.body.reason,\n ...r.body,\n });\n });\n};\n\nexport const getManagedCluster = (api: CustomObjectsApi, name: string) => {\n return kubeApiResponseHandler<ManagedCluster>(\n api.getClusterCustomObject(\n 'cluster.open-cluster-management.io',\n 'v1',\n 'managedclusters',\n name,\n ),\n );\n};\n\nexport const listManagedClusters = (api: CustomObjectsApi) => {\n return kubeApiResponseHandler<KubernetesListObject<ManagedCluster>>(\n api.listClusterCustomObject(\n 'cluster.open-cluster-management.io',\n 'v1',\n 'managedclusters',\n ),\n );\n};\n\nexport const getManagedClusterInfo = (api: CustomObjectsApi, name: string) => {\n return kubeApiResponseHandler<ManagedClusterInfo>(\n api.getNamespacedCustomObject(\n 'internal.open-cluster-management.io',\n 'v1beta1',\n name,\n 'managedclusterinfos',\n name,\n ),\n );\n};\n\nexport const listManagedClusterInfos = (api: CustomObjectsApi) => {\n return kubeApiResponseHandler<KubernetesListObject<ManagedClusterInfo>>(\n api.listClusterCustomObject(\n 'internal.open-cluster-management.io',\n 'v1beta1',\n 'managedclusterinfos',\n ),\n );\n};\n"],"names":["KubeConfig","CustomObjectsApi"],"mappings":"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"}
@@ -5,7 +5,7 @@ var constants = require('../constants.cjs.js');
5
5
 
6
6
  const convertCpus = (cpus) => {
7
7
  if (!cpus) {
8
- return void 0;
8
+ return undefined;
9
9
  }
10
10
  if (cpus.endsWith("m")) {
11
11
  return parseInt(cpus.slice(0, cpus.length - 1), 10) / 1e3;
@@ -15,7 +15,7 @@ const convertCpus = (cpus) => {
15
15
  const parseResources = (resources) => ({
16
16
  cpuCores: convertCpus(resources?.cpu),
17
17
  memorySize: resources?.memory,
18
- numberOfPods: parseInt(resources?.pods, 10) || void 0
18
+ numberOfPods: parseInt(resources?.pods, 10) || undefined
19
19
  });
20
20
  const getClaim = (cluster, claimName) => cluster.status?.clusterClaims?.find((value) => value.name === claimName)?.value ?? "";
21
21
  const parseClusterStatus = (mc) => {
@@ -1 +1 @@
1
- {"version":3,"file":"parser.cjs.js","sources":["../../src/helpers/parser.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { maxSatisfying } from 'semver';\n\nimport type {\n ClusterDetails,\n ClusterNodesStatus,\n ClusterStatus,\n} from '@backstage-community/plugin-ocm-common';\n\nimport { CONSOLE_CLAIM, HUB_CLUSTER_NAME_IN_OCM } from '../constants';\nimport { ClusterClaim, ManagedCluster, ManagedClusterInfo } from '../types';\n\nconst convertCpus = (cpus: string | undefined): number | undefined => {\n if (!cpus) {\n return undefined;\n }\n if (cpus.endsWith('m')) {\n return parseInt(cpus.slice(0, cpus.length - 1), 10) / 1000;\n }\n return parseInt(cpus, 10);\n};\n\nexport const parseResources = (\n resources: Record<string, string>,\n): Record<string, string | number | undefined> => ({\n cpuCores: convertCpus(resources?.cpu),\n memorySize: resources?.memory,\n numberOfPods: parseInt(resources?.pods, 10) || undefined,\n});\n\nexport const getClaim = (\n cluster: { status?: { clusterClaims: ClusterClaim[] } },\n claimName: string,\n): string =>\n cluster.status?.clusterClaims?.find(value => value.name === claimName)\n ?.value ?? '';\n\nexport const parseClusterStatus = (mc: ManagedCluster): ClusterStatus => {\n const available = mc.status?.conditions.find(\n (value: any) => value.type === 'ManagedClusterConditionAvailable',\n );\n\n return {\n available: available?.status.toLowerCase() === 'true',\n reason: available?.message,\n };\n};\n\nexport const parseManagedCluster = (mc: ManagedCluster): ClusterDetails => ({\n status: parseClusterStatus(mc),\n consoleUrl: getClaim(mc, CONSOLE_CLAIM),\n kubernetesVersion: getClaim(mc, 'kubeversion.open-cluster-management.io'),\n oauthUrl: getClaim(mc, 'oauthredirecturis.openshift.io'),\n openshiftId:\n mc.metadata!.labels?.clusterID ?? getClaim(mc, 'id.openshift.io'),\n openshiftVersion:\n mc.metadata!.labels?.openshiftVersion ??\n getClaim(mc, 'version.openshift.io'),\n platform: getClaim(mc, 'platform.open-cluster-management.io'),\n region: getClaim(mc, 'region.open-cluster-management.io'),\n allocatableResources: parseResources(mc.status?.allocatable || {}),\n availableResources: parseResources(mc.status?.capacity || {}),\n});\n\nexport const parseUpdateInfo = (clusterInfo: ManagedClusterInfo) => {\n const { availableUpdates, versionAvailableUpdates } =\n clusterInfo.status?.distributionInfo.ocp || {};\n\n if (\n !availableUpdates ||\n availableUpdates?.length === 0 ||\n !versionAvailableUpdates ||\n versionAvailableUpdates?.length === 0\n ) {\n return {\n update: {\n available: false,\n },\n };\n }\n\n const version = maxSatisfying(availableUpdates, '*');\n\n return {\n update: {\n available: true,\n version,\n url: versionAvailableUpdates[availableUpdates.indexOf(version as string)]\n ?.url,\n },\n };\n};\n\nexport const parseNodeStatus = (clusterInfo: ManagedClusterInfo) =>\n clusterInfo.status?.nodeList?.map(node => {\n if (node.conditions.length !== 1) {\n throw new Error('Found more node conditions then one');\n }\n const condition = node.conditions[0];\n return {\n status: condition.status,\n type: condition.type,\n } as ClusterNodesStatus;\n }) || [];\n\nexport const translateResourceToOCM = (\n clusterName: string,\n hubResourceName: string,\n) => (clusterName === hubResourceName ? HUB_CLUSTER_NAME_IN_OCM : clusterName);\n\nexport const translateOCMToResource = (\n clusterName: string,\n hubResourceName: string,\n) => (clusterName === HUB_CLUSTER_NAME_IN_OCM ? hubResourceName : clusterName);\n"],"names":["CONSOLE_CLAIM","maxSatisfying","HUB_CLUSTER_NAME_IN_OCM"],"mappings":"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"}
1
+ {"version":3,"file":"parser.cjs.js","sources":["../../src/helpers/parser.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { maxSatisfying } from 'semver';\n\nimport type {\n ClusterDetails,\n ClusterNodesStatus,\n ClusterStatus,\n} from '@backstage-community/plugin-ocm-common';\n\nimport { CONSOLE_CLAIM, HUB_CLUSTER_NAME_IN_OCM } from '../constants';\nimport { ClusterClaim, ManagedCluster, ManagedClusterInfo } from '../types';\n\nconst convertCpus = (cpus: string | undefined): number | undefined => {\n if (!cpus) {\n return undefined;\n }\n if (cpus.endsWith('m')) {\n return parseInt(cpus.slice(0, cpus.length - 1), 10) / 1000;\n }\n return parseInt(cpus, 10);\n};\n\nexport const parseResources = (\n resources: Record<string, string>,\n): Record<string, string | number | undefined> => ({\n cpuCores: convertCpus(resources?.cpu),\n memorySize: resources?.memory,\n numberOfPods: parseInt(resources?.pods, 10) || undefined,\n});\n\nexport const getClaim = (\n cluster: { status?: { clusterClaims: ClusterClaim[] } },\n claimName: string,\n): string =>\n cluster.status?.clusterClaims?.find(value => value.name === claimName)\n ?.value ?? '';\n\nexport const parseClusterStatus = (mc: ManagedCluster): ClusterStatus => {\n const available = mc.status?.conditions.find(\n (value: any) => value.type === 'ManagedClusterConditionAvailable',\n );\n\n return {\n available: available?.status.toLowerCase() === 'true',\n reason: available?.message,\n };\n};\n\nexport const parseManagedCluster = (mc: ManagedCluster): ClusterDetails => ({\n status: parseClusterStatus(mc),\n consoleUrl: getClaim(mc, CONSOLE_CLAIM),\n kubernetesVersion: getClaim(mc, 'kubeversion.open-cluster-management.io'),\n oauthUrl: getClaim(mc, 'oauthredirecturis.openshift.io'),\n openshiftId:\n mc.metadata!.labels?.clusterID ?? getClaim(mc, 'id.openshift.io'),\n openshiftVersion:\n mc.metadata!.labels?.openshiftVersion ??\n getClaim(mc, 'version.openshift.io'),\n platform: getClaim(mc, 'platform.open-cluster-management.io'),\n region: getClaim(mc, 'region.open-cluster-management.io'),\n allocatableResources: parseResources(mc.status?.allocatable || {}),\n availableResources: parseResources(mc.status?.capacity || {}),\n});\n\nexport const parseUpdateInfo = (clusterInfo: ManagedClusterInfo) => {\n const { availableUpdates, versionAvailableUpdates } =\n clusterInfo.status?.distributionInfo.ocp || {};\n\n if (\n !availableUpdates ||\n availableUpdates?.length === 0 ||\n !versionAvailableUpdates ||\n versionAvailableUpdates?.length === 0\n ) {\n return {\n update: {\n available: false,\n },\n };\n }\n\n const version = maxSatisfying(availableUpdates, '*');\n\n return {\n update: {\n available: true,\n version,\n url: versionAvailableUpdates[availableUpdates.indexOf(version as string)]\n ?.url,\n },\n };\n};\n\nexport const parseNodeStatus = (clusterInfo: ManagedClusterInfo) =>\n clusterInfo.status?.nodeList?.map(node => {\n if (node.conditions.length !== 1) {\n throw new Error('Found more node conditions then one');\n }\n const condition = node.conditions[0];\n return {\n status: condition.status,\n type: condition.type,\n } as ClusterNodesStatus;\n }) || [];\n\nexport const translateResourceToOCM = (\n clusterName: string,\n hubResourceName: string,\n) => (clusterName === hubResourceName ? HUB_CLUSTER_NAME_IN_OCM : clusterName);\n\nexport const translateOCMToResource = (\n clusterName: string,\n hubResourceName: string,\n) => (clusterName === HUB_CLUSTER_NAME_IN_OCM ? hubResourceName : clusterName);\n"],"names":["CONSOLE_CLAIM","maxSatisfying","HUB_CLUSTER_NAME_IN_OCM"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ManagedClusterProvider.cjs.js","sources":["../../src/providers/ManagedClusterProvider.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n LoggerService,\n SchedulerService,\n SchedulerServiceTaskRunner,\n} from '@backstage/backend-plugin-api';\nimport {\n ANNOTATION_LOCATION,\n ANNOTATION_ORIGIN_LOCATION,\n ResourceEntity,\n} from '@backstage/catalog-model';\nimport type { Config } from '@backstage/config';\nimport { InputError } from '@backstage/errors';\nimport type {\n EntityProvider,\n EntityProviderConnection,\n} from '@backstage/plugin-catalog-node';\n\nimport { CustomObjectsApi } from '@kubernetes/client-node';\n\nimport {\n ANNOTATION_CLUSTER_ID,\n ANNOTATION_PROVIDER_ID,\n} from '@backstage-community/plugin-ocm-common';\n\nimport {\n ANNOTATION_KUBERNETES_API_SERVER,\n CONSOLE_CLAIM,\n HUB_CLUSTER_NAME_IN_OCM,\n} from '../constants';\nimport { readOcmConfigs } from '../helpers/config';\nimport {\n getManagedCluster,\n hubApiClient,\n listManagedClusters,\n} from '../helpers/kubernetes';\nimport { getClaim, translateOCMToResource } from '../helpers/parser';\n\n/**\n * @public\n * Provides OpenShift cluster resource entities from Open Cluster Management.\n */\nexport class ManagedClusterProvider implements EntityProvider {\n protected readonly client: CustomObjectsApi;\n protected readonly hubResourceName: string;\n protected readonly id: string;\n protected readonly owner: string;\n protected readonly logger: LoggerService;\n private readonly scheduleFn: () => Promise<void>;\n protected connection?: EntityProviderConnection;\n\n protected constructor(\n client: CustomObjectsApi,\n hubResourceName: string,\n id: string,\n deps: { logger: LoggerService },\n owner: string,\n taskRunner: SchedulerServiceTaskRunner,\n ) {\n this.client = client;\n this.hubResourceName = hubResourceName;\n this.id = id;\n this.logger = deps.logger;\n this.owner = owner;\n this.scheduleFn = this.createScheduleFn(taskRunner);\n }\n\n static fromConfig(\n deps: {\n config: Config;\n logger: LoggerService;\n },\n options:\n | { schedule: SchedulerServiceTaskRunner }\n | { scheduler: SchedulerService },\n ) {\n const { config, logger } = deps;\n\n return readOcmConfigs(config).map(providerConfig => {\n const client = hubApiClient(providerConfig, logger);\n let taskRunner;\n if ('scheduler' in options && providerConfig.schedule) {\n // Create a scheduled task runner using the provided scheduler and schedule configuration\n taskRunner = options.scheduler.createScheduledTaskRunner(\n providerConfig.schedule,\n );\n } else if ('schedule' in options) {\n // Use the provided schedule directly\n taskRunner = options.schedule;\n } else {\n throw new InputError(\n `No schedule provided via config for OCMProvider:${providerConfig.id}.`,\n );\n }\n\n return new ManagedClusterProvider(\n client,\n providerConfig.hubResourceName,\n providerConfig.id,\n deps,\n providerConfig.owner,\n taskRunner,\n );\n });\n }\n public async connect(connection: EntityProviderConnection): Promise<void> {\n this.connection = connection;\n await this.scheduleFn();\n }\n\n private createScheduleFn(\n taskRunner: SchedulerServiceTaskRunner,\n ): () => Promise<void> {\n return async () => {\n return taskRunner.run({\n id: `run_ocm_refresh_${this.getProviderName()}`,\n fn: async () => {\n try {\n await this.run();\n } catch (error: any) {\n // Ensure that we don't log any sensitive internal data:\n this.logger.error(\n 'Error while syncing cluster resources from Open Cluster Management',\n {\n // Default Error properties:\n name: error.name,\n message: error.message,\n stack: error.stack,\n // Additional status code if available:\n status: error.response?.status,\n },\n );\n }\n },\n });\n };\n }\n\n getProviderName(): string {\n return `ocm-managed-cluster:${this.id}`;\n }\n\n async run(): Promise<void> {\n if (!this.connection) {\n throw new Error('Not initialized');\n }\n\n this.logger.info(\n `Providing OpenShift cluster resources from Open Cluster Management`,\n );\n const hubConsole = getClaim(\n await getManagedCluster(this.client, HUB_CLUSTER_NAME_IN_OCM),\n CONSOLE_CLAIM,\n );\n\n const resources: ResourceEntity[] = (\n await listManagedClusters(this.client)\n ).items.map(i => {\n const normalizedName = translateOCMToResource(\n i.metadata!.name!,\n this.hubResourceName,\n );\n\n return {\n kind: 'Resource',\n apiVersion: 'backstage.io/v1beta1',\n metadata: {\n name: normalizedName,\n annotations: {\n /**\n * Can also be pulled from ManagedClusterInfo on .spec.masterEndpoint (details in discussion: https://github.com/janus-idp/backstage-plugins/pull/94#discussion_r1093228858)\n */\n [ANNOTATION_KUBERNETES_API_SERVER]:\n i.spec?.managedClusterClientConfigs?.[0]?.url,\n [ANNOTATION_CLUSTER_ID]: i.metadata?.labels?.clusterID!,\n [ANNOTATION_LOCATION]: this.getProviderName(),\n [ANNOTATION_ORIGIN_LOCATION]: this.getProviderName(),\n [ANNOTATION_PROVIDER_ID]: this.id,\n },\n links: [\n {\n url: getClaim(i, CONSOLE_CLAIM),\n title: 'OpenShift Console',\n icon: 'dashboard',\n },\n {\n url: `${hubConsole}/multicloud/infrastructure/clusters/details/${\n i.metadata!.name\n }/`,\n title: 'OCM Console',\n },\n {\n url: `https://console.redhat.com/openshift/details/s/${\n i.metadata!.labels!.clusterID\n }`,\n title: 'OpenShift Cluster Manager',\n },\n ],\n },\n spec: {\n owner: this.owner,\n type: 'kubernetes-cluster',\n },\n };\n });\n\n await this.connection.applyMutation({\n type: 'full',\n entities: resources.map(entity => ({\n entity,\n locationKey: this.getProviderName(),\n })),\n });\n }\n}\n"],"names":["config","readOcmConfigs","hubApiClient","InputError","getClaim","getManagedCluster","HUB_CLUSTER_NAME_IN_OCM","CONSOLE_CLAIM","listManagedClusters","translateOCMToResource","ANNOTATION_KUBERNETES_API_SERVER","ANNOTATION_CLUSTER_ID","ANNOTATION_LOCATION","ANNOTATION_ORIGIN_LOCATION","ANNOTATION_PROVIDER_ID"],"mappings":"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"}
1
+ {"version":3,"file":"ManagedClusterProvider.cjs.js","sources":["../../src/providers/ManagedClusterProvider.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n LoggerService,\n SchedulerService,\n SchedulerServiceTaskRunner,\n} from '@backstage/backend-plugin-api';\nimport {\n ANNOTATION_LOCATION,\n ANNOTATION_ORIGIN_LOCATION,\n ResourceEntity,\n} from '@backstage/catalog-model';\nimport type { Config } from '@backstage/config';\nimport { InputError } from '@backstage/errors';\nimport type {\n EntityProvider,\n EntityProviderConnection,\n} from '@backstage/plugin-catalog-node';\n\nimport { CustomObjectsApi } from '@kubernetes/client-node';\n\nimport {\n ANNOTATION_CLUSTER_ID,\n ANNOTATION_PROVIDER_ID,\n} from '@backstage-community/plugin-ocm-common';\n\nimport {\n ANNOTATION_KUBERNETES_API_SERVER,\n CONSOLE_CLAIM,\n HUB_CLUSTER_NAME_IN_OCM,\n} from '../constants';\nimport { readOcmConfigs } from '../helpers/config';\nimport {\n getManagedCluster,\n hubApiClient,\n listManagedClusters,\n} from '../helpers/kubernetes';\nimport { getClaim, translateOCMToResource } from '../helpers/parser';\n\n/**\n * @public\n * Provides OpenShift cluster resource entities from Open Cluster Management.\n */\nexport class ManagedClusterProvider implements EntityProvider {\n protected readonly client: CustomObjectsApi;\n protected readonly hubResourceName: string;\n protected readonly id: string;\n protected readonly owner: string;\n protected readonly logger: LoggerService;\n private readonly scheduleFn: () => Promise<void>;\n protected connection?: EntityProviderConnection;\n\n protected constructor(\n client: CustomObjectsApi,\n hubResourceName: string,\n id: string,\n deps: { logger: LoggerService },\n owner: string,\n taskRunner: SchedulerServiceTaskRunner,\n ) {\n this.client = client;\n this.hubResourceName = hubResourceName;\n this.id = id;\n this.logger = deps.logger;\n this.owner = owner;\n this.scheduleFn = this.createScheduleFn(taskRunner);\n }\n\n static fromConfig(\n deps: {\n config: Config;\n logger: LoggerService;\n },\n options:\n | { schedule: SchedulerServiceTaskRunner }\n | { scheduler: SchedulerService },\n ) {\n const { config, logger } = deps;\n\n return readOcmConfigs(config).map(providerConfig => {\n const client = hubApiClient(providerConfig, logger);\n let taskRunner;\n if ('scheduler' in options && providerConfig.schedule) {\n // Create a scheduled task runner using the provided scheduler and schedule configuration\n taskRunner = options.scheduler.createScheduledTaskRunner(\n providerConfig.schedule,\n );\n } else if ('schedule' in options) {\n // Use the provided schedule directly\n taskRunner = options.schedule;\n } else {\n throw new InputError(\n `No schedule provided via config for OCMProvider:${providerConfig.id}.`,\n );\n }\n\n return new ManagedClusterProvider(\n client,\n providerConfig.hubResourceName,\n providerConfig.id,\n deps,\n providerConfig.owner,\n taskRunner,\n );\n });\n }\n public async connect(connection: EntityProviderConnection): Promise<void> {\n this.connection = connection;\n await this.scheduleFn();\n }\n\n private createScheduleFn(\n taskRunner: SchedulerServiceTaskRunner,\n ): () => Promise<void> {\n return async () => {\n return taskRunner.run({\n id: `run_ocm_refresh_${this.getProviderName()}`,\n fn: async () => {\n try {\n await this.run();\n } catch (error: any) {\n // Ensure that we don't log any sensitive internal data:\n this.logger.error(\n 'Error while syncing cluster resources from Open Cluster Management',\n {\n // Default Error properties:\n name: error.name,\n message: error.message,\n stack: error.stack,\n // Additional status code if available:\n status: error.response?.status,\n },\n );\n }\n },\n });\n };\n }\n\n getProviderName(): string {\n return `ocm-managed-cluster:${this.id}`;\n }\n\n async run(): Promise<void> {\n if (!this.connection) {\n throw new Error('Not initialized');\n }\n\n this.logger.info(\n `Providing OpenShift cluster resources from Open Cluster Management`,\n );\n const hubConsole = getClaim(\n await getManagedCluster(this.client, HUB_CLUSTER_NAME_IN_OCM),\n CONSOLE_CLAIM,\n );\n\n const resources: ResourceEntity[] = (\n await listManagedClusters(this.client)\n ).items.map(i => {\n const normalizedName = translateOCMToResource(\n i.metadata!.name!,\n this.hubResourceName,\n );\n\n return {\n kind: 'Resource',\n apiVersion: 'backstage.io/v1beta1',\n metadata: {\n name: normalizedName,\n annotations: {\n /**\n * Can also be pulled from ManagedClusterInfo on .spec.masterEndpoint (details in discussion: https://github.com/janus-idp/backstage-plugins/pull/94#discussion_r1093228858)\n */\n [ANNOTATION_KUBERNETES_API_SERVER]:\n i.spec?.managedClusterClientConfigs?.[0]?.url,\n [ANNOTATION_CLUSTER_ID]: i.metadata?.labels?.clusterID!,\n [ANNOTATION_LOCATION]: this.getProviderName(),\n [ANNOTATION_ORIGIN_LOCATION]: this.getProviderName(),\n [ANNOTATION_PROVIDER_ID]: this.id,\n },\n links: [\n {\n url: getClaim(i, CONSOLE_CLAIM),\n title: 'OpenShift Console',\n icon: 'dashboard',\n },\n {\n url: `${hubConsole}/multicloud/infrastructure/clusters/details/${\n i.metadata!.name\n }/`,\n title: 'OCM Console',\n },\n {\n url: `https://console.redhat.com/openshift/details/s/${\n i.metadata!.labels!.clusterID\n }`,\n title: 'OpenShift Cluster Manager',\n },\n ],\n },\n spec: {\n owner: this.owner,\n type: 'kubernetes-cluster',\n },\n };\n });\n\n await this.connection.applyMutation({\n type: 'full',\n entities: resources.map(entity => ({\n entity,\n locationKey: this.getProviderName(),\n })),\n });\n }\n}\n"],"names":["config","readOcmConfigs","hubApiClient","InputError","getClaim","getManagedCluster","HUB_CLUSTER_NAME_IN_OCM","CONSOLE_CLAIM","listManagedClusters","translateOCMToResource","ANNOTATION_KUBERNETES_API_SERVER","ANNOTATION_CLUSTER_ID","ANNOTATION_LOCATION","ANNOTATION_ORIGIN_LOCATION","ANNOTATION_PROVIDER_ID"],"mappings":";;;;;;;;;;AAyDO,MAAM,sBAAiD,CAAA;AAAA,EACzC,MAAA;AAAA,EACA,eAAA;AAAA,EACA,EAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACF,UAAA;AAAA,EACP,UAAA;AAAA,EAEA,YACR,MACA,EAAA,eAAA,EACA,EACA,EAAA,IAAA,EACA,OACA,UACA,EAAA;AACA,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA;AACd,IAAA,IAAA,CAAK,eAAkB,GAAA,eAAA;AACvB,IAAA,IAAA,CAAK,EAAK,GAAA,EAAA;AACV,IAAA,IAAA,CAAK,SAAS,IAAK,CAAA,MAAA;AACnB,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AACb,IAAK,IAAA,CAAA,UAAA,GAAa,IAAK,CAAA,gBAAA,CAAiB,UAAU,CAAA;AAAA;AACpD,EAEA,OAAO,UACL,CAAA,IAAA,EAIA,OAGA,EAAA;AACA,IAAM,MAAA,UAAEA,QAAQ,EAAA,MAAA,EAAW,GAAA,IAAA;AAE3B,IAAA,OAAOC,qBAAe,CAAAD,QAAM,CAAE,CAAA,GAAA,CAAI,CAAkB,cAAA,KAAA;AAClD,MAAM,MAAA,MAAA,GAASE,uBAAa,CAAA,cAAA,EAAgB,MAAM,CAAA;AAClD,MAAI,IAAA,UAAA;AACJ,MAAI,IAAA,WAAA,IAAe,OAAW,IAAA,cAAA,CAAe,QAAU,EAAA;AAErD,QAAA,UAAA,GAAa,QAAQ,SAAU,CAAA,yBAAA;AAAA,UAC7B,cAAe,CAAA;AAAA,SACjB;AAAA,OACF,MAAA,IAAW,cAAc,OAAS,EAAA;AAEhC,QAAA,UAAA,GAAa,OAAQ,CAAA,QAAA;AAAA,OAChB,MAAA;AACL,QAAA,MAAM,IAAIC,iBAAA;AAAA,UACR,CAAA,gDAAA,EAAmD,eAAe,EAAE,CAAA,CAAA;AAAA,SACtE;AAAA;AAGF,MAAA,OAAO,IAAI,sBAAA;AAAA,QACT,MAAA;AAAA,QACA,cAAe,CAAA,eAAA;AAAA,QACf,cAAe,CAAA,EAAA;AAAA,QACf,IAAA;AAAA,QACA,cAAe,CAAA,KAAA;AAAA,QACf;AAAA,OACF;AAAA,KACD,CAAA;AAAA;AACH,EACA,MAAa,QAAQ,UAAqD,EAAA;AACxE,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA;AAClB,IAAA,MAAM,KAAK,UAAW,EAAA;AAAA;AACxB,EAEQ,iBACN,UACqB,EAAA;AACrB,IAAA,OAAO,YAAY;AACjB,MAAA,OAAO,WAAW,GAAI,CAAA;AAAA,QACpB,EAAI,EAAA,CAAA,gBAAA,EAAmB,IAAK,CAAA,eAAA,EAAiB,CAAA,CAAA;AAAA,QAC7C,IAAI,YAAY;AACd,UAAI,IAAA;AACF,YAAA,MAAM,KAAK,GAAI,EAAA;AAAA,mBACR,KAAY,EAAA;AAEnB,YAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,cACV,oEAAA;AAAA,cACA;AAAA;AAAA,gBAEE,MAAM,KAAM,CAAA,IAAA;AAAA,gBACZ,SAAS,KAAM,CAAA,OAAA;AAAA,gBACf,OAAO,KAAM,CAAA,KAAA;AAAA;AAAA,gBAEb,MAAA,EAAQ,MAAM,QAAU,EAAA;AAAA;AAC1B,aACF;AAAA;AACF;AACF,OACD,CAAA;AAAA,KACH;AAAA;AACF,EAEA,eAA0B,GAAA;AACxB,IAAO,OAAA,CAAA,oBAAA,EAAuB,KAAK,EAAE,CAAA,CAAA;AAAA;AACvC,EAEA,MAAM,GAAqB,GAAA;AACzB,IAAI,IAAA,CAAC,KAAK,UAAY,EAAA;AACpB,MAAM,MAAA,IAAI,MAAM,iBAAiB,CAAA;AAAA;AAGnC,IAAA,IAAA,CAAK,MAAO,CAAA,IAAA;AAAA,MACV,CAAA,kEAAA;AAAA,KACF;AACA,IAAA,MAAM,UAAa,GAAAC,eAAA;AAAA,MACjB,MAAMC,4BAAA,CAAkB,IAAK,CAAA,MAAA,EAAQC,iCAAuB,CAAA;AAAA,MAC5DC;AAAA,KACF;AAEA,IAAM,MAAA,SAAA,GAAA,CACJ,MAAMC,8BAAoB,CAAA,IAAA,CAAK,MAAM,CACrC,EAAA,KAAA,CAAM,IAAI,CAAK,CAAA,KAAA;AACf,MAAA,MAAM,cAAiB,GAAAC,6BAAA;AAAA,QACrB,EAAE,QAAU,CAAA,IAAA;AAAA,QACZ,IAAK,CAAA;AAAA,OACP;AAEA,MAAO,OAAA;AAAA,QACL,IAAM,EAAA,UAAA;AAAA,QACN,UAAY,EAAA,sBAAA;AAAA,QACZ,QAAU,EAAA;AAAA,UACR,IAAM,EAAA,cAAA;AAAA,UACN,WAAa,EAAA;AAAA;AAAA;AAAA;AAAA,YAIX,CAACC,0CAAgC,GAC/B,EAAE,IAAM,EAAA,2BAAA,GAA8B,CAAC,CAAG,EAAA,GAAA;AAAA,YAC5C,CAACC,qCAAqB,GAAG,CAAA,CAAE,UAAU,MAAQ,EAAA,SAAA;AAAA,YAC7C,CAACC,gCAAmB,GAAG,IAAA,CAAK,eAAgB,EAAA;AAAA,YAC5C,CAACC,uCAA0B,GAAG,IAAA,CAAK,eAAgB,EAAA;AAAA,YACnD,CAACC,sCAAsB,GAAG,IAAK,CAAA;AAAA,WACjC;AAAA,UACA,KAAO,EAAA;AAAA,YACL;AAAA,cACE,GAAA,EAAKV,eAAS,CAAA,CAAA,EAAGG,uBAAa,CAAA;AAAA,cAC9B,KAAO,EAAA,mBAAA;AAAA,cACP,IAAM,EAAA;AAAA,aACR;AAAA,YACA;AAAA,cACE,KAAK,CAAG,EAAA,UAAU,CAChB,4CAAA,EAAA,CAAA,CAAE,SAAU,IACd,CAAA,CAAA,CAAA;AAAA,cACA,KAAO,EAAA;AAAA,aACT;AAAA,YACA;AAAA,cACE,GAAK,EAAA,CAAA,+CAAA,EACH,CAAE,CAAA,QAAA,CAAU,OAAQ,SACtB,CAAA,CAAA;AAAA,cACA,KAAO,EAAA;AAAA;AACT;AACF,SACF;AAAA,QACA,IAAM,EAAA;AAAA,UACJ,OAAO,IAAK,CAAA,KAAA;AAAA,UACZ,IAAM,EAAA;AAAA;AACR,OACF;AAAA,KACD,CAAA;AAED,IAAM,MAAA,IAAA,CAAK,WAAW,aAAc,CAAA;AAAA,MAClC,IAAM,EAAA,MAAA;AAAA,MACN,QAAA,EAAU,SAAU,CAAA,GAAA,CAAI,CAAW,MAAA,MAAA;AAAA,QACjC,MAAA;AAAA,QACA,WAAA,EAAa,KAAK,eAAgB;AAAA,OAClC,CAAA;AAAA,KACH,CAAA;AAAA;AAEL;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.cjs.js","sources":["../../src/providers/module.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n coreServices,\n createBackendModule,\n} from '@backstage/backend-plugin-api';\nimport { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';\n\nimport { ManagedClusterProvider } from './ManagedClusterProvider';\n\n/**\n * @public\n */\nexport const catalogModuleOCMEntityProvider = createBackendModule({\n moduleId: 'catalog-backend-module-ocm',\n pluginId: 'catalog',\n register(env) {\n env.registerInit({\n deps: {\n catalog: catalogProcessingExtensionPoint,\n config: coreServices.rootConfig,\n logger: coreServices.logger,\n scheduler: coreServices.scheduler,\n },\n async init({ catalog, config, logger, scheduler }) {\n catalog.addEntityProvider(\n ManagedClusterProvider.fromConfig(\n { config, logger },\n {\n schedule: scheduler.createScheduledTaskRunner({\n frequency: { hours: 1 },\n timeout: { minutes: 15 },\n initialDelay: { seconds: 15 },\n }),\n scheduler: scheduler,\n },\n ),\n );\n },\n });\n },\n});\n"],"names":["createBackendModule","catalogProcessingExtensionPoint","coreServices","ManagedClusterProvider"],"mappings":";;;;;;AA2BO,MAAM,iCAAiCA,oCAAoB,CAAA;AAAA,EAChE,QAAU,EAAA,4BAAA;AAAA,EACV,QAAU,EAAA,SAAA;AAAA,EACV,SAAS,GAAK,EAAA;AACZ,IAAA,GAAA,CAAI,YAAa,CAAA;AAAA,MACf,IAAM,EAAA;AAAA,QACJ,OAAS,EAAAC,qCAAA;AAAA,QACT,QAAQC,6BAAa,CAAA,UAAA;AAAA,QACrB,QAAQA,6BAAa,CAAA,MAAA;AAAA,QACrB,WAAWA,6BAAa,CAAA,SAAA;AAAA,OAC1B;AAAA,MACA,MAAM,IAAK,CAAA,EAAE,SAAS,MAAQ,EAAA,MAAA,EAAQ,WAAa,EAAA;AACjD,QAAQ,OAAA,CAAA,iBAAA;AAAA,UACNC,6CAAuB,CAAA,UAAA;AAAA,YACrB,EAAE,QAAQ,MAAO,EAAA;AAAA,YACjB;AAAA,cACE,QAAA,EAAU,UAAU,yBAA0B,CAAA;AAAA,gBAC5C,SAAA,EAAW,EAAE,KAAA,EAAO,CAAE,EAAA;AAAA,gBACtB,OAAA,EAAS,EAAE,OAAA,EAAS,EAAG,EAAA;AAAA,gBACvB,YAAA,EAAc,EAAE,OAAA,EAAS,EAAG,EAAA;AAAA,eAC7B,CAAA;AAAA,cACD,SAAA;AAAA,aACF;AAAA,WACF;AAAA,SACF,CAAA;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"module.cjs.js","sources":["../../src/providers/module.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n coreServices,\n createBackendModule,\n} from '@backstage/backend-plugin-api';\nimport { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';\n\nimport { ManagedClusterProvider } from './ManagedClusterProvider';\n\n/**\n * @public\n */\nexport const catalogModuleOCMEntityProvider = createBackendModule({\n moduleId: 'catalog-backend-module-ocm',\n pluginId: 'catalog',\n register(env) {\n env.registerInit({\n deps: {\n catalog: catalogProcessingExtensionPoint,\n config: coreServices.rootConfig,\n logger: coreServices.logger,\n scheduler: coreServices.scheduler,\n },\n async init({ catalog, config, logger, scheduler }) {\n catalog.addEntityProvider(\n ManagedClusterProvider.fromConfig(\n { config, logger },\n {\n schedule: scheduler.createScheduledTaskRunner({\n frequency: { hours: 1 },\n timeout: { minutes: 15 },\n initialDelay: { seconds: 15 },\n }),\n scheduler: scheduler,\n },\n ),\n );\n },\n });\n },\n});\n"],"names":["createBackendModule","catalogProcessingExtensionPoint","coreServices","ManagedClusterProvider"],"mappings":";;;;;;AA2BO,MAAM,iCAAiCA,oCAAoB,CAAA;AAAA,EAChE,QAAU,EAAA,4BAAA;AAAA,EACV,QAAU,EAAA,SAAA;AAAA,EACV,SAAS,GAAK,EAAA;AACZ,IAAA,GAAA,CAAI,YAAa,CAAA;AAAA,MACf,IAAM,EAAA;AAAA,QACJ,OAAS,EAAAC,qCAAA;AAAA,QACT,QAAQC,6BAAa,CAAA,UAAA;AAAA,QACrB,QAAQA,6BAAa,CAAA,MAAA;AAAA,QACrB,WAAWA,6BAAa,CAAA;AAAA,OAC1B;AAAA,MACA,MAAM,IAAK,CAAA,EAAE,SAAS,MAAQ,EAAA,MAAA,EAAQ,WAAa,EAAA;AACjD,QAAQ,OAAA,CAAA,iBAAA;AAAA,UACNC,6CAAuB,CAAA,UAAA;AAAA,YACrB,EAAE,QAAQ,MAAO,EAAA;AAAA,YACjB;AAAA,cACE,QAAA,EAAU,UAAU,yBAA0B,CAAA;AAAA,gBAC5C,SAAA,EAAW,EAAE,KAAA,EAAO,CAAE,EAAA;AAAA,gBACtB,OAAA,EAAS,EAAE,OAAA,EAAS,EAAG,EAAA;AAAA,gBACvB,YAAA,EAAc,EAAE,OAAA,EAAS,EAAG;AAAA,eAC7B,CAAA;AAAA,cACD;AAAA;AACF;AACF,SACF;AAAA;AACF,KACD,CAAA;AAAA;AAEL,CAAC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"openapi.generated.cjs.js","sources":["../../src/schema/openapi.generated.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// ******************************************************************\n// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. *\n// ******************************************************************\nimport { createValidatedOpenApiRouter } from '@backstage/backend-openapi-utils';\n\nexport const spec = {\n openapi: '3.0.0',\n info: {\n title: 'OCM Plugin API',\n version: 'latest',\n description:\n 'The Open Cluster Management (OCM) plugin integrates your Backstage instance with OCM.',\n },\n servers: [\n {\n url: '{protocol}://{host}:{port}/{basePath}',\n variables: {\n protocol: {\n enum: ['http', 'https'],\n default: 'http',\n },\n host: {\n default: 'localhost',\n },\n port: {\n default: '7007',\n },\n basePath: {\n default: 'api/ocm',\n },\n },\n },\n ],\n paths: {\n '/status/{providerId}/{clusterName}': {\n get: {\n summary: 'Get the status of a specific cluster',\n description:\n 'Retrieve the status of a specific cluster on a given hub.',\n parameters: [\n {\n name: 'providerId',\n in: 'path',\n required: true,\n description: 'The ID of the OCM provider',\n schema: {\n type: 'string',\n },\n },\n {\n name: 'clusterName',\n in: 'path',\n required: true,\n description: 'The name of the cluster',\n schema: {\n type: 'string',\n },\n },\n ],\n responses: {\n '200': {\n description: 'Cluster status retrieved successfully',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/Cluster',\n },\n },\n },\n },\n '403': {\n description: 'Unauthorized',\n },\n '404': {\n description: 'Hub not found',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n },\n },\n '/status': {\n get: {\n summary: 'Get the status of all clusters',\n description: 'Retrieve the status of all clusters across all hubs.',\n responses: {\n '200': {\n description: 'Clusters status retrieved successfully',\n content: {\n 'application/json': {\n schema: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/ClusterOverview',\n },\n },\n },\n },\n },\n '403': {\n description: 'Unauthorized',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n },\n },\n },\n components: {\n schemas: {\n ClusterStatus: {\n type: 'object',\n properties: {\n available: {\n type: 'boolean',\n description: 'Indicates if the cluster is available',\n },\n reason: {\n type: 'string',\n description:\n 'Optional reason why the cluster is not available or as problems',\n },\n },\n required: ['available'],\n },\n ClusterUpdate: {\n type: 'object',\n properties: {\n available: {\n type: 'boolean',\n description: 'Indicates if an update is available',\n },\n version: {\n type: 'string',\n description: 'Version of the available update',\n },\n url: {\n type: 'string',\n description: 'URL for the update',\n },\n },\n },\n ClusterNodesStatus: {\n type: 'object',\n properties: {\n status: {\n type: 'string',\n description: 'Status of the node',\n },\n type: {\n type: 'string',\n description: 'Type of the node',\n },\n },\n },\n ClusterDetails: {\n type: 'object',\n properties: {\n consoleUrl: {\n type: 'string',\n description: 'URL for the cluster console',\n },\n kubernetesVersion: {\n type: 'string',\n description: 'Version of Kubernetes',\n },\n oauthUrl: {\n type: 'string',\n description: 'OAuth URL for the cluster',\n },\n openshiftId: {\n type: 'string',\n description: 'ID of the OpenShift cluster',\n },\n openshiftVersion: {\n type: 'string',\n description: 'Version of OpenShift running in the cluster',\n },\n platform: {\n type: 'string',\n description: 'Platform of the cluster',\n },\n region: {\n type: 'string',\n description: 'Region where the cluster is located',\n },\n allocatableResources: {\n type: 'object',\n description: 'Resources that are allocatable in the cluster',\n properties: {\n cpuCores: {\n type: 'number',\n description: 'Number of CPU cores allocatable',\n },\n memorySize: {\n type: 'string',\n description: 'Size of allocatable memory',\n },\n numberOfPods: {\n type: 'number',\n description: 'Number of allocatable pods',\n },\n },\n },\n availableResources: {\n type: 'object',\n description: 'Resources that are available in the cluster',\n properties: {\n cpuCores: {\n type: 'number',\n description: 'Number of CPU cores available',\n },\n memorySize: {\n type: 'string',\n description: 'Size of available memory',\n },\n numberOfPods: {\n type: 'number',\n description: 'Number of available pods',\n },\n },\n },\n update: {\n $ref: '#/components/schemas/ClusterUpdate',\n },\n status: {\n $ref: '#/components/schemas/ClusterStatus',\n },\n },\n },\n Cluster: {\n allOf: [\n {\n $ref: '#/components/schemas/ClusterBase',\n },\n {\n $ref: '#/components/schemas/ClusterDetails',\n },\n ],\n },\n ClusterBase: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'The name of the cluster',\n },\n },\n },\n ClusterOverview: {\n allOf: [\n {\n $ref: '#/components/schemas/ClusterBase',\n },\n {\n type: 'object',\n properties: {\n status: {\n $ref: '#/components/schemas/ClusterStatus',\n },\n update: {\n $ref: '#/components/schemas/ClusterUpdate',\n },\n platform: {\n type: 'string',\n description: 'Platform of the cluster',\n },\n openshiftVersion: {\n type: 'string',\n description: 'Version of OpenShift running in the cluster',\n },\n nodes: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/ClusterNodesStatus',\n },\n },\n },\n },\n ],\n },\n },\n securitySchemes: {\n JWT: {\n type: 'http',\n scheme: 'bearer',\n bearerFormat: 'JWT',\n description: 'Backstage Permissions Framework JWT',\n },\n },\n },\n} as const;\nexport const createOpenApiRouter = async (\n options?: Parameters<typeof createValidatedOpenApiRouter>['1'],\n) => createValidatedOpenApiRouter<typeof spec>(spec, options);\n"],"names":["createValidatedOpenApiRouter"],"mappings":"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"}
1
+ {"version":3,"file":"openapi.generated.cjs.js","sources":["../../src/schema/openapi.generated.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// ******************************************************************\n// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. *\n// ******************************************************************\nimport { createValidatedOpenApiRouter } from '@backstage/backend-openapi-utils';\n\nexport const spec = {\n openapi: '3.0.0',\n info: {\n title: 'OCM Plugin API',\n version: 'latest',\n description:\n 'The Open Cluster Management (OCM) plugin integrates your Backstage instance with OCM.',\n },\n servers: [\n {\n url: '{protocol}://{host}:{port}/{basePath}',\n variables: {\n protocol: {\n enum: ['http', 'https'],\n default: 'http',\n },\n host: {\n default: 'localhost',\n },\n port: {\n default: '7007',\n },\n basePath: {\n default: 'api/ocm',\n },\n },\n },\n ],\n paths: {\n '/status/{providerId}/{clusterName}': {\n get: {\n summary: 'Get the status of a specific cluster',\n description:\n 'Retrieve the status of a specific cluster on a given hub.',\n parameters: [\n {\n name: 'providerId',\n in: 'path',\n required: true,\n description: 'The ID of the OCM provider',\n schema: {\n type: 'string',\n },\n },\n {\n name: 'clusterName',\n in: 'path',\n required: true,\n description: 'The name of the cluster',\n schema: {\n type: 'string',\n },\n },\n ],\n responses: {\n '200': {\n description: 'Cluster status retrieved successfully',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/Cluster',\n },\n },\n },\n },\n '403': {\n description: 'Unauthorized',\n },\n '404': {\n description: 'Hub not found',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n },\n },\n '/status': {\n get: {\n summary: 'Get the status of all clusters',\n description: 'Retrieve the status of all clusters across all hubs.',\n responses: {\n '200': {\n description: 'Clusters status retrieved successfully',\n content: {\n 'application/json': {\n schema: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/ClusterOverview',\n },\n },\n },\n },\n },\n '403': {\n description: 'Unauthorized',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n },\n },\n },\n components: {\n schemas: {\n ClusterStatus: {\n type: 'object',\n properties: {\n available: {\n type: 'boolean',\n description: 'Indicates if the cluster is available',\n },\n reason: {\n type: 'string',\n description:\n 'Optional reason why the cluster is not available or as problems',\n },\n },\n required: ['available'],\n },\n ClusterUpdate: {\n type: 'object',\n properties: {\n available: {\n type: 'boolean',\n description: 'Indicates if an update is available',\n },\n version: {\n type: 'string',\n description: 'Version of the available update',\n },\n url: {\n type: 'string',\n description: 'URL for the update',\n },\n },\n },\n ClusterNodesStatus: {\n type: 'object',\n properties: {\n status: {\n type: 'string',\n description: 'Status of the node',\n },\n type: {\n type: 'string',\n description: 'Type of the node',\n },\n },\n },\n ClusterDetails: {\n type: 'object',\n properties: {\n consoleUrl: {\n type: 'string',\n description: 'URL for the cluster console',\n },\n kubernetesVersion: {\n type: 'string',\n description: 'Version of Kubernetes',\n },\n oauthUrl: {\n type: 'string',\n description: 'OAuth URL for the cluster',\n },\n openshiftId: {\n type: 'string',\n description: 'ID of the OpenShift cluster',\n },\n openshiftVersion: {\n type: 'string',\n description: 'Version of OpenShift running in the cluster',\n },\n platform: {\n type: 'string',\n description: 'Platform of the cluster',\n },\n region: {\n type: 'string',\n description: 'Region where the cluster is located',\n },\n allocatableResources: {\n type: 'object',\n description: 'Resources that are allocatable in the cluster',\n properties: {\n cpuCores: {\n type: 'number',\n description: 'Number of CPU cores allocatable',\n },\n memorySize: {\n type: 'string',\n description: 'Size of allocatable memory',\n },\n numberOfPods: {\n type: 'number',\n description: 'Number of allocatable pods',\n },\n },\n },\n availableResources: {\n type: 'object',\n description: 'Resources that are available in the cluster',\n properties: {\n cpuCores: {\n type: 'number',\n description: 'Number of CPU cores available',\n },\n memorySize: {\n type: 'string',\n description: 'Size of available memory',\n },\n numberOfPods: {\n type: 'number',\n description: 'Number of available pods',\n },\n },\n },\n update: {\n $ref: '#/components/schemas/ClusterUpdate',\n },\n status: {\n $ref: '#/components/schemas/ClusterStatus',\n },\n },\n },\n Cluster: {\n allOf: [\n {\n $ref: '#/components/schemas/ClusterBase',\n },\n {\n $ref: '#/components/schemas/ClusterDetails',\n },\n ],\n },\n ClusterBase: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n description: 'The name of the cluster',\n },\n },\n },\n ClusterOverview: {\n allOf: [\n {\n $ref: '#/components/schemas/ClusterBase',\n },\n {\n type: 'object',\n properties: {\n status: {\n $ref: '#/components/schemas/ClusterStatus',\n },\n update: {\n $ref: '#/components/schemas/ClusterUpdate',\n },\n platform: {\n type: 'string',\n description: 'Platform of the cluster',\n },\n openshiftVersion: {\n type: 'string',\n description: 'Version of OpenShift running in the cluster',\n },\n nodes: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/ClusterNodesStatus',\n },\n },\n },\n },\n ],\n },\n },\n securitySchemes: {\n JWT: {\n type: 'http',\n scheme: 'bearer',\n bearerFormat: 'JWT',\n description: 'Backstage Permissions Framework JWT',\n },\n },\n },\n} as const;\nexport const createOpenApiRouter = async (\n options?: Parameters<typeof createValidatedOpenApiRouter>['1'],\n) => createValidatedOpenApiRouter<typeof spec>(spec, options);\n"],"names":["createValidatedOpenApiRouter"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"router.cjs.js","sources":["../../src/service/router.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';\nimport {\n coreServices,\n createBackendPlugin,\n HttpAuthService,\n LoggerService,\n PermissionsService,\n} from '@backstage/backend-plugin-api';\nimport type { Config } from '@backstage/config';\nimport { NotAllowedError } from '@backstage/errors';\nimport {\n AuthorizeResult,\n BasicPermission,\n} from '@backstage/plugin-permission-common';\nimport { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node';\n\nimport express, { Request } from 'express';\n\nimport {\n Cluster,\n ClusterOverview,\n ocmClusterReadPermission,\n ocmEntityPermissions,\n ocmEntityReadPermission,\n} from '@backstage-community/plugin-ocm-common';\n\nimport { readOcmConfigs } from '../helpers/config';\nimport {\n getManagedCluster,\n getManagedClusterInfo,\n hubApiClient,\n listManagedClusterInfos,\n listManagedClusters,\n} from '../helpers/kubernetes';\nimport {\n getClaim,\n parseClusterStatus,\n parseManagedCluster,\n parseNodeStatus,\n parseUpdateInfo,\n translateOCMToResource,\n translateResourceToOCM,\n} from '../helpers/parser';\nimport { createOpenApiRouter } from '../schema/openapi.generated';\nimport { ManagedClusterInfo } from '../types';\n\nasync function createRouter(deps: {\n config: Config;\n logger: LoggerService;\n httpAuth: HttpAuthService;\n permissions: PermissionsService;\n}) {\n const { config, logger, httpAuth, permissions } = deps;\n const router = await createOpenApiRouter();\n\n const permissionsIntegrationRouter = createPermissionIntegrationRouter({\n permissions: ocmEntityPermissions,\n });\n\n router.use(express.json());\n router.use(permissionsIntegrationRouter);\n\n const clients = Object.fromEntries(\n readOcmConfigs(config).map(provider => [\n provider.id,\n {\n client: hubApiClient(provider, logger),\n hubResourceName: provider.hubResourceName,\n },\n ]),\n );\n\n const authorize = async (request: Request, permission: BasicPermission) => {\n const decision = (\n await permissions.authorize([{ permission: permission }], {\n credentials: await httpAuth.credentials(request),\n })\n )[0];\n\n return decision;\n };\n\n router.get('/status/:providerId/:clusterName', async (request, response) => {\n const decision = await authorize(request, ocmEntityReadPermission);\n\n if (decision.result === AuthorizeResult.DENY) {\n throw new NotAllowedError('Unauthorized');\n }\n\n const { clusterName, providerId } = request.params;\n logger.debug(\n `Incoming status request for ${clusterName} cluster on ${providerId} hub`,\n );\n\n if (!clients.hasOwnProperty(providerId)) {\n throw Object.assign(new Error('Hub not found'), {\n statusCode: 404,\n name: 'HubNotFound',\n });\n }\n\n const normalizedClusterName = translateResourceToOCM(\n clusterName,\n clients[providerId].hubResourceName,\n );\n\n const mc = await getManagedCluster(\n clients[providerId].client,\n normalizedClusterName,\n );\n const mci = await getManagedClusterInfo(\n clients[providerId].client,\n normalizedClusterName,\n );\n\n response.send({\n name: clusterName,\n ...parseManagedCluster(mc),\n ...parseUpdateInfo(mci),\n } as Cluster);\n });\n\n router.get('/status', async (request, response) => {\n const decision = await authorize(request, ocmClusterReadPermission);\n\n if (decision.result === AuthorizeResult.DENY) {\n throw new NotAllowedError('Unauthorized');\n }\n\n logger.debug(`Incoming status request for all clusters`);\n\n const allClusters = await Promise.all(\n Object.values(clients).map(async c => {\n const mcs = await listManagedClusters(c.client);\n const mcis = await listManagedClusterInfos(c.client);\n\n return mcs.items.map(mc => {\n const mci =\n mcis.items.find(\n info => info.metadata?.name === mc.metadata!.name,\n ) || ({} as ManagedClusterInfo);\n\n return {\n name: translateOCMToResource(mc.metadata!.name!, c.hubResourceName),\n status: parseClusterStatus(mc),\n platform: getClaim(mc, 'platform.open-cluster-management.io'),\n openshiftVersion:\n mc.metadata!.labels?.openshiftVersion ??\n getClaim(mc, 'version.openshift.io'),\n nodes: parseNodeStatus(mci),\n ...parseUpdateInfo(mci),\n } as ClusterOverview;\n });\n }),\n );\n\n return response.send(allClusters.flat());\n });\n\n const middleware = MiddlewareFactory.create({ logger, config });\n\n router.use(middleware.error());\n return router;\n}\n\n/**\n * @public\n */\nexport const ocmPlugin = createBackendPlugin({\n pluginId: 'ocm',\n register(env) {\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n http: coreServices.httpRouter,\n httpAuth: coreServices.httpAuth,\n permissions: coreServices.permissions,\n },\n async init({ config, logger, http, httpAuth, permissions }) {\n http.use(await createRouter({ config, logger, httpAuth, permissions }));\n },\n });\n },\n});\n"],"names":["config","createOpenApiRouter","createPermissionIntegrationRouter","ocmEntityPermissions","express","readOcmConfigs","hubApiClient","ocmEntityReadPermission","AuthorizeResult","NotAllowedError","translateResourceToOCM","getManagedCluster","getManagedClusterInfo","parseManagedCluster","parseUpdateInfo","ocmClusterReadPermission","listManagedClusters","listManagedClusterInfos","translateOCMToResource","parseClusterStatus","getClaim","parseNodeStatus","MiddlewareFactory","createBackendPlugin","coreServices"],"mappings":"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"}
1
+ {"version":3,"file":"router.cjs.js","sources":["../../src/service/router.ts"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';\nimport {\n coreServices,\n createBackendPlugin,\n HttpAuthService,\n LoggerService,\n PermissionsService,\n} from '@backstage/backend-plugin-api';\nimport type { Config } from '@backstage/config';\nimport { NotAllowedError } from '@backstage/errors';\nimport {\n AuthorizeResult,\n BasicPermission,\n} from '@backstage/plugin-permission-common';\nimport { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node';\n\nimport express, { Request } from 'express';\n\nimport {\n Cluster,\n ClusterOverview,\n ocmClusterReadPermission,\n ocmEntityPermissions,\n ocmEntityReadPermission,\n} from '@backstage-community/plugin-ocm-common';\n\nimport { readOcmConfigs } from '../helpers/config';\nimport {\n getManagedCluster,\n getManagedClusterInfo,\n hubApiClient,\n listManagedClusterInfos,\n listManagedClusters,\n} from '../helpers/kubernetes';\nimport {\n getClaim,\n parseClusterStatus,\n parseManagedCluster,\n parseNodeStatus,\n parseUpdateInfo,\n translateOCMToResource,\n translateResourceToOCM,\n} from '../helpers/parser';\nimport { createOpenApiRouter } from '../schema/openapi.generated';\nimport { ManagedClusterInfo } from '../types';\n\nasync function createRouter(deps: {\n config: Config;\n logger: LoggerService;\n httpAuth: HttpAuthService;\n permissions: PermissionsService;\n}) {\n const { config, logger, httpAuth, permissions } = deps;\n const router = await createOpenApiRouter();\n\n const permissionsIntegrationRouter = createPermissionIntegrationRouter({\n permissions: ocmEntityPermissions,\n });\n\n router.use(express.json());\n router.use(permissionsIntegrationRouter);\n\n const clients = Object.fromEntries(\n readOcmConfigs(config).map(provider => [\n provider.id,\n {\n client: hubApiClient(provider, logger),\n hubResourceName: provider.hubResourceName,\n },\n ]),\n );\n\n const authorize = async (request: Request, permission: BasicPermission) => {\n const decision = (\n await permissions.authorize([{ permission: permission }], {\n credentials: await httpAuth.credentials(request),\n })\n )[0];\n\n return decision;\n };\n\n router.get('/status/:providerId/:clusterName', async (request, response) => {\n const decision = await authorize(request, ocmEntityReadPermission);\n\n if (decision.result === AuthorizeResult.DENY) {\n throw new NotAllowedError('Unauthorized');\n }\n\n const { clusterName, providerId } = request.params;\n logger.debug(\n `Incoming status request for ${clusterName} cluster on ${providerId} hub`,\n );\n\n if (!clients.hasOwnProperty(providerId)) {\n throw Object.assign(new Error('Hub not found'), {\n statusCode: 404,\n name: 'HubNotFound',\n });\n }\n\n const normalizedClusterName = translateResourceToOCM(\n clusterName,\n clients[providerId].hubResourceName,\n );\n\n const mc = await getManagedCluster(\n clients[providerId].client,\n normalizedClusterName,\n );\n const mci = await getManagedClusterInfo(\n clients[providerId].client,\n normalizedClusterName,\n );\n\n response.send({\n name: clusterName,\n ...parseManagedCluster(mc),\n ...parseUpdateInfo(mci),\n } as Cluster);\n });\n\n router.get('/status', async (request, response) => {\n const decision = await authorize(request, ocmClusterReadPermission);\n\n if (decision.result === AuthorizeResult.DENY) {\n throw new NotAllowedError('Unauthorized');\n }\n\n logger.debug(`Incoming status request for all clusters`);\n\n const allClusters = await Promise.all(\n Object.values(clients).map(async c => {\n const mcs = await listManagedClusters(c.client);\n const mcis = await listManagedClusterInfos(c.client);\n\n return mcs.items.map(mc => {\n const mci =\n mcis.items.find(\n info => info.metadata?.name === mc.metadata!.name,\n ) || ({} as ManagedClusterInfo);\n\n return {\n name: translateOCMToResource(mc.metadata!.name!, c.hubResourceName),\n status: parseClusterStatus(mc),\n platform: getClaim(mc, 'platform.open-cluster-management.io'),\n openshiftVersion:\n mc.metadata!.labels?.openshiftVersion ??\n getClaim(mc, 'version.openshift.io'),\n nodes: parseNodeStatus(mci),\n ...parseUpdateInfo(mci),\n } as ClusterOverview;\n });\n }),\n );\n\n return response.send(allClusters.flat());\n });\n\n const middleware = MiddlewareFactory.create({ logger, config });\n\n router.use(middleware.error());\n return router;\n}\n\n/**\n * @public\n */\nexport const ocmPlugin = createBackendPlugin({\n pluginId: 'ocm',\n register(env) {\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n http: coreServices.httpRouter,\n httpAuth: coreServices.httpAuth,\n permissions: coreServices.permissions,\n },\n async init({ config, logger, http, httpAuth, permissions }) {\n http.use(await createRouter({ config, logger, httpAuth, permissions }));\n },\n });\n },\n});\n"],"names":["config","createOpenApiRouter","createPermissionIntegrationRouter","ocmEntityPermissions","express","readOcmConfigs","hubApiClient","ocmEntityReadPermission","AuthorizeResult","NotAllowedError","translateResourceToOCM","getManagedCluster","getManagedClusterInfo","parseManagedCluster","parseUpdateInfo","ocmClusterReadPermission","listManagedClusters","listManagedClusterInfos","translateOCMToResource","parseClusterStatus","getClaim","parseNodeStatus","MiddlewareFactory","createBackendPlugin","coreServices"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage-community/plugin-ocm-backend",
3
- "version": "5.2.5",
3
+ "version": "5.3.0",
4
4
  "main": "./dist/index.cjs.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "license": "Apache-2.0",
@@ -26,6 +26,13 @@
26
26
  },
27
27
  "./package.json": "./package.json"
28
28
  },
29
+ "typesVersions": {
30
+ "*": {
31
+ "index": [
32
+ "dist/index.d.ts"
33
+ ]
34
+ }
35
+ },
29
36
  "scripts": {
30
37
  "build": "backstage-cli package build",
31
38
  "clean": "backstage-cli package clean",
@@ -43,25 +50,25 @@
43
50
  },
44
51
  "configSchema": "config.d.ts",
45
52
  "dependencies": {
46
- "@backstage-community/plugin-ocm-common": "^3.6.3",
47
- "@backstage/backend-defaults": "^0.5.2",
48
- "@backstage/backend-openapi-utils": "^0.2.0",
49
- "@backstage/backend-plugin-api": "^1.0.1",
50
- "@backstage/catalog-model": "^1.7.0",
51
- "@backstage/errors": "^1.2.4",
52
- "@backstage/plugin-catalog-node": "^1.13.1",
53
- "@backstage/plugin-permission-common": "^0.8.1",
54
- "@backstage/plugin-permission-node": "^0.8.4",
53
+ "@backstage-community/plugin-ocm-common": "^3.7.0",
54
+ "@backstage/backend-defaults": "^0.7.0",
55
+ "@backstage/backend-openapi-utils": "^0.4.1",
56
+ "@backstage/backend-plugin-api": "^1.1.1",
57
+ "@backstage/catalog-model": "^1.7.3",
58
+ "@backstage/errors": "^1.2.7",
59
+ "@backstage/plugin-catalog-node": "^1.15.1",
60
+ "@backstage/plugin-permission-common": "^0.8.4",
61
+ "@backstage/plugin-permission-node": "^0.8.7",
55
62
  "@kubernetes/client-node": "^0.22.1",
56
63
  "express": "^4.18.2",
57
64
  "semver": "^7.5.4"
58
65
  },
59
66
  "devDependencies": {
60
- "@backstage/backend-dynamic-feature-service": "0.4.3",
61
- "@backstage/backend-test-utils": "1.0.2",
62
- "@backstage/cli": "0.28.2",
63
- "@backstage/config": "1.2.0",
64
- "@backstage/plugin-catalog-backend": "1.27.1",
67
+ "@backstage/backend-dynamic-feature-service": "^0.5.3",
68
+ "@backstage/backend-test-utils": "^1.2.1",
69
+ "@backstage/cli": "^0.29.5",
70
+ "@backstage/config": "^1.3.2",
71
+ "@backstage/plugin-catalog-backend": "^1.30.0",
65
72
  "@openapitools/openapi-generator-cli": "2.15.3",
66
73
  "@spotify/prettier-config": "^15.0.0",
67
74
  "@types/express": "4.17.21",