/
cluster-operator.ts
52 lines (43 loc) · 1.8 KB
/
cluster-operator.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import * as _ from 'lodash-es';
import { ClusterOperator, OperandVersion } from '.';
export enum OperatorStatus {
Available = 'Available',
Progressing = 'Progressing',
Degraded = 'Degraded',
CannotUpdate = 'Cannot update',
Unavailable = 'Unavailable',
Unknown = 'Unknown',
}
export const getStatusAndMessage = (operator: ClusterOperator) => {
const conditions = _.get(operator, 'status.conditions');
const cannotUpdate: any = _.find(conditions, { type: 'Upgradeable', status: 'False' });
if (cannotUpdate) {
return { status: OperatorStatus.CannotUpdate, message: cannotUpdate.message };
}
const unavailable: any = _.find(conditions, { type: 'Available', status: 'False' });
if (unavailable) {
return { status: OperatorStatus.Unavailable, message: unavailable.message };
}
const degraded: any = _.find(conditions, { type: 'Degraded', status: 'True' });
if (degraded) {
return { status: OperatorStatus.Degraded, message: degraded.message };
}
const progressing: any = _.find(conditions, { type: 'Progressing', status: 'True' });
if (progressing) {
return { status: OperatorStatus.Progressing, message: progressing.message };
}
const available: any = _.find(conditions, { type: 'Available', status: 'True' });
if (available) {
return { status: OperatorStatus.Available, message: '' };
}
return { status: OperatorStatus.Unknown, message: '' };
};
export const getClusterOperatorStatus = (operator: ClusterOperator) => {
const { status } = getStatusAndMessage(operator);
return status;
};
export const getClusterOperatorVersion = (operator: ClusterOperator) => {
const versions: OperandVersion[] = _.get(operator, 'status.versions', []);
const operatorVersion = _.find(versions, (v) => v.name === 'operator');
return operatorVersion ? operatorVersion.version : '';
};