From 5b1bad71702a855f1d96ff4057c3dc0b4e218ce8 Mon Sep 17 00:00:00 2001 From: Jon Jackson Date: Fri, 8 Feb 2019 11:10:58 -0500 Subject: [PATCH] Always provide a cluster update path when updates are available --- .../cluster-settings/cluster-settings.tsx | 147 +++++++++--------- .../public/components/masthead-toolbar.jsx | 2 +- .../modals/cluster-channel-modal.tsx | 18 ++- .../modals/cluster-update-modal.tsx | 25 ++- .../public/module/k8s/cluster-settings.ts | 66 ++++++++ frontend/public/module/k8s/index.ts | 40 +++-- 6 files changed, 201 insertions(+), 97 deletions(-) create mode 100644 frontend/public/module/k8s/cluster-settings.ts diff --git a/frontend/public/components/cluster-settings/cluster-settings.tsx b/frontend/public/components/cluster-settings/cluster-settings.tsx index da6bdc7f9da..8063a53fc5f 100644 --- a/frontend/public/components/cluster-settings/cluster-settings.tsx +++ b/frontend/public/components/cluster-settings/cluster-settings.tsx @@ -1,5 +1,3 @@ -// TODO (jon) - Remove mock code from this file once cluster update feature is complete - /* eslint-disable no-unused-vars, no-undef */ import * as React from 'react'; @@ -8,11 +6,26 @@ import { Helmet } from 'react-helmet'; import { Button } from 'patternfly-react'; import { Link } from 'react-router-dom'; -import { ClusterVersionKind, K8sResourceKind, referenceForModel } from '../../module/k8s'; -import { ClusterAutoscalerModel, ClusterVersionModel } from '../../models'; import { ClusterOperatorPage } from './cluster-operator'; import { clusterChannelModal, clusterUpdateModal } from '../modals'; import { GlobalConfigPage } from './global-config'; +import { ClusterAutoscalerModel } from '../../models'; +import { + ClusterUpdateStatus, + ClusterVersionCondition, + ClusterVersionConditionType, + ClusterVersionKind, + clusterVersionReference, + getAvailableClusterUpdates, + getClusterUpdateStatus, + getClusterVersionCondition, + getDesiredClusterVersion, + isProgressing, + K8sResourceConditionStatus, + K8sResourceKind, + referenceForModel, + updateFailing, +} from '../../module/k8s'; import { EmptyBox, Firehose, @@ -23,56 +36,12 @@ import { Timestamp, } from '../utils'; -enum ClusterUpdateStatus { - UpToDate = 'Up to Date', - UpdatesAvailable = 'Updates Available', - Updating = 'Updating', - Failing = 'Failing', - ErrorRetrieving = 'Error Retrieving', -} - const clusterAutoscalerReference = referenceForModel(ClusterAutoscalerModel); -export const clusterVersionReference = referenceForModel(ClusterVersionModel); - -export const getAvailableClusterChannels = () => ({'nightly-4.0': 'nightly-4.0', 'pre-release-4.0': 'pre-release-4.0', 'stable-4.0': 'stable-4.0'}); - -export const getAvailableClusterUpdates = (cv: ClusterVersionKind) => { - return _.get(cv, 'status.availableUpdates'); -}; - -export const getDesiredClusterVersion = (cv: ClusterVersionKind) => { - return _.get(cv, 'status.desired.version'); -}; - -const launchUpdateModal = (cv: ClusterVersionKind) => { - clusterUpdateModal({cv}); -}; const CurrentChannel: React.SFC = ({cv}) => ; -const getClusterUpdateStatus = (cv: ClusterVersionKind): ClusterUpdateStatus => { - const conditions = _.get(cv, 'status.conditions', []); - const isFailingCondition = _.find(conditions, { type: 'Failing', status: 'True' }); - if (isFailingCondition) { - return ClusterUpdateStatus.Failing; - } - - const retrievedUpdatesFailedCondition = _.find(conditions, { type: 'RetrievedUpdates', status: 'False' }); - if (retrievedUpdatesFailedCondition) { - return ClusterUpdateStatus.ErrorRetrieving; - } - - const isProgressingCondition = _.find(conditions, { type: 'Progressing', status: 'True' }); - if (isProgressingCondition) { - return ClusterUpdateStatus.Updating; - } - - const updates = _.get(cv, 'status.availableUpdates'); - return _.isEmpty(updates) ? ClusterUpdateStatus.UpToDate : ClusterUpdateStatus.UpdatesAvailable; -}; - const getIconClass = (status: ClusterUpdateStatus) => { return { [ClusterUpdateStatus.UpToDate]: 'pficon pficon-ok', @@ -83,26 +52,44 @@ const getIconClass = (status: ClusterUpdateStatus) => { }[status]; }; -const FailedConditionAlert = ({message, condition}) =>
-