@rancher/shell 0.3.0 → 0.3.2
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/global/_button.scss +5 -1
- package/assets/styles/global/_columns.scss +4 -0
- package/assets/styles/global/_gauges.scss +1 -1
- package/assets/styles/global/_layout.scss +5 -2
- package/assets/styles/global/_select.scss +1 -4
- package/assets/styles/themes/_dark.scss +5 -4
- package/assets/styles/themes/_light.scss +4 -3
- package/assets/styles/themes/_suse.scss +1 -1
- package/assets/styles/vendor/vue-select.scss +4 -3
- package/assets/translations/en-us.yaml +673 -73
- package/assets/translations/zh-hans.yaml +720 -207
- package/chart/monitoring/steps/uninstall-v1.vue +2 -2
- package/cloud-credential/azure.vue +23 -0
- package/cloud-credential/harvester.vue +25 -62
- package/cloud-credential/pnap.vue +80 -0
- package/components/.DS_Store +0 -0
- package/components/ActionMenu.vue +28 -7
- package/components/AdvancedSection.vue +9 -2
- package/components/Alert.vue +2 -2
- package/components/ButtonDropdown.vue +0 -2
- package/components/ButtonGroup.vue +1 -0
- package/components/CollapsibleCard.vue +0 -1
- package/components/CruResource.vue +41 -4
- package/components/DetailTop.vue +72 -4
- package/components/DisableAuthProviderModal.vue +106 -0
- package/{rancher-components/components/Utils/DraggableZone → components}/DraggableZone.vue +0 -0
- package/components/ExplorerMembers.vue +253 -30
- package/components/ExplorerProjectsNamespaces.vue +77 -33
- package/components/ExtensionPanel.vue +42 -0
- package/components/GrowlManager.vue +3 -3
- package/components/IconOrSvg.vue +178 -0
- package/components/LogItem.vue +69 -0
- package/components/PodSecurityAdmission.vue +302 -0
- package/components/PromptModal.vue +1 -0
- package/components/ResourceDetail/Masthead.vue +69 -4
- package/components/ResourceDetail/index.vue +12 -5
- package/components/ResourceList/Masthead.vue +11 -1
- package/components/ResourceList/ResourceLoadingIndicator.vue +12 -2
- package/components/ResourceList/index.vue +66 -12
- package/components/ResourceList/resource-list.config.js +7 -0
- package/components/ResourceTable.vue +33 -6
- package/components/SimpleBox.vue +1 -1
- package/components/SortableTable/THead.vue +21 -14
- package/components/SortableTable/filtering.js +1 -1
- package/components/SortableTable/index.vue +21 -10
- package/components/SortableTable/selection.js +15 -3
- package/components/Tabbed/Tab.vue +1 -1
- package/components/Tabbed/index.vue +20 -15
- package/components/__tests__/.DS_Store +0 -0
- package/components/__tests__/AsyncButton.test.ts +140 -0
- package/components/__tests__/BackLink.test.ts +33 -0
- package/components/__tests__/ButtonGroup.test.ts +124 -0
- package/components/__tests__/ClusterBadge.test.ts +32 -0
- package/components/__tests__/CollapsibleCard.test.ts +64 -0
- package/components/__tests__/ConsumptionGauge.test.ts +88 -0
- package/components/__tests__/CruResource.test.ts +3 -2
- package/components/__tests__/FixedBanner.test.ts +129 -0
- package/components/__tests__/GrowlManager.test.ts +147 -0
- package/components/__tests__/NamespaceFilter.test.ts +33 -25
- package/components/__tests__/PercentageBar.test.ts +32 -0
- package/components/__tests__/PodSecurityAdmission.test.ts +398 -0
- package/components/auth/AuthBanner.vue +20 -10
- package/components/auth/RoleDetailEdit.vue +26 -17
- package/components/auth/SelectPrincipal.vue +36 -5
- package/components/form/ArrayList.vue +3 -35
- package/components/form/ArrayListGrouped.vue +13 -4
- package/components/form/ArrayListSelect.vue +5 -5
- package/components/form/Error.vue +8 -0
- package/components/form/KeyValue.vue +39 -7
- package/components/form/LabeledSelect.vue +5 -2
- package/components/form/Labels.vue +46 -16
- package/components/form/Members/ClusterPermissionsEditor.vue +17 -17
- package/components/form/Members/MembershipEditor.vue +12 -12
- package/components/form/NameNsDescription.vue +1 -1
- package/components/form/NodeScheduling.vue +1 -1
- package/components/form/Probe.vue +3 -3
- package/components/form/ResourceQuota/Project.vue +6 -6
- package/components/form/ResourceTabs/index.vue +24 -6
- package/components/form/Security.vue +7 -6
- package/components/form/Select.vue +3 -2
- package/components/form/SelectOrCreateAuthSecret.vue +22 -29
- package/components/form/ServicePorts.vue +8 -0
- package/components/form/WorkloadPorts.vue +7 -1
- package/components/form/__tests__/ArrayList.test.ts +74 -0
- package/components/form/__tests__/ArrayListGrouped.test.ts +6 -4
- package/components/formatter/Checked.vue +1 -1
- package/components/formatter/ClusterLink.vue +5 -0
- package/components/formatter/IconIsDefault.vue +2 -2
- package/components/formatter/InternalExternalIP.vue +11 -8
- package/components/formatter/LiveDuration.vue +78 -0
- package/components/formatter/WorkloadHealthScale.vue +5 -3
- package/components/nav/Header.vue +74 -7
- package/components/nav/NamespaceFilter.vue +146 -63
- package/components/nav/TopLevelMenu.vue +22 -19
- package/components/nav/WindowManager/ContainerLogs.vue +83 -126
- package/components/nav/WindowManager/ContainerShell.vue +9 -7
- package/components/nav/WindowManager/Window.vue +2 -0
- package/components/nav/WindowManager/index.vue +10 -0
- package/config/elemental-types.js +9 -0
- package/config/features.js +2 -0
- package/config/home-links.js +4 -1
- package/config/pod-security-admission.ts +82 -0
- package/config/product/apps.js +1 -1
- package/config/product/auth.js +6 -5
- package/config/product/backup.js +1 -1
- package/config/product/explorer.js +6 -6
- package/config/product/fleet.js +1 -1
- package/config/product/manager.js +6 -2
- package/config/query-params.js +1 -0
- package/config/secret.js +0 -1
- package/config/settings.ts +26 -9
- package/config/table-headers.js +22 -11
- package/config/types.js +4 -1
- package/config/uiplugins.js +3 -3
- package/content/docs/zh-hans/getting-started.md +113 -137
- package/content/docs/zh-hans/whats-new.md +8 -46
- package/core/plugin-helpers.js +171 -0
- package/core/plugin.ts +61 -1
- package/core/plugins.js +33 -0
- package/core/types.ts +128 -2
- package/creators/pkg/package-lock.json +37 -0
- package/creators/pkg/package.json +1 -1
- package/detail/catalog.cattle.io.app.vue +1 -1
- package/detail/pod.vue +1 -1
- package/detail/provisioning.cattle.io.cluster.vue +35 -9
- package/detail/service.vue +2 -9
- package/detail/workload/index.vue +0 -1
- package/dialog/AddClusterMemberDialog.vue +22 -28
- package/dialog/AddProjectMemberDialog.vue +53 -9
- package/dialog/DiagnosticTimingsDialog.vue +8 -7
- package/dialog/DrainNode.vue +44 -48
- package/dialog/ForceMachineRemoveDialog.vue +5 -7
- package/dialog/GenericPrompt.vue +15 -20
- package/dialog/RollbackWorkloadDialog.vue +15 -46
- package/dialog/RotateCertificatesDialog.vue +5 -7
- package/dialog/RotateEncryptionKeyDialog.vue +5 -9
- package/dialog/SaveAsRKETemplateDialog.vue +5 -13
- package/dialog/ScaleMachineDownDialog.vue +1 -1
- package/dialog/ScalePoolDownDialog.vue +121 -0
- package/edit/__tests__/management.cattle.io.setting.test.ts +3 -3
- package/edit/auth/azuread.vue +16 -16
- package/edit/auth/github.vue +8 -0
- package/edit/auth/googleoauth.vue +10 -1
- package/edit/auth/ldap/index.vue +10 -0
- package/edit/auth/oidc.vue +10 -0
- package/edit/auth/saml.vue +10 -0
- package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -1
- package/edit/catalog.cattle.io.clusterrepo.vue +3 -0
- package/edit/cloudcredential.vue +3 -7
- package/edit/logging-flow/Match.vue +39 -8
- package/edit/logging-flow/index.vue +27 -4
- package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +107 -0
- package/edit/management.cattle.io.project.vue +8 -1
- package/edit/management.cattle.io.setting.vue +5 -2
- package/edit/management.cattle.io.user.vue +7 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +36 -8
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +2 -2
- package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +14 -6
- package/edit/namespace.vue +18 -4
- package/edit/networking.k8s.io.ingress/Certificate.vue +1 -0
- package/edit/networking.k8s.io.ingress/IngressClass.vue +8 -6
- package/edit/networking.k8s.io.ingress/RulePath.vue +12 -6
- package/edit/networking.k8s.io.ingress/index.vue +8 -6
- package/edit/persistentvolume/index.vue +30 -27
- package/edit/persistentvolume/plugins/cephfs.vue +29 -29
- package/edit/persistentvolume/plugins/csi.vue +102 -62
- package/edit/persistentvolume/plugins/fc.vue +19 -19
- package/edit/persistentvolume/plugins/iscsi.vue +45 -45
- package/edit/persistentvolume/plugins/rbd.vue +39 -39
- package/edit/persistentvolumeclaim.vue +78 -75
- package/edit/provisioning.cattle.io.cluster/MachinePool.vue +11 -7
- package/edit/provisioning.cattle.io.cluster/RegistryConfigs.vue +10 -1
- package/edit/provisioning.cattle.io.cluster/RegistryMirrors.vue +87 -27
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +3 -6
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +96 -0
- package/edit/provisioning.cattle.io.cluster/import.vue +1 -1
- package/edit/provisioning.cattle.io.cluster/index.vue +29 -6
- package/edit/provisioning.cattle.io.cluster/rke2.vue +445 -154
- package/edit/secret/index.vue +3 -7
- package/edit/service.vue +3 -1
- package/edit/storage.k8s.io.storageclass/index.vue +100 -16
- package/edit/storage.k8s.io.storageclass/provisioners/driver.harvesterhci.io.vue +114 -0
- package/edit/workload/__tests__/index.test.ts +98 -0
- package/edit/workload/index.vue +58 -8
- package/edit/workload/mixins/workload.js +107 -70
- package/edit/workload/storage/ContainerMountPaths.vue +0 -10
- package/edit/workload/storage/emptyDir.vue +88 -0
- package/edit/workload/storage/ephemeralVolume/index.vue +1 -1
- package/edit/workload/storage/index.vue +8 -0
- package/edit/workload/storage/persistentVolumeClaim/index.vue +1 -1
- package/layouts/default.vue +57 -44
- package/list/__tests__/workload.test.ts +5 -2
- package/list/catalog.cattle.io.app.vue +1 -0
- package/list/cis.cattle.io.clusterscan.vue +1 -0
- package/list/fleet.cattle.io.bundle.vue +5 -6
- package/list/fleet.cattle.io.cluster.vue +6 -3
- package/list/fleet.cattle.io.clusterregistrationtoken.vue +5 -6
- package/list/fleet.cattle.io.gitrepo.vue +4 -9
- package/list/helm.cattle.io.projecthelmchart.vue +1 -5
- package/list/logging.banzaicloud.io.clusterflow.vue +4 -1
- package/list/logging.banzaicloud.io.flow.vue +6 -5
- package/list/management.cattle.io.cluster.vue +1 -0
- package/list/management.cattle.io.feature.vue +3 -4
- package/list/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +47 -0
- package/list/management.cattle.io.setting.vue +2 -2
- package/list/management.cattle.io.user.vue +4 -10
- package/list/monitoring.coreos.com.alertmanagerconfig.vue +2 -7
- package/list/node.vue +8 -5
- package/list/persistentvolume.vue +3 -3
- package/list/persistentvolumeclaim.vue +3 -4
- package/list/provisioning.cattle.io.cluster.vue +18 -19
- package/list/service.vue +6 -14
- package/list/workload.vue +43 -38
- package/machine-config/azure.vue +429 -60
- package/machine-config/pnap.vue +288 -0
- package/mixins/auth-config.js +1 -3
- package/mixins/browser-tab-visibility.js +8 -14
- package/mixins/chart.js +1 -1
- package/mixins/create-edit-view/impl.js +4 -0
- package/mixins/create-edit-view/index.js +4 -2
- package/mixins/resource-fetch-namespaced.js +98 -0
- package/mixins/resource-fetch.js +79 -45
- package/mixins/resource-manager.js +1 -23
- package/models/apps.controllerrevision.js +7 -0
- package/models/apps.daemonset.js +18 -0
- package/models/apps.deployment.js +44 -0
- package/models/apps.replicaset.js +7 -0
- package/models/apps.statefulset.js +18 -0
- package/models/batch.job.js +7 -14
- package/models/cluster/node.js +10 -2
- package/models/cluster.x-k8s.io.machine.js +26 -4
- package/models/cluster.x-k8s.io.machinedeployment.js +12 -2
- package/models/event.js +7 -0
- package/models/logging.banzaicloud.io.flow.js +4 -0
- package/models/management.cattle.io.cluster.js +1 -1
- package/models/management.cattle.io.clusterroletemplatebinding.js +1 -1
- package/models/management.cattle.io.globalrole.js +2 -2
- package/models/management.cattle.io.node.js +37 -2
- package/models/management.cattle.io.podsecurityadmissionconfigurationtemplate.ts +4 -0
- package/models/management.cattle.io.project.js +30 -11
- package/models/management.cattle.io.setting.js +1 -1
- package/models/management.cattle.io.user.js +37 -1
- package/models/namespace.js +42 -5
- package/models/persistentvolume.js +14 -2
- package/models/pod.js +15 -0
- package/models/projectroletemplatebinding.js +7 -0
- package/models/provisioning.cattle.io.cluster.js +61 -10
- package/models/rke-machine.cattle.io.pnapmachinetemplate.js +15 -0
- package/models/service.js +14 -13
- package/models/storage.k8s.io.storageclass.js +33 -18
- package/models/workload.js +38 -7
- package/nuxt.config.js +27 -17
- package/package.json +7 -7
- package/pages/about.vue +14 -2
- package/pages/c/_cluster/apps/charts/index.vue +21 -3
- package/pages/c/_cluster/apps/charts/install.vue +59 -22
- package/pages/c/_cluster/auth/config/_id.vue +6 -0
- package/pages/c/_cluster/auth/config/index.vue +8 -6
- package/pages/c/_cluster/auth/group.principal/assign-edit.vue +1 -1
- package/pages/c/_cluster/auth/roles/index.vue +1 -1
- package/pages/c/_cluster/explorer/index.vue +51 -6
- package/pages/c/_cluster/longhorn/index.vue +1 -1
- package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +15 -4
- package/pages/c/_cluster/monitoring/index.vue +1 -1
- package/pages/c/_cluster/neuvector/index.vue +1 -1
- package/pages/c/_cluster/settings/performance.vue +48 -2
- package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +2 -0
- package/pages/c/_cluster/uiplugins/InstallDialog.vue +3 -0
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +42 -2
- package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +2 -0
- package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +1 -0
- package/pages/c/_cluster/uiplugins/UninstallDialog.vue +2 -0
- package/pages/c/_cluster/uiplugins/index.vue +42 -3
- package/pages/diagnostic.vue +5 -4
- package/pages/home.vue +105 -30
- package/pages/prefs.vue +23 -12
- package/pages/rio/mesh.vue +1 -1
- package/pkg/dynamic-importer.lib.js +8 -0
- package/pkg/vue.config.js +4 -0
- package/plugins/dashboard-store/__tests__/mutations.spec.js +406 -0
- package/plugins/dashboard-store/actions.js +32 -25
- package/plugins/dashboard-store/getters.js +50 -33
- package/plugins/dashboard-store/mutations.js +134 -28
- package/plugins/dashboard-store/resource-class.js +37 -42
- package/plugins/steve/actions.js +30 -0
- package/plugins/steve/caches/resourceCache.js +60 -0
- package/plugins/steve/getters.js +44 -1
- package/plugins/steve/mutations.js +97 -36
- package/plugins/steve/resourceWatcher.js +277 -0
- package/plugins/steve/schema.utils.js +25 -0
- package/plugins/steve/subscribe.js +288 -115
- package/plugins/steve/worker/index.js +17 -0
- package/plugins/steve/worker/web-worker.advanced.js +302 -0
- package/plugins/steve/{web-worker.steve-sub-worker.js → worker/web-worker.basic.js} +3 -44
- package/rancher-components/Card/Card.vue +3 -3
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +1 -0
- package/rancher-components/StringList/StringList.test.ts +45 -420
- package/rancher-components/StringList/StringList.vue +1 -10
- package/rancher-components/components/Banner/Banner.test.ts +44 -0
- package/rancher-components/components/Banner/Banner.vue +130 -61
- package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +13 -22
- package/rancher-components/components/Form/Checkbox/Checkbox.vue +8 -6
- package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +9 -9
- package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +0 -1
- package/rancher-components/components/StringList/StringList.test.ts +7 -7
- package/rancher-components/components/StringList/StringList.vue +21 -15
- package/scripts/test-plugins-build.sh +8 -0
- package/static/loading-indicator.html +1 -1
- package/store/action-menu.js +4 -3
- package/store/index.js +54 -3
- package/store/plugins.js +0 -17
- package/store/pnap.js +128 -0
- package/store/prefs.js +4 -2
- package/store/type-map.js +81 -13
- package/types/pod-security-admission.ts +36 -0
- package/types/shell/index.d.ts +497 -396
- package/utils/__tests__/object.test.ts +17 -1
- package/utils/__tests__/pod-security-admission.test.ts +61 -0
- package/utils/async.ts +36 -0
- package/utils/color.js +45 -0
- package/utils/crypto/browserHashUtils.js +18 -0
- package/utils/dynamic-importer.js +8 -0
- package/utils/install-redirect.js +1 -1
- package/utils/object.js +24 -0
- package/utils/pod-security-admission.ts +39 -0
- package/utils/socket.js +61 -24
- package/utils/string.js +2 -0
- package/utils/svg-filter.js +301 -0
- package/utils/time.js +49 -0
- package/utils/validators/cidr.js +4 -0
- package/utils/validators/formRules/__tests__/index.test.ts +23 -3
- package/utils/validators/formRules/index.ts +14 -0
- package/config/product/harvester-manager.js +0 -162
- package/edit/harvesterhci.io.management.cluster.vue +0 -153
- package/list/harvesterhci.io.management.cluster.vue +0 -241
- package/machine-config/harvester.vue +0 -693
- package/models/harvesterhci.io.management.cluster.js +0 -228
- package/pages/c/_cluster/harvesterManager/index.vue +0 -24
- package/rancher-components/Card/Card.test.ts +0 -39
- package/rancher-components/Utils/DraggableZone/DraggableZone.vue +0 -181
- package/rancher-components/Utils/DraggableZone/index.ts +0 -1
- package/rancher-components/components/Utils/DraggableZone/index.ts +0 -1
|
@@ -47,6 +47,7 @@ import { BEFORE_SAVE_HOOKS } from '@shell/mixins/child-hook';
|
|
|
47
47
|
import NameNsDescription from '@shell/components/form/NameNsDescription';
|
|
48
48
|
import formRulesGenerator from '@shell/utils/validators/formRules';
|
|
49
49
|
import { TYPES as SECRET_TYPES } from '@shell/models/secret';
|
|
50
|
+
import { defaultContainer } from '@shell/models/workload';
|
|
50
51
|
|
|
51
52
|
const TAB_WEIGHT_MAP = {
|
|
52
53
|
general: 99,
|
|
@@ -63,6 +64,28 @@ const TAB_WEIGHT_MAP = {
|
|
|
63
64
|
};
|
|
64
65
|
|
|
65
66
|
const GPU_KEY = 'nvidia.com/gpu';
|
|
67
|
+
const ID_KEY = Symbol('container-id');
|
|
68
|
+
|
|
69
|
+
const serialMaker = function() {
|
|
70
|
+
let prefix = '';
|
|
71
|
+
let seq = 0;
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
setPrefix(p) {
|
|
75
|
+
prefix = p;
|
|
76
|
+
},
|
|
77
|
+
setSeq(s) {
|
|
78
|
+
seq = s;
|
|
79
|
+
},
|
|
80
|
+
genSym() {
|
|
81
|
+
const result = prefix + seq;
|
|
82
|
+
|
|
83
|
+
seq += 1;
|
|
84
|
+
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}();
|
|
66
89
|
|
|
67
90
|
export default {
|
|
68
91
|
name: 'CruWorkload',
|
|
@@ -127,9 +150,10 @@ export default {
|
|
|
127
150
|
},
|
|
128
151
|
|
|
129
152
|
data() {
|
|
153
|
+
serialMaker.setPrefix('container-');
|
|
154
|
+
serialMaker.setSeq(0);
|
|
130
155
|
let type = this.$route.params.resource;
|
|
131
156
|
const createSidecar = !!this.$route.query.sidecar;
|
|
132
|
-
const isInitContainer = !!this.$route.query.init;
|
|
133
157
|
|
|
134
158
|
if (type === 'workload') {
|
|
135
159
|
type = null;
|
|
@@ -190,6 +214,7 @@ export default {
|
|
|
190
214
|
podTemplateSpec.initContainers.push({
|
|
191
215
|
imagePullPolicy: 'Always',
|
|
192
216
|
name: `container-${ allContainers.length }`,
|
|
217
|
+
_init: true,
|
|
193
218
|
});
|
|
194
219
|
|
|
195
220
|
containers = podTemplateSpec.initContainers;
|
|
@@ -198,6 +223,7 @@ export default {
|
|
|
198
223
|
container = {
|
|
199
224
|
imagePullPolicy: 'Always',
|
|
200
225
|
name: `container-${ allContainers.length }`,
|
|
226
|
+
_init: false,
|
|
201
227
|
};
|
|
202
228
|
|
|
203
229
|
containers.push(container);
|
|
@@ -209,47 +235,7 @@ export default {
|
|
|
209
235
|
this.selectContainer(container);
|
|
210
236
|
|
|
211
237
|
return {
|
|
212
|
-
secondaryResourceData:
|
|
213
|
-
namespace: this.value?.metadata?.namespace || null,
|
|
214
|
-
data: {
|
|
215
|
-
[CONFIG_MAP]: { applyTo: [{ var: 'namespacedConfigMaps' }] },
|
|
216
|
-
[PVC]: { applyTo: [{ var: 'pvcs' }] },
|
|
217
|
-
[SERVICE_ACCOUNT]: { applyTo: [{ var: 'namespacedServiceNames' }] },
|
|
218
|
-
[SECRET]: {
|
|
219
|
-
applyTo: [
|
|
220
|
-
{ var: 'namespacedSecrets' },
|
|
221
|
-
{
|
|
222
|
-
var: 'imagePullNamespacedSecrets',
|
|
223
|
-
parsingFunc: (data) => {
|
|
224
|
-
return data.filter(secret => (secret._type === SECRET_TYPES.DOCKER || secret._type === SECRET_TYPES.DOCKER_JSON));
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
]
|
|
228
|
-
},
|
|
229
|
-
[NODE]: {
|
|
230
|
-
applyTo: [
|
|
231
|
-
{ var: 'allNodeObjects' },
|
|
232
|
-
{
|
|
233
|
-
var: 'allNodes',
|
|
234
|
-
parsingFunc: (data) => {
|
|
235
|
-
return data.map(node => node.id);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
]
|
|
239
|
-
},
|
|
240
|
-
[SERVICE]: {
|
|
241
|
-
applyTo: [
|
|
242
|
-
{ var: 'allServices' },
|
|
243
|
-
{
|
|
244
|
-
var: 'headlessServices',
|
|
245
|
-
parsingFunc: (data) => {
|
|
246
|
-
return data.filter(service => service.spec.clusterIP === 'None');
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
]
|
|
250
|
-
},
|
|
251
|
-
}
|
|
252
|
-
},
|
|
238
|
+
secondaryResourceData: this.secondaryResourceDataConfig(),
|
|
253
239
|
namespacedConfigMaps: [],
|
|
254
240
|
allNodes: null,
|
|
255
241
|
allNodeObjects: [],
|
|
@@ -267,7 +253,6 @@ export default {
|
|
|
267
253
|
servicesOwned: [],
|
|
268
254
|
servicesToRemove: [],
|
|
269
255
|
portsForServices: [],
|
|
270
|
-
isInitContainer,
|
|
271
256
|
container,
|
|
272
257
|
containerChange: 0,
|
|
273
258
|
tabChange: 0,
|
|
@@ -279,6 +264,7 @@ export default {
|
|
|
279
264
|
}],
|
|
280
265
|
fvReportedValidationPaths: ['spec'],
|
|
281
266
|
isNamespaceNew: false,
|
|
267
|
+
idKey: ID_KEY
|
|
282
268
|
};
|
|
283
269
|
},
|
|
284
270
|
|
|
@@ -290,10 +276,12 @@ export default {
|
|
|
290
276
|
|
|
291
277
|
defaultTab() {
|
|
292
278
|
if (!!this.$route.query.sidecar || this.$route.query.init || this.mode === _CREATE) {
|
|
293
|
-
|
|
279
|
+
const container = this.allContainers.find(c => c.__active);
|
|
280
|
+
|
|
281
|
+
return container?.name ?? 'container-0';
|
|
294
282
|
}
|
|
295
283
|
|
|
296
|
-
return this.allContainers.length ? this.allContainers[0].
|
|
284
|
+
return this.allContainers.length ? this.allContainers[0][this.idKey] : '';
|
|
297
285
|
},
|
|
298
286
|
|
|
299
287
|
isEdit() {
|
|
@@ -395,11 +383,22 @@ export default {
|
|
|
395
383
|
allContainers() {
|
|
396
384
|
const containers = this.podTemplateSpec?.containers || [];
|
|
397
385
|
const initContainers = this.podTemplateSpec?.initContainers || [];
|
|
386
|
+
const key = this.idKey;
|
|
398
387
|
|
|
399
388
|
return [
|
|
400
|
-
...containers
|
|
389
|
+
...containers.map((each) => {
|
|
390
|
+
each._init = false;
|
|
391
|
+
if (!each[key]) {
|
|
392
|
+
each[key] = serialMaker.genSym();
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
return each;
|
|
396
|
+
}),
|
|
401
397
|
...initContainers.map((each) => {
|
|
402
398
|
each._init = true;
|
|
399
|
+
if (!each[key]) {
|
|
400
|
+
each[key] = serialMaker.genSym();
|
|
401
|
+
}
|
|
403
402
|
|
|
404
403
|
return each;
|
|
405
404
|
}),
|
|
@@ -587,13 +586,6 @@ export default {
|
|
|
587
586
|
this.$set(this.value, 'type', neu);
|
|
588
587
|
delete this.value.apiVersion;
|
|
589
588
|
},
|
|
590
|
-
|
|
591
|
-
container(neu) {
|
|
592
|
-
const containers = this.isInitContainer ? this.podTemplateSpec.initContainers : this.podTemplateSpec.containers;
|
|
593
|
-
const existing = containers.find(container => container.__active) || {};
|
|
594
|
-
|
|
595
|
-
Object.assign(existing, neu);
|
|
596
|
-
},
|
|
597
589
|
},
|
|
598
590
|
|
|
599
591
|
created() {
|
|
@@ -604,6 +596,49 @@ export default {
|
|
|
604
596
|
},
|
|
605
597
|
|
|
606
598
|
methods: {
|
|
599
|
+
secondaryResourceDataConfig() {
|
|
600
|
+
return {
|
|
601
|
+
namespace: this.value?.metadata?.namespace || null,
|
|
602
|
+
data: {
|
|
603
|
+
[CONFIG_MAP]: { applyTo: [{ var: 'namespacedConfigMaps' }] },
|
|
604
|
+
[PVC]: { applyTo: [{ var: 'pvcs' }] },
|
|
605
|
+
[SERVICE_ACCOUNT]: { applyTo: [{ var: 'namespacedServiceNames' }] },
|
|
606
|
+
[SECRET]: {
|
|
607
|
+
applyTo: [
|
|
608
|
+
{ var: 'namespacedSecrets' },
|
|
609
|
+
{
|
|
610
|
+
var: 'imagePullNamespacedSecrets',
|
|
611
|
+
parsingFunc: (data) => {
|
|
612
|
+
return data.filter(secret => (secret._type === SECRET_TYPES.DOCKER || secret._type === SECRET_TYPES.DOCKER_JSON));
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
]
|
|
616
|
+
},
|
|
617
|
+
[NODE]: {
|
|
618
|
+
applyTo: [
|
|
619
|
+
{ var: 'allNodeObjects' },
|
|
620
|
+
{
|
|
621
|
+
var: 'allNodes',
|
|
622
|
+
parsingFunc: (data) => {
|
|
623
|
+
return data.map(node => node.id);
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
]
|
|
627
|
+
},
|
|
628
|
+
[SERVICE]: {
|
|
629
|
+
applyTo: [
|
|
630
|
+
{ var: 'allServices' },
|
|
631
|
+
{
|
|
632
|
+
var: 'headlessServices',
|
|
633
|
+
parsingFunc: (data) => {
|
|
634
|
+
return data.filter(service => service.spec.clusterIP === 'None');
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
]
|
|
638
|
+
},
|
|
639
|
+
}
|
|
640
|
+
};
|
|
641
|
+
},
|
|
607
642
|
addContainerBtn() {
|
|
608
643
|
this.selectContainer({ name: 'Add Container', __add: true });
|
|
609
644
|
},
|
|
@@ -855,7 +890,6 @@ export default {
|
|
|
855
890
|
});
|
|
856
891
|
container.__active = true;
|
|
857
892
|
this.container = container;
|
|
858
|
-
this.isInitContainer = !!container._init;
|
|
859
893
|
this.containerChange++;
|
|
860
894
|
},
|
|
861
895
|
|
|
@@ -871,13 +905,16 @@ export default {
|
|
|
871
905
|
nameNumber++;
|
|
872
906
|
}
|
|
873
907
|
const container = {
|
|
874
|
-
|
|
875
|
-
name:
|
|
876
|
-
active:
|
|
908
|
+
...defaultContainer,
|
|
909
|
+
name: `container-${ nameNumber }`,
|
|
910
|
+
active: true
|
|
877
911
|
};
|
|
878
912
|
|
|
879
913
|
this.podTemplateSpec.containers.push(container);
|
|
880
914
|
this.selectContainer(container);
|
|
915
|
+
this.$nextTick(() => {
|
|
916
|
+
this.$refs.containersTabbed?.select(container.name);
|
|
917
|
+
});
|
|
881
918
|
},
|
|
882
919
|
|
|
883
920
|
removeContainer(container) {
|
|
@@ -889,27 +926,27 @@ export default {
|
|
|
889
926
|
this.selectContainer(this.allContainers[0]);
|
|
890
927
|
},
|
|
891
928
|
|
|
892
|
-
updateInitContainer(neu) {
|
|
893
|
-
if (!
|
|
929
|
+
updateInitContainer(neu, container) {
|
|
930
|
+
if (!container) {
|
|
894
931
|
return;
|
|
895
932
|
}
|
|
896
933
|
const containers = this.podTemplateSpec.containers;
|
|
934
|
+
const initContainers = this.podTemplateSpec.initContainers ?? [];
|
|
897
935
|
|
|
898
936
|
if (neu) {
|
|
899
|
-
|
|
900
|
-
|
|
937
|
+
this.podTemplateSpec.initContainers = initContainers;
|
|
938
|
+
container._init = true;
|
|
939
|
+
if (!initContainers.includes(container)) {
|
|
940
|
+
initContainers.push(container);
|
|
901
941
|
}
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
removeObject(containers, this.container);
|
|
942
|
+
removeObject(containers, container);
|
|
905
943
|
} else {
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
944
|
+
container._init = false;
|
|
945
|
+
removeObject(initContainers, container);
|
|
946
|
+
if (!containers.includes(container)) {
|
|
947
|
+
containers.push(container);
|
|
948
|
+
}
|
|
911
949
|
}
|
|
912
|
-
this.isInitContainer = neu;
|
|
913
950
|
},
|
|
914
951
|
clearPvcFormState(hookName) {
|
|
915
952
|
// On the `closePvcForm` event, remove the
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import { PVC } from '@shell/config/types';
|
|
3
2
|
import ButtonDropdown from '@shell/components/ButtonDropdown';
|
|
4
3
|
import Mount from '@shell/edit/workload/storage/Mount';
|
|
5
4
|
import { _VIEW } from '@shell/config/query-params';
|
|
@@ -34,20 +33,11 @@ export default {
|
|
|
34
33
|
},
|
|
35
34
|
},
|
|
36
35
|
|
|
37
|
-
async fetch() {
|
|
38
|
-
if ( this.$store.getters['cluster/schemaFor'](PVC) ) {
|
|
39
|
-
this.pvcs = await this.$store.dispatch('cluster/findAll', { type: PVC });
|
|
40
|
-
} else {
|
|
41
|
-
this.pvcs = [];
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
|
|
45
36
|
data() {
|
|
46
37
|
this.initializeStorage();
|
|
47
38
|
|
|
48
39
|
return {
|
|
49
40
|
containerVolumes: [],
|
|
50
|
-
pvcs: [],
|
|
51
41
|
storageVolumes: this.getStorageVolumes(),
|
|
52
42
|
selectedContainerVolumes: this.getSelectedContainerVolumes()
|
|
53
43
|
};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { LabeledInput } from '@components/Form/LabeledInput';
|
|
3
|
+
import LabeledSelect from '@shell/components/form/LabeledSelect';
|
|
4
|
+
import UnitInput from '@shell/components/form/UnitInput';
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
components: {
|
|
8
|
+
LabeledInput,
|
|
9
|
+
LabeledSelect,
|
|
10
|
+
UnitInput
|
|
11
|
+
},
|
|
12
|
+
props: {
|
|
13
|
+
podSpec: {
|
|
14
|
+
type: Object,
|
|
15
|
+
default: () => {
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
mode: {
|
|
20
|
+
type: String,
|
|
21
|
+
default: 'create'
|
|
22
|
+
},
|
|
23
|
+
value: {
|
|
24
|
+
type: Object,
|
|
25
|
+
default: () => {
|
|
26
|
+
return {};
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
data() {
|
|
31
|
+
return {
|
|
32
|
+
mediumOpts: [{
|
|
33
|
+
label: 'workload.storage.emptyDir.medium.default',
|
|
34
|
+
value: ''
|
|
35
|
+
}, {
|
|
36
|
+
label: 'workload.storage.emptyDir.medium.memory',
|
|
37
|
+
value: 'Memory'
|
|
38
|
+
}]
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
computed: {
|
|
42
|
+
medium: {
|
|
43
|
+
get() {
|
|
44
|
+
return this.value.emptyDir.medium ?? '';
|
|
45
|
+
},
|
|
46
|
+
set(v) {
|
|
47
|
+
this.$set(this.value.emptyDir, 'medium', v);
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
</script>
|
|
53
|
+
<template>
|
|
54
|
+
<div>
|
|
55
|
+
<div class="row mb-10">
|
|
56
|
+
<div class="col span-6">
|
|
57
|
+
<LabeledInput
|
|
58
|
+
v-model="value.name"
|
|
59
|
+
:required="true"
|
|
60
|
+
:mode="mode"
|
|
61
|
+
:label="t('workload.storage.volumeName')"
|
|
62
|
+
/>
|
|
63
|
+
</div>
|
|
64
|
+
<div class="col span-6">
|
|
65
|
+
<LabeledSelect
|
|
66
|
+
v-model="medium"
|
|
67
|
+
:mode="mode"
|
|
68
|
+
:label="t('workload.storage.emptyDir.medium.label')"
|
|
69
|
+
:options="mediumOpts"
|
|
70
|
+
localized-label
|
|
71
|
+
/>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
<div class="row mb-10">
|
|
75
|
+
<div class="col span-6">
|
|
76
|
+
<UnitInput
|
|
77
|
+
v-model="value.emptyDir.sizeLimit"
|
|
78
|
+
:mode="mode"
|
|
79
|
+
:label="t('workload.storage.emptyDir.sizeLimit.label')"
|
|
80
|
+
:increment="1024"
|
|
81
|
+
:input-exponent="2"
|
|
82
|
+
:output-modifier="true"
|
|
83
|
+
:placeholder="t('workload.storage.emptyDir.sizeLimit.placeholder')"
|
|
84
|
+
/>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
</template>
|
|
@@ -8,6 +8,8 @@ import ArrayListGrouped from '@shell/components/form/ArrayListGrouped';
|
|
|
8
8
|
import { randomStr } from '@shell/utils/string';
|
|
9
9
|
|
|
10
10
|
export default {
|
|
11
|
+
name: 'Storage',
|
|
12
|
+
|
|
11
13
|
components: {
|
|
12
14
|
ArrayListGrouped, ButtonDropdown, Mount, CodeMirror
|
|
13
15
|
},
|
|
@@ -155,6 +157,12 @@ export default {
|
|
|
155
157
|
csi: { volumeAttributes: {} },
|
|
156
158
|
name,
|
|
157
159
|
});
|
|
160
|
+
} else if (type === 'emptyDir') {
|
|
161
|
+
this.value.volumes.push({
|
|
162
|
+
_type: type,
|
|
163
|
+
emptyDir: { medium: '' },
|
|
164
|
+
name,
|
|
165
|
+
});
|
|
158
166
|
} else {
|
|
159
167
|
this.value.volumes.push({
|
|
160
168
|
_type: type,
|
package/layouts/default.vue
CHANGED
|
@@ -20,6 +20,7 @@ import Brand from '@shell/mixins/brand';
|
|
|
20
20
|
import FixedBanner from '@shell/components/FixedBanner';
|
|
21
21
|
import AwsComplianceBanner from '@shell/components/AwsComplianceBanner';
|
|
22
22
|
import AzureWarning from '@shell/components/auth/AzureWarning';
|
|
23
|
+
import DraggableZone from '@shell/components/DraggableZone';
|
|
23
24
|
import {
|
|
24
25
|
COUNT, SCHEMA, MANAGEMENT, UI, CATALOG
|
|
25
26
|
} from '@shell/config/types';
|
|
@@ -27,7 +28,7 @@ import { BASIC, FAVORITE, USED } from '@shell/store/type-map';
|
|
|
27
28
|
import { addObjects, replaceWith, clear, addObject } from '@shell/utils/array';
|
|
28
29
|
import { NAME as EXPLORER } from '@shell/config/product/explorer';
|
|
29
30
|
import { NAME as NAVLINKS } from '@shell/config/product/navlinks';
|
|
30
|
-
import { HARVESTER_NAME as HARVESTER } from '@shell/config/
|
|
31
|
+
import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
|
|
31
32
|
import isEqual from 'lodash/isEqual';
|
|
32
33
|
import { ucFirst } from '@shell/utils/string';
|
|
33
34
|
import { getVersionInfo, markSeenReleaseNotes } from '@shell/utils/version';
|
|
@@ -36,7 +37,6 @@ import PageHeaderActions from '@shell/mixins/page-actions';
|
|
|
36
37
|
import BrowserTabVisibility from '@shell/mixins/browser-tab-visibility';
|
|
37
38
|
import { getProductFromRoute } from '@shell/middleware/authenticated';
|
|
38
39
|
import { BOTTOM } from '@shell/utils/position';
|
|
39
|
-
import { DraggableZone } from '@components/Utils/DraggableZone';
|
|
40
40
|
|
|
41
41
|
const SET_LOGIN_ACTION = 'set-as-login';
|
|
42
42
|
|
|
@@ -69,6 +69,7 @@ export default {
|
|
|
69
69
|
wantNavSync: false,
|
|
70
70
|
unwatchPin: undefined,
|
|
71
71
|
wmPin: null,
|
|
72
|
+
draggable: false,
|
|
72
73
|
};
|
|
73
74
|
},
|
|
74
75
|
|
|
@@ -364,48 +365,9 @@ export default {
|
|
|
364
365
|
});
|
|
365
366
|
},
|
|
366
367
|
|
|
367
|
-
|
|
368
|
-
if ( this.gettingGroups ) {
|
|
369
|
-
return;
|
|
370
|
-
}
|
|
371
|
-
this.gettingGroups = true;
|
|
372
|
-
|
|
373
|
-
if ( !this.clusterReady ) {
|
|
374
|
-
clear(this.groups);
|
|
375
|
-
this.gettingGroups = false;
|
|
376
|
-
|
|
377
|
-
return;
|
|
378
|
-
}
|
|
379
|
-
|
|
368
|
+
getProductsGroups(out, loadProducts, namespaceMode, namespaces, productMap) {
|
|
380
369
|
const clusterId = this.$store.getters['clusterId'];
|
|
381
|
-
const currentProduct = this.$store.getters['productId'];
|
|
382
370
|
const currentType = this.$route.params.resource || '';
|
|
383
|
-
let namespaces = null;
|
|
384
|
-
|
|
385
|
-
if ( !this.$store.getters['isAllNamespaces'] ) {
|
|
386
|
-
const namespacesObject = this.$store.getters['namespaces']();
|
|
387
|
-
|
|
388
|
-
namespaces = Object.keys(namespacesObject);
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
// Always show cluster-level types, regardless of the namespace filter
|
|
392
|
-
const namespaceMode = 'both';
|
|
393
|
-
const out = [];
|
|
394
|
-
const loadProducts = this.isExplorer ? [EXPLORER] : [];
|
|
395
|
-
const productMap = this.activeProducts.reduce((acc, p) => {
|
|
396
|
-
return { ...acc, [p.name]: p };
|
|
397
|
-
}, {});
|
|
398
|
-
|
|
399
|
-
if ( this.isExplorer ) {
|
|
400
|
-
for ( const product of this.activeProducts ) {
|
|
401
|
-
if ( product.inStore === 'cluster' ) {
|
|
402
|
-
addObject(loadProducts, product.name);
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
// This should already have come into the list from above, but in case it hasn't...
|
|
408
|
-
addObject(loadProducts, currentProduct);
|
|
409
371
|
|
|
410
372
|
for ( const productId of loadProducts ) {
|
|
411
373
|
const modes = [BASIC];
|
|
@@ -442,7 +404,9 @@ export default {
|
|
|
442
404
|
}
|
|
443
405
|
}
|
|
444
406
|
}
|
|
407
|
+
},
|
|
445
408
|
|
|
409
|
+
getExplorerGroups(out) {
|
|
446
410
|
if ( this.isExplorer ) {
|
|
447
411
|
const allNavLinks = this.allNavLinks;
|
|
448
412
|
const toAdd = [];
|
|
@@ -508,6 +472,55 @@ export default {
|
|
|
508
472
|
|
|
509
473
|
addObjects(out, toAdd);
|
|
510
474
|
}
|
|
475
|
+
},
|
|
476
|
+
|
|
477
|
+
/**
|
|
478
|
+
* Fetch navigation by creating groups from product schemas
|
|
479
|
+
*/
|
|
480
|
+
getGroups() {
|
|
481
|
+
if ( this.gettingGroups ) {
|
|
482
|
+
return;
|
|
483
|
+
}
|
|
484
|
+
this.gettingGroups = true;
|
|
485
|
+
|
|
486
|
+
if ( !this.clusterReady ) {
|
|
487
|
+
clear(this.groups);
|
|
488
|
+
this.gettingGroups = false;
|
|
489
|
+
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
const currentProduct = this.$store.getters['productId'];
|
|
494
|
+
let namespaces = null;
|
|
495
|
+
|
|
496
|
+
if ( !this.$store.getters['isAllNamespaces'] ) {
|
|
497
|
+
const namespacesObject = this.$store.getters['namespaces']();
|
|
498
|
+
|
|
499
|
+
namespaces = Object.keys(namespacesObject);
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
// Always show cluster-level types, regardless of the namespace filter
|
|
503
|
+
const namespaceMode = 'both';
|
|
504
|
+
const out = [];
|
|
505
|
+
const loadProducts = this.isExplorer ? [EXPLORER] : [];
|
|
506
|
+
|
|
507
|
+
const productMap = this.activeProducts.reduce((acc, p) => {
|
|
508
|
+
return { ...acc, [p.name]: p };
|
|
509
|
+
}, {});
|
|
510
|
+
|
|
511
|
+
if ( this.isExplorer ) {
|
|
512
|
+
for ( const product of this.activeProducts ) {
|
|
513
|
+
if ( product.inStore === 'cluster' ) {
|
|
514
|
+
addObject(loadProducts, product.name);
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
// This should already have come into the list from above, but in case it hasn't...
|
|
520
|
+
addObject(loadProducts, currentProduct);
|
|
521
|
+
|
|
522
|
+
this.getProductsGroups(out, loadProducts, namespaceMode, namespaces, productMap);
|
|
523
|
+
this.getExplorerGroups(out);
|
|
511
524
|
|
|
512
525
|
replaceWith(this.groups, ...sortBy(out, ['weight:desc', 'label']));
|
|
513
526
|
this.gettingGroups = false;
|
|
@@ -739,11 +752,11 @@ export default {
|
|
|
739
752
|
'drag-end': !$refs.draggableZone.drag.active,
|
|
740
753
|
'drag-start': $refs.draggableZone.drag.active,
|
|
741
754
|
}"
|
|
742
|
-
draggable="
|
|
755
|
+
:draggable="draggable"
|
|
743
756
|
@dragstart="$refs.draggableZone.onDragStart($event)"
|
|
744
757
|
@dragend="$refs.draggableZone.onDragEnd($event)"
|
|
745
758
|
>
|
|
746
|
-
<WindowManager />
|
|
759
|
+
<WindowManager @draggable="draggable=$event" />
|
|
747
760
|
</div>
|
|
748
761
|
</div>
|
|
749
762
|
<FixedBanner :footer="true" />
|
|
@@ -23,8 +23,9 @@ describe('component: workload', () => {
|
|
|
23
23
|
mixins: [ResourceFetch],
|
|
24
24
|
mocks: {
|
|
25
25
|
$store: {
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
dispatch: () => jest.fn(),
|
|
27
|
+
getters: {
|
|
28
|
+
currentStore: () => 'cluster',
|
|
28
29
|
namespaces: () => jest.fn(),
|
|
29
30
|
'management/byId': () => jest.fn(),
|
|
30
31
|
'resource-fetch/refreshFlag': () => jest.fn(),
|
|
@@ -33,6 +34,8 @@ describe('component: workload', () => {
|
|
|
33
34
|
'type-map/optionsFor': () => jest.fn(),
|
|
34
35
|
'type-map/headersFor': () => jest.fn(),
|
|
35
36
|
'prefs/get': () => resource,
|
|
37
|
+
'cluster/schemaFor': () => {},
|
|
38
|
+
'cluster/all': () => [{}],
|
|
36
39
|
}
|
|
37
40
|
},
|
|
38
41
|
$fetchState: {
|
|
@@ -30,8 +30,8 @@ export default {
|
|
|
30
30
|
},
|
|
31
31
|
|
|
32
32
|
async fetch() {
|
|
33
|
-
await this.$fetchType(
|
|
34
|
-
this.allFleet = await this.$
|
|
33
|
+
await this.$fetchType(this.resource);
|
|
34
|
+
this.allFleet = await this.$fetchType(FLEET.CLUSTER);
|
|
35
35
|
},
|
|
36
36
|
|
|
37
37
|
data() {
|
|
@@ -90,10 +90,8 @@ export default {
|
|
|
90
90
|
|
|
91
91
|
// override with relevant info for the loading indicator since this doesn't use it's own masthead
|
|
92
92
|
$loadingResources() {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
loadIndeterminate: true, // results are filtered so we wouldn't get the correct count on indicator...
|
|
96
|
-
};
|
|
93
|
+
// results are filtered so we wouldn't get the correct count on indicator...
|
|
94
|
+
return { loadIndeterminate: true };
|
|
97
95
|
},
|
|
98
96
|
};
|
|
99
97
|
</script>
|
|
@@ -111,6 +109,7 @@ export default {
|
|
|
111
109
|
:rows="bundles"
|
|
112
110
|
:loading="loading"
|
|
113
111
|
:use-query-params-for-simple-filtering="useQueryParamsForSimpleFiltering"
|
|
112
|
+
:force-update-live-and-delayed="forceUpdateLiveAndDelayed"
|
|
114
113
|
>
|
|
115
114
|
<template #cell:deploymentsReady="{row}">
|
|
116
115
|
<span
|