@rancher/shell 3.0.12-rc.2 → 3.0.12-rc.3

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 (272) hide show
  1. package/apis/impl/apis.ts +6 -0
  2. package/apis/index.ts +26 -0
  3. package/apis/intf/resources-api/cluster-api.ts +18 -0
  4. package/apis/intf/resources-api/mgmt-api.ts +15 -0
  5. package/apis/intf/resources-api/resource-base.ts +107 -0
  6. package/apis/intf/resources-api/resource-constants.ts +147 -0
  7. package/apis/intf/resources-api/resources-api.ts +143 -0
  8. package/apis/intf/resources.ts +49 -0
  9. package/apis/intf/{modal.ts → shell-api/modal.ts} +21 -26
  10. package/apis/intf/shell-api/proxy.ts +216 -0
  11. package/apis/intf/{slide-in.ts → shell-api/slide-in.ts} +4 -3
  12. package/apis/intf/{system.ts → shell-api/system.ts} +4 -1
  13. package/apis/intf/shell.ts +12 -6
  14. package/apis/resources/__tests__/resources-api-class.test.ts +550 -0
  15. package/apis/resources/index.ts +22 -0
  16. package/apis/resources/resources-api-class.ts +187 -0
  17. package/apis/shell/__tests__/proxy.test.ts +369 -0
  18. package/apis/shell/index.ts +8 -1
  19. package/apis/shell/modal.ts +4 -1
  20. package/apis/shell/notifications.ts +9 -6
  21. package/apis/shell/proxy.ts +256 -0
  22. package/apis/shell/slide-in.ts +4 -1
  23. package/apis/vue-shim.d.ts +2 -1
  24. package/assets/data/aws-regions.json +4 -0
  25. package/assets/fonts/lato/LatoLatin-Black.woff +0 -0
  26. package/assets/fonts/lato/LatoLatin-Black.woff2 +0 -0
  27. package/assets/fonts/lato/LatoLatin-BlackItalic.woff +0 -0
  28. package/assets/fonts/lato/LatoLatin-BlackItalic.woff2 +0 -0
  29. package/assets/fonts/lato/LatoLatin-Bold.woff +0 -0
  30. package/assets/fonts/lato/LatoLatin-Bold.woff2 +0 -0
  31. package/assets/fonts/lato/LatoLatin-BoldItalic.woff +0 -0
  32. package/assets/fonts/lato/LatoLatin-BoldItalic.woff2 +0 -0
  33. package/assets/fonts/lato/LatoLatin-Heavy.woff +0 -0
  34. package/assets/fonts/lato/LatoLatin-Heavy.woff2 +0 -0
  35. package/assets/fonts/lato/LatoLatin-HeavyItalic.woff +0 -0
  36. package/assets/fonts/lato/LatoLatin-HeavyItalic.woff2 +0 -0
  37. package/assets/fonts/lato/LatoLatin-Italic.woff +0 -0
  38. package/assets/fonts/lato/LatoLatin-Italic.woff2 +0 -0
  39. package/assets/fonts/lato/LatoLatin-Light.woff +0 -0
  40. package/assets/fonts/lato/LatoLatin-Light.woff2 +0 -0
  41. package/assets/fonts/lato/LatoLatin-LightItalic.woff +0 -0
  42. package/assets/fonts/lato/LatoLatin-LightItalic.woff2 +0 -0
  43. package/assets/fonts/lato/LatoLatin-Medium.woff +0 -0
  44. package/assets/fonts/lato/LatoLatin-Medium.woff2 +0 -0
  45. package/assets/fonts/lato/LatoLatin-MediumItalic.woff +0 -0
  46. package/assets/fonts/lato/LatoLatin-MediumItalic.woff2 +0 -0
  47. package/assets/fonts/lato/LatoLatin-Regular.woff +0 -0
  48. package/assets/fonts/lato/LatoLatin-Regular.woff2 +0 -0
  49. package/assets/fonts/lato/LatoLatin-Semibold.woff +0 -0
  50. package/assets/fonts/lato/LatoLatin-Semibold.woff2 +0 -0
  51. package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff +0 -0
  52. package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff2 +0 -0
  53. package/assets/styles/base/_variables.scss +2 -0
  54. package/assets/styles/fonts/_fontstack.scss +132 -8
  55. package/assets/translations/en-us.yaml +22 -5
  56. package/chart/monitoring/index.vue +10 -1
  57. package/components/ActionDropdownShell.vue +2 -1
  58. package/components/CruResourceFooter.vue +9 -5
  59. package/components/ExplorerProjectsNamespaces.vue +1 -1
  60. package/components/InstallHelmCharts.vue +2 -2
  61. package/components/LandingPagePreference.vue +14 -5
  62. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +15 -1
  63. package/components/Resource/Detail/Metadata/index.vue +6 -0
  64. package/components/Resource/Detail/ResourcePopover/index.vue +12 -1
  65. package/components/Resource/Detail/SpacedRow.vue +3 -1
  66. package/components/Resource/Detail/TitleBar/index.vue +10 -11
  67. package/components/ResourceList/Masthead.vue +12 -8
  68. package/components/SelectIconGrid.vue +0 -10
  69. package/components/SingleClusterInfo.vue +1 -0
  70. package/components/SortableTable/__tests__/sorting.test.ts +126 -0
  71. package/components/SortableTable/index.vue +6 -9
  72. package/components/SortableTable/selection.js +23 -5
  73. package/components/SortableTable/sorting.js +6 -3
  74. package/components/Wizard.vue +14 -13
  75. package/components/fleet/FleetBundles.vue +100 -12
  76. package/components/fleet/FleetClusterTargets/index.vue +37 -15
  77. package/components/fleet/__tests__/FleetClusterTargets.test.ts +149 -115
  78. package/components/fleet/__tests__/FleetClusters.test.ts +12 -12
  79. package/components/form/LabeledSelect.vue +20 -3
  80. package/components/form/NameNsDescription.vue +11 -0
  81. package/components/form/Security.vue +6 -2
  82. package/components/form/WorkloadPorts.vue +2 -7
  83. package/components/form/__tests__/Security.test.ts +76 -0
  84. package/components/formatter/Autoscaler.vue +4 -4
  85. package/components/formatter/ClusterKubeVersion.vue +27 -0
  86. package/components/formatter/ClusterLink.vue +1 -7
  87. package/components/formatter/ClusterProvider.vue +6 -10
  88. package/components/formatter/FleetSummaryGraph.vue +0 -3
  89. package/components/formatter/MachineSummaryGraph.vue +1 -1
  90. package/components/formatter/PodsUsage.vue +2 -2
  91. package/components/formatter/__tests__/Autoscaler.test.ts +19 -22
  92. package/components/formatter/__tests__/FleetSummaryGraph.test.ts +216 -0
  93. package/components/formatter/__tests__/PodsUsage.test.ts +6 -10
  94. package/components/nav/NamespaceFilter.vue +2 -2
  95. package/components/nav/TopLevelMenu.helper.ts +15 -3
  96. package/components/nav/TopLevelMenu.vue +16 -5
  97. package/components/nav/__tests__/TopLevelMenu.test.ts +145 -21
  98. package/components/templates/home.vue +18 -0
  99. package/components/templates/plain.vue +18 -0
  100. package/components/templates/standalone.vue +17 -0
  101. package/composables/useFormValidation.ts +93 -0
  102. package/composables/useVeeValidateField.test.ts +159 -0
  103. package/composables/useVeeValidateField.ts +67 -0
  104. package/config/pagination-table-headers.js +18 -1
  105. package/config/product/manager.js +82 -21
  106. package/config/router/routes.js +6 -0
  107. package/config/table-headers.js +20 -1
  108. package/config/types.js +2 -1
  109. package/core/__tests__/plugin-products.test.ts +904 -20
  110. package/core/plugin-products-base.ts +107 -7
  111. package/core/plugin-products.ts +4 -0
  112. package/core/plugin-types.ts +111 -1
  113. package/core/plugin.ts +15 -7
  114. package/core/productDebugger.js +9 -4
  115. package/core/types-provisioning.ts +43 -30
  116. package/core/types.ts +57 -20
  117. package/detail/__tests__/pod.test.ts +41 -0
  118. package/detail/harvesterhci.io.management.cluster.vue +6 -2
  119. package/detail/pod.vue +1 -1
  120. package/detail/provisioning.cattle.io.cluster.vue +4 -10
  121. package/edit/auth/__tests__/azuread.test.ts +217 -34
  122. package/edit/auth/azuread.vue +122 -14
  123. package/edit/auth/oidc.vue +2 -2
  124. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +13 -4
  125. package/edit/networking.k8s.io.ingress/RulePath.vue +8 -4
  126. package/edit/networking.k8s.io.ingress/index.vue +75 -20
  127. package/edit/provisioning.cattle.io.cluster/__tests__/MachinePool.test.ts +104 -0
  128. package/edit/provisioning.cattle.io.cluster/index.vue +11 -7
  129. package/edit/provisioning.cattle.io.cluster/rke2.vue +8 -4
  130. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +11 -0
  131. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +37 -4
  132. package/edit/provisioning.cattle.io.cluster/tabs/registries/__tests__/RegistryConfigs.test.ts +132 -7
  133. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +2 -1
  134. package/edit/secret/__tests__/ssh.test.ts +5 -6
  135. package/edit/secret/basic.vue +31 -0
  136. package/edit/secret/index.vue +68 -17
  137. package/edit/secret/registry.vue +38 -0
  138. package/edit/secret/ssh.vue +29 -0
  139. package/edit/secret/tls.vue +30 -0
  140. package/edit/service.vue +4 -4
  141. package/edit/workload/Upgrading.vue +3 -3
  142. package/edit/workload/__tests__/Upgrading.test.ts +6 -9
  143. package/edit/workload/mixins/workload.js +2 -1
  144. package/list/fleet.cattle.io.bundle.vue +7 -104
  145. package/list/fleet.cattle.io.clusterregistrationtoken.vue +20 -0
  146. package/list/provisioning.cattle.io.cluster.vue +262 -180
  147. package/list/utils/management.cattle.io.cluster.utils.ts +128 -0
  148. package/mixins/__tests__/chart.test.ts +112 -0
  149. package/mixins/brand.js +2 -1
  150. package/mixins/chart.js +12 -8
  151. package/mixins/resource-fetch-api-pagination.js +41 -5
  152. package/models/__tests__/ext.cattle.io.kubeconfig.test.ts +67 -67
  153. package/models/__tests__/management.cattle.io.cluster.test.ts +1 -1
  154. package/models/__tests__/management.cattle.io.node.ts +6 -5
  155. package/models/__tests__/management.cattle.io.nodepool.ts +5 -4
  156. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +32 -11
  157. package/models/base-cluster.x-k8s.io.js +26 -0
  158. package/models/cluster.js +1 -1
  159. package/models/cluster.x-k8s.io.machine.js +4 -22
  160. package/models/cluster.x-k8s.io.machinedeployment.js +2 -20
  161. package/models/cluster.x-k8s.io.machineset.js +2 -20
  162. package/models/compliance.cattle.io.clusterscan.js +130 -2
  163. package/models/ext.cattle.io.kubeconfig.ts +4 -7
  164. package/models/fleet-application.js +3 -1
  165. package/models/management.cattle.io.cluster.js +417 -40
  166. package/models/management.cattle.io.node.js +6 -4
  167. package/models/management.cattle.io.nodepool.js +1 -1
  168. package/models/networking.k8s.io.ingress.js +12 -4
  169. package/models/provisioning.cattle.io.cluster.js +47 -330
  170. package/models/rke.cattle.io.etcdsnapshot.js +1 -2
  171. package/package.json +11 -29
  172. package/pages/__tests__/readme.test.ts +49 -0
  173. package/pages/auth/setup.vue +2 -3
  174. package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +76 -0
  175. package/pages/c/_cluster/apps/charts/chart.vue +60 -8
  176. package/pages/c/_cluster/apps/charts/install.vue +10 -7
  177. package/pages/c/_cluster/explorer/__tests__/index.test.ts +23 -25
  178. package/pages/c/_cluster/explorer/index.vue +5 -49
  179. package/pages/c/_cluster/istio/__tests__/istio.index.test.ts +194 -0
  180. package/pages/c/_cluster/istio/index.vue +21 -6
  181. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +1 -0
  182. package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +719 -2
  183. package/pages/c/_cluster/uiplugins/index.vue +203 -197
  184. package/pages/diagnostic.vue +13 -17
  185. package/pages/fail-whale.vue +18 -0
  186. package/pages/home.vue +77 -260
  187. package/pages/readme.vue +88 -0
  188. package/plugins/dashboard-store/__tests__/resource-class.test.ts +88 -0
  189. package/plugins/dashboard-store/actions.js +40 -18
  190. package/plugins/dashboard-store/resource-class.js +5 -2
  191. package/plugins/steve/__tests__/subscribe.spec.ts +6 -3
  192. package/plugins/steve/steve-pagination-utils.ts +11 -3
  193. package/plugins/steve/subscribe.js +35 -5
  194. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +10 -4
  195. package/rancher-components/Form/LabeledInput/LabeledInput.vue +7 -52
  196. package/rancher-components/RcButton/RcButton.test.ts +37 -1
  197. package/rancher-components/RcButton/RcButton.vue +38 -8
  198. package/rancher-components/RcDropdown/RcDropdownTrigger.vue +10 -8
  199. package/store/__tests__/catalog.test.ts +115 -1
  200. package/store/__tests__/type-map.test.ts +556 -1
  201. package/store/action-menu.js +8 -3
  202. package/store/auth.js +1 -1
  203. package/store/aws.js +27 -16
  204. package/store/catalog.js +27 -3
  205. package/store/digitalocean.js +20 -38
  206. package/store/index.js +2 -0
  207. package/store/linode.js +25 -40
  208. package/store/pnap.js +1 -0
  209. package/store/type-map.js +111 -29
  210. package/tsconfig.paths.json +8 -8
  211. package/types/kube/kube-api.ts +14 -1
  212. package/types/rancher/steve.api.ts +12 -12
  213. package/types/resources/settings.d.ts +2 -1
  214. package/types/shell/index.d.ts +102 -2
  215. package/types/store/dashboard-store.types.ts +108 -11
  216. package/types/store/pagination.types.ts +6 -3
  217. package/utils/__tests__/alertmanagerconfig.test.ts +117 -0
  218. package/utils/__tests__/async.test.ts +87 -0
  219. package/utils/__tests__/aws.test.ts +140 -0
  220. package/utils/__tests__/banners.test.ts +176 -0
  221. package/utils/__tests__/chart.test.ts +64 -1
  222. package/utils/__tests__/color.test.ts +226 -0
  223. package/utils/__tests__/duration.test.ts +140 -0
  224. package/utils/__tests__/fleet.test.ts +340 -0
  225. package/utils/__tests__/ingress.test.ts +553 -0
  226. package/utils/__tests__/kube.test.ts +68 -0
  227. package/utils/__tests__/namespace-filter.test.ts +109 -0
  228. package/utils/__tests__/pagination-utils.test.ts +361 -0
  229. package/utils/__tests__/parse-externalid.test.ts +137 -0
  230. package/utils/__tests__/perf-setting.utils.test.ts +98 -0
  231. package/utils/__tests__/poller-sequential.test.ts +177 -0
  232. package/utils/__tests__/poller.test.ts +170 -0
  233. package/utils/__tests__/promise.test.ts +346 -0
  234. package/utils/__tests__/settings.test.ts +140 -0
  235. package/utils/__tests__/sort-utils.test.ts +301 -0
  236. package/utils/__tests__/string-utils.test.ts +798 -0
  237. package/utils/__tests__/string.test.ts +23 -1
  238. package/utils/__tests__/style.test.ts +154 -0
  239. package/utils/__tests__/svg-filter.test.ts +184 -0
  240. package/utils/__tests__/units.test.ts +417 -0
  241. package/utils/__tests__/versions.test.ts +128 -0
  242. package/utils/__tests__/xccdf.test.ts +391 -0
  243. package/utils/chart.js +36 -0
  244. package/utils/fleet.ts +13 -3
  245. package/utils/gatekeeper/__tests__/util.test.ts +174 -0
  246. package/utils/gc/__tests__/gc-interval.test.ts +119 -0
  247. package/utils/gc/__tests__/gc-root-store.test.ts +225 -0
  248. package/utils/gc/__tests__/gc-route-changed.test.ts +96 -0
  249. package/utils/gc/__tests__/gc.test.ts +487 -0
  250. package/utils/ingress.ts +9 -1
  251. package/utils/pagination-utils.ts +2 -1
  252. package/utils/string.js +25 -2
  253. package/utils/uiplugins.ts +5 -5
  254. package/utils/validators/__tests__/cluster-name.test.ts +110 -0
  255. package/utils/validators/__tests__/cron-schedule.test.ts +79 -0
  256. package/utils/validators/__tests__/index.test.ts +481 -0
  257. package/utils/validators/__tests__/kubernetes-name.test.ts +163 -0
  258. package/utils/validators/__tests__/misc-validators.test.ts +246 -0
  259. package/utils/validators/__tests__/pod-affinity.test.ts +382 -0
  260. package/utils/validators/__tests__/prometheusrule.test.ts +211 -0
  261. package/utils/validators/__tests__/role-template.test.ts +149 -0
  262. package/utils/validators/__tests__/service.test.ts +283 -0
  263. package/utils/validators/__tests__/setting.test.js +32 -0
  264. package/utils/validators/formRules/__tests__/index.test.ts +50 -0
  265. package/utils/validators/formRules/index.ts +5 -5
  266. package/utils/validators/machine-pool.ts +1 -1
  267. package/utils/validators/setting.js +18 -3
  268. package/utils/xccdf.ts +418 -0
  269. package/assets/fonts/lato/lato-v17-latin-700.woff +0 -0
  270. package/assets/fonts/lato/lato-v17-latin-700.woff2 +0 -0
  271. package/assets/fonts/lato/lato-v17-latin-regular.woff +0 -0
  272. package/assets/fonts/lato/lato-v17-latin-regular.woff2 +0 -0
