From aab5db568e1090b5a9ae9cec6d788f88ac6faa4c Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Fri, 24 Nov 2023 09:10:01 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .../environments/graphql/resolvers/kubernetes.js | 61 +++++++++++++++++----- .../super_sidebar/components/extra_info.vue | 7 +++ .../super_sidebar/components/super_sidebar.vue | 3 ++ .../work_items/components/work_item_detail.vue | 10 ++-- .../graphql/update_work_item_task.mutation.graphql | 1 + .../projects/artifacts/external_file.html.haml | 5 +- app/views/projects/pages/_access.html.haml | 5 +- 7 files changed, 74 insertions(+), 18 deletions(-) create mode 100644 app/assets/javascripts/super_sidebar/components/extra_info.vue (limited to 'app') diff --git a/app/assets/javascripts/environments/graphql/resolvers/kubernetes.js b/app/assets/javascripts/environments/graphql/resolvers/kubernetes.js index 06a55158152..9111dc9c86c 100644 --- a/app/assets/javascripts/environments/graphql/resolvers/kubernetes.js +++ b/app/assets/javascripts/environments/graphql/resolvers/kubernetes.js @@ -14,6 +14,7 @@ import { import { humanizeClusterErrors } from '../../helpers/k8s_integration_helper'; import k8sPodsQuery from '../queries/k8s_pods.query.graphql'; import k8sWorkloadsQuery from '../queries/k8s_workloads.query.graphql'; +import k8sServicesQuery from '../queries/k8s_services.query.graphql'; const mapWorkloadItems = (items, kind) => { return items.map((item) => { @@ -96,13 +97,53 @@ const watchWorkloadItems = ({ kind, apiVersion, configuration, namespace, client }); }; +const mapServicesItems = (items) => { + return items.map((item) => { + const { type, clusterIP, externalIP, ports } = item.spec; + return { + metadata: item.metadata, + spec: { + type, + clusterIP: clusterIP || '-', + externalIP: externalIP || '-', + ports, + }, + }; + }); +}; + +const watchServices = ({ configuration, namespace, client }) => { + const path = namespace ? `/api/v1/namespaces/${namespace}/services` : '/api/v1/services'; + const config = new Configuration(configuration); + const watcherApi = new WatchApi(config); + + watcherApi + .subscribeToStream(path, { watch: true }) + .then((watcher) => { + let result = []; + + watcher.on(EVENT_DATA, (data) => { + result = mapServicesItems(data); + + client.writeQuery({ + query: k8sServicesQuery, + variables: { configuration, namespace }, + data: { k8sServices: result }, + }); + }); + }) + .catch((err) => { + handleClusterError(err); + }); +}; + export default { k8sPods(_, { configuration, namespace }, { client }) { const query = k8sPodsQuery; const enableWatch = gon.features?.k8sWatchApi; return getK8sPods({ client, query, configuration, namespace, enableWatch }); }, - k8sServices(_, { configuration, namespace }) { + k8sServices(_, { configuration, namespace }, { client }) { const coreV1Api = new CoreV1Api(new Configuration(configuration)); const servicesApi = namespace ? coreV1Api.listCoreV1NamespacedService({ namespace }) @@ -111,18 +152,12 @@ export default { return servicesApi .then((res) => { const items = res?.items || []; - return items.map((item) => { - const { type, clusterIP, externalIP, ports } = item.spec; - return { - metadata: item.metadata, - spec: { - type, - clusterIP: clusterIP || '-', - externalIP: externalIP || '-', - ports, - }, - }; - }); + + if (gon.features?.k8sWatchApi) { + watchServices({ configuration, namespace, client }); + } + + return mapServicesItems(items); }) .catch(async (err) => { try { diff --git a/app/assets/javascripts/super_sidebar/components/extra_info.vue b/app/assets/javascripts/super_sidebar/components/extra_info.vue new file mode 100644 index 00000000000..23340f1190f --- /dev/null +++ b/app/assets/javascripts/super_sidebar/components/extra_info.vue @@ -0,0 +1,7 @@ + + diff --git a/app/assets/javascripts/super_sidebar/components/super_sidebar.vue b/app/assets/javascripts/super_sidebar/components/super_sidebar.vue index ebdc0026539..52015484cb5 100644 --- a/app/assets/javascripts/super_sidebar/components/super_sidebar.vue +++ b/app/assets/javascripts/super_sidebar/components/super_sidebar.vue @@ -1,6 +1,7 @@