@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
package/core/plugin.ts
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
import { RouteConfig } from 'vue-router';
|
|
2
2
|
import { DSL as STORE_DSL } from '@shell/store/type-map';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
CoreStoreInit,
|
|
5
|
+
Action,
|
|
6
|
+
Tab,
|
|
7
|
+
Card,
|
|
8
|
+
Panel,
|
|
9
|
+
TableColumn,
|
|
10
|
+
IPlugin,
|
|
11
|
+
LocationConfig,
|
|
12
|
+
ExtensionPoint,
|
|
13
|
+
} from './types';
|
|
4
14
|
import coreStore, { coreStoreModule, coreStoreState } from '@shell/plugins/dashboard-store';
|
|
5
15
|
import {
|
|
6
16
|
PluginRouteConfig, RegisterStore, UnregisterStore, CoreStoreSpecifics, CoreStoreConfig, OnNavToPackage, OnNavAwayFromPackage, OnLogOut
|
|
@@ -20,6 +30,8 @@ export class Plugin implements IPlugin {
|
|
|
20
30
|
public onLeave: OnNavAwayFromPackage = () => Promise.resolve();
|
|
21
31
|
public _onLogOut: OnLogOut = () => Promise.resolve();
|
|
22
32
|
|
|
33
|
+
public uiConfig: { [key: string]: any } = {};
|
|
34
|
+
|
|
23
35
|
// Plugin metadata (plugin package.json)
|
|
24
36
|
public _metadata: any = {};
|
|
25
37
|
|
|
@@ -34,6 +46,11 @@ export class Plugin implements IPlugin {
|
|
|
34
46
|
constructor(id: string) {
|
|
35
47
|
this.id = id;
|
|
36
48
|
this.name = id;
|
|
49
|
+
|
|
50
|
+
// Initialize uiConfig for all of the possible enum values
|
|
51
|
+
Object.values(ExtensionPoint).forEach((v) => {
|
|
52
|
+
this.uiConfig[v] = {};
|
|
53
|
+
});
|
|
37
54
|
}
|
|
38
55
|
|
|
39
56
|
get metadata() {
|
|
@@ -108,6 +125,49 @@ export class Plugin implements IPlugin {
|
|
|
108
125
|
this.routes.push({ parent, route });
|
|
109
126
|
}
|
|
110
127
|
|
|
128
|
+
private _addUIConfig(type: string, where: string, when: LocationConfig | string, config: any) {
|
|
129
|
+
// For convenience 'when' can be a string to indicate a resource, so convert it to the LocationConfig format
|
|
130
|
+
const locationConfig = (typeof when === 'string') ? { resource: when } : when;
|
|
131
|
+
|
|
132
|
+
this.uiConfig[type][where] = this.uiConfig[type][where] || [];
|
|
133
|
+
this.uiConfig[type][where].push({ ...config, locationConfig });
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Adds an action/button to the UI
|
|
138
|
+
*/
|
|
139
|
+
addAction(where: string, when: LocationConfig | string, action: Action): void {
|
|
140
|
+
this._addUIConfig(ExtensionPoint.ACTION, where, when, action);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Adds a tab to the UI
|
|
145
|
+
*/
|
|
146
|
+
addTab(where: string, when: LocationConfig | string, tab: Tab): void {
|
|
147
|
+
this._addUIConfig(ExtensionPoint.TAB, where, when, tab);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Adds a panel/component to the UI
|
|
152
|
+
*/
|
|
153
|
+
addPanel(where: string, when: LocationConfig | string, panel: Panel): void {
|
|
154
|
+
this._addUIConfig(ExtensionPoint.PANEL, where, when, panel);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Adds a card to the to the UI
|
|
159
|
+
*/
|
|
160
|
+
addCard( where: string, when: LocationConfig | string, card: Card): void {
|
|
161
|
+
this._addUIConfig(ExtensionPoint.CARD, where, when, card);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Adds a new column to a table on the UI
|
|
166
|
+
*/
|
|
167
|
+
addTableColumn(where: string, when: LocationConfig | string, column: TableColumn): void {
|
|
168
|
+
this._addUIConfig(ExtensionPoint.TABLE_COL, where, when, column);
|
|
169
|
+
}
|
|
170
|
+
|
|
111
171
|
setHomePage(component: any) {
|
|
112
172
|
this.addRoute({
|
|
113
173
|
name: 'home',
|
package/core/plugins.js
CHANGED
|
@@ -3,6 +3,7 @@ import { clearModelCache } from '@shell/plugins/dashboard-store/model-loader';
|
|
|
3
3
|
import { Plugin } from './plugin';
|
|
4
4
|
import { PluginRoutes } from './plugin-routes';
|
|
5
5
|
import { UI_PLUGIN_BASE_URL } from '@shell/config/uiplugins';
|
|
6
|
+
import { ExtensionPoint } from './types';
|
|
6
7
|
|
|
7
8
|
const MODEL_TYPE = 'models';
|
|
8
9
|
|
|
@@ -21,6 +22,12 @@ export default function({
|
|
|
21
22
|
|
|
22
23
|
const pluginRoutes = new PluginRoutes(app.router);
|
|
23
24
|
|
|
25
|
+
const uiConfig = {};
|
|
26
|
+
|
|
27
|
+
for (const ep in ExtensionPoint) {
|
|
28
|
+
uiConfig[ExtensionPoint[ep]] = {};
|
|
29
|
+
}
|
|
30
|
+
|
|
24
31
|
inject('plugin', {
|
|
25
32
|
// Plugins should not use these - but we will pass them in for now as a 2nd argument
|
|
26
33
|
// in case there are use cases not covered that require direct access - we may remove access later
|
|
@@ -251,6 +258,18 @@ export default function({
|
|
|
251
258
|
});
|
|
252
259
|
});
|
|
253
260
|
|
|
261
|
+
// UI Configuration - copy UI config from a plugin into the global uiConfig object
|
|
262
|
+
Object.keys(plugin.uiConfig).forEach((actionType) => {
|
|
263
|
+
Object.keys(plugin.uiConfig[actionType]).forEach((actionLocation) => {
|
|
264
|
+
plugin.uiConfig[actionType][actionLocation].forEach((action) => {
|
|
265
|
+
if (!uiConfig[actionType][actionLocation]) {
|
|
266
|
+
uiConfig[actionType][actionLocation] = [];
|
|
267
|
+
}
|
|
268
|
+
uiConfig[actionType][actionLocation].push(action);
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
|
|
254
273
|
// l10n
|
|
255
274
|
Object.keys(plugin.l10n).forEach((name) => {
|
|
256
275
|
plugin.l10n[name].forEach((fn) => {
|
|
@@ -334,6 +353,20 @@ export default function({
|
|
|
334
353
|
return validators[name];
|
|
335
354
|
},
|
|
336
355
|
|
|
356
|
+
/**
|
|
357
|
+
* Return the UI configuration for the given type and location
|
|
358
|
+
*/
|
|
359
|
+
getUIConfig(type, uiArea) {
|
|
360
|
+
return uiConfig[type][uiArea] || [];
|
|
361
|
+
},
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Returns all UI Configuration (useful for debugging)
|
|
365
|
+
*/
|
|
366
|
+
getAllUIConfig() {
|
|
367
|
+
return uiConfig;
|
|
368
|
+
},
|
|
369
|
+
|
|
337
370
|
// Timestamp that a UI package was last loaded
|
|
338
371
|
// Typically used to invalidate caches (e.g. i18n) when new plugins are loaded
|
|
339
372
|
get lastLoad() {
|
package/core/types.ts
CHANGED
|
@@ -31,10 +31,111 @@ export type OnEnterLeavePackageConfig = {
|
|
|
31
31
|
isExt: string,
|
|
32
32
|
oldIsExt: string
|
|
33
33
|
}
|
|
34
|
+
|
|
34
35
|
export type OnNavToPackage = (store: any, config: OnEnterLeavePackageConfig) => Promise<void>;
|
|
35
36
|
export type OnNavAwayFromPackage = (store: any, config: OnEnterLeavePackageConfig) => Promise<void>;
|
|
36
37
|
export type OnLogOut = (store: any) => Promise<void>;
|
|
37
38
|
|
|
39
|
+
/** Enum regarding the extensionable areas/places of the UI */
|
|
40
|
+
export enum ExtensionPoint {
|
|
41
|
+
ACTION = 'Action', // eslint-disable-line no-unused-vars
|
|
42
|
+
TAB = 'Tab', // eslint-disable-line no-unused-vars
|
|
43
|
+
PANEL = 'Panel', // eslint-disable-line no-unused-vars
|
|
44
|
+
CARD = 'Card', // eslint-disable-line no-unused-vars
|
|
45
|
+
TABLE_COL = 'TableColumn', // eslint-disable-line no-unused-vars
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Enum regarding action locations that are extensionable in the UI */
|
|
49
|
+
export enum ActionLocation {
|
|
50
|
+
HEADER = 'header-action', // eslint-disable-line no-unused-vars
|
|
51
|
+
TABLE = 'table-action', // eslint-disable-line no-unused-vars
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** Enum regarding panel locations that are extensionable in the UI */
|
|
55
|
+
export enum PanelLocation {
|
|
56
|
+
DETAILS_MASTHEAD = 'details-masthead', // eslint-disable-line no-unused-vars
|
|
57
|
+
DETAIL_TOP = 'detail-top', // eslint-disable-line no-unused-vars
|
|
58
|
+
RESOURCE_LIST = 'resource-list', // eslint-disable-line no-unused-vars
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** Enum regarding tab locations that are extensionable in the UI */
|
|
62
|
+
export enum TabLocation {
|
|
63
|
+
RESOURCE_DETAIL = 'tab', // eslint-disable-line no-unused-vars
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Enum regarding card locations that are extensionable in the UI */
|
|
67
|
+
export enum CardLocation {
|
|
68
|
+
CLUSTER_DASHBOARD_CARD = 'cluster-dashboard-card', // eslint-disable-line no-unused-vars
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** Enum regarding table col locations that are extensionable in the UI */
|
|
72
|
+
export enum TableColumnLocation {
|
|
73
|
+
RESOURCE = 'resource-list', // eslint-disable-line no-unused-vars
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Definition of the shortcut object (keyboard shortcuts) */
|
|
77
|
+
export type ShortCutKey = {
|
|
78
|
+
windows?: string[];
|
|
79
|
+
mac?: string[];
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/** Definition of the action options (table actions) */
|
|
83
|
+
export type ActionOpts = {
|
|
84
|
+
event: any;
|
|
85
|
+
isAlt: boolean;
|
|
86
|
+
action: any;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/** Definition of an extension action (options that can be passed when setting an extension action) */
|
|
90
|
+
export type Action = {
|
|
91
|
+
label?: string;
|
|
92
|
+
labelKey?: string;
|
|
93
|
+
tooltipKey?: string;
|
|
94
|
+
tooltip?: string;
|
|
95
|
+
shortcut?: string | ShortCutKey;
|
|
96
|
+
svg?: Function;
|
|
97
|
+
icon?: string;
|
|
98
|
+
multiple?: boolean;
|
|
99
|
+
enabled?: (ctx: any) => boolean;
|
|
100
|
+
invoke: (opts: ActionOpts, resources: any[]) => void | boolean | Promise<boolean>;
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
/** Definition of a panel (options that can be passed when defining an extension panel enhancement) */
|
|
104
|
+
export type Panel = {
|
|
105
|
+
component: Function;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
/** Definition of a card (options that can be passed when defining an extension card enhancement) */
|
|
109
|
+
export type Card = {
|
|
110
|
+
label?: string;
|
|
111
|
+
labelKey?: string;
|
|
112
|
+
component: Function;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
export type TableColumn = any;
|
|
116
|
+
|
|
117
|
+
/** Definition of a tab (options that can be passed when defining an extension tab enhancement) */
|
|
118
|
+
export type Tab = {
|
|
119
|
+
name: string;
|
|
120
|
+
label?: string;
|
|
121
|
+
labelKey?: string;
|
|
122
|
+
tooltipKey?: string;
|
|
123
|
+
tooltip?: string;
|
|
124
|
+
showHeader?: boolean;
|
|
125
|
+
weight?: number;
|
|
126
|
+
component: Function;
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
/** Definition of the locationConfig object (used in extensions) */
|
|
130
|
+
export type LocationConfig = {
|
|
131
|
+
product?: string[],
|
|
132
|
+
resource?: string[],
|
|
133
|
+
namespace?: string[],
|
|
134
|
+
cluster?: string[],
|
|
135
|
+
id?: string[],
|
|
136
|
+
mode?: string[]
|
|
137
|
+
};
|
|
138
|
+
|
|
38
139
|
/**
|
|
39
140
|
* Interface for a Dashboard plugin
|
|
40
141
|
*/
|
|
@@ -63,7 +164,7 @@ export interface IPlugin {
|
|
|
63
164
|
validators: {[key: string]: Function};
|
|
64
165
|
|
|
65
166
|
/**
|
|
66
|
-
* Add a module
|
|
167
|
+
* Add a module containing localisations for a specific locale
|
|
67
168
|
*/
|
|
68
169
|
addL10n(locale: string, fn: Function): void;
|
|
69
170
|
|
|
@@ -73,6 +174,31 @@ export interface IPlugin {
|
|
|
73
174
|
addRoute(route: RouteConfig): void;
|
|
74
175
|
addRoute(parent: string, route: RouteConfig): void;
|
|
75
176
|
|
|
177
|
+
/**
|
|
178
|
+
* Adds an action/button to the UI
|
|
179
|
+
*/
|
|
180
|
+
addAction(where: ActionLocation | string, when: LocationConfig | string, action: Action): void;
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Adds a tab to the UI (ResourceTabs component)
|
|
184
|
+
*/
|
|
185
|
+
addTab(where: TabLocation | string, when: LocationConfig | string, action: Tab): void;
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Adds a panel/component to the UI
|
|
189
|
+
*/
|
|
190
|
+
addPanel(where: PanelLocation | string, when: LocationConfig | string, action: Panel): void;
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Adds a card to the UI
|
|
194
|
+
*/
|
|
195
|
+
addCard(where: CardLocation | string, when: LocationConfig | string, action: Card): void;
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Adds a new column to the SortableTable component
|
|
199
|
+
*/
|
|
200
|
+
addTableColumn(where: TableColumnLocation | string, when: LocationConfig | string, action: TableColumn): void;
|
|
201
|
+
|
|
76
202
|
/**
|
|
77
203
|
* Set the component to use for the landing home page
|
|
78
204
|
* @param component Home page component
|
|
@@ -116,7 +242,7 @@ export interface IPlugin {
|
|
|
116
242
|
onLogOut?: OnLogOut
|
|
117
243
|
): void;
|
|
118
244
|
|
|
119
|
-
|
|
245
|
+
/**
|
|
120
246
|
* Register 'something' that can be dynamically loaded - e.g. model, edit, create, list, i18n
|
|
121
247
|
* @param {String} type type of thing to register, e.g. 'edit'
|
|
122
248
|
* @param {String} name unique name of 'something'
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rancher/create-pkg",
|
|
3
|
+
"version": "0.1.37",
|
|
4
|
+
"lockfileVersion": 1,
|
|
5
|
+
"requires": true,
|
|
6
|
+
"dependencies": {
|
|
7
|
+
"fs-extra": {
|
|
8
|
+
"version": "10.1.0",
|
|
9
|
+
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
|
|
10
|
+
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
|
|
11
|
+
"requires": {
|
|
12
|
+
"graceful-fs": "^4.2.0",
|
|
13
|
+
"jsonfile": "^6.0.1",
|
|
14
|
+
"universalify": "^2.0.0"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"graceful-fs": {
|
|
18
|
+
"version": "4.2.10",
|
|
19
|
+
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
|
|
20
|
+
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
|
|
21
|
+
},
|
|
22
|
+
"jsonfile": {
|
|
23
|
+
"version": "6.1.0",
|
|
24
|
+
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
|
|
25
|
+
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
|
|
26
|
+
"requires": {
|
|
27
|
+
"graceful-fs": "^4.1.6",
|
|
28
|
+
"universalify": "^2.0.0"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"universalify": {
|
|
32
|
+
"version": "2.0.0",
|
|
33
|
+
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
|
|
34
|
+
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -30,7 +30,7 @@ export default {
|
|
|
30
30
|
},
|
|
31
31
|
|
|
32
32
|
async fetch() {
|
|
33
|
-
await this.$store.dispatch('catalog/load');
|
|
33
|
+
await this.$store.dispatch('catalog/load', { force: true, reset: true });
|
|
34
34
|
|
|
35
35
|
this.allOperations = await this.$store.dispatch('cluster/findAll', { type: CATALOG.OPERATION });
|
|
36
36
|
},
|
package/detail/pod.vue
CHANGED
|
@@ -98,7 +98,7 @@ export default {
|
|
|
98
98
|
stateDisplay: status ? this.value.containerStateDisplay(status) : undefined,
|
|
99
99
|
stateBackground: status ? this.value.containerStateColor(status).replace('text', 'bg') : undefined,
|
|
100
100
|
nameSort: sortableNumericSuffix(container.name).toLowerCase(),
|
|
101
|
-
readyIcon: status?.ready ? 'icon-checkmark
|
|
101
|
+
readyIcon: status?.ready ? 'icon-checkmark text-success ml-5' : 'icon-x text-error ml-5',
|
|
102
102
|
availableActions: this.value.containerActions,
|
|
103
103
|
stateObj: status, // Required if there's a description
|
|
104
104
|
stateDescription: descriptions.join(' | '), // Required to display the description
|
|
@@ -9,7 +9,7 @@ import Tab from '@shell/components/Tabbed/Tab';
|
|
|
9
9
|
import { allHash } from '@shell/utils/promise';
|
|
10
10
|
import { CAPI, MANAGEMENT, NORMAN, SNAPSHOT } from '@shell/config/types';
|
|
11
11
|
import {
|
|
12
|
-
STATE, NAME as NAME_COL, AGE, AGE_NORMAN, STATE_NORMAN, ROLES, MACHINE_NODE_OS, MANAGEMENT_NODE_OS, NAME,
|
|
12
|
+
STATE, NAME as NAME_COL, AGE, AGE_NORMAN, INTERNAL_EXTERNAL_IP, STATE_NORMAN, ROLES, MACHINE_NODE_OS, MANAGEMENT_NODE_OS, NAME,
|
|
13
13
|
} from '@shell/config/table-headers';
|
|
14
14
|
import CustomCommand from '@shell/edit/provisioning.cattle.io.cluster/CustomCommand';
|
|
15
15
|
import AsyncButton from '@shell/components/AsyncButton.vue';
|
|
@@ -17,7 +17,7 @@ import AnsiUp from 'ansi_up';
|
|
|
17
17
|
import day from 'dayjs';
|
|
18
18
|
import { addParams } from '@shell/utils/url';
|
|
19
19
|
import { base64Decode } from '@shell/utils/crypto';
|
|
20
|
-
import { DATE_FORMAT, TIME_FORMAT } from '@shell/store/prefs';
|
|
20
|
+
import { DATE_FORMAT, TIME_FORMAT, SCALE_POOL_PROMPT } from '@shell/store/prefs';
|
|
21
21
|
import { escapeHtml } from '@shell/utils/string';
|
|
22
22
|
import MachineSummaryGraph from '@shell/components/formatter/MachineSummaryGraph';
|
|
23
23
|
import Socket, {
|
|
@@ -29,6 +29,7 @@ import Socket, {
|
|
|
29
29
|
} from '@shell/utils/socket';
|
|
30
30
|
import { get } from '@shell/utils/object';
|
|
31
31
|
import CapiMachineDeployment from '@shell/models/cluster.x-k8s.io.machinedeployment';
|
|
32
|
+
import { isAlternate } from '@shell/utils/platform';
|
|
32
33
|
|
|
33
34
|
let lastId = 1;
|
|
34
35
|
const ansiup = new AnsiUp();
|
|
@@ -253,7 +254,9 @@ export default {
|
|
|
253
254
|
const emptyPools = (this.value.spec.rkeConfig?.machinePools || []).filter((mp) => {
|
|
254
255
|
const machinePrefix = `${ this.value.name }-${ mp.name }`;
|
|
255
256
|
const machines = this.value.machines.filter((machine) => {
|
|
256
|
-
|
|
257
|
+
const isElementalCluster = machine.spec?.infrastructureRef?.apiVersion.startsWith('elemental.cattle.io');
|
|
258
|
+
|
|
259
|
+
return !isElementalCluster ? machine.spec?.infrastructureRef?.name.startsWith(machinePrefix) : machine.spec?.infrastructureRef?.name.includes(machinePrefix);
|
|
257
260
|
});
|
|
258
261
|
|
|
259
262
|
return machines.length === 0;
|
|
@@ -356,7 +359,7 @@ export default {
|
|
|
356
359
|
formatterOpts: { reference: 'kubeNodeDetailLocation' },
|
|
357
360
|
dashIfEmpty: true,
|
|
358
361
|
},
|
|
359
|
-
|
|
362
|
+
INTERNAL_EXTERNAL_IP,
|
|
360
363
|
MACHINE_NODE_OS,
|
|
361
364
|
ROLES,
|
|
362
365
|
AGE,
|
|
@@ -375,7 +378,7 @@ export default {
|
|
|
375
378
|
formatterOpts: { reference: 'kubeNodeDetailLocation' },
|
|
376
379
|
dashIfEmpty: true,
|
|
377
380
|
},
|
|
378
|
-
|
|
381
|
+
INTERNAL_EXTERNAL_IP,
|
|
379
382
|
MANAGEMENT_NODE_OS,
|
|
380
383
|
ROLES,
|
|
381
384
|
AGE
|
|
@@ -500,6 +503,24 @@ export default {
|
|
|
500
503
|
},
|
|
501
504
|
|
|
502
505
|
methods: {
|
|
506
|
+
toggleScaleDownModal( event, resources ) {
|
|
507
|
+
// Check if the user held alt key when an action is clicked.
|
|
508
|
+
const alt = isAlternate(event);
|
|
509
|
+
const showScalePoolPrompt = this.$store.getters['prefs/get'](SCALE_POOL_PROMPT);
|
|
510
|
+
|
|
511
|
+
// Prompt if showScalePoolPrompt pref not store and user did not held alt key
|
|
512
|
+
if (!alt && !showScalePoolPrompt) {
|
|
513
|
+
this.$store.dispatch('management/promptModal', {
|
|
514
|
+
component: 'ScalePoolDownDialog',
|
|
515
|
+
resources,
|
|
516
|
+
modalWidth: '450px'
|
|
517
|
+
});
|
|
518
|
+
} else {
|
|
519
|
+
// User held alt key, so don't prompt
|
|
520
|
+
resources.scalePool(-1);
|
|
521
|
+
}
|
|
522
|
+
},
|
|
523
|
+
|
|
503
524
|
async takeSnapshot(btnCb) {
|
|
504
525
|
try {
|
|
505
526
|
await this.value.takeSnapshot();
|
|
@@ -679,16 +700,21 @@ export default {
|
|
|
679
700
|
</div>
|
|
680
701
|
</div>
|
|
681
702
|
<div
|
|
682
|
-
v-if="group.ref"
|
|
683
|
-
class="right mr-
|
|
703
|
+
v-if="group.ref && poolSummaryInfo[group.ref]"
|
|
704
|
+
class="right group-header-buttons mr-20"
|
|
684
705
|
>
|
|
706
|
+
<MachineSummaryGraph
|
|
707
|
+
:row="poolSummaryInfo[group.ref]"
|
|
708
|
+
:horizontal="true"
|
|
709
|
+
class="mr-20"
|
|
710
|
+
/>
|
|
685
711
|
<template v-if="value.hasLink('update') && group.ref.showScalePool">
|
|
686
712
|
<button
|
|
687
713
|
v-tooltip="t('node.list.scaleDown')"
|
|
688
714
|
:disabled="!group.ref.canScaleDownPool()"
|
|
689
715
|
type="button"
|
|
690
716
|
class="btn btn-sm role-secondary"
|
|
691
|
-
@click="group.ref
|
|
717
|
+
@click="toggleScaleDownModal($event, group.ref)"
|
|
692
718
|
>
|
|
693
719
|
<i class="icon icon-sm icon-minus" />
|
|
694
720
|
</button>
|
|
@@ -772,7 +798,7 @@ export default {
|
|
|
772
798
|
:disabled="group.ref.spec.quantity < 2"
|
|
773
799
|
type="button"
|
|
774
800
|
class="btn btn-sm role-secondary"
|
|
775
|
-
@click="group.ref
|
|
801
|
+
@click="toggleScaleDownModal($event, group.ref)"
|
|
776
802
|
>
|
|
777
803
|
<i class="icon icon-sm icon-minus" />
|
|
778
804
|
</button>
|
package/detail/service.vue
CHANGED
|
@@ -11,7 +11,6 @@ import Tab from '@shell/components/Tabbed/Tab';
|
|
|
11
11
|
import { CATTLE_PUBLIC_ENDPOINTS } from '@shell/config/labels-annotations';
|
|
12
12
|
import { KEY, VALUE } from '@shell/config/table-headers';
|
|
13
13
|
import { POD } from '@shell/config/types';
|
|
14
|
-
import { allHash } from '@shell/utils/promise';
|
|
15
14
|
import { findBy } from '@shell/utils/array';
|
|
16
15
|
|
|
17
16
|
export default {
|
|
@@ -36,13 +35,7 @@ export default {
|
|
|
36
35
|
},
|
|
37
36
|
|
|
38
37
|
async fetch() {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const res = await allHash(hash);
|
|
42
|
-
|
|
43
|
-
for (const k in res) {
|
|
44
|
-
this[k] = res[k];
|
|
45
|
-
}
|
|
38
|
+
await this.value.fetchPods();
|
|
46
39
|
},
|
|
47
40
|
|
|
48
41
|
data() {
|
|
@@ -159,7 +152,7 @@ export default {
|
|
|
159
152
|
:weight="4"
|
|
160
153
|
>
|
|
161
154
|
<ResourceTable
|
|
162
|
-
:rows="pods"
|
|
155
|
+
:rows="value.pods"
|
|
163
156
|
:headers="podTableHeaders"
|
|
164
157
|
key-field="id"
|
|
165
158
|
:table-actions="false"
|
|
@@ -9,9 +9,9 @@ export default {
|
|
|
9
9
|
},
|
|
10
10
|
|
|
11
11
|
props: {
|
|
12
|
-
|
|
13
|
-
type:
|
|
14
|
-
|
|
12
|
+
onAdd: {
|
|
13
|
+
type: Function,
|
|
14
|
+
default: () => {}
|
|
15
15
|
}
|
|
16
16
|
},
|
|
17
17
|
|
|
@@ -19,12 +19,6 @@ export default {
|
|
|
19
19
|
return { bindings: [] };
|
|
20
20
|
},
|
|
21
21
|
|
|
22
|
-
computed: {
|
|
23
|
-
onAdd() {
|
|
24
|
-
return this.resources[0];
|
|
25
|
-
},
|
|
26
|
-
},
|
|
27
|
-
|
|
28
22
|
methods: {
|
|
29
23
|
close() {
|
|
30
24
|
this.$emit('close');
|
|
@@ -39,33 +33,33 @@ export default {
|
|
|
39
33
|
</script>
|
|
40
34
|
|
|
41
35
|
<template>
|
|
42
|
-
<Card
|
|
43
|
-
class="prompt-rotate"
|
|
44
|
-
:show-highlight-border="false"
|
|
36
|
+
<Card
|
|
37
|
+
class="prompt-rotate"
|
|
38
|
+
:show-highlight-border="false"
|
|
45
39
|
>
|
|
46
|
-
<h4
|
|
47
|
-
slot="title"
|
|
48
|
-
class="text-default-text"
|
|
49
|
-
v-html="t('addClusterMemberDialog.title')"
|
|
40
|
+
<h4
|
|
41
|
+
slot="title"
|
|
42
|
+
class="text-default-text"
|
|
43
|
+
v-html="t('addClusterMemberDialog.title')"
|
|
50
44
|
/>
|
|
51
45
|
|
|
52
|
-
<div
|
|
53
|
-
slot="body"
|
|
54
|
-
class="pl-10 pr-10"
|
|
46
|
+
<div
|
|
47
|
+
slot="body"
|
|
48
|
+
class="pl-10 pr-10"
|
|
55
49
|
>
|
|
56
|
-
<ClusterPermissionsEditor
|
|
57
|
-
v-model="bindings"
|
|
58
|
-
:use-two-columns-for-custom="true"
|
|
50
|
+
<ClusterPermissionsEditor
|
|
51
|
+
v-model="bindings"
|
|
52
|
+
:use-two-columns-for-custom="true"
|
|
59
53
|
/>
|
|
60
54
|
</div>
|
|
61
55
|
|
|
62
|
-
<div
|
|
63
|
-
slot="actions"
|
|
64
|
-
class="buttons"
|
|
56
|
+
<div
|
|
57
|
+
slot="actions"
|
|
58
|
+
class="buttons"
|
|
65
59
|
>
|
|
66
|
-
<button
|
|
67
|
-
class="btn role-secondary mr-10"
|
|
68
|
-
@click="close"
|
|
60
|
+
<button
|
|
61
|
+
class="btn role-secondary mr-10"
|
|
62
|
+
@click="close"
|
|
69
63
|
>
|
|
70
64
|
{{ t('generic.cancel') }}
|
|
71
65
|
</button>
|