@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.
Files changed (312) hide show
  1. package/assets/data/aws-regions.json +1 -0
  2. package/assets/images/key.svg +17 -0
  3. package/assets/styles/base/_spacing.scss +2 -2
  4. package/assets/styles/global/_form.scss +1 -1
  5. package/assets/styles/global/_labeled-input.scss +1 -1
  6. package/assets/styles/themes/_dark.scss +3 -0
  7. package/assets/styles/themes/_light.scss +3 -0
  8. package/assets/styles/vendor/vue-select.scss +1 -1
  9. package/assets/translations/en-us.yaml +404 -64
  10. package/assets/translations/zh-hans.yaml +3 -4
  11. package/cloud-credential/gcp.vue +9 -1
  12. package/components/AppModal.vue +2 -0
  13. package/components/CodeMirror.vue +1 -1
  14. package/components/ConfigMapSettings/Settings.vue +377 -0
  15. package/components/ConfigMapSettings/index.vue +354 -0
  16. package/components/CruResource.vue +1 -2
  17. package/components/DetailText.vue +61 -11
  18. package/components/Drawer/Chrome.vue +116 -0
  19. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +61 -0
  20. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
  21. package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
  22. package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
  23. package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +82 -0
  24. package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
  25. package/components/Drawer/ResourceDetailDrawer/composables.ts +50 -0
  26. package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
  27. package/components/Drawer/ResourceDetailDrawer/index.vue +110 -0
  28. package/components/GrowlManager.vue +16 -15
  29. package/components/IconOrSvg.vue +5 -0
  30. package/components/KeyValueView.vue +1 -1
  31. package/components/LocaleSelector.vue +9 -1
  32. package/components/ProgressBarMulti.vue +1 -0
  33. package/components/PromptModal.vue +6 -1
  34. package/components/RelatedResources.vue +4 -12
  35. package/components/Resource/Detail/Additional.vue +46 -0
  36. package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +1 -1
  37. package/components/Resource/Detail/Metadata/Annotations/index.vue +5 -0
  38. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
  39. package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +37 -254
  40. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +298 -0
  41. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +27 -5
  42. package/components/Resource/Detail/Metadata/KeyValue.vue +25 -17
  43. package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +1 -1
  44. package/components/Resource/Detail/Metadata/Labels/index.vue +4 -0
  45. package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +1 -1
  46. package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +1 -1
  47. package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
  48. package/components/Resource/Detail/Metadata/composables.ts +60 -11
  49. package/components/Resource/Detail/Metadata/index.vue +12 -5
  50. package/components/Resource/Detail/Page.vue +15 -0
  51. package/components/Resource/Detail/ResourceRow.vue +37 -18
  52. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
  53. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
  54. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
  55. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
  56. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
  57. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
  58. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
  59. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
  60. package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
  61. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
  62. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
  63. package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
  64. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
  65. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
  66. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
  67. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
  68. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
  69. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
  70. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
  71. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
  72. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
  73. package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
  74. package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
  75. package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
  76. package/components/Resource/Detail/TitleBar/Title.vue +2 -1
  77. package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +1 -1
  78. package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +1 -1
  79. package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
  80. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +1 -1
  81. package/components/Resource/Detail/TitleBar/composables.ts +44 -0
  82. package/components/Resource/Detail/TitleBar/index.vue +83 -11
  83. package/components/Resource/Detail/composables.ts +45 -0
  84. package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
  85. package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
  86. package/components/ResourceDetail/Masthead/index.vue +65 -0
  87. package/components/ResourceDetail/Masthead/latest.vue +44 -0
  88. package/components/ResourceDetail/__tests__/index.test.ts +26 -5
  89. package/components/ResourceDetail/index.vue +30 -16
  90. package/components/ResourceDetail/legacy.vue +18 -1
  91. package/components/ResourceList/Masthead.vue +6 -0
  92. package/components/ResourceYaml.vue +14 -1
  93. package/components/SlideInPanelManager.vue +46 -7
  94. package/components/StateDot/index.vue +28 -0
  95. package/components/Tabbed/index.vue +11 -15
  96. package/components/Wizard.vue +4 -2
  97. package/components/__tests__/ConfigMapSettings.test.ts +376 -0
  98. package/components/__tests__/GrowlManager.test.ts +0 -25
  99. package/components/auth/login/ldap.vue +1 -1
  100. package/components/fleet/FleetApplications.vue +0 -7
  101. package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
  102. package/components/fleet/FleetClusterTargets/index.vue +455 -0
  103. package/components/fleet/FleetClusters.vue +25 -6
  104. package/components/fleet/FleetGitRepoPaths.vue +476 -0
  105. package/components/fleet/FleetHelmOps.vue +8 -0
  106. package/components/fleet/FleetRepos.vue +1 -6
  107. package/components/fleet/FleetResources.vue +4 -5
  108. package/components/fleet/FleetValuesFrom.vue +295 -0
  109. package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
  110. package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
  111. package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +13 -13
  112. package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
  113. package/components/fleet/dashboard/ResourceCard.vue +1 -0
  114. package/components/fleet/dashboard/ResourceCardSummary.vue +1 -5
  115. package/components/fleet/dashboard/ResourceDetails.vue +8 -10
  116. package/components/fleet/dashboard/ResourcePanel.vue +15 -8
  117. package/components/form/ArrayList.vue +13 -2
  118. package/components/form/ChangePassword.vue +3 -1
  119. package/components/form/Footer.vue +10 -4
  120. package/components/form/KeyValue.vue +81 -43
  121. package/components/form/LabeledSelect.vue +56 -16
  122. package/components/form/Labels.vue +90 -17
  123. package/components/form/MatchExpressions.vue +46 -5
  124. package/components/form/NameNsDescription.vue +1 -1
  125. package/components/form/ResourceSelector.vue +1 -0
  126. package/components/form/ResourceTabs/index.vue +5 -0
  127. package/components/form/SecretSelector.vue +9 -2
  128. package/components/form/Select.vue +57 -19
  129. package/components/form/SimpleSecretSelector.vue +9 -2
  130. package/components/form/Taints.vue +21 -2
  131. package/components/form/UnitInput.vue +8 -0
  132. package/components/form/ValueFromResource.vue +1 -1
  133. package/components/form/__tests__/LabeledSelect.test.ts +8 -4
  134. package/components/form/__tests__/Labels.test.ts +360 -0
  135. package/components/form/__tests__/MatchExpressions.test.ts +16 -13
  136. package/components/form/__tests__/Select.test.ts +5 -2
  137. package/components/formatter/FleetApplicationSource.vue +1 -1
  138. package/components/formatter/WorkloadHealthScale.vue +1 -1
  139. package/components/google/AccountAccess.vue +211 -0
  140. package/components/google/types/gcp.d.ts +136 -0
  141. package/components/google/types/index.d.ts +101 -0
  142. package/components/google/util/__mocks__/gcp.ts +465 -0
  143. package/components/google/util/formatter.ts +82 -0
  144. package/components/google/util/gcp.ts +134 -0
  145. package/components/google/util/index.d.ts +11 -0
  146. package/components/nav/Favorite.vue +1 -1
  147. package/components/nav/Group.vue +70 -47
  148. package/components/nav/Header.vue +5 -1
  149. package/components/nav/NamespaceFilter.vue +13 -1
  150. package/components/nav/NotificationCenter/Notification.vue +510 -0
  151. package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
  152. package/components/nav/NotificationCenter/index.vue +148 -0
  153. package/composables/drawer.ts +26 -0
  154. package/composables/resources.test.ts +63 -0
  155. package/composables/resources.ts +38 -0
  156. package/composables/useIsNewDetailPageEnabled.ts +17 -0
  157. package/config/labels-annotations.js +6 -0
  158. package/config/product/auth.js +16 -1
  159. package/config/product/{cis.js → compliance.js} +23 -26
  160. package/config/product/explorer.js +5 -1
  161. package/config/product/fleet.js +7 -0
  162. package/config/product/settings.js +22 -11
  163. package/config/query-params.js +3 -0
  164. package/config/roles.ts +1 -1
  165. package/config/router/navigation-guards/authentication.js +51 -2
  166. package/config/router/routes.js +27 -31
  167. package/config/settings.ts +21 -3
  168. package/config/store.js +2 -0
  169. package/config/system-namespaces.js +1 -1
  170. package/config/table-headers.js +2 -2
  171. package/config/types.js +15 -6
  172. package/core/plugin.ts +32 -7
  173. package/core/types.ts +18 -1
  174. package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
  175. package/detail/management.cattle.io.fleetworkspace.vue +18 -27
  176. package/detail/management.cattle.io.oidcclient.vue +369 -0
  177. package/detail/node.vue +2 -2
  178. package/detail/pod.vue +2 -2
  179. package/detail/service.vue +10 -1
  180. package/detail/workload/index.vue +8 -2
  181. package/dialog/ExtensionCatalogUninstallDialog.vue +7 -4
  182. package/dialog/GenericPrompt.vue +1 -1
  183. package/dialog/ImportDialog.vue +8 -8
  184. package/dialog/OidcClientSecretDialog.vue +117 -0
  185. package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
  186. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +5 -2
  187. package/edit/autoscaling.horizontalpodautoscaler/index.vue +4 -1
  188. package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
  189. package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
  190. package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
  191. package/edit/configmap.vue +4 -1
  192. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  193. package/edit/fleet.cattle.io.gitrepo.vue +44 -222
  194. package/edit/fleet.cattle.io.helmop.vue +44 -269
  195. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  196. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  197. package/edit/logging-flow/index.vue +1 -0
  198. package/edit/logging.banzaicloud.io.output/index.vue +1 -0
  199. package/edit/management.cattle.io.fleetworkspace.vue +1 -0
  200. package/edit/management.cattle.io.oidcclient.vue +162 -0
  201. package/edit/management.cattle.io.project.vue +4 -1
  202. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  203. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
  204. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  205. package/edit/monitoring.coreos.com.receiver/auth.vue +30 -30
  206. package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
  207. package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
  208. package/edit/monitoring.coreos.com.route.vue +1 -0
  209. package/edit/namespace.vue +1 -0
  210. package/edit/networking.istio.io.destinationrule/index.vue +4 -1
  211. package/edit/networking.k8s.io.ingress/index.vue +4 -1
  212. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +7 -2
  213. package/edit/networking.k8s.io.networkpolicy/index.vue +6 -2
  214. package/edit/node.vue +1 -0
  215. package/edit/persistentvolume/index.vue +4 -1
  216. package/edit/provisioning.cattle.io.cluster/rke2.vue +418 -382
  217. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +27 -27
  218. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
  219. package/edit/resources.cattle.io.restore.vue +1 -1
  220. package/edit/secret/index.vue +1 -0
  221. package/edit/service.vue +4 -1
  222. package/edit/serviceaccount.vue +4 -1
  223. package/edit/storage.k8s.io.storageclass/index.vue +4 -1
  224. package/edit/workload/index.vue +5 -0
  225. package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
  226. package/list/management.cattle.io.oidcclient.vue +108 -0
  227. package/list/node.vue +2 -0
  228. package/machine-config/amazonec2.vue +3 -24
  229. package/machine-config/components/GCEImage.vue +374 -0
  230. package/machine-config/google.vue +617 -0
  231. package/mixins/__tests__/brand.spec.ts +170 -0
  232. package/mixins/brand.js +16 -17
  233. package/mixins/create-edit-view/index.js +5 -0
  234. package/mixins/resource-fetch-api-pagination.js +16 -0
  235. package/mixins/vue-select-overrides.js +1 -0
  236. package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
  237. package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
  238. package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
  239. package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
  240. package/models/fleet-application.js +8 -79
  241. package/models/fleet.cattle.io.cluster.js +11 -0
  242. package/models/fleet.cattle.io.gitrepo.js +2 -2
  243. package/models/fleet.cattle.io.helmop.js +9 -39
  244. package/models/management.cattle.io.fleetworkspace.js +2 -1
  245. package/models/management.cattle.io.oidcclient.js +18 -0
  246. package/models/management.cattle.io.registration.js +3 -0
  247. package/models/provisioning.cattle.io.cluster.js +5 -5
  248. package/models/service.js +4 -0
  249. package/models/workload.js +5 -0
  250. package/package.json +1 -1
  251. package/pages/about.vue +4 -58
  252. package/pages/auth/login.vue +1 -1
  253. package/pages/c/_cluster/apps/charts/AddRepoLink.vue +0 -1
  254. package/pages/c/_cluster/apps/charts/index.vue +285 -81
  255. package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
  256. package/pages/c/_cluster/explorer/index.vue +3 -3
  257. package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
  258. package/pages/c/_cluster/fleet/application/create.vue +3 -2
  259. package/pages/c/_cluster/fleet/index.vue +94 -56
  260. package/pages/c/_cluster/fleet/settings/index.vue +229 -0
  261. package/pages/c/_cluster/longhorn/index.vue +5 -2
  262. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
  263. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
  264. package/pages/explorer/resource/detail/configmap.vue +30 -7
  265. package/pages/explorer/resource/detail/secret.vue +50 -0
  266. package/pages/home.vue +9 -55
  267. package/pages/support/index.vue +4 -6
  268. package/plugins/dashboard-store/actions.js +19 -5
  269. package/plugins/dashboard-store/getters.js +4 -0
  270. package/plugins/dashboard-store/resource-class.js +16 -2
  271. package/plugins/steve/steve-pagination-utils.ts +26 -18
  272. package/plugins/steve/subscribe.js +6 -1
  273. package/rancher-components/Banner/Banner.vue +13 -0
  274. package/rancher-components/Form/Checkbox/Checkbox.vue +9 -4
  275. package/rancher-components/Form/LabeledInput/LabeledInput.vue +1 -1
  276. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
  277. package/rancher-components/RcItemCard/RcItemCard.vue +8 -3
  278. package/store/auth.js +2 -0
  279. package/store/catalog.js +23 -1
  280. package/store/growl.js +97 -8
  281. package/store/index.js +6 -0
  282. package/store/notifications.ts +426 -0
  283. package/store/prefs.js +0 -1
  284. package/store/type-map.js +19 -16
  285. package/store/uiplugins.ts +15 -1
  286. package/types/fleet.d.ts +24 -0
  287. package/types/notifications/index.ts +74 -0
  288. package/types/shell/index.d.ts +46 -32
  289. package/types/store/dashboard-store.types.ts +16 -0
  290. package/utils/__tests__/fleet.test.ts +148 -0
  291. package/utils/__tests__/object.test.ts +54 -1
  292. package/utils/__tests__/string.test.ts +273 -1
  293. package/utils/__tests__/time.test.ts +31 -0
  294. package/utils/auth.js +9 -2
  295. package/utils/crypto/encryption.ts +103 -0
  296. package/utils/cspAdaptor.ts +51 -0
  297. package/utils/fleet.ts +54 -65
  298. package/utils/object.js +36 -0
  299. package/utils/pagination-utils.ts +1 -1
  300. package/utils/release-notes.ts +48 -0
  301. package/utils/selector-typed.ts +7 -2
  302. package/utils/string.js +24 -0
  303. package/utils/{time.js → time.ts} +25 -6
  304. package/utils/uiplugins.ts +22 -0
  305. package/utils/validators/formRules/index.ts +3 -0
  306. package/components/Resource/Detail/TitleBar/composable.ts +0 -31
  307. package/config/product/legacy.js +0 -62
  308. package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
  309. package/pages/c/_cluster/legacy/project/_page.vue +0 -57
  310. package/pages/c/_cluster/legacy/project/index.vue +0 -32
  311. package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
  312. /package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +0 -0
