@rancher/shell 1.2.3 → 2.0.1

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 (699) hide show
  1. package/assets/data/aws-regions.json +9 -0
  2. package/assets/images/vendor/openid.svg +18 -0
  3. package/assets/styles/app.scss +1 -2
  4. package/assets/styles/fonts/_icons.scss +3 -3
  5. package/assets/styles/global/_columns.scss +1 -1
  6. package/assets/styles/global/_labeled-input.scss +1 -0
  7. package/assets/styles/global/_layout.scss +99 -0
  8. package/assets/styles/themes/_csp.scss +2 -2
  9. package/assets/styles/themes/_dark.scss +8 -2
  10. package/assets/styles/themes/_light.scss +2 -1
  11. package/assets/styles/themes/_suse.scss +1 -1
  12. package/assets/styles/vendor/vue-select.scss +5 -0
  13. package/assets/translations/en-us.yaml +315 -64
  14. package/assets/translations/zh-hans.yaml +7 -31
  15. package/babel.config.js +8 -2
  16. package/chart/__tests__/S3.test.ts +9 -2
  17. package/chart/gatekeeper.vue +2 -11
  18. package/chart/istio.vue +1 -10
  19. package/chart/logging/index.vue +2 -11
  20. package/chart/monitoring/alerting/index.vue +7 -21
  21. package/chart/monitoring/grafana/index.vue +61 -2
  22. package/chart/monitoring/index.vue +52 -26
  23. package/chart/monitoring/prometheus/index.vue +39 -45
  24. package/chart/rancher-backup/S3.vue +11 -9
  25. package/chart/rancher-backup/index.vue +18 -15
  26. package/cloud-credential/__tests__/harvester.test.ts +18 -0
  27. package/cloud-credential/azure.vue +4 -17
  28. package/cloud-credential/generic.vue +18 -9
  29. package/cloud-credential/harvester.vue +11 -3
  30. package/components/AlertTable.vue +17 -7
  31. package/components/AppModal.vue +167 -0
  32. package/components/AssignTo.vue +7 -4
  33. package/components/AsyncButton.vue +27 -5
  34. package/components/BackLink.vue +4 -4
  35. package/components/BannerGraphic.vue +1 -0
  36. package/components/BrandImage.vue +47 -1
  37. package/components/Carousel.vue +15 -8
  38. package/components/Certificates.vue +161 -0
  39. package/components/ClusterBadge.vue +12 -3
  40. package/components/ClusterIconMenu.vue +55 -12
  41. package/components/ClusterProviderIcon.vue +14 -3
  42. package/components/CodeMirror.vue +111 -17
  43. package/components/CommunityLinks.vue +12 -8
  44. package/components/CopyCode.vue +6 -2
  45. package/components/CopyToClipboard.vue +2 -1
  46. package/components/CopyToClipboardText.vue +14 -9
  47. package/components/CreateDriver.vue +81 -0
  48. package/components/CruResource.vue +52 -27
  49. package/components/DetailTop.vue +2 -2
  50. package/components/Dialog.vue +6 -5
  51. package/components/DisableAuthProviderModal.vue +14 -8
  52. package/components/DraggableZone.vue +2 -2
  53. package/components/EtcdInfoBanner.vue +5 -5
  54. package/components/ExplorerMembers.vue +3 -3
  55. package/components/ExplorerProjectsNamespaces.vue +31 -7
  56. package/components/FixedBanner.vue +48 -36
  57. package/components/GlobalRoleBindings.vue +26 -0
  58. package/components/GrafanaDashboard.vue +6 -4
  59. package/components/IconOrSvg.vue +1 -1
  60. package/components/Import.vue +10 -6
  61. package/components/Inactivity.vue +1 -5
  62. package/components/KeyValueView.vue +14 -10
  63. package/components/Markdown.vue +16 -12
  64. package/components/MessageLink.vue +2 -2
  65. package/components/ModalWithCard.vue +5 -8
  66. package/components/MoveModal.vue +35 -33
  67. package/components/PodSecurityAdmission.vue +3 -3
  68. package/components/PromptChangePassword.vue +33 -33
  69. package/components/PromptModal.vue +11 -21
  70. package/components/PromptRemove.vue +12 -17
  71. package/components/PromptRestore.vue +18 -16
  72. package/components/Questions/__tests__/Boolean.test.ts +9 -19
  73. package/components/Questions/__tests__/Float.test.ts +9 -19
  74. package/components/Questions/__tests__/Int.test.ts +9 -19
  75. package/components/Questions/__tests__/String.test.ts +9 -19
  76. package/components/Questions/__tests__/Yaml.test.ts +9 -20
  77. package/components/Questions/__tests__/utils/questions-defaults.ts +20 -0
  78. package/components/Questions/index.vue +19 -3
  79. package/components/ResourceCancelModal.vue +34 -29
  80. package/components/ResourceDetail/Masthead.vue +48 -16
  81. package/components/ResourceDetail/index.vue +6 -4
  82. package/components/ResourceList/Masthead.vue +10 -9
  83. package/components/ResourceList/index.vue +65 -14
  84. package/components/ResourceTable.vue +87 -21
  85. package/components/ResourceYaml.vue +35 -5
  86. package/components/SelectIconGrid.vue +3 -3
  87. package/components/SideNav.vue +50 -94
  88. package/components/SingleClusterInfo.vue +4 -4
  89. package/components/SortableTable/THead.vue +33 -21
  90. package/components/SortableTable/filtering.js +9 -1
  91. package/components/SortableTable/grouping.js +8 -1
  92. package/components/SortableTable/index.vue +143 -44
  93. package/components/SortableTable/paging.js +36 -7
  94. package/components/SortableTable/selection.js +2 -1
  95. package/components/SortableTable/sorting.js +24 -7
  96. package/components/StatusTable.vue +5 -1
  97. package/components/Tabbed/index.vue +18 -1
  98. package/components/TableDataUserIcon.vue +47 -0
  99. package/components/TypeDescription.vue +1 -0
  100. package/components/Wizard.vue +1 -0
  101. package/components/YamlEditor.vue +1 -0
  102. package/components/__tests__/AppModal.test.ts +98 -0
  103. package/components/__tests__/AsyncButton.test.ts +1 -3
  104. package/components/__tests__/BackLink.test.ts +1 -1
  105. package/components/__tests__/ButtonGroup.test.ts +3 -6
  106. package/components/__tests__/Carousel.test.ts +43 -0
  107. package/components/__tests__/Certificates.test.ts +29 -0
  108. package/components/__tests__/CodeMirror.test.ts +87 -0
  109. package/components/__tests__/CopyCode.test.ts +5 -4
  110. package/components/__tests__/CruResource.test.ts +10 -9
  111. package/components/__tests__/EtcdInfoBanner.test.ts +37 -0
  112. package/components/__tests__/FixedBanner.test.ts +5 -20
  113. package/components/__tests__/NamespaceFilter.test.ts +9 -18
  114. package/components/__tests__/TabTitle.test.ts +129 -0
  115. package/components/auth/AzureWarning.vue +2 -2
  116. package/components/auth/RoleDetailEdit.vue +10 -0
  117. package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
  118. package/components/auth/login/oidc.vue +7 -1
  119. package/components/fleet/FleetBundles.vue +5 -11
  120. package/components/fleet/FleetClusters.vue +9 -9
  121. package/components/fleet/FleetIntro.vue +11 -17
  122. package/components/fleet/FleetNoWorkspaces.vue +2 -2
  123. package/components/fleet/FleetRepos.vue +63 -27
  124. package/components/fleet/FleetResources.vue +6 -1
  125. package/components/fleet/FleetStatus.vue +3 -3
  126. package/components/fleet/FleetSummary.vue +35 -30
  127. package/components/fleet/ForceDirectedTreeChart/index.vue +9 -3
  128. package/components/fleet/__tests__/FleetSummary.test.ts +316 -0
  129. package/components/form/ArrayList.vue +22 -18
  130. package/components/form/ArrayListSelect.vue +5 -0
  131. package/components/form/BannerSettings.vue +3 -0
  132. package/components/form/ClusterAppearance.vue +132 -0
  133. package/components/form/ColorInput.vue +1 -0
  134. package/components/form/Error.vue +3 -3
  135. package/components/form/FileSelector.vue +1 -0
  136. package/components/form/Footer.vue +2 -2
  137. package/components/form/GitPicker.vue +83 -38
  138. package/components/form/KeyValue.vue +70 -48
  139. package/components/form/LabeledSelect.vue +145 -41
  140. package/components/form/Labels.vue +3 -1
  141. package/components/form/NameNsDescription.vue +26 -9
  142. package/components/form/Password.vue +3 -1
  143. package/components/form/ResourceLabeledSelect.vue +187 -0
  144. package/components/form/ResourceTabs/index.vue +31 -15
  145. package/components/form/SecretSelector.vue +93 -18
  146. package/components/form/SelectOrCreateAuthSecret.vue +132 -59
  147. package/components/form/SimpleSecretSelector.vue +88 -28
  148. package/components/form/Taints.vue +13 -7
  149. package/components/form/__tests__/BannerSettings.test.ts +53 -0
  150. package/components/form/__tests__/KeyValue.test.ts +120 -11
  151. package/components/form/__tests__/LabeledSelect.test.ts +0 -18
  152. package/components/form/__tests__/{NameNsDescription.ts → NameNsDescription.test.ts} +25 -15
  153. package/components/form/__tests__/Taints.test.ts +70 -0
  154. package/components/form/labeled-select-utils/labeled-select-pagination.ts +151 -0
  155. package/components/form/labeled-select-utils/labeled-select.utils.ts +122 -0
  156. package/components/formatter/AppSummaryGraph.vue +2 -2
  157. package/components/formatter/Checked.vue +11 -3
  158. package/components/formatter/CloudCredPublicData.vue +30 -0
  159. package/components/formatter/ClusterLink.vue +2 -2
  160. package/components/formatter/ClusterProvider.vue +1 -18
  161. package/components/formatter/FleetClusterSummaryGraph.vue +27 -0
  162. package/components/formatter/FleetSummaryGraph.vue +25 -12
  163. package/components/formatter/ImagePercentageBar.vue +0 -4
  164. package/components/formatter/IngressTarget.vue +18 -7
  165. package/components/formatter/Link.vue +2 -2
  166. package/components/formatter/LinkDetail.vue +2 -2
  167. package/components/formatter/LinkDetailImage.vue +2 -2
  168. package/components/formatter/LinkName.vue +2 -2
  169. package/components/formatter/LiveDuration.vue +1 -1
  170. package/components/formatter/PercentageBar.vue +1 -1
  171. package/components/formatter/PrincipalGroupBindings.vue +2 -2
  172. package/components/formatter/SecretType.vue +2 -2
  173. package/components/formatter/VirtualServiceGateways.vue +2 -2
  174. package/components/formatter/WorkloadDetailEndpoints.vue +12 -22
  175. package/components/formatter/__tests__/Checked.test.ts +19 -0
  176. package/components/formatter/__tests__/LinkDetail.test.ts +5 -5
  177. package/components/formatter/__tests__/WorkloadDetailEndpoints.test.ts +81 -0
  178. package/components/nav/Group.vue +9 -7
  179. package/components/nav/Header.vue +85 -46
  180. package/components/nav/Jump.vue +19 -9
  181. package/components/nav/NamespaceFilter.vue +8 -1
  182. package/components/nav/TopLevelMenu.vue +392 -136
  183. package/components/nav/Type.vue +71 -106
  184. package/components/nav/WindowManager/ContainerLogs.vue +120 -19
  185. package/components/nav/WindowManager/ContainerShell.vue +6 -1
  186. package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +186 -0
  187. package/components/nav/WindowManager/index.vue +11 -10
  188. package/components/nav/__tests__/TopLevelMenu.test.ts +400 -6
  189. package/components/nav/__tests__/Type.test.ts +322 -97
  190. package/components/nuxt/nuxt-child.js +9 -78
  191. package/components/nuxt/nuxt-error.vue +1 -1
  192. package/components/nuxt/nuxt-link.client.js +13 -95
  193. package/{layouts → components/templates}/blank.vue +1 -1
  194. package/{layouts → components/templates}/default.vue +11 -101
  195. package/{layouts → components/templates}/error.vue +13 -26
  196. package/{layouts → components/templates}/home.vue +4 -1
  197. package/{layouts → components/templates}/plain.vue +4 -1
  198. package/{layouts → components/templates}/standalone.vue +1 -5
  199. package/{layouts → components/templates}/unauthenticated.vue +2 -3
  200. package/composables/useCompactInput.test.ts +36 -0
  201. package/composables/useCompactInput.ts +20 -0
  202. package/composables/useLabeledFormElement.test.ts +135 -0
  203. package/composables/useLabeledFormElement.ts +138 -0
  204. package/config/harvester-manager-types.js +2 -0
  205. package/config/home-links.js +2 -1
  206. package/config/labels-annotations.js +2 -1
  207. package/config/middleware.js +0 -6
  208. package/config/pagination-table-headers.js +57 -0
  209. package/config/pod-security-admission.ts +1 -1
  210. package/config/private-label.js +21 -1
  211. package/config/product/auth.js +1 -0
  212. package/config/product/explorer.js +166 -45
  213. package/config/product/fleet.js +6 -1
  214. package/config/product/legacy.js +2 -11
  215. package/config/product/manager.js +51 -25
  216. package/config/query-params.js +2 -0
  217. package/config/roles.ts +23 -0
  218. package/config/router/index.js +23 -0
  219. package/config/router/navigation-guards/attempt-first-login.js +73 -0
  220. package/config/router/navigation-guards/authentication.js +63 -0
  221. package/config/router/navigation-guards/i18n.js +13 -0
  222. package/config/router/navigation-guards/index.js +16 -0
  223. package/config/router/navigation-guards/load-initial-settings.js +15 -0
  224. package/config/router/routes.js +487 -0
  225. package/config/settings.ts +31 -2
  226. package/config/store.js +8 -4
  227. package/config/system-namespaces.js +3 -0
  228. package/config/table-headers.js +66 -1
  229. package/config/types.js +35 -20
  230. package/config/uiplugins.js +10 -5
  231. package/core/plugin-helpers.js +4 -6
  232. package/core/plugin-routes.ts +56 -114
  233. package/core/plugin.ts +18 -11
  234. package/core/plugins-loader.js +7 -9
  235. package/core/plugins.js +289 -285
  236. package/core/types-provisioning.ts +7 -0
  237. package/creators/app/app.package.json +2 -1
  238. package/creators/app/files/.eslintignore +0 -2
  239. package/creators/app/files/.gitlab-ci.yml +14 -0
  240. package/creators/app/files/.vscode/settings.json +0 -1
  241. package/creators/app/init +19 -0
  242. package/creators/pkg/files/.github/workflows/build-extension-catalog.yml +2 -6
  243. package/creators/pkg/files/.github/workflows/build-extension-charts.yml +2 -6
  244. package/creators/pkg/init +32 -0
  245. package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +119 -0
  246. package/detail/__tests__/service.test.ts +62 -0
  247. package/detail/catalog.cattle.io.app.vue +1 -1
  248. package/detail/cis.cattle.io.clusterscan.vue +14 -3
  249. package/detail/fleet.cattle.io.bundle.vue +1 -1
  250. package/detail/fleet.cattle.io.cluster.vue +11 -1
  251. package/detail/fleet.cattle.io.gitrepo.vue +15 -9
  252. package/detail/namespace.vue +2 -2
  253. package/detail/networking.k8s.io.ingress.vue +52 -19
  254. package/detail/node.vue +22 -3
  255. package/detail/provisioning.cattle.io.cluster.vue +31 -13
  256. package/detail/service.vue +1 -1
  257. package/detail/workload/index.vue +1 -0
  258. package/dialog/AddCustomBadgeDialog.vue +318 -161
  259. package/dialog/DeactivateDriverDialog.vue +137 -0
  260. package/dialog/RollbackWorkloadDialog.vue +2 -2
  261. package/dialog/RotateCertificatesDialog.vue +0 -21
  262. package/dialog/ScaleMachineDownDialog.vue +34 -17
  263. package/directives/clean-html.js +15 -0
  264. package/directives/clean-tooltip.js +32 -0
  265. package/directives/focus.js +41 -0
  266. package/directives/int-number.js +21 -0
  267. package/directives/positive-int-number.js +19 -0
  268. package/directives/trim-whitespace.js +19 -0
  269. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +3 -2
  270. package/edit/__tests__/kontainerDriver.test.ts +107 -0
  271. package/edit/__tests__/management.cattle.io.clusterroletemplatebinding.test.ts +12 -1
  272. package/edit/__tests__/management.cattle.io.setting.test.ts +2 -1
  273. package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +2 -3
  274. package/edit/__tests__/nodeDriver.test.ts +107 -0
  275. package/edit/__tests__/service.test.ts +85 -0
  276. package/edit/__tests__/ui.cattle.io.navlink.test.ts +3 -1
  277. package/edit/auth/AuthProviderWarningBanners.vue +34 -0
  278. package/edit/auth/__tests__/AuthProviderWarningBanners.test.ts +19 -0
  279. package/edit/auth/__tests__/azuread.test.ts +241 -0
  280. package/edit/auth/__tests__/oidc.test.ts +137 -0
  281. package/edit/auth/azuread.vue +133 -31
  282. package/edit/auth/github.vue +5 -17
  283. package/edit/auth/googleoauth.vue +6 -23
  284. package/edit/auth/ldap/index.vue +5 -17
  285. package/edit/auth/oidc.vue +143 -42
  286. package/edit/auth/saml.vue +5 -14
  287. package/edit/catalog.cattle.io.clusterrepo.vue +177 -9
  288. package/edit/cis.cattle.io.clusterscan.vue +5 -2
  289. package/edit/cis.cattle.io.clusterscanbenchmark.vue +41 -9
  290. package/edit/cloudcredential.vue +28 -4
  291. package/edit/configmap.vue +10 -4
  292. package/edit/fleet.cattle.io.gitrepo.vue +3 -1
  293. package/edit/helm.cattle.io.projecthelmchart.vue +29 -19
  294. package/edit/kontainerDriver.vue +65 -0
  295. package/edit/logging-flow/Match.vue +10 -9
  296. package/edit/logging-flow/index.vue +4 -19
  297. package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +232 -2
  298. package/edit/logging.banzaicloud.io.output/index.vue +43 -26
  299. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +3 -3
  300. package/edit/management.cattle.io.project.vue +3 -53
  301. package/edit/management.cattle.io.setting.vue +52 -2
  302. package/edit/management.cattle.io.user.vue +2 -1
  303. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +10 -7
  304. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +21 -16
  305. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +1 -1
  306. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +2 -2
  307. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +1 -1
  308. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +15 -3
  309. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +4 -1
  310. package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +2 -0
  311. package/edit/monitoring.coreos.com.prometheusrule/index.vue +2 -0
  312. package/edit/networking.k8s.io.ingress/Rules.vue +8 -3
  313. package/edit/networking.k8s.io.ingress/index.vue +64 -8
  314. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +1 -0
  315. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +6 -2
  316. package/edit/networking.k8s.io.networkpolicy/__tests__/{PolicyRuleTarget.spec.ts → PolicyRuleTarget.test.ts} +46 -7
  317. package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.ts → selectors.test.ts} +1 -1
  318. package/edit/networking.k8s.io.networkpolicy/index.vue +2 -0
  319. package/edit/nodeDriver.vue +65 -0
  320. package/edit/persistentvolume/index.vue +2 -2
  321. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +33 -16
  322. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +276 -0
  323. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +473 -0
  324. package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.tests.ts → CustomCommand.test.ts} +3 -0
  325. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +228 -0
  326. package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
  327. package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +73 -0
  328. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +77 -13
  329. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +391 -0
  330. package/edit/provisioning.cattle.io.cluster/import.vue +4 -4
  331. package/edit/provisioning.cattle.io.cluster/index.vue +126 -51
  332. package/edit/provisioning.cattle.io.cluster/rke2.vue +325 -791
  333. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +137 -0
  334. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +217 -0
  335. package/edit/provisioning.cattle.io.cluster/{Basics.vue → tabs/Basics.vue} +123 -129
  336. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +132 -0
  337. package/edit/provisioning.cattle.io.cluster/{MachinePool.vue → tabs/MachinePool.vue} +1 -0
  338. package/edit/provisioning.cattle.io.cluster/{S3Config.vue → tabs/etcd/S3Config.vue} +1 -0
  339. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +135 -0
  340. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +190 -0
  341. package/edit/provisioning.cattle.io.cluster/{RegistryConfigs.vue → tabs/registries/RegistryConfigs.vue} +3 -0
  342. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +148 -0
  343. package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +76 -0
  344. package/edit/resources.cattle.io.backup.vue +139 -124
  345. package/edit/resources.cattle.io.restore.vue +146 -126
  346. package/edit/service.vue +13 -0
  347. package/edit/serviceaccount.vue +46 -4
  348. package/edit/token.vue +3 -1
  349. package/edit/workload/Upgrading.vue +3 -2
  350. package/edit/workload/__tests__/Job.test.ts +1 -3
  351. package/edit/workload/__tests__/Upgrading.test.ts +2 -2
  352. package/edit/workload/index.vue +2 -1
  353. package/edit/workload/mixins/workload.js +35 -2
  354. package/edit/workload/storage/emptyDir.vue +2 -2
  355. package/initialize/App.vue +75 -0
  356. package/initialize/app-extended.js +128 -0
  357. package/initialize/entry-helpers.js +546 -0
  358. package/initialize/entry.js +32 -0
  359. package/initialize/install-components.js +23 -0
  360. package/initialize/install-directives.js +59 -0
  361. package/initialize/install-plugins.js +123 -0
  362. package/list/__tests__/workload.test.ts +1 -1
  363. package/list/catalog.cattle.io.app.vue +1 -0
  364. package/list/cis.cattle.io.clusterscan.vue +16 -10
  365. package/list/group.principal.vue +2 -2
  366. package/list/management.cattle.io.feature.vue +16 -16
  367. package/list/management.cattle.io.setting.vue +1 -0
  368. package/list/management.cattle.io.user.vue +13 -4
  369. package/list/networking.k8s.io.ingress.vue +36 -0
  370. package/list/node.vue +212 -73
  371. package/list/provisioning.cattle.io.cluster.vue +17 -4
  372. package/list/ui.cattle.io.navlink.vue +2 -2
  373. package/list/workload.vue +22 -0
  374. package/machine-config/__tests__/vmwarevsphere-pool-config-merge.test.ts +30 -0
  375. package/machine-config/__tests__/vmwarevsphere.test.ts +1 -3
  376. package/machine-config/amazonec2.vue +1 -1
  377. package/machine-config/azure.vue +2 -1
  378. package/machine-config/generic.vue +11 -15
  379. package/machine-config/vmwarevsphere-pool-config-merge.ts +25 -0
  380. package/machine-config/vmwarevsphere.vue +31 -27
  381. package/middleware/authenticated.js +23 -399
  382. package/mixins/__tests__/chart.test.ts +48 -6
  383. package/mixins/__tests__/create-edit-view.test.ts +2 -3
  384. package/mixins/auth-config.js +5 -9
  385. package/mixins/brand.js +102 -96
  386. package/mixins/chart.js +27 -13
  387. package/mixins/create-edit-view/index.js +2 -2
  388. package/mixins/fetch.client.js +42 -48
  389. package/mixins/labeled-form-element.ts +27 -2
  390. package/mixins/page-actions.js +7 -5
  391. package/mixins/resource-fetch-api-pagination.js +304 -0
  392. package/mixins/resource-fetch-namespaced.js +1 -1
  393. package/mixins/resource-fetch.js +46 -5
  394. package/models/__tests__/cluster.test.ts +44 -0
  395. package/models/__tests__/fleet.cattle.io.cluster.test.ts +36 -0
  396. package/models/__tests__/management.cattle.io.cluster.test.ts +23 -0
  397. package/models/__tests__/management.cattle.io.node.ts +85 -0
  398. package/models/__tests__/management.cattle.io.nodepool.ts +83 -0
  399. package/models/__tests__/namespace.test.ts +49 -9
  400. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +241 -0
  401. package/models/__tests__/schema.tests.ts +24 -0
  402. package/models/__tests__/secret.test.ts +37 -0
  403. package/models/__tests__/steve-schema.test.ts +73 -0
  404. package/models/__tests__/storage.k8s.io.storageclass.test.ts +22 -0
  405. package/models/__tests__/workload.test.ts +91 -0
  406. package/models/catalog.cattle.io.app.js +8 -0
  407. package/models/catalog.cattle.io.clusterrepo.js +9 -1
  408. package/models/catalog.cattle.io.uiplugin.js +7 -8
  409. package/models/cis.cattle.io.clusterscan.js +29 -8
  410. package/models/cloudcredential.js +9 -1
  411. package/models/cluster/node.js +8 -4
  412. package/models/cluster/schema.js +6 -0
  413. package/models/cluster.js +33 -0
  414. package/models/cluster.x-k8s.io.machine.js +1 -1
  415. package/models/cluster.x-k8s.io.machinedeployment.js +14 -0
  416. package/models/driver.js +63 -0
  417. package/models/fleet.cattle.io.cluster.js +27 -11
  418. package/models/fleet.cattle.io.gitrepo.js +66 -13
  419. package/models/helm.cattle.io.projecthelmchart.js +1 -1
  420. package/models/kontainerdriver.js +85 -0
  421. package/models/management/schema.js +6 -0
  422. package/models/management.cattle.io.authconfig.js +3 -2
  423. package/models/management.cattle.io.cluster.js +16 -7
  424. package/models/management.cattle.io.globalrole.js +2 -0
  425. package/models/management.cattle.io.kontainerdriver.js +1 -0
  426. package/models/management.cattle.io.node.js +18 -14
  427. package/models/management.cattle.io.nodepool.js +17 -0
  428. package/models/management.cattle.io.project.js +0 -36
  429. package/models/management.cattle.io.setting.js +11 -7
  430. package/models/management.cattle.io.user.js +2 -2
  431. package/models/monitoring.coreos.com.receiver.js +3 -1
  432. package/models/monitoring.coreos.com.route.js +1 -1
  433. package/models/namespace.js +1 -1
  434. package/models/networking.k8s.io.ingress.js +2 -1
  435. package/models/nodedriver.js +85 -0
  436. package/models/pod.js +20 -0
  437. package/models/provisioning.cattle.io.cluster.js +125 -10
  438. package/models/schema.js +28 -7
  439. package/models/secret.js +126 -18
  440. package/models/service.js +2 -0
  441. package/models/steve-schema.ts +254 -0
  442. package/models/storage.k8s.io.storageclass.js +1 -1
  443. package/models/workload.js +17 -0
  444. package/models/workload.service.js +18 -0
  445. package/package.json +18 -14
  446. package/pages/about.vue +12 -6
  447. package/pages/account/create-key.vue +0 -1
  448. package/pages/account/index.vue +7 -3
  449. package/pages/auth/login.vue +106 -103
  450. package/pages/auth/logout.vue +2 -4
  451. package/pages/auth/setup.vue +92 -66
  452. package/pages/auth/verify.vue +30 -24
  453. package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +2 -17
  454. package/pages/c/_cluster/apps/charts/chart.vue +54 -9
  455. package/pages/c/_cluster/apps/charts/index.vue +99 -69
  456. package/pages/c/_cluster/apps/charts/install.helpers.js +2 -13
  457. package/pages/c/_cluster/apps/charts/install.vue +12 -11
  458. package/pages/c/_cluster/auth/config/_id.vue +0 -6
  459. package/pages/c/_cluster/auth/config/index.vue +15 -9
  460. package/pages/c/_cluster/auth/roles/index.vue +8 -10
  461. package/pages/c/_cluster/ecm/index.vue +0 -2
  462. package/pages/c/_cluster/explorer/ConfigBadge.vue +13 -8
  463. package/pages/c/_cluster/explorer/EventsTable.vue +18 -0
  464. package/pages/c/_cluster/explorer/__tests__/index.test.ts +181 -0
  465. package/pages/c/_cluster/explorer/index.vue +253 -91
  466. package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +69 -0
  467. package/pages/c/_cluster/explorer/tools/index.vue +10 -6
  468. package/pages/c/_cluster/fleet/index.vue +89 -94
  469. package/pages/c/_cluster/longhorn/__tests__/longhorn.index.test.ts +89 -0
  470. package/pages/c/_cluster/longhorn/index.vue +52 -17
  471. package/pages/c/_cluster/manager/cloudCredential/index.vue +18 -25
  472. package/pages/c/_cluster/manager/drivers/kontainerDriver/_id.vue +12 -0
  473. package/pages/c/_cluster/manager/drivers/kontainerDriver/create.vue +15 -0
  474. package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +91 -0
  475. package/pages/c/_cluster/manager/drivers/nodeDriver/_id.vue +12 -0
  476. package/pages/c/_cluster/manager/drivers/nodeDriver/create.vue +15 -0
  477. package/pages/c/_cluster/manager/drivers/nodeDriver/index.vue +60 -0
  478. package/pages/c/_cluster/manager/jwt.authentication/index.vue +235 -0
  479. package/pages/c/_cluster/manager/pages/_page.vue +4 -5
  480. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +4 -0
  481. package/pages/c/_cluster/monitoring/route-receiver/index.vue +2 -2
  482. package/pages/c/_cluster/neuvector/index.vue +1 -0
  483. package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -0
  484. package/pages/c/_cluster/settings/banners.vue +86 -10
  485. package/pages/c/_cluster/settings/brand.vue +261 -38
  486. package/pages/c/_cluster/settings/index.vue +4 -6
  487. package/pages/c/_cluster/settings/links.vue +3 -2
  488. package/pages/c/_cluster/settings/performance.vue +71 -3
  489. package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +5 -2
  490. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +12 -8
  491. package/pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue +9 -6
  492. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +10 -46
  493. package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +11 -5
  494. package/pages/c/_cluster/uiplugins/InstallDialog.vue +55 -19
  495. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +36 -301
  496. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +14 -6
  497. package/pages/c/_cluster/uiplugins/__tests__/SetupUIPlugins.test.ts +52 -106
  498. package/pages/c/_cluster/uiplugins/index.vue +38 -54
  499. package/pages/diagnostic.vue +2 -2
  500. package/pages/fail-whale.vue +103 -42
  501. package/pages/home.vue +81 -24
  502. package/pages/prefs.vue +8 -4
  503. package/pages/support/index.vue +14 -10
  504. package/pkg/auto-import.js +1 -1
  505. package/plugins/axios.js +0 -36
  506. package/plugins/back-button.js +3 -5
  507. package/plugins/clean-html-directive.js +5 -30
  508. package/plugins/clean-html.js +53 -0
  509. package/plugins/clean-tooltip-directive.js +6 -31
  510. package/plugins/codemirror-loader.js +1 -1
  511. package/plugins/codemirror.js +41 -9
  512. package/plugins/dashboard-store/__tests__/mutations.test.ts +389 -0
  513. package/plugins/dashboard-store/__tests__/resource-class.test.ts +49 -0
  514. package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +7 -0
  515. package/plugins/dashboard-store/actions.js +132 -25
  516. package/plugins/dashboard-store/classify.js +1 -18
  517. package/plugins/dashboard-store/getters.js +154 -44
  518. package/plugins/dashboard-store/index.js +0 -111
  519. package/plugins/dashboard-store/mutations.js +150 -52
  520. package/plugins/dashboard-store/resource-class.js +77 -127
  521. package/plugins/directives.js +6 -39
  522. package/plugins/ember-cookie.js +13 -0
  523. package/plugins/global-formatters.js +26 -5
  524. package/plugins/i18n.js +89 -55
  525. package/plugins/int-number.js +6 -20
  526. package/plugins/plugin.js +3 -3
  527. package/plugins/positive-int-number.js +6 -17
  528. package/plugins/steve/__tests__/{getters.spec.ts → getters.test.ts} +81 -10
  529. package/plugins/steve/__tests__/mutations.test.ts +49 -0
  530. package/plugins/steve/__tests__/resource-utils.test.ts +159 -0
  531. package/plugins/steve/__tests__/steve-class.test.ts +59 -0
  532. package/plugins/steve/__tests__/subscribe.spec.ts +4 -1
  533. package/plugins/steve/__tests__/utils/mutation.test.helpers.ts +105 -0
  534. package/plugins/steve/__tests__/utils/steve-mocks.ts +31 -0
  535. package/plugins/steve/accept-or-reject-socket-message.ts +103 -0
  536. package/plugins/steve/actions.js +3 -38
  537. package/plugins/steve/getters.js +164 -61
  538. package/plugins/steve/hybrid-class.js +5 -1
  539. package/plugins/steve/mutations.js +24 -3
  540. package/plugins/steve/norman-class.js +142 -2
  541. package/{utils → plugins/steve}/projectAndNamespaceFiltering.utils.ts +28 -10
  542. package/plugins/steve/resource-utils.ts +38 -0
  543. package/plugins/steve/schema.d.ts +22 -0
  544. package/plugins/steve/steve-class.js +22 -0
  545. package/plugins/steve/steve-pagination-utils.ts +368 -0
  546. package/plugins/steve/subscribe.js +17 -76
  547. package/plugins/trim-whitespace.js +6 -34
  548. package/plugins/vue-js-modal.js +1 -1
  549. package/promptRemove/pod.vue +15 -7
  550. package/public/index.html +1 -0
  551. package/rancher-components/Accordion/Accordion.test.ts +45 -0
  552. package/rancher-components/Accordion/Accordion.vue +86 -0
  553. package/rancher-components/Accordion/index.ts +1 -0
  554. package/rancher-components/BadgeState/BadgeState.vue +3 -3
  555. package/rancher-components/Banner/Banner.test.ts +1 -5
  556. package/rancher-components/Banner/Banner.vue +2 -2
  557. package/rancher-components/Card/Card.vue +4 -4
  558. package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
  559. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +18 -1
  560. package/rancher-components/Form/LabeledInput/LabeledInput.vue +57 -24
  561. package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
  562. package/rancher-components/Form/Radio/RadioButton.vue +13 -7
  563. package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
  564. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
  565. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  566. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  567. package/rancher-components/StringList/StringList.test.ts +270 -0
  568. package/rancher-components/StringList/StringList.vue +65 -26
  569. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +69 -0
  570. package/scripts/clean +1 -1
  571. package/scripts/extension/bundle +19 -7
  572. package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +11 -0
  573. package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -0
  574. package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
  575. package/scripts/extension/helm/package/Dockerfile +1 -1
  576. package/scripts/extension/helm/scripts/package +11 -3
  577. package/scripts/extension/helm/scripts/patch +27 -0
  578. package/scripts/extension/parse-tag-name +4 -4
  579. package/scripts/extension/publish +25 -14
  580. package/scripts/publish-shell.sh +11 -1
  581. package/scripts/serve-pkgs +0 -2
  582. package/scripts/test-plugins-build.sh +87 -11
  583. package/scripts/vue-migrate.js +683 -0
  584. package/server/har-file.js +183 -0
  585. package/store/__tests__/catalog.test.ts +224 -0
  586. package/store/__tests__/type-map.test.ts +1122 -0
  587. package/store/auth.js +23 -4
  588. package/store/aws.js +53 -6
  589. package/store/catalog.js +22 -6
  590. package/store/cru-resource.ts +26 -0
  591. package/store/customisation.js +35 -0
  592. package/store/features.js +7 -4
  593. package/store/i18n.js +11 -0
  594. package/store/index.js +140 -49
  595. package/store/plugins.js +8 -4
  596. package/store/prefs.js +33 -38
  597. package/store/type-map.js +288 -213
  598. package/store/type-map.utils.ts +226 -0
  599. package/tsconfig.json +34 -9
  600. package/tsconfig.paths.json +21 -0
  601. package/types/components/labeledSelect.ts +50 -0
  602. package/types/resources/settings.d.ts +32 -0
  603. package/types/{userPreferences.d.ts → resources/userPreferences.d.ts} +0 -1
  604. package/types/shell/index.d.ts +1045 -770
  605. package/types/store/dashboard-store.types.ts +42 -0
  606. package/types/store/pagination.types.ts +457 -0
  607. package/types/store/type-map.ts +30 -0
  608. package/types/store/vuex.d.ts +9 -0
  609. package/types/vue-shim.d.ts +51 -0
  610. package/utils/__tests__/cluster.test.ts +20 -18
  611. package/utils/__tests__/create-yaml.test.ts +359 -2
  612. package/utils/__tests__/kontainer.test.ts +180 -0
  613. package/utils/__tests__/pod-security-admission.test.ts +1 -1
  614. package/utils/alertmanagerconfig.js +19 -0
  615. package/utils/array.ts +40 -1
  616. package/utils/async.ts +2 -0
  617. package/utils/auth.js +152 -4
  618. package/utils/axios.js +2 -21
  619. package/utils/azure.js +24 -0
  620. package/utils/banners.js +103 -0
  621. package/utils/clipboard.js +5 -0
  622. package/utils/cluster.js +1 -1
  623. package/utils/config.js +4 -0
  624. package/utils/create-yaml.js +59 -28
  625. package/utils/custom-validators.js +0 -2
  626. package/utils/error.js +41 -1
  627. package/utils/formatter.js +5 -3
  628. package/utils/git.ts +1 -1
  629. package/utils/install-redirect.js +1 -1
  630. package/utils/kontainer.ts +190 -0
  631. package/utils/object.js +24 -0
  632. package/utils/pagination-utils.ts +154 -0
  633. package/utils/pod-security-admission.ts +1 -1
  634. package/utils/router.js +86 -0
  635. package/utils/settings.ts +46 -0
  636. package/utils/time.js +2 -1
  637. package/utils/unit-tests/ChildRenderingRouterLinkStub.ts +36 -0
  638. package/utils/url.ts +1 -1
  639. package/utils/validators/formRules/__tests__/index.test.ts +70 -4
  640. package/utils/validators/formRules/index.ts +15 -9
  641. package/utils/validators/index.js +1 -0
  642. package/utils/validators/setting.js +6 -10
  643. package/utils/version.js +2 -1
  644. package/vue.config.js +377 -401
  645. package/.DS_Store +0 -0
  646. package/assets/images/providers/aks-black.svg +0 -28
  647. package/assets/images/providers/aks.svg +0 -31
  648. package/assets/styles/vendor/vue-js-modal.scss +0 -16
  649. package/components/ChartPsp.vue +0 -76
  650. package/components/EventsTable.vue +0 -67
  651. package/components/TabbedLinks/index.vue +0 -94
  652. package/components/__tests__/ChartPsp.test.ts +0 -75
  653. package/components/formatter/__tests__/ClusterProvider.test.ts +0 -28
  654. package/components/nuxt/nuxt-link.server.js +0 -16
  655. package/components/nuxt/nuxt.js +0 -101
  656. package/config/router.js +0 -408
  657. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +0 -237
  658. package/initialize/App.js +0 -198
  659. package/initialize/client.js +0 -875
  660. package/initialize/index.js +0 -364
  661. package/initialize/layouts.ts +0 -26
  662. package/middleware/i18n.js +0 -10
  663. package/middleware/unauthenticated.js +0 -22
  664. package/mixins/fetch.server.js +0 -73
  665. package/pages/c/_cluster/apps/index.vue +0 -17
  666. package/pages/c/_cluster/auth/index.vue +0 -19
  667. package/pages/c/_cluster/index.vue +0 -17
  668. package/pages/c/_cluster/legacy/index.vue +0 -22
  669. package/pages/c/_cluster/manager/index.vue +0 -22
  670. package/pages/c/_cluster/mcapps/index.vue +0 -21
  671. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +0 -232
  672. package/pages/c/index.vue +0 -9
  673. package/pages/rio/mesh.vue +0 -508
  674. package/plugins/dashboard-store/__tests__/mutations.spec.ts +0 -406
  675. package/plugins/dashboard-store/rehydrate-all.js +0 -44
  676. package/plugins/portal-vue.js +0 -4
  677. package/plugins/portal.js +0 -4
  678. package/plugins/resize.js +0 -5
  679. package/plugins/shortkey.js +0 -4
  680. package/plugins/tooltip.js +0 -4
  681. package/plugins/transitions.js +0 -4
  682. package/plugins/v-select.js +0 -4
  683. package/plugins/vue-clipboard2.js +0 -4
  684. package/tsconfig.default.json +0 -46
  685. package/utils/group.js +0 -70
  686. package/utils/nuxt.js +0 -659
  687. package/utils/router.scrollBehavior.js +0 -80
  688. /package/components/__tests__/{Collapse.spec.ts → Collapse.test.ts} +0 -0
  689. /package/edit/provisioning.cattle.io.cluster/{AgentConfiguration.vue → tabs/AgentConfiguration.vue} +0 -0
  690. /package/edit/provisioning.cattle.io.cluster/{MemberRoles.vue → tabs/MemberRoles.vue} +0 -0
  691. /package/edit/provisioning.cattle.io.cluster/{ACE.vue → tabs/networking/ACE.vue} +0 -0
  692. /package/edit/provisioning.cattle.io.cluster/{RegistryMirrors.vue → tabs/registries/RegistryMirrors.vue} +0 -0
  693. /package/edit/provisioning.cattle.io.cluster/{DrainOptions.vue → tabs/upgrade/DrainOptions.vue} +0 -0
  694. /package/models/__tests__/{node.ts → node.test.ts} +0 -0
  695. /package/plugins/dashboard-store/__tests__/{actions.spec.ts → actions.test.ts} +0 -0
  696. /package/plugins/dashboard-store/__tests__/{getters.spec.ts → getters.test.ts} +0 -0
  697. /package/plugins/steve/__tests__/{header-warnings.spec.ts → header-warnings.test.ts} +0 -0
  698. /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
  699. /package/types/{pod-security-admission.ts → resources/pod-security-admission.ts} +0 -0
