@rancher/shell 3.0.5-rc.5 → 3.0.5-rc.6
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 +1 -0
- package/assets/images/key.svg +17 -0
- package/assets/styles/base/_spacing.scss +2 -2
- package/assets/styles/global/_form.scss +1 -1
- package/assets/styles/global/_labeled-input.scss +1 -1
- package/assets/styles/themes/_dark.scss +3 -0
- package/assets/styles/themes/_light.scss +3 -0
- package/assets/styles/vendor/vue-select.scss +1 -1
- package/assets/translations/en-us.yaml +404 -64
- package/assets/translations/zh-hans.yaml +3 -4
- package/cloud-credential/gcp.vue +9 -1
- package/components/AppModal.vue +2 -0
- package/components/CodeMirror.vue +1 -1
- package/components/ConfigMapSettings/Settings.vue +377 -0
- package/components/ConfigMapSettings/index.vue +354 -0
- package/components/CruResource.vue +1 -2
- package/components/DetailText.vue +61 -11
- package/components/Drawer/Chrome.vue +116 -0
- package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +61 -0
- package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +82 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
- package/components/Drawer/ResourceDetailDrawer/composables.ts +50 -0
- package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
- package/components/Drawer/ResourceDetailDrawer/index.vue +110 -0
- package/components/GrowlManager.vue +16 -15
- package/components/IconOrSvg.vue +5 -0
- package/components/KeyValueView.vue +1 -1
- package/components/LocaleSelector.vue +9 -1
- package/components/ProgressBarMulti.vue +1 -0
- package/components/PromptModal.vue +6 -1
- package/components/RelatedResources.vue +4 -12
- package/components/Resource/Detail/Additional.vue +46 -0
- package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +1 -1
- package/components/Resource/Detail/Metadata/Annotations/index.vue +5 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +37 -254
- package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +298 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +27 -5
- package/components/Resource/Detail/Metadata/KeyValue.vue +25 -17
- package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +1 -1
- package/components/Resource/Detail/Metadata/Labels/index.vue +4 -0
- package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +1 -1
- package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +1 -1
- package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
- package/components/Resource/Detail/Metadata/composables.ts +60 -11
- package/components/Resource/Detail/Metadata/index.vue +12 -5
- package/components/Resource/Detail/Page.vue +15 -0
- package/components/Resource/Detail/ResourceRow.vue +37 -18
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
- package/components/Resource/Detail/TitleBar/Title.vue +2 -1
- package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +1 -1
- package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +1 -1
- package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
- package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +1 -1
- package/components/Resource/Detail/TitleBar/composables.ts +44 -0
- package/components/Resource/Detail/TitleBar/index.vue +83 -11
- package/components/Resource/Detail/composables.ts +45 -0
- package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
- package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
- package/components/ResourceDetail/Masthead/index.vue +65 -0
- package/components/ResourceDetail/Masthead/latest.vue +44 -0
- package/components/ResourceDetail/__tests__/index.test.ts +26 -5
- package/components/ResourceDetail/index.vue +30 -16
- package/components/ResourceDetail/legacy.vue +18 -1
- package/components/ResourceList/Masthead.vue +6 -0
- package/components/ResourceYaml.vue +14 -1
- package/components/SlideInPanelManager.vue +46 -7
- package/components/StateDot/index.vue +28 -0
- package/components/Tabbed/index.vue +11 -15
- package/components/Wizard.vue +4 -2
- package/components/__tests__/ConfigMapSettings.test.ts +376 -0
- package/components/__tests__/GrowlManager.test.ts +0 -25
- package/components/auth/login/ldap.vue +1 -1
- package/components/fleet/FleetApplications.vue +0 -7
- package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
- package/components/fleet/FleetClusterTargets/index.vue +455 -0
- package/components/fleet/FleetClusters.vue +25 -6
- package/components/fleet/FleetGitRepoPaths.vue +476 -0
- package/components/fleet/FleetHelmOps.vue +8 -0
- package/components/fleet/FleetRepos.vue +1 -6
- package/components/fleet/FleetResources.vue +4 -5
- package/components/fleet/FleetValuesFrom.vue +295 -0
- package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
- package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
- package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +13 -13
- package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
- package/components/fleet/dashboard/ResourceCard.vue +1 -0
- package/components/fleet/dashboard/ResourceCardSummary.vue +1 -5
- package/components/fleet/dashboard/ResourceDetails.vue +8 -10
- package/components/fleet/dashboard/ResourcePanel.vue +15 -8
- package/components/form/ArrayList.vue +13 -2
- package/components/form/ChangePassword.vue +3 -1
- package/components/form/Footer.vue +10 -4
- package/components/form/KeyValue.vue +81 -43
- package/components/form/LabeledSelect.vue +56 -16
- package/components/form/Labels.vue +90 -17
- package/components/form/MatchExpressions.vue +46 -5
- package/components/form/NameNsDescription.vue +1 -1
- package/components/form/ResourceSelector.vue +1 -0
- package/components/form/ResourceTabs/index.vue +5 -0
- package/components/form/SecretSelector.vue +9 -2
- package/components/form/Select.vue +57 -19
- package/components/form/SimpleSecretSelector.vue +9 -2
- package/components/form/Taints.vue +21 -2
- package/components/form/UnitInput.vue +8 -0
- package/components/form/ValueFromResource.vue +1 -1
- package/components/form/__tests__/LabeledSelect.test.ts +8 -4
- package/components/form/__tests__/Labels.test.ts +360 -0
- package/components/form/__tests__/MatchExpressions.test.ts +16 -13
- package/components/form/__tests__/Select.test.ts +5 -2
- package/components/formatter/FleetApplicationSource.vue +1 -1
- package/components/formatter/WorkloadHealthScale.vue +1 -1
- package/components/google/AccountAccess.vue +211 -0
- package/components/google/types/gcp.d.ts +136 -0
- package/components/google/types/index.d.ts +101 -0
- package/components/google/util/__mocks__/gcp.ts +465 -0
- package/components/google/util/formatter.ts +82 -0
- package/components/google/util/gcp.ts +134 -0
- package/components/google/util/index.d.ts +11 -0
- package/components/nav/Favorite.vue +1 -1
- package/components/nav/Group.vue +70 -47
- package/components/nav/Header.vue +5 -1
- package/components/nav/NamespaceFilter.vue +13 -1
- package/components/nav/NotificationCenter/Notification.vue +510 -0
- package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
- package/components/nav/NotificationCenter/index.vue +148 -0
- package/composables/drawer.ts +26 -0
- package/composables/resources.test.ts +63 -0
- package/composables/resources.ts +38 -0
- package/composables/useIsNewDetailPageEnabled.ts +17 -0
- package/config/labels-annotations.js +6 -0
- package/config/product/auth.js +16 -1
- package/config/product/{cis.js → compliance.js} +23 -26
- package/config/product/explorer.js +5 -1
- package/config/product/fleet.js +7 -0
- package/config/product/settings.js +22 -11
- package/config/query-params.js +3 -0
- package/config/roles.ts +1 -1
- package/config/router/navigation-guards/authentication.js +51 -2
- package/config/router/routes.js +27 -31
- package/config/settings.ts +21 -3
- package/config/store.js +2 -0
- package/config/system-namespaces.js +1 -1
- package/config/table-headers.js +2 -2
- package/config/types.js +15 -6
- package/core/plugin.ts +32 -7
- package/core/types.ts +18 -1
- package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
- package/detail/management.cattle.io.fleetworkspace.vue +18 -27
- package/detail/management.cattle.io.oidcclient.vue +369 -0
- package/detail/node.vue +2 -2
- package/detail/pod.vue +2 -2
- package/detail/service.vue +10 -1
- package/detail/workload/index.vue +8 -2
- package/dialog/ExtensionCatalogUninstallDialog.vue +7 -4
- package/dialog/GenericPrompt.vue +1 -1
- package/dialog/ImportDialog.vue +8 -8
- package/dialog/OidcClientSecretDialog.vue +117 -0
- package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
- package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +5 -2
- package/edit/autoscaling.horizontalpodautoscaler/index.vue +4 -1
- package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
- package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
- package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
- package/edit/configmap.vue +4 -1
- package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
- package/edit/fleet.cattle.io.gitrepo.vue +44 -222
- package/edit/fleet.cattle.io.helmop.vue +44 -269
- package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
- package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
- package/edit/logging-flow/index.vue +1 -0
- package/edit/logging.banzaicloud.io.output/index.vue +1 -0
- package/edit/management.cattle.io.fleetworkspace.vue +1 -0
- package/edit/management.cattle.io.oidcclient.vue +162 -0
- package/edit/management.cattle.io.project.vue +4 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
- package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
- package/edit/monitoring.coreos.com.receiver/auth.vue +30 -30
- package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
- package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
- package/edit/monitoring.coreos.com.route.vue +1 -0
- package/edit/namespace.vue +1 -0
- package/edit/networking.istio.io.destinationrule/index.vue +4 -1
- package/edit/networking.k8s.io.ingress/index.vue +4 -1
- package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +7 -2
- package/edit/networking.k8s.io.networkpolicy/index.vue +6 -2
- package/edit/node.vue +1 -0
- package/edit/persistentvolume/index.vue +4 -1
- package/edit/provisioning.cattle.io.cluster/rke2.vue +418 -382
- package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +27 -27
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
- package/edit/resources.cattle.io.restore.vue +1 -1
- package/edit/secret/index.vue +1 -0
- package/edit/service.vue +4 -1
- package/edit/serviceaccount.vue +4 -1
- package/edit/storage.k8s.io.storageclass/index.vue +4 -1
- package/edit/workload/index.vue +5 -0
- package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
- package/list/management.cattle.io.oidcclient.vue +108 -0
- package/list/node.vue +2 -0
- package/machine-config/amazonec2.vue +3 -24
- package/machine-config/components/GCEImage.vue +374 -0
- package/machine-config/google.vue +617 -0
- package/mixins/__tests__/brand.spec.ts +170 -0
- package/mixins/brand.js +16 -17
- package/mixins/create-edit-view/index.js +5 -0
- package/mixins/resource-fetch-api-pagination.js +16 -0
- package/mixins/vue-select-overrides.js +1 -0
- package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
- package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
- package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
- package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
- package/models/fleet-application.js +8 -79
- package/models/fleet.cattle.io.cluster.js +11 -0
- package/models/fleet.cattle.io.gitrepo.js +2 -2
- package/models/fleet.cattle.io.helmop.js +9 -39
- package/models/management.cattle.io.fleetworkspace.js +2 -1
- package/models/management.cattle.io.oidcclient.js +18 -0
- package/models/management.cattle.io.registration.js +3 -0
- package/models/provisioning.cattle.io.cluster.js +5 -5
- package/models/service.js +4 -0
- package/models/workload.js +5 -0
- package/package.json +1 -1
- package/pages/about.vue +4 -58
- package/pages/auth/login.vue +1 -1
- package/pages/c/_cluster/apps/charts/AddRepoLink.vue +0 -1
- package/pages/c/_cluster/apps/charts/index.vue +285 -81
- package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
- package/pages/c/_cluster/explorer/index.vue +3 -3
- package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
- package/pages/c/_cluster/fleet/application/create.vue +3 -2
- package/pages/c/_cluster/fleet/index.vue +94 -56
- package/pages/c/_cluster/fleet/settings/index.vue +229 -0
- package/pages/c/_cluster/longhorn/index.vue +5 -2
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
- package/pages/explorer/resource/detail/configmap.vue +30 -7
- package/pages/explorer/resource/detail/secret.vue +50 -0
- package/pages/home.vue +9 -55
- package/pages/support/index.vue +4 -6
- package/plugins/dashboard-store/actions.js +19 -5
- package/plugins/dashboard-store/getters.js +4 -0
- package/plugins/dashboard-store/resource-class.js +16 -2
- package/plugins/steve/steve-pagination-utils.ts +26 -18
- package/plugins/steve/subscribe.js +6 -1
- package/rancher-components/Banner/Banner.vue +13 -0
- package/rancher-components/Form/Checkbox/Checkbox.vue +9 -4
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +1 -1
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
- package/rancher-components/RcItemCard/RcItemCard.vue +8 -3
- package/store/auth.js +2 -0
- package/store/catalog.js +23 -1
- package/store/growl.js +97 -8
- package/store/index.js +6 -0
- package/store/notifications.ts +426 -0
- package/store/prefs.js +0 -1
- package/store/type-map.js +19 -16
- package/store/uiplugins.ts +15 -1
- package/types/fleet.d.ts +24 -0
- package/types/notifications/index.ts +74 -0
- package/types/shell/index.d.ts +46 -32
- package/types/store/dashboard-store.types.ts +16 -0
- package/utils/__tests__/fleet.test.ts +148 -0
- package/utils/__tests__/object.test.ts +54 -1
- package/utils/__tests__/string.test.ts +273 -1
- package/utils/__tests__/time.test.ts +31 -0
- package/utils/auth.js +9 -2
- package/utils/crypto/encryption.ts +103 -0
- package/utils/cspAdaptor.ts +51 -0
- package/utils/fleet.ts +54 -65
- package/utils/object.js +36 -0
- package/utils/pagination-utils.ts +1 -1
- package/utils/release-notes.ts +48 -0
- package/utils/selector-typed.ts +7 -2
- package/utils/string.js +24 -0
- package/utils/{time.js → time.ts} +25 -6
- package/utils/uiplugins.ts +22 -0
- package/utils/validators/formRules/index.ts +3 -0
- package/components/Resource/Detail/TitleBar/composable.ts +0 -31
- package/config/product/legacy.js +0 -62
- package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
- package/pages/c/_cluster/legacy/project/_page.vue +0 -57
- package/pages/c/_cluster/legacy/project/index.vue +0 -32
- package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
- /package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +0 -0
package/types/shell/index.d.ts
CHANGED
|
@@ -158,6 +158,11 @@ export const SYSTEM_LABELS: string[];
|
|
|
158
158
|
export namespace CLOUD_CREDENTIALS {
|
|
159
159
|
let EXPIRATION: string;
|
|
160
160
|
}
|
|
161
|
+
export namespace OIDC_CLIENT_SECRET_ANNOTATIONS {
|
|
162
|
+
let CREATE: string;
|
|
163
|
+
let REGEN: string;
|
|
164
|
+
let REMOVE: string;
|
|
165
|
+
}
|
|
161
166
|
}
|
|
162
167
|
|
|
163
168
|
// @shell/config/query-params
|
|
@@ -224,6 +229,7 @@ export const PROVIDER: "provider";
|
|
|
224
229
|
export const CLOUD_CREDENTIAL: "cloud";
|
|
225
230
|
export const PROJECT_ID: "projectId";
|
|
226
231
|
export const FLAT_VIEW: "flatView";
|
|
232
|
+
export const RANCHER_AS_OIDC_QUERY_PARAMS: string[];
|
|
227
233
|
}
|
|
228
234
|
|
|
229
235
|
// @shell/config/table-headers
|
|
@@ -2045,6 +2051,12 @@ export namespace CATALOG {
|
|
|
2045
2051
|
export { APP_1 as APP };
|
|
2046
2052
|
export let REPO: string;
|
|
2047
2053
|
}
|
|
2054
|
+
export namespace CATALOG_SORT_OPTIONS {
|
|
2055
|
+
let RECOMMENDED: string;
|
|
2056
|
+
let LAST_UPDATED_DESC: string;
|
|
2057
|
+
let ALPHABETICAL_ASC: string;
|
|
2058
|
+
let ALPHABETICAL_DESC: string;
|
|
2059
|
+
}
|
|
2048
2060
|
export const UI_PLUGIN: "catalog.cattle.io.uiplugin";
|
|
2049
2061
|
export namespace HELM {
|
|
2050
2062
|
let PROJECTHELMCHART: string;
|
|
@@ -2126,6 +2138,7 @@ export namespace MANAGEMENT {
|
|
|
2126
2138
|
export let RKE_TEMPLATE: string;
|
|
2127
2139
|
export let RKE_TEMPLATE_REVISION: string;
|
|
2128
2140
|
export let CLUSTER_PROXY_CONFIG: string;
|
|
2141
|
+
export let OIDC_CLIENT: string;
|
|
2129
2142
|
}
|
|
2130
2143
|
export namespace CAPI {
|
|
2131
2144
|
let CAPI_CLUSTER: string;
|
|
@@ -2202,7 +2215,7 @@ export namespace BACKUP_RESTORE {
|
|
|
2202
2215
|
let BACKUP: string;
|
|
2203
2216
|
let RESTORE: string;
|
|
2204
2217
|
}
|
|
2205
|
-
export namespace
|
|
2218
|
+
export namespace COMPLIANCE {
|
|
2206
2219
|
let CLUSTER_SCAN: string;
|
|
2207
2220
|
let CLUSTER_SCAN_PROFILE: string;
|
|
2208
2221
|
let BENCHMARK: string;
|
|
@@ -2341,6 +2354,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
2341
2354
|
type: BooleanConstructor;
|
|
2342
2355
|
default: boolean;
|
|
2343
2356
|
};
|
|
2357
|
+
useTabbedHash: {
|
|
2358
|
+
type: BooleanConstructor;
|
|
2359
|
+
default: any;
|
|
2360
|
+
};
|
|
2344
2361
|
}>, {}, {
|
|
2345
2362
|
errors: any[];
|
|
2346
2363
|
}, {
|
|
@@ -2394,6 +2411,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
2394
2411
|
type: BooleanConstructor;
|
|
2395
2412
|
default: boolean;
|
|
2396
2413
|
};
|
|
2414
|
+
useTabbedHash: {
|
|
2415
|
+
type: BooleanConstructor;
|
|
2416
|
+
default: any;
|
|
2417
|
+
};
|
|
2397
2418
|
}>> & Readonly<{
|
|
2398
2419
|
[x: `on${Capitalize<string>}`]: (...args: any[]) => any;
|
|
2399
2420
|
}>, {
|
|
@@ -2403,6 +2424,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
2403
2424
|
initialValue: Record<string, any>;
|
|
2404
2425
|
liveValue: Record<string, any>;
|
|
2405
2426
|
realMode: string;
|
|
2427
|
+
useTabbedHash: boolean;
|
|
2406
2428
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
2407
2429
|
export default _default;
|
|
2408
2430
|
}
|
|
@@ -2660,6 +2682,7 @@ declare namespace _default {
|
|
|
2660
2682
|
*
|
|
2661
2683
|
* @param {*} ctx
|
|
2662
2684
|
* @param { {type: string, opt: ActionFindPageArgs} } opt
|
|
2685
|
+
* @returns @ActionFindPageResponse
|
|
2663
2686
|
*/
|
|
2664
2687
|
export function findPage(ctx: any, { type, opt }: {
|
|
2665
2688
|
type: string;
|
|
@@ -2675,6 +2698,9 @@ declare namespace _default {
|
|
|
2675
2698
|
* b) Pagination Disabled - use the old 'native kube api' - findMatching
|
|
2676
2699
|
*
|
|
2677
2700
|
* Filter is defined via the kube labelSelector object (see KubeLabelSelector)
|
|
2701
|
+
*
|
|
2702
|
+
* opt: @ActionFindLabelSelectorArgs
|
|
2703
|
+
* @returns @ActionFindMatchingResponse (resources[], or if transient { data: resources[], pagination: StorePagination })
|
|
2678
2704
|
*/
|
|
2679
2705
|
export function findLabelSelector(ctx: any, { type, context, matching: { namespace, labelSelector }, opt }: {
|
|
2680
2706
|
type: any;
|
|
@@ -2685,6 +2711,9 @@ declare namespace _default {
|
|
|
2685
2711
|
};
|
|
2686
2712
|
opt: any;
|
|
2687
2713
|
}): Promise<any>;
|
|
2714
|
+
/**
|
|
2715
|
+
* opt: @ActionFindMatchingArgs
|
|
2716
|
+
*/
|
|
2688
2717
|
export function findMatching(ctx: any, { type, selector, opt, namespace }: {
|
|
2689
2718
|
type: any;
|
|
2690
2719
|
selector: any;
|
|
@@ -2723,7 +2752,7 @@ declare namespace _default {
|
|
|
2723
2752
|
commit: any;
|
|
2724
2753
|
dispatch: any;
|
|
2725
2754
|
state: any;
|
|
2726
|
-
}, type: any): void;
|
|
2755
|
+
}, type: any, compareWatches: any): void;
|
|
2727
2756
|
export function promptRemove({ commit, state }: {
|
|
2728
2757
|
commit: any;
|
|
2729
2758
|
state: any;
|
|
@@ -2948,6 +2977,11 @@ export default class Resource {
|
|
|
2948
2977
|
setAnnotation(key: any, val: any): void;
|
|
2949
2978
|
get stateDisplay(): any;
|
|
2950
2979
|
get stateColor(): any;
|
|
2980
|
+
get stateColorPair(): {
|
|
2981
|
+
state: any;
|
|
2982
|
+
color: any;
|
|
2983
|
+
};
|
|
2984
|
+
get stateSimpleColor(): any;
|
|
2951
2985
|
get stateBackground(): any;
|
|
2952
2986
|
get stateIcon(): string;
|
|
2953
2987
|
get stateSort(): string;
|
|
@@ -3328,7 +3362,6 @@ export const HIDE_REPOS: any;
|
|
|
3328
3362
|
export const HIDE_DESC: any;
|
|
3329
3363
|
export const HIDE_SENSITIVE: any;
|
|
3330
3364
|
export const SHOW_PRE_RELEASE: any;
|
|
3331
|
-
export const SHOW_CHART_MODE: any;
|
|
3332
3365
|
export const DATE_FORMAT: any;
|
|
3333
3366
|
export const TIME_FORMAT: any;
|
|
3334
3367
|
export const TIME_ZONE: any;
|
|
@@ -3487,7 +3520,7 @@ export function tryInitialSetup(store: any, password?: string): Promise<boolean>
|
|
|
3487
3520
|
/**
|
|
3488
3521
|
* Record in our state management that we're indeed logged in
|
|
3489
3522
|
*/
|
|
3490
|
-
export function isLoggedIn(store: any,
|
|
3523
|
+
export function isLoggedIn(store: any, userData: any): Promise<void>;
|
|
3491
3524
|
/**
|
|
3492
3525
|
* Record in our state management that we're not logged in and then redirect to the login page
|
|
3493
3526
|
*/
|
|
@@ -4116,6 +4149,8 @@ export function mergeWithReplace(obj1?: any, obj2?: any, { mutateOriginal, repla
|
|
|
4116
4149
|
}): any;
|
|
4117
4150
|
export { isEqualBasic as isEqual };
|
|
4118
4151
|
export function toDictionary(array: any, callback: any): any;
|
|
4152
|
+
export function convertKVToString(input: any): string;
|
|
4153
|
+
export function convertStringToKV(input: string): {};
|
|
4119
4154
|
/**
|
|
4120
4155
|
* Super simple lodash isEqual equivalent.
|
|
4121
4156
|
*
|
|
@@ -4528,6 +4563,13 @@ export function sanitizeIP(v: any): any;
|
|
|
4528
4563
|
export function xOfy(x: any, y: any): string;
|
|
4529
4564
|
export function isBase64(value: any): boolean;
|
|
4530
4565
|
export function generateRandomAlphaString(length: any): string;
|
|
4566
|
+
/**
|
|
4567
|
+
* Generate a key-value nested object from a list of paths that represents a directory tree.
|
|
4568
|
+
*
|
|
4569
|
+
* Each key is a subpath
|
|
4570
|
+
* Each value contains the children of the subpath
|
|
4571
|
+
*/
|
|
4572
|
+
export function pathArrayToTree(paths: any): any[];
|
|
4531
4573
|
export namespace CHARSET {
|
|
4532
4574
|
export { num as NUMERIC };
|
|
4533
4575
|
export let NO_VOWELS: string;
|
|
@@ -4600,34 +4642,6 @@ declare class Color {
|
|
|
4600
4642
|
export {};
|
|
4601
4643
|
}
|
|
4602
4644
|
|
|
4603
|
-
// @shell/utils/time
|
|
4604
|
-
|
|
4605
|
-
declare module '@shell/utils/time' {
|
|
4606
|
-
export function diffFrom(value: any, from: any, t: any): {
|
|
4607
|
-
diff: any;
|
|
4608
|
-
absDiff: number;
|
|
4609
|
-
label: string;
|
|
4610
|
-
unitsKey: string;
|
|
4611
|
-
units: string;
|
|
4612
|
-
next: number;
|
|
4613
|
-
};
|
|
4614
|
-
export function safeSetTimeout(timeout: any, callback: any, that: any): NodeJS.Timeout;
|
|
4615
|
-
export function getSecondsDiff(startDate: any, endDate: any): number;
|
|
4616
|
-
/**
|
|
4617
|
-
* return { diff: number; label: string }
|
|
4618
|
-
*
|
|
4619
|
-
* diff: update frequency in seconds
|
|
4620
|
-
* label: content of the cell's column
|
|
4621
|
-
*/
|
|
4622
|
-
export function elapsedTime(seconds: any): {
|
|
4623
|
-
diff?: undefined;
|
|
4624
|
-
label?: undefined;
|
|
4625
|
-
} | {
|
|
4626
|
-
diff: number;
|
|
4627
|
-
label: string;
|
|
4628
|
-
};
|
|
4629
|
-
}
|
|
4630
|
-
|
|
4631
4645
|
// @shell/utils/units
|
|
4632
4646
|
|
|
4633
4647
|
declare module '@shell/utils/units' {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { KubeLabelSelector } from '@shell/types/kube/kube-api';
|
|
1
2
|
import { PaginationArgs, StorePagination } from '@shell/types/store/pagination.types';
|
|
2
3
|
|
|
3
4
|
/**
|
|
@@ -81,3 +82,18 @@ export interface ActionFindPageArgs extends ActionCoreFindArgs {
|
|
|
81
82
|
*/
|
|
82
83
|
transient?: boolean,
|
|
83
84
|
}
|
|
85
|
+
|
|
86
|
+
export type ActionFindPageResponse<T = any> = {
|
|
87
|
+
data: T[],
|
|
88
|
+
pagination?: StorePagination
|
|
89
|
+
} | T[];
|
|
90
|
+
|
|
91
|
+
export interface ActionFindMatchingArgs extends ActionCoreFindArgs {
|
|
92
|
+
labelSelector: KubeLabelSelector,
|
|
93
|
+
namespaced?: string,
|
|
94
|
+
depaginate?: boolean
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export type ActionFindMatchingResponse<T = any> = ActionFindPageResponse<T>
|
|
98
|
+
|
|
99
|
+
export type ActionFindLabelSelectorArgs = ActionFindPageArgs | ActionFindMatchingArgs;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { Target } from '@shell/types/fleet';
|
|
2
|
+
import FleetUtils from '@shell/utils/fleet';
|
|
3
|
+
|
|
4
|
+
describe('fx: util.getTargetMode', () => {
|
|
5
|
+
const util = FleetUtils.Application;
|
|
6
|
+
|
|
7
|
+
it('should return "all" when targets contain excludeHarvesterRule and namespace is not fleet-local', () => {
|
|
8
|
+
const targets = [{
|
|
9
|
+
clusterSelector: {
|
|
10
|
+
matchExpressions: [{
|
|
11
|
+
key: 'provider.cattle.io',
|
|
12
|
+
operator: 'NotIn',
|
|
13
|
+
values: ['harvester'],
|
|
14
|
+
}],
|
|
15
|
+
},
|
|
16
|
+
}];
|
|
17
|
+
const namespace = 'ws1';
|
|
18
|
+
|
|
19
|
+
expect(util.getTargetMode(targets, namespace)).toBe('all');
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it('should return "clusters" when targets include clusterName and clusterSelector', () => {
|
|
23
|
+
const targets = [{ clusterName: 'fleet-5-france' }, { clusterSelector: { matchLabels: { foo: 'true' } } }];
|
|
24
|
+
const namespace = 'ws1';
|
|
25
|
+
|
|
26
|
+
expect(util.getTargetMode(targets, namespace)).toBe('clusters');
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('should return "clusters" when targets only include multiple clusterSelectors', () => {
|
|
30
|
+
const targets: Target[] = [{ clusterSelector: { matchLabels: { foo: 'true' } } }, { clusterSelector: { matchLabels: { hci: 'true' } } }];
|
|
31
|
+
const namespace = 'ws1';
|
|
32
|
+
|
|
33
|
+
expect(util.getTargetMode(targets, namespace)).toBe('clusters');
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('should return "advanced" when a target contains clusterGroupSelector', () => {
|
|
37
|
+
const targets = [{ clusterGroupSelector: {} }];
|
|
38
|
+
const namespace = 'ws1';
|
|
39
|
+
|
|
40
|
+
expect(util.getTargetMode(targets, namespace)).toBe('advanced');
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('should return "advanced" when any target contains clusterGroup or clusterGroupSelector', () => {
|
|
44
|
+
const targets = [{
|
|
45
|
+
clusterGroup: 'cg1',
|
|
46
|
+
clusterGroupSelector: {
|
|
47
|
+
matchExpressions: [{
|
|
48
|
+
key: 'string',
|
|
49
|
+
operator: 'string',
|
|
50
|
+
values: ['string']
|
|
51
|
+
}],
|
|
52
|
+
matchLabels: { foo: 'bar' }
|
|
53
|
+
},
|
|
54
|
+
clusterName: 'pippo',
|
|
55
|
+
clusterSelector: {
|
|
56
|
+
matchExpressions: [{
|
|
57
|
+
key: 'string',
|
|
58
|
+
operator: 'string',
|
|
59
|
+
values: ['vvv']
|
|
60
|
+
}],
|
|
61
|
+
matchLabels: { foo: 'bar' }
|
|
62
|
+
},
|
|
63
|
+
name: 'tt1',
|
|
64
|
+
}, {
|
|
65
|
+
clusterGroup: 'cg2',
|
|
66
|
+
clusterGroupSelector: {
|
|
67
|
+
matchExpressions: [{
|
|
68
|
+
key: 'string',
|
|
69
|
+
operator: 'string',
|
|
70
|
+
values: ['string']
|
|
71
|
+
}],
|
|
72
|
+
matchLabels: { foo: 'bar' }
|
|
73
|
+
},
|
|
74
|
+
clusterName: 'pippo',
|
|
75
|
+
clusterSelector: {
|
|
76
|
+
matchExpressions: [{
|
|
77
|
+
key: 'string',
|
|
78
|
+
operator: 'string',
|
|
79
|
+
values: ['vvv']
|
|
80
|
+
}],
|
|
81
|
+
matchLabels: { foo: 'bar' }
|
|
82
|
+
},
|
|
83
|
+
name: 'tt1',
|
|
84
|
+
}];
|
|
85
|
+
const namespace = 'ws1';
|
|
86
|
+
|
|
87
|
+
expect(util.getTargetMode(targets, namespace)).toBe('advanced');
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('should return "none" when targets is an empty array', () => {
|
|
91
|
+
const targets: Target[] = [];
|
|
92
|
+
const namespace = 'ws1';
|
|
93
|
+
|
|
94
|
+
expect(util.getTargetMode(targets, namespace)).toBe('none');
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it('should return "local" when namespace is "fleet-local" regardless of targets', () => {
|
|
98
|
+
const targets: Target[] = [{ clusterSelector: { matchLabels: { foo: 'true' } } }, { clusterSelector: { matchLabels: { hci: 'true' } } }];
|
|
99
|
+
const namespace = 'fleet-local';
|
|
100
|
+
|
|
101
|
+
expect(util.getTargetMode(targets, namespace)).toBe('local');
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
it('should return "all" if no specific target type (clusterName, clusterSelector, clusterGroup, clusterGroupSelector) is present', () => {
|
|
105
|
+
const targets = [{ name: 'target1' }];
|
|
106
|
+
const namespace = 'ws1';
|
|
107
|
+
|
|
108
|
+
expect(util.getTargetMode(targets, namespace)).toBe('all');
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it('should return "clusters" if multiple targets include only clusterName', () => {
|
|
112
|
+
const targets = [{ clusterName: 'cluster-a' }, { clusterName: 'cluster-b' }];
|
|
113
|
+
const namespace = 'ws1';
|
|
114
|
+
|
|
115
|
+
expect(util.getTargetMode(targets, namespace)).toBe('clusters');
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it('should return "clusters" if a mix of clusterName and empty clusterSelector is present', () => {
|
|
119
|
+
const targets = [{ clusterName: 'cluster-c' }, { clusterSelector: {} },
|
|
120
|
+
];
|
|
121
|
+
const namespace = 'ws1';
|
|
122
|
+
|
|
123
|
+
expect(util.getTargetMode(targets, namespace)).toBe('clusters');
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it('should return "advanced" if one target has clusterGroup but others have clusterName or clusterSelector', () => {
|
|
127
|
+
const targets = [{ clusterName: 'cluster-x' }, { clusterGroup: 'my-group' }, { clusterSelector: { matchLabels: { env: 'prod' } } }];
|
|
128
|
+
const namespace = 'ws1';
|
|
129
|
+
|
|
130
|
+
expect(util.getTargetMode(targets, namespace)).toBe('advanced');
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it('should return "all" when targets contain excludeHarvesterRule along with other irrelevant properties', () => {
|
|
134
|
+
const targets = [{
|
|
135
|
+
clusterSelector: {
|
|
136
|
+
matchExpressions: [{
|
|
137
|
+
key: 'provider.cattle.io',
|
|
138
|
+
operator: 'NotIn',
|
|
139
|
+
values: ['harvester'],
|
|
140
|
+
}],
|
|
141
|
+
},
|
|
142
|
+
name: 'some-other-name'
|
|
143
|
+
}];
|
|
144
|
+
const namespace = 'ws1';
|
|
145
|
+
|
|
146
|
+
expect(util.getTargetMode(targets, namespace)).toBe('all');
|
|
147
|
+
});
|
|
148
|
+
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { reactive, isReactive } from 'vue';
|
|
2
2
|
import {
|
|
3
|
-
clone, get, getter, isEmpty, toDictionary, remove, diff, definedKeys, deepToRaw, mergeWithReplace
|
|
3
|
+
clone, get, getter, isEmpty, toDictionary, remove, diff, definedKeys, deepToRaw, mergeWithReplace, convertKVToString, convertStringToKV
|
|
4
4
|
} from '@shell/utils/object';
|
|
5
5
|
|
|
6
6
|
describe('fx: get', () => {
|
|
@@ -441,3 +441,56 @@ describe('fx: mergeWithReplace', () => {
|
|
|
441
441
|
expect(result).toStrictEqual(expected);
|
|
442
442
|
});
|
|
443
443
|
});
|
|
444
|
+
|
|
445
|
+
describe('fx: convertKVToString', () => {
|
|
446
|
+
it.each([
|
|
447
|
+
[{}, ''],
|
|
448
|
+
[{ foo: 'bar' }, 'foo,bar'],
|
|
449
|
+
[{ foo: 'bar', baz: 'bang' }, 'foo,bar,baz,bang'],
|
|
450
|
+
[{ foo: 'bar', baz: null }, 'foo,bar,baz,null'],
|
|
451
|
+
[{ ' spaced ': ' value ' }, ' spaced , value '], // preserves raw keys/values
|
|
452
|
+
[{ 0: 42, truthy: true }, '0,42,truthy,true'],
|
|
453
|
+
])('should convert %p -> "%s"', (input, expected) => {
|
|
454
|
+
const result = convertKVToString(input);
|
|
455
|
+
|
|
456
|
+
expect(result).toBe(expected);
|
|
457
|
+
});
|
|
458
|
+
|
|
459
|
+
it('should produce a string with an even number of comma-separated parts', () => {
|
|
460
|
+
const str = convertKVToString({
|
|
461
|
+
a: 1, b: 2, c: 3
|
|
462
|
+
});
|
|
463
|
+
const parts = str.split(',');
|
|
464
|
+
|
|
465
|
+
expect(parts.length % 2).toBe(0);
|
|
466
|
+
});
|
|
467
|
+
});
|
|
468
|
+
|
|
469
|
+
describe('fx: convertStringToKV', () => {
|
|
470
|
+
it.each([
|
|
471
|
+
['', {}],
|
|
472
|
+
['foo,bar', { foo: 'bar' }],
|
|
473
|
+
['foo,bar,baz,bang', { foo: 'bar', baz: 'bang' }],
|
|
474
|
+
[' foo , bar ', { foo: 'bar' }], // trims whitespace
|
|
475
|
+
['foo,bar,baz', { foo: 'bar' }], // dangling key ignored
|
|
476
|
+
['foo,bar,,bang', { foo: 'bar', '': 'bang' }], // empty key retained when present
|
|
477
|
+
])('should convert "%s" -> %p', (input, expected) => {
|
|
478
|
+
const result = convertStringToKV(input);
|
|
479
|
+
|
|
480
|
+
expect(result).toStrictEqual(expected);
|
|
481
|
+
});
|
|
482
|
+
});
|
|
483
|
+
|
|
484
|
+
describe('fx: convertStringToKV to convertKVToString and back (round-trip)', () => {
|
|
485
|
+
it.each([
|
|
486
|
+
'',
|
|
487
|
+
'foo,bar',
|
|
488
|
+
'foo,bar,baz,bang',
|
|
489
|
+
'answer,42,truthy,true,falsy,false',
|
|
490
|
+
])('should round-trip %p without loss', (input) => {
|
|
491
|
+
const asObj = convertStringToKV(input);
|
|
492
|
+
const backToString = convertKVToString(asObj);
|
|
493
|
+
|
|
494
|
+
expect(backToString).toStrictEqual(input);
|
|
495
|
+
});
|
|
496
|
+
});
|