@rancher/shell 0.3.13 → 0.3.15
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/images/providers/nutanix.svg +1 -0
- package/assets/translations/en-us.yaml +89 -2
- package/chart/gatekeeper.vue +2 -2
- package/chart/monitoring/alerting/index.vue +3 -3
- package/chart/monitoring/index.vue +2 -2
- package/chart/monitoring/prometheus/index.vue +1 -1
- package/chart/rancher-backup/index.vue +2 -2
- package/cloud-credential/harvester.vue +2 -2
- package/components/AssignTo.vue +1 -1
- package/components/AwsComplianceBanner.vue +1 -1
- package/components/BackLink.vue +7 -0
- package/components/BrandImage.vue +3 -3
- package/components/ClusterProviderIcon.vue +1 -1
- package/components/CommunityLinks.vue +2 -2
- package/components/ConsumptionGauge.vue +17 -2
- package/components/CruResource.vue +2 -1
- package/components/DashboardMetrics.vue +8 -0
- package/components/DetailTop.vue +1 -1
- package/components/ExplorerMembers.vue +8 -8
- package/components/ExplorerProjectsNamespaces.vue +9 -9
- package/components/FixedBanner.vue +1 -1
- package/components/GlobalRoleBindings.vue +11 -11
- package/components/GrafanaDashboard.vue +7 -1
- package/components/GrowlManager.vue +1 -1
- package/components/HarvesterServiceAddOnConfig.vue +117 -2
- package/components/IconOrSvg.vue +10 -3
- package/components/LandingPagePreference.vue +2 -2
- package/components/MoveModal.vue +1 -1
- package/components/PodSecurityAdmission.vue +3 -3
- package/components/ProgressBarMulti.vue +2 -2
- package/components/PromptRemove.vue +52 -28
- package/components/PromptRestore.vue +3 -3
- package/components/Questions/index.vue +5 -5
- package/components/RelatedWorkloadsTable.vue +1 -1
- package/components/ResourceList/Masthead.vue +1 -1
- package/components/ResourceTable.vue +3 -3
- package/components/ResourceYaml.vue +1 -1
- package/components/RoleBindings.vue +2 -2
- package/components/SingleClusterInfo.vue +1 -1
- package/components/SortableTable/actions.js +3 -3
- package/components/SortableTable/advanced-filtering.js +7 -7
- package/components/SortableTable/filtering.js +1 -1
- package/components/SortableTable/index.vue +9 -9
- package/components/SortableTable/selection.js +5 -5
- package/components/SortableTable/sorting.js +5 -5
- package/components/Tabbed/index.vue +7 -7
- package/components/TableSparkLine.vue +1 -1
- package/components/Wizard.vue +11 -23
- package/components/__tests__/Collapse.spec.ts +1 -1
- package/components/__tests__/CruResource.test.ts +74 -0
- package/components/__tests__/SimpleBox.spec.ts +1 -1
- package/components/auth/RoleDetailEdit.vue +7 -3
- package/components/auth/SelectPrincipal.vue +3 -3
- package/components/fleet/FleetResources.vue +1 -1
- package/components/fleet/FleetStatus.vue +4 -4
- package/components/fleet/FleetSummary.vue +1 -1
- package/components/fleet/ForceDirectedTreeChart/chartIcons.js +1 -1
- package/components/fleet/ForceDirectedTreeChart/index.vue +1 -1
- package/components/form/ArrayList.vue +11 -3
- package/components/form/ArrayListSelect.vue +2 -2
- package/components/form/FileSelector.vue +6 -0
- package/components/form/GitPicker.vue +528 -0
- package/components/form/KeyValue.vue +82 -41
- package/components/form/LabeledSelect.vue +2 -2
- package/components/form/MatchExpressions.vue +2 -2
- package/components/form/Members/ClusterMembershipEditor.vue +1 -2
- package/components/form/Members/ClusterPermissionsEditor.vue +6 -5
- package/components/form/Members/MembershipEditor.vue +4 -4
- package/components/form/Members/ProjectMembershipEditor.vue +1 -2
- package/components/form/NameNsDescription.vue +13 -6
- package/components/form/Networking.vue +2 -2
- package/components/form/NodeScheduling.vue +1 -1
- package/components/form/PodAffinity.vue +1 -1
- package/components/form/ProjectMemberEditor.vue +4 -4
- package/components/form/ResourceQuota/Namespace.vue +2 -2
- package/components/form/ResourceQuota/NamespaceRow.vue +2 -2
- package/components/form/ResourceQuota/Project.vue +1 -1
- package/components/form/ResourceQuota/shared.js +2 -2
- package/components/form/ResourceSelector.vue +1 -1
- package/components/form/ResourceTabs/index.vue +1 -1
- package/components/form/RuleSelector.vue +1 -1
- package/components/form/SecretSelector.vue +4 -4
- package/components/form/Select.vue +2 -2
- package/components/form/SelectOrCreateAuthSecret.vue +3 -3
- package/components/form/ServiceNameSelect.vue +1 -1
- package/components/form/ServicePorts.vue +1 -1
- package/components/form/ShellInput.vue +1 -1
- package/components/form/SimpleSecretSelector.vue +4 -4
- package/components/form/Taints.vue +1 -1
- package/components/form/ValueFromResource.vue +3 -3
- package/components/form/WorkloadPorts.vue +8 -7
- package/components/form/__tests__/Error.test.ts +1 -1
- package/components/form/__tests__/KeyValue.test.ts +21 -0
- package/components/formatter/ClusterLink.vue +1 -1
- package/components/formatter/ClusterProvider.vue +13 -2
- package/components/formatter/Endpoints.vue +1 -1
- package/components/formatter/FleetSummaryGraph.vue +2 -2
- package/components/formatter/IngressTarget.vue +2 -2
- package/components/formatter/PodImages.vue +1 -1
- package/components/formatter/PrincipalGroupBindings.vue +1 -1
- package/components/formatter/ReceiverIcons.vue +3 -3
- package/components/formatter/ServiceType.vue +1 -1
- package/components/formatter/WorkloadDetailEndpoints.vue +1 -1
- package/components/formatter/WorkloadHealthScale.vue +1 -1
- package/components/formatter/__tests__/LiveDate.test.ts +1 -1
- package/components/graph/Bar.vue +1 -1
- package/components/graph/LinePlot.vue +3 -3
- package/components/nav/Group.vue +2 -2
- package/components/nav/Header.vue +5 -5
- package/components/nav/NamespaceFilter.vue +14 -14
- package/components/nav/TopLevelMenu.vue +76 -11
- package/components/nav/WindowManager/ContainerLogs.vue +2 -2
- package/components/nav/WindowManager/ContainerShell.vue +1 -1
- package/components/nav/WorkspaceSwitcher.vue +1 -1
- package/config/home-links.js +4 -4
- package/config/labels-annotations.js +8 -8
- package/config/pod-security-admission.ts +1 -1
- package/config/product/auth.js +4 -4
- package/config/product/explorer.js +14 -0
- package/config/router.js +5 -0
- package/config/store.js +2 -0
- package/config/table-headers.js +13 -13
- package/config/uiplugins.js +8 -1
- package/core/plugin-routes.ts +3 -2
- package/core/plugin.ts +3 -3
- package/core/plugins.js +7 -7
- package/creators/app/files/.gitignore +0 -3
- package/creators/pkg/files/index.ts +1 -1
- package/detail/cis.cattle.io.clusterscan.vue +3 -3
- package/detail/fleet.cattle.io.bundle.vue +1 -1
- package/detail/helm.cattle.io.projecthelmchart.vue +16 -29
- package/detail/management.cattle.io.user.vue +12 -12
- package/detail/namespace.vue +4 -4
- package/detail/networking.k8s.io.ingress.vue +3 -3
- package/detail/node.vue +2 -2
- package/detail/provisioning.cattle.io.cluster.vue +9 -10
- package/detail/service.vue +1 -1
- package/detail/workload/index.vue +3 -3
- package/dialog/AddProjectMemberDialog.vue +2 -2
- package/dialog/DrainNode.vue +1 -1
- package/dialog/GenericPrompt.vue +9 -5
- package/dialog/RotateEncryptionKeyDialog.vue +2 -2
- package/dialog/ScaleMachineDownDialog.vue +2 -2
- package/edit/auth/azuread.vue +3 -3
- package/edit/autoscaling.horizontalpodautoscaler/index.vue +5 -5
- package/edit/cis.cattle.io.clusterscan.vue +5 -5
- package/edit/cloudcredential.vue +4 -4
- package/edit/constraints.gatekeeper.sh.constraint/NamespaceList.vue +1 -1
- package/edit/constraints.gatekeeper.sh.constraint/index.vue +4 -4
- package/edit/fleet.cattle.io.gitrepo.vue +6 -6
- package/edit/helm.cattle.io.projecthelmchart.vue +3 -3
- package/edit/logging-flow/index.vue +4 -4
- package/edit/logging.banzaicloud.io.output/index.vue +3 -3
- package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +1 -1
- package/edit/logging.banzaicloud.io.output/providers/forward.vue +1 -1
- package/edit/logging.banzaicloud.io.output/providers/logz.vue +1 -1
- package/edit/logging.banzaicloud.io.output/providers/opensearch.vue +1 -1
- package/edit/logging.banzaicloud.io.output/providers/redis.vue +1 -1
- package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +1 -1
- package/edit/management.cattle.io.clusterroletemplatebinding.vue +1 -1
- package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +1 -1
- package/edit/management.cattle.io.project.vue +3 -3
- package/edit/management.cattle.io.projectroletemplatebinding.vue +2 -2
- package/edit/management.cattle.io.setting.vue +1 -1
- package/edit/management.cattle.io.user.vue +2 -2
- package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +2 -2
- package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +1 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +3 -3
- package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +5 -5
- package/edit/monitoring.coreos.com.prometheusrule/duration.js +1 -1
- package/edit/monitoring.coreos.com.receiver/auth.vue +2 -2
- package/edit/monitoring.coreos.com.receiver/tls.vue +3 -4
- package/edit/monitoring.coreos.com.receiver/types/__tests__/email.test.ts +53 -0
- package/edit/monitoring.coreos.com.receiver/types/email.vue +2 -0
- package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +3 -3
- package/edit/monitoring.coreos.com.receiver/types/webhook.add.vue +1 -1
- package/edit/monitoring.coreos.com.route.vue +2 -2
- package/edit/namespace.vue +21 -13
- package/edit/networking.k8s.io.ingress/Certificate.vue +2 -2
- package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
- package/edit/networking.k8s.io.ingress/RulePath.vue +2 -2
- package/edit/networking.k8s.io.ingress/Rules.vue +2 -2
- package/edit/networking.k8s.io.ingress/index.vue +4 -4
- package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +3 -3
- package/edit/networking.k8s.io.networkpolicy/index.vue +1 -1
- package/edit/persistentvolume/index.vue +4 -4
- package/edit/persistentvolumeclaim.vue +3 -3
- package/edit/provisioning.cattle.io.cluster/RegistryMirrors.vue +1 -1
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +2 -2
- package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
- package/edit/provisioning.cattle.io.cluster/index.vue +7 -7
- package/edit/provisioning.cattle.io.cluster/rke2.vue +28 -29
- package/edit/resources.cattle.io.backup.vue +2 -2
- package/edit/resources.cattle.io.restore.vue +3 -3
- package/edit/secret/generic.vue +1 -1
- package/edit/secret/index.vue +3 -3
- package/edit/service.vue +3 -21
- package/edit/serviceaccount.vue +2 -2
- package/edit/storage.k8s.io.storageclass/index.vue +4 -4
- package/edit/storage.k8s.io.storageclass/provisioners/driver.harvesterhci.io.vue +1 -1
- package/edit/token.vue +5 -5
- package/edit/workload/index.vue +1 -1
- package/edit/workload/mixins/workload.js +8 -8
- package/edit/workload/storage/ContainerMountPaths.vue +9 -9
- package/edit/workload/storage/Mount.vue +2 -2
- package/edit/workload/storage/csi/index.vue +1 -1
- package/edit/workload/storage/ephemeralVolume/index.vue +1 -1
- package/edit/workload/storage/index.vue +6 -6
- package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +2 -2
- package/initialize/client.js +8 -8
- package/initialize/index.js +1 -4
- package/layouts/default.vue +38 -11
- package/list/catalog.cattle.io.clusterrepo.vue +9 -1
- package/list/cis.cattle.io.clusterscan.vue +1 -1
- package/list/fleet.cattle.io.cluster.vue +2 -2
- package/list/group.principal.vue +1 -1
- package/list/helm.cattle.io.projecthelmchart.vue +2 -2
- package/list/management.cattle.io.cluster.vue +1 -1
- package/list/management.cattle.io.feature.vue +1 -1
- package/list/management.cattle.io.user.vue +2 -2
- package/list/node.vue +5 -5
- package/list/provisioning.cattle.io.cluster.vue +4 -5
- package/machine-config/amazonec2.vue +2 -2
- package/machine-config/digitalocean.vue +4 -4
- package/machine-config/linode.vue +4 -4
- package/machine-config/vmwarevsphere.vue +12 -12
- package/middleware/authenticated.js +7 -6
- package/mixins/brand.js +1 -1
- package/mixins/chart.js +6 -6
- package/mixins/fetch.client.js +2 -2
- package/mixins/form-validation.js +7 -7
- package/mixins/resource-fetch-namespaced.js +1 -1
- package/mixins/resource-fetch.js +2 -2
- package/models/apps.statefulset.js +2 -2
- package/models/batch.cronjob.js +1 -1
- package/models/catalog.cattle.io.app.js +4 -4
- package/models/cis.cattle.io.clusterscan.js +1 -1
- package/models/cis.cattle.io.clusterscanbenchmark.js +1 -1
- package/models/cis.cattle.io.clusterscanreport.js +1 -1
- package/models/cloudcredential.js +1 -1
- package/models/cluster/node.js +5 -5
- package/models/cluster.x-k8s.io.machinedeployment.js +2 -2
- package/models/fleet.cattle.io.gitrepo.js +3 -3
- package/models/group.principal.js +4 -4
- package/models/helm.cattle.io.projecthelmchart.js +2 -2
- package/models/logging.banzaicloud.io.clusterflow.js +2 -2
- package/models/logging.banzaicloud.io.flow.js +5 -5
- package/models/logging.banzaicloud.io.output.js +2 -2
- package/models/management.cattle.io.cluster.js +10 -14
- package/models/management.cattle.io.globalrole.js +4 -4
- package/models/management.cattle.io.node.js +2 -2
- package/models/management.cattle.io.nodepool.js +3 -3
- package/models/management.cattle.io.nodetemplate.js +4 -4
- package/models/management.cattle.io.project.js +2 -2
- package/models/management.cattle.io.roletemplate.js +1 -1
- package/models/management.cattle.io.setting.js +1 -1
- package/models/management.cattle.io.user.js +5 -5
- package/models/monitoring.coreos.com.receiver.js +9 -9
- package/models/namespace.js +1 -1
- package/models/networking.k8s.io.ingress.js +5 -5
- package/models/persistentvolume.js +3 -3
- package/models/pod.js +3 -3
- package/models/provisioning.cattle.io.cluster.js +39 -27
- package/models/rbac.authorization.k8s.io.clusterrole.js +2 -2
- package/models/rbac.authorization.k8s.io.role.js +3 -3
- package/models/secret.js +1 -1
- package/models/service.js +2 -2
- package/models/storage.k8s.io.storageclass.js +2 -2
- package/models/token.js +1 -1
- package/models/workload.js +6 -6
- package/models/workload.service.js +5 -21
- package/package.json +2 -1
- package/pages/about.vue +9 -9
- package/pages/account/index.vue +2 -2
- package/pages/auth/login.vue +15 -12
- package/pages/auth/verify.vue +6 -0
- package/pages/c/_cluster/apps/charts/index.vue +4 -4
- package/pages/c/_cluster/apps/charts/install.vue +28 -20
- package/pages/c/_cluster/auth/roles/index.vue +9 -9
- package/pages/c/_cluster/explorer/index.vue +41 -16
- package/pages/c/_cluster/explorer/tools/index.vue +8 -8
- package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +1 -1
- package/pages/c/_cluster/fleet/index.vue +11 -11
- package/pages/c/_cluster/monitoring/index.vue +1 -1
- package/pages/c/_cluster/settings/links.vue +3 -3
- package/pages/c/_cluster/settings/performance.vue +1 -1
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +6 -6
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +3 -3
- package/pages/c/_cluster/uiplugins/InstallDialog.vue +3 -3
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +1 -1
- package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +3 -3
- package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +6 -6
- package/pages/c/_cluster/uiplugins/UninstallDialog.vue +4 -4
- package/pages/c/_cluster/uiplugins/index.vue +22 -19
- package/pages/diagnostic.vue +6 -6
- package/pages/home.vue +3 -3
- package/pages/prefs.vue +2 -2
- package/pages/rio/mesh.vue +3 -3
- package/pages/support/index.vue +10 -1
- package/pkg/auto-import.js +1 -1
- package/pkg/tsconfig.json +1 -0
- package/pkg/vue.config.js +1 -1
- package/plugins/axios.js +1 -1
- package/plugins/clean-html-directive.js +1 -1
- package/plugins/dashboard-store/__tests__/mutations.spec.js +4 -4
- package/plugins/dashboard-store/actions.js +4 -4
- package/plugins/dashboard-store/getters.js +1 -1
- package/plugins/dashboard-store/index.js +1 -1
- package/plugins/dashboard-store/mutations.js +2 -2
- package/plugins/dashboard-store/resource-class.js +8 -8
- package/plugins/i18n.js +1 -1
- package/plugins/plugin.js +5 -1
- package/plugins/steve/actions.js +3 -3
- package/plugins/steve/getters.js +3 -3
- package/plugins/steve/hybrid-class.js +1 -1
- package/plugins/steve/mutations.js +1 -1
- package/plugins/steve/performanceTesting.js +1 -1
- package/plugins/steve/resourceWatcher.js +1 -1
- package/plugins/steve/subscribe.js +6 -6
- package/plugins/steve/worker/web-worker.basic.js +1 -1
- package/promptRemove/management.cattle.io.project.vue +3 -3
- package/promptRemove/mixin/roleDeletionCheck.js +4 -4
- package/promptRemove/pod.vue +1 -1
- package/rancher-components/StringList/StringList.test.ts +80 -0
- package/rancher-components/StringList/StringList.vue +577 -0
- package/rancher-components/StringList/index.ts +1 -0
- package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +2 -2
- package/rancher-components/components/Form/Checkbox/Checkbox.vue +1 -1
- package/rancher-components/components/Form/Radio/RadioButton.test.ts +1 -1
- package/rancher-components/components/Form/Radio/RadioButton.vue +2 -2
- package/rancher-components/components/Form/Radio/RadioGroup.vue +2 -2
- package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +1 -0
- package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +1 -1
- package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -7
- package/rancher-components/components/StringList/StringList.test.ts +10 -9
- package/rancher-components/components/StringList/StringList.vue +5 -5
- package/scripts/extension/helm/charts/ui-plugin-server/Chart.yaml +1 -1
- package/store/action-menu.js +4 -4
- package/store/auth.js +40 -7
- package/store/aws.js +1 -1
- package/store/catalog.js +12 -11
- package/store/digitalocean.js +4 -4
- package/store/features.js +1 -0
- package/store/github.js +70 -213
- package/store/gitlab.js +159 -0
- package/store/growl.js +1 -1
- package/store/i18n.js +7 -7
- package/store/index.js +63 -22
- package/store/linode.js +1 -1
- package/store/plugins.js +5 -5
- package/store/pnap.js +1 -1
- package/store/prefs.js +6 -6
- package/store/resource-fetch.js +3 -3
- package/store/type-map.js +61 -42
- package/store/uiplugins.ts +2 -1
- package/store/wm.js +5 -4
- package/tsconfig.default.json +10 -0
- package/tsconfig.json +2 -9
- package/types/shell/index.d.ts +12 -4
- package/utils/__tests__/version.test.ts +28 -0
- package/utils/alertmanagerconfig.js +4 -4
- package/utils/array.ts +4 -4
- package/utils/async.ts +1 -1
- package/utils/auth.js +3 -3
- package/utils/axios.js +5 -5
- package/utils/cluster.js +4 -3
- package/utils/color.js +10 -0
- package/utils/create-yaml.js +4 -4
- package/utils/crypto/browserHashUtils.js +1 -1
- package/utils/crypto/browserMd5.js +1 -1
- package/utils/crypto/browserSha1.js +1 -1
- package/utils/crypto/browserSha256.js +1 -1
- package/utils/crypto/index.js +3 -3
- package/utils/favicon.js +2 -3
- package/utils/gatekeeper/util.js +3 -3
- package/utils/gc/gc.ts +2 -2
- package/utils/git.ts +92 -0
- package/utils/grafana.js +4 -4
- package/utils/monitoring.js +2 -2
- package/utils/nuxt.js +2 -2
- package/utils/object.js +5 -5
- package/utils/pod-security-admission.ts +1 -1
- package/utils/projectAndNamespaceFiltering.utils.ts +1 -1
- package/utils/select.js +2 -2
- package/utils/selector.js +2 -2
- package/utils/settings.ts +17 -2
- package/utils/socket.js +30 -6
- package/utils/sort.js +1 -1
- package/utils/string.js +1 -1
- package/utils/url.ts +1 -1
- package/utils/validators/formRules/index.ts +3 -3
- package/utils/validators/role-template.js +4 -4
- package/utils/version.js +14 -1
- package/vue.config.js +19 -13
- package/components/form/GithubPicker.vue +0 -390
|
@@ -1,18 +1,19 @@
|
|
|
1
|
+
/* eslint-disable jest/no-hooks */
|
|
1
2
|
import { mount, Wrapper } from '@vue/test-utils';
|
|
2
3
|
import { StringList } from './index';
|
|
3
4
|
|
|
4
|
-
describe('
|
|
5
|
+
describe('stringList.vue', () => {
|
|
5
6
|
let wrapper: Wrapper<InstanceType<typeof StringList>>;
|
|
6
7
|
|
|
7
8
|
beforeEach(() => {
|
|
8
9
|
wrapper = mount(StringList, { propsData: { items: [] } });
|
|
9
10
|
});
|
|
10
11
|
|
|
11
|
-
describe('
|
|
12
|
+
describe('list box', () => {
|
|
12
13
|
it('is empty', () => {
|
|
13
14
|
const box = wrapper.find('[data-testid="div-string-list-box"]').element as HTMLElement;
|
|
14
15
|
|
|
15
|
-
expect(box.children
|
|
16
|
+
expect(box.children).toHaveLength(0);
|
|
16
17
|
});
|
|
17
18
|
|
|
18
19
|
it('show multiple items', async() => {
|
|
@@ -22,7 +23,7 @@ describe('StringList.vue', () => {
|
|
|
22
23
|
|
|
23
24
|
const elements = wrapper.findAll('[data-testid^="div-item"]');
|
|
24
25
|
|
|
25
|
-
expect(elements
|
|
26
|
+
expect(elements).toHaveLength(10);
|
|
26
27
|
});
|
|
27
28
|
|
|
28
29
|
it('double click triggers inline edit mode', async() => {
|
|
@@ -130,7 +131,7 @@ describe('StringList.vue', () => {
|
|
|
130
131
|
});
|
|
131
132
|
});
|
|
132
133
|
|
|
133
|
-
describe('
|
|
134
|
+
describe('buttons', () => {
|
|
134
135
|
it('are visible by default', () => {
|
|
135
136
|
const actionButtons = wrapper.find('[data-testid="div-action-buttons"]');
|
|
136
137
|
|
|
@@ -144,7 +145,7 @@ describe('StringList.vue', () => {
|
|
|
144
145
|
expect(actionButtons.element).toBeUndefined();
|
|
145
146
|
});
|
|
146
147
|
|
|
147
|
-
describe('
|
|
148
|
+
describe('add button', () => {
|
|
148
149
|
it('is enabled by default', () => {
|
|
149
150
|
const addButton = wrapper.find('[data-testid="button-add"]')?.element as HTMLButtonElement;
|
|
150
151
|
|
|
@@ -176,7 +177,7 @@ describe('StringList.vue', () => {
|
|
|
176
177
|
});
|
|
177
178
|
});
|
|
178
179
|
|
|
179
|
-
describe('
|
|
180
|
+
describe('remove button', () => {
|
|
180
181
|
it('is disabled by default', () => {
|
|
181
182
|
const removeButton = wrapper.find('[data-testid="button-remove"]');
|
|
182
183
|
const buttonElem = removeButton.element as HTMLButtonElement;
|
|
@@ -279,7 +280,7 @@ describe('StringList.vue', () => {
|
|
|
279
280
|
});
|
|
280
281
|
});
|
|
281
282
|
|
|
282
|
-
describe('
|
|
283
|
+
describe('list edit', () => {
|
|
283
284
|
const validItem = ' item name ';
|
|
284
285
|
const emptyItem = ' ';
|
|
285
286
|
|
|
@@ -397,7 +398,7 @@ describe('StringList.vue', () => {
|
|
|
397
398
|
});
|
|
398
399
|
});
|
|
399
400
|
|
|
400
|
-
describe('
|
|
401
|
+
describe('errors handling', () => {
|
|
401
402
|
it('show duplicate warning icon when errorMessages is defined', async() => {
|
|
402
403
|
const items = ['test'];
|
|
403
404
|
|
|
@@ -30,9 +30,9 @@ const CLASS = {
|
|
|
30
30
|
* Manage a list of strings
|
|
31
31
|
*/
|
|
32
32
|
export default Vue.extend({
|
|
33
|
-
components: { LabeledInput },
|
|
34
33
|
|
|
35
|
-
name:
|
|
34
|
+
name: 'StringList',
|
|
35
|
+
components: { LabeledInput },
|
|
36
36
|
|
|
37
37
|
props: {
|
|
38
38
|
/**
|
|
@@ -100,8 +100,8 @@ export default Vue.extend({
|
|
|
100
100
|
*/
|
|
101
101
|
errorMessagesArray(): string[] {
|
|
102
102
|
return (Object.keys(this.errors) as Error[])
|
|
103
|
-
.filter(f => this.errors[f] && this.errorMessages[f])
|
|
104
|
-
.map(k => this.errorMessages[k]);
|
|
103
|
+
.filter((f) => this.errors[f] && this.errorMessages[f])
|
|
104
|
+
.map((k) => this.errorMessages[k]);
|
|
105
105
|
},
|
|
106
106
|
},
|
|
107
107
|
|
|
@@ -364,7 +364,7 @@ export default Vue.extend({
|
|
|
364
364
|
* Remove an item from items list
|
|
365
365
|
*/
|
|
366
366
|
deleteItem(item?: string) {
|
|
367
|
-
const items = this.items.filter(f => f !== item);
|
|
367
|
+
const items = this.items.filter((f) => f !== item);
|
|
368
368
|
|
|
369
369
|
this.updateItems(items);
|
|
370
370
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
annotations:
|
|
2
2
|
catalog.cattle.io/certified: rancher # Any application we are adding as a helm chart
|
|
3
|
-
catalog.cattle.io/kube-version: '>= 1.16.0-0 < 1.
|
|
3
|
+
catalog.cattle.io/kube-version: '>= 1.16.0-0 < 1.28.0-0'
|
|
4
4
|
catalog.cattle.io/namespace: cattle-ui-plugin-system # Must prefix with cattle- and suffix with -system=
|
|
5
5
|
catalog.cattle.io/os: linux
|
|
6
6
|
catalog.cattle.io/permits-os: linux, windows
|
package/store/action-menu.js
CHANGED
|
@@ -22,10 +22,10 @@ export const state = function() {
|
|
|
22
22
|
};
|
|
23
23
|
|
|
24
24
|
export const getters = {
|
|
25
|
-
showing: state => state.show,
|
|
26
|
-
elem: state => state.elem,
|
|
27
|
-
event: state => state.event,
|
|
28
|
-
resources: state => state.resources,
|
|
25
|
+
showing: (state) => state.show,
|
|
26
|
+
elem: (state) => state.elem,
|
|
27
|
+
event: (state) => state.event,
|
|
28
|
+
resources: (state) => state.resources,
|
|
29
29
|
|
|
30
30
|
options(state) {
|
|
31
31
|
let selected = state.resources;
|
package/store/auth.js
CHANGED
|
@@ -160,7 +160,10 @@ export const actions = {
|
|
|
160
160
|
return findBy(authConfigs, 'id', id);
|
|
161
161
|
},
|
|
162
162
|
|
|
163
|
-
|
|
163
|
+
/**
|
|
164
|
+
* Create the basic json object used for the nonce (this includes the random nonce/state)
|
|
165
|
+
*/
|
|
166
|
+
createNonce(ctx, opt) {
|
|
164
167
|
const out = { nonce: randomStr(16), to: 'vue' };
|
|
165
168
|
|
|
166
169
|
if ( opt.test ) {
|
|
@@ -171,7 +174,15 @@ export const actions = {
|
|
|
171
174
|
out.provider = opt.provider;
|
|
172
175
|
}
|
|
173
176
|
|
|
174
|
-
|
|
177
|
+
return out;
|
|
178
|
+
},
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Save nonce details. Information it contains will be used to validate auth requests/responses
|
|
182
|
+
* Note - this may be structurally different than the nonce we encode and send
|
|
183
|
+
*/
|
|
184
|
+
saveNonce(ctx, opt) {
|
|
185
|
+
const strung = JSON.stringify(opt);
|
|
175
186
|
|
|
176
187
|
this.$cookies.set(KEY, strung, {
|
|
177
188
|
path: '/',
|
|
@@ -182,6 +193,15 @@ export const actions = {
|
|
|
182
193
|
return strung;
|
|
183
194
|
},
|
|
184
195
|
|
|
196
|
+
/**
|
|
197
|
+
* Convert the nonce into something we can send
|
|
198
|
+
*/
|
|
199
|
+
encodeNonce(ctx, nonce) {
|
|
200
|
+
const stringify = JSON.stringify(nonce);
|
|
201
|
+
|
|
202
|
+
return base64Encode(stringify, 'url');
|
|
203
|
+
},
|
|
204
|
+
|
|
185
205
|
async redirectTo({ state, commit, dispatch }, opt = {}) {
|
|
186
206
|
const provider = opt.provider;
|
|
187
207
|
let redirectUrl = opt.redirectUrl;
|
|
@@ -200,10 +220,16 @@ export const actions = {
|
|
|
200
220
|
returnToUrl = `${ window.location.origin }/verify-auth-azure`;
|
|
201
221
|
}
|
|
202
222
|
|
|
203
|
-
|
|
223
|
+
// The base nonce that will be sent server way
|
|
224
|
+
const baseNonce = opt.nonce || await dispatch('createNonce', opt);
|
|
225
|
+
|
|
226
|
+
// Save a possibly expanded nonce
|
|
227
|
+
await dispatch('saveNonce', opt.persistNonce || baseNonce);
|
|
228
|
+
// Convert the base nonce in to something we can transmit
|
|
229
|
+
const encodedNonce = await dispatch('encodeNonce', baseNonce);
|
|
204
230
|
|
|
205
231
|
const fromQuery = unescape(parseUrl(redirectUrl).query?.[GITHUB_SCOPE] || '');
|
|
206
|
-
const scopes = fromQuery.split(/[, ]+/).filter(x => !!x);
|
|
232
|
+
const scopes = fromQuery.split(/[, ]+/).filter((x) => !!x);
|
|
207
233
|
|
|
208
234
|
if (BASE_SCOPES[provider]) {
|
|
209
235
|
addObjects(scopes, BASE_SCOPES[provider]);
|
|
@@ -216,8 +242,8 @@ export const actions = {
|
|
|
216
242
|
let url = removeParam(redirectUrl, GITHUB_SCOPE);
|
|
217
243
|
|
|
218
244
|
const params = {
|
|
219
|
-
[GITHUB_SCOPE]: scopes.join(','),
|
|
220
|
-
[GITHUB_NONCE]:
|
|
245
|
+
[GITHUB_SCOPE]: scopes.join(opt.scopesJoinChar || ','), // Some providers won't accept comma separated scopes
|
|
246
|
+
[GITHUB_NONCE]: encodedNonce
|
|
221
247
|
};
|
|
222
248
|
|
|
223
249
|
if (!url.includes(GITHUB_REDIRECT)) {
|
|
@@ -249,9 +275,16 @@ export const actions = {
|
|
|
249
275
|
return ERR_NONCE;
|
|
250
276
|
}
|
|
251
277
|
|
|
278
|
+
const body = { code };
|
|
279
|
+
|
|
280
|
+
// If the request came with a pkce code ensure we also sent that in the verify
|
|
281
|
+
if (parsed.pkceCodeVerifier) {
|
|
282
|
+
body.code_verifier = parsed.pkceCodeVerifier;
|
|
283
|
+
}
|
|
284
|
+
|
|
252
285
|
return dispatch('login', {
|
|
253
286
|
provider,
|
|
254
|
-
body
|
|
287
|
+
body
|
|
255
288
|
});
|
|
256
289
|
},
|
|
257
290
|
|
package/store/aws.js
CHANGED
package/store/catalog.js
CHANGED
|
@@ -75,7 +75,7 @@ export const getters = {
|
|
|
75
75
|
},
|
|
76
76
|
|
|
77
77
|
charts(state, getters, rootState, rootGetters) {
|
|
78
|
-
const repoKeys = getters.repos.map(x => x._key);
|
|
78
|
+
const repoKeys = getters.repos.map((x) => x._key);
|
|
79
79
|
let cluster = rootGetters['currentCluster'];
|
|
80
80
|
|
|
81
81
|
if ( rootGetters['currentProduct']?.inStore === 'management' ) {
|
|
@@ -120,7 +120,7 @@ export const getters = {
|
|
|
120
120
|
});
|
|
121
121
|
|
|
122
122
|
if ( includeHidden === false ) {
|
|
123
|
-
matching = matching.filter(x => !x.hidden);
|
|
123
|
+
matching = matching.filter((x) => !x.hidden);
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
if ( !matching.length ) {
|
|
@@ -176,7 +176,7 @@ export const getters = {
|
|
|
176
176
|
name = name.toLowerCase().trim();
|
|
177
177
|
chartVersion = normalizeVersion(chartVersion);
|
|
178
178
|
|
|
179
|
-
const matching = getters.charts.filter(chart => chart.chartName.toLowerCase().trim() === name);
|
|
179
|
+
const matching = getters.charts.filter((chart) => chart.chartName.toLowerCase().trim() === name);
|
|
180
180
|
|
|
181
181
|
if ( !matching.length ) {
|
|
182
182
|
return;
|
|
@@ -192,9 +192,9 @@ export const getters = {
|
|
|
192
192
|
if ( wantVersion === 'latest' ) {
|
|
193
193
|
version = chart.versions[0];
|
|
194
194
|
} else if ( wantVersion === 'match' || wantVersion === 'matching' ) {
|
|
195
|
-
version = chart.versions.find(v => normalizeVersion(v.version) === chartVersion);
|
|
195
|
+
version = chart.versions.find((v) => normalizeVersion(v.version) === chartVersion);
|
|
196
196
|
} else {
|
|
197
|
-
version = chart.versions.find(v => normalizeVersion(v.version) === wantVersion);
|
|
197
|
+
version = chart.versions.find((v) => normalizeVersion(v.version) === wantVersion);
|
|
198
198
|
}
|
|
199
199
|
|
|
200
200
|
if ( version ) {
|
|
@@ -205,7 +205,7 @@ export const getters = {
|
|
|
205
205
|
|
|
206
206
|
versionProviding(state, getters) {
|
|
207
207
|
return ({ repoType, repoName, gvr }) => {
|
|
208
|
-
const matching = getters.charts.filter(chart => chart.provides.includes(gvr) );
|
|
208
|
+
const matching = getters.charts.filter((chart) => chart.provides.includes(gvr) );
|
|
209
209
|
|
|
210
210
|
if ( !matching.length ) {
|
|
211
211
|
return;
|
|
@@ -215,7 +215,7 @@ export const getters = {
|
|
|
215
215
|
preferSameRepo(matching, repoType, repoName);
|
|
216
216
|
}
|
|
217
217
|
|
|
218
|
-
const version = matching[0].versions.find(version => version.annotations?.[CATALOG_ANNOTATIONS.PROVIDES] === gvr);
|
|
218
|
+
const version = matching[0].versions.find((version) => version.annotations?.[CATALOG_ANNOTATIONS.PROVIDES] === gvr);
|
|
219
219
|
|
|
220
220
|
if ( version ) {
|
|
221
221
|
return clone(version);
|
|
@@ -274,7 +274,7 @@ export const getters = {
|
|
|
274
274
|
const allPaths = require.context('@shell/chart', true, /\.vue$/).keys();
|
|
275
275
|
|
|
276
276
|
allPaths
|
|
277
|
-
.filter(path => path.startsWith(stepsPath))
|
|
277
|
+
.filter((path) => path.startsWith(stepsPath))
|
|
278
278
|
.forEach((path) => {
|
|
279
279
|
try {
|
|
280
280
|
steps.push({
|
|
@@ -354,6 +354,7 @@ export const actions = {
|
|
|
354
354
|
|
|
355
355
|
// As per comment above, when there are no clusters this will be management. Store it such that it can be used for those cases
|
|
356
356
|
commit('setInStore', inStore);
|
|
357
|
+
hash.cluster = hash.cluster.filter((repo) => !(repo?.metadata?.annotations?.[CATALOG_ANNOTATIONS.HIDDEN_REPO] === 'true'));
|
|
357
358
|
|
|
358
359
|
commit('setRepos', hash);
|
|
359
360
|
|
|
@@ -399,7 +400,7 @@ export const actions = {
|
|
|
399
400
|
},
|
|
400
401
|
|
|
401
402
|
async refresh({ getters, commit, dispatch }) {
|
|
402
|
-
const promises = getters.repos.map(x => x.refresh());
|
|
403
|
+
const promises = getters.repos.map((x) => x.refresh());
|
|
403
404
|
|
|
404
405
|
// @TODO wait for repo state to indicate they're done once the API has that
|
|
405
406
|
|
|
@@ -567,7 +568,7 @@ function normalizeVersion(v) {
|
|
|
567
568
|
}
|
|
568
569
|
|
|
569
570
|
function filterCategories(categories) {
|
|
570
|
-
categories = (categories || []).map(x => normalizeCategory(x));
|
|
571
|
+
categories = (categories || []).map((x) => normalizeCategory(x));
|
|
571
572
|
|
|
572
573
|
const out = [];
|
|
573
574
|
|
|
@@ -650,7 +651,7 @@ export function filterAndArrangeCharts(charts, {
|
|
|
650
651
|
|
|
651
652
|
if ( searchQuery ) {
|
|
652
653
|
// The search filter doesn't match
|
|
653
|
-
const searchTokens = searchQuery.split(/\s*[, ]\s*/).map(x => ensureRegex(x, false));
|
|
654
|
+
const searchTokens = searchQuery.split(/\s*[, ]\s*/).map((x) => ensureRegex(x, false));
|
|
654
655
|
|
|
655
656
|
for ( const token of searchTokens ) {
|
|
656
657
|
const chartDescription = c.chartDescription || '';
|
package/store/digitalocean.js
CHANGED
|
@@ -39,7 +39,7 @@ export const mutations = {
|
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
export const getters = {
|
|
42
|
-
fromCache: state => ({ credentialId, key }) => {
|
|
42
|
+
fromCache: (state) => ({ credentialId, key }) => {
|
|
43
43
|
return state.cache[credentialId]?.[key];
|
|
44
44
|
},
|
|
45
45
|
};
|
|
@@ -64,8 +64,8 @@ export const actions = {
|
|
|
64
64
|
const regions = await dispatch('cachedCommand', { credentialId, command: 'regions' });
|
|
65
65
|
const sizes = await dispatch('cachedCommand', { credentialId, command: 'sizes' });
|
|
66
66
|
|
|
67
|
-
const regionInfo = regions.regions.find(x => x.slug === region);
|
|
68
|
-
const available = sizes.sizes.filter(size => regionInfo.sizes.includes(size.slug)).map((size) => {
|
|
67
|
+
const regionInfo = regions.regions.find((x) => x.slug === region);
|
|
68
|
+
const available = sizes.sizes.filter((size) => regionInfo.sizes.includes(size.slug)).map((size) => {
|
|
69
69
|
const match = size.slug.match(/^(so|gd|g|c|m|s).*-/);
|
|
70
70
|
const plan = match ? match[1] : (size.slug.includes('-') ? 'standard' : 'other');
|
|
71
71
|
|
|
@@ -81,7 +81,7 @@ export const actions = {
|
|
|
81
81
|
out.label = rootGetters['i18n/t']('cluster.machineConfig.digitalocean.sizeLabel', out);
|
|
82
82
|
|
|
83
83
|
return out;
|
|
84
|
-
}).filter(size => size.plan !== 'other');
|
|
84
|
+
}).filter((size) => size.plan !== 'other');
|
|
85
85
|
|
|
86
86
|
return sortBy(available, ['planSort', 'memoryGb', 'vcpus', 'disk']);
|
|
87
87
|
},
|
package/store/features.js
CHANGED
|
@@ -30,6 +30,7 @@ export const RKE2 = create('rke2', true);
|
|
|
30
30
|
export const UNSUPPORTED_STORAGE_DRIVERS = create('unsupported-storage-drivers', false);
|
|
31
31
|
export const FLEET = create('continuous-delivery', true);
|
|
32
32
|
export const HARVESTER = create('harvester', true);
|
|
33
|
+
export const HARVESTER_CONTAINER = create('harvester-baremetal-container-workload', false);
|
|
33
34
|
|
|
34
35
|
// Not currently used.. no point defining ones we don't use
|
|
35
36
|
// export const EMBEDDED_CLUSTER_API = create('embedded-cluster-api', true);
|