@@ -398,6 +398,276 @@ describe('stringList.vue', () => {
398
398
  });
399
399
  });
400
400
 
401
+ describe('bulk delimiter', () => {
402
+ const delimiter = /;/;
403
+
404
+ describe('add', () => {
405
+ const items: string[] = [];
406
+
407
+ beforeEach(() => {
408
+ wrapper = mount(StringList, {
409
+ propsData: {
410
+ items,
411
+ bulkAdditionDelimiter: delimiter,
412
+ errorMessages: { duplicate: 'error, item is duplicate.' },
413
+ }
414
+ });
415
+ });
416
+
417
+ it('should split values if delimiter set', async() => {
418
+ const value = 'test;test1;test2';
419
+ const result = ['test', 'test1', 'test2'];
420
+
421
+ // activate create mode
422
+ await wrapper.setData({ isCreateItem: true });
423
+ const inputField = wrapper.find('[data-testid="item-create"]');
424
+
425
+ await inputField.setValue(value);
426
+
427
+ // press enter
428
+ await inputField.trigger('keydown.enter');
429
+ await wrapper.vm.$nextTick();
430
+
431
+ const itemsResult = (wrapper.emitted('change') || [])[0][0];
432
+
433
+ expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
434
+ });
435
+
436
+ it('should show warning if one of the values is a duplicate', async() => {
437
+ const value = 'test;test1;test2';
438
+
439
+ await wrapper.setProps({ items: ['test1'] });
440
+
441
+ // activate create mode
442
+ await wrapper.setData({ isCreateItem: true });
443
+ const inputField = wrapper.find('[data-testid="item-create"]');
444
+
445
+ await inputField.setValue(value);
446
+
447
+ // press enter
448
+ await inputField.trigger('keydown.enter');
449
+ await wrapper.vm.$nextTick();
450
+
451
+ const isDuplicate = (wrapper.emitted('errors') || [])[0][0].duplicate;
452
+
453
+ expect(isDuplicate).toBe(true);
454
+ });
455
+
456
+ it('should show a warning if the new values are all duplicates', async() => {
457
+ const value = 'test;test';
458
+
459
+ // activate create mode
460
+ await wrapper.setData({ isCreateItem: true });
461
+ const inputField = wrapper.find('[data-testid="item-create"]');
462
+
463
+ await inputField.setValue(value);
464
+
465
+ // press enter
466
+ await inputField.trigger('keydown.enter');
467
+ await wrapper.vm.$nextTick();
468
+
469
+ const isDuplicate = (wrapper.emitted('errors') || [])[0][0].duplicate;
470
+
471
+ expect(isDuplicate).toBe(true);
472
+ });
473
+
474
+ it('should not consider empty strings at the beginning', async() => {
475
+ const value = ';test;test1;test2';
476
+ const result = ['test', 'test1', 'test2'];
477
+
478
+ // activate create mode
479
+ await wrapper.setData({ isCreateItem: true });
480
+ const inputField = wrapper.find('[data-testid="item-create"]');
481
+
482
+ await inputField.setValue(value);
483
+
484
+ // press enter
485
+ await inputField.trigger('keydown.enter');
486
+ await wrapper.vm.$nextTick();
487
+
488
+ const itemsResult = (wrapper.emitted('change') || [])[0][0];
489
+
490
+ expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
491
+ });
492
+
493
+ it('should not consider empty strings in the middle', async() => {
494
+ const value = 'test;test1;;test2';
495
+ const result = ['test', 'test1', 'test2'];
496
+
497
+ // activate create mode
498
+ await wrapper.setData({ isCreateItem: true });
499
+ const inputField = wrapper.find('[data-testid="item-create"]');
500
+
501
+ await inputField.setValue(value);
502
+
503
+ // press enter
504
+ await inputField.trigger('keydown.enter');
505
+ await wrapper.vm.$nextTick();
506
+
507
+ const itemsResult = (wrapper.emitted('change') || [])[0][0];
508
+
509
+ expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
510
+ });
511
+
512
+ it('should not consider empty strings at the end', async() => {
513
+ const value = 'test;test1;test2;';
514
+ const result = ['test', 'test1', 'test2'];
515
+
516
+ // activate create mode
517
+ await wrapper.setData({ isCreateItem: true });
518
+ const inputField = wrapper.find('[data-testid="item-create"]');
519
+
520
+ await inputField.setValue(value);
521
+
522
+ // press enter
523
+ await inputField.trigger('keydown.enter');
524
+ await wrapper.vm.$nextTick();
525
+
526
+ const itemsResult = (wrapper.emitted('change') || [])[0][0];
527
+
528
+ expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
529
+ });
530
+ });
531
+
532
+ describe('edit', () => {
533
+ const items = ['test1', 'test2'];
534
+
535
+ beforeEach(() => {
536
+ wrapper = mount(StringList, {
537
+ propsData: {
538
+ items,
539
+ bulkAdditionDelimiter: delimiter,
540
+ errorMessages: { duplicate: 'error, item is duplicate.' },
541
+ }
542
+ });
543
+ });
544
+
545
+ it('should split values if delimiter set', async() => {
546
+ const newValue = 'test1;new;values';
547
+ const result = ['test1', 'new', 'values', 'test2'];
548
+
549
+ await wrapper.setData({ editedItem: items[0] });
550
+ const inputField = wrapper.find('[data-testid^="item-edit"]');
551
+
552
+ await inputField.setValue(newValue);
553
+
554
+ // press enter
555
+ await inputField.trigger('keydown.enter');
556
+ await wrapper.vm.$nextTick();
557
+
558
+ const itemsResult = (wrapper.emitted('change') || [])[0][0];
559
+
560
+ expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
561
+ });
562
+
563
+ it('should show warning if one of the values is a duplicate', async() => {
564
+ const newValue = 'test1;test2';
565
+
566
+ await wrapper.setData({ editedItem: items[0] });
567
+ const inputField = wrapper.find('[data-testid^="item-edit"]');
568
+
569
+ await inputField.setValue(newValue);
570
+
571
+ // press enter
572
+ await inputField.trigger('keydown.enter');
573
+ await wrapper.vm.$nextTick();
574
+
575
+ const isDuplicate = (wrapper.emitted('errors') || [])[0][0].duplicate;
576
+
577
+ expect(isDuplicate).toBe(true);
578
+ });
579
+
580
+ it('should show a warning if the new values are all duplicates', async() => {
581
+ const newValue = 'test;test';
582
+
583
+ await wrapper.setData({ editedItem: items[0] });
584
+ const inputField = wrapper.find('[data-testid^="item-edit"]');
585
+
586
+ await inputField.setValue(newValue);
587
+
588
+ // press enter
589
+ await inputField.trigger('keydown.enter');
590
+ await wrapper.vm.$nextTick();
591
+
592
+ const isDuplicate = (wrapper.emitted('errors') || [])[0][0].duplicate;
593
+
594
+ expect(isDuplicate).toBe(true);
595
+ });
596
+
597
+ it('should not consider empty strings at the beginning', async() => {
598
+ const newValue = ';test1;new;value';
599
+ const result = ['test1', 'new', 'value', 'test2'];
600
+
601
+ await wrapper.setData({ editedItem: items[0] });
602
+ const inputField = wrapper.find('[data-testid^="item-edit"]');
603
+
604
+ await inputField.setValue(newValue);
605
+
606
+ // press enter
607
+ await inputField.trigger('keydown.enter');
608
+ await wrapper.vm.$nextTick();
609
+
610
+ const itemsResult = (wrapper.emitted('change') || [])[0][0];
611
+
612
+ expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
613
+ });
614
+
615
+ it('should not consider empty strings in the middle 1', async() => {
616
+ const newValue = 'test1; ;new;value';
617
+ const result = ['test1', 'new', 'value', 'test2'];
618
+
619
+ await wrapper.setData({ editedItem: items[0] });
620
+ const inputField = wrapper.find('[data-testid^="item-edit"]');
621
+
622
+ await inputField.setValue(newValue);
623
+
624
+ // press enter
625
+ await inputField.trigger('keydown.enter');
626
+ await wrapper.vm.$nextTick();
627
+
628
+ const itemsResult = (wrapper.emitted('change') || [])[0][0];
629
+
630
+ expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
631
+ });
632
+
633
+ it('should not consider empty strings in the middle 2', async() => {
634
+ const newValue = 'test1;;new;value';
635
+ const result = ['test1', 'new', 'value', 'test2'];
636
+
637
+ await wrapper.setData({ editedItem: items[0] });
638
+ const inputField = wrapper.find('[data-testid^="item-edit"]');
639
+
640
+ await inputField.setValue(newValue);
641
+
642
+ // press enter
643
+ await inputField.trigger('keydown.enter');
644
+ await wrapper.vm.$nextTick();
645
+
646
+ const itemsResult = (wrapper.emitted('change') || [])[0][0];
647
+
648
+ expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
649
+ });
650
+
651
+ it('should not consider empty strings at the end', async() => {
652
+ const newValue = 'test1;new;value;';
653
+ const result = ['test1', 'new', 'value', 'test2'];
654
+
655
+ await wrapper.setData({ editedItem: items[0] });
656
+ const inputField = wrapper.find('[data-testid^="item-edit"]');
657
+
658
+ await inputField.setValue(newValue);
659
+
660
+ // press enter
661
+ await inputField.trigger('keydown.enter');
662
+ await wrapper.vm.$nextTick();
663
+
664
+ const itemsResult = (wrapper.emitted('change') || [])[0][0];
665
+
666
+ expect(JSON.stringify(itemsResult)).toBe(JSON.stringify(result));
667
+ });
668
+ });
669
+ });
670
+
401
671
  describe('errors handling', () => {
402
672
  it('show duplicate warning icon when errorMessages is defined', async() => {
403
673
  const items = ['test'];
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import Vue, { PropType } from 'vue';
2
+ import Vue, { PropType, defineComponent } from 'vue';
3
3
 
4
4
  import LabeledInput from '@components/Form/LabeledInput/LabeledInput.vue';
5
5
  import { findStringIndex, hasDuplicatedStrings } from '@shell/utils/array';
@@ -29,7 +29,7 @@ const CLASS = {
29
29
  /**
30
30
  * Manage a list of strings
31
31
  */
32
- export default Vue.extend({
32
+ export default defineComponent({
33
33
 
34
34
  name: 'StringList',
35
35
  components: { LabeledInput },
@@ -82,12 +82,19 @@ export default Vue.extend({
82
82
  return {} as ErrorMessages;
83
83
  },
84
84
  },
85
+ /**
86
+ * Enables bulk addition and defines the delimiter to split the input string.
87
+ */
88
+ bulkAdditionDelimiter: {
89
+ type: RegExp,
90
+ default: null,
91
+ }
85
92
  },
86
93
  data() {
87
94
  return {
88
- value: null as string | null,
95
+ value: undefined as string | undefined,
89
96
  selected: null as string | null,
90
- editedItem: null as string | null,
97
+ editedItem: undefined as string | undefined,
91
98
  isCreateItem: false,
92
99
  errors: { duplicate: false } as Record<Error, boolean>
93
100
  };
@@ -125,13 +132,9 @@ export default Vue.extend({
125
132
  },
126
133
 
127
134
  methods: {
128
- onChange(value: string) {
135
+ onChange(value: string, index?: number) {
129
136
  this.value = value;
130
-
131
- const items = [
132
- ...this.items,
133
- this.value
134
- ];
137
+ const items = this.addValueToItems(this.items, value, index);
135
138
 
136
139
  this.toggleError(
137
140
  'duplicate',
@@ -278,7 +281,7 @@ export default Vue.extend({
278
281
  this.isCreateItem = true;
279
282
  this.setFocus(INPUT.create);
280
283
  } else {
281
- this.value = null;
284
+ this.value = undefined;
282
285
  this.toggleError('duplicate', false);
283
286
  this.onSelectLeave();
284
287
 
@@ -300,11 +303,11 @@ export default Vue.extend({
300
303
  this.editedItem = item || '';
301
304
  this.setFocus(INPUT.edit);
302
305
  } else {
303
- this.value = null;
306
+ this.value = undefined;
304
307
  this.toggleError('duplicate', false);
305
308
  this.onSelectLeave();
306
309
 
307
- this.editedItem = null;
310
+ this.editedItem = undefined;
308
311
  }
309
312
  },
310
313
 
@@ -321,10 +324,7 @@ export default Vue.extend({
321
324
  const value = this.value?.trim();
322
325
 
323
326
  if (value) {
324
- const items = [
325
- ...this.items,
326
- value,
327
- ];
327
+ const items = this.addValueToItems(this.items, value);
328
328
 
329
329
  if (!hasDuplicatedStrings(items, this.caseSensitive)) {
330
330
  this.updateItems(items);
@@ -343,12 +343,8 @@ export default Vue.extend({
343
343
  const value = this.value?.trim();
344
344
 
345
345
  if (value) {
346
- const items = [...this.items];
347
- const index = findStringIndex(items, item, false);
348
-
349
- if (index !== -1) {
350
- items[index] = value;
351
- }
346
+ const index = findStringIndex(this.items, item, false);
347
+ const items = index !== -1 ? this.addValueToItems(this.items, value, index) : this.items;
352
348
 
353
349
  if (!hasDuplicatedStrings(items, this.caseSensitive)) {
354
350
  this.updateItems(items);
@@ -360,6 +356,49 @@ export default Vue.extend({
360
356
  }
361
357
  },
362
358
 
359
+ /**
360
+ * Add a new or update an exiting item in the items list.
361
+ *
362
+ * @param items The current items list.
363
+ * @param value The new value to be added.
364
+ * @param index The list index of the item to be updated (optional).
365
+ * @returns Updated items list.
366
+ */
367
+ addValueToItems(items: string[], value: string, index?: number): string[] {
368
+ const updatedItems = [...items];
369
+
370
+ // Add new item
371
+ if (index === undefined) {
372
+ if (this.bulkAdditionDelimiter && value.search(this.bulkAdditionDelimiter) >= 0) {
373
+ updatedItems.push(...this.splitBulkValue(value));
374
+ } else {
375
+ updatedItems.push(value);
376
+ }
377
+ } else { // Update existing item
378
+ if (this.bulkAdditionDelimiter && value.search(this.bulkAdditionDelimiter) >= 0) {
379
+ updatedItems.splice(index, 1, ...this.splitBulkValue(value));
380
+ } else {
381
+ updatedItems[index] = value;
382
+ }
383
+ }
384
+
385
+ return updatedItems;
386
+ },
387
+
388
+ /**
389
+ * Split the value by the defined delimiter and remove empty strings.
390
+ *
391
+ * @param value The value to be split.
392
+ * @returns Array containing split values.
393
+ */
394
+ splitBulkValue(value: string): string[] {
395
+ return value
396
+ .split(this.bulkAdditionDelimiter)
397
+ .filter((item) => {
398
+ return item.trim().length > 0;
399
+ });
400
+ },
401
+
363
402
  /**
364
403
  * Remove an item from items list
365
404
  */
@@ -393,7 +432,7 @@ export default Vue.extend({
393
432
  @dblclick="onClickEmptyBody()"
394
433
  >
395
434
  <div
396
- v-for="item in items"
435
+ v-for="(item, index) in items"
397
436
  :key="item"
398
437
  :ref="item"
399
438
  :class="{
@@ -421,7 +460,7 @@ export default Vue.extend({
421
460
  :data-testid="`item-edit-${item}`"
422
461
  class="edit-input static"
423
462
  :value="value != null ? value : item"
424
- @input="onChange($event)"
463
+ @input="onChange($event, index)"
425
464
  @blur.prevent="updateItem(item)"
426
465
  @keydown.native.enter="updateItem(item, !errors.duplicate)"
427
466
  />
@@ -463,7 +502,7 @@ export default Vue.extend({
463
502
  <button
464
503
  data-testid="button-add"
465
504
  class="btn btn-sm role-tertiary add-button"
466
- :disabled="isCreateItem || editedItem"
505
+ :disabled="!!isCreateItem || !!editedItem"
467
506
  @click.prevent="onClickPlusButton"
468
507
  >
469
508
  <span class="icon icon-plus icon-sm" />
@@ -0,0 +1,69 @@
1
+ variables:
2
+ NODE_VERSION: "v16.20.2"
3
+ NODE_DISTRO: "node-${NODE_VERSION}-linux-x64"
4
+ YQ_VERSION: "v4.44.1"
5
+ YQ_URL: "https://github.com/mikefarah/yq/releases/download/${YQ_VERSION}/yq_linux_amd64"
6
+
7
+ .podman-setup: &podman-setup
8
+ # Install podman and jq
9
+ - zypper --non-interactive install jq podman
10
+ - usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $(id -nu)
11
+ - podman login -u $REGISTRY_USER -p $REGISTRY_PASSWORD $REGISTRY
12
+
13
+ .node-setup: &node-setup
14
+ # Download, verify, and install Node.js, npm, and yarn
15
+ - curl -O https://nodejs.org/download/release/${NODE_VERSION}/${NODE_DISTRO}.tar.gz
16
+ - curl -O https://nodejs.org/download/release/${NODE_VERSION}/SHASUMS256.txt
17
+ - grep "${NODE_DISTRO}.tar.gz" SHASUMS256.txt | sha256sum -c -
18
+ - tar -xzf ${NODE_DISTRO}.tar.gz
19
+ - mv ${NODE_DISTRO} /usr/local/node
20
+ - ln -s /usr/local/node/bin/node /usr/local/bin/node
21
+ - ln -s /usr/local/node/bin/npm /usr/local/bin/npm
22
+ - npm install -g --unsafe-perm yarn
23
+ - export PATH="/usr/local/node/bin:/root/.npm-global/bin:$PATH"
24
+
25
+ check_version_collisions:
26
+ stage: check_version
27
+ rules:
28
+ - changes:
29
+ - package.json
30
+ script:
31
+ - *podman-setup
32
+ - |
33
+ PACKAGE_VERSION=`jq -r .version package.json`
34
+ PACKAGE_NAME=`jq -r .name package.json`
35
+
36
+ readarray -t VERSIONS < <(podman search $REGISTRY/$IMAGE_NAMESPACE/ui-extension-$PACKAGE_NAME --list-tags --format {{.Tag}})
37
+
38
+ echo -e "Checking for version collisions with Extension version: ${PACKAGE_VERSION}"
39
+ for version in ${VERSIONS[@]}; do
40
+ if [[ ${version} == ${PACKAGE_VERSION} ]]; then
41
+ echo "Cannot overwrite production image version ${version} since it already exists."
42
+ podman logout $REGISTRY
43
+ exit 1
44
+ fi
45
+ done
46
+
47
+ echo -e "Published image not found for version ${PACKAGE_VERSION}, continuing build..."
48
+
49
+ build_and_release:
50
+ stage: build_catalog
51
+ rules:
52
+ - changes:
53
+ - package.json
54
+ script:
55
+ - *podman-setup
56
+ - *node-setup
57
+ - zypper --non-interactive --no-gpg-checks refresh
58
+ - zypper --non-interactive install go git helm
59
+
60
+ # Download and install yq
61
+ - curl -sLf ${YQ_URL} -o /usr/bin/yq && chmod +x /usr/bin/yq
62
+
63
+ # Install dependencies and build extension catalog
64
+ - yarn
65
+ - yarn publish-pkgs -cl -r $REGISTRY -o $IMAGE_NAMESPACE
66
+
67
+ # Push all images except the base image
68
+ - podman push `podman images -f reference!=registry.suse.com/bci/bci-base --format "{{index .Names 0}}"`
69
+ - podman logout $REGISTRY
package/scripts/clean CHANGED
@@ -3,4 +3,4 @@ set -e
3
3
 
4
4
  cd $(dirname $0)/..
5
5
 
6
- rm -rf dist .nuxt* node_modules/.cache
6
+ rm -rf dist node_modules/.cache
@@ -16,6 +16,7 @@ REGISTRY="${3}"
16
16
  REGISTRY_ORG="${4}"
17
17
  IMAGE_PREFIX="${5}"
18
18
  PUSH="${6}"
19
+ PODMAN_CONTAINER="${7}"
19
20
 
20
21
  PKG_NAME="${PKG}-${PKG_VERSION}"
21
22
 
@@ -48,12 +49,15 @@ for d in ${BASE_DIR}/dist-pkg/*; do
48
49
  cp -R ${BASE_DIR}/dist-pkg/${pkg} ${TMP}/container/plugin
49
50
  done
50
51
 
51
- # Build the docker image
52
- pushd ${TMP}/container > /dev/null
53
- echo -e "${CYAN}Building container image ...${RESET}"
52
+ package() {
53
+ if [ "${PODMAN_CONTAINER}" == "true" ]; then
54
+ RUNTIME="podman"
55
+ else
56
+ RUNTIME="docker"
57
+ fi
58
+ echo -e "Container build: ${RUNTIME}"
54
59
 
55
- if [ ! -z "${REGISTRY}" ]; then
56
- REGISTRY=${REGISTRY} ORG=${REGISTRY_ORG} REPO=${IMAGE_PREFIX}${PKG} TAG=${PKG_VERSION} ./scripts/package
60
+ REGISTRY=${REGISTRY} ORG=${REGISTRY_ORG} REPO=${IMAGE_PREFIX}${PKG} TAG=${PKG_VERSION} RUNTIME=${RUNTIME} ./scripts/package
57
61
 
58
62
  if [ "${PUSH}" == "--push" ]; then
59
63
  echo -e "${CYAN}Pushing container image ...${RESET}"
@@ -61,14 +65,22 @@ if [ ! -z "${REGISTRY}" ]; then
61
65
  # Ensure that you do not overwrite production images
62
66
  if [[ "${REGISTRY_ORG}" == "rancher" ]]; then
63
67
  IMAGE=${REGISTRY}${REGISTRY_ORG}/${IMAGE_PREFIX}${PKG}:${PKG_VERSION}
64
- if docker manifest inspect 2>&1 1>/dev/null; then
68
+ if ${RUNTIME} manifest inspect ${IMAGE} 2>&1 1>/dev/null; then
65
69
  echo -e "${RED}${BOLD}Cannot overwrite production image ${IMAGE_PREFIX}${PKG} since it already exists${RESET}"
66
70
  exit 1
67
71
  fi
68
72
  fi
69
73
 
70
- docker push ${REGISTRY}${REGISTRY_ORG}/${IMAGE_PREFIX}${PKG}:${PKG_VERSION}
74
+ ${RUNTIME} push ${REGISTRY}${REGISTRY_ORG}/${IMAGE_PREFIX}${PKG}:${PKG_VERSION}
71
75
  fi
76
+ }
77
+
78
+ # Build the container image
79
+ pushd ${TMP}/container > /dev/null
80
+ echo -e "${CYAN}Building container image ...${RESET}"
81
+
82
+ if [ ! -z "${REGISTRY}" ]; then
83
+ package
72
84
  fi
73
85
 
74
86
  popd > /dev/null
@@ -50,3 +50,14 @@ Selector labels
50
50
  app.kubernetes.io/name: {{ include "extension-server.name" . }}
51
51
  app.kubernetes.io/instance: {{ .Release.Name }}
52
52
  {{- end }}
53
+
54
+ {{/*
55
+ Pkg annotations
56
+ */}}
57
+ {{- define "extension-server.pluginMetadata" -}}
58
+ {{- with .Values.plugin.metadata }}
59
+ {{- range $key, $value := . }}
60
+ {{ $key }}: {{ $value | quote }}
61
+ {{- end }}
62
+ {{- end }}
63
+ {{- end }}
@@ -10,3 +10,5 @@ spec:
10
10
  version: {{ (semver (default .Chart.AppVersion .Values.plugin.versionOverride)).Original }}
11
11
  endpoint: http://{{ include "extension-server.fullname" . }}.{{ .Release.Namespace }}.svc
12
12
  noCache: {{ .Values.plugin.noCache }}
13
+ noAuth: {{ .Values.plugin.noAuth }}
14
+ metadata: {{ include "extension-server.pluginMetadata" . | indent 6 }}
@@ -4,3 +4,5 @@ plugin:
4
4
  enabled: true
5
5
  versionOverride: ""
6
6
  noCache: false
7
+ noAuth: false
8
+ metadata: {}
@@ -1,4 +1,4 @@
1
- FROM registry.suse.com/bci/bci-base:15.4
1
+ FROM registry.suse.com/bci/bci-base:15.5
2
2
 
3
3
  RUN zypper -n install nginx jq
4
4
 
@@ -5,8 +5,8 @@ source $(dirname $0)/version
5
5
 
6
6
  cd $(dirname $0)/..
7
7
 
8
- if [[ -z ${ORG} ]] || [[ -z ${REPO} ]] || [[ -z ${TAG} ]]; then
9
- echo "Usage: [REGISTRY=] ORG= REPO= TAG= ./scripts/package"
8
+ if [[ -z ${ORG} ]] || [[ -z ${REPO} ]] || [[ -z ${TAG} ]] || [[ -z ${RUNTIME} ]]; then
9
+ echo "Usage: [REGISTRY=] ORG= REPO= TAG= RUNTIME= ./scripts/package"
10
10
  exit 1
11
11
  fi
12
12
 
@@ -19,5 +19,13 @@ if [ -e ${DOCKERFILE}.${ARCH} ]; then
19
19
  DOCKERFILE=${DOCKERFILE}.${ARCH}
20
20
  fi
21
21
 
22
- docker build -f ${DOCKERFILE} -t ${IMAGE} .
22
+ BUILD="${RUNTIME} build -f ${DOCKERFILE} -t ${IMAGE}"
23
+
24
+ if [[ ${RUNTIME} == "podman" ]]; then
25
+ BUILD="$BUILD -v /var/lib/containers:/var/lib/containers ."
26
+ else
27
+ BUILD="$BUILD ."
28
+ fi
29
+
30
+ $BUILD
23
31
  echo Built ${IMAGE}
@@ -57,6 +57,18 @@ DESCRIPTION=$(cat ${PACKAGE_JSON} | jq ".description" | tr -d '"')
57
57
  ICON=$(cat ${PACKAGE_JSON} | jq ".icon" | tr -d '"')
58
58
  KEYWORDS=$(cat ${PACKAGE_JSON} | jq ".keywords")
59
59
  HOME=$(cat ${PACKAGE_JSON} | jq ".homepage" | tr -d '"')
60
+ ANNOTATIONS=""
61
+ NO_AUTH="false"
62
+
63
+ if jq -e '.rancher.annotations | objects' ${PACKAGE_JSON} > /dev/null 2>&1; then
64
+ ANNOTATIONS=$(jq -r '.rancher.annotations | to_entries[] | @base64' < ${PACKAGE_JSON})
65
+ fi
66
+
67
+ # Check if the package file specifies noAuth
68
+ if jq -e '.rancher.noAuth' ${PACKAGE_JSON} > /dev/null 2>&1; then
69
+ NO_AUTH=$(jq -r '.rancher.noAuth' < ${PACKAGE_JSON})
70
+ echo "noAuth: ${NO_AUTH}"
71
+ fi
60
72
 
61
73
  if [[ -z ${ORG} ]] || [[ -z ${REPO} ]] || [[ -z ${TAG} ]]; then
62
74
  echo "Usage: [CHART=charts/ui-plugin-server] [REGISTRY=""] [ORG=rancher] [REPO=<override-repo>] [TAG=<override-tag>] [PACKAGE_JSON=plugin/package.json] ./scripts/patch <chart>"
@@ -99,3 +111,18 @@ if [[ -n "${HOME}" ]]; then
99
111
  yq -i eval ".home = \"${HOME}\"" $CHART/Chart.yaml
100
112
  fi
101
113
  fi
114
+
115
+ if [[ -n "${ANNOTATIONS}" ]]; then
116
+ for ANNOTATION in ${ANNOTATIONS}; do
117
+ decoded_annotation=$(echo ${ANNOTATION} | base64 --decode)
118
+ key=$(echo ${decoded_annotation} | jq -r '.key')
119
+ value=$(echo ${decoded_annotation} | jq -r '.value')
120
+
121
+ yq -i eval ".plugin.metadata[\"${key}\"] = \"${value}\"" $CHART/values.yaml
122
+ done
123
+ fi
124
+
125
+ # If the extension has noAuth as true then patch this into the values.yaml to override the default of false
126
+ if [ "${NO_AUTH}" == "true" ]; then
127
+ yq -i eval ".plugin.noAuth=true" $CHART/values.yaml
128
+ fi