@rancher/shell 3.0.0 → 3.0.1-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/brand/harvester/favicon.png +0 -0
- package/assets/brand/harvester/metadata.json +3 -0
- package/assets/images/pl/harvester.svg +1 -0
- package/assets/translations/en-us.yaml +25 -4
- package/assets/translations/zh-hans.yaml +1 -1
- package/components/BrandImage.vue +5 -1
- package/components/CopyToClipboardText.vue +2 -0
- package/components/CruResourceFooter.vue +1 -0
- package/components/DetailTop.vue +1 -1
- package/components/ExplorerMembers.vue +5 -1
- package/components/ExplorerProjectsNamespaces.vue +39 -15
- package/components/HardwareResourceGauge.vue +12 -2
- package/components/InputOrDisplay.vue +6 -2
- package/components/LandingPagePreference.vue +2 -2
- package/components/MessageLink.vue +1 -1
- package/components/ResourceDetail/Masthead.vue +22 -1
- package/components/ResourceDetail/index.vue +2 -8
- package/components/ResourceTable.vue +14 -6
- package/components/ResourceYaml.vue +1 -1
- package/components/SideNav.vue +1 -1
- package/components/TableDataUserIcon.vue +1 -1
- package/components/fleet/FleetRepos.vue +0 -7
- package/components/form/ArrayList.vue +5 -1
- package/components/form/ArrayListSelect.vue +5 -1
- package/components/form/KeyValue.vue +1 -1
- package/components/form/LabeledSelect.vue +26 -6
- package/components/form/Password.vue +7 -1
- package/components/form/UnitInput.vue +10 -1
- package/components/form/__tests__/UnitInput.test.ts +1 -0
- package/components/formatter/ClusterProvider.vue +3 -3
- package/components/formatter/ImagePercentageBar.vue +1 -1
- package/components/formatter/Si.vue +5 -1
- package/components/formatter/Translate.vue +1 -1
- package/components/nav/Header.vue +29 -5
- package/components/nav/NamespaceFilter.vue +5 -8
- package/components/nav/TopLevelMenu.vue +11 -11
- package/config/labels-annotations.js +2 -0
- package/config/table-headers.js +15 -0
- package/config/types.js +3 -0
- package/detail/fleet.cattle.io.bundle.vue +5 -68
- package/detail/fleet.cattle.io.gitrepo.vue +2 -1
- package/directives/clean-tooltip.js +4 -4
- package/edit/logging-flow/Match.vue +75 -42
- package/edit/logging-flow/index.vue +89 -10
- package/edit/logging.banzaicloud.io.output/index.vue +2 -2
- package/edit/management.cattle.io.project.vue +2 -2
- package/edit/namespace.vue +1 -1
- package/edit/provisioning.cattle.io.cluster/index.vue +2 -1
- package/edit/provisioning.cattle.io.cluster/rke2.vue +1 -3
- package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryMirrors.vue +1 -1
- package/list/harvesterhci.io.management.cluster.vue +244 -0
- package/list/namespace.vue +16 -4
- package/models/__tests__/management.cattle.io.cluster.test.ts +45 -3
- package/models/__tests__/provisioning.cattle.io.cluster.test.ts +0 -86
- package/models/fleet.cattle.io.bundle.js +3 -1
- package/models/fleet.cattle.io.gitrepo.js +43 -50
- package/models/k8s.cni.cncf.io.networkattachmentdefinition.js +88 -0
- package/models/management.cattle.io.cluster.js +26 -5
- package/models/management.cattle.io.setting.js +25 -0
- package/models/provisioning.cattle.io.cluster.js +5 -14
- package/models/storage.k8s.io.storageclass.js +15 -4
- package/package.json +3 -3
- package/pages/auth/login.vue +3 -2
- package/pages/auth/setup.vue +1 -1
- package/pages/c/_cluster/fleet/index.vue +2 -4
- package/pages/c/_cluster/settings/brand.vue +4 -1
- package/pages/prefs.vue +22 -10
- package/plugins/dashboard-store/resource-class.js +11 -3
- package/plugins/steve/steve-pagination-utils.ts +1 -1
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +7 -2
- package/store/features.js +1 -0
- package/store/i18n.js +5 -1
- package/store/prefs.js +8 -0
- package/types/resources/fleet.d.ts +40 -0
- package/types/shell/index.d.ts +428 -395
- package/utils/auth.js +1 -1
- package/utils/create-yaml.js +1 -1
- package/utils/favicon.js +2 -0
- package/utils/fleet.ts +159 -0
- package/utils/gc/gc.ts +1 -1
- package/utils/v-sphere.ts +31 -0
- package/utils/validators/cron-schedule.js +1 -1
- package/utils/validators/formRules/index.ts +1 -1
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 194.25619 159.08912"><defs><style>.cls-1{fill:#00a383;}.cls-2{fill:#fff;}</style></defs><rect class="cls-1" width="194.25619" height="159.08912" rx="20.56068"/><path class="cls-2" d="M180.4487,81.46673a4.97417,4.97417,0,0,0,.25287-.81463c.01635-.07209.0296-.14435.04284-.21759a4.98972,4.98972,0,0,0,0-1.78c-.01324-.07324-.02649-.14551-.04284-.21759a4.97458,4.97458,0,0,0-.25287-.81464c-.01587-.03815-.03748-.07269-.05432-.11035a4.9932,4.9932,0,0,0-.23017-.46741l-19.7666-34.2373a4.96949,4.96949,0,0,0-.28741-.42926c-.02527-.03491-.04535-.07251-.07154-.10681a4.97881,4.97881,0,0,0-.57611-.62305c-.05584-.05176-.11346-.10089-.17206-.15033a5.00763,5.00763,0,0,0-.71991-.51843l-.00305-.0022-.00274-.00122a5.00234,5.00234,0,0,0-.80945-.36469c-.07269-.02624-.14459-.05175-.2179-.0744a4.97937,4.97937,0,0,0-.82483-.18683c-.04693-.0061-.0935-.00457-.14044-.00927a4.98006,4.98006,0,0,0-.50464-.03351H116.53335a4.96842,4.96842,0,0,0-.504.03345c-.0476.00482-.09478.00329-.14233.00946a4.97566,4.97566,0,0,0-.82226.18627c-.07447.023-.14753.049-.22138.07563a5.00058,5.00058,0,0,0-.80719.36383l-.00281.00128-.00305.0022a5.00874,5.00874,0,0,0-.71991.51843c-.05859.04944-.11615.09845-.172.15027a4.97536,4.97536,0,0,0-.57635.62335c-.026.034-.04584.07123-.07086.10584a4.98409,4.98409,0,0,0-.2879.43L93.88046,74.54449H79.278l13.99317-24.2373h6.4956a5,5,0,0,0,0-10H90.38443a5.0003,5.0003,0,0,0-4.33008,2.5L67.73111,74.54449h-14.602l13.99316-24.2373h6.49561a5,5,0,0,0,0-10H64.2355a5.00031,5.00031,0,0,0-4.33008,2.5L41.58218,74.54449H26.9797l13.99359-24.2373H47.4689a5,5,0,0,0,0-10H38.08658a5.00029,5.00029,0,0,0-4.33008,2.5L13.98941,77.04449a4.98206,4.98206,0,0,0-.22925.46594c-.01715.0384-.03912.07349-.05536.11243a4.974,4.974,0,0,0-.25183.81128c-.01691.07422-.03058.1485-.04413.22388a4.99817,4.99817,0,0,0-.089.88305l-.00036.00342.00036.00342a4.99828,4.99828,0,0,0,.089.88306c.01355.07538.02722.14966.04413.22387a4.97371,4.97371,0,0,0,.25183.81128c.01624.03894.03821.074.05536.11243a4.98084,4.98084,0,0,0,.22925.46594L33.7565,116.28131a5.00031,5.00031,0,0,0,4.33008,2.5H47.4689a5,5,0,1,0,0-10H40.97329L26.97976,84.54449H41.58218l18.32324,31.73682a5.00033,5.00033,0,0,0,4.33008,2.5h9.38233a5,5,0,0,0,0-10H67.12222L53.12912,84.54449h14.602l18.32324,31.73682a5.00032,5.00032,0,0,0,4.33008,2.5h9.38232a5,5,0,0,0,0-10h-6.4956L79.278,84.54449H93.88052l18.32276,31.73682a4.97193,4.97193,0,0,0,.28759.42944c.02521.03479.04517.07233.07135.10657a4.98039,4.98039,0,0,0,.57605.62311c.05591.05188.11371.10095.17237.15051a5.00138,5.00138,0,0,0,.71966.51825l.00305.0022c.02063.0119.04254.01953.0633.03112a4.99593,4.99593,0,0,0,.52386.25788c.15222.06329.30756.11084.46283.15808.051.0155.09961.037.15119.0509a4.96725,4.96725,0,0,0,1.29394.17292l.01508-.001h39.51379l.01508.001a4.96725,4.96725,0,0,0,1.29394-.17292c.05158-.01391.10016-.0354.15119-.0509.15527-.04724.3106-.09479.46282-.15808a4.99511,4.99511,0,0,0,.52387-.25788c.02075-.01159.04266-.01922.06329-.03112l.00312-.0022a5.00713,5.00713,0,0,0,.71856-.51733c.05939-.05011.11774-.09986.17432-.15229a4.97862,4.97862,0,0,0,.57458-.6214c.027-.03546.04773-.07415.0738-.11023a4.98327,4.98327,0,0,0,.2857-.42663l19.7666-34.23682a4.99182,4.99182,0,0,0,.23017-.4674C180.41122,81.53943,180.43283,81.50488,180.4487,81.46673Zm-24.38111,22.31452L150.2941,93.78094l5.33294-9.23645h11.54688ZM105.42776,84.54449h11.54706l5.33289,9.23633-5.77417,10.00061ZM116.5336,55.307l5.77411,10.00031-5.33295,9.23718H105.4277Zm14.43432,33.47382-5.333-9.23633,5.333-9.2373h10.666l5.333,9.2373-5.333,9.23633Zm10.666-28.47363H130.9678l-5.77392-10h22.2135ZM130.96786,98.78082h10.666l5.77362,10.00049H125.19375ZM155.6271,74.54449l-5.333-9.2373,5.77343-10L167.174,74.54449Z"/></svg>
|
|
@@ -26,6 +26,7 @@ generic:
|
|
|
26
26
|
id: ID
|
|
27
27
|
ignored: Ignored
|
|
28
28
|
invalidCron: Invalid cron schedule
|
|
29
|
+
inProgress: In Progress
|
|
29
30
|
imagePullPolicy:
|
|
30
31
|
always: Always
|
|
31
32
|
ifNotPresent: IfNotPresent
|
|
@@ -111,6 +112,7 @@ generic:
|
|
|
111
112
|
=1 {Matches 1 of {total, number}: "{sample}"}
|
|
112
113
|
other {Matches {matched, number} of {total, number}, including "{sample}"}
|
|
113
114
|
}
|
|
115
|
+
basic: Basic
|
|
114
116
|
|
|
115
117
|
locale:
|
|
116
118
|
en-us: English
|
|
@@ -816,7 +818,7 @@ backupRestoreOperator:
|
|
|
816
818
|
encryption: Encryption
|
|
817
819
|
encryptionConfigName:
|
|
818
820
|
backuptip: 'Any secret in the <code>{ns}</code> namespace that has an <code>encryption-provider-config.yaml</code> key. <br/>The contents of this file are necessary to perform a restore from this backup, and are not stored by Rancher Backup.'
|
|
819
|
-
label: Encryption
|
|
821
|
+
label: Encryption Configuration Secret
|
|
820
822
|
options:
|
|
821
823
|
none: Store the contents of the backup unencrypted
|
|
822
824
|
secret: 'Encrypt backups using an <a target="_blank" rel="noopener noreferrer nofollow" href="https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#understanding-the-encryption-at-rest-configuration">Encryption Config Secret</a> (Recommended)'
|
|
@@ -1240,7 +1242,7 @@ cluster:
|
|
|
1240
1242
|
label: Google
|
|
1241
1243
|
rancher-vsphere:
|
|
1242
1244
|
label: vSphere
|
|
1243
|
-
note: '<b>Important:</b> Configure the vSphere Cloud Provider and Storage Provider options in the Add-on
|
|
1245
|
+
note: '<b>Important:</b> Configure the vSphere Cloud Provider and Storage Provider options in the Add-on Configuration tab.'
|
|
1244
1246
|
harvester:
|
|
1245
1247
|
label: Harvester
|
|
1246
1248
|
copyConfig: Copy KubeConfig to Clipboard
|
|
@@ -1967,7 +1969,7 @@ cluster:
|
|
|
1967
1969
|
pinganyunecs: Pinganyun ECS
|
|
1968
1970
|
pnap: phoenixNAP
|
|
1969
1971
|
rackspace: RackSpace
|
|
1970
|
-
rancherkubernetesengine:
|
|
1972
|
+
rancherkubernetesengine: RKE1
|
|
1971
1973
|
rke2: RKE2
|
|
1972
1974
|
rke: RKE1
|
|
1973
1975
|
rkeWindows: Windows (RKE1 only)
|
|
@@ -2126,6 +2128,7 @@ cluster:
|
|
|
2126
2128
|
tabs:
|
|
2127
2129
|
ace: Authorized Endpoint
|
|
2128
2130
|
addOnAdditionalManifest: Additional Manifest
|
|
2131
|
+
addons: Add-on Configuration
|
|
2129
2132
|
advanced: Advanced
|
|
2130
2133
|
agentEnv: Agent Environment Vars
|
|
2131
2134
|
basic: Basics
|
|
@@ -2159,6 +2162,7 @@ clusterIndexPage:
|
|
|
2159
2162
|
ram: Memory
|
|
2160
2163
|
used: Used
|
|
2161
2164
|
reserved: Reserved
|
|
2165
|
+
allocated: Allocated
|
|
2162
2166
|
units:
|
|
2163
2167
|
cores: |-
|
|
2164
2168
|
{count, plural,
|
|
@@ -2982,6 +2986,10 @@ labelSelect:
|
|
|
2982
2986
|
pagination:
|
|
2983
2987
|
counts: '{count} / {totalCount} items'
|
|
2984
2988
|
more: Load More...
|
|
2989
|
+
labeledSelect:
|
|
2990
|
+
startTyping: Start typing to define an item
|
|
2991
|
+
pressEnter: Press enter to add "{input}"
|
|
2992
|
+
|
|
2985
2993
|
landing:
|
|
2986
2994
|
clusters:
|
|
2987
2995
|
title: Clusters
|
|
@@ -3229,6 +3237,9 @@ logging:
|
|
|
3229
3237
|
certificate: Connection
|
|
3230
3238
|
labels: Labels
|
|
3231
3239
|
configuration: Configuration
|
|
3240
|
+
tips:
|
|
3241
|
+
singleProvider: This output is configured with multiple providers. We currently only support a single provider per output. You can view or edit the YAML.
|
|
3242
|
+
multipleProviders: This output is configured with providers we do not support yet. You can view or edit the YAML.
|
|
3232
3243
|
outputProviders:
|
|
3233
3244
|
elasticsearch: Elasticsearch
|
|
3234
3245
|
opensearch: OpenSearch
|
|
@@ -3714,6 +3725,9 @@ namespace:
|
|
|
3714
3725
|
selectNamespace: Select Namespace
|
|
3715
3726
|
createNamespace: Create a new Namespace
|
|
3716
3727
|
selectOrCreate: Select or Create a Namespace
|
|
3728
|
+
snapshots:
|
|
3729
|
+
label: Snapshots
|
|
3730
|
+
totalSnapshotSize: Total Snapshot Size
|
|
3717
3731
|
resourceStates:
|
|
3718
3732
|
success: 'Active'
|
|
3719
3733
|
info: 'Transitioning'
|
|
@@ -4016,6 +4030,7 @@ persistentVolume:
|
|
|
4016
4030
|
file-csi-azure-com: Azure File (CSI)
|
|
4017
4031
|
driver-longhorn-io: Longhorn (CSI)
|
|
4018
4032
|
driver-harvesterhci-io: Harvester (CSI)
|
|
4033
|
+
lvm-driver-harvesterhci-io: LVM
|
|
4019
4034
|
nfs-csi-k8s-io: NFS (CSI)
|
|
4020
4035
|
ebs-csi-aws-com: AWS Elastic Block Store (CSI)
|
|
4021
4036
|
rbd-csi-ceph-com: Ceph RBD (CSI)
|
|
@@ -4995,6 +5010,7 @@ resourceTable:
|
|
|
4995
5010
|
node: Group by Node
|
|
4996
5011
|
role: Group by Role
|
|
4997
5012
|
cluster: Group by Cluster
|
|
5013
|
+
device: Group by Device
|
|
4998
5014
|
groupLabel:
|
|
4999
5015
|
cluster: "<span>Cluster:</span> {name}"
|
|
5000
5016
|
notInACluster: Not in a Cluster
|
|
@@ -5790,6 +5806,7 @@ tableHeaders:
|
|
|
5790
5806
|
resourcesReady: Resources Ready
|
|
5791
5807
|
restarts: Restarts
|
|
5792
5808
|
restart: Restart Required
|
|
5809
|
+
restore: Restore
|
|
5793
5810
|
role: Role
|
|
5794
5811
|
roles: Roles
|
|
5795
5812
|
routes: Routes
|
|
@@ -5825,6 +5842,7 @@ tableHeaders:
|
|
|
5825
5842
|
targetKind: Target Type
|
|
5826
5843
|
targetPort: Target
|
|
5827
5844
|
template: Template
|
|
5845
|
+
totalSnapshotQuota: Total Snapshot Quota
|
|
5828
5846
|
type: Type
|
|
5829
5847
|
updated: Updated
|
|
5830
5848
|
up-to-date: Up To Date
|
|
@@ -7301,6 +7319,7 @@ action:
|
|
|
7301
7319
|
viewYaml: View YAML
|
|
7302
7320
|
activate: Activate
|
|
7303
7321
|
deactivate: Deactivate
|
|
7322
|
+
editQuota: Edit Quota
|
|
7304
7323
|
show: Show
|
|
7305
7324
|
hide: Hide
|
|
7306
7325
|
copy: Copy
|
|
@@ -7779,7 +7798,9 @@ auth:
|
|
|
7779
7798
|
label: Auth Provider
|
|
7780
7799
|
vncConsole:
|
|
7781
7800
|
error:
|
|
7782
|
-
message: Web VNC console
|
|
7801
|
+
message: Web VNC console is disconnected
|
|
7802
|
+
reconnecting:
|
|
7803
|
+
message: Web VNC console reconnection attempt
|
|
7783
7804
|
|
|
7784
7805
|
gitPicker:
|
|
7785
7806
|
github:
|
|
@@ -12,6 +12,10 @@ export default {
|
|
|
12
12
|
dark: {
|
|
13
13
|
type: Boolean,
|
|
14
14
|
default: false
|
|
15
|
+
},
|
|
16
|
+
supportCustomLogo: {
|
|
17
|
+
type: Boolean,
|
|
18
|
+
default: false
|
|
15
19
|
}
|
|
16
20
|
},
|
|
17
21
|
data() {
|
|
@@ -75,7 +79,7 @@ export default {
|
|
|
75
79
|
},
|
|
76
80
|
|
|
77
81
|
pathToBrandedImage() {
|
|
78
|
-
if (this.fileName === 'rancher-logo.svg') {
|
|
82
|
+
if (this.fileName === 'rancher-logo.svg' || this.supportCustomLogo) {
|
|
79
83
|
if (this.theme === 'dark' && this.uiLogoDark) {
|
|
80
84
|
return this.uiLogoDark;
|
|
81
85
|
}
|
|
@@ -46,6 +46,7 @@ export default {
|
|
|
46
46
|
|
|
47
47
|
<template>
|
|
48
48
|
<a
|
|
49
|
+
v-if="text"
|
|
49
50
|
class="copy-to-clipboard-text"
|
|
50
51
|
:class="{ 'copied': copied, 'plain': plain}"
|
|
51
52
|
href="#"
|
|
@@ -59,6 +60,7 @@ export default {
|
|
|
59
60
|
</template>
|
|
60
61
|
<style lang="scss" scoped>
|
|
61
62
|
.copy-to-clipboard-text {
|
|
63
|
+
white-space: nowrap;
|
|
62
64
|
&.plain {
|
|
63
65
|
color: var(--body-text);
|
|
64
66
|
|
package/components/DetailTop.vue
CHANGED
|
@@ -11,6 +11,7 @@ import SortableTable from '@shell/components/SortableTable';
|
|
|
11
11
|
import { mapGetters } from 'vuex';
|
|
12
12
|
import { canViewProjectMembershipEditor } from '@shell/components/form/Members/ProjectMembershipEditor.vue';
|
|
13
13
|
import { allHash } from '@shell/utils/promise';
|
|
14
|
+
import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* Explorer members page.
|
|
@@ -227,6 +228,9 @@ export default {
|
|
|
227
228
|
canEditClusterMembers() {
|
|
228
229
|
return this.normanClusterRTBSchema?.collectionMethods.find((x) => x.toLowerCase() === 'post');
|
|
229
230
|
},
|
|
231
|
+
isHarvester() {
|
|
232
|
+
return this.$store.getters['currentProduct'].inStore === HARVESTER;
|
|
233
|
+
},
|
|
230
234
|
},
|
|
231
235
|
methods: {
|
|
232
236
|
getMgmtProjectId(group) {
|
|
@@ -324,7 +328,7 @@ export default {
|
|
|
324
328
|
/>
|
|
325
329
|
</Tab>
|
|
326
330
|
<Tab
|
|
327
|
-
v-if="canManageProjectMembers"
|
|
331
|
+
v-if="canManageProjectMembers && !isHarvester"
|
|
328
332
|
name="project-membership"
|
|
329
333
|
:label="t('members.projectMembership')"
|
|
330
334
|
>
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
import { mapGetters } from 'vuex';
|
|
3
3
|
import ResourceTable, { defaultTableSortGenerationFn } from '@shell/components/ResourceTable';
|
|
4
|
-
import { STATE, AGE, NAME } from '@shell/config/table-headers';
|
|
4
|
+
import { STATE, AGE, NAME, NS_SNAPSHOT_QUOTA } from '@shell/config/table-headers';
|
|
5
5
|
import { uniq } from '@shell/utils/array';
|
|
6
|
-
import { MANAGEMENT, NAMESPACE, VIRTUAL_TYPES } from '@shell/config/types';
|
|
6
|
+
import { MANAGEMENT, NAMESPACE, VIRTUAL_TYPES, HCI } from '@shell/config/types';
|
|
7
7
|
import { PROJECT_ID, FLAT_VIEW } from '@shell/config/query-params';
|
|
8
8
|
import { PanelLocation, ExtensionPoint } from '@shell/core/types';
|
|
9
9
|
import ExtensionPanel from '@shell/components/ExtensionPanel';
|
|
10
10
|
import Masthead from '@shell/components/ResourceList/Masthead';
|
|
11
|
-
import { mapPref, GROUP_RESOURCES, ALL_NAMESPACES } from '@shell/store/prefs';
|
|
11
|
+
import { mapPref, GROUP_RESOURCES, ALL_NAMESPACES, DEV } from '@shell/store/prefs';
|
|
12
12
|
import MoveModal from '@shell/components/MoveModal';
|
|
13
13
|
import ButtonMultiAction from '@shell/components/ButtonMultiAction.vue';
|
|
14
14
|
|
|
15
15
|
import { NAMESPACE_FILTER_ALL_ORPHANS } from '@shell/utils/namespace-filter';
|
|
16
16
|
import ResourceFetch from '@shell/mixins/resource-fetch';
|
|
17
17
|
import DOMPurify from 'dompurify';
|
|
18
|
+
import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
|
|
18
19
|
|
|
19
20
|
export default {
|
|
20
21
|
name: 'ListProjectNamespace',
|
|
@@ -42,6 +43,7 @@ export default {
|
|
|
42
43
|
async fetch() {
|
|
43
44
|
const inStore = this.$store.getters['currentStore'](NAMESPACE);
|
|
44
45
|
|
|
46
|
+
this.harvesterResourceQuotaSchema = this.$store.getters[`${ inStore }/schemaFor`](HCI.RESOURCE_QUOTA);
|
|
45
47
|
this.schema = this.$store.getters[`${ inStore }/schemaFor`](NAMESPACE);
|
|
46
48
|
this.projectSchema = this.$store.getters[`management/schemaFor`](MANAGEMENT.PROJECT);
|
|
47
49
|
|
|
@@ -60,6 +62,7 @@ export default {
|
|
|
60
62
|
return {
|
|
61
63
|
loadResources: [NAMESPACE],
|
|
62
64
|
loadIndeterminate: true,
|
|
65
|
+
harvesterResourceQuotaSchema: null,
|
|
63
66
|
schema: null,
|
|
64
67
|
projects: [],
|
|
65
68
|
projectSchema: null,
|
|
@@ -93,20 +96,33 @@ export default {
|
|
|
93
96
|
isNamespaceCreatable() {
|
|
94
97
|
return (this.schema?.collectionMethods || []).includes('POST');
|
|
95
98
|
},
|
|
99
|
+
isHarvester() {
|
|
100
|
+
return this.$store.getters['currentProduct'].inStore === HARVESTER;
|
|
101
|
+
},
|
|
96
102
|
headers() {
|
|
97
|
-
const
|
|
98
|
-
name: 'project',
|
|
99
|
-
label: this.t('tableHeaders.project'),
|
|
100
|
-
value: 'project.nameDisplay',
|
|
101
|
-
sort: ['projectNameSort', 'nameSort'],
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
return [
|
|
103
|
+
const headers = [
|
|
105
104
|
STATE,
|
|
106
105
|
NAME,
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
106
|
+
];
|
|
107
|
+
|
|
108
|
+
if (this.groupPreference === 'none') {
|
|
109
|
+
const projectHeader = {
|
|
110
|
+
name: 'project',
|
|
111
|
+
label: this.t('tableHeaders.project'),
|
|
112
|
+
value: 'project.nameDisplay',
|
|
113
|
+
sort: ['projectNameSort', 'nameSort'],
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
headers.push(projectHeader);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (this.isHarvester && this.harvesterResourceQuotaSchema) {
|
|
120
|
+
headers.push(NS_SNAPSHOT_QUOTA);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
headers.push(AGE);
|
|
124
|
+
|
|
125
|
+
return headers;
|
|
110
126
|
},
|
|
111
127
|
projectIdsWithNamespaces() {
|
|
112
128
|
const ids = this.rows
|
|
@@ -211,7 +227,15 @@ export default {
|
|
|
211
227
|
return this.groupPreference === 'none' ? this.rows : this.rowsWithFakeNamespaces;
|
|
212
228
|
},
|
|
213
229
|
rows() {
|
|
214
|
-
|
|
230
|
+
let isDev;
|
|
231
|
+
|
|
232
|
+
try {
|
|
233
|
+
isDev = this.$store.getters['prefs/get'](ALL_NAMESPACES);
|
|
234
|
+
} catch {
|
|
235
|
+
isDev = this.$store.getters['prefs/get'](DEV);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
if (isDev) {
|
|
215
239
|
// If all namespaces options are turned on in the user preferences,
|
|
216
240
|
// return all namespaces including system namespaces and RBAC
|
|
217
241
|
// management namespaces.
|
|
@@ -20,9 +20,19 @@ export default {
|
|
|
20
20
|
default: null
|
|
21
21
|
},
|
|
22
22
|
|
|
23
|
+
usedTitle: {
|
|
24
|
+
type: String,
|
|
25
|
+
default: null
|
|
26
|
+
},
|
|
27
|
+
|
|
23
28
|
reserved: {
|
|
24
29
|
type: Object,
|
|
25
30
|
default: null
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
reservedTitle: {
|
|
34
|
+
type: String,
|
|
35
|
+
default: null
|
|
26
36
|
}
|
|
27
37
|
},
|
|
28
38
|
computed: {
|
|
@@ -78,7 +88,7 @@ export default {
|
|
|
78
88
|
>
|
|
79
89
|
<template #title>
|
|
80
90
|
<span>
|
|
81
|
-
{{ t('clusterIndexPage.hardwareResourceGauge.reserved') }}
|
|
91
|
+
{{ reservedTitle ?? t('clusterIndexPage.hardwareResourceGauge.reserved') }}
|
|
82
92
|
<span class="values text-muted">
|
|
83
93
|
<span v-if="reserved.formattedUseful">
|
|
84
94
|
{{ reserved.formattedUseful }}
|
|
@@ -112,7 +122,7 @@ export default {
|
|
|
112
122
|
>
|
|
113
123
|
<template #title>
|
|
114
124
|
<span>
|
|
115
|
-
{{ t('clusterIndexPage.hardwareResourceGauge.used') }}
|
|
125
|
+
{{ usedTitle ?? t('clusterIndexPage.hardwareResourceGauge.used') }}
|
|
116
126
|
<span class="values text-muted">
|
|
117
127
|
<span v-if="used.formattedUseful">
|
|
118
128
|
{{ used.formattedUseful }}
|
|
@@ -39,10 +39,14 @@ export default {
|
|
|
39
39
|
class="label"
|
|
40
40
|
>
|
|
41
41
|
<div class="text-label">
|
|
42
|
-
|
|
42
|
+
<slot name="name">
|
|
43
|
+
{{ name }}
|
|
44
|
+
</slot>
|
|
43
45
|
</div>
|
|
44
46
|
<div class="value">
|
|
45
|
-
|
|
47
|
+
<slot name="value">
|
|
48
|
+
{{ displayValue }}
|
|
49
|
+
</slot>
|
|
46
50
|
</div>
|
|
47
51
|
</div>
|
|
48
52
|
<slot v-else />
|
|
@@ -113,14 +113,14 @@ export default {
|
|
|
113
113
|
:options="routeRadioOptions"
|
|
114
114
|
@update:value="updateLoginRoute"
|
|
115
115
|
>
|
|
116
|
-
<template #2="{option
|
|
116
|
+
<template #2="{option}">
|
|
117
117
|
<div class="custom-page">
|
|
118
118
|
<RadioButton
|
|
119
119
|
:label="option.label"
|
|
120
120
|
:val="false"
|
|
121
121
|
:value="afterLoginRoute=== 'home' || afterLoginRoute === 'last-visited'"
|
|
122
|
+
:v-bind="$attrs"
|
|
122
123
|
@update:value="afterLoginRoute = false"
|
|
123
|
-
v-on="listeners"
|
|
124
124
|
/>
|
|
125
125
|
<Select
|
|
126
126
|
v-model:value="routeFromDropdown"
|
|
@@ -101,6 +101,10 @@ export default {
|
|
|
101
101
|
},
|
|
102
102
|
|
|
103
103
|
computed: {
|
|
104
|
+
dev() {
|
|
105
|
+
return this.$store.getters['prefs/dev'];
|
|
106
|
+
},
|
|
107
|
+
|
|
104
108
|
schema() {
|
|
105
109
|
const inStore = this.storeOverride || this.$store.getters['currentStore'](this.resource);
|
|
106
110
|
|
|
@@ -383,6 +387,10 @@ export default {
|
|
|
383
387
|
hideNamespaceLocation() {
|
|
384
388
|
return this.$store.getters['currentProduct'].hideNamespaceLocation || this.value.namespaceLocation === null;
|
|
385
389
|
},
|
|
390
|
+
|
|
391
|
+
resourceExternalLink() {
|
|
392
|
+
return this.value.resourceExternalLink;
|
|
393
|
+
},
|
|
386
394
|
},
|
|
387
395
|
|
|
388
396
|
methods: {
|
|
@@ -462,6 +470,16 @@ export default {
|
|
|
462
470
|
class="icon icon-sm icon-istio"
|
|
463
471
|
/>
|
|
464
472
|
</span>
|
|
473
|
+
<a
|
|
474
|
+
v-if="dev && !!resourceExternalLink"
|
|
475
|
+
v-clean-tooltip="t(resourceExternalLink.tipsKey || 'generic.resourceExternalLinkTips')"
|
|
476
|
+
class="resource-external"
|
|
477
|
+
rel="nofollow noopener noreferrer"
|
|
478
|
+
target="_blank"
|
|
479
|
+
:href="resourceExternalLink.url"
|
|
480
|
+
>
|
|
481
|
+
<i class="icon icon-external-link" />
|
|
482
|
+
</a>
|
|
465
483
|
</h1>
|
|
466
484
|
</div>
|
|
467
485
|
<div
|
|
@@ -521,7 +539,7 @@ export default {
|
|
|
521
539
|
<button
|
|
522
540
|
v-if="isView"
|
|
523
541
|
ref="actions"
|
|
524
|
-
data-testid="
|
|
542
|
+
data-testid="masthead-action-menu"
|
|
525
543
|
aria-haspopup="true"
|
|
526
544
|
type="button"
|
|
527
545
|
class="btn role-multi-action actions"
|
|
@@ -642,4 +660,7 @@ export default {
|
|
|
642
660
|
justify-content: flex-end;
|
|
643
661
|
}
|
|
644
662
|
|
|
663
|
+
.resource-external {
|
|
664
|
+
font-size: 18px;
|
|
665
|
+
}
|
|
645
666
|
</style>
|
|
@@ -68,11 +68,6 @@ export default {
|
|
|
68
68
|
default: null,
|
|
69
69
|
},
|
|
70
70
|
|
|
71
|
-
flexContent: {
|
|
72
|
-
type: Boolean,
|
|
73
|
-
default: false,
|
|
74
|
-
},
|
|
75
|
-
|
|
76
71
|
/**
|
|
77
72
|
* Inherited global identifier prefix for tests
|
|
78
73
|
* Define a term based on the parent component to avoid conflicts on multiple components
|
|
@@ -173,7 +168,8 @@ export default {
|
|
|
173
168
|
},
|
|
174
169
|
bundle: {
|
|
175
170
|
inStoreType: 'management',
|
|
176
|
-
type: FLEET.BUNDLE
|
|
171
|
+
type: FLEET.BUNDLE,
|
|
172
|
+
opt: { excludeFields: ['metadata.managedFields', 'spec.resources'] },
|
|
177
173
|
},
|
|
178
174
|
|
|
179
175
|
bundleDeployment: {
|
|
@@ -418,7 +414,6 @@ export default {
|
|
|
418
414
|
:offer-preview="offerPreview"
|
|
419
415
|
:done-route="doneRoute"
|
|
420
416
|
:done-override="value.doneOverride"
|
|
421
|
-
:class="{'flex-content': flexContent}"
|
|
422
417
|
@update:value="$emit('input', $event)"
|
|
423
418
|
/>
|
|
424
419
|
|
|
@@ -434,7 +429,6 @@ export default {
|
|
|
434
429
|
:initial-value="initialModel"
|
|
435
430
|
:live-value="liveModel"
|
|
436
431
|
:real-mode="realMode"
|
|
437
|
-
:class="{'flex-content': flexContent}"
|
|
438
432
|
@update:value="$emit('input', $event)"
|
|
439
433
|
@set-subtype="setSubtype"
|
|
440
434
|
/>
|
|
@@ -143,7 +143,6 @@ export default {
|
|
|
143
143
|
type: Function,
|
|
144
144
|
default: null
|
|
145
145
|
},
|
|
146
|
-
|
|
147
146
|
ignoreFilter: {
|
|
148
147
|
type: Boolean,
|
|
149
148
|
default: false
|
|
@@ -183,7 +182,12 @@ export default {
|
|
|
183
182
|
externalPaginationResult: {
|
|
184
183
|
type: Object,
|
|
185
184
|
default: null
|
|
186
|
-
}
|
|
185
|
+
},
|
|
186
|
+
|
|
187
|
+
rowsPerPage: {
|
|
188
|
+
type: Number,
|
|
189
|
+
default: null, // Default comes from the user preference
|
|
190
|
+
},
|
|
187
191
|
},
|
|
188
192
|
|
|
189
193
|
mounted() {
|
|
@@ -457,13 +461,16 @@ export default {
|
|
|
457
461
|
tooltipKey: 'resourceTable.groupBy.none',
|
|
458
462
|
icon: 'icon-list-flat',
|
|
459
463
|
value: 'none',
|
|
460
|
-
}
|
|
461
|
-
|
|
464
|
+
}
|
|
465
|
+
];
|
|
466
|
+
|
|
467
|
+
if (!this.options?.hiddenNamespaceGroupButton) {
|
|
468
|
+
standard.push( {
|
|
462
469
|
tooltipKey: this.groupTooltip,
|
|
463
470
|
icon: 'icon-folder',
|
|
464
471
|
value: 'namespace',
|
|
465
|
-
}
|
|
466
|
-
|
|
472
|
+
});
|
|
473
|
+
}
|
|
467
474
|
|
|
468
475
|
// SUPPLEMENT (instead of REPLACE) defaults with listGroups (given listGroupsWillOverride is false)
|
|
469
476
|
if (!!this.options?.listGroups?.length) {
|
|
@@ -571,6 +578,7 @@ export default {
|
|
|
571
578
|
:paging="true"
|
|
572
579
|
:paging-params="parsedPagingParams"
|
|
573
580
|
:paging-label="pagingLabel"
|
|
581
|
+
:rows-per-page="rowsPerPage"
|
|
574
582
|
:row-actions="rowActions"
|
|
575
583
|
:table-actions="_showBulkActions"
|
|
576
584
|
:overflow-x="overflowX"
|
package/components/SideNav.vue
CHANGED
|
@@ -482,7 +482,7 @@ export default {
|
|
|
482
482
|
<template v-else>
|
|
483
483
|
<span
|
|
484
484
|
v-if="isVirtualCluster && isExplorer"
|
|
485
|
-
v-tooltip="{content: harvesterVersion, placement: 'top'}"
|
|
485
|
+
v-clean-tooltip="{content: harvesterVersion, placement: 'top'}"
|
|
486
486
|
class="clip text-muted ml-5"
|
|
487
487
|
>
|
|
488
488
|
(Harvester-{{ harvesterVersion }})
|
|
@@ -16,7 +16,6 @@ import {
|
|
|
16
16
|
FLEET_REPO_PER_CLUSTER_STATE
|
|
17
17
|
|
|
18
18
|
} from '@shell/config/table-headers';
|
|
19
|
-
import { FLEET } from '@shell/config/labels-annotations';
|
|
20
19
|
import { STATES_ENUM } from '@shell/plugins/dashboard-store/resource-class';
|
|
21
20
|
|
|
22
21
|
// i18n-ignore repoDisplay
|
|
@@ -118,12 +117,6 @@ export default {
|
|
|
118
117
|
parseTargetMode(row) {
|
|
119
118
|
return row.targetInfo?.mode === 'clusterGroup' ? this.t('fleet.gitRepo.warningTooltip.clusterGroup') : this.t('fleet.gitRepo.warningTooltip.cluster');
|
|
120
119
|
},
|
|
121
|
-
|
|
122
|
-
clusterViewResourceStatus(row) {
|
|
123
|
-
return row.clusterResourceStatus.find((c) => {
|
|
124
|
-
return c.metadata?.labels[FLEET.CLUSTER_NAME] === this.clusterId;
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
120
|
},
|
|
128
121
|
};
|
|
129
122
|
</script>
|
|
@@ -89,7 +89,7 @@ export default {
|
|
|
89
89
|
type: Array,
|
|
90
90
|
// we only want functions in the rules array
|
|
91
91
|
validator: (rules) => rules.every((rule) => ['function'].includes(typeof rule))
|
|
92
|
-
}
|
|
92
|
+
},
|
|
93
93
|
},
|
|
94
94
|
data() {
|
|
95
95
|
const input = (Array.isArray(this.value) ? this.value : []).slice();
|
|
@@ -407,4 +407,8 @@ export default {
|
|
|
407
407
|
padding: 5px 0;
|
|
408
408
|
}
|
|
409
409
|
}
|
|
410
|
+
|
|
411
|
+
.required {
|
|
412
|
+
color: var(--error);
|
|
413
|
+
}
|
|
410
414
|
</style>
|
|
@@ -23,6 +23,10 @@ export default {
|
|
|
23
23
|
type: Object,
|
|
24
24
|
default: null
|
|
25
25
|
},
|
|
26
|
+
enableDefaultAddValue: {
|
|
27
|
+
type: Boolean,
|
|
28
|
+
default: true
|
|
29
|
+
},
|
|
26
30
|
loading: {
|
|
27
31
|
type: Boolean,
|
|
28
32
|
default: false
|
|
@@ -43,7 +47,7 @@ export default {
|
|
|
43
47
|
},
|
|
44
48
|
|
|
45
49
|
defaultAddValue() {
|
|
46
|
-
return this.options[0]?.value;
|
|
50
|
+
return this.enableDefaultAddValue ? this.options[0]?.value : '';
|
|
47
51
|
},
|
|
48
52
|
|
|
49
53
|
getOptionLabel() {
|