@@ -4,14 +4,10 @@ import jsyaml from 'js-yaml';
4
4
  import { saferDump } from '@shell/utils/create-yaml';
5
5
  import { mapGetters } from 'vuex';
6
6
  import { base64Encode } from '@shell/utils/crypto';
7
- import { exceptionToErrorsArray } from '@shell/utils/error';
8
7
  import { _CREATE, _EDIT, _VIEW } from '@shell/config/query-params';
9
8
  import { checkSchemasForFindAllHash } from '@shell/utils/auth';
10
- import FleetUtils from '@shell/utils/fleet';
11
- import {
12
- AUTH_TYPE, CONFIG_MAP, FLEET, NORMAN, SECRET, VIRTUAL_HARVESTER_PROVIDER
13
- } from '@shell/config/types';
14
- import { CAPI, CATALOG, FLEET as FLEET_LABELS } from '@shell/config/labels-annotations';
9
+ import { AUTH_TYPE, CONFIG_MAP, NORMAN, SECRET } from '@shell/config/types';
10
+ import { CATALOG, FLEET as FLEET_LABELS } from '@shell/config/labels-annotations';
15
11
  import { SOURCE_TYPE } from '@shell/config/product/fleet';
16
12
  import CreateEditView from '@shell/mixins/create-edit-view';
