@rancher/shell 3.0.1 → 3.0.2-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/styles/base/_basic.scss +17 -5
- package/assets/styles/base/_mixins.scss +2 -1
- package/assets/styles/global/_button.scss +10 -0
- package/assets/styles/global/_form.scss +2 -2
- package/assets/translations/en-us.yaml +33 -5
- package/assets/translations/zh-hans.yaml +1 -1
- package/components/ActionMenu.vue +8 -0
- package/components/AsyncButton.vue +9 -3
- package/components/BannerGraphic.vue +10 -0
- package/components/ButtonGroup.vue +2 -0
- package/components/ButtonMultiAction.vue +6 -0
- package/components/ClusterIconMenu.vue +1 -1
- package/components/CodeMirror.vue +28 -1
- package/components/CommunityLinks.vue +13 -0
- package/components/CruResource.vue +6 -0
- package/components/GrowlManager.vue +14 -4
- package/components/LocaleSelector.vue +49 -5
- package/components/PaginatedResourceTable.vue +4 -3
- package/components/ResourceDetail/Masthead.vue +11 -4
- package/components/ResourceList/index.vue +5 -3
- package/components/ResourceTable.vue +1 -1
- package/components/SortableTable/THead.vue +19 -4
- package/components/SortableTable/index.vue +13 -9
- package/components/SortableTable/selection.js +19 -5
- package/components/YamlEditor.vue +2 -1
- package/components/auth/SelectPrincipal.vue +1 -1
- package/components/fleet/FleetBundles.vue +2 -1
- package/components/form/LabeledSelect.vue +20 -7
- package/components/form/NodeScheduling.vue +5 -1
- package/components/form/Password.vue +23 -13
- package/components/form/ResourceLabeledSelect.vue +1 -1
- package/components/form/Select.vue +28 -6
- package/components/form/SelectOrCreateAuthSecret.vue +39 -11
- package/components/form/__tests__/NodeScheduling.test.ts +44 -0
- package/components/formatter/Endpoints.vue +1 -1
- package/components/formatter/LiveExpiryDate.vue +5 -1
- package/components/formatter/ServiceTargets.vue +1 -1
- package/components/formatter/ServiceType.vue +19 -17
- package/components/nav/Pinned.vue +6 -1
- package/components/nav/TopLevelMenu.helper.ts +17 -1
- package/components/nav/TopLevelMenu.vue +154 -19
- package/config/pagination-table-headers.js +9 -1
- package/config/product/apps.js +63 -30
- package/config/product/explorer.js +182 -17
- package/config/product/settings.js +9 -1
- package/config/router/routes.js +0 -1
- package/config/settings.ts +20 -2
- package/config/table-headers.js +23 -15
- package/config/types.js +2 -1
- package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +12 -3
- package/edit/fleet.cattle.io.gitrepo.vue +40 -33
- package/edit/provisioning.cattle.io.cluster/rke2.vue +13 -2
- package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +10 -2
- package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +8 -2
- package/edit/provisioning.cattle.io.cluster/tabs/registries/__tests__/RegistryConfigs.test.ts +6 -3
- package/edit/workload/mixins/workload.js +15 -7
- package/list/catalog.cattle.io.app.vue +4 -11
- package/list/catalog.cattle.io.clusterrepo.vue +59 -25
- package/list/fleet.cattle.io.bundle.vue +2 -2
- package/list/management.cattle.io.feature.vue +12 -5
- package/list/management.cattle.io.setting.vue +30 -19
- package/list/namespace.vue +4 -1
- package/list/networking.k8s.io.ingress.vue +14 -11
- package/list/node.vue +65 -63
- package/list/persistentvolume.vue +55 -20
- package/list/persistentvolumeclaim.vue +3 -15
- package/list/service.vue +16 -21
- package/list/workload.vue +35 -49
- package/mixins/resource-fetch.js +8 -1
- package/mixins/vue-select-overrides.js +10 -16
- package/models/management.cattle.io.cluster.js +6 -1
- package/models/persistentvolume.js +1 -3
- package/models/storage.k8s.io.storageclass.js +4 -0
- package/package.json +28 -29
- package/pages/c/_cluster/explorer/EventsTable.vue +58 -16
- package/pages/c/_cluster/explorer/index.vue +3 -16
- package/pages/c/_cluster/settings/performance.vue +49 -23
- package/pages/home.vue +24 -3
- package/pages/support/index.vue +1 -1
- package/plugins/floating-vue.js +1 -1
- package/plugins/steve/steve-pagination-utils.ts +85 -15
- package/rancher-components/Banner/Banner.vue +12 -0
- package/rancher-components/Form/Checkbox/Checkbox.vue +27 -5
- package/rancher-components/Form/Radio/RadioButton.vue +0 -6
- package/rancher-components/Form/Radio/RadioGroup.vue +5 -1
- package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +2 -2
- package/scripts/test-plugins-build.sh +21 -6
- package/scripts/typegen.sh +1 -0
- package/store/index.js +16 -0
- package/store/type-map.utils.ts +14 -1
- package/types/shell/index.d.ts +467 -418
- package/types/store/vuex.d.ts +1 -1
- package/types/vue-shim.d.ts +2 -8
- package/utils/cluster.js +2 -2
- package/utils/string.js +6 -0
- package/vue.config.js +3 -4
package/config/product/apps.js
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
|
|
11
11
|
import { CATALOG } from '@shell/config/types';
|
|
12
12
|
import { DSL } from '@shell/store/type-map';
|
|
13
|
+
import { STEVE_AGE_COL, STEVE_NAMESPACE_COL, STEVE_NAME_COL, STEVE_STATE_COL } from '@shell/config/pagination-table-headers';
|
|
13
14
|
|
|
14
15
|
export const NAME = 'apps';
|
|
15
16
|
|
|
@@ -75,41 +76,73 @@ export function init(store) {
|
|
|
75
76
|
dashIfEmpty: true,
|
|
76
77
|
};
|
|
77
78
|
|
|
78
|
-
headers(CATALOG.APP,
|
|
79
|
+
headers(CATALOG.APP,
|
|
80
|
+
[STATE, NAME_COL, NAMESPACE, CHART, CHART_UPGRADE, APP_SUMMARY, AGE],
|
|
81
|
+
[STEVE_STATE_COL, STEVE_NAME_COL, STEVE_NAMESPACE_COL, {
|
|
82
|
+
...CHART,
|
|
83
|
+
sort: ['spec.chart.metadata.name'],
|
|
84
|
+
search: ['spec.chart.metadata.name'],
|
|
85
|
+
}, {
|
|
86
|
+
...CHART_UPGRADE,
|
|
87
|
+
sort: false,
|
|
88
|
+
search: false,
|
|
89
|
+
},
|
|
90
|
+
APP_SUMMARY,
|
|
91
|
+
STEVE_AGE_COL]
|
|
92
|
+
);
|
|
79
93
|
headers(CATALOG.REPO, [STATE, NAME_COL, NAMESPACE, repoType, repoUrl, repoBranch, AGE]);
|
|
80
|
-
headers(CATALOG.CLUSTER_REPO,
|
|
94
|
+
headers(CATALOG.CLUSTER_REPO,
|
|
95
|
+
[STATE, NAME_COL, repoType, repoUrl, repoBranch, AGE],
|
|
96
|
+
[STEVE_STATE_COL, STEVE_NAME_COL, {
|
|
97
|
+
...repoType,
|
|
98
|
+
sort: false,
|
|
99
|
+
search: false,
|
|
100
|
+
}, {
|
|
101
|
+
...repoUrl,
|
|
102
|
+
sort: false,
|
|
103
|
+
search: false,
|
|
104
|
+
},
|
|
105
|
+
repoBranch]
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
const opAction = {
|
|
109
|
+
name: 'action',
|
|
110
|
+
label: 'Action',
|
|
111
|
+
sort: 'status.action',
|
|
112
|
+
value: 'status.action',
|
|
113
|
+
labelKey: 'catalog.operation.tableHeaders.action',
|
|
114
|
+
};
|
|
115
|
+
const opReleaseNs = {
|
|
116
|
+
name: 'releaseNamespace',
|
|
117
|
+
label: 'Tgt Namespace',
|
|
118
|
+
sort: 'status.namespace',
|
|
119
|
+
value: 'status.namespace',
|
|
120
|
+
labelKey: 'catalog.operation.tableHeaders.releaseNamespace',
|
|
121
|
+
};
|
|
122
|
+
const opReleaseName = {
|
|
123
|
+
name: 'releaseName',
|
|
124
|
+
label: 'Tgt Release',
|
|
125
|
+
sort: 'status.releaseName',
|
|
126
|
+
value: 'status.releaseName',
|
|
127
|
+
labelKey: 'catalog.operation.tableHeaders.releaseName',
|
|
128
|
+
};
|
|
129
|
+
|
|
81
130
|
headers(CATALOG.OPERATION, [
|
|
82
131
|
STATE,
|
|
83
132
|
NAME_COL,
|
|
84
133
|
NAMESPACE,
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
sort: 'status.action',
|
|
89
|
-
value: 'status.action',
|
|
90
|
-
labelKey: 'catalog.operation.tableHeaders.action',
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
name: 'releaseNamespace',
|
|
94
|
-
label: 'Tgt Namespace',
|
|
95
|
-
sort: 'status.namespace',
|
|
96
|
-
value: 'status.namespace',
|
|
97
|
-
labelKey: 'catalog.operation.tableHeaders.releaseNamespace',
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
name: 'releaseName',
|
|
101
|
-
label: 'Tgt Release',
|
|
102
|
-
sort: 'status.releaseName',
|
|
103
|
-
value: 'status.releaseName',
|
|
104
|
-
labelKey: 'catalog.operation.tableHeaders.releaseName',
|
|
105
|
-
},
|
|
134
|
+
opAction,
|
|
135
|
+
opReleaseNs,
|
|
136
|
+
opReleaseName,
|
|
106
137
|
AGE
|
|
138
|
+
],
|
|
139
|
+
[
|
|
140
|
+
STEVE_STATE_COL,
|
|
141
|
+
STEVE_NAME_COL,
|
|
142
|
+
STEVE_NAMESPACE_COL,
|
|
143
|
+
opAction,
|
|
144
|
+
opReleaseNs,
|
|
145
|
+
opReleaseName,
|
|
146
|
+
STEVE_AGE_COL
|
|
107
147
|
]);
|
|
108
148
|
}
|
|
109
|
-
|
|
110
|
-
// name: 'cpu',
|
|
111
|
-
// labelKey: 'tableHeaders.cpu',
|
|
112
|
-
// sort: 'cpu',
|
|
113
|
-
// value: 'cpuUsagePercentage',
|
|
114
|
-
// formatter: 'PercentageBar'
|
|
115
|
-
// };
|
|
@@ -19,18 +19,19 @@ import {
|
|
|
19
19
|
USER_ID, USERNAME, USER_DISPLAY_NAME, USER_PROVIDER, USER_LAST_LOGIN, USER_DISABLED_IN, USER_DELETED_IN, WORKLOAD_ENDPOINTS, STORAGE_CLASS_DEFAULT,
|
|
20
20
|
STORAGE_CLASS_PROVISIONER, PERSISTENT_VOLUME_SOURCE,
|
|
21
21
|
HPA_REFERENCE, MIN_REPLICA, MAX_REPLICA, CURRENT_REPLICA,
|
|
22
|
-
ACCESS_KEY, DESCRIPTION, EXPIRES, EXPIRY_STATE, SUB_TYPE, AGE_NORMAN, SCOPE_NORMAN, PERSISTENT_VOLUME_CLAIM, RECLAIM_POLICY, PV_REASON, WORKLOAD_HEALTH_SCALE, POD_RESTARTS,
|
|
22
|
+
ACCESS_KEY, DESCRIPTION, EXPIRES, EXPIRY_STATE, LAST_USED, SUB_TYPE, AGE_NORMAN, SCOPE_NORMAN, PERSISTENT_VOLUME_CLAIM, RECLAIM_POLICY, PV_REASON, WORKLOAD_HEALTH_SCALE, POD_RESTARTS,
|
|
23
23
|
DURATION, MESSAGE, REASON, LAST_SEEN_TIME, EVENT_TYPE, OBJECT, ROLE, ROLES, VERSION, INTERNAL_EXTERNAL_IP, KUBE_NODE_OS, CPU, RAM, SECRET_DATA
|
|
24
24
|
} from '@shell/config/table-headers';
|
|
25
25
|
|
|
26
26
|
import { DSL } from '@shell/store/type-map';
|
|
27
27
|
import {
|
|
28
|
-
STEVE_AGE_COL, STEVE_LIST_GROUPS, STEVE_NAMESPACE_COL, STEVE_NAME_COL, STEVE_STATE_COL
|
|
28
|
+
STEVE_AGE_COL, STEVE_EVENT_OBJECT, STEVE_LIST_GROUPS, STEVE_NAMESPACE_COL, STEVE_NAME_COL, STEVE_STATE_COL
|
|
29
29
|
} from '@shell/config/pagination-table-headers';
|
|
30
30
|
|
|
31
31
|
import { COLUMN_BREAKPOINTS } from '@shell/types/store/type-map';
|
|
32
32
|
import { STEVE_CACHE } from '@shell/store/features';
|
|
33
33
|
import { configureConditionalDepaginate } from '@shell/store/type-map.utils';
|
|
34
|
+
import { CATTLE_PUBLIC_ENDPOINTS } from '@shell/config/labels-annotations';
|
|
34
35
|
|
|
35
36
|
export const NAME = 'explorer';
|
|
36
37
|
|
|
@@ -81,6 +82,7 @@ export function init(store) {
|
|
|
81
82
|
POD_DISRUPTION_BUDGET,
|
|
82
83
|
RESOURCE_QUOTA,
|
|
83
84
|
], 'policy');
|
|
85
|
+
|
|
84
86
|
basicType([
|
|
85
87
|
SERVICE,
|
|
86
88
|
INGRESS,
|
|
@@ -216,7 +218,25 @@ export function init(store) {
|
|
|
216
218
|
*/
|
|
217
219
|
configureType(MANAGEMENT.PSA, { localOnly: true });
|
|
218
220
|
|
|
219
|
-
headers(PV,
|
|
221
|
+
headers(PV,
|
|
222
|
+
[STATE, NAME_COL, RECLAIM_POLICY, PERSISTENT_VOLUME_CLAIM, PERSISTENT_VOLUME_SOURCE, PV_REASON, AGE],
|
|
223
|
+
[
|
|
224
|
+
STEVE_STATE_COL,
|
|
225
|
+
STEVE_NAME_COL,
|
|
226
|
+
RECLAIM_POLICY,
|
|
227
|
+
{
|
|
228
|
+
...PERSISTENT_VOLUME_CLAIM,
|
|
229
|
+
sort: ['metadata.fields.5'],
|
|
230
|
+
search: ['metadata.fields.5'],
|
|
231
|
+
}, {
|
|
232
|
+
...PERSISTENT_VOLUME_SOURCE,
|
|
233
|
+
sort: false,
|
|
234
|
+
search: false,
|
|
235
|
+
},
|
|
236
|
+
PV_REASON,
|
|
237
|
+
STEVE_AGE_COL,
|
|
238
|
+
]
|
|
239
|
+
);
|
|
220
240
|
|
|
221
241
|
headers(CONFIG_MAP,
|
|
222
242
|
[NAME_COL, NAMESPACE_COL, KEYS, AGE],
|
|
@@ -254,18 +274,142 @@ export function init(store) {
|
|
|
254
274
|
STEVE_AGE_COL
|
|
255
275
|
]);
|
|
256
276
|
|
|
257
|
-
headers(INGRESS,
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
277
|
+
headers(INGRESS,
|
|
278
|
+
[STATE, NAME_COL, NAMESPACE_COL, INGRESS_TARGET, INGRESS_DEFAULT_BACKEND, INGRESS_CLASS, AGE],
|
|
279
|
+
[
|
|
280
|
+
STEVE_STATE_COL,
|
|
281
|
+
STEVE_NAME_COL,
|
|
282
|
+
STEVE_NAMESPACE_COL,
|
|
283
|
+
{
|
|
284
|
+
...INGRESS_TARGET,
|
|
285
|
+
sort: 'spec.rules[0].host', // Pending API support https://github.com/rancher/rancher/issues/48473 (index fields)
|
|
286
|
+
search: false, // This is broken in normal world, so disable here
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
...INGRESS_DEFAULT_BACKEND,
|
|
290
|
+
sort: false,
|
|
291
|
+
search: false,
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
...INGRESS_CLASS,
|
|
295
|
+
sort: 'spec.ingressClassName',
|
|
296
|
+
search: 'spec.ingressClassName', // Pending API support (blocked https://github.com/rancher/rancher/issues/48473 (index fields)
|
|
297
|
+
},
|
|
298
|
+
STEVE_AGE_COL
|
|
299
|
+
]
|
|
300
|
+
);
|
|
301
|
+
|
|
302
|
+
headers(SERVICE,
|
|
303
|
+
[STATE, NAME_COL, NAMESPACE_COL, TARGET_PORT, SELECTOR, SPEC_TYPE, AGE],
|
|
304
|
+
[
|
|
305
|
+
STEVE_STATE_COL,
|
|
306
|
+
STEVE_NAME_COL,
|
|
307
|
+
STEVE_NAMESPACE_COL,
|
|
308
|
+
TARGET_PORT,
|
|
309
|
+
{
|
|
310
|
+
// Selector is an object. This is broken in non-SSP world anyway (won't sort on object, filtering on `$[x][y]` paths are broken )
|
|
311
|
+
...SELECTOR,
|
|
312
|
+
sort: false,
|
|
313
|
+
search: false,
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
...SPEC_TYPE,
|
|
317
|
+
sort: false, // ['spec.type', 'spec.clusterIP'] Pending API support (blocked https://github.com/rancher/rancher/issues/48473 (index fields)
|
|
318
|
+
search: 'spec.type',
|
|
319
|
+
},
|
|
320
|
+
STEVE_AGE_COL
|
|
321
|
+
]
|
|
322
|
+
);
|
|
323
|
+
|
|
324
|
+
const eventLastSeenTime = {
|
|
325
|
+
...LAST_SEEN_TIME,
|
|
326
|
+
defaultSort: true,
|
|
327
|
+
};
|
|
328
|
+
|
|
329
|
+
headers(EVENT,
|
|
330
|
+
[STATE, eventLastSeenTime, EVENT_TYPE, REASON, OBJECT, 'Subobject', 'Source', MESSAGE, 'First Seen', 'Count', NAME_COL, NAMESPACE_COL],
|
|
331
|
+
[
|
|
332
|
+
STEVE_STATE_COL, {
|
|
333
|
+
...eventLastSeenTime,
|
|
334
|
+
value: 'metadata.fields.0',
|
|
335
|
+
sort: 'metadata.fields.0',
|
|
336
|
+
}, {
|
|
337
|
+
...EVENT_TYPE,
|
|
338
|
+
value: '_type',
|
|
339
|
+
sort: '_type',
|
|
340
|
+
},
|
|
341
|
+
REASON,
|
|
342
|
+
STEVE_EVENT_OBJECT,
|
|
343
|
+
'Subobject',
|
|
344
|
+
'Source',
|
|
345
|
+
MESSAGE,
|
|
346
|
+
'First Seen',
|
|
347
|
+
'Count',
|
|
348
|
+
STEVE_NAME_COL,
|
|
349
|
+
STEVE_NAMESPACE_COL,
|
|
350
|
+
]
|
|
351
|
+
);
|
|
352
|
+
headers(HPA,
|
|
353
|
+
[STATE, NAME_COL, NAMESPACE_COL, HPA_REFERENCE, MIN_REPLICA, MAX_REPLICA, CURRENT_REPLICA, AGE],
|
|
354
|
+
[
|
|
355
|
+
STEVE_STATE_COL,
|
|
356
|
+
STEVE_NAME_COL,
|
|
357
|
+
STEVE_NAMESPACE_COL,
|
|
358
|
+
HPA_REFERENCE, // Pending API support https://github.com/rancher/rancher/issues/48479 (hpa filtering)
|
|
359
|
+
MIN_REPLICA, // Pending API support https://github.com/rancher/rancher/issues/48479 (hpa filtering)
|
|
360
|
+
MAX_REPLICA, // Pending API support https://github.com/rancher/rancher/issues/48479 (hpa filtering)
|
|
361
|
+
CURRENT_REPLICA, // Pending API support https://github.com/rancher/rancher/issues/48479 (hpa filtering)
|
|
362
|
+
STEVE_AGE_COL
|
|
363
|
+
]
|
|
364
|
+
);
|
|
365
|
+
|
|
366
|
+
const STEVE_WORKLOAD_ENDPOINTS = {
|
|
367
|
+
...WORKLOAD_ENDPOINTS,
|
|
368
|
+
sort: [`metadata.annotations[${ CATTLE_PUBLIC_ENDPOINTS }]`],
|
|
369
|
+
search: [`metadata.annotations[${ CATTLE_PUBLIC_ENDPOINTS }]`],
|
|
370
|
+
};
|
|
371
|
+
|
|
372
|
+
const createSteveWorkloadImageCol = (resourceFieldPos) => ({
|
|
373
|
+
...WORKLOAD_IMAGES,
|
|
374
|
+
sort: `metadata.fields.${ resourceFieldPos }`,
|
|
375
|
+
search: `metadata.fields.${ resourceFieldPos }`,
|
|
376
|
+
});
|
|
377
|
+
|
|
261
378
|
headers(WORKLOAD, [STATE, NAME_COL, NAMESPACE_COL, TYPE, WORKLOAD_IMAGES, WORKLOAD_ENDPOINTS, POD_RESTARTS, AGE, WORKLOAD_HEALTH_SCALE]);
|
|
262
|
-
headers(WORKLOAD_TYPES.DEPLOYMENT,
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
headers(WORKLOAD_TYPES.
|
|
267
|
-
|
|
268
|
-
|
|
379
|
+
headers(WORKLOAD_TYPES.DEPLOYMENT,
|
|
380
|
+
[STATE, NAME_COL, NAMESPACE_COL, WORKLOAD_IMAGES, WORKLOAD_ENDPOINTS, 'Ready', 'Up-to-date', 'Available', POD_RESTARTS, AGE, WORKLOAD_HEALTH_SCALE],
|
|
381
|
+
[STEVE_STATE_COL, STEVE_NAME_COL, STEVE_NAMESPACE_COL, createSteveWorkloadImageCol(6), STEVE_WORKLOAD_ENDPOINTS, 'Ready', 'Up-to-date', 'Available', STEVE_AGE_COL],
|
|
382
|
+
);
|
|
383
|
+
headers(WORKLOAD_TYPES.DAEMON_SET,
|
|
384
|
+
[STATE, NAME_COL, NAMESPACE_COL, WORKLOAD_IMAGES, WORKLOAD_ENDPOINTS, 'Ready', 'Current', 'Desired', POD_RESTARTS, AGE, WORKLOAD_HEALTH_SCALE],
|
|
385
|
+
[STEVE_STATE_COL, STEVE_NAME_COL, STEVE_NAMESPACE_COL, createSteveWorkloadImageCol(9), STEVE_WORKLOAD_ENDPOINTS, 'Ready', 'Current', 'Desired', STEVE_AGE_COL]
|
|
386
|
+
);
|
|
387
|
+
headers(WORKLOAD_TYPES.REPLICA_SET,
|
|
388
|
+
[STATE, NAME_COL, NAMESPACE_COL, WORKLOAD_IMAGES, WORKLOAD_ENDPOINTS, 'Ready', 'Current', 'Desired', POD_RESTARTS, AGE, WORKLOAD_HEALTH_SCALE],
|
|
389
|
+
[STEVE_STATE_COL, STEVE_NAME_COL, STEVE_NAMESPACE_COL, createSteveWorkloadImageCol(6), STEVE_WORKLOAD_ENDPOINTS, 'Ready', 'Current', 'Desired', STEVE_AGE_COL],
|
|
390
|
+
);
|
|
391
|
+
headers(WORKLOAD_TYPES.STATEFUL_SET,
|
|
392
|
+
[STATE, NAME_COL, NAMESPACE_COL, WORKLOAD_IMAGES, WORKLOAD_ENDPOINTS, 'Ready', POD_RESTARTS, AGE, WORKLOAD_HEALTH_SCALE],
|
|
393
|
+
[STEVE_STATE_COL, STEVE_NAME_COL, STEVE_NAMESPACE_COL, createSteveWorkloadImageCol(4), STEVE_WORKLOAD_ENDPOINTS, 'Ready', STEVE_AGE_COL],
|
|
394
|
+
);
|
|
395
|
+
headers(WORKLOAD_TYPES.JOB,
|
|
396
|
+
[STATE, NAME_COL, NAMESPACE_COL, WORKLOAD_IMAGES, WORKLOAD_ENDPOINTS, 'Completions', DURATION, POD_RESTARTS, AGE, WORKLOAD_HEALTH_SCALE],
|
|
397
|
+
[STEVE_STATE_COL, STEVE_NAME_COL, STEVE_NAMESPACE_COL, createSteveWorkloadImageCol(6), STEVE_WORKLOAD_ENDPOINTS, 'Completions', {
|
|
398
|
+
...DURATION,
|
|
399
|
+
value: 'metadata.fields.3',
|
|
400
|
+
sort: false,
|
|
401
|
+
search: 'metadata.fields.3',
|
|
402
|
+
formatter: undefined, // Now that sort/search is remote we're not doing weird things with start time (see `duration` in model)
|
|
403
|
+
}, STEVE_AGE_COL],
|
|
404
|
+
);
|
|
405
|
+
headers(WORKLOAD_TYPES.CRON_JOB,
|
|
406
|
+
[STATE, NAME_COL, NAMESPACE_COL, WORKLOAD_IMAGES, WORKLOAD_ENDPOINTS, 'Schedule', 'Last Schedule', POD_RESTARTS, AGE, WORKLOAD_HEALTH_SCALE],
|
|
407
|
+
[STEVE_STATE_COL, STEVE_NAME_COL, STEVE_NAMESPACE_COL, createSteveWorkloadImageCol(8), STEVE_WORKLOAD_ENDPOINTS, 'Schedule', 'Last Schedule', STEVE_AGE_COL]
|
|
408
|
+
);
|
|
409
|
+
headers(WORKLOAD_TYPES.REPLICATION_CONTROLLER,
|
|
410
|
+
[STATE, NAME_COL, NAMESPACE_COL, WORKLOAD_IMAGES, WORKLOAD_ENDPOINTS, 'Ready', 'Current', 'Desired', POD_RESTARTS, AGE, WORKLOAD_HEALTH_SCALE],
|
|
411
|
+
[STEVE_STATE_COL, STEVE_NAME_COL, STEVE_NAMESPACE_COL, createSteveWorkloadImageCol(6), STEVE_WORKLOAD_ENDPOINTS, 'Ready', 'Current', 'Desired', STEVE_AGE_COL],
|
|
412
|
+
);
|
|
269
413
|
|
|
270
414
|
headers(POD,
|
|
271
415
|
[STATE, NAME_COL, NAMESPACE_COL, POD_IMAGES, 'Ready', 'Restarts', 'IP', NODE_COL, AGE],
|
|
@@ -281,7 +425,8 @@ export function init(store) {
|
|
|
281
425
|
search: 'spec.nodeName'
|
|
282
426
|
},
|
|
283
427
|
STEVE_AGE_COL
|
|
284
|
-
]
|
|
428
|
+
]
|
|
429
|
+
);
|
|
285
430
|
|
|
286
431
|
headers(NODE,
|
|
287
432
|
[
|
|
@@ -341,13 +486,32 @@ export function init(store) {
|
|
|
341
486
|
search: false,
|
|
342
487
|
},
|
|
343
488
|
STEVE_AGE_COL
|
|
344
|
-
]
|
|
489
|
+
]
|
|
490
|
+
);
|
|
345
491
|
|
|
346
492
|
headers(MANAGEMENT.PSA, [STATE, NAME_COL, {
|
|
347
493
|
...DESCRIPTION,
|
|
348
494
|
width: undefined
|
|
349
495
|
}, AGE]);
|
|
350
|
-
|
|
496
|
+
|
|
497
|
+
headers(STORAGE_CLASS,
|
|
498
|
+
[STATE, NAME_COL, STORAGE_CLASS_PROVISIONER, STORAGE_CLASS_DEFAULT, AGE],
|
|
499
|
+
[
|
|
500
|
+
STEVE_STATE_COL,
|
|
501
|
+
STEVE_NAME_COL,
|
|
502
|
+
{
|
|
503
|
+
...STORAGE_CLASS_PROVISIONER,
|
|
504
|
+
sort: ['provisioner'],
|
|
505
|
+
search: ['provisioner']
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
...STORAGE_CLASS_DEFAULT,
|
|
509
|
+
sort: false, // [`metadata.annotations[${ STORAGE.DEFAULT_STORAGE_CLASS }]`], // Pending API Support - https://github.com/rancher/rancher/issues/48453
|
|
510
|
+
search: false, // [`metadata.annotations[${ STORAGE.DEFAULT_STORAGE_CLASS }]`], // Pending API Support - https://github.com/rancher/rancher/issues/48453
|
|
511
|
+
},
|
|
512
|
+
STEVE_AGE_COL
|
|
513
|
+
]
|
|
514
|
+
);
|
|
351
515
|
|
|
352
516
|
configureType(MANAGEMENT.CLUSTER_ROLE_TEMPLATE_BINDING, {
|
|
353
517
|
listGroups: [
|
|
@@ -378,6 +542,7 @@ export function init(store) {
|
|
|
378
542
|
ACCESS_KEY,
|
|
379
543
|
DESCRIPTION,
|
|
380
544
|
SCOPE_NORMAN,
|
|
545
|
+
LAST_USED,
|
|
381
546
|
EXPIRES,
|
|
382
547
|
AGE_NORMAN
|
|
383
548
|
]);
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
RESTART,
|
|
7
7
|
NAME_UNLINKED,
|
|
8
8
|
} from '@shell/config/table-headers';
|
|
9
|
+
import { getVendor } from '@shell/config/private-label';
|
|
9
10
|
|
|
10
11
|
export const NAME = 'settings';
|
|
11
12
|
|
|
@@ -142,11 +143,18 @@ export function init(store) {
|
|
|
142
143
|
canYaml: true,
|
|
143
144
|
});
|
|
144
145
|
|
|
146
|
+
// Change the restart header to 'Restart <VENDOR>' so that it is clearer what is being restarted
|
|
147
|
+
const t = store.getters['i18n/t'];
|
|
148
|
+
|
|
145
149
|
headers(MANAGEMENT.FEATURE, [
|
|
146
150
|
STATE,
|
|
147
151
|
NAME_UNLINKED,
|
|
148
152
|
FEATURE_DESCRIPTION,
|
|
149
|
-
|
|
153
|
+
{
|
|
154
|
+
...RESTART,
|
|
155
|
+
labelKey: undefined,
|
|
156
|
+
label: t('tableHeaders.restartSystem', { vendor: getVendor() })
|
|
157
|
+
}
|
|
150
158
|
]);
|
|
151
159
|
|
|
152
160
|
hideBulkActions(MANAGEMENT.FEATURE, true);
|
package/config/router/routes.js
CHANGED
package/config/settings.ts
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
// Settings
|
|
2
2
|
import { GC_DEFAULTS, GC_PREFERENCES } from '@shell/utils/gc/gc-types';
|
|
3
3
|
import { PaginationSettings } from '@shell/types/resources/settings';
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
CAPI, MANAGEMENT, EVENT, CATALOG, HPA, INGRESS, SERVICE,
|
|
6
|
+
CONFIG_MAP,
|
|
7
|
+
SECRET,
|
|
8
|
+
POD, NODE,
|
|
9
|
+
STORAGE_CLASS,
|
|
10
|
+
PVC,
|
|
11
|
+
PV,
|
|
12
|
+
WORKLOAD_TYPES
|
|
13
|
+
} from '@shell/config/types';
|
|
5
14
|
|
|
6
15
|
interface GlobalSettingRuleset {
|
|
7
16
|
name: string,
|
|
@@ -250,7 +259,16 @@ export const DEFAULT_PERF_SETTING: PerfSettings = {
|
|
|
250
259
|
resources: {
|
|
251
260
|
enableAll: false,
|
|
252
261
|
enableSome: {
|
|
253
|
-
|
|
262
|
+
// if a resource list is shown by a custom resource list component or has specific list headers then it's not generically shown
|
|
263
|
+
// and must be included here.
|
|
264
|
+
enabled: [
|
|
265
|
+
NODE, EVENT,
|
|
266
|
+
WORKLOAD_TYPES.CRON_JOB, WORKLOAD_TYPES.DAEMON_SET, WORKLOAD_TYPES.DEPLOYMENT, WORKLOAD_TYPES.JOB, WORKLOAD_TYPES.STATEFUL_SET, POD,
|
|
267
|
+
CATALOG.APP, CATALOG.CLUSTER_REPO, CATALOG.OPERATION,
|
|
268
|
+
HPA, INGRESS, SERVICE,
|
|
269
|
+
PV, CONFIG_MAP, STORAGE_CLASS, PVC, SECRET,
|
|
270
|
+
WORKLOAD_TYPES.REPLICA_SET, WORKLOAD_TYPES.REPLICATION_CONTROLLER
|
|
271
|
+
],
|
|
254
272
|
generic: true,
|
|
255
273
|
}
|
|
256
274
|
}
|
package/config/table-headers.js
CHANGED
|
@@ -82,7 +82,7 @@ export const EFFECT = {
|
|
|
82
82
|
export const STORAGE_CLASS_PROVISIONER = {
|
|
83
83
|
name: 'storage_class_provisioner',
|
|
84
84
|
labelKey: 'tableHeaders.storage_class_provisioner',
|
|
85
|
-
value: '
|
|
85
|
+
value: 'provisionerListDisplay',
|
|
86
86
|
sort: ['provisioner'],
|
|
87
87
|
};
|
|
88
88
|
|
|
@@ -94,6 +94,9 @@ export const STORAGE_CLASS_DEFAULT = {
|
|
|
94
94
|
formatter: 'Checked',
|
|
95
95
|
};
|
|
96
96
|
|
|
97
|
+
/**
|
|
98
|
+
* spec.csi.driver OR spec[known driver type]
|
|
99
|
+
*/
|
|
97
100
|
export const PERSISTENT_VOLUME_SOURCE = {
|
|
98
101
|
name: 'persistent_volume_source',
|
|
99
102
|
labelKey: 'tableHeaders.persistentVolumeSource',
|
|
@@ -101,13 +104,16 @@ export const PERSISTENT_VOLUME_SOURCE = {
|
|
|
101
104
|
sort: ['provisioner'],
|
|
102
105
|
};
|
|
103
106
|
|
|
107
|
+
/**
|
|
108
|
+
* Link to the PVC associated with PV
|
|
109
|
+
*/
|
|
104
110
|
export const PERSISTENT_VOLUME_CLAIM = {
|
|
105
111
|
name: 'persistent-volume-claim',
|
|
106
112
|
labelKey: 'tableHeaders.persistentVolumeClaim',
|
|
107
|
-
sort: ['
|
|
113
|
+
sort: ['claimName'],
|
|
108
114
|
value: 'claimName',
|
|
109
115
|
formatter: 'LinkDetail',
|
|
110
|
-
formatterOpts: { reference: 'claim.detailLocation' }
|
|
116
|
+
formatterOpts: { reference: 'claim.detailLocation' }
|
|
111
117
|
};
|
|
112
118
|
|
|
113
119
|
export const OUTPUT = {
|
|
@@ -320,15 +326,6 @@ export const POD_RESTARTS = {
|
|
|
320
326
|
liveUpdates: true
|
|
321
327
|
};
|
|
322
328
|
|
|
323
|
-
export const ENDPOINTS = {
|
|
324
|
-
name: 'endpoint',
|
|
325
|
-
labelKey: 'tableHeaders.endpoints',
|
|
326
|
-
value: 'status.endpoints',
|
|
327
|
-
formatter: 'Endpoints',
|
|
328
|
-
width: 60,
|
|
329
|
-
align: 'center',
|
|
330
|
-
};
|
|
331
|
-
|
|
332
329
|
export const SCALE = {
|
|
333
330
|
name: 'scale',
|
|
334
331
|
labelKey: 'tableHeaders.scale',
|
|
@@ -657,8 +654,8 @@ export const TARGET_PORT = {
|
|
|
657
654
|
formatter: 'ServiceTargets',
|
|
658
655
|
labelKey: 'tableHeaders.targetPort',
|
|
659
656
|
name: 'targetPort',
|
|
660
|
-
sort:
|
|
661
|
-
value:
|
|
657
|
+
sort: false,
|
|
658
|
+
value: false,
|
|
662
659
|
};
|
|
663
660
|
|
|
664
661
|
export const SELECTOR = {
|
|
@@ -963,13 +960,24 @@ export const EXPIRES = {
|
|
|
963
960
|
formatter: 'LiveExpiryDate'
|
|
964
961
|
};
|
|
965
962
|
|
|
963
|
+
export const LAST_USED = {
|
|
964
|
+
name: 'lastUsed',
|
|
965
|
+
value: 'lastUsedAt',
|
|
966
|
+
labelKey: 'tableHeaders.lastUsed',
|
|
967
|
+
align: 'left',
|
|
968
|
+
sort: ['lastUsedAt'],
|
|
969
|
+
width: 200,
|
|
970
|
+
formatter: 'LiveExpiryDate',
|
|
971
|
+
formatterOpts: { missingKey: 'generic.unknown' },
|
|
972
|
+
};
|
|
973
|
+
|
|
966
974
|
export const RESTART = {
|
|
967
975
|
name: 'restart',
|
|
968
976
|
labelKey: 'tableHeaders.restart',
|
|
969
977
|
value: 'restartRequired',
|
|
970
978
|
sort: ['restartRequired', 'nameSort'],
|
|
971
979
|
formatter: 'Checked',
|
|
972
|
-
width:
|
|
980
|
+
width: 125,
|
|
973
981
|
align: 'center'
|
|
974
982
|
};
|
|
975
983
|
|
package/config/types.js
CHANGED
|
@@ -33,12 +33,21 @@ describe('view: fleet.cattle.io.gitrepo should', () => {
|
|
|
33
33
|
global: { mocks }
|
|
34
34
|
});
|
|
35
35
|
|
|
36
|
-
it('should have self-healing checkbox and
|
|
36
|
+
it('should have self-healing checkbox and tooltip', () => {
|
|
37
37
|
const correctDriftCheckbox = wrapper.find('[data-testid="GitRepo-correctDrift-checkbox"]');
|
|
38
|
-
const
|
|
38
|
+
const tooltip = wrapper.find('[data-testid="GitRepo-correctDrift-checkbox"]');
|
|
39
39
|
|
|
40
|
+
expect(tooltip.element.classList).toContain('v-popper--has-tooltip');
|
|
41
|
+
expect(correctDriftCheckbox.exists()).toBeTruthy();
|
|
42
|
+
expect(correctDriftCheckbox.attributes().value).toBeFalsy();
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('should have keep-resources checkbox and tooltip', () => {
|
|
46
|
+
const correctDriftCheckbox = wrapper.find('[data-testid="GitRepo-keepResources-checkbox"]');
|
|
47
|
+
const tooltip = wrapper.find('[data-testid="GitRepo-keepResources-checkbox"]');
|
|
48
|
+
|
|
49
|
+
expect(tooltip.element.classList).toContain('v-popper--has-tooltip');
|
|
40
50
|
expect(correctDriftCheckbox.exists()).toBeTruthy();
|
|
41
|
-
expect(correctDriftBanner.exists()).toBeTruthy();
|
|
42
51
|
expect(correctDriftCheckbox.attributes().value).toBeFalsy();
|
|
43
52
|
});
|
|
44
53
|
|