@rancher/shell 0.3.29 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/assets/images/providers/ovhcloudmks.svg +122 -0
  2. package/assets/images/providers/ovhcloudpubliccloud.svg +122 -0
  3. package/assets/styles/global/_layout.scss +99 -0
  4. package/assets/translations/en-us.yaml +31 -6
  5. package/assets/translations/zh-hans.yaml +2 -2
  6. package/babel.config.js +7 -1
  7. package/chart/monitoring/alerting/index.vue +7 -21
  8. package/chart/monitoring/grafana/index.vue +55 -0
  9. package/chart/monitoring/index.vue +51 -17
  10. package/chart/monitoring/prometheus/index.vue +37 -43
  11. package/chart/rancher-backup/index.vue +2 -1
  12. package/cloud-credential/azure.vue +4 -17
  13. package/components/AsyncButton.vue +17 -5
  14. package/components/Certificates.vue +164 -0
  15. package/components/CodeMirror.vue +19 -21
  16. package/components/CopyCode.vue +6 -2
  17. package/components/CopyToClipboard.vue +2 -1
  18. package/components/CopyToClipboardText.vue +14 -9
  19. package/components/CruResource.vue +1 -0
  20. package/components/DraggableZone.vue +2 -2
  21. package/components/EtcdInfoBanner.vue +5 -5
  22. package/components/ExplorerProjectsNamespaces.vue +25 -1
  23. package/components/IconOrSvg.vue +1 -1
  24. package/components/LandingPagePreference.vue +1 -4
  25. package/components/Markdown.vue +16 -12
  26. package/components/PodSecurityAdmission.vue +2 -2
  27. package/components/Questions/index.vue +1 -1
  28. package/components/ResourceDetail/Masthead.vue +25 -9
  29. package/components/ResourceTable.vue +14 -2
  30. package/components/ResourceYaml.vue +5 -0
  31. package/components/SideNav.vue +1 -1
  32. package/components/SingleClusterInfo.vue +1 -4
  33. package/components/StatusTable.vue +5 -1
  34. package/components/Tabbed/index.vue +12 -0
  35. package/components/__tests__/CopyCode.test.ts +5 -4
  36. package/components/fleet/FleetBundles.vue +5 -11
  37. package/components/fleet/FleetRepos.vue +62 -27
  38. package/components/fleet/FleetResources.vue +6 -1
  39. package/components/fleet/FleetSummary.vue +3 -3
  40. package/components/fleet/__tests__/FleetSummary.test.ts +316 -0
  41. package/components/form/ArrayListSelect.vue +10 -0
  42. package/components/form/Error.vue +3 -3
  43. package/components/form/Footer.vue +2 -2
  44. package/components/form/GitPicker.vue +83 -38
  45. package/components/form/KeyValue.vue +4 -0
  46. package/components/form/LabeledSelect.vue +4 -0
  47. package/components/form/Password.vue +3 -1
  48. package/components/formatter/Checked.vue +11 -3
  49. package/components/formatter/FleetClusterSummaryGraph.vue +27 -0
  50. package/components/formatter/FleetSummaryGraph.vue +23 -11
  51. package/components/formatter/LiveDuration.vue +1 -1
  52. package/components/formatter/PercentageBar.vue +1 -1
  53. package/components/formatter/__tests__/Checked.test.ts +19 -0
  54. package/components/nav/Group.vue +2 -2
  55. package/components/nav/Header.vue +1 -2
  56. package/components/nav/TopLevelMenu.vue +36 -6
  57. package/components/nav/Type.vue +1 -3
  58. package/components/nav/WindowManager/ContainerLogs.vue +101 -3
  59. package/components/nav/WindowManager/ContainerShell.vue +6 -1
  60. package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +186 -0
  61. package/components/nav/WindowManager/index.vue +11 -10
  62. package/components/nav/__tests__/TopLevelMenu.test.ts +33 -0
  63. package/components/nav/__tests__/Type.test.ts +1 -1
  64. package/components/nuxt/nuxt-child.js +14 -78
  65. package/components/nuxt/nuxt.js +1 -1
  66. package/{layouts → components/templates}/blank.vue +1 -1
  67. package/{layouts → components/templates}/default.vue +8 -98
  68. package/{layouts → components/templates}/error.vue +10 -19
  69. package/{layouts → components/templates}/home.vue +4 -1
  70. package/{layouts → components/templates}/plain.vue +4 -1
  71. package/{layouts → components/templates}/standalone.vue +1 -1
  72. package/{layouts → components/templates}/unauthenticated.vue +1 -1
  73. package/composables/useCompactInput.test.ts +36 -0
  74. package/composables/useCompactInput.ts +20 -0
  75. package/composables/useLabeledFormElement.test.ts +135 -0
  76. package/composables/useLabeledFormElement.ts +138 -0
  77. package/config/harvester-manager-types.js +2 -0
  78. package/config/home-links.js +1 -1
  79. package/config/private-label.js +22 -0
  80. package/config/product/explorer.js +3 -0
  81. package/config/product/fleet.js +6 -1
  82. package/config/product/manager.js +8 -2
  83. package/config/query-params.js +1 -0
  84. package/config/router.js +385 -364
  85. package/config/settings.ts +1 -0
  86. package/config/store.js +1 -1
  87. package/config/system-namespaces.js +3 -0
  88. package/config/table-headers.js +47 -0
  89. package/core/plugin-helpers.js +3 -5
  90. package/core/plugin-routes.ts +56 -114
  91. package/core/plugin.ts +16 -10
  92. package/core/plugins-loader.js +7 -9
  93. package/core/plugins.js +0 -3
  94. package/creators/app/files/.gitlab-ci.yml +14 -0
  95. package/creators/app/init +19 -0
  96. package/detail/fleet.cattle.io.cluster.vue +11 -1
  97. package/detail/provisioning.cattle.io.cluster.vue +4 -3
  98. package/dialog/ScaleMachineDownDialog.vue +34 -17
  99. package/edit/__tests__/service.test.ts +89 -0
  100. package/edit/auth/googleoauth.vue +1 -5
  101. package/edit/cloudcredential.vue +2 -0
  102. package/edit/configmap.vue +2 -1
  103. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +2 -2
  104. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +12 -3
  105. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +2 -1
  106. package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.spec.ts +1 -1
  107. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +15 -7
  108. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +112 -0
  109. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +473 -0
  110. package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.tests.ts → CustomCommand.test.ts} +6 -0
  111. package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
  112. package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +73 -0
  113. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +7 -1
  114. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +386 -0
  115. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  116. package/edit/provisioning.cattle.io.cluster/index.vue +92 -36
  117. package/edit/provisioning.cattle.io.cluster/rke2.vue +171 -583
  118. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +137 -0
  119. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +157 -0
  120. package/edit/provisioning.cattle.io.cluster/{Basics.vue → tabs/Basics.vue} +94 -19
  121. package/edit/provisioning.cattle.io.cluster/{MachinePool.vue → tabs/MachinePool.vue} +1 -0
  122. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +135 -0
  123. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +189 -0
  124. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +144 -0
  125. package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +76 -0
  126. package/edit/service.vue +12 -0
  127. package/edit/workload/Upgrading.vue +3 -2
  128. package/edit/workload/mixins/workload.js +1 -1
  129. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +2 -1
  130. package/initialize/App.js +25 -71
  131. package/initialize/client.js +21 -162
  132. package/initialize/index.js +47 -124
  133. package/list/management.cattle.io.feature.vue +1 -7
  134. package/list/node.vue +1 -0
  135. package/machine-config/__tests__/vmwarevsphere.test.ts +100 -21
  136. package/machine-config/vmwarevsphere.vue +73 -51
  137. package/middleware/authenticated.js +10 -17
  138. package/mixins/auth-config.js +2 -7
  139. package/mixins/brand.js +29 -41
  140. package/mixins/create-edit-view/index.js +2 -2
  141. package/mixins/labeled-form-element.ts +6 -1
  142. package/models/__tests__/management.cattle.io.cluster.test.ts +4 -0
  143. package/models/__tests__/management.cattle.io.node.ts +85 -0
  144. package/models/__tests__/management.cattle.io.nodepool.ts +83 -0
  145. package/models/__tests__/namespace.test.ts +49 -9
  146. package/models/__tests__/workload.test.ts +91 -0
  147. package/models/cluster/node.js +4 -4
  148. package/models/cluster.x-k8s.io.machinedeployment.js +14 -0
  149. package/models/fleet.cattle.io.cluster.js +4 -0
  150. package/models/fleet.cattle.io.gitrepo.js +56 -13
  151. package/models/management.cattle.io.cluster.js +7 -3
  152. package/models/management.cattle.io.kontainerdriver.js +1 -1
  153. package/models/management.cattle.io.node.js +18 -14
  154. package/models/management.cattle.io.nodepool.js +17 -0
  155. package/models/namespace.js +1 -1
  156. package/models/pod.js +20 -0
  157. package/models/provisioning.cattle.io.cluster.js +39 -4
  158. package/models/secret.js +117 -18
  159. package/models/workload.js +16 -0
  160. package/models/workload.service.js +18 -0
  161. package/package.json +11 -10
  162. package/pages/about.vue +0 -1
  163. package/pages/account/create-key.vue +0 -1
  164. package/pages/account/index.vue +0 -1
  165. package/pages/auth/login.vue +0 -1
  166. package/pages/auth/logout.vue +0 -2
  167. package/pages/auth/setup.vue +0 -4
  168. package/pages/auth/verify.vue +14 -8
  169. package/pages/c/_cluster/apps/charts/index.vue +64 -43
  170. package/pages/c/_cluster/apps/charts/install.vue +4 -4
  171. package/pages/c/_cluster/apps/index.vue +0 -2
  172. package/pages/c/_cluster/auth/index.vue +0 -2
  173. package/pages/c/_cluster/ecm/index.vue +0 -2
  174. package/pages/c/_cluster/explorer/index.vue +28 -2
  175. package/pages/c/_cluster/fleet/index.vue +1 -1
  176. package/pages/c/_cluster/index.vue +0 -2
  177. package/pages/c/_cluster/settings/banners.vue +0 -2
  178. package/pages/c/_cluster/settings/brand.vue +0 -2
  179. package/pages/c/_cluster/settings/index.vue +0 -2
  180. package/pages/c/_cluster/settings/links.vue +0 -1
  181. package/pages/c/_cluster/settings/performance.vue +0 -1
  182. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +2 -1
  183. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +10 -46
  184. package/pages/c/_cluster/uiplugins/index.vue +0 -2
  185. package/pages/diagnostic.vue +1 -2
  186. package/pages/fail-whale.vue +0 -1
  187. package/pages/prefs.vue +0 -1
  188. package/pages/support/index.vue +2 -8
  189. package/pkg/auto-import.js +1 -1
  190. package/plugins/axios.js +0 -36
  191. package/plugins/back-button.js +3 -5
  192. package/plugins/clean-html-directive.js +1 -19
  193. package/plugins/clean-html.js +53 -0
  194. package/plugins/clean-tooltip-directive.js +1 -1
  195. package/plugins/codemirror-loader.js +1 -1
  196. package/plugins/codemirror.js +41 -0
  197. package/plugins/dashboard-store/__tests__/{mutations.spec.ts → mutations.test.ts} +1 -1
  198. package/plugins/dashboard-store/__tests__/resource-class.test.ts +49 -0
  199. package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +7 -0
  200. package/plugins/dashboard-store/actions.js +30 -4
  201. package/plugins/dashboard-store/classify.js +1 -18
  202. package/plugins/dashboard-store/getters.js +10 -5
  203. package/plugins/dashboard-store/index.js +0 -12
  204. package/plugins/dashboard-store/mutations.js +0 -4
  205. package/plugins/dashboard-store/resource-class.js +59 -18
  206. package/plugins/index.js +11 -0
  207. package/plugins/steve/__tests__/steve-class.spec.ts +59 -0
  208. package/plugins/steve/__tests__/utils/steve-mocks.ts +31 -0
  209. package/plugins/steve/getters.js +4 -1
  210. package/plugins/steve/norman-class.js +19 -0
  211. package/plugins/steve/steve-class.js +22 -0
  212. package/plugins/steve/subscribe.js +4 -10
  213. package/rancher-components/Accordion/Accordion.test.ts +45 -0
  214. package/rancher-components/Accordion/Accordion.vue +86 -0
  215. package/rancher-components/Accordion/index.ts +1 -0
  216. package/rancher-components/BadgeState/BadgeState.vue +3 -3
  217. package/rancher-components/Banner/Banner.vue +2 -2
  218. package/rancher-components/Card/Card.vue +3 -3
  219. package/rancher-components/Form/Checkbox/Checkbox.vue +3 -3
  220. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +18 -1
  221. package/rancher-components/Form/LabeledInput/LabeledInput.vue +65 -24
  222. package/rancher-components/Form/Radio/RadioButton.test.ts +7 -3
  223. package/rancher-components/Form/Radio/RadioButton.vue +13 -7
  224. package/rancher-components/Form/Radio/RadioGroup.test.ts +30 -0
  225. package/rancher-components/Form/Radio/RadioGroup.vue +8 -3
  226. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
  227. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  228. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  229. package/rancher-components/StringList/StringList.test.ts +270 -0
  230. package/rancher-components/StringList/StringList.vue +65 -26
  231. package/rancher-components/components/Accordion/Accordion.test.ts +45 -0
  232. package/rancher-components/components/Accordion/Accordion.vue +86 -0
  233. package/rancher-components/components/Accordion/index.ts +1 -0
  234. package/rancher-components/components/BadgeState/BadgeState.vue +3 -3
  235. package/rancher-components/components/Banner/Banner.vue +2 -2
  236. package/rancher-components/components/Card/Card.vue +3 -3
  237. package/rancher-components/components/Form/Checkbox/Checkbox.vue +3 -3
  238. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +18 -1
  239. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +57 -24
  240. package/rancher-components/components/Form/Radio/RadioButton.vue +13 -7
  241. package/rancher-components/components/Form/Radio/RadioGroup.vue +4 -3
  242. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
  243. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  244. package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +9 -4
  245. package/rancher-components/components/StringList/StringList.vue +8 -8
  246. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +50 -0
  247. package/scripts/extension/bundle +19 -7
  248. package/scripts/extension/helm/scripts/package +11 -3
  249. package/scripts/extension/parse-tag-name +2 -2
  250. package/scripts/extension/publish +20 -9
  251. package/scripts/publish-shell.sh +10 -0
  252. package/scripts/test-plugins-build.sh +85 -9
  253. package/server/har-file.js +183 -0
  254. package/store/catalog.js +1 -1
  255. package/store/features.js +1 -0
  256. package/store/i18n.js +11 -0
  257. package/store/index.js +13 -15
  258. package/store/prefs.js +33 -35
  259. package/store/type-map.js +8 -7
  260. package/tsconfig.json +35 -9
  261. package/tsconfig.paths.json +21 -0
  262. package/types/shell/index.d.ts +433 -234
  263. package/types/vue-shim.d.ts +42 -0
  264. package/utils/__tests__/create-yaml.test.ts +60 -0
  265. package/utils/axios.js +0 -19
  266. package/utils/azure.js +24 -0
  267. package/utils/clipboard.js +5 -0
  268. package/utils/create-yaml.js +17 -10
  269. package/utils/git.ts +1 -1
  270. package/utils/monitoring.js +1 -1
  271. package/utils/nuxt.js +18 -39
  272. package/utils/object.js +14 -0
  273. package/utils/router.scrollBehavior.js +12 -14
  274. package/utils/time.js +1 -1
  275. package/utils/url.ts +1 -1
  276. package/vue.config.js +23 -2
  277. package/.DS_Store +0 -0
  278. package/assets/images/providers/aks-black.svg +0 -28
  279. package/assets/images/providers/aks.svg +0 -31
  280. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +0 -234
  281. package/initialize/layouts.ts +0 -26
  282. package/mixins/fetch.server.js +0 -73
  283. package/pages/c/index.vue +0 -9
  284. package/pages/rio/mesh.vue +0 -508
  285. package/plugins/transitions.js +0 -4
  286. package/plugins/vue-clipboard2.js +0 -4
  287. package/tsconfig.default.json +0 -46
  288. package/yarn-error.log +0 -200
  289. /package/components/form/__tests__/{NameNsDescription.ts → NameNsDescription.test.ts} +0 -0
  290. /package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.ts → selectors.test.ts} +0 -0
  291. /package/edit/provisioning.cattle.io.cluster/{AgentConfiguration.vue → tabs/AgentConfiguration.vue} +0 -0
  292. /package/edit/provisioning.cattle.io.cluster/{MemberRoles.vue → tabs/MemberRoles.vue} +0 -0
  293. /package/edit/provisioning.cattle.io.cluster/{S3Config.vue → tabs/etcd/S3Config.vue} +0 -0
  294. /package/edit/provisioning.cattle.io.cluster/{ACE.vue → tabs/networking/ACE.vue} +0 -0
  295. /package/edit/provisioning.cattle.io.cluster/{RegistryConfigs.vue → tabs/registries/RegistryConfigs.vue} +0 -0
  296. /package/edit/provisioning.cattle.io.cluster/{RegistryMirrors.vue → tabs/registries/RegistryMirrors.vue} +0 -0
  297. /package/edit/provisioning.cattle.io.cluster/{DrainOptions.vue → tabs/upgrade/DrainOptions.vue} +0 -0
  298. /package/plugins/dashboard-store/__tests__/{actions.spec.ts → actions.test.ts} +0 -0
  299. /package/plugins/dashboard-store/__tests__/{getters.spec.ts → getters.test.ts} +0 -0
  300. /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
  301. /package/rancher-components/components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