17
13
  import CruResource from '@shell/components/CruResource';
@@ -26,13 +22,13 @@ import ButtonGroup from '@shell/components/ButtonGroup';
26
22
  import Checkbox from '@components/Form/Checkbox/Checkbox.vue';
27
23
  import YamlEditor, { EDITOR_MODES } from '@shell/components/YamlEditor';
28
24
  import SelectOrCreateAuthSecret from '@shell/components/form/SelectOrCreateAuthSecret';
29
- import ValueFromResource from '@shell/components/form/ValueFromResource';
30
25
  import { mapPref, DIFF } from '@shell/store/prefs';
31
- import { isHarvesterCluster } from '@shell/utils/cluster';
32
26
  import { SECRET_TYPES } from '@shell/config/secret';
33
27
  import UnitInput from '@shell/components/form/UnitInput';
28
+ import FleetClusterTargets from '@shell/components/fleet/FleetClusterTargets/index.vue';
34
29
  import { toSeconds } from '@shell/utils/duration';
35
30
  import { DEFAULT_POLLING_INTERVAL, MINIMUM_POLLING_INTERVAL } from '@shell/models/fleet-application';
31
+ import FleetValuesFrom from '@shell/components/fleet/FleetValuesFrom.vue';
36
32
 
37
33
  const VALUES_STATE = {
38
34
  YAML: 'YAML',
@@ -51,6 +47,8 @@ export default {
51
47
  ButtonGroup,
52
48
  Checkbox,
53
49
  CruResource,
50
+ FleetClusterTargets,
51
+ FleetValuesFrom,
54
52
  YamlEditor,
55
53
  LabeledInput,
56
54
  LabeledSelect,
@@ -58,24 +56,14 @@ export default {
58
56
  Loading,
59
57
  NameNsDescription,
60
58
  SelectOrCreateAuthSecret,
61
- ValueFromResource,
62
59
  UnitInput,
63
60
  },
64
61
 
65
62
  mixins: [CreateEditView, FormValidation],
66
63
 
67
64
  async fetch() {
68
- const hash = await checkSchemasForFindAllHash({
69
- allClusters: {
70
- inStoreType: 'management',
71
- type: FLEET.CLUSTER
72
- },
73
-
74
- allClusterGroups: {
75
- inStoreType: 'management',
76
- type: FLEET.CLUSTER_GROUP
77
- },
78
-
65
+ // Fetch Secrets and ConfigMaps to mask the loading phase in FleetValuesFrom.vue
66
+ checkSchemasForFindAllHash({
79
67
  allSecrets: {
80
68
  inStoreType: 'management',
81
69
  type: SECRET
@@ -86,13 +74,6 @@ export default {
86
74
  type: CONFIG_MAP
87
75
  }
88
76
  }, this.$store);
89
-
90
- this.allClusters = hash.allClusters || [];
91
- this.allClusterGroups = hash.allClusterGroups || [];
92
- this.allSecrets = hash.allSecrets || [];
93
- this.allConfigMaps = hash.allConfigMaps || [];
94
-
95
- this.updateTargets();
96
77
  },
97
78
 
98
79
  data() {
@@ -107,21 +88,6 @@ export default {
107
88
  }
108
89
  }
109
90
 
110
- const targetInfo = this.value.targetInfo;
111
- const targetCluster = targetInfo.cluster;
112
- const targetClusterGroup = targetInfo.clusterGroup;
113
- const targetAdvanced = targetInfo.advanced;
114
-
115
- let targetMode = targetInfo.mode;
116
-
117
- if ( this.realMode === _CREATE ) {
118
- targetMode = 'all';
119
- } else if ( targetMode === 'cluster' ) {
120
- targetMode = `cluster://${ targetCluster }`;
121
- } else if ( targetMode === 'clusterGroup' ) {
122
- targetMode = `group://${ targetClusterGroup }`;
123
- }
124
-
125
91
  const correctDriftEnabled = this.value.spec?.correctDrift?.enabled || false;
126
92
 
127
93
  const chartValues = saferDump(clone(this.value.spec.helm.values));
@@ -129,27 +95,20 @@ export default {
129
95
  return {
130
96
  VALUES_STATE,
131
97
  SOURCE_TYPE,
132
- allClusters: [],
133
- allClusterGroups: [],
134
- allSecrets: [],
135
- allConfigMaps: [],
136
- allWorkspaces: [],
98
+ allWorkspaces: [],
137
99
  pollingInterval,
138
- targetMode,
139
- targetAdvanced,
140
- targetAdvancedErrors: null,
141
- sourceTypeInit: this.value.sourceType,
142
- sourceType: this.value.sourceType || SOURCE_TYPE.REPO,
143
- helmSpecInit: clone(this.value.spec.helm),
144
- yamlForm: VALUES_STATE.YAML,
100
+ sourceTypeInit: this.value.sourceType,
101
+ sourceType: this.value.sourceType || SOURCE_TYPE.REPO,
102
+ helmSpecInit: clone(this.value.spec.helm),
103
+ yamlForm: VALUES_STATE.YAML,
145
104
  chartValues,
146
- chartValuesInit: chartValues,
147
- valuesFrom: FleetUtils.HelmOp.fromValuesFrom(this.value.spec.helm.valuesFrom),
105
+ chartValuesInit: chartValues,
148
106
  correctDriftEnabled,
149
- tempCachedValues: {},
150
- doneRouteList: 'c-cluster-fleet-application',
151
- isRealModeEdit: this.realMode === _EDIT,
152
- fvFormRuleSets: []
107
+ tempCachedValues: {},
108
+ doneRouteList: 'c-cluster-fleet-application',
109
+ isRealModeEdit: this.realMode === _EDIT,
110
+ targetsCreated: '',
111
+ fvFormRuleSets: [],
153
112
  };
154
113
  },
155
114
 
@@ -220,10 +179,6 @@ export default {
220
179
  ];
221
180
  },
222
181
 
223
- isLocal() {
224
- return this.value.metadata.namespace === 'fleet-local';
225
- },
226
-
227
182
  sourceTypeOptions() {
228
183
  return Object.values(SOURCE_TYPE).map((value) => ({
229
184
  value,
@@ -231,17 +186,6 @@ export default {
231
186
  }));
232
187
  },
233
188
 
234
- valueFromOptions() {
235
- return [
236
- {
237
- value: 'configMapKeyRef', label: 'ConfigMap Key', hideVariableName: true
238
- },
239
- {
240
- value: 'secretKeyRef', label: 'Secret key', hideVariableName: true
241
- },
242
- ];
243
- },
244
-
245
189
  yamlFormOptions() {
246
190
  return [{
247
191
  labelKey: 'fleet.helmOp.values.yaml.options.edit',
@@ -277,74 +221,12 @@ export default {
277
221
  return EDITOR_MODES.EDIT_CODE;
278
222
  },
279
223
 
280
- targetOptions() {
281
- const out = [
282
- {
283
- label: 'No Clusters',
284
- value: 'none'
285
- },
286
- {
287
- label: 'All Clusters in the Workspace',
288
- value: 'all',
289
- },
290
- {
291
- label: 'Advanced',
292
- value: 'advanced'
293
- },
294
- ];
295
-
296
- const clusters = this.allClusters
297
- .filter((x) => {
298
- return x.metadata.namespace === this.value.metadata.namespace;
299
- })
300
- .filter((x) => !isHarvesterCluster(x))
301
- .map((x) => {
302
- return { label: x.nameDisplay, value: `cluster://${ x.metadata.name }` };
303
- });
304
-
305
- if ( clusters.length ) {
306
- out.push({ kind: 'divider', disabled: true });
307
- out.push({
308
- kind: 'title',
309
- label: 'Clusters',
310
- disabled: true,
311
- });
312
-
313
- out.push(...clusters);
314
- }
315
-
316
- const groups = this.allClusterGroups
317
- .filter((x) => x.metadata.namespace === this.value.metadata.namespace)
318
- .map((x) => {
319
- return { label: x.nameDisplay, value: `group://${ x.metadata.name }` };
320
- });
321
-
322
- if ( groups.length ) {
323
- out.push({ kind: 'divider', disabled: true });
324
- out.push({
325
- kind: 'title',
326
- label: 'Cluster Groups',
327
- disabled: true
328
- });
329
-
330
- out.push(...groups);
331
- }
332
-
333
- return out;
334
- },
335
-
336
224
  showPollingIntervalWarning() {
337
225
  return !this.isView && this.value.isPollingEnabled && this.pollingInterval < MINIMUM_POLLING_INTERVAL;
338
226
  },
339
227
  },
340
228
 
341
229
  watch: {
342
- 'value.metadata.namespace': 'updateTargets',
343
- targetMode: 'updateTargets',
344
- targetCluster: 'updateTargets',
345
- targetClusterGroup: 'updateTargets',
346
- targetAdvanced: 'updateTargets',
347
-
348
230
  workspace(neu) {
349
231
  if (this.isCreate) {
350
232
  set(this.value, 'metadata.namespace', neu);
@@ -369,52 +251,8 @@ export default {
369
251
  this.updateValidationRules(type);
370
252
  },
371
253
 
372
- updateTargets() {
373
- const spec = this.value.spec;
374
- const mode = this.targetMode;
375
-
376
- let kind, value;
377
- const match = mode.match(/([^:]+)(:\/\/(.*))?$/);
378
-
379
- if ( match ) {
380
- kind = match[1];
381
- value = match[3];
382
- }
383
-
384
- if ( kind === 'all' ) {
385
- spec.targets = [{
386
- clusterSelector: {
387
- matchExpressions: [{
388
- key: CAPI.PROVIDER,
389
- operator: 'NotIn',
390
- values: [
391
- VIRTUAL_HARVESTER_PROVIDER
392
- ],
393
- }],
394
- },
395
- }];
396
- } else if ( kind === 'none' ) {
397
- spec.targets = [];
398
- } else if ( kind === 'cluster' ) {
399
- spec.targets = [
400
- { clusterName: value },
401
- ];
402
- } else if ( kind === 'group' ) {
403
- spec.targets = [
404
- { clusterGroup: value }
405
- ];
406
- } else if ( kind === 'advanced' ) {
407
- try {
408
- const parsed = jsyaml.load(this.targetAdvanced);
409
-
410
- spec.targets = parsed;
411
- this.targetAdvancedErrors = null;
412
- } catch (e) {
413
- this.targetAdvancedErrors = exceptionToErrorsArray(e);
414
- }
415
- } else {
416
- spec.targets = [];
417
- }
254
+ updateTargets(value) {
255
+ this.value.spec.targets = value;
418
256
  },
419
257
 
420
258
  enablePolling(value) {
@@ -547,20 +385,6 @@ export default {
547
385
  }
548
386
  },
549
387
 
550
- addValueFrom() {
551
- this.valuesFrom.push({ valueFrom: {} });
552
- },
553
-
554
- updateValueFrom(index, value) {
555
- this.valuesFrom[index] = value;
556
-
557
- this.value.spec.helm.valuesFrom = FleetUtils.HelmOp.toValuesFrom(this.valuesFrom, this.workspace);
558
- },
559
-
560
- removeValueFrom(index) {
561
- this.valuesFrom.splice(index, 1);
562
- },
563
-
564
388
  updateBeforeSave() {
565
389
  this.value.spec['correctDrift'] = { enabled: this.correctDriftEnabled };
566
390
  },
@@ -577,12 +401,12 @@ export default {
577
401
  rules: ['required', 'urlRepository'],
578
402
  }, {
579
403
  path: 'spec.helm.chart',
580
- rules: ['required', 'alphanumeric'],
404
+ rules: ['required'],
581
405
  }];
582
406
  break;
583
407
  case SOURCE_TYPE.OCI:
584
408
  this.fvFormRuleSets = [{
585
- path: 'spec.helm.chart',
409
+ path: 'spec.helm.repo',
586
410
  rules: ['required', 'ociRegistry'],
587
411
  }];
588
412
  break;
@@ -720,11 +544,11 @@ export default {
720
544
  <div class="row mb-20">
721
545
  <div class="col span-6">
722
546
  <LabeledInput
723
- v-model:value="value.spec.helm.chart"
547
+ v-model:value="value.spec.helm.repo"
724
548
  :mode="mode"
725
549
  :label-key="`fleet.helmOp.source.${ sourceType }.chart.label`"
726
550
  :placeholder="t(`fleet.helmOp.source.${ sourceType }.chart.placeholder`, null, true)"
727
- :rules="fvGetAndReportPathRules('spec.helm.chart')"
551
+ :rules="fvGetAndReportPathRules('spec.helm.repo')"
728
552
  :required="true"
729
553
  />
730
554
  </div>
@@ -789,78 +613,29 @@ export default {
789
613
  </div>
790
614
 
791
615
  <div class="mb-20">
792
- <h2 v-t="'fleet.helmOp.values.valuesFrom.selectLabel'" />
793
- <div
794
- v-for="(row, i) in valuesFrom"
795
- :key="i"
796
- >
797
- <ValueFromResource
798
- :value="row"
799
- :options="valueFromOptions"
800
- :all-secrets="allSecrets"
801
- :all-config-maps="allConfigMaps"
802
- :namespaced="true"
803
- :mode="mode"
804
- :show-variable-name="true"
805
- @remove="removeValueFrom(i)"
806
- @update:value="updateValueFrom(i, $event)"
807
- />
808
- </div>
809
- <button
810
- v-if="!isView"
811
- v-t="'workload.container.command.addEnvVar'"
812
- type="button"
813
- class="btn role-tertiary add"
814
- data-testid="add-env-var"
815
- @click="addValueFrom"
616
+ <FleetValuesFrom
617
+ v-model:value="value.spec.helm.valuesFrom"
618
+ :namespace="value.metadata.namespace"
619
+ :mode="realMode"
816
620
  />
817
621
  </div>
818
622
  </template>
819
623
 
820
624
  <template #target>
821
- <h2 v-t="isLocal ? 'fleet.helmOp.target.labelLocal' : 'fleet.helmOp.target.label'" />
822
-
823
- <template v-if="!isLocal">
824
- <div class="row">
825
- <div class="col span-6">
826
- <LabeledSelect
827
- v-model:value="targetMode"
828
- :options="targetOptions"
829
- option-key="value"
830
- :mode="mode"
831
- :selectable="option => !option.disabled"
832
- :label="t('fleet.helmOp.target.selectLabel')"
833
- >
834
- <template v-slot:option="opt">
835
- <hr v-if="opt.kind === 'divider'">
836
- <div v-else-if="opt.kind === 'title'">
837
- {{ opt.label }}
838
- </div>
839
- <div v-else>
840
- {{ opt.label }}
841
- </div>
842
- </template>
843
- </LabeledSelect>
844
- </div>
845
- </div>
846
-
847
- <div
848
- v-if="targetMode === 'advanced'"
849
- class="row mt-10"
850
- >
851
- <div class="col span-12">
852
- <YamlEditor v-model:value="targetAdvanced" />
853
- </div>
854
- </div>
855
-
856
- <Banner
857
- v-for="(err, i) in targetAdvancedErrors"
858
- :key="i"
859
- color="error"
860
- :label="err"
861
- />
862
- </template>
625
+ <h2 v-t="'fleet.helmOp.target.label'" />
626
+ <FleetClusterTargets
627
+ :targets="value.spec.targets"
628
+ :matching="value.targetClusters"
629
+ :namespace="value.metadata.namespace"
630
+ :mode="realMode"
631
+ :created="targetsCreated"
632
+ @update:value="updateTargets"
633
+ @created="targetsCreated=$event"
634
+ />
863
635
 
636
+ <h3 class="mmt-16">
637
+ {{ t('fleet.helmOp.target.additionalOptions') }}
638
+ </h3>
864
639
  <div class="row mt-20">
865
640
  <div class="col span-6">
866
641
  <LabeledInput
@@ -872,7 +647,7 @@ export default {
872
647
  </div>
873
648
  <div class="col span-6">
874
649
  <LabeledInput
875
- v-model:value="value.spec.targetNamespace"
650
+ v-model:value="value.spec.namespace"
876
651
  :mode="mode"
877
652
  label-key="fleet.helmOp.targetNamespace.label"
878
653
  placeholder-key="fleet.helmOp.targetNamespace.placeholder"
@@ -965,7 +740,7 @@ export default {
965
740
  :label="t('fleet.helmOp.polling.pollingInterval.label')"
966
741
  :mode="mode"
967
742
  tooltip-key="fleet.helmOp.polling.pollingInterval.tooltip"
968
- @update:value="updatePollingInterval"
743
+ @blur.capture="updatePollingInterval(pollingInterval)"
969
744
  />
970
745
  </div>
971
746
  </template>
@@ -142,6 +142,7 @@ export default {
142
142
  v-if="!!currentNamespace && selectedNamespaceQuestions"
143
143
  ref="tabs"
144
144
  :side-tabs="true"
145
+ :use-hash="useTabbedHash"
145
146
  >
146
147
  <Questions
147
148
  v-model:value="value.spec.values"
@@ -73,6 +73,7 @@ export default {
73
73
  v-bind="$attrs"
74
74
  class="mt-15"
75
75
  :side-tabs="true"
76
+ :use-hash="useTabbedHash"
76
77
  >
77
78
  <Tab
78
79
  name="basics"
@@ -404,6 +404,7 @@ export default {
404
404
 
405
405
  <Tabbed
406
406
  :side-tabs="true"
407
+ :use-hash="useTabbedHash"
407
408
  @changed="tabChanged($event)"
408
409
  >
409
410
  <Tab
@@ -211,6 +211,7 @@ export default {
211
211
  v-else
212
212
  ref="tabbed"
213
213
  :side-tabs="true"
214
+ :use-hash="useTabbedHash"
214
215
  @changed="tabChanged($event)"
215
216
  >
216
217
  <Tab
@@ -200,6 +200,7 @@ export default {
200
200
  <Tabbed
201
201
  :side-tabs="true"
202
202
  default-tab="members"
203
+ :use-hash="useTabbedHash"
203
204
  >
204
205
  <!-- <Tab name="members" label-key="generic.members" :weight="2">
205
206
  <RoleBindings
@@ -0,0 +1,162 @@
1
+
2
+ <script lang="ts">
3
+ import { defineComponent } from 'vue';
4
+ import CreateEditView from '@shell/mixins/create-edit-view';
5
+ import ArrayList from '@shell/components/form/ArrayList.vue';
6
+ import UnitInput from '@shell/components/form/UnitInput.vue';
7
+ import CruResource from '@shell/components/CruResource.vue';
8
+ import FormValidation from '@shell/mixins/form-validation';
9
+ import NameNsDescription from '@shell/components/form/NameNsDescription.vue';
10
+
11
+ const DEFAULT_REF_TOKEN_EXP = 3600;
12
+ const DEFAULT_TOKEN_EXP = 600;
13
+
14
+ export default defineComponent({
15
+ name: 'EditOidcClient',
16
+
17
+ emits: ['input'],
18
+
19
+ inheritAttrs: false,
20
+
21
+ components: {
22
+ CruResource,
23
+ NameNsDescription,
24
+ ArrayList,
25
+ UnitInput,
26
+ },
27
+
28
+ mixins: [
29
+ CreateEditView,
30
+ FormValidation
31
+ ],
32
+
33
+ created() {
34
+ // setup the data for creation scenario
35
+ if (this.isCreate) {
36
+ this.value.spec = {
37
+ refreshTokenExpirationSeconds: DEFAULT_REF_TOKEN_EXP,
38
+ tokenExpirationSeconds: DEFAULT_TOKEN_EXP
39
+ };
40
+ }
41
+ },
42
+
43
+ data() {
44
+ return {
45
+ fvFormRuleSets: [
46
+ { path: 'metadata.name', rules: ['required'] },
47
+ { path: 'spec.redirectURIs', rules: ['required', 'genericUrl'] },
48
+ { path: 'spec.refreshTokenExpirationSeconds', rules: ['required'] },
49
+ { path: 'spec.tokenExpirationSeconds', rules: ['required'] },
50
+ ],
51
+ };
52
+ },
53
+
54
+ computed: {
55
+ finishButtonMode(): string {
56
+ return this.isCreate ? 'registerApplication' : 'saveApplication';
57
+ },
58
+
59
+ doneLocationOverride() {
60
+ if (this.isCreate) {
61
+ const afterCreateRoute = Object.assign({}, this.value.detailLocation);
62
+
63
+ afterCreateRoute.state = { displaySecret: 'true' };
64
+
65
+ return afterCreateRoute;
66
+ }
67
+
68
+ return undefined;
69
+ },
70
+ },
71
+ });
72
+ </script>
73
+
74
+ <template>
75
+ <CruResource
76
+ :mode="mode"
77
+ :resource="value"
78
+ :doneLocationOverride="doneLocationOverride"
79
+ class="create-edit"
80
+ :finish-button-mode="finishButtonMode"
81
+ :errors="errors"
82
+ :validation-passed="fvFormIsValid"
83
+ @finish="save"
84
+ @error="e=>errors=e"
85
+ >
86
+ <div class="mb-10">
87
+ <!-- app name, app description -->
88
+ <div class="row mt-20">
89
+ <div class="col span-12">
90
+ <NameNsDescription
91
+ :value="value"
92
+ :mode="mode"
93
+ :namespaced="false"
94
+ :name-placeholder="'oidcclient.appName.placeholder'"
95
+ :description-key="'spec.description'"
96
+ :description-placeholder="'oidcclient.appDescription.placeholder'"
97
+ :rules="{ name: fvGetAndReportPathRules('metadata.name'), description: [] }"
98
+ @update:value="$emit('input', $event)"
99
+ />
100
+ </div>
101
+ </div>
102
+ <!-- cb urls, tokens -->
103
+ <div class="row ">
104
+ <div class="col span-6">
105
+ <ArrayList
106
+ v-model:value="value.spec.redirectURIs"
107
+ class="mt-20"
108
+ :mode="mode"
109
+ :title="t('oidcclient.redirectURIs.label')"
110
+ :a11y-label="t('oidcclient.redirectURIs.label')"
111
+ :add-label="t('oidcclient.redirectURIs.addLabel')"
112
+ :required="true"
113
+ :protip="false"
114
+ :showHeader="true"
115
+ :rules="fvGetAndReportPathRules('spec.redirectURIs')"
116
+ :value-label="''"
117
+ data-testid="oidc-client-cb-urls-list"
118
+ />
119
+ </div>
120
+ </div>
121
+ <h3 class="mt-40">
122
+ {{ t('oidcclient.tokenExpirationSeconds.label') }}
123
+ </h3>
124
+ <div class="row mt-20 mb-20">
125
+ <div
126
+ class="col span-3"
127
+ data-testid="oidc-client-token-exp-input"
128
+ >
129
+ <UnitInput
130
+ v-model:value="value.spec.tokenExpirationSeconds"
131
+ :mode="mode"
132
+ :increment="1"
133
+ :required="true"
134
+ base-unit="s"
135
+ :positive="true"
136
+ :rules="fvGetAndReportPathRules('spec.tokenExpirationSeconds')"
137
+ :label="t('oidcclient.tokenExpirationSeconds.label')"
138
+ :sub-label="t('oidcclient.tokenExpirationSeconds.placeholder')"
139
+ :aria-label="t('oidcclient.tokenExpirationSeconds.label')"
140
+ />
141
+ </div>
142
+ <div
143
+ class="col span-3"
144
+ data-testid="oidc-client-ref-token-exp-input"
145
+ >
146
+ <UnitInput
147
+ v-model:value="value.spec.refreshTokenExpirationSeconds"
148
+ :mode="mode"
149
+ :increment="1"
150
+ :required="true"
151
+ base-unit="s"
152
+ :positive="true"
153
+ :rules="fvGetAndReportPathRules('spec.refreshTokenExpirationSeconds')"
154
+ :label="t('oidcclient.refreshTokenExpirationSeconds.label')"
155
+ :sub-label="t('oidcclient.refreshTokenExpirationSeconds.placeholder')"
156
+ :aria-label="t('oidcclient.refreshTokenExpirationSeconds.label')"
157
+ />
158
+ </div>
159
+ </div>
160
+ </div>
161
+ </CruResource>
162
+ </template>
@@ -195,7 +195,10 @@ export default {
195
195
  :rules="{ name: fvGetAndReportPathRules('spec.displayName'), namespace: [], description: [] }"
196
196
  @update:value="$emit('input', $event)"
197
197
  />
198
- <Tabbed :side-tabs="true">
198
+ <Tabbed
199
+ :side-tabs="true"
200
+ :use-hash="useTabbedHash"
201
+ >
199
202
  <Tab
200
203
  v-if="canViewMembers"
201
204
  name="members"
@@ -203,7 +203,7 @@ export default {
203
203
  @input="$emit('input', $event)"
204
204
  />
205
205
 
206
- <Tabbed>
206
+ <Tabbed :use-hash="useTabbedHash">
207
207
  <Tab
208
208
  :label="t('monitoring.route.label')"
209
209
  :weight="1"