@@ -2,6 +2,7 @@
2
2
  import { _CREATE, _VIEW } from '@shell/config/query-params';
3
3
  import AsyncButton from '@shell/components/AsyncButton';
4
4
  import { Banner } from '@components/Banner';
5
+ import { RcButton } from '@components/RcButton';
5
6
  import Loading from '@shell/components/Loading';
6
7
  import { stringify } from '@shell/utils/error';
7
8
  import LazyImage from '@shell/components/LazyImage';
@@ -28,6 +29,7 @@ export default {
28
29
  components: {
29
30
  AsyncButton,
30
31
  Banner,
32
+ RcButton,
31
33
  Loading,
32
34
  LazyImage,
33
35
  },
@@ -44,7 +46,6 @@ export default {
44
46
  loading: Wizard will block until all steps are not loading
45
47
  nextButton?: {
46
48
  labelKey?: default to `wizard.next`
47
- style?: defaults to `btn role-primary`
48
49
  },
49
50
  previousButton: {
50
51
  disable: defaults to false
@@ -185,9 +186,6 @@ export default {
185
186
  return this.steps.filter((step) => !step.hidden);
186
187
  },
187
188
 
188
- nextButtonStyle() {
189
- return this.activeStep.nextButton?.style || `btn role-primary`;
190
- },
191
189
  nextButtonLabel() {
192
190
  return this.activeStep.nextButton?.labelKey || `wizard.next`;
193
191
  }
@@ -444,13 +442,14 @@ export default {
444
442
  name="cancel"
445
443
  :cancel="cancel"
446
444
  >
447
- <button
445
+ <RcButton
448
446
  type="button"
449
- class="btn role-secondary"
447
+ variant="secondary"
448
+ size="large"
450
449
  @click="cancel"
451
450
  >
452
451
  <t k="generic.cancel" />
453
- </button>
452
+ </RcButton>
454
453
  </slot>
455
454
  <div class="controls-steps">
456
455
  <slot
@@ -458,14 +457,15 @@ export default {
458
457
  name="back"
459
458
  :back="back"
460
459
  >
461
- <button
460
+ <RcButton
462
461
  :disabled="!canPrevious || (!editFirstStep && activeStepIndex===1)"
463
462
  type="button"
464
- class="btn role-secondary"
463
+ variant="secondary"
464
+ size="large"
465
465
  @click="back()"
466
466
  >
467
467
  <t k="wizard.previous" />
468
- </button>
468
+ </RcButton>
469
469
  </slot>
470
470
  <slot
471
471
  v-if="activeStepIndex === visibleSteps.length-1"
@@ -484,14 +484,15 @@ export default {
484
484
  name="next"
485
485
  :next="next"
486
486
  >
487
- <button
487
+ <RcButton
488
488
  :disabled="!canNext"
489
489
  type="button"
490
- :class="nextButtonStyle"
490
+ variant="primary"
491
+ size="large"
491
492
  @click="next()"
492
493
  >
493
494
  <t :k="nextButtonLabel" />
494
- </button>
495
+ </RcButton>
495
496
  </slot>
496
497
  </div>
497
498
  </div>
@@ -3,13 +3,17 @@ import { FLEET } from '@shell/config/types';
3
3
  import { Banner } from '@components/Banner';
4
4
  import Loading from '@shell/components/Loading';
5
5
  import ResourceTable from '@shell/components/ResourceTable';
6
+ import ResourceFetch from '@shell/mixins/resource-fetch';
6
7
  import {
8
+ AGE,
7
9
  CREATION_DATE,
8
10
  STATE,
9
11
  NAME,
10
12
  FLEET_BUNDLE_LAST_UPDATED,
11
13
  } from '@shell/config/table-headers';
12
14
  import { isHarvesterCluster } from '@shell/utils/cluster';
15
+ import { HARVESTER_CONTAINER } from '@shell/store/features';
16
+ import { checkSchemasForFindAllHash } from '@shell/utils/auth';
13
17
 
14
18
  export default {
15
19
  name: 'FleetBundles',
@@ -18,36 +22,97 @@ export default {
18
22
  Banner, Loading, ResourceTable
19
23
  },
20
24
 
25
+ mixins: [ResourceFetch],
26
+
21
27
  props: {
22
28
  value: {
23
29
  type: Object,
24
- required: true,
30
+ required: false,
31
+ default: null,
32
+ },
33
+
34
+ resource: {
35
+ type: String,
36
+ required: false,
37
+ default: null,
38
+ },
39
+
40
+ schema: {
41
+ type: Object,
42
+ required: false,
43
+ default: null,
25
44
  },
45
+
46
+ useQueryParamsForSimpleFiltering: {
47
+ type: Boolean,
48
+ default: false
49
+ }
26
50
  },
27
51
 
28
52
  async fetch() {
29
- if (this.$store.getters['management/schemaFor']( FLEET.CLUSTER )) {
30
- this.allFleet = await this.$store.getters['management/all'](FLEET.CLUSTER);
53
+ let hash;
54
+
55
+ try {
56
+ const toFetch = {
57
+ cluster: {
58
+ inStoreType: 'management',
59
+ type: FLEET.CLUSTER
60
+ }
61
+ };
62
+
63
+ // Only fetch bundles if in list mode
64
+ if (this.isListMode) {
65
+ toFetch.bundle = {
66
+ inStoreType: 'management',
67
+ type: this.resource
68
+ };
69
+ }
70
+
71
+ hash = await checkSchemasForFindAllHash(toFetch, this.$store);
72
+ } catch (e) {
73
+ }
74
+
75
+ // checkSchemasForFindAllHash already fetched the data, just get it from the store
76
+ if (this.isListMode && hash?.bundle) {
77
+ // Data is already in the store, no need to fetch again
78
+ this.rows = hash.bundle;
31
79
  }
80
+
81
+ this.allFleet = hash?.cluster || [];
32
82
  },
33
83
 
34
84
  data() {
35
- return { allFleet: [] };
85
+ return {
86
+ allFleet: [],
87
+ rows: []
88
+ };
89
+ },
90
+
91
+ mounted() {
92
+ this.areHarvesterHostsVisible = this.$store.getters['features/get'](HARVESTER_CONTAINER);
36
93
  },
37
94
 
38
95
  computed: {
96
+ isListMode() {
97
+ return !this.value;
98
+ },
39
99
 
40
100
  allBundlesInRepo() {
41
- // gitrepo model has getter for its bundles.
101
+ // If in list mode, return all rows from ResourceFetch mixin
102
+ if (this.isListMode) {
103
+ return this.rows;
104
+ }
105
+
106
+ // Otherwise, get bundles from the gitrepo
42
107
  return this.value.bundles || [];
43
108
  },
44
109
 
45
- schema() {
46
- return this.$store.getters['management/schemaFor']( FLEET.BUNDLE );
110
+ bundleSchema() {
111
+ return this.schema || this.$store.getters['management/schemaFor']( FLEET.BUNDLE );
47
112
  },
48
113
 
49
114
  repoName() {
50
- return this.value.metadata.name;
115
+ return this.value?.metadata?.name;
51
116
  },
52
117
 
53
118
  harvesterClusters() {
@@ -65,6 +130,10 @@ export default {
65
130
  bundles() {
66
131
  const harvester = this.harvesterClusters;
67
132
 
133
+ if (this.areHarvesterHostsVisible) {
134
+ return this.allBundlesInRepo;
135
+ }
136
+
68
137
  return this.allBundlesInRepo.filter((bundle) => {
69
138
  const targets = bundle.spec?.targets || [];
70
139
 
@@ -92,10 +161,16 @@ export default {
92
161
  sort: 'status.display.readyClusters',
93
162
  search: ['status.summary.ready', 'status.summary.desiredReady'],
94
163
  },
95
- FLEET_BUNDLE_LAST_UPDATED,
96
- CREATION_DATE,
97
164
  ];
98
165
 
166
+ // In list mode, show AGE. In component mode, show last updated and creation date
167
+ if (this.isListMode) {
168
+ out.push(AGE);
169
+ } else {
170
+ out.push(FLEET_BUNDLE_LAST_UPDATED);
171
+ out.push(CREATION_DATE);
172
+ }
173
+
99
174
  return out;
100
175
  },
101
176
  },
@@ -103,7 +178,17 @@ export default {
103
178
  displayWarning(row) {
104
179
  return !!row.status?.summary && (row.status.summary.desiredReady !== row.status.summary.ready);
105
180
  }
106
- }
181
+ },
182
+
183
+ // override with relevant info for the loading indicator since this doesn't use it's own masthead
184
+ $loadingResources() {
185
+ if (this.isListMode) {
186
+ // results are filtered so we wouldn't get the correct count on indicator...
187
+ return { loadIndeterminate: true };
188
+ }
189
+
190
+ return undefined;
191
+ },
107
192
  };
108
193
  </script>
109
194
 
@@ -117,9 +202,12 @@ export default {
117
202
  :label="t('fleet.bundles.harvester', {count: hidden} )"
118
203
  />
119
204
  <ResourceTable
120
- :schema="schema"
205
+ :schema="bundleSchema"
121
206
  :headers="headers"
122
207
  :rows="bundles"
208
+ :loading="loading"
209
+ :use-query-params-for-simple-filtering="useQueryParamsForSimpleFiltering"
210
+ :force-update-live-and-delayed="forceUpdateLiveAndDelayed"
123
211
  >
124
212
  <template #cell:deploymentsReady="{row}">
125
213
  <span
@@ -3,6 +3,7 @@ import { PropType } from 'vue';
3
3
  import { isEmpty } from 'lodash';
4
4
  import { checkSchemasForFindAllHash } from '@shell/utils/auth';
5
5
  import { isHarvesterCluster } from '@shell/utils/cluster';
6
+ import { HARVESTER_CONTAINER } from '@shell/store/features';
6
7
  import { FLEET } from '@shell/config/types';
7
8
  import FleetUtils from '@shell/utils/fleet';
8
9
  import { Expression, Selector, Target, TargetMode } from '@shell/types/fleet';
@@ -28,9 +29,11 @@ interface DataType {
28
29
  selectedClusterGroups: string[],
29
30
  clusterSelectors: Selector[],
30
31
  key: number,
32
+ areHarvesterHostsVisible: boolean,
31
33
  }
32
34
 
33
35
  const excludeHarvesterRule = FleetUtils.Application.excludeHarvesterRule;
36
+ const includeAllWorkgroupRule = FleetUtils.Application.includeAllWorkgroupRule;
34
37
 
35
38
  export default {
36
39
 
@@ -92,17 +95,23 @@ export default {
92
95
 
93
96
  data(): DataType {
94
97
  return {
95
- targetMode: 'all',
96
- allClusters: [],
97
- allClusterGroups: [],
98
- selectedClusters: [],
99
- selectedClusterGroups: [],
100
- clusterSelectors: [],
101
- key: 0 // Generates a unique key to handle Targets
98
+ targetMode: 'all',
99
+ allClusters: [],
100
+ allClusterGroups: [],
101
+ selectedClusters: [],
102
+ selectedClusterGroups: [],
103
+ clusterSelectors: [],
104
+ key: 0, // Generates a unique key to handle Targets
105
+ /**
106
+ * Are host harvesters treated as normal clusters... or are they hidden
107
+ */
108
+ areHarvesterHostsVisible: false,
102
109
  };
103
110
  },
104
111
 
105
112
  mounted() {
113
+ this.areHarvesterHostsVisible = this.$store.getters['features/get'](HARVESTER_CONTAINER);
114
+
106
115
  this.fromTargets();
107
116
 
108
117
  if (this.mode === _CREATE) {
@@ -110,7 +119,11 @@ export default {
110
119
  this.targetMode = this.created || 'all';
111
120
  this.update();
112
121
  } else {
113
- this.targetMode = FleetUtils.Application.getTargetMode(this.targets || [], this.namespace);
122
+ this.targetMode = FleetUtils.Application.getTargetMode(this.targets || [], this.namespace, this.areHarvesterHostsVisible);
123
+ // We only want to update the information from the new target mode if it is EDIT, if CREATE, if VIEW we want to keep as it is
124
+ if (this.mode === _EDIT) {
125
+ this.update();
126
+ }
114
127
  }
115
128
  },
116
129
 
@@ -167,8 +180,12 @@ export default {
167
180
 
168
181
  clustersOptions() {
169
182
  return this.allClusters
170
- .filter((x) => x.metadata.namespace === this.namespace && !isHarvesterCluster(x))
171
- .map((x) => ({ label: x.nameDisplay, value: x.nameDisplay }));
183
+ .filter((x) => x.metadata.namespace === this.namespace && (this.areHarvesterHostsVisible || !isHarvesterCluster(x) || this.selectedClusters.includes(x.name)))
184
+ .map((x) => ({
185
+ label: x.nameDisplay,
186
+ value: x.nameDisplay,
187
+ disabled: !this.areHarvesterHostsVisible && isHarvesterCluster(x)
188
+ }));
172
189
  },
173
190
 
174
191
  clusterGroupsOptions() {
@@ -285,14 +302,19 @@ export default {
285
302
 
286
303
  toTargets(): Target[] | undefined {
287
304
  switch (this.targetMode) {
288
- case 'none':
305
+ case 'none': // No clusters
289
306
  return undefined;
290
- case 'all':
307
+ case 'all': // All clusters in workspace
308
+ if (this.areHarvesterHostsVisible) {
309
+ // set it to empty to clear any previous and hidden harvester omission
310
+ return [includeAllWorkgroupRule];
311
+ }
312
+
291
313
  return [excludeHarvesterRule];
292
- case 'clusters':
314
+ case 'clusters': // 'Manually selected clusters'
293
315
  return this.normalizeTargets(this.selectedClusters, this.clusterSelectors, this.selectedClusterGroups);
294
- case 'advanced':
295
- case 'local':
316
+ case 'advanced': // no longer in use?
317
+ case 'local': // only option for fleet-local workspace
296
318
  return this.targets;
297
319
  }
298
320
  },