diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/client.js b/app/assets/javascripts/kubernetes_dashboard/graphql/client.js index 56d41ef15cbc5dc3e396434edcbebb1261a400c5..e495d84c5ddde4c6dc84451f65967dfcc2c04cbc 100644 --- a/app/assets/javascripts/kubernetes_dashboard/graphql/client.js +++ b/app/assets/javascripts/kubernetes_dashboard/graphql/client.js @@ -1,6 +1,6 @@ import VueApollo from 'vue-apollo'; import createDefaultClient from '~/lib/graphql'; -import typeDefs from '~/environments/graphql/typedefs.graphql'; +import typeDefs from './typedefs.graphql'; import k8sPodsQuery from './queries/k8s_dashboard_pods.query.graphql'; import k8sDeploymentsQuery from './queries/k8s_dashboard_deployments.query.graphql'; import k8sStatefulSetsQuery from './queries/k8s_dashboard_stateful_sets.query.graphql'; @@ -24,105 +24,46 @@ export const apolloProvider = () => { labels: null, annotations: null, }; + const data = { nodes: { metadata, status: {}, spec: {} } }; cache.writeQuery({ query: k8sPodsQuery, - data: { - metadata, - spec: {}, - status: { - phase: null, - }, - }, + data, }); cache.writeQuery({ query: k8sDeploymentsQuery, - data: { - metadata, - status: { - conditions: null, - }, - }, + data, }); cache.writeQuery({ query: k8sStatefulSetsQuery, - data: { - metadata, - status: { - readyReplicas: null, - }, - spec: { - replicas: null, - }, - }, + data, }); cache.writeQuery({ query: k8sReplicaSetsQuery, - data: { - metadata, - status: { - readyReplicas: null, - }, - spec: { - replicas: null, - }, - }, + data, }); cache.writeQuery({ query: k8sDaemonSetsQuery, - data: { - metadata, - status: { - numberMisscheduled: null, - numberReady: null, - desiredNumberScheduled: null, - }, - }, + data, }); cache.writeQuery({ query: k8sJobsQuery, - data: { - metadata, - status: { - failed: null, - succeeded: null, - }, - spec: { - completions: null, - }, - }, + data, }); cache.writeQuery({ query: k8sCronJobsQuery, - data: { - metadata, - status: { - active: null, - lastScheduleTime: null, - }, - spec: { - suspend: null, - }, - }, + data, }); cache.writeQuery({ query: k8sServicesQuery, - data: { - metadata, - spec: { - type: null, - clusterIP: null, - externalIP: null, - ports: null, - }, - }, + data, }); return new VueApollo({ diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/helpers/resolver_helpers.js b/app/assets/javascripts/kubernetes_dashboard/graphql/helpers/resolver_helpers.js index d70edec1e97e0684e506f368f08588bed3fe6068..b44bac3cd7d5bcaaccd9d4eee631c6e04c23e169 100644 --- a/app/assets/javascripts/kubernetes_dashboard/graphql/helpers/resolver_helpers.js +++ b/app/assets/javascripts/kubernetes_dashboard/graphql/helpers/resolver_helpers.js @@ -14,89 +14,14 @@ export const buildWatchPath = ({ resource, api = 'api/v1', namespace = '' }) => }; export const mapWorkloadItem = (item) => { - if (item.metadata) { - const metadata = { - ...item.metadata, - annotations: item.metadata?.annotations || {}, - labels: item.metadata?.labels || {}, - }; - return { status: item.status, spec: item.spec, metadata }; - } - return { status: item.status, spec: item.spec }; -}; - -export const mapSetItem = (item) => { - const status = { - ...item.status, - readyReplicas: item.status?.readyReplicas || null, - }; - - const metadata = - { - ...item.metadata, - annotations: item.metadata?.annotations || {}, - labels: item.metadata?.labels || {}, - } || null; - - const spec = item.spec || null; - - return { status, metadata, spec }; -}; - -export const mapJobItem = (item) => { + const status = item.status || {}; + const spec = item.spec || {}; const metadata = { ...item.metadata, annotations: item.metadata?.annotations || {}, labels: item.metadata?.labels || {}, }; - - const status = { - failed: item.status?.failed || 0, - succeeded: item.status?.succeeded || 0, - }; - - return { - status, - metadata, - spec: item.spec, - }; -}; - -export const mapServicesItems = (item) => { - const { type, clusterIP, externalIP, ports } = item.spec; - - return { - metadata: { - ...item.metadata, - annotations: item.metadata?.annotations || {}, - labels: item.metadata?.labels || {}, - }, - spec: { - type, - clusterIP: clusterIP || '-', - externalIP: externalIP || '-', - ports, - }, - }; -}; - -export const mapCronJobItem = (item) => { - const metadata = { - ...item.metadata, - annotations: item.metadata?.annotations || {}, - labels: item.metadata?.labels || {}, - }; - - const status = { - active: item.status?.active || 0, - lastScheduleTime: item.status?.lastScheduleTime || null, - }; - - return { - status, - metadata, - spec: item.spec, - }; + return { status, spec, metadata, __typename: 'LocalWorkloadItem' }; }; export const watchWorkloadItems = ({ @@ -106,7 +31,6 @@ export const watchWorkloadItems = ({ namespace, watchPath, queryField, - mapFn = mapWorkloadItem, }) => { const config = new Configuration(configuration); const watcherApi = new WatchApi(config); @@ -117,7 +41,7 @@ export const watchWorkloadItems = ({ let result = []; watcher.on(EVENT_DATA, (data) => { - result = data.map(mapFn); + result = data.map(mapWorkloadItem); client.writeQuery({ query, @@ -138,6 +62,7 @@ export const getK8sPods = ({ namespace = '', enableWatch = false, mapFn = mapWorkloadItem, + queryField = 'k8sPods', }) => { const config = new Configuration(configuration); @@ -156,7 +81,7 @@ export const getK8sPods = ({ configuration, namespace, watchPath, - queryField: 'k8sPods', + queryField, }); } diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_cron_jobs.query.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_cron_jobs.query.graphql index fe20cd2e70ebd2c62aa72541e4e19b4444eb2678..47011375bca85dc60a42f0485c436780421fde90 100644 --- a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_cron_jobs.query.graphql +++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_cron_jobs.query.graphql @@ -1,18 +1,7 @@ -query getK8sDashboardCronJobs($configuration: LocalConfiguration) { +#import "./workload_item.fragment.graphql" + +query getK8sDashboardCronJobs($configuration: K8sDashboardConfig) { k8sCronJobs(configuration: $configuration) @client { - metadata { - name - namespace - creationTimestamp - labels - annotations - } - status { - active - lastScheduleTime - } - spec { - suspend - } + ...WorkloadItem } } diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_daemon_sets.query.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_daemon_sets.query.graphql index 4469c7a161aca25d18e0778639816cc6e690332d..5b73bee105e03cb520abe422000b5fa4c79388c8 100644 --- a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_daemon_sets.query.graphql +++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_daemon_sets.query.graphql @@ -1,16 +1,7 @@ -query getK8sDashboardDaemonSets($configuration: LocalConfiguration) { +#import "./workload_item.fragment.graphql" + +query getK8sDashboardDaemonSets($configuration: K8sDashboardConfig) { k8sDaemonSets(configuration: $configuration) @client { - metadata { - name - namespace - creationTimestamp - labels - annotations - } - status { - numberMisscheduled - numberReady - desiredNumberScheduled - } + ...WorkloadItem } } diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_deployments.query.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_deployments.query.graphql index 21172bbbeb09c30f73ba76365eb95805b4878d44..7b7fa26d8a8df0c898160725d1b7d3fef260e4aa 100644 --- a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_deployments.query.graphql +++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_deployments.query.graphql @@ -1,14 +1,7 @@ -query getK8sDashboardDeployments($configuration: LocalConfiguration) { +#import "./workload_item.fragment.graphql" + +query getK8sDashboardDeployments($configuration: K8sDashboardConfig) { k8sDeployments(configuration: $configuration) @client { - metadata { - name - namespace - creationTimestamp - labels - annotations - } - status { - conditions - } + ...WorkloadItem } } diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_jobs.query.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_jobs.query.graphql index 86afb47f2f9a25e4dbcda80a50d5afb113eff067..4752371b246313700b612868829144c47228e3d3 100644 --- a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_jobs.query.graphql +++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_jobs.query.graphql @@ -1,18 +1,7 @@ -query getK8sDashboardJobs($configuration: LocalConfiguration) { +#import "./workload_item.fragment.graphql" + +query getK8sDashboardJobs($configuration: K8sDashboardConfig) { k8sJobs(configuration: $configuration) @client { - metadata { - name - namespace - creationTimestamp - labels - annotations - } - status { - failed - succeeded - } - spec { - completions - } + ...WorkloadItem } } diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_pods.query.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_pods.query.graphql index 942737c062a46d7d33f15dea14232f520085f459..b8baff4216c2ac35c11bb32a691b6f5a90064d99 100644 --- a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_pods.query.graphql +++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_pods.query.graphql @@ -1,13 +1,7 @@ -query getK8sDashboardPods($configuration: LocalConfiguration) { - k8sPods(configuration: $configuration) @client { - metadata { - name - namespace - creationTimestamp - labels - annotations - } - status - spec +#import "./workload_item.fragment.graphql" + +query getK8sDashboardPods($configuration: K8sDashboardConfig) { + k8sDashboardPods(configuration: $configuration) @client { + ...WorkloadItem } } diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_replica_sets.query.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_replica_sets.query.graphql index 38aaa79853c5844afa757e40f5e998ef31182381..3e54909f66248264a572e4c80b2e5022b0fdeb9e 100644 --- a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_replica_sets.query.graphql +++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_replica_sets.query.graphql @@ -1,17 +1,7 @@ -query getK8sDashboardReplicaSets($configuration: LocalConfiguration) { +#import "./workload_item.fragment.graphql" + +query getK8sDashboardReplicaSets($configuration: K8sDashboardConfig) { k8sReplicaSets(configuration: $configuration) @client { - metadata { - name - namespace - creationTimestamp - labels - annotations - } - status { - readyReplicas - } - spec { - replicas - } + ...WorkloadItem } } diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_services.query.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_services.query.graphql index 7d42d66183efa5a7592fec1a2e5c73663112e0a1..b00c9e60c35a5dd115a483746e078ae74da6f746 100644 --- a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_services.query.graphql +++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_services.query.graphql @@ -1,17 +1,7 @@ -query getK8sDashboardServices($configuration: LocalConfiguration) { - k8sServices(configuration: $configuration) @client { - metadata { - name - namespace - creationTimestamp - labels - annotations - } - spec { - type - clusterIP - externalIP - ports - } +#import "./workload_item.fragment.graphql" + +query getK8sDashboardServices($configuration: K8sDashboardConfig) { + k8sDashboardServices(configuration: $configuration) @client { + ...WorkloadItem } } diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_stateful_sets.query.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_stateful_sets.query.graphql index ab1b9e1e472faf98323f4eece97b3c7679a7f130..6e2e4778052d2a34c825d65573b460a9a3c7ca09 100644 --- a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_stateful_sets.query.graphql +++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/k8s_dashboard_stateful_sets.query.graphql @@ -1,17 +1,7 @@ -query getK8sDashboardStatefulSets($configuration: LocalConfiguration) { +#import "./workload_item.fragment.graphql" + +query getK8sDashboardStatefulSets($configuration: K8sDashboardConfig) { k8sStatefulSets(configuration: $configuration) @client { - metadata { - name - namespace - creationTimestamp - labels - annotations - } - status { - readyReplicas - } - spec { - replicas - } + ...WorkloadItem } } diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/queries/workload_item.fragment.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/workload_item.fragment.graphql new file mode 100644 index 0000000000000000000000000000000000000000..da476a7562e5f877618833d67d69b625c69e27ad --- /dev/null +++ b/app/assets/javascripts/kubernetes_dashboard/graphql/queries/workload_item.fragment.graphql @@ -0,0 +1,11 @@ +fragment WorkloadItem on LocalWorkloadItem { + metadata { + name + namespace + creationTimestamp + labels + annotations + } + status + spec +} diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/resolvers/kubernetes.js b/app/assets/javascripts/kubernetes_dashboard/graphql/resolvers/kubernetes.js index 75285ad2ccabbf6a5874b3e71fb8e6db9b41d67e..a0037e3b13c7c6af09b38ba16b91d0d4ab94d90b 100644 --- a/app/assets/javascripts/kubernetes_dashboard/graphql/resolvers/kubernetes.js +++ b/app/assets/javascripts/kubernetes_dashboard/graphql/resolvers/kubernetes.js @@ -4,12 +4,8 @@ import { getK8sPods, handleClusterError, mapWorkloadItem, - mapSetItem, buildWatchPath, watchWorkloadItems, - mapJobItem, - mapCronJobItem, - mapServicesItems, } from '../helpers/resolver_helpers'; import k8sDashboardPodsQuery from '../queries/k8s_dashboard_pods.query.graphql'; import k8sDashboardDeploymentsQuery from '../queries/k8s_dashboard_deployments.query.graphql'; @@ -21,10 +17,11 @@ import k8sCronJobsQuery from '../queries/k8s_dashboard_cron_jobs.query.graphql'; import k8sServicesQuery from '../queries/k8s_dashboard_services.query.graphql'; export default { - k8sPods(_, { configuration }, { client }) { + k8sDashboardPods(_, { configuration }, { client }) { const query = k8sDashboardPodsQuery; const enableWatch = true; - return getK8sPods({ client, query, configuration, enableWatch }); + const queryField = 'k8sDashboardPods'; + return getK8sPods({ client, query, configuration, enableWatch, queryField }); }, k8sDeployments(_, { configuration, namespace = '' }, { client }) { @@ -84,12 +81,11 @@ export default { namespace, watchPath, queryField: 'k8sStatefulSets', - mapFn: mapSetItem, }); const data = res?.items || []; - return data.map(mapSetItem); + return data.map(mapWorkloadItem); }) .catch(async (err) => { try { @@ -121,12 +117,11 @@ export default { namespace, watchPath, queryField: 'k8sReplicaSets', - mapFn: mapSetItem, }); const data = res?.items || []; - return data.map(mapSetItem); + return data.map(mapWorkloadItem); }) .catch(async (err) => { try { @@ -194,12 +189,11 @@ export default { namespace, watchPath, queryField: 'k8sJobs', - mapFn: mapJobItem, }); const data = res?.items || []; - return data.map(mapJobItem); + return data.map(mapWorkloadItem); }) .catch(async (err) => { try { @@ -231,12 +225,11 @@ export default { namespace, watchPath, queryField: 'k8sCronJobs', - mapFn: mapCronJobItem, }); const data = res?.items || []; - return data.map(mapCronJobItem); + return data.map(mapWorkloadItem); }) .catch(async (err) => { try { @@ -247,7 +240,7 @@ export default { }); }, - k8sServices(_, { configuration, namespace = '' }, { client }) { + k8sDashboardServices(_, { configuration, namespace = '' }, { client }) { const config = new Configuration(configuration); const coreV1Api = new CoreV1Api(config); @@ -266,13 +259,12 @@ export default { configuration, namespace, watchPath, - queryField: 'k8sServices', - mapFn: mapServicesItems, + queryField: 'k8sDashboardServices', }); const data = res?.items || []; - return data.map(mapServicesItems); + return data.map(mapWorkloadItem); }) .catch(async (err) => { try { diff --git a/app/assets/javascripts/kubernetes_dashboard/graphql/typedefs.graphql b/app/assets/javascripts/kubernetes_dashboard/graphql/typedefs.graphql new file mode 100644 index 0000000000000000000000000000000000000000..aeee24248cee1feb83fce356afb4694f82a3e9ff --- /dev/null +++ b/app/assets/javascripts/kubernetes_dashboard/graphql/typedefs.graphql @@ -0,0 +1,29 @@ +type LocalWorkloadMetadata { + name: String + namespace: String + creationTimestamp: String + labels: JSON + annotations: JSON +} + +type LocalWorkloadItem { + metadata: LocalWorkloadMetadata + status: JSON + spec: JSON +} + +input K8sDashboardConfig { + basePath: String + baseOptions: JSON +} + +extend type Query { + k8sCronJobs(configuration: K8sDashboardConfig): [LocalWorkloadItem] + k8sDaemonSets(configuration: K8sDashboardConfig): [LocalWorkloadItem] + k8sDeployments(configuration: K8sDashboardConfig): [LocalWorkloadItem] + k8sJobs(configuration: K8sDashboardConfig): [LocalWorkloadItem] + k8sDashboardPods(configuration: K8sDashboardConfig): [LocalWorkloadItem] + k8sReplicaSets(configuration: K8sDashboardConfig): [LocalWorkloadItem] + k8sDashboardServices(configuration: K8sDashboardConfig): [LocalWorkloadItem] + k8sStatefulSets(configuration: K8sDashboardConfig): [LocalWorkloadItem] +} diff --git a/app/assets/javascripts/kubernetes_dashboard/pages/cron_jobs_page.vue b/app/assets/javascripts/kubernetes_dashboard/pages/cron_jobs_page.vue index 2d57bfdc9fcc96b31a707c4f7345d2dc189921fe..9967ce303a3c560b3ec8ba9c8e851578420344a0 100644 --- a/app/assets/javascripts/kubernetes_dashboard/pages/cron_jobs_page.vue +++ b/app/assets/javascripts/kubernetes_dashboard/pages/cron_jobs_page.vue @@ -22,13 +22,15 @@ export default { return ( data?.k8sCronJobs?.map((job) => { return { - name: job.metadata?.name, - namespace: job.metadata?.namespace, + name: job.metadata.name, + namespace: job.metadata.namespace, status: calculateCronJobStatus(job), - age: getAge(job.metadata?.creationTimestamp), - labels: job.metadata?.labels, - annotations: job.metadata?.annotations, + age: getAge(job.metadata.creationTimestamp), + labels: job.metadata.labels, + annotations: job.metadata.annotations, kind: s__('KubernetesDashboard|CronJob'), + spec: job.spec, + fullStatus: job.status, }; }) || [] ); diff --git a/app/assets/javascripts/kubernetes_dashboard/pages/daemon_sets_page.vue b/app/assets/javascripts/kubernetes_dashboard/pages/daemon_sets_page.vue index bdde4e89f342a1459535d9cf8824e052bea78a73..9ad5d4d696f71535c8524b2087f745efdca88ce2 100644 --- a/app/assets/javascripts/kubernetes_dashboard/pages/daemon_sets_page.vue +++ b/app/assets/javascripts/kubernetes_dashboard/pages/daemon_sets_page.vue @@ -22,13 +22,15 @@ export default { return ( data?.k8sDaemonSets?.map((daemonSet) => { return { - name: daemonSet.metadata?.name, - namespace: daemonSet.metadata?.namespace, + name: daemonSet.metadata.name, + namespace: daemonSet.metadata.namespace, status: calculateDaemonSetStatus(daemonSet), - age: getAge(daemonSet.metadata?.creationTimestamp), - labels: daemonSet.metadata?.labels, - annotations: daemonSet.metadata?.annotations, + age: getAge(daemonSet.metadata.creationTimestamp), + labels: daemonSet.metadata.labels, + annotations: daemonSet.metadata.annotations, kind: s__('KubernetesDashboard|DaemonSet'), + spec: daemonSet.spec, + fullStatus: daemonSet.status, }; }) || [] ); diff --git a/app/assets/javascripts/kubernetes_dashboard/pages/deployments_page.vue b/app/assets/javascripts/kubernetes_dashboard/pages/deployments_page.vue index c547296653972c36d4f2ad31417787aaf1b964b4..a56db69c8930cb8064bd4c6f2dc9f4af7e0226be 100644 --- a/app/assets/javascripts/kubernetes_dashboard/pages/deployments_page.vue +++ b/app/assets/javascripts/kubernetes_dashboard/pages/deployments_page.vue @@ -22,13 +22,15 @@ export default { return ( data?.k8sDeployments?.map((deployment) => { return { - name: deployment.metadata?.name, - namespace: deployment.metadata?.namespace, + name: deployment.metadata.name, + namespace: deployment.metadata.namespace, status: calculateDeploymentStatus(deployment), - age: getAge(deployment.metadata?.creationTimestamp), - labels: deployment.metadata?.labels, - annotations: deployment.metadata?.annotations, + age: getAge(deployment.metadata.creationTimestamp), + labels: deployment.metadata.labels, + annotations: deployment.metadata.annotations, kind: s__('KubernetesDashboard|Deployment'), + spec: deployment.spec, + fullStatus: deployment.status, }; }) || [] ); diff --git a/app/assets/javascripts/kubernetes_dashboard/pages/jobs_page.vue b/app/assets/javascripts/kubernetes_dashboard/pages/jobs_page.vue index f9dbb53e8b45f019240e53214524a32202142bde..1d7286ac727379b552680474686477f35d49561f 100644 --- a/app/assets/javascripts/kubernetes_dashboard/pages/jobs_page.vue +++ b/app/assets/javascripts/kubernetes_dashboard/pages/jobs_page.vue @@ -22,13 +22,15 @@ export default { return ( data?.k8sJobs?.map((job) => { return { - name: job.metadata?.name, - namespace: job.metadata?.namespace, + name: job.metadata.name, + namespace: job.metadata.namespace, status: calculateJobStatus(job), - age: getAge(job.metadata?.creationTimestamp), - labels: job.metadata?.labels, - annotations: job.metadata?.annotations, + age: getAge(job.metadata.creationTimestamp), + labels: job.metadata.labels, + annotations: job.metadata.annotations, kind: s__('KubernetesDashboard|Job'), + spec: job.spec, + fullStatus: job.status, }; }) || [] ); diff --git a/app/assets/javascripts/kubernetes_dashboard/pages/pods_page.vue b/app/assets/javascripts/kubernetes_dashboard/pages/pods_page.vue index ba124d908b3d7559cae9f150a77460789a89dc6f..05eb86541447551520259a55547aefb62d6a4e65 100644 --- a/app/assets/javascripts/kubernetes_dashboard/pages/pods_page.vue +++ b/app/assets/javascripts/kubernetes_dashboard/pages/pods_page.vue @@ -26,14 +26,14 @@ export default { }, update(data) { return ( - data?.k8sPods?.map((pod) => { + data?.k8sDashboardPods?.map((pod) => { return { - name: pod.metadata?.name, - namespace: pod.metadata?.namespace, + name: pod.metadata.name, + namespace: pod.metadata.namespace, status: pod.status.phase, - age: getAge(pod.metadata?.creationTimestamp), - labels: pod.metadata?.labels, - annotations: pod.metadata?.annotations, + age: getAge(pod.metadata.creationTimestamp), + labels: pod.metadata.labels, + annotations: pod.metadata.annotations, kind: s__('KubernetesDashboard|Pod'), spec: pod.spec, fullStatus: pod.status, diff --git a/app/assets/javascripts/kubernetes_dashboard/pages/replica_sets_page.vue b/app/assets/javascripts/kubernetes_dashboard/pages/replica_sets_page.vue index 212cc0dbaf73ef0eb7633c4e51ef5d68f92f37ed..ec59c6e63f05068a15c8e5a28948e79eab4f1191 100644 --- a/app/assets/javascripts/kubernetes_dashboard/pages/replica_sets_page.vue +++ b/app/assets/javascripts/kubernetes_dashboard/pages/replica_sets_page.vue @@ -22,13 +22,15 @@ export default { return ( data?.k8sReplicaSets?.map((replicaSet) => { return { - name: replicaSet.metadata?.name, - namespace: replicaSet.metadata?.namespace, + name: replicaSet.metadata.name, + namespace: replicaSet.metadata.namespace, status: calculateStatefulSetStatus(replicaSet), - age: getAge(replicaSet.metadata?.creationTimestamp), - labels: replicaSet.metadata?.labels, - annotations: replicaSet.metadata?.annotations, + age: getAge(replicaSet.metadata.creationTimestamp), + labels: replicaSet.metadata.labels, + annotations: replicaSet.metadata.annotations, kind: s__('KubernetesDashboard|ReplicaSet'), + spec: replicaSet.spec, + fullStatus: replicaSet.status, }; }) || [] ); diff --git a/app/assets/javascripts/kubernetes_dashboard/pages/services_page.vue b/app/assets/javascripts/kubernetes_dashboard/pages/services_page.vue index 4dc8fb6b6c0317061e6305806b5513cbcd15f4a5..6be195175386c4505200460ffd3ae7b120864b3c 100644 --- a/app/assets/javascripts/kubernetes_dashboard/pages/services_page.vue +++ b/app/assets/javascripts/kubernetes_dashboard/pages/services_page.vue @@ -20,18 +20,20 @@ export default { }, update(data) { return ( - data?.k8sServices?.map((service) => { + data?.k8sDashboardServices?.map((service) => { return { - name: service.metadata?.name, - namespace: service.metadata?.namespace, - type: service.spec?.type, - clusterIP: service.spec?.clusterIP, - externalIP: service.spec?.externalIP, - ports: generateServicePortsString(service?.spec?.ports), - age: getAge(service.metadata?.creationTimestamp), - labels: service.metadata?.labels, - annotations: service.metadata?.annotations, + name: service.metadata.name, + namespace: service.metadata.namespace, + type: service.spec.type, + clusterIP: service.spec.clusterIP || '-', + externalIP: service.spec.externalIP || '-', + ports: generateServicePortsString(service.spec.ports), + age: getAge(service.metadata.creationTimestamp), + labels: service.metadata.labels, + annotations: service.metadata.annotations, kind: s__('KubernetesDashboard|Service'), + spec: service.spec, + fullStatus: service.status, }; }) || [] ); diff --git a/app/assets/javascripts/kubernetes_dashboard/pages/stateful_sets_page.vue b/app/assets/javascripts/kubernetes_dashboard/pages/stateful_sets_page.vue index bcdce41b4338e4acc6bc0f289a9c0222e5ba2ace..e6c72c66c5d629b316ae1b8f07d57f2fbc776fb0 100644 --- a/app/assets/javascripts/kubernetes_dashboard/pages/stateful_sets_page.vue +++ b/app/assets/javascripts/kubernetes_dashboard/pages/stateful_sets_page.vue @@ -22,13 +22,15 @@ export default { return ( data?.k8sStatefulSets?.map((statefulSet) => { return { - name: statefulSet.metadata?.name, - namespace: statefulSet.metadata?.namespace, + name: statefulSet.metadata.name, + namespace: statefulSet.metadata.namespace, status: calculateStatefulSetStatus(statefulSet), - age: getAge(statefulSet.metadata?.creationTimestamp), - labels: statefulSet.metadata?.labels, - annotations: statefulSet.metadata?.annotations, + age: getAge(statefulSet.metadata.creationTimestamp), + labels: statefulSet.metadata.labels, + annotations: statefulSet.metadata.annotations, kind: s__('KubernetesDashboard|StatefulSet'), + spec: statefulSet.spec, + fullStatus: statefulSet.status, }; }) || [] ); diff --git a/spec/frontend/kubernetes_dashboard/graphql/mock_data.js b/spec/frontend/kubernetes_dashboard/graphql/mock_data.js index ce6a2defc1b75637948e499570d639df82087cc2..75c722498d07638aafc5b834658d19c27a4e7202 100644 --- a/spec/frontend/kubernetes_dashboard/graphql/mock_data.js +++ b/spec/frontend/kubernetes_dashboard/graphql/mock_data.js @@ -8,6 +8,7 @@ const runningPod = { annotations: { annotation: 'text', another: 'text' }, }, spec: { restartPolicy: 'Never', terminationGracePeriodSeconds: 30 }, + __typename: 'LocalWorkloadItem', }; const pendingPod = { status: { phase: 'Pending' }, @@ -19,6 +20,7 @@ const pendingPod = { annotations: { annotation: 'text', another: 'text' }, }, spec: {}, + __typename: 'LocalWorkloadItem', }; const succeededPod = { status: { phase: 'Succeeded' }, @@ -30,6 +32,7 @@ const succeededPod = { annotations: {}, }, spec: {}, + __typename: 'LocalWorkloadItem', }; const failedPod = { status: { phase: 'Failed' }, @@ -41,6 +44,7 @@ const failedPod = { annotations: {}, }, spec: {}, + __typename: 'LocalWorkloadItem', }; export const k8sPodsMock = [runningPod, runningPod, pendingPod, succeededPod, failedPod, failedPod]; @@ -143,6 +147,8 @@ const pendingDeployment = { labels: {}, annotations: {}, }, + spec: {}, + __typename: 'LocalWorkloadItem', }; const readyDeployment = { status: { @@ -158,6 +164,8 @@ const readyDeployment = { labels: {}, annotations: {}, }, + spec: {}, + __typename: 'LocalWorkloadItem', }; const failedDeployment = { status: { @@ -173,6 +181,8 @@ const failedDeployment = { labels: {}, annotations: {}, }, + spec: {}, + __typename: 'LocalWorkloadItem', }; export const k8sDeploymentsMock = [ @@ -246,6 +256,7 @@ const readyStatefulSet = { labels: {}, annotations: {}, }, + __typename: 'LocalWorkloadItem', }; const failedStatefulSet = { status: { readyReplicas: 1 }, @@ -257,6 +268,7 @@ const failedStatefulSet = { labels: {}, annotations: {}, }, + __typename: 'LocalWorkloadItem', }; export const k8sStatefulSetsMock = [readyStatefulSet, readyStatefulSet, failedStatefulSet]; @@ -317,6 +329,8 @@ const readyDaemonSet = { labels: {}, annotations: {}, }, + spec: {}, + __typename: 'LocalWorkloadItem', }; const failedDaemonSet = { @@ -328,6 +342,8 @@ const failedDaemonSet = { labels: {}, annotations: {}, }, + spec: {}, + __typename: 'LocalWorkloadItem', }; export const mockDaemonSetsStats = [ @@ -374,6 +390,7 @@ const completedJob = { labels: {}, annotations: {}, }, + __typename: 'LocalWorkloadItem', }; const failedJob = { @@ -386,6 +403,7 @@ const failedJob = { labels: {}, annotations: {}, }, + __typename: 'LocalWorkloadItem', }; const anotherFailedJob = { @@ -398,6 +416,7 @@ const anotherFailedJob = { labels: {}, annotations: {}, }, + __typename: 'LocalWorkloadItem', }; export const mockJobsStats = [ @@ -453,6 +472,7 @@ const readyCronJob = { labels: {}, annotations: {}, }, + __typename: 'LocalWorkloadItem', }; const suspendedCronJob = { @@ -465,6 +485,7 @@ const suspendedCronJob = { labels: {}, annotations: {}, }, + __typename: 'LocalWorkloadItem', }; const failedCronJob = { @@ -477,6 +498,7 @@ const failedCronJob = { labels: {}, annotations: {}, }, + __typename: 'LocalWorkloadItem', }; export const mockCronJobsStats = [ @@ -548,6 +570,8 @@ export const k8sServicesMock = [ externalIP: '-', type: 'ClusterIP', }, + status: {}, + __typename: 'LocalWorkloadItem', }, { metadata: { @@ -580,6 +604,8 @@ export const k8sServicesMock = [ externalIP: '-', type: 'NodePort', }, + status: {}, + __typename: 'LocalWorkloadItem', }, ]; diff --git a/spec/frontend/kubernetes_dashboard/graphql/resolvers/kubernetes_spec.js b/spec/frontend/kubernetes_dashboard/graphql/resolvers/kubernetes_spec.js index 01e2c3d2716eaa558fd8e7016fc99920c04f4508..d1a51a7f91af863a363e50e4bc7dd017919c5b7f 100644 --- a/spec/frontend/kubernetes_dashboard/graphql/resolvers/kubernetes_spec.js +++ b/spec/frontend/kubernetes_dashboard/graphql/resolvers/kubernetes_spec.js @@ -33,7 +33,7 @@ describe('~/frontend/environments/graphql/resolvers', () => { mockResolvers = resolvers; }); - describe('k8sPods', () => { + describe('k8sDashboardPods', () => { const client = { writeQuery: jest.fn() }; const mockWatcher = WatchApi.prototype; @@ -65,7 +65,7 @@ describe('~/frontend/environments/graphql/resolvers', () => { }); it('should request all pods from the cluster_client library and watch the events', async () => { - const pods = await mockResolvers.Query.k8sPods( + const pods = await mockResolvers.Query.k8sDashboardPods( null, { configuration, @@ -80,12 +80,16 @@ describe('~/frontend/environments/graphql/resolvers', () => { }); it('should update cache with the new data when received from the library', async () => { - await mockResolvers.Query.k8sPods(null, { configuration, namespace: '' }, { client }); + await mockResolvers.Query.k8sDashboardPods( + null, + { configuration, namespace: '' }, + { client }, + ); expect(client.writeQuery).toHaveBeenCalledWith({ query: k8sDashboardPodsQuery, variables: { configuration, namespace: '' }, - data: { k8sPods: [] }, + data: { k8sDashboardPods: [] }, }); }); }); @@ -99,7 +103,7 @@ describe('~/frontend/environments/graphql/resolvers', () => { }), ); - await mockResolvers.Query.k8sPods(null, { configuration }, { client }); + await mockResolvers.Query.k8sDashboardPods(null, { configuration }, { client }); expect(mockPodsListWatcherFn).not.toHaveBeenCalled(); }); @@ -110,7 +114,7 @@ describe('~/frontend/environments/graphql/resolvers', () => { .mockRejectedValue(new Error('API error')); await expect( - mockResolvers.Query.k8sPods(null, { configuration }, { client }), + mockResolvers.Query.k8sDashboardPods(null, { configuration }, { client }), ).rejects.toThrow('API error'); }); }); @@ -627,7 +631,7 @@ describe('~/frontend/environments/graphql/resolvers', () => { }); }); - describe('k8sServices', () => { + describe('k8sDashboardServices', () => { const client = { writeQuery: jest.fn() }; const mockWatcher = WatchApi.prototype; @@ -659,7 +663,7 @@ describe('~/frontend/environments/graphql/resolvers', () => { }); it('should request all Services from the cluster_client library and watch the events', async () => { - const Services = await mockResolvers.Query.k8sServices( + const Services = await mockResolvers.Query.k8sDashboardServices( null, { configuration, @@ -674,12 +678,16 @@ describe('~/frontend/environments/graphql/resolvers', () => { }); it('should update cache with the new data when received from the library', async () => { - await mockResolvers.Query.k8sServices(null, { configuration, namespace: '' }, { client }); + await mockResolvers.Query.k8sDashboardServices( + null, + { configuration, namespace: '' }, + { client }, + ); expect(client.writeQuery).toHaveBeenCalledWith({ query: k8sDashboardServicesQuery, variables: { configuration, namespace: '' }, - data: { k8sServices: [] }, + data: { k8sDashboardServices: [] }, }); }); }); @@ -693,7 +701,7 @@ describe('~/frontend/environments/graphql/resolvers', () => { }), ); - await mockResolvers.Query.k8sServices(null, { configuration }, { client }); + await mockResolvers.Query.k8sDashboardServices(null, { configuration }, { client }); expect(mockServicesListWatcherFn).not.toHaveBeenCalled(); }); @@ -704,7 +712,7 @@ describe('~/frontend/environments/graphql/resolvers', () => { .mockRejectedValue(new Error('API error')); await expect( - mockResolvers.Query.k8sServices(null, { configuration }, { client }), + mockResolvers.Query.k8sDashboardServices(null, { configuration }, { client }), ).rejects.toThrow('API error'); }); }); diff --git a/spec/frontend/kubernetes_dashboard/pages/pods_page_spec.js b/spec/frontend/kubernetes_dashboard/pages/pods_page_spec.js index 28a98bad211726aa095a13b01501293b8741b1ab..6f461743c124a08a69f3586124338d9800bfc6ef 100644 --- a/spec/frontend/kubernetes_dashboard/pages/pods_page_spec.js +++ b/spec/frontend/kubernetes_dashboard/pages/pods_page_spec.js @@ -25,7 +25,7 @@ describe('Kubernetes dashboard pods page', () => { const createApolloProvider = () => { const mockResolvers = { Query: { - k8sPods: jest.fn().mockReturnValue(k8sPodsMock), + k8sDashboardPods: jest.fn().mockReturnValue(k8sPodsMock), }, }; @@ -83,7 +83,7 @@ describe('Kubernetes dashboard pods page', () => { const createErroredApolloProvider = () => { const mockResolvers = { Query: { - k8sPods: jest.fn().mockRejectedValueOnce(error), + k8sDashboardPods: jest.fn().mockRejectedValueOnce(error), }, }; diff --git a/spec/frontend/kubernetes_dashboard/pages/services_page_spec.js b/spec/frontend/kubernetes_dashboard/pages/services_page_spec.js index c76f4330cd60980b545ef7ac1ade404fba505870..e0746af7e5d429cc549afc65a68eea0abd72eb3c 100644 --- a/spec/frontend/kubernetes_dashboard/pages/services_page_spec.js +++ b/spec/frontend/kubernetes_dashboard/pages/services_page_spec.js @@ -26,7 +26,7 @@ describe('Kubernetes dashboard services page', () => { const createApolloProvider = () => { const mockResolvers = { Query: { - k8sServices: jest.fn().mockReturnValue(k8sServicesMock), + k8sDashboardServices: jest.fn().mockReturnValue(k8sServicesMock), }, }; @@ -85,7 +85,7 @@ describe('Kubernetes dashboard services page', () => { const createErroredApolloProvider = () => { const mockResolvers = { Query: { - k8sServices: jest.fn().mockRejectedValueOnce(error), + k8sDashboardServices: jest.fn().mockRejectedValueOnce(error), }, };