Skip to content

Cluster list cpu and memory refactor

Emily Ring requested to merge emilyring-cluster-list-cpu-refactor into master

What does this MR do?

The current Cluster Index View has the following code:

- if Feature.enabled?(:clusters_list_redesign)
      #js-clusters-list-app{ data: { endpoint: clusterable.index_path(format: :json) } }
    - else
      .clusters-table.js-clusters-list
        .gl-responsive-table-row.table-row-header{ role: "row" }
          .table-section.section-60{ role: "rowheader" }
            = s_("ClusterIntegration|Kubernetes cluster")
          .table-section.section-30{ role: "rowheader" }
            = s_("ClusterIntegration|Environment scope")
          .table-section.section-10{ role: "rowheader" }
        - @clusters.each do |cluster|
          = render "cluster", cluster: cluster.present(current_user: current_user)
      = paginate @clusters, theme: "gitlab"

Feature.enabled?(:clusters_list_redesign) is part of a redesign where we:

  • Refactor/Move the cluster list from haml to vue
  • Add additional columns to the cluster table. (See related Epic: &2666 (closed))

This a a follow-up from displaying memory and cpu on our cluster list vue.

Original MR: !32601 (merged)

Follow-up Issue: #219510 (closed)

Calculating the cluster cpu and memory is quite complex, adding a lot of extra methods/mess to the cluster table component.

This MR will

  • Move cluster cpu calculations into it's own vue component
  • Move cluster memory calculations into it's own vue component
  • Update associated tests

Screenshots

image

Test locally

Ideally, you have a Kubernetes ancestor cluster group you can create.

If not, you can mock the backend by adding the mock data from testing to update the fetchClusters method in the actions file.

Your file would look something like

const clusterList = [
  {
    name: 'My Cluster 1',
    environment_scope: '*',
    cluster_type: 'group_type',
    provider_type: 'gcp',
    status: 'creating',
    nodes: null,
  },
  {
    name: 'My Cluster 2',
    environment_scope: 'development',
    cluster_type: 'project_type',
    provider_type: 'aws',
    status: 'unreachable',
    nodes: [
      {
        status: { allocatable: { cpu: '1930m', memory: '5777156Ki' } },
        usage: { cpu: '246155922n', memory: '1255212Ki' },
      },
    ],
  },
  {
    name: 'My Cluster 3',
    environment_scope: 'development',
    cluster_type: 'project_type',
    provider_type: 'none',
    status: 'authentication_failure',
    nodes: [
      {
        status: { allocatable: { cpu: '1930m', memory: '5777156Ki' } },
        usage: { cpu: '246155922n', memory: '1255212Ki' },
      },
      {
        status: { allocatable: { cpu: '1940m', memory: '6777156Ki' } },
        usage: { cpu: '307051934n', memory: '1379136Ki' },
      },
    ],
  },
  {
    name: 'My Cluster 4',
    environment_scope: 'production',
    cluster_type: 'project_type',
    status: 'deleting',
    nodes: [
      {
        status: { allocatable: { cpu: '1missingCpuUnit', memory: '1missingMemoryUnit' } },
        usage: { cpu: '1missingCpuUnit', memory: '1missingMemoryUnit' },
      },
    ],
  },
];

const apiData = {
  clusters: clusterList,
  has_ancestor_clusters: false
};

export const fetchClusters = ({ state, commit, dispatch }) => {
  commit(types.SET_CLUSTERS_DATA, { data: apiData, paginationInformation: {} });
  commit(types.SET_LOADING_CLUSTERS, false);
  commit(types.SET_LOADING_NODES, false);
};

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Security

If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
  • Security reports checked/validated by a reviewer from the AppSec team

Closes #219510 (closed)

Edited by Emily Ring

Merge request reports