@rancher/shell 1.2.0 → 2.0.0
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/data/aws-regions.json +9 -0
- package/assets/images/vendor/openid.svg +18 -0
- package/assets/styles/app.scss +1 -2
- package/assets/styles/fonts/_icons.scss +3 -3
- package/assets/styles/global/_columns.scss +1 -1
- package/assets/styles/global/_labeled-input.scss +1 -0
- package/assets/styles/global/_layout.scss +99 -0
- package/assets/styles/themes/_csp.scss +2 -2
- package/assets/styles/themes/_dark.scss +8 -2
- package/assets/styles/themes/_light.scss +2 -1
- package/assets/styles/themes/_suse.scss +1 -1
- package/assets/styles/vendor/vue-select.scss +5 -0
- package/assets/translations/en-us.yaml +299 -63
- package/assets/translations/zh-hans.yaml +7 -31
- package/babel.config.js +8 -2
- package/chart/__tests__/S3.test.ts +9 -2
- package/chart/gatekeeper.vue +2 -11
- package/chart/istio.vue +1 -10
- package/chart/logging/index.vue +2 -11
- package/chart/monitoring/alerting/index.vue +7 -21
- package/chart/monitoring/grafana/index.vue +61 -2
- package/chart/monitoring/index.vue +52 -26
- package/chart/monitoring/prometheus/index.vue +39 -45
- package/chart/rancher-backup/S3.vue +11 -9
- package/chart/rancher-backup/index.vue +18 -15
- package/cloud-credential/__tests__/harvester.test.ts +18 -0
- package/cloud-credential/azure.vue +4 -17
- package/cloud-credential/generic.vue +18 -9
- package/cloud-credential/harvester.vue +11 -3
- package/components/AppModal.vue +167 -0
- package/components/AssignTo.vue +7 -4
- package/components/AsyncButton.vue +27 -5
- package/components/BackLink.vue +4 -4
- package/components/BannerGraphic.vue +1 -0
- package/components/BrandImage.vue +47 -1
- package/components/Carousel.vue +15 -8
- package/components/Certificates.vue +161 -0
- package/components/ClusterBadge.vue +12 -3
- package/components/ClusterIconMenu.vue +55 -12
- package/components/ClusterProviderIcon.vue +14 -3
- package/components/CodeMirror.vue +111 -17
- package/components/CommunityLinks.vue +12 -8
- package/components/CopyCode.vue +6 -2
- package/components/CopyToClipboard.vue +2 -1
- package/components/CopyToClipboardText.vue +14 -9
- package/components/CreateDriver.vue +81 -0
- package/components/CruResource.vue +52 -27
- package/components/DetailTop.vue +2 -2
- package/components/Dialog.vue +6 -5
- package/components/DisableAuthProviderModal.vue +14 -8
- package/components/DraggableZone.vue +2 -2
- package/components/EtcdInfoBanner.vue +5 -5
- package/components/ExplorerMembers.vue +3 -3
- package/components/ExplorerProjectsNamespaces.vue +31 -7
- package/components/FixedBanner.vue +48 -36
- package/components/GlobalRoleBindings.vue +26 -0
- package/components/IconOrSvg.vue +1 -1
- package/components/Import.vue +10 -6
- package/components/Inactivity.vue +1 -5
- package/components/KeyValueView.vue +14 -10
- package/components/Markdown.vue +16 -12
- package/components/MessageLink.vue +2 -2
- package/components/ModalWithCard.vue +5 -8
- package/components/MoveModal.vue +35 -33
- package/components/PodSecurityAdmission.vue +3 -3
- package/components/PromptChangePassword.vue +33 -33
- package/components/PromptModal.vue +11 -21
- package/components/PromptRemove.vue +11 -17
- package/components/PromptRestore.vue +18 -16
- package/components/Questions/__tests__/Boolean.test.ts +9 -19
- package/components/Questions/__tests__/Float.test.ts +9 -19
- package/components/Questions/__tests__/Int.test.ts +9 -19
- package/components/Questions/__tests__/String.test.ts +9 -19
- package/components/Questions/__tests__/Yaml.test.ts +9 -20
- package/components/Questions/__tests__/utils/questions-defaults.ts +20 -0
- package/components/Questions/index.vue +19 -3
- package/components/ResourceCancelModal.vue +34 -29
- package/components/ResourceDetail/Masthead.vue +48 -16
- package/components/ResourceDetail/index.vue +6 -4
- package/components/ResourceList/Masthead.vue +10 -9
- package/components/ResourceList/index.vue +65 -14
- package/components/ResourceTable.vue +87 -21
- package/components/ResourceYaml.vue +35 -5
- package/components/SelectIconGrid.vue +3 -3
- package/components/SideNav.vue +50 -94
- package/components/SingleClusterInfo.vue +4 -4
- package/components/SortableTable/THead.vue +33 -21
- package/components/SortableTable/filtering.js +9 -1
- package/components/SortableTable/grouping.js +8 -1
- package/components/SortableTable/index.vue +143 -44
- package/components/SortableTable/paging.js +36 -7
- package/components/SortableTable/selection.js +2 -1
- package/components/SortableTable/sorting.js +24 -7
- package/components/StatusTable.vue +5 -1
- package/components/Tabbed/index.vue +18 -1
- package/components/TableDataUserIcon.vue +47 -0
- package/components/TypeDescription.vue +1 -0
- package/components/Wizard.vue +1 -0
- package/components/YamlEditor.vue +1 -0
- package/components/__tests__/AppModal.test.ts +98 -0
- package/components/__tests__/AsyncButton.test.ts +1 -3
- package/components/__tests__/BackLink.test.ts +1 -1
- package/components/__tests__/ButtonGroup.test.ts +3 -6
- package/components/__tests__/Carousel.test.ts +43 -0
- package/components/__tests__/Certificates.test.ts +29 -0
- package/components/__tests__/CodeMirror.test.ts +87 -0
- package/components/__tests__/CopyCode.test.ts +5 -4
- package/components/__tests__/CruResource.test.ts +10 -9
- package/components/__tests__/EtcdInfoBanner.test.ts +37 -0
- package/components/__tests__/FixedBanner.test.ts +5 -20
- package/components/__tests__/NamespaceFilter.test.ts +9 -18
- package/components/__tests__/TabTitle.test.ts +129 -0
- package/components/auth/AzureWarning.vue +2 -2
- package/components/auth/RoleDetailEdit.vue +10 -0
- package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
- package/components/auth/login/oidc.vue +7 -1
- package/components/fleet/FleetBundles.vue +5 -11
- package/components/fleet/FleetClusters.vue +9 -9
- package/components/fleet/FleetIntro.vue +11 -17
- package/components/fleet/FleetNoWorkspaces.vue +2 -2
- package/components/fleet/FleetRepos.vue +63 -27
- package/components/fleet/FleetResources.vue +6 -1
- package/components/fleet/FleetStatus.vue +3 -3
- package/components/fleet/FleetSummary.vue +35 -30
- package/components/fleet/ForceDirectedTreeChart/index.vue +9 -3
- package/components/fleet/__tests__/FleetSummary.test.ts +316 -0
- package/components/form/ArrayList.vue +22 -18
- package/components/form/ArrayListSelect.vue +5 -0
- package/components/form/BannerSettings.vue +3 -0
- package/components/form/ClusterAppearance.vue +132 -0
- package/components/form/ColorInput.vue +1 -0
- package/components/form/Error.vue +3 -3
- package/components/form/FileSelector.vue +1 -0
- package/components/form/Footer.vue +2 -2
- package/components/form/GitPicker.vue +83 -38
- package/components/form/KeyValue.vue +69 -48
- package/components/form/LabeledSelect.vue +145 -41
- package/components/form/Labels.vue +3 -1
- package/components/form/NameNsDescription.vue +26 -9
- package/components/form/Password.vue +3 -1
- package/components/form/ResourceLabeledSelect.vue +187 -0
- package/components/form/ResourceTabs/index.vue +31 -15
- package/components/form/SecretSelector.vue +93 -18
- package/components/form/SelectOrCreateAuthSecret.vue +132 -59
- package/components/form/SimpleSecretSelector.vue +88 -28
- package/components/form/__tests__/BannerSettings.test.ts +53 -0
- package/components/form/__tests__/KeyValue.test.ts +120 -11
- package/components/form/__tests__/LabeledSelect.test.ts +0 -18
- package/components/form/__tests__/{NameNsDescription.ts → NameNsDescription.test.ts} +25 -15
- package/components/form/labeled-select-utils/labeled-select-pagination.ts +151 -0
- package/components/form/labeled-select-utils/labeled-select.utils.ts +122 -0
- package/components/formatter/AppSummaryGraph.vue +2 -2
- package/components/formatter/Checked.vue +11 -3
- package/components/formatter/CloudCredPublicData.vue +30 -0
- package/components/formatter/ClusterLink.vue +2 -2
- package/components/formatter/ClusterProvider.vue +1 -18
- package/components/formatter/FleetClusterSummaryGraph.vue +27 -0
- package/components/formatter/FleetSummaryGraph.vue +25 -12
- package/components/formatter/ImagePercentageBar.vue +0 -4
- package/components/formatter/IngressTarget.vue +18 -7
- package/components/formatter/Link.vue +2 -2
- package/components/formatter/LinkDetail.vue +2 -2
- package/components/formatter/LinkDetailImage.vue +2 -2
- package/components/formatter/LinkName.vue +2 -2
- package/components/formatter/LiveDuration.vue +1 -1
- package/components/formatter/PercentageBar.vue +1 -1
- package/components/formatter/PrincipalGroupBindings.vue +2 -2
- package/components/formatter/SecretType.vue +2 -2
- package/components/formatter/VirtualServiceGateways.vue +2 -2
- package/components/formatter/WorkloadDetailEndpoints.vue +12 -22
- package/components/formatter/__tests__/Checked.test.ts +19 -0
- package/components/formatter/__tests__/LinkDetail.test.ts +5 -5
- package/components/formatter/__tests__/WorkloadDetailEndpoints.test.ts +81 -0
- package/components/nav/Group.vue +9 -7
- package/components/nav/Header.vue +84 -45
- package/components/nav/Jump.vue +19 -9
- package/components/nav/NamespaceFilter.vue +8 -1
- package/components/nav/TopLevelMenu.vue +391 -132
- package/components/nav/Type.vue +71 -106
- package/components/nav/WindowManager/ContainerLogs.vue +120 -19
- package/components/nav/WindowManager/ContainerShell.vue +6 -1
- package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +186 -0
- package/components/nav/WindowManager/index.vue +11 -10
- package/components/nav/__tests__/TopLevelMenu.test.ts +400 -6
- package/components/nav/__tests__/Type.test.ts +322 -97
- package/components/nuxt/nuxt-child.js +9 -78
- package/components/nuxt/nuxt-error.vue +1 -1
- package/components/nuxt/nuxt-link.client.js +13 -95
- package/{layouts → components/templates}/blank.vue +1 -1
- package/{layouts → components/templates}/default.vue +11 -101
- package/{layouts → components/templates}/error.vue +13 -26
- package/{layouts → components/templates}/home.vue +4 -1
- package/{layouts → components/templates}/plain.vue +4 -1
- package/{layouts → components/templates}/standalone.vue +1 -5
- package/{layouts → components/templates}/unauthenticated.vue +2 -3
- package/composables/useCompactInput.test.ts +36 -0
- package/composables/useCompactInput.ts +20 -0
- package/composables/useLabeledFormElement.test.ts +135 -0
- package/composables/useLabeledFormElement.ts +138 -0
- package/config/harvester-manager-types.js +2 -0
- package/config/home-links.js +2 -1
- package/config/labels-annotations.js +2 -1
- package/config/middleware.js +0 -6
- package/config/pagination-table-headers.js +57 -0
- package/config/pod-security-admission.ts +1 -1
- package/config/private-label.js +21 -1
- package/config/product/auth.js +1 -0
- package/config/product/explorer.js +166 -45
- package/config/product/fleet.js +6 -1
- package/config/product/legacy.js +2 -11
- package/config/product/manager.js +51 -25
- package/config/query-params.js +2 -0
- package/config/roles.ts +23 -0
- package/config/router/index.js +23 -0
- package/config/router/navigation-guards/attempt-first-login.js +73 -0
- package/config/router/navigation-guards/authentication.js +63 -0
- package/config/router/navigation-guards/index.js +15 -0
- package/config/router/navigation-guards/load-initial-settings.js +15 -0
- package/config/router/routes.js +487 -0
- package/config/settings.ts +31 -2
- package/config/store.js +8 -4
- package/config/system-namespaces.js +3 -0
- package/config/table-headers.js +66 -1
- package/config/types.js +35 -20
- package/config/uiplugins.js +10 -5
- package/core/plugin-helpers.js +4 -6
- package/core/plugin-routes.ts +56 -114
- package/core/plugin.ts +18 -11
- package/core/plugins-loader.js +7 -9
- package/core/plugins.js +289 -285
- package/core/types-provisioning.ts +7 -0
- package/creators/app/files/.eslintignore +0 -2
- package/creators/app/files/.gitlab-ci.yml +14 -0
- package/creators/app/files/.vscode/settings.json +0 -1
- package/creators/app/init +19 -0
- package/creators/pkg/files/.github/workflows/build-extension-catalog.yml +2 -6
- package/creators/pkg/files/.github/workflows/build-extension-charts.yml +2 -6
- package/creators/pkg/init +32 -0
- package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +77 -0
- package/detail/__tests__/service.test.ts +62 -0
- package/detail/catalog.cattle.io.app.vue +1 -1
- package/detail/cis.cattle.io.clusterscan.vue +14 -3
- package/detail/fleet.cattle.io.bundle.vue +1 -1
- package/detail/fleet.cattle.io.cluster.vue +11 -1
- package/detail/fleet.cattle.io.gitrepo.vue +15 -9
- package/detail/namespace.vue +2 -2
- package/detail/networking.k8s.io.ingress.vue +52 -19
- package/detail/node.vue +22 -3
- package/detail/provisioning.cattle.io.cluster.vue +27 -9
- package/detail/service.vue +1 -1
- package/detail/workload/index.vue +1 -0
- package/dialog/AddCustomBadgeDialog.vue +318 -161
- package/dialog/DeactivateDriverDialog.vue +118 -0
- package/dialog/RollbackWorkloadDialog.vue +2 -2
- package/dialog/RotateCertificatesDialog.vue +0 -21
- package/dialog/ScaleMachineDownDialog.vue +34 -17
- package/directives/clean-html.js +15 -0
- package/directives/clean-tooltip.js +32 -0
- package/directives/focus.js +41 -0
- package/directives/int-number.js +21 -0
- package/directives/positive-int-number.js +19 -0
- package/directives/trim-whitespace.js +19 -0
- package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +3 -2
- package/edit/__tests__/kontainerDriver.test.ts +107 -0
- package/edit/__tests__/management.cattle.io.clusterroletemplatebinding.test.ts +12 -1
- package/edit/__tests__/management.cattle.io.setting.test.ts +2 -1
- package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +2 -3
- package/edit/__tests__/nodeDriver.test.ts +107 -0
- package/edit/__tests__/service.test.ts +85 -0
- package/edit/__tests__/ui.cattle.io.navlink.test.ts +3 -1
- package/edit/auth/AuthProviderWarningBanners.vue +34 -0
- package/edit/auth/__tests__/AuthProviderWarningBanners.test.ts +19 -0
- package/edit/auth/__tests__/azuread.test.ts +241 -0
- package/edit/auth/__tests__/oidc.test.ts +137 -0
- package/edit/auth/azuread.vue +133 -31
- package/edit/auth/github.vue +5 -17
- package/edit/auth/googleoauth.vue +6 -23
- package/edit/auth/ldap/index.vue +5 -17
- package/edit/auth/oidc.vue +143 -42
- package/edit/auth/saml.vue +5 -14
- package/edit/catalog.cattle.io.clusterrepo.vue +177 -9
- package/edit/cis.cattle.io.clusterscan.vue +5 -2
- package/edit/cis.cattle.io.clusterscanbenchmark.vue +41 -9
- package/edit/cloudcredential.vue +28 -4
- package/edit/configmap.vue +10 -4
- package/edit/fleet.cattle.io.gitrepo.vue +3 -1
- package/edit/helm.cattle.io.projecthelmchart.vue +29 -19
- package/edit/kontainerDriver.vue +65 -0
- package/edit/logging-flow/Match.vue +10 -9
- package/edit/logging-flow/index.vue +4 -19
- package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +232 -2
- package/edit/logging.banzaicloud.io.output/index.vue +43 -26
- package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +3 -3
- package/edit/management.cattle.io.project.vue +3 -53
- package/edit/management.cattle.io.setting.vue +52 -2
- package/edit/management.cattle.io.user.vue +2 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +10 -7
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +21 -16
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +1 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +2 -2
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +1 -1
- package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +15 -3
- package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +4 -1
- package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +2 -0
- package/edit/monitoring.coreos.com.prometheusrule/index.vue +2 -0
- package/edit/networking.k8s.io.ingress/Rules.vue +8 -3
- package/edit/networking.k8s.io.ingress/index.vue +64 -8
- package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +1 -0
- package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +6 -2
- package/edit/networking.k8s.io.networkpolicy/__tests__/{PolicyRuleTarget.spec.ts → PolicyRuleTarget.test.ts} +46 -7
- package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.ts → selectors.test.ts} +1 -1
- package/edit/networking.k8s.io.networkpolicy/index.vue +2 -0
- package/edit/nodeDriver.vue +65 -0
- package/edit/persistentvolume/index.vue +2 -2
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +33 -16
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +276 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +473 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.tests.ts → CustomCommand.test.ts} +3 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +228 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +73 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +77 -13
- package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +391 -0
- package/edit/provisioning.cattle.io.cluster/import.vue +4 -4
- package/edit/provisioning.cattle.io.cluster/index.vue +126 -51
- package/edit/provisioning.cattle.io.cluster/rke2.vue +325 -791
- package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +137 -0
- package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +217 -0
- package/edit/provisioning.cattle.io.cluster/{Basics.vue → tabs/Basics.vue} +123 -129
- package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +132 -0
- package/edit/provisioning.cattle.io.cluster/{MachinePool.vue → tabs/MachinePool.vue} +1 -0
- package/edit/provisioning.cattle.io.cluster/{S3Config.vue → tabs/etcd/S3Config.vue} +1 -0
- package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +135 -0
- package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +190 -0
- package/edit/provisioning.cattle.io.cluster/{RegistryConfigs.vue → tabs/registries/RegistryConfigs.vue} +3 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +148 -0
- package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +76 -0
- package/edit/resources.cattle.io.backup.vue +139 -124
- package/edit/resources.cattle.io.restore.vue +146 -126
- package/edit/service.vue +13 -0
- package/edit/serviceaccount.vue +46 -4
- package/edit/token.vue +1 -0
- package/edit/workload/Upgrading.vue +3 -2
- package/edit/workload/__tests__/Job.test.ts +1 -3
- package/edit/workload/__tests__/Upgrading.test.ts +2 -2
- package/edit/workload/index.vue +2 -1
- package/edit/workload/mixins/workload.js +35 -2
- package/edit/workload/storage/emptyDir.vue +2 -2
- package/initialize/App.vue +75 -0
- package/initialize/app-extended.js +128 -0
- package/initialize/entry-helpers.js +549 -0
- package/initialize/entry.js +32 -0
- package/initialize/install-components.js +23 -0
- package/initialize/install-directives.js +59 -0
- package/initialize/install-plugins.js +123 -0
- package/list/__tests__/workload.test.ts +1 -1
- package/list/catalog.cattle.io.app.vue +1 -0
- package/list/cis.cattle.io.clusterscan.vue +16 -10
- package/list/group.principal.vue +2 -2
- package/list/management.cattle.io.feature.vue +12 -14
- package/list/management.cattle.io.setting.vue +1 -0
- package/list/management.cattle.io.user.vue +13 -4
- package/list/networking.k8s.io.ingress.vue +36 -0
- package/list/node.vue +212 -73
- package/list/provisioning.cattle.io.cluster.vue +17 -4
- package/list/ui.cattle.io.navlink.vue +2 -2
- package/list/workload.vue +22 -0
- package/machine-config/__tests__/vmwarevsphere-pool-config-merge.test.ts +30 -0
- package/machine-config/__tests__/vmwarevsphere.test.ts +1 -3
- package/machine-config/amazonec2.vue +1 -1
- package/machine-config/azure.vue +2 -1
- package/machine-config/generic.vue +11 -15
- package/machine-config/vmwarevsphere-pool-config-merge.ts +25 -0
- package/machine-config/vmwarevsphere.vue +31 -27
- package/middleware/authenticated.js +23 -380
- package/mixins/__tests__/chart.test.ts +48 -6
- package/mixins/__tests__/create-edit-view.test.ts +2 -3
- package/mixins/auth-config.js +5 -9
- package/mixins/brand.js +102 -96
- package/mixins/chart.js +27 -13
- package/mixins/create-edit-view/index.js +2 -2
- package/mixins/fetch.client.js +42 -48
- package/mixins/labeled-form-element.ts +27 -2
- package/mixins/page-actions.js +7 -5
- package/mixins/resource-fetch-api-pagination.js +304 -0
- package/mixins/resource-fetch-namespaced.js +1 -1
- package/mixins/resource-fetch.js +46 -5
- package/models/__tests__/cluster.test.ts +44 -0
- package/models/__tests__/fleet.cattle.io.cluster.test.ts +36 -0
- package/models/__tests__/management.cattle.io.cluster.test.ts +23 -0
- package/models/__tests__/management.cattle.io.node.ts +85 -0
- package/models/__tests__/management.cattle.io.nodepool.ts +83 -0
- package/models/__tests__/namespace.test.ts +49 -9
- package/models/__tests__/provisioning.cattle.io.cluster.test.ts +241 -0
- package/models/__tests__/schema.tests.ts +24 -0
- package/models/__tests__/secret.test.ts +37 -0
- package/models/__tests__/steve-schema.test.ts +73 -0
- package/models/__tests__/storage.k8s.io.storageclass.test.ts +22 -0
- package/models/__tests__/workload.test.ts +91 -0
- package/models/catalog.cattle.io.app.js +8 -0
- package/models/catalog.cattle.io.clusterrepo.js +9 -1
- package/models/catalog.cattle.io.uiplugin.js +7 -8
- package/models/cis.cattle.io.clusterscan.js +29 -8
- package/models/cloudcredential.js +9 -1
- package/models/cluster/node.js +8 -4
- package/models/cluster/schema.js +6 -0
- package/models/cluster.js +33 -0
- package/models/cluster.x-k8s.io.machine.js +1 -1
- package/models/cluster.x-k8s.io.machinedeployment.js +14 -0
- package/models/driver.js +62 -0
- package/models/fleet.cattle.io.cluster.js +27 -11
- package/models/fleet.cattle.io.gitrepo.js +66 -13
- package/models/helm.cattle.io.projecthelmchart.js +1 -1
- package/models/kontainerdriver.js +68 -0
- package/models/management/schema.js +6 -0
- package/models/management.cattle.io.authconfig.js +3 -2
- package/models/management.cattle.io.cluster.js +16 -7
- package/models/management.cattle.io.globalrole.js +2 -0
- package/models/management.cattle.io.kontainerdriver.js +1 -0
- package/models/management.cattle.io.node.js +18 -14
- package/models/management.cattle.io.nodepool.js +17 -0
- package/models/management.cattle.io.project.js +0 -36
- package/models/management.cattle.io.setting.js +11 -7
- package/models/management.cattle.io.user.js +2 -2
- package/models/monitoring.coreos.com.receiver.js +3 -1
- package/models/monitoring.coreos.com.route.js +1 -1
- package/models/namespace.js +1 -1
- package/models/networking.k8s.io.ingress.js +2 -1
- package/models/nodedriver.js +68 -0
- package/models/pod.js +20 -0
- package/models/provisioning.cattle.io.cluster.js +125 -10
- package/models/schema.js +28 -7
- package/models/secret.js +126 -18
- package/models/service.js +2 -0
- package/models/steve-schema.ts +254 -0
- package/models/storage.k8s.io.storageclass.js +1 -1
- package/models/workload.js +17 -0
- package/models/workload.service.js +18 -0
- package/package.json +17 -14
- package/pages/about.vue +12 -6
- package/pages/account/create-key.vue +0 -1
- package/pages/account/index.vue +7 -3
- package/pages/auth/login.vue +106 -103
- package/pages/auth/logout.vue +2 -4
- package/pages/auth/setup.vue +92 -66
- package/pages/auth/verify.vue +30 -24
- package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +2 -17
- package/pages/c/_cluster/apps/charts/chart.vue +54 -9
- package/pages/c/_cluster/apps/charts/index.vue +99 -69
- package/pages/c/_cluster/apps/charts/install.helpers.js +2 -13
- package/pages/c/_cluster/apps/charts/install.vue +9 -9
- package/pages/c/_cluster/auth/config/_id.vue +0 -6
- package/pages/c/_cluster/auth/config/index.vue +15 -9
- package/pages/c/_cluster/auth/roles/index.vue +8 -10
- package/pages/c/_cluster/ecm/index.vue +0 -2
- package/pages/c/_cluster/explorer/ConfigBadge.vue +13 -8
- package/pages/c/_cluster/explorer/EventsTable.vue +18 -0
- package/pages/c/_cluster/explorer/__tests__/index.test.ts +181 -0
- package/pages/c/_cluster/explorer/index.vue +253 -91
- package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +69 -0
- package/pages/c/_cluster/explorer/tools/index.vue +10 -6
- package/pages/c/_cluster/fleet/index.vue +89 -94
- package/pages/c/_cluster/longhorn/__tests__/longhorn.index.test.ts +89 -0
- package/pages/c/_cluster/longhorn/index.vue +52 -17
- package/pages/c/_cluster/manager/cloudCredential/index.vue +18 -25
- package/pages/c/_cluster/manager/drivers/kontainerDriver/_id.vue +12 -0
- package/pages/c/_cluster/manager/drivers/kontainerDriver/create.vue +15 -0
- package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +94 -0
- package/pages/c/_cluster/manager/drivers/nodeDriver/_id.vue +12 -0
- package/pages/c/_cluster/manager/drivers/nodeDriver/create.vue +15 -0
- package/pages/c/_cluster/manager/drivers/nodeDriver/index.vue +63 -0
- package/pages/c/_cluster/manager/jwt.authentication/index.vue +235 -0
- package/pages/c/_cluster/manager/pages/_page.vue +4 -5
- package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +4 -0
- package/pages/c/_cluster/monitoring/route-receiver/index.vue +2 -2
- package/pages/c/_cluster/neuvector/index.vue +1 -0
- package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -0
- package/pages/c/_cluster/settings/banners.vue +86 -10
- package/pages/c/_cluster/settings/brand.vue +261 -38
- package/pages/c/_cluster/settings/index.vue +4 -6
- package/pages/c/_cluster/settings/links.vue +3 -2
- package/pages/c/_cluster/settings/performance.vue +71 -3
- package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +5 -2
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +12 -8
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue +9 -6
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +10 -46
- package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +11 -5
- package/pages/c/_cluster/uiplugins/InstallDialog.vue +53 -18
- package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +36 -301
- package/pages/c/_cluster/uiplugins/UninstallDialog.vue +14 -6
- package/pages/c/_cluster/uiplugins/__tests__/SetupUIPlugins.test.ts +52 -106
- package/pages/c/_cluster/uiplugins/index.vue +38 -54
- package/pages/diagnostic.vue +2 -2
- package/pages/fail-whale.vue +103 -42
- package/pages/home.vue +81 -24
- package/pages/prefs.vue +8 -4
- package/pages/support/index.vue +14 -10
- package/pkg/auto-import.js +1 -1
- package/plugins/axios.js +0 -36
- package/plugins/back-button.js +3 -5
- package/plugins/clean-html-directive.js +5 -30
- package/plugins/clean-html.js +53 -0
- package/plugins/clean-tooltip-directive.js +6 -31
- package/plugins/codemirror-loader.js +1 -1
- package/plugins/codemirror.js +41 -9
- package/plugins/dashboard-store/__tests__/mutations.test.ts +389 -0
- package/plugins/dashboard-store/__tests__/resource-class.test.ts +49 -0
- package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +7 -0
- package/plugins/dashboard-store/actions.js +132 -25
- package/plugins/dashboard-store/classify.js +1 -18
- package/plugins/dashboard-store/getters.js +154 -44
- package/plugins/dashboard-store/index.js +0 -111
- package/plugins/dashboard-store/mutations.js +150 -52
- package/plugins/dashboard-store/resource-class.js +77 -127
- package/plugins/directives.js +6 -39
- package/plugins/ember-cookie.js +13 -0
- package/plugins/global-formatters.js +26 -5
- package/plugins/i18n.js +89 -55
- package/plugins/int-number.js +6 -20
- package/plugins/plugin.js +3 -3
- package/plugins/positive-int-number.js +6 -17
- package/plugins/steve/__tests__/{getters.spec.ts → getters.test.ts} +81 -10
- package/plugins/steve/__tests__/mutations.test.ts +49 -0
- package/plugins/steve/__tests__/resource-utils.test.ts +159 -0
- package/plugins/steve/__tests__/steve-class.test.ts +59 -0
- package/plugins/steve/__tests__/subscribe.spec.ts +4 -1
- package/plugins/steve/__tests__/utils/mutation.test.helpers.ts +105 -0
- package/plugins/steve/__tests__/utils/steve-mocks.ts +31 -0
- package/plugins/steve/accept-or-reject-socket-message.ts +103 -0
- package/plugins/steve/actions.js +3 -38
- package/plugins/steve/getters.js +164 -61
- package/plugins/steve/hybrid-class.js +5 -1
- package/plugins/steve/mutations.js +24 -3
- package/plugins/steve/norman-class.js +142 -2
- package/{utils → plugins/steve}/projectAndNamespaceFiltering.utils.ts +28 -10
- package/plugins/steve/resource-utils.ts +38 -0
- package/plugins/steve/schema.d.ts +22 -0
- package/plugins/steve/steve-class.js +22 -0
- package/plugins/steve/steve-pagination-utils.ts +368 -0
- package/plugins/steve/subscribe.js +17 -76
- package/plugins/trim-whitespace.js +6 -34
- package/plugins/vue-js-modal.js +1 -1
- package/public/index.html +1 -0
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +13 -8
- package/rancher-components/components/BadgeState/BadgeState.vue +3 -3
- package/rancher-components/components/Banner/Banner.test.ts +1 -5
- package/rancher-components/components/Banner/Banner.vue +2 -2
- package/rancher-components/components/Card/Card.vue +4 -4
- package/rancher-components/components/Form/Checkbox/Checkbox.vue +4 -3
- package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +18 -1
- package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +57 -24
- package/rancher-components/components/Form/Radio/RadioButton.test.ts +1 -3
- package/rancher-components/components/Form/Radio/RadioButton.vue +13 -7
- package/rancher-components/components/Form/Radio/RadioGroup.vue +4 -3
- package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
- package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
- package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/components/StringList/StringList.test.ts +270 -0
- package/rancher-components/components/StringList/StringList.vue +65 -26
- package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +69 -0
- package/scripts/clean +1 -1
- package/scripts/extension/bundle +19 -7
- package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +11 -0
- package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -0
- package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
- package/scripts/extension/helm/package/Dockerfile +1 -1
- package/scripts/extension/helm/scripts/package +11 -3
- package/scripts/extension/helm/scripts/patch +27 -0
- package/scripts/extension/parse-tag-name +4 -4
- package/scripts/extension/publish +25 -14
- package/scripts/publish-shell.sh +11 -1
- package/scripts/serve-pkgs +0 -2
- package/scripts/test-plugins-build.sh +87 -11
- package/scripts/vue-migrate.js +683 -0
- package/server/har-file.js +183 -0
- package/store/__tests__/catalog.test.ts +224 -0
- package/store/__tests__/type-map.test.ts +1122 -0
- package/store/auth.js +23 -4
- package/store/aws.js +53 -6
- package/store/catalog.js +22 -6
- package/store/cru-resource.ts +26 -0
- package/store/customisation.js +35 -0
- package/store/features.js +7 -4
- package/store/i18n.js +11 -0
- package/store/index.js +139 -48
- package/store/plugins.js +8 -4
- package/store/prefs.js +33 -38
- package/store/type-map.js +288 -213
- package/store/type-map.utils.ts +226 -0
- package/tsconfig.json +34 -9
- package/tsconfig.paths.json +21 -0
- package/types/components/labeledSelect.ts +50 -0
- package/types/resources/settings.d.ts +32 -0
- package/types/{userPreferences.d.ts → resources/userPreferences.d.ts} +0 -1
- package/types/shell/index.d.ts +1042 -767
- package/types/store/dashboard-store.types.ts +42 -0
- package/types/store/pagination.types.ts +457 -0
- package/types/store/type-map.ts +30 -0
- package/types/store/vuex.d.ts +9 -0
- package/types/vue-shim.d.ts +51 -0
- package/utils/__tests__/cluster.test.ts +20 -18
- package/utils/__tests__/create-yaml.test.ts +359 -2
- package/utils/__tests__/kontainer.test.ts +92 -0
- package/utils/__tests__/pod-security-admission.test.ts +1 -1
- package/utils/alertmanagerconfig.js +19 -0
- package/utils/array.ts +40 -1
- package/utils/async.ts +2 -0
- package/utils/auth.js +152 -4
- package/utils/axios.js +2 -21
- package/utils/azure.js +24 -0
- package/utils/banners.js +103 -0
- package/utils/clipboard.js +5 -0
- package/utils/cluster.js +1 -1
- package/utils/config.js +4 -0
- package/utils/create-yaml.js +59 -28
- package/utils/custom-validators.js +0 -2
- package/utils/error.js +41 -1
- package/utils/formatter.js +5 -3
- package/utils/git.ts +1 -1
- package/utils/install-redirect.js +1 -1
- package/utils/kontainer.ts +186 -0
- package/utils/object.js +24 -0
- package/utils/pagination-utils.ts +154 -0
- package/utils/pod-security-admission.ts +1 -1
- package/utils/router.js +86 -0
- package/utils/settings.ts +46 -0
- package/utils/time.js +2 -1
- package/utils/unit-tests/ChildRenderingRouterLinkStub.ts +36 -0
- package/utils/url.ts +1 -1
- package/utils/validators/formRules/__tests__/index.test.ts +70 -4
- package/utils/validators/formRules/index.ts +15 -9
- package/utils/validators/index.js +1 -0
- package/utils/validators/setting.js +6 -10
- package/vue.config.js +377 -401
- package/.DS_Store +0 -0
- package/assets/images/providers/aks-black.svg +0 -28
- package/assets/images/providers/aks.svg +0 -31
- package/assets/styles/vendor/vue-js-modal.scss +0 -16
- package/components/ChartPsp.vue +0 -76
- package/components/EventsTable.vue +0 -67
- package/components/TabbedLinks/index.vue +0 -94
- package/components/__tests__/ChartPsp.test.ts +0 -75
- package/components/formatter/__tests__/ClusterProvider.test.ts +0 -28
- package/components/nuxt/nuxt-link.server.js +0 -16
- package/components/nuxt/nuxt.js +0 -101
- package/config/router.js +0 -408
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +0 -237
- package/initialize/App.js +0 -198
- package/initialize/client.js +0 -875
- package/initialize/index.js +0 -364
- package/initialize/layouts.ts +0 -26
- package/middleware/i18n.js +0 -10
- package/middleware/unauthenticated.js +0 -22
- package/mixins/fetch.server.js +0 -73
- package/pages/c/_cluster/apps/index.vue +0 -17
- package/pages/c/_cluster/auth/index.vue +0 -19
- package/pages/c/_cluster/index.vue +0 -17
- package/pages/c/_cluster/legacy/index.vue +0 -22
- package/pages/c/_cluster/manager/index.vue +0 -22
- package/pages/c/_cluster/mcapps/index.vue +0 -21
- package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +0 -232
- package/pages/c/index.vue +0 -9
- package/pages/rio/mesh.vue +0 -508
- package/plugins/dashboard-store/__tests__/mutations.spec.ts +0 -406
- package/plugins/dashboard-store/rehydrate-all.js +0 -44
- package/plugins/portal-vue.js +0 -4
- package/plugins/portal.js +0 -4
- package/plugins/resize.js +0 -5
- package/plugins/shortkey.js +0 -4
- package/plugins/tooltip.js +0 -4
- package/plugins/transitions.js +0 -4
- package/plugins/v-select.js +0 -4
- package/plugins/vue-clipboard2.js +0 -4
- package/rancher-components/components/BadgeState/BadgeState.spec.ts +0 -12
- package/tsconfig.default.json +0 -46
- package/utils/group.js +0 -70
- package/utils/nuxt.js +0 -659
- package/utils/router.scrollBehavior.js +0 -80
- /package/components/__tests__/{Collapse.spec.ts → Collapse.test.ts} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{AgentConfiguration.vue → tabs/AgentConfiguration.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{MemberRoles.vue → tabs/MemberRoles.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{ACE.vue → tabs/networking/ACE.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{RegistryMirrors.vue → tabs/registries/RegistryMirrors.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{DrainOptions.vue → tabs/upgrade/DrainOptions.vue} +0 -0
- /package/models/__tests__/{node.ts → node.test.ts} +0 -0
- /package/plugins/dashboard-store/__tests__/{actions.spec.ts → actions.test.ts} +0 -0
- /package/plugins/dashboard-store/__tests__/{getters.spec.ts → getters.test.ts} +0 -0
- /package/plugins/steve/__tests__/{header-warnings.spec.ts → header-warnings.test.ts} +0 -0
- /package/types/{pod-security-admission.ts → resources/pod-security-admission.ts} +0 -0
package/models/secret.js
CHANGED
|
@@ -6,6 +6,10 @@ import { SERVICE_ACCOUNT } from '@shell/config/types';
|
|
|
6
6
|
import { set } from '@shell/utils/object';
|
|
7
7
|
import { NAME as MANAGER } from '@shell/config/product/manager';
|
|
8
8
|
import SteveModel from '@shell/plugins/steve/steve-class';
|
|
9
|
+
import { colorForState, stateDisplay, STATES_ENUM } from '@shell/plugins/dashboard-store/resource-class';
|
|
10
|
+
import { diffFrom } from '@shell/utils/time';
|
|
11
|
+
import day from 'dayjs';
|
|
12
|
+
import { steveCleanForDownload } from '@shell/plugins/steve/resource-utils';
|
|
9
13
|
|
|
10
14
|
export const TYPES = {
|
|
11
15
|
OPAQUE: 'Opaque',
|
|
@@ -23,7 +27,12 @@ export const TYPES = {
|
|
|
23
27
|
RKE_AUTH_CONFIG: 'rke.cattle.io/auth-config'
|
|
24
28
|
};
|
|
25
29
|
|
|
30
|
+
/** Class a cert as expiring if in eight days */
|
|
31
|
+
const certExpiringPeriod = 1000 * 60 * 60 * 24 * 8;
|
|
32
|
+
|
|
26
33
|
export default class Secret extends SteveModel {
|
|
34
|
+
_cachedCertInfo;
|
|
35
|
+
|
|
27
36
|
get hasSensitiveData() {
|
|
28
37
|
return true;
|
|
29
38
|
}
|
|
@@ -46,7 +55,7 @@ export default class Secret extends SteveModel {
|
|
|
46
55
|
if (annotations[CERTMANAGER.ISSUER]) {
|
|
47
56
|
return annotations[CERTMANAGER.ISSUER];
|
|
48
57
|
} else if (this.isCertificate) {
|
|
49
|
-
return this.
|
|
58
|
+
return this.cachedCertInfo?.issuer;
|
|
50
59
|
} else {
|
|
51
60
|
return null;
|
|
52
61
|
}
|
|
@@ -54,7 +63,7 @@ export default class Secret extends SteveModel {
|
|
|
54
63
|
|
|
55
64
|
get notAfter() {
|
|
56
65
|
if (this.isCertificate) {
|
|
57
|
-
return this.
|
|
66
|
+
return this.cachedCertInfo?.notAfter;
|
|
58
67
|
} else {
|
|
59
68
|
return null;
|
|
60
69
|
}
|
|
@@ -62,7 +71,7 @@ export default class Secret extends SteveModel {
|
|
|
62
71
|
|
|
63
72
|
get cn() {
|
|
64
73
|
if (this.isCertificate) {
|
|
65
|
-
return this.
|
|
74
|
+
return this.cachedCertInfo?.cn;
|
|
66
75
|
}
|
|
67
76
|
|
|
68
77
|
return null;
|
|
@@ -80,14 +89,13 @@ export default class Secret extends SteveModel {
|
|
|
80
89
|
// use text-warning' or 'text-error' if cert is expiring within 8 days or is expired
|
|
81
90
|
get dateClass() {
|
|
82
91
|
if (this.isCertificate) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
if (this.timeTilExpiration > eightDays ) {
|
|
86
|
-
return '';
|
|
87
|
-
} else if (this.timeTilExpiration > 0) {
|
|
92
|
+
switch (this.certState) {
|
|
93
|
+
case STATES_ENUM.EXPIRING:
|
|
88
94
|
return 'text-warning';
|
|
89
|
-
|
|
95
|
+
case STATES_ENUM.EXPIRED:
|
|
90
96
|
return 'text-error';
|
|
97
|
+
default:
|
|
98
|
+
return '';
|
|
91
99
|
}
|
|
92
100
|
}
|
|
93
101
|
|
|
@@ -248,7 +256,7 @@ export default class Secret extends SteveModel {
|
|
|
248
256
|
// parse TLS certs and return issuer, notAfter, cn, sans
|
|
249
257
|
get certInfo() {
|
|
250
258
|
const pem = base64Decode(this.data['tls.crt']);
|
|
251
|
-
let issuer, notAfter, cn, sans, x;
|
|
259
|
+
let issuer, notBefore, notAfter, cn, sans, x;
|
|
252
260
|
const END_MARKER = '-----END CERTIFICATE-----';
|
|
253
261
|
|
|
254
262
|
if (pem) {
|
|
@@ -266,6 +274,7 @@ export default class Secret extends SteveModel {
|
|
|
266
274
|
const issuerString = x.getIssuerString();
|
|
267
275
|
|
|
268
276
|
issuer = issuerString.slice(issuerString.indexOf('CN=') + 3);
|
|
277
|
+
notBefore = r.zulutodate(x.getNotBefore());
|
|
269
278
|
notAfter = r.zulutodate(x.getNotAfter());
|
|
270
279
|
|
|
271
280
|
const cnString = x.getSubjectString();
|
|
@@ -281,25 +290,39 @@ export default class Secret extends SteveModel {
|
|
|
281
290
|
sans = [];
|
|
282
291
|
}
|
|
283
292
|
|
|
284
|
-
|
|
285
|
-
issuer, notAfter, cn, sans
|
|
293
|
+
const certInfo = {
|
|
294
|
+
issuer, notBefore, notAfter, cn, sans
|
|
286
295
|
};
|
|
296
|
+
|
|
297
|
+
return certInfo;
|
|
287
298
|
}
|
|
288
299
|
|
|
289
300
|
return null;
|
|
290
301
|
}
|
|
291
302
|
|
|
303
|
+
get cachedCertInfo() {
|
|
304
|
+
if (!this._cachedCertInfo) {
|
|
305
|
+
this._cachedCertInfo = this.certInfo;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
return this._cachedCertInfo;
|
|
309
|
+
}
|
|
310
|
+
|
|
292
311
|
// use for + n more name display
|
|
293
312
|
get unrepeatedSans() {
|
|
294
313
|
if (this._type === TYPES.TLS ) {
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
314
|
+
const certInfo = this.cachedCertInfo;
|
|
315
|
+
|
|
316
|
+
if (certInfo?.sans?.filter) {
|
|
317
|
+
const commonBases = certInfo?.sans
|
|
318
|
+
.filter((name) => name.indexOf('*.') === 0 || name.indexOf('www.') === 0)
|
|
319
|
+
.map((name) => name.substr(name.indexOf('.')));
|
|
320
|
+
const displaySans = removeObjects(certInfo?.sans, commonBases);
|
|
298
321
|
|
|
299
322
|
return displaySans;
|
|
300
323
|
}
|
|
301
324
|
|
|
302
|
-
return
|
|
325
|
+
return certInfo?.sans?.array || certInfo?.sans || [];
|
|
303
326
|
}
|
|
304
327
|
|
|
305
328
|
return null;
|
|
@@ -307,16 +330,28 @@ export default class Secret extends SteveModel {
|
|
|
307
330
|
|
|
308
331
|
get timeTilExpiration() {
|
|
309
332
|
if (this._type === TYPES.TLS) {
|
|
310
|
-
const
|
|
333
|
+
const certInfo = this.cachedCertInfo;
|
|
334
|
+
|
|
335
|
+
if (!certInfo?.notAfter) {
|
|
336
|
+
return null;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
const expiration = certInfo.notAfter;
|
|
311
340
|
const timeThen = expiration.valueOf();
|
|
312
341
|
const timeNow = Date.now();
|
|
313
342
|
|
|
314
|
-
|
|
343
|
+
const timeTilExpiration = timeThen - timeNow;
|
|
344
|
+
|
|
345
|
+
return timeTilExpiration < 0 ? 0 : timeTilExpiration;
|
|
315
346
|
}
|
|
316
347
|
|
|
317
348
|
return null;
|
|
318
349
|
}
|
|
319
350
|
|
|
351
|
+
get timeTilExpirationDate() {
|
|
352
|
+
return this.timeTilExpiration > 0 ? this.cachedCertInfo?.notAfter?.valueOf() : null;
|
|
353
|
+
}
|
|
354
|
+
|
|
320
355
|
get decodedData() {
|
|
321
356
|
const out = {};
|
|
322
357
|
|
|
@@ -357,4 +392,77 @@ export default class Secret extends SteveModel {
|
|
|
357
392
|
return 'c-cluster-product-resource';
|
|
358
393
|
}
|
|
359
394
|
}
|
|
395
|
+
|
|
396
|
+
get certLifetime() {
|
|
397
|
+
if (this._type === TYPES.TLS) {
|
|
398
|
+
const certInfo = this.cachedCertInfo;
|
|
399
|
+
|
|
400
|
+
if (certInfo) {
|
|
401
|
+
return diffFrom(day(certInfo.notBefore), day(certInfo.notAfter), (key, args) => this.t(key, args)).string;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
return null;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
/**
|
|
409
|
+
* Get the model `state` for secrets of type cert
|
|
410
|
+
*/
|
|
411
|
+
get certState() {
|
|
412
|
+
if (this._type !== TYPES.TLS) {
|
|
413
|
+
return undefined;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
if (typeof this.timeTilExpiration !== 'number' || this.timeTilExpiration > certExpiringPeriod ) {
|
|
417
|
+
return '';
|
|
418
|
+
} else if (this.timeTilExpiration > 0) {
|
|
419
|
+
return STATES_ENUM.EXPIRING;
|
|
420
|
+
} else {
|
|
421
|
+
return STATES_ENUM.EXPIRED;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
* Get the model `state display` for secrets of type cert
|
|
427
|
+
*/
|
|
428
|
+
get certStateDisplay() {
|
|
429
|
+
if (this._type !== TYPES.TLS) {
|
|
430
|
+
return undefined;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
return stateDisplay(this.certState);
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* Get the model `state background` for secrets of type cert
|
|
438
|
+
*/
|
|
439
|
+
get certStateBackground() {
|
|
440
|
+
if (this._type !== TYPES.TLS) {
|
|
441
|
+
return undefined;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
const color = colorForState(this.certState);
|
|
445
|
+
|
|
446
|
+
return color.replace('text-', 'bg-');
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
cleanForSave(data, forNew) {
|
|
450
|
+
const val = super.cleanForSave(data, forNew);
|
|
451
|
+
|
|
452
|
+
// Secrets on create with _type will return validation error
|
|
453
|
+
// Secrets on edit without _type will return http error
|
|
454
|
+
if (forNew) {
|
|
455
|
+
delete val._type;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
return val;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
async cleanForDownload(yaml) {
|
|
462
|
+
// secret resource contains the type attribute
|
|
463
|
+
// ref: https://kubernetes.io/docs/reference/kubernetes-api/config-and-storage-resources/secret-v1/
|
|
464
|
+
// ref: https://kubernetes.io/docs/concepts/configuration/secret/#secret-types
|
|
465
|
+
|
|
466
|
+
return steveCleanForDownload(yaml, { rootKeys: ['id', 'links', 'actions'] });
|
|
467
|
+
}
|
|
360
468
|
}
|
package/models/service.js
CHANGED
|
@@ -2,6 +2,8 @@ import find from 'lodash/find';
|
|
|
2
2
|
import { POD } from '@shell/config/types';
|
|
3
3
|
import SteveModel from '@shell/plugins/steve/steve-class';
|
|
4
4
|
|
|
5
|
+
// i18n-uses servicesPage.serviceTypes.clusterIp.*, servicesPage.serviceTypes.externalName.*, servicesPage.serviceTypes.headless.*
|
|
6
|
+
// i18n-uses servicesPage.serviceTypes.loadBalancer.*, servicesPage.serviceTypes.nodePort.*
|
|
5
7
|
export const DEFAULT_SERVICE_TYPES = [
|
|
6
8
|
{
|
|
7
9
|
id: 'ClusterIP',
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { STEVE } from '@shell/config/types';
|
|
2
|
+
import Schema from './schema';
|
|
3
|
+
import { wait } from '@shell/utils/async';
|
|
4
|
+
|
|
5
|
+
interface ResourceField {
|
|
6
|
+
type: string,
|
|
7
|
+
description: string,
|
|
8
|
+
}
|
|
9
|
+
type ResourceFields = { [id: string]: ResourceField }
|
|
10
|
+
|
|
11
|
+
interface SchemaDefinition {
|
|
12
|
+
type: string,
|
|
13
|
+
description: string,
|
|
14
|
+
resourceFields: ResourceFields
|
|
15
|
+
}
|
|
16
|
+
type SchemaDefinitions = { [definitionId: string]: SchemaDefinition }
|
|
17
|
+
|
|
18
|
+
type SchemaId = {
|
|
19
|
+
self: string;
|
|
20
|
+
others: string[];
|
|
21
|
+
}
|
|
22
|
+
type SchemaIds = { [schemaId: string]: SchemaId }
|
|
23
|
+
|
|
24
|
+
interface SchemaDefinitionResponse {
|
|
25
|
+
definitions: SchemaDefinitions,
|
|
26
|
+
definitionType: string,
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const SchemaDefinitionCache: { [store: string]: {
|
|
30
|
+
ids: SchemaIds,
|
|
31
|
+
definitions: SchemaDefinitions,
|
|
32
|
+
} } = {};
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Steve Schema specific functionality
|
|
36
|
+
*/
|
|
37
|
+
export default class SteveSchema extends Schema {
|
|
38
|
+
static reset(store: string): void {
|
|
39
|
+
delete SchemaDefinitionCache[store];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
_resourceFields?: ResourceFields;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* If resourceFields have not been provided, they are required to be fetched aka schemaDefinition world
|
|
46
|
+
*/
|
|
47
|
+
requiresResourceFields: boolean;
|
|
48
|
+
|
|
49
|
+
// These are just for typing, eventually we'll get them when Schema is fully converted to typescript
|
|
50
|
+
id?: string;
|
|
51
|
+
type?: string;
|
|
52
|
+
links?: any;
|
|
53
|
+
$ctx?: any;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* This should match the root Schema ctor (...args throws ts error)
|
|
57
|
+
*/
|
|
58
|
+
constructor(data: unknown, ctx: unknown, rehydrateNamespace?: null | undefined, setClone?: boolean) {
|
|
59
|
+
super(data, ctx, rehydrateNamespace, setClone);
|
|
60
|
+
|
|
61
|
+
if (!SchemaDefinitionCache[this.store]) {
|
|
62
|
+
SchemaDefinitionCache[this.store] = {
|
|
63
|
+
ids: {},
|
|
64
|
+
definitions: {}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
this.requiresResourceFields = this._resourceFields === null; // This is set pre ctor via `set'er, but TS complains that it's not initialised
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Notes on Schemas, resourceFields and schemaDefinitions
|
|
72
|
+
// - Schemas previously contained a `resourceFields` collection, which is now null
|
|
73
|
+
// - resourceFields now come from a new `schemaDefinitions` endpoint
|
|
74
|
+
// - for neatness / safety / compatibility with norman resources... we fetch schemaDefinitions and return their resourceFields in a resourceFields getter
|
|
75
|
+
|
|
76
|
+
/******************
|
|
77
|
+
* Resource Fields
|
|
78
|
+
****************** /
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Is the property `resourceFields` available
|
|
82
|
+
*
|
|
83
|
+
* If the schema definition is required and it hasn't been fetched this will be false
|
|
84
|
+
*
|
|
85
|
+
* This is a non-erroring request, unlike the resourceFields getter which will error if schema definition is required but missing
|
|
86
|
+
*/
|
|
87
|
+
get hasResourceFields(): boolean {
|
|
88
|
+
if (this.requiresResourceFields) {
|
|
89
|
+
return !!this.schemaDefinition?.resourceFields;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
return !!this._resourceFields;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Fields associated with instances of this schema
|
|
97
|
+
*
|
|
98
|
+
* This will either come directly from the schema or from the schema's definition
|
|
99
|
+
*/
|
|
100
|
+
get resourceFields(): ResourceFields {
|
|
101
|
+
if (this.requiresResourceFields) {
|
|
102
|
+
if (!this.schemaDefinitionsIds) {
|
|
103
|
+
throw new Error(`Cannot find resourceFields for Schema ${ this.id } (schemaDefinitions have not been fetched) `);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (!this.schemaDefinition) {
|
|
107
|
+
throw new Error(`No schemaDefinition for ${ this.id } found (not in schemaDefinition response) `);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return this.schemaDefinition.resourceFields;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return this._resourceFields as ResourceFields;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Apply the original `resourceFields` param (if it exists). If it does not then we'll need to fetch the schema definition
|
|
118
|
+
*/
|
|
119
|
+
set resourceFields(resourceFields: ResourceFields) {
|
|
120
|
+
this._resourceFields = resourceFields;
|
|
121
|
+
this.requiresResourceFields = this._resourceFields === null;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Ensure this schema has a populated `resourceFields` property
|
|
126
|
+
*
|
|
127
|
+
* This happens via making a request to fetch the schema definition
|
|
128
|
+
*/
|
|
129
|
+
async fetchResourceFields(depth = 0): Promise<SchemaDefinition | null | undefined> {
|
|
130
|
+
if (!this.requiresResourceFields) {
|
|
131
|
+
// Not needed, no-op
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (this.schemaDefinition) {
|
|
136
|
+
// Already have it, no-op
|
|
137
|
+
return this.schemaDefinition;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const url = this.schemaDefinitionUrl;
|
|
141
|
+
|
|
142
|
+
if (!url) {
|
|
143
|
+
console.warn(`Unable to fetch schema definitions for ${ this.id } (failed to find url of schema definition)`); // eslint-disable-line no-console
|
|
144
|
+
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (depth >= 4) {
|
|
149
|
+
console.warn(`Unable to fetch schema definitions for ${ this.id } (too many failed requests)`); // eslint-disable-line no-console
|
|
150
|
+
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
let res;
|
|
155
|
+
|
|
156
|
+
try {
|
|
157
|
+
// Make a direct request to fetch the schema definition
|
|
158
|
+
res = await this.$dispatch('request', {
|
|
159
|
+
type: STEVE.SCHEMA_DEFINITION,
|
|
160
|
+
url
|
|
161
|
+
});
|
|
162
|
+
} catch (e: any) {
|
|
163
|
+
if ( e?._status === 500) {
|
|
164
|
+
// Rancher could be updating it's definition cache, attempt a few times
|
|
165
|
+
await wait(2000);
|
|
166
|
+
|
|
167
|
+
return this.fetchResourceFields(++depth);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
console.warn(`Unable to fetch schema definitions for ${ this.id }`, e); // eslint-disable-line no-console
|
|
171
|
+
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
this.cacheSchemaDefinitionResponse(res);
|
|
176
|
+
|
|
177
|
+
return this.schemaDefinition;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Convert collection of schema definitions for this schema into objects we can store
|
|
182
|
+
*
|
|
183
|
+
* Split out for unit testing purposes
|
|
184
|
+
*/
|
|
185
|
+
private cacheSchemaDefinitionResponse(res: SchemaDefinitionResponse): void {
|
|
186
|
+
const { [res.definitionType]: self, ...others } = res.definitions;
|
|
187
|
+
const store = this.store;
|
|
188
|
+
|
|
189
|
+
SchemaDefinitionCache[store].ids[this.id as string] = { self: self.type, others: Object.keys(others) };
|
|
190
|
+
Object.entries(res.definitions).forEach(([type, sd]) => {
|
|
191
|
+
SchemaDefinitionCache[store].definitions[type] = sd;
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/*********************
|
|
196
|
+
* Schema Definitions
|
|
197
|
+
********************* /
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Store this schema's definition and a collection of associated definitions (all ids)
|
|
201
|
+
*/
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* The schema definition for this schema
|
|
205
|
+
*/
|
|
206
|
+
get schemaDefinition(): SchemaDefinition | null {
|
|
207
|
+
if (!this.schemaDefinitionsIds) {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
return SchemaDefinitionCache[this.store].definitions[this.schemaDefinitionsIds.self];
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* The schema definitions for this schema definition's resourceFields
|
|
216
|
+
*/
|
|
217
|
+
get schemaDefinitions(): SchemaDefinitions | null {
|
|
218
|
+
if (!this.schemaDefinitionsIds) {
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
return this.schemaDefinitionsIds.others.reduce((res, d) => {
|
|
223
|
+
res[d] = SchemaDefinitionCache[this.store].definitions[d];
|
|
224
|
+
|
|
225
|
+
return res;
|
|
226
|
+
}, {} as SchemaDefinitions);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* URL to fetch this schema's definition
|
|
231
|
+
*/
|
|
232
|
+
get schemaDefinitionUrl(): string {
|
|
233
|
+
return this.links?.self?.replace('/schemas/', '/schemaDefinitions/');
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/*********************
|
|
237
|
+
* Local Properties
|
|
238
|
+
*
|
|
239
|
+
* This could be set in the ctor, however are removed in `replaceResource` when there are socket updates..
|
|
240
|
+
* ... so use getters instead
|
|
241
|
+
*
|
|
242
|
+
*********************/
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* The name (namespace) of the vuex store this schema lives in (i.e. cluster, management, etc)
|
|
246
|
+
*/
|
|
247
|
+
private get store(): string {
|
|
248
|
+
return this.$ctx.state?.config?.namespace;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
private get schemaDefinitionsIds(): SchemaId | undefined {
|
|
252
|
+
return SchemaDefinitionCache[this.store]?.ids[this.id as string];
|
|
253
|
+
}
|
|
254
|
+
}
|
|
@@ -84,7 +84,7 @@ export const PROVISIONER_OPTIONS = [
|
|
|
84
84
|
export default class extends SteveModel {
|
|
85
85
|
get provisionerDisplay() {
|
|
86
86
|
const option = PROVISIONER_OPTIONS.find((o) => o.value === this.provisioner);
|
|
87
|
-
const fallback = `${ this.provisioner } ${ this.t('persistentVolume.csi.
|
|
87
|
+
const fallback = `${ this.provisioner } ${ this.t('persistentVolume.csi.suffix') }`;
|
|
88
88
|
|
|
89
89
|
return option ? this.t(option.labelKey) : this.$rootGetters['i18n/withFallback'](`persistentVolume.csi.drivers.${ this.provisioner.replaceAll('.', '-') }`, null, fallback);
|
|
90
90
|
}
|
package/models/workload.js
CHANGED
|
@@ -647,6 +647,23 @@ export default class Workload extends WorkloadService {
|
|
|
647
647
|
|
|
648
648
|
const selector = convertSelectorObj(this.spec.selector);
|
|
649
649
|
|
|
650
|
+
// See https://github.com/rancher/dashboard/issues/10417, all pods bad, need to replace local selector somehow
|
|
650
651
|
return matching(allInNamespace, selector);
|
|
651
652
|
}
|
|
653
|
+
|
|
654
|
+
cleanForSave(data) {
|
|
655
|
+
const val = super.cleanForSave(data);
|
|
656
|
+
|
|
657
|
+
// remove fields from containers
|
|
658
|
+
val.spec?.template?.spec?.containers?.forEach((container) => {
|
|
659
|
+
this.cleanContainerForSave(container);
|
|
660
|
+
});
|
|
661
|
+
|
|
662
|
+
// remove fields from initContainers
|
|
663
|
+
val.spec?.template?.spec?.initContainers?.forEach((container) => {
|
|
664
|
+
this.cleanContainerForSave(container);
|
|
665
|
+
});
|
|
666
|
+
|
|
667
|
+
return val;
|
|
668
|
+
}
|
|
652
669
|
}
|
|
@@ -320,4 +320,22 @@ export default class WorkloadService extends SteveModel {
|
|
|
320
320
|
|
|
321
321
|
return { toSave, toRemove };
|
|
322
322
|
}
|
|
323
|
+
|
|
324
|
+
cleanForSave(data) {
|
|
325
|
+
const val = super.cleanForSave(data);
|
|
326
|
+
|
|
327
|
+
delete val.__active;
|
|
328
|
+
delete val.type;
|
|
329
|
+
|
|
330
|
+
return val;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
cleanContainerForSave(container) {
|
|
334
|
+
delete container.__active;
|
|
335
|
+
delete container.active;
|
|
336
|
+
delete container._init;
|
|
337
|
+
delete container.error;
|
|
338
|
+
|
|
339
|
+
return container;
|
|
340
|
+
}
|
|
323
341
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rancher/shell",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Rancher Dashboard Shell",
|
|
5
5
|
"repository": "https://github.com/rancherlabs/dashboard",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"@aws-sdk/client-ec2": "3.1.0",
|
|
31
31
|
"@aws-sdk/client-eks": "3.1.0",
|
|
32
32
|
"@aws-sdk/client-kms": "3.8.1",
|
|
33
|
+
"@aws-sdk/client-iam": "3.18.0",
|
|
33
34
|
"@babel/plugin-proposal-optional-chaining": "7.14.5",
|
|
34
35
|
"@babel/plugin-proposal-private-property-in-object": "7.14.5",
|
|
35
36
|
"@babel/preset-typescript": "7.16.7",
|
|
@@ -41,6 +42,7 @@
|
|
|
41
42
|
"@nuxtjs/eslint-config-typescript": "6.0.1",
|
|
42
43
|
"@nuxtjs/webpack-profile": "0.1.0",
|
|
43
44
|
"@popperjs/core": "2.4.4",
|
|
45
|
+
"@types/is-url": "1.2.30",
|
|
44
46
|
"@types/node": "16.4.3",
|
|
45
47
|
"@typescript-eslint/eslint-plugin": "4.33.0",
|
|
46
48
|
"@typescript-eslint/parser": "4.33.0",
|
|
@@ -105,7 +107,7 @@
|
|
|
105
107
|
"nyc": "15.1.0",
|
|
106
108
|
"papaparse": "5.3.0",
|
|
107
109
|
"portal-vue": "2.1.7",
|
|
108
|
-
"rancher
|
|
110
|
+
"@rancher/icons": "2.0.29",
|
|
109
111
|
"sass": "1.51.0",
|
|
110
112
|
"sass-loader": "10.2.1",
|
|
111
113
|
"serve-static": "1.14.1",
|
|
@@ -115,29 +117,29 @@
|
|
|
115
117
|
"start-server-and-test": "1.13.1",
|
|
116
118
|
"style-loader": "1.2.1",
|
|
117
119
|
"ts-node": "8.10.2",
|
|
118
|
-
"typescript": "4.
|
|
120
|
+
"typescript": "4.5.5",
|
|
119
121
|
"url-parse": "1.5.10",
|
|
120
122
|
"v-tooltip": "2.0.3",
|
|
121
|
-
"vue": "2.7.
|
|
122
|
-
"
|
|
123
|
+
"vue": "2.7.16",
|
|
124
|
+
"clipboard-polyfill": "4.0.1",
|
|
123
125
|
"vue-codemirror": "4.0.6",
|
|
124
126
|
"vue-js-modal": "1.3.35",
|
|
125
127
|
"vue-resize": "0.4.5",
|
|
126
128
|
"vue-select": "3.18.3",
|
|
127
|
-
"vue-server-renderer": "2.7.
|
|
129
|
+
"vue-server-renderer": "2.7.16",
|
|
128
130
|
"vue-shortkey": "3.1.7",
|
|
129
|
-
"vue-template-compiler": "2.7.
|
|
131
|
+
"vue-template-compiler": "2.7.16",
|
|
130
132
|
"vue-virtual-scroll-list": "^2.3.4",
|
|
131
|
-
"vue2-transitions": "0.3.0",
|
|
132
133
|
"vuedraggable": "2.24.3",
|
|
133
134
|
"vuex": "3.6.2",
|
|
134
135
|
"webpack-bundle-analyzer": "4.5.0",
|
|
135
136
|
"webpack-virtual-modules": "0.4.3",
|
|
136
|
-
"xterm": "5.
|
|
137
|
-
"xterm-addon-
|
|
138
|
-
"xterm-addon-
|
|
139
|
-
"xterm-addon-
|
|
140
|
-
"xterm-addon-
|
|
137
|
+
"xterm": "5.2.1",
|
|
138
|
+
"xterm-addon-canvas": "^0.5.0",
|
|
139
|
+
"xterm-addon-fit": "0.8.0",
|
|
140
|
+
"xterm-addon-search": "0.13.0",
|
|
141
|
+
"xterm-addon-web-links": "0.9.0",
|
|
142
|
+
"xterm-addon-webgl": "0.16.0",
|
|
141
143
|
"worker-loader": "3.0.8",
|
|
142
144
|
"yarn": "1.22.18"
|
|
143
145
|
},
|
|
@@ -150,7 +152,8 @@
|
|
|
150
152
|
"qs": ">=6.7.3",
|
|
151
153
|
"nth-check": ">=2.0.1",
|
|
152
154
|
"follow-redirects": ">=1.14.7",
|
|
153
|
-
"merge": ">=2.1.1"
|
|
155
|
+
"merge": ">=2.1.1",
|
|
156
|
+
"semver": ">=7.5.2"
|
|
154
157
|
},
|
|
155
158
|
"nyc": {
|
|
156
159
|
"extension": [
|
package/pages/about.vue
CHANGED
|
@@ -7,11 +7,13 @@ import { SETTING } from '@shell/config/settings';
|
|
|
7
7
|
import { getVendor } from '@shell/config/private-label';
|
|
8
8
|
import { downloadFile } from '@shell/utils/download';
|
|
9
9
|
import { mapGetters } from 'vuex';
|
|
10
|
+
import TabTitle from '@shell/components/TabTitle';
|
|
10
11
|
|
|
11
12
|
export default {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
components: {
|
|
14
|
+
BackLink, Loading, TabTitle
|
|
15
|
+
},
|
|
16
|
+
mixins: [BackRoute],
|
|
15
17
|
async fetch() {
|
|
16
18
|
this.settings = await this.$store.dispatch(`management/findAll`, { type: MANAGEMENT.SETTING });
|
|
17
19
|
},
|
|
@@ -97,14 +99,18 @@ export default {
|
|
|
97
99
|
>
|
|
98
100
|
<BackLink :link="backLink" />
|
|
99
101
|
<div class="title-block mt-20 mb-40">
|
|
100
|
-
<h1
|
|
101
|
-
|
|
102
|
+
<h1>
|
|
103
|
+
<TabTitle breadcrumb="vendor-only">
|
|
104
|
+
{{ t('about.title') }}
|
|
105
|
+
</TabTitle>
|
|
106
|
+
</h1>
|
|
107
|
+
<router-link
|
|
102
108
|
:to="{ name: 'diagnostic' }"
|
|
103
109
|
class="btn role-primary"
|
|
104
110
|
data-testid="about__diagnostics_button"
|
|
105
111
|
>
|
|
106
112
|
{{ t('about.diagnostic.title') }}
|
|
107
|
-
</
|
|
113
|
+
</router-link>
|
|
108
114
|
</div>
|
|
109
115
|
<h3>{{ t('about.versions.title') }}</h3>
|
|
110
116
|
<table>
|