diff --git a/GITLAB_KAS_VERSION b/GITLAB_KAS_VERSION index 84e2db8e4ce..d5e1e1b8be5 100644 --- a/GITLAB_KAS_VERSION +++ b/GITLAB_KAS_VERSION @@ -1 +1 @@ -46b9580af93104de9b4c1d3dda81e9aaf7eb4c01 +5261aae488f191a1373243d2f9ca000255477d7e diff --git a/app/assets/javascripts/environments/environment_details/components/kubernetes/kubernetes_overview.vue b/app/assets/javascripts/environments/environment_details/components/kubernetes/kubernetes_overview.vue index 946a601bf43..96d39d97e75 100644 --- a/app/assets/javascripts/environments/environment_details/components/kubernetes/kubernetes_overview.vue +++ b/app/assets/javascripts/environments/environment_details/components/kubernetes/kubernetes_overview.vue @@ -188,6 +188,7 @@ export default { transformFluxResourceData(item) { return { name: item.metadata.name, + namespace: item.metadata.namespace, status: fluxSyncStatus(item.status.conditions).status, labels: item.metadata.labels, annotations: item.metadata.annotations, @@ -354,6 +355,7 @@ export default { diff --git a/app/assets/javascripts/environments/graphql/client.js b/app/assets/javascripts/environments/graphql/client.js index e3bcf9f8254..69f9691a7ad 100644 --- a/app/assets/javascripts/environments/graphql/client.js +++ b/app/assets/javascripts/environments/graphql/client.js @@ -13,6 +13,7 @@ import k8sDeploymentsQuery from './queries/k8s_deployments.query.graphql'; import k8sNamespacesQuery from './queries/k8s_namespaces.query.graphql'; import fluxKustomizationQuery from './queries/flux_kustomization.query.graphql'; import fluxHelmReleaseQuery from './queries/flux_helm_release.query.graphql'; +import k8sEventsQuery from './queries/k8s_events.query.graphql'; import { resolvers } from './resolvers'; import typeDefs from './typedefs.graphql'; import { connectionStatus } from './resolvers/kubernetes/constants'; @@ -170,6 +171,17 @@ export const apolloProvider = (endpoint) => { data: { logs: [] }, }); + cache.writeQuery({ + query: k8sEventsQuery, + data: { + lastTimestamp: '', + message: '', + reason: '', + source: {}, + type: '', + }, + }); + return new VueApollo({ defaultClient, }); diff --git a/app/assets/javascripts/environments/graphql/queries/k8s_events.query.graphql b/app/assets/javascripts/environments/graphql/queries/k8s_events.query.graphql new file mode 100644 index 00000000000..eb81d79554d --- /dev/null +++ b/app/assets/javascripts/environments/graphql/queries/k8s_events.query.graphql @@ -0,0 +1,17 @@ +query getK8sEvents( + $configuration: K8sDashboardConfig + $involvedObjectName: String + $namespace: String +) { + k8sEvents( + configuration: $configuration + involvedObjectName: $involvedObjectName + namespace: $namespace + ) @client { + lastTimestamp + message + reason + source + type + } +} diff --git a/app/assets/javascripts/environments/graphql/resolvers/kubernetes/index.js b/app/assets/javascripts/environments/graphql/resolvers/kubernetes/index.js index 974a1e3a8aa..1652e89b788 100644 --- a/app/assets/javascripts/environments/graphql/resolvers/kubernetes/index.js +++ b/app/assets/javascripts/environments/graphql/resolvers/kubernetes/index.js @@ -165,5 +165,25 @@ export const kubernetesQueries = { } }); }, + k8sEvents(_, { configuration, involvedObjectName, namespace }) { + const fieldSelector = `involvedObject.name=${involvedObjectName}`; + const config = new Configuration(configuration); + + const coreV1Api = new CoreV1Api(config); + const eventsApi = coreV1Api.listCoreV1NamespacedEvent({ namespace, fieldSelector }); + return eventsApi + .then((res) => { + const data = res?.items || []; + + return data; + }) + .catch(async (err) => { + try { + await handleClusterError(err); + } catch (error) { + throw new Error(error.message); + } + }); + }, k8sLogs, }; diff --git a/app/assets/javascripts/environments/graphql/typedefs.graphql b/app/assets/javascripts/environments/graphql/typedefs.graphql index e4a0703d4e0..528200847c0 100644 --- a/app/assets/javascripts/environments/graphql/typedefs.graphql +++ b/app/assets/javascripts/environments/graphql/typedefs.graphql @@ -118,6 +118,14 @@ type K8sLogsData { error: JSON } +type K8sEvent { + lastTimestamp: String + message: String + reason: String + source: JSON + type: String +} + extend type Query { environmentApp(page: Int, scope: String): LocalEnvironmentApp folder(environment: NestedLocalEnvironmentInput): LocalEnvironmentFolder @@ -137,6 +145,11 @@ extend type Query { fluxHelmRelease(configuration: LocalConfiguration, fluxResourcePath: String): LocalFluxHelmRelease k8sDeployments(configuration: LocalConfiguration, namespace: String): [LocalK8sDeployment] k8sLogs(configuration: LocalConfiguration, namespace: String, podName: String): [K8sLogsData] + k8sEvents( + configuration: LocalConfiguration + namespace: String + involvedObjectName: String + ): [K8sEvent] } input ResourceTypeParam { diff --git a/app/assets/javascripts/issuable/components/issue_milestone.vue b/app/assets/javascripts/issuable/components/issue_milestone.vue index 3184a97ae00..b168820fe25 100644 --- a/app/assets/javascripts/issuable/components/issue_milestone.vue +++ b/app/assets/javascripts/issuable/components/issue_milestone.vue @@ -72,8 +72,8 @@ export default { };