@@ -17,9 +17,14 @@ function reply(err, code) {
17
17
  }
18
18
  }
19
19
 
20
- export default {
21
- layout: 'unauthenticated',
20
+ function isSaml($route) {
21
+ const { query } = $route;
22
+ const configQuery = get(query, 'config');
23
+
24
+ return samlProviders.includes(configQuery);
25
+ }
22
26
 
27
+ export default {
23
28
  async fetch({ store, route, redirect }) {
24
29
  const code = route.query[GITHUB_CODE];
25
30
  const stateStr = route.query[GITHUB_NONCE];
@@ -43,9 +48,14 @@ export default {
43
48
  try {
44
49
  parsed = JSON.parse(base64Decode((stateStr)));
45
50
  } catch (err) {
51
+ if (isSaml(route)) {
52
+ // This is an ok failure. SAML has no state string so a failure is fine (see similar check in mounted).
53
+ // This whole file could be re-written with that in mind, but this change keeps things simple and fixes a breaking addition
54
+ return;
55
+ }
46
56
  const out = store.getters['i18n/t'](`login.error`);
47
57
 
48
- console.error('Failed to parse nonce'); // eslint-disable-line no-console
58
+ console.error('Failed to parse nonce', stateStr, err); // eslint-disable-line no-console
49
59
 
50
60
  redirect(`/auth/login?err=${ escape(out) }`);
51
61
 
@@ -117,12 +127,8 @@ export default {
117
127
  window.close();
118
128
  }
119
129
  } else {
120
- const { query } = this.$route;
121
-
122
130
  if ( window.opener ) {
123
- const configQuery = get(query, 'config');
124
-
125
- if ( samlProviders.includes(configQuery) ) {
131
+ if (isSaml(this.$route)) {
126
132
  if ( window.opener.window.onAuthTest ) {
127
133
  reply(null, null);
128
134
  } else {
@@ -138,6 +138,11 @@ export default {
138
138
  return reducedRepos;
139
139
  },
140
140
 
141
+ /**
142
+ * Filter allll charts by invalid entries (deprecated, hidden and ui plugin).
143
+ *
144
+ * This does not include any user provided filters (like selected repos, categories and text query)
145
+ */
141
146
  enabledCharts() {
142
147
  return (this.allCharts || []).filter((c) => {
143
148
  if ( c.deprecated && !this.showDeprecated ) {
@@ -148,10 +153,6 @@ export default {
148
153
  return false;
149
154
  }
150
155
 
151
- if ( this.hideRepos.includes(c.repoKey) ) {
152
- return false;
153
- }
154
-
155
156
  if (isUIPlugin(c)) {
156
157
  return false;
157
158
  }
@@ -160,26 +161,28 @@ export default {
160
161
  });
161
162
  },
162
163
 
164
+ /**
165
+ * Filter enabled charts allll filters. These are what the user will see in the list
166
+ */
163
167
  filteredCharts() {
164
- const enabledCharts = (this.enabledCharts || []);
165
- const clusterProvider = this.currentCluster.status.provider || 'other';
166
-
167
- return filterAndArrangeCharts(enabledCharts, {
168
- clusterProvider,
169
- category: this.category,
170
- searchQuery: this.searchQuery,
171
- showDeprecated: this.showDeprecated,
172
- showHidden: this.showHidden,
173
- hideRepos: this.hideRepos,
174
- hideTypes: [CATALOG._CLUSTER_TPL],
175
- showPrerelease: this.$store.getters['prefs/get'](SHOW_PRE_RELEASE),
168
+ return this.filterCharts({
169
+ category: this.category,
170
+ searchQuery: this.searchQuery,
171
+ hideRepos: this.hideRepos
176
172
  });
177
173
  },
178
174
 
179
- getFeaturedCharts() {
180
- const allCharts = (this.filteredCharts || []);
175
+ /**
176
+ * Filter valid charts (alll filters minus user provided ones) by whether they are featured or not
177
+ *
178
+ * This will power the carousel
179
+ */
180
+ featuredCharts() {
181
+ const filteredCharts = this.filterCharts({});
182
+
183
+ // debugger;
181
184
 
182
- const featuredCharts = allCharts.filter((value) => value.featured).sort((a, b) => a.featured - b.featured);
185
+ const featuredCharts = filteredCharts.filter((value) => value.featured).sort((a, b) => a.featured - b.featured);
183
186
 
184
187
  return featuredCharts.slice(0, 5);
185
188
  },
@@ -187,7 +190,13 @@ export default {
187
190
  categories() {
188
191
  const map = {};
189
192
 
190
- for ( const chart of this.enabledCharts ) {
193
+ // Filter charts by everything except itself
194
+ const charts = this.filterCharts({
195
+ searchQuery: this.searchQuery,
196
+ hideRepos: this.hideRepos
197
+ });
198
+
199
+ for ( const chart of charts ) {
191
200
  for ( const c of chart.categories ) {
192
201
  if ( !map[c] ) {
193
202
  const labelKey = `catalog.charts.categories.${ lcFirst(c) }`;
@@ -208,14 +217,14 @@ export default {
208
217
  out.unshift({
209
218
  label: this.t('catalog.charts.categories.all'),
210
219
  value: '',
211
- count: this.enabledCharts.length
220
+ count: charts.length
212
221
  });
213
222
 
214
- return out;
223
+ return sortBy(out, ['label']);
215
224
  },
216
225
 
217
226
  showCarousel() {
218
- return this.chartMode === 'featured' && this.getFeaturedCharts.length;
227
+ return this.chartMode === 'featured' && this.featuredCharts.length;
219
228
  }
220
229
 
221
230
  },
@@ -334,6 +343,22 @@ export default {
334
343
  btnCb(false);
335
344
  }
336
345
  },
346
+
347
+ filterCharts({ category, searchQuery, hideRepos }) {
348
+ const enabledCharts = (this.enabledCharts || []);
349
+ const clusterProvider = this.currentCluster.status.provider || 'other';
350
+
351
+ return filterAndArrangeCharts(enabledCharts, {
352
+ clusterProvider,
353
+ category,
354
+ searchQuery,
355
+ showDeprecated: this.showDeprecated,
356
+ showHidden: this.showHidden,
357
+ hideRepos,
358
+ hideTypes: [CATALOG._CLUSTER_TPL],
359
+ showPrerelease: this.$store.getters['prefs/get'](SHOW_PRE_RELEASE),
360
+ });
361
+ }
337
362
  },
338
363
  };
339
364
  </script>
@@ -351,7 +376,7 @@ export default {
351
376
  </h1>
352
377
  </div>
353
378
  <div
354
- v-if="getFeaturedCharts.length > 0"
379
+ v-if="featuredCharts.length > 0"
355
380
  class="actions-container"
356
381
  >
357
382
  <ButtonGroup
@@ -363,7 +388,7 @@ export default {
363
388
  <div v-if="showCarousel">
364
389
  <h3>{{ t('catalog.charts.featuredCharts') }}</h3>
365
390
  <Carousel
366
- :sliders="getFeaturedCharts"
391
+ :sliders="featuredCharts"
367
392
  @clicked="(row) => selectChart(row)"
368
393
  />
369
394
  </div>
@@ -514,22 +539,21 @@ export default {
514
539
  }
515
540
  }
516
541
  }
517
- }
542
+ }
518
543
 
519
544
  .checkbox-select {
520
- .vs__search {
545
+ .vs__search {
521
546
  position: absolute;
522
547
  right: 0
523
548
  }
524
549
 
525
- .vs__selected-options {
550
+ .vs__selected-options {
526
551
  overflow: hidden;
527
552
  white-space: nowrap;
528
553
  text-overflow: ellipsis;
529
554
  display: inline-block;
530
555
  line-height: 2.4rem;
531
556
  }
532
-
533
557
  }
534
558
 
535
559
  .checkbox-outer-container.in-select {
@@ -537,7 +561,7 @@ export default {
537
561
  padding: 7px 0 6px 13px;
538
562
  width: calc(100% + 10px);
539
563
 
540
- ::v-deep.checkbox-label {
564
+ ::v-deep .checkbox-label {
541
565
  display: flex;
542
566
  align-items: center;
543
567
 
@@ -552,7 +576,7 @@ export default {
552
576
  }
553
577
  }
554
578
 
555
- &:hover ::v-deep.checkbox-label {
579
+ &:hover ::v-deep .checkbox-label {
556
580
  color: var(--body-text);
557
581
  }
558
582
 
@@ -560,7 +584,7 @@ export default {
560
584
  &:hover {
561
585
  background: var(--app-rancher-accent);
562
586
  }
563
- &:hover ::v-deep.checkbox-label {
587
+ &:hover ::v-deep .checkbox-label {
564
588
  color: var(--app-rancher-accent-text);
565
589
  }
566
590
  & i {
@@ -572,7 +596,7 @@ export default {
572
596
  &:hover {
573
597
  background: var(--app-partner-accent);
574
598
  }
575
- &:hover ::v-deep.checkbox-label {
599
+ &:hover ::v-deep .checkbox-label {
576
600
  color: var(--app-partner-accent-text);
577
601
  }
578
602
  & i {
@@ -584,7 +608,7 @@ export default {
584
608
  &:hover {
585
609
  background: var(--app-color1-accent);
586
610
  }
587
- &:hover ::v-deep.checkbox-label {
611
+ &:hover ::v-deep .checkbox-label {
588
612
  color: var(--app-color1-accent-text);
589
613
  }
590
614
  & i {
@@ -595,10 +619,10 @@ export default {
595
619
  &:hover {
596
620
  background: var(--app-color2-accent);
597
621
  }
598
- &:hover ::v-deep.checkbox-label {
622
+ &:hover ::v-deep .checkbox-label {
599
623
  color: var(--app-color2-accent-text);
600
624
  }
601
- & i {
625
+ & i {
602
626
  color: var(--app-color2-accent)
603
627
  }
604
628
  }
@@ -606,7 +630,7 @@ export default {
606
630
  &:hover {
607
631
  background: var(--app-color3-accent);
608
632
  }
609
- &:hover ::v-deep.checkbox-label {
633
+ &:hover ::v-deep .checkbox-label {
610
634
  color: var(--app-color3-accent-text);
611
635
  }
612
636
  & i {
@@ -628,7 +652,7 @@ export default {
628
652
  &:hover {
629
653
  background: var(--app-color5-accent);
630
654
  }
631
- &:hover ::v-deep.checkbox-label {
655
+ &:hover ::v-deep .checkbox-label {
632
656
  color: var(--app-color5-accent-text);
633
657
  }
634
658
  & i {
@@ -639,7 +663,7 @@ export default {
639
663
  &:hover {
640
664
  background: var(--app-color6-accent);
641
665
  }
642
- &:hover ::v-deep.checkbox-label {
666
+ &:hover ::v-deep .checkbox-label {
643
667
  color: var(--app-color6-accent-text);
644
668
  }
645
669
  & i {
@@ -650,7 +674,7 @@ export default {
650
674
  &:hover {
651
675
  background: var(--app-color7-accent);
652
676
  }
653
- &:hover ::v-deep.checkbox-label {
677
+ &:hover ::v-deep .checkbox-label {
654
678
  color: var(--app-color7-accent-text);
655
679
  }
656
680
  & i {
@@ -661,9 +685,6 @@ export default {
661
685
  &:hover {
662
686
  background: var(--app-color8-accent);
663
687
  }
664
- &:hover ::v-deep.checkbox-label {
665
- color: var(--app-color8-accent-text);
666
- }
667
688
  & i {
668
689
  color: var(--app-color8-accent)
669
690
  }
@@ -248,7 +248,7 @@ export default {
248
248
  return;
249
249
  }
250
250
 
251
- if ( this.version && process.client ) {
251
+ if ( this.version ) {
252
252
  /*
253
253
  Check if the Helm chart has provided the name
254
254
  of a Vue component to use for configuring
@@ -857,11 +857,9 @@ export default {
857
857
  }
858
858
 
859
859
  if (provCluster?.isRke2) { // isRke2 returns true for both RKE2 and K3s clusters.
860
- const agentConfig = provCluster.spec?.rkeConfig?.machineSelectorConfig?.find((x) => !x.machineLabelSelector).config;
861
-
862
860
  // If a cluster scoped registry exists,
863
861
  // it should be used by default.
864
- const clusterRegistry = agentConfig?.['system-default-registry'] || '';
862
+ const clusterRegistry = provCluster.agentConfig?.['system-default-registry'] || '';
865
863
 
866
864
  if (clusterRegistry) {
867
865
  return clusterRegistry;
@@ -1603,6 +1601,7 @@ export default {
1603
1601
  v-if="componentHasTabs"
1604
1602
  ref="tabs"
1605
1603
  :side-tabs="true"
1604
+ :hide-single-tab="true"
1606
1605
  :class="{'with-name': showNameEditor}"
1607
1606
  class="step__values__content"
1608
1607
  @changed="tabChanged($event)"
@@ -1647,6 +1646,7 @@ export default {
1647
1646
  v-else-if="hasQuestions && showQuestions"
1648
1647
  ref="tabs"
1649
1648
  :side-tabs="true"
1649
+ :hide-single-tab="true"
1650
1650
  :class="{'with-name': showNameEditor}"
1651
1651
  class="step__values__content"
1652
1652
  @changed="tabChanged($event)"
@@ -2,8 +2,6 @@
2
2
  import { NAME as APPS } from '@shell/config/product/apps';
3
3
 
4
4
  export default {
5
- layout: 'plain',
6
-
7
5
  middleware({ redirect, route } ) {
8
6
  return redirect({
9
7
  name: 'c-cluster-apps-charts',
@@ -3,8 +3,6 @@ import { NAME as AUTH } from '@shell/config/product/auth';
3
3
  import { MANAGEMENT } from '@shell/config/types';
4
4
 
5
5
  export default {
6
- layout: 'plain',
7
-
8
6
  middleware({ redirect, route } ) {
9
7
  return redirect({
10
8
  name: 'c-cluster-product-resource',
@@ -1,8 +1,6 @@
1
1
  <script>
2
2
 
3
3
  export default {
4
- layout: 'plain',
5
-
6
4
  mounted() {
7
5
  const link = this.$store.getters['backToRancherLink'];
8
6
 
@@ -15,6 +15,7 @@ import {
15
15
  WORKLOAD_TYPES,
16
16
  COUNT,
17
17
  CATALOG,
18
+ SECRET
18
19
  } from '@shell/config/types';
19
20
  import { setPromiseResult } from '@shell/utils/promise';
20
21
  import AlertTable from '@shell/components/AlertTable';
@@ -42,6 +43,8 @@ import { fetchClusterResources } from './explorer-utils';
42
43
  import SimpleBox from '@shell/components/SimpleBox';
43
44
  import { ExtensionPoint, CardLocation } from '@shell/core/types';
44
45
  import { getApplicableExtensionEnhancements } from '@shell/core/plugin-helpers';
46
+ import Certificates from '@shell/components/Certificates';
47
+ import { NAME as EXPLORER } from '@shell/config/product/explorer';
45
48
 
46
49
  export const RESOURCES = [NAMESPACE, INGRESS, PV, WORKLOAD_TYPES.DEPLOYMENT, WORKLOAD_TYPES.STATEFUL_SET, WORKLOAD_TYPES.JOB, WORKLOAD_TYPES.DAEMON_SET, SERVICE];
47
50
 
@@ -74,6 +77,7 @@ export default {
74
77
  ConfigBadge,
75
78
  EventsTable,
76
79
  SimpleBox,
80
+ Certificates
77
81
  },
78
82
 
79
83
  mixins: [metricPoller],
@@ -348,8 +352,18 @@ export default {
348
352
  return {
349
353
  name: 'c-cluster-product-resource',
350
354
  params: {
351
- product: 'explorer',
352
- resource: 'event',
355
+ product: EXPLORER,
356
+ resource: EVENT,
357
+ }
358
+ };
359
+ },
360
+
361
+ allSecretsLink() {
362
+ return {
363
+ name: 'c-cluster-product-resource',
364
+ params: {
365
+ product: EXPLORER,
366
+ resource: SECRET,
353
367
  }
354
368
  };
355
369
  }
@@ -581,6 +595,18 @@ export default {
581
595
  >
582
596
  <AlertTable v-if="selectedTab === 'cluster-alerts'" />
583
597
  </Tab>
598
+ <Tab
599
+ name="cluster-certs"
600
+ :label="t('clusterIndexPage.sections.certs.label')"
601
+ :weight="1"
602
+ >
603
+ <span class="events-table-link">
604
+ <n-link :to="allSecretsLink">
605
+ <span>{{ t('glance.secretsTable') }}</span>
606
+ </n-link>
607
+ </span>
608
+ <Certificates v-if="selectedTab === 'cluster-certs'" />
609
+ </Tab>
584
610
  </Tabbed>
585
611
  </div>
586
612
  <Tabbed
@@ -14,7 +14,7 @@ import FleetNoWorkspaces from '@shell/components/fleet/FleetNoWorkspaces.vue';
14
14
  import { NAME } from '@shell/config/product/fleet';
15
15
 
16
16
  export default {
17
- name: 'ListGitRepo',
17
+ name: 'FleetDashboard',
18
18
  components: {
19
19
  Loading,
20
20
  ResourceTable,
@@ -2,8 +2,6 @@
2
2
  import { NAME as EXPLORER } from '@shell/config/product/explorer';
3
3
 
4
4
  export default {
5
- layout: 'plain',
6
-
7
5
  middleware({ redirect, route } ) {
8
6
  return redirect({
9
7
  name: 'c-cluster-product',
@@ -53,8 +53,6 @@ const DEFAULT_BANNER_SETTING = {
53
53
  };
54
54
 
55
55
  export default {
56
- layout: 'authenticated',
57
-
58
56
  components: {
59
57
  Checkbox,
60
58
  Loading,
@@ -20,8 +20,6 @@ import { setFavIcon } from '@shell/utils/favicon';
20
20
  const Color = require('color');
21
21
 
22
22
  export default {
23
- layout: 'authenticated',
24
-
25
23
  components: {
26
24
  LabeledInput, Checkbox, FileImageSelector, Loading, SimpleBox, AsyncButton, Banner, ColorInput, TypeDescription
27
25
  },
@@ -3,8 +3,6 @@ import { NAME as SETTINGS } from '@shell/config/product/settings';
3
3
  import { MANAGEMENT } from '@shell/config/types';
4
4
 
5
5
  export default {
6
- layout: 'plain',
7
-
8
6
  middleware({ redirect, route, store } ) {
9
7
  const hasSettings = !!store.getters[`management/schemaFor`](MANAGEMENT.SETTING);
10
8
 
@@ -13,7 +13,6 @@ import DefaultLinksEditor from './DefaultLinksEditor';
13
13
  import { CUSTOM_LINKS_VERSION, fetchLinks } from '@shell/config/home-links';
14
14
 
15
15
  export default {
16
- layout: 'authenticated',
17
16
  components: {
18
17
  KeyValue,
19
18
  Loading,
@@ -22,7 +22,6 @@ const l10n = {
22
22
  };
23
23
 
24
24
  export default {
25
- layout: 'authenticated',
26
25
  components: {
27
26
  Checkbox,
28
27
  Loading,
@@ -469,7 +469,8 @@ export default {
469
469
  <div class="fields">
470
470
  <LabeledSelect
471
471
  v-model="imagePullSecrets"
472
- :label="t('workload.container.imagePullSecrets')"
472
+ :label="t('plugins.manageCatalog.imageLoad.fields.imagePullSecrets.label')"
473
+ :tooltip="t('plugins.manageCatalog.imageLoad.fields.imagePullSecrets.tooltip')"
473
474
  :multiple="true"
474
475
  :taggable="true"
475
476
  :options="imagePullNamespacedSecrets"
@@ -7,13 +7,12 @@ import { SERVICE, WORKLOAD_TYPES } from '@shell/config/types';
7
7
  import { UI_PLUGIN_LABELS, UI_PLUGIN_NAMESPACE } from '@shell/config/uiplugins';
8
8
  import { UI_PLUGIN_CATALOG } from '@shell/config/table-headers';
9
9
 
10
- import ActionMenu from '@shell/components/ActionMenu';
11
10
  import ResourceTable from '@shell/components/ResourceTable';
12
11
 
13
12
  export default {
14
13
  name: 'CatalogList',
15
14
 
16
- components: { ActionMenu, ResourceTable },
15
+ components: { ResourceTable },
17
16
 
18
17
  mixins: [ResourceManager],
19
18
 
@@ -29,10 +28,7 @@ export default {
29
28
 
30
29
  return {
31
30
  actions,
32
- catalogHeaders: UI_PLUGIN_CATALOG,
33
- menuTargetElement: null,
34
- menuTargetEvent: null,
35
- menuOpen: false,
31
+ catalogHeaders: UI_PLUGIN_CATALOG,
36
32
  };
37
33
  },
38
34
 
@@ -49,6 +45,7 @@ export default {
49
45
 
50
46
  catalogRows() {
51
47
  const rows = [];
48
+ const actions = this.actions;
52
49
 
53
50
  if ( !isEmpty(this.namespacedDeployments) ) {
54
51
  this.namespacedDeployments.forEach((deploy) => {
@@ -57,11 +54,13 @@ export default {
57
54
 
58
55
  if ( deployName ) {
59
56
  const out = {
60
- name: deployName,
61
- state: deploy.metadata?.state?.name,
62
- image: deploy.spec?.template?.spec?.containers[0]?.image,
63
- service: null,
64
- repo: null
57
+ name: deployName,
58
+ state: deploy.metadata?.state?.name,
59
+ image: deploy.spec?.template?.spec?.containers[0]?.image,
60
+ service: null,
61
+ repo: null,
62
+ availableActions: actions,
63
+ showCatalogUninstallDialog: () => this.$emit('showCatalogUninstallDialog', out)
65
64
  };
66
65
  const keys = ['service', 'repo'];
67
66
 
@@ -77,20 +76,6 @@ export default {
77
76
  return rows;
78
77
  }
79
78
  },
80
-
81
- methods: {
82
- setMenu(event) {
83
- this.menuOpen = !!event;
84
-
85
- if (event) {
86
- this.menuTargetElement = this.$refs.catalogActions;
87
- this.menuTargetEvent = event;
88
- } else {
89
- this.menuTargetElement = undefined;
90
- this.menuTargetEvent = undefined;
91
- }
92
- }
93
- }
94
79
  };
95
80
  </script>
96
81
 
@@ -118,27 +103,6 @@ export default {
118
103
  </button>
119
104
  </div>
120
105
  </template>
121
- <template #row-actions="{row}">
122
- <button
123
- ref="catalogActions"
124
- aria-haspopup="true"
125
- type="button"
126
- class="btn btn-sm role-multi-action actions"
127
- data-testid="extensions-page-catalog-row-menu"
128
- @click="setMenu"
129
- >
130
- <i class="icon icon-actions" />
131
- </button>
132
- <ActionMenu
133
- :custom-actions="actions"
134
- :open="menuOpen"
135
- :use-custom-target-element="true"
136
- :custom-target-element="menuTargetElement"
137
- :custom-target-event="menuTargetEvent"
138
- @close="setMenu(false)"
139
- @showCatalogUninstallDialog="e => $emit('showCatalogUninstallDialog', row, e.event)"
140
- />
141
- </template>
142
106
  </ResourceTable>
143
107
  </div>
144
108
  </div>
@@ -93,8 +93,6 @@ export default {
93
93
  };
94
94
  },
95
95
 
96
- layout: 'plain',
97
-
98
96
  async fetch() {
99
97
  const hash = {};
100
98
 
@@ -7,8 +7,7 @@ import { filterOnlyKubernetesClusters, filterHiddenLocalCluster } from '@shell/u
7
7
  import { sortBy } from '@shell/utils/sort';
8
8
 
9
9
  export default {
10
- name: 'Diagnostic',
11
- layout: 'plain',
10
+ name: 'Diagnostic',
12
11
 
13
12
  components: { AsyncButton, PromptModal },
14
13
 
@@ -4,7 +4,6 @@ import { mapGetters, mapState } from 'vuex';
4
4
  import { stringify } from '@shell/utils/error';
5
5
 
6
6
  export default {
7
- layout: 'home',
8
7
 
9
8
  components: { BrandImage },
10
9
 
package/pages/prefs.vue CHANGED
@@ -18,7 +18,6 @@ import { addObject } from '@shell/utils/array';
18
18
  import LocaleSelector from '@shell/components/LocaleSelector';
19
19
 
20
20
  export default {
21
- layout: 'plain',
22
21
  components: {
23
22
  BackLink, ButtonGroup, LabeledSelect, Checkbox, LandingPagePreference, LocaleSelector
24
23
  },