@rancher/shell 3.0.7 → 3.0.8-rc.10

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 (375) hide show
  1. package/assets/brand/suse/banner.svg +1 -0
  2. package/assets/brand/suse/dark/banner.svg +1 -0
  3. package/assets/brand/suse/dark/login-landscape.svg +1 -0
  4. package/assets/brand/suse/dark/rancher-logo.svg +1 -1
  5. package/assets/brand/suse/favicon.png +0 -0
  6. package/assets/brand/suse/login-landscape.svg +1 -0
  7. package/assets/brand/suse/metadata.json +11 -1
  8. package/assets/brand/suse/rancher-logo.svg +1 -1
  9. package/assets/fonts/suse/suse-v2-latin-300.woff +0 -0
  10. package/assets/fonts/suse/suse-v2-latin-300.woff2 +0 -0
  11. package/assets/fonts/suse/suse-v2-latin-600.woff +0 -0
  12. package/assets/fonts/suse/suse-v2-latin-600.woff2 +0 -0
  13. package/assets/fonts/suse/suse-v2-latin-700.woff +0 -0
  14. package/assets/fonts/suse/suse-v2-latin-700.woff2 +0 -0
  15. package/assets/fonts/suse/suse-v2-latin-800.woff +0 -0
  16. package/assets/fonts/suse/suse-v2-latin-800.woff2 +0 -0
  17. package/assets/fonts/suse/suse-v2-latin-regular.woff +0 -0
  18. package/assets/fonts/suse/suse-v2-latin-regular.woff2 +0 -0
  19. package/assets/images/content/README.md +5 -0
  20. package/assets/images/content/cloud-native.svg +84 -0
  21. package/assets/images/content/dark/cloud-native.svg +21 -0
  22. package/assets/images/content/dark/shield.svg +59 -0
  23. package/assets/images/content/dark/suse.svg +10 -0
  24. package/assets/images/content/shield.svg +59 -0
  25. package/assets/images/content/suse.svg +10 -0
  26. package/assets/images/vendor/githubapp.svg +13 -0
  27. package/assets/styles/base/_typography.scss +2 -1
  28. package/assets/styles/fonts/_fontstack.scss +53 -1
  29. package/assets/styles/global/_cards.scss +0 -3
  30. package/assets/styles/global/_layout.scss +21 -35
  31. package/assets/styles/themes/_dark.scss +1 -1
  32. package/assets/styles/themes/_light.scss +1 -1
  33. package/assets/styles/themes/_modern.scss +16 -8
  34. package/assets/styles/themes/_suse.scss +116 -24
  35. package/assets/translations/en-us.yaml +185 -21
  36. package/assets/translations/zh-hans.yaml +0 -4
  37. package/components/AutoscalerCard.vue +113 -0
  38. package/components/AutoscalerTab.vue +94 -0
  39. package/components/BackLink.vue +8 -0
  40. package/components/BannerGraphic.vue +36 -21
  41. package/components/BrandImage.vue +17 -6
  42. package/components/ClusterIconMenu.vue +1 -1
  43. package/components/ClusterProviderIcon.vue +1 -1
  44. package/components/Cron/CronExpressionEditor.vue +1 -1
  45. package/components/Cron/CronExpressionEditorModal.vue +1 -1
  46. package/components/Drawer/Chrome.vue +2 -6
  47. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +4 -9
  48. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +3 -8
  49. package/components/Drawer/ResourceDetailDrawer/composables.ts +3 -4
  50. package/components/Drawer/ResourceDetailDrawer/index.vue +4 -9
  51. package/components/Drawer/ResourceDetailDrawer/types.ts +17 -0
  52. package/components/Drawer/types.ts +3 -0
  53. package/components/DynamicContent/DynamicContentBanner.vue +102 -0
  54. package/components/DynamicContent/DynamicContentCloseButton.vue +42 -0
  55. package/components/DynamicContent/DynamicContentIcon.vue +132 -0
  56. package/components/DynamicContent/DynamicContentPanel.vue +112 -0
  57. package/components/DynamicContent/content.ts +78 -0
  58. package/components/EmberPage.vue +1 -1
  59. package/components/IconOrSvg.vue +2 -2
  60. package/components/Inactivity.vue +222 -106
  61. package/components/InstallHelmCharts.vue +2 -2
  62. package/components/PaginatedResourceTable.vue +2 -6
  63. package/components/PopoverCard.vue +192 -0
  64. package/components/Questions/__tests__/index.test.ts +159 -0
  65. package/components/Resource/Detail/CopyToClipboard.vue +4 -1
  66. package/components/Resource/Detail/FetchLoader/composables.ts +18 -4
  67. package/components/Resource/Detail/Metadata/Annotations/index.vue +2 -2
  68. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +1 -1
  69. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +4 -0
  70. package/components/Resource/Detail/Metadata/KeyValueRow.vue +1 -1
  71. package/components/Resource/Detail/Metadata/Labels/index.vue +2 -2
  72. package/components/Resource/Detail/Metadata/composables.ts +9 -9
  73. package/components/Resource/Detail/Metadata/index.vue +3 -3
  74. package/components/Resource/Detail/ResourcePopover/ResourcePopoverCard.vue +2 -19
  75. package/components/Resource/Detail/ResourcePopover/__tests__/ResourcePopoverCard.test.ts +0 -29
  76. package/components/Resource/Detail/ResourcePopover/__tests__/index.test.ts +132 -150
  77. package/components/Resource/Detail/ResourcePopover/index.vue +54 -159
  78. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +0 -2
  79. package/components/Resource/Detail/TitleBar/composables.ts +2 -1
  80. package/components/Resource/Detail/TitleBar/index.vue +10 -6
  81. package/components/Resource/Detail/composables.ts +12 -0
  82. package/components/ResourceDetail/Masthead/latest.vue +29 -0
  83. package/components/ResourceDetail/index.vue +5 -2
  84. package/components/ResourceList/Masthead.vue +1 -1
  85. package/components/SortableTable/index.vue +18 -2
  86. package/components/Tabbed/__tests__/index.test.ts +86 -0
  87. package/components/{nav/WindowManager → Window}/ContainerLogs.vue +1 -1
  88. package/components/{nav/WindowManager → Window}/ContainerLogsActions.vue +1 -0
  89. package/components/{nav/WindowManager → Window}/__tests__/ContainerLogs.test.ts +1 -1
  90. package/components/{nav/WindowManager → Window}/__tests__/ContainerShell.test.ts +2 -2
  91. package/components/__tests__/AutoscalerCard.test.ts +154 -0
  92. package/components/__tests__/AutoscalerTab.test.ts +125 -0
  93. package/components/__tests__/PopoverCard.test.ts +204 -0
  94. package/components/auth/SelectPrincipal.vue +24 -6
  95. package/components/auth/__tests__/SelectPrincipal.test.ts +119 -0
  96. package/components/fleet/FleetConfigMapSelector.vue +117 -0
  97. package/components/fleet/FleetSecretSelector.vue +127 -0
  98. package/components/fleet/__tests__/FleetConfigMapSelector.test.ts +125 -0
  99. package/components/fleet/__tests__/FleetSecretSelector.test.ts +82 -0
  100. package/components/form/FileImageSelector.vue +13 -4
  101. package/components/form/FileSelector.vue +11 -2
  102. package/components/form/ResourceLabeledSelect.vue +1 -0
  103. package/components/form/__tests__/ResourceLabeledSelect.test.ts +90 -0
  104. package/components/formatter/Autoscaler.vue +97 -0
  105. package/components/formatter/InternalExternalIP.vue +198 -24
  106. package/components/formatter/__tests__/Autoscaler.test.ts +156 -0
  107. package/components/formatter/__tests__/InternalExternalIP.test.ts +133 -0
  108. package/components/google/util/__tests__/formatter.test.ts +47 -0
  109. package/components/google/util/formatter.ts +5 -2
  110. package/components/nav/Group.vue +12 -3
  111. package/components/nav/Header.vue +37 -16
  112. package/components/nav/NamespaceFilter.vue +13 -1
  113. package/components/nav/NotificationCenter/index.vue +2 -1
  114. package/components/nav/TopLevelMenu.helper.ts +16 -6
  115. package/components/nav/TopLevelMenu.vue +4 -2
  116. package/components/{DraggableZone.vue → nav/WindowManager/PinArea.vue} +47 -80
  117. package/components/nav/WindowManager/composables/useComponentsMount.ts +70 -0
  118. package/components/nav/WindowManager/composables/useDimensionsHandler.ts +105 -0
  119. package/components/nav/WindowManager/composables/useDragHandler.ts +99 -0
  120. package/components/nav/WindowManager/composables/usePanelHandler.ts +72 -0
  121. package/components/nav/WindowManager/composables/usePanelsHandler.ts +14 -0
  122. package/components/nav/WindowManager/composables/useResizeHandler.ts +167 -0
  123. package/components/nav/WindowManager/composables/useTabsHandler.ts +51 -0
  124. package/components/nav/WindowManager/constants.ts +23 -0
  125. package/components/nav/WindowManager/index.vue +61 -575
  126. package/components/nav/WindowManager/panels/HorizontalPanel.vue +265 -0
  127. package/components/nav/WindowManager/panels/TabBodyContainer.vue +39 -0
  128. package/components/nav/WindowManager/panels/VerticalPanel.vue +308 -0
  129. package/components/templates/default.vue +4 -40
  130. package/components/templates/home.vue +31 -5
  131. package/components/templates/plain.vue +30 -4
  132. package/components/templates/standalone.vue +1 -1
  133. package/composables/useI18n.ts +10 -1
  134. package/composables/useInterval.ts +15 -0
  135. package/config/__test__/uiplugins.test.ts +309 -0
  136. package/config/labels-annotations.js +9 -1
  137. package/config/product/auth.js +1 -0
  138. package/config/product/explorer.js +3 -1
  139. package/config/product/manager.js +20 -9
  140. package/config/query-params.js +1 -0
  141. package/config/router/routes.js +10 -2
  142. package/config/settings.ts +10 -2
  143. package/config/store.js +4 -2
  144. package/config/table-headers.js +8 -0
  145. package/config/types.js +11 -0
  146. package/config/uiplugins.js +46 -2
  147. package/config/version.js +1 -1
  148. package/core/__test__/extension-manager-impl.test.js +236 -0
  149. package/core/extension-manager-impl.js +23 -6
  150. package/core/plugin-helpers.ts +2 -0
  151. package/core/types-provisioning.ts +4 -1
  152. package/detail/pod.vue +1 -0
  153. package/detail/provisioning.cattle.io.cluster.vue +13 -1
  154. package/dialog/AddonConfigConfirmationDialog.vue +45 -1
  155. package/dialog/DeveloperLoadExtensionDialog.vue +12 -3
  156. package/dialog/RollbackWorkloadDialog.vue +2 -5
  157. package/directives/ui-context.ts +103 -0
  158. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +52 -11
  159. package/edit/auth/AuthProviderWarningBanners.vue +14 -1
  160. package/edit/auth/__tests__/oidc.test.ts +26 -0
  161. package/edit/auth/github-app-steps.vue +97 -0
  162. package/edit/auth/github-steps.vue +75 -0
  163. package/edit/auth/github.vue +99 -65
  164. package/edit/auth/oidc.vue +5 -1
  165. package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -0
  166. package/edit/cloudcredential.vue +1 -1
  167. package/edit/configmap.vue +1 -0
  168. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  169. package/edit/fleet.cattle.io.gitrepo.vue +0 -10
  170. package/edit/fleet.cattle.io.helmop.vue +51 -2
  171. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  172. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  173. package/edit/logging-flow/index.vue +1 -0
  174. package/edit/logging.banzaicloud.io.output/index.vue +1 -0
  175. package/edit/management.cattle.io.fleetworkspace.vue +1 -1
  176. package/edit/management.cattle.io.project.vue +1 -0
  177. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +4 -1
  178. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +2 -1
  179. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  180. package/edit/monitoring.coreos.com.receiver/index.vue +2 -1
  181. package/edit/monitoring.coreos.com.route.vue +1 -1
  182. package/edit/namespace.vue +1 -0
  183. package/edit/networking.istio.io.destinationrule/index.vue +1 -0
  184. package/edit/networking.k8s.io.ingress/index.vue +1 -0
  185. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +15 -5
  186. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +1 -0
  187. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -0
  188. package/edit/node.vue +1 -0
  189. package/edit/persistentvolume/index.vue +27 -22
  190. package/edit/persistentvolume/plugins/awsElasticBlockStore.vue +13 -14
  191. package/edit/persistentvolume/plugins/azureDisk.vue +49 -48
  192. package/edit/persistentvolume/plugins/azureFile.vue +15 -14
  193. package/edit/persistentvolume/plugins/cephfs.vue +15 -14
  194. package/edit/persistentvolume/plugins/cinder.vue +15 -14
  195. package/edit/persistentvolume/plugins/csi.vue +18 -16
  196. package/edit/persistentvolume/plugins/fc.vue +13 -14
  197. package/edit/persistentvolume/plugins/flexVolume.vue +15 -14
  198. package/edit/persistentvolume/plugins/flocker.vue +1 -3
  199. package/edit/persistentvolume/plugins/gcePersistentDisk.vue +13 -14
  200. package/edit/persistentvolume/plugins/glusterfs.vue +15 -14
  201. package/edit/persistentvolume/plugins/hostPath.vue +40 -39
  202. package/edit/persistentvolume/plugins/iscsi.vue +13 -14
  203. package/edit/persistentvolume/plugins/local.vue +1 -3
  204. package/edit/persistentvolume/plugins/longhorn.vue +23 -22
  205. package/edit/persistentvolume/plugins/nfs.vue +15 -14
  206. package/edit/persistentvolume/plugins/photonPersistentDisk.vue +1 -14
  207. package/edit/persistentvolume/plugins/portworxVolume.vue +15 -14
  208. package/edit/persistentvolume/plugins/quobyte.vue +15 -14
  209. package/edit/persistentvolume/plugins/rbd.vue +15 -14
  210. package/edit/persistentvolume/plugins/scaleIO.vue +15 -14
  211. package/edit/persistentvolume/plugins/storageos.vue +15 -14
  212. package/edit/persistentvolume/plugins/vsphereVolume.vue +1 -3
  213. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +32 -5
  214. package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.test.ts +35 -0
  215. package/edit/provisioning.cattle.io.cluster/__tests__/Networking.test.ts +155 -0
  216. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +11 -9
  217. package/edit/provisioning.cattle.io.cluster/index.vue +25 -15
  218. package/edit/provisioning.cattle.io.cluster/rke2.vue +98 -17
  219. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +28 -2
  220. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +107 -5
  221. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +92 -4
  222. package/edit/secret/index.vue +1 -1
  223. package/edit/service.vue +9 -4
  224. package/edit/serviceaccount.vue +1 -0
  225. package/edit/storage.k8s.io.storageclass/index.vue +1 -0
  226. package/edit/workload/index.vue +2 -1
  227. package/edit/workload/mixins/workload.js +1 -1
  228. package/initialize/App.vue +4 -4
  229. package/initialize/install-directives.js +2 -0
  230. package/initialize/install-plugins.js +19 -2
  231. package/list/projectsecret.vue +1 -1
  232. package/list/provisioning.cattle.io.cluster.vue +15 -2
  233. package/machine-config/amazonec2.vue +42 -135
  234. package/machine-config/azure.vue +1 -1
  235. package/machine-config/components/EC2Networking.vue +490 -0
  236. package/machine-config/components/__tests__/EC2Networking.test.ts +148 -0
  237. package/machine-config/components/__tests__/utils/vpcSubnetMockData.js +294 -0
  238. package/machine-config/digitalocean.vue +11 -0
  239. package/machine-config/google.vue +1 -1
  240. package/mixins/__tests__/brand.spec.ts +2 -2
  241. package/mixins/__tests__/chart.test.ts +21 -0
  242. package/mixins/brand.js +1 -7
  243. package/mixins/chart.js +8 -2
  244. package/mixins/create-edit-view/index.js +5 -0
  245. package/models/__tests__/chart.test.ts +49 -12
  246. package/models/__tests__/compliance.cattle.io.clusterscanprofile.spec.js +30 -0
  247. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +112 -5
  248. package/models/catalog.cattle.io.app.js +1 -1
  249. package/models/chart.js +28 -14
  250. package/models/cluster/node.js +13 -6
  251. package/models/cluster.x-k8s.io.machine.js +10 -20
  252. package/models/cluster.x-k8s.io.machinedeployment.js +5 -1
  253. package/models/compliance.cattle.io.clusterscanprofile.js +1 -1
  254. package/models/management.cattle.io.authconfig.js +1 -0
  255. package/models/management.cattle.io.cluster.js +21 -3
  256. package/models/management.cattle.io.kontainerdriver.js +1 -0
  257. package/models/provisioning.cattle.io.cluster.js +249 -33
  258. package/package.json +6 -5
  259. package/pages/auth/login.vue +43 -4
  260. package/pages/auth/verify.vue +1 -1
  261. package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +3 -2
  262. package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +135 -0
  263. package/pages/c/_cluster/apps/charts/chart.vue +35 -17
  264. package/pages/c/_cluster/apps/charts/index.vue +11 -13
  265. package/pages/c/_cluster/apps/charts/install.vue +1 -1
  266. package/pages/c/_cluster/explorer/EventsTable.vue +89 -3
  267. package/pages/c/_cluster/explorer/index.vue +8 -6
  268. package/pages/c/_cluster/explorer/tools/index.vue +3 -3
  269. package/pages/c/_cluster/manager/hostedprovider/index.vue +220 -0
  270. package/pages/c/_cluster/settings/brand.vue +1 -1
  271. package/pages/c/_cluster/settings/performance.vue +12 -25
  272. package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +7 -0
  273. package/pages/c/_cluster/uiplugins/catalogs.vue +147 -0
  274. package/pages/c/_cluster/uiplugins/index.vue +126 -184
  275. package/pages/home.vue +327 -16
  276. package/pkg/dynamic-importer.lib.js +4 -0
  277. package/plugins/axios.js +2 -1
  278. package/plugins/dashboard-client-init.js +3 -0
  279. package/plugins/dashboard-store/actions.js +1 -1
  280. package/plugins/dashboard-store/getters.js +18 -1
  281. package/plugins/dashboard-store/resource-class.js +21 -6
  282. package/plugins/dynamic-content.js +13 -0
  283. package/plugins/i18n.js +8 -0
  284. package/plugins/steve/__tests__/steve-pagination-utils.test.ts +333 -0
  285. package/plugins/steve/steve-pagination-utils.ts +41 -22
  286. package/plugins/steve/subscribe.js +17 -9
  287. package/plugins/subscribe-events.ts +4 -2
  288. package/rancher-components/Form/Checkbox/Checkbox.vue +1 -1
  289. package/rancher-components/Pill/RcStatusBadge/RcStatusBadge.vue +6 -34
  290. package/rancher-components/Pill/RcStatusBadge/index.ts +0 -1
  291. package/rancher-components/Pill/RcStatusBadge/types.ts +1 -1
  292. package/rancher-components/Pill/RcStatusIndicator/RcStatusIndicator.vue +5 -28
  293. package/rancher-components/Pill/RcStatusIndicator/types.ts +2 -1
  294. package/rancher-components/Pill/types.ts +0 -1
  295. package/rancher-components/RcDropdown/RcDropdownItem.vue +1 -0
  296. package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +5 -1
  297. package/rancher-components/RcIcon/RcIcon.test.ts +51 -0
  298. package/rancher-components/RcIcon/RcIcon.vue +46 -0
  299. package/rancher-components/RcIcon/index.ts +1 -0
  300. package/rancher-components/RcIcon/types.ts +160 -0
  301. package/rancher-components/utils/status.test.ts +67 -0
  302. package/rancher-components/utils/status.ts +77 -0
  303. package/scripts/extension/publish +1 -1
  304. package/scripts/typegen.sh +1 -0
  305. package/store/action-menu.js +8 -0
  306. package/store/auth.js +11 -6
  307. package/store/aws.js +8 -6
  308. package/store/catalog.js +6 -0
  309. package/store/features.js +2 -0
  310. package/store/index.js +45 -20
  311. package/store/notifications.ts +51 -4
  312. package/store/plugins.js +7 -3
  313. package/store/prefs.js +12 -6
  314. package/store/type-map.js +3 -3
  315. package/store/ui-context.ts +86 -0
  316. package/store/wm.ts +244 -0
  317. package/types/kube/kube-api.ts +2 -1
  318. package/types/notifications/index.ts +27 -3
  319. package/types/rancher/index.d.ts +1 -0
  320. package/types/resources/settings.d.ts +29 -7
  321. package/types/shell/index.d.ts +138 -4
  322. package/types/store/__tests__/pagination.types.spec.ts +137 -0
  323. package/types/store/pagination.types.ts +157 -9
  324. package/types/store/subscribe-events.types.ts +8 -1
  325. package/types/store/subscribe.types.ts +1 -0
  326. package/types/window-manager.ts +24 -0
  327. package/utils/__tests__/cluster.test.ts +379 -1
  328. package/utils/__tests__/object.test.ts +19 -0
  329. package/utils/__tests__/provider.test.ts +98 -0
  330. package/utils/__tests__/selector-typed.test.ts +263 -0
  331. package/utils/__tests__/version.test.ts +19 -1
  332. package/utils/autoscaler-utils.ts +7 -0
  333. package/utils/back-off.ts +3 -3
  334. package/utils/brand.ts +29 -0
  335. package/utils/chart.js +18 -0
  336. package/utils/cluster.js +157 -3
  337. package/utils/color.js +1 -1
  338. package/utils/dynamic-content/__tests__/announcement.test.ts +498 -0
  339. package/utils/dynamic-content/__tests__/config.test.ts +187 -0
  340. package/utils/dynamic-content/__tests__/index.test.ts +390 -0
  341. package/utils/dynamic-content/__tests__/info.test.ts +275 -0
  342. package/utils/dynamic-content/__tests__/new-release.test.ts +216 -0
  343. package/utils/dynamic-content/__tests__/support-notice.test.ts +262 -0
  344. package/utils/dynamic-content/__tests__/util.test.ts +235 -0
  345. package/utils/dynamic-content/announcement.ts +142 -0
  346. package/utils/dynamic-content/config.ts +55 -0
  347. package/utils/dynamic-content/example.json +40 -0
  348. package/utils/dynamic-content/index.ts +277 -0
  349. package/utils/dynamic-content/info.ts +261 -0
  350. package/utils/dynamic-content/new-release.ts +126 -0
  351. package/utils/dynamic-content/notification-handler.ts +48 -0
  352. package/utils/dynamic-content/support-notice.ts +169 -0
  353. package/utils/dynamic-content/types.d.ts +153 -0
  354. package/utils/dynamic-content/util.ts +122 -0
  355. package/utils/dynamic-importer.js +2 -2
  356. package/utils/favicon.js +4 -4
  357. package/utils/inactivity.ts +104 -0
  358. package/utils/object.js +20 -2
  359. package/utils/pagination-utils.ts +19 -4
  360. package/utils/pagination-wrapper.ts +12 -8
  361. package/utils/provider.ts +14 -0
  362. package/utils/release-notes.ts +1 -1
  363. package/utils/scroll.js +7 -0
  364. package/utils/selector-typed.ts +6 -2
  365. package/utils/settings.ts +15 -0
  366. package/utils/validators/machine-pool.ts +13 -3
  367. package/utils/version.js +15 -0
  368. package/assets/images/icons/document.svg +0 -3
  369. package/plugins/nuxt-client-init.js +0 -3
  370. package/store/wm.js +0 -95
  371. /package/components/{nav/WindowManager → Window}/ChartReadme.vue +0 -0
  372. /package/components/{nav/WindowManager → Window}/ContainerShell.vue +0 -0
  373. /package/components/{nav/WindowManager → Window}/KubectlShell.vue +0 -0
  374. /package/components/{nav/WindowManager → Window}/MachineSsh.vue +0 -0
  375. /package/components/{nav/WindowManager → Window}/Window.vue +0 -0
@@ -2,18 +2,25 @@
2
2
  import { LabeledInput } from '@components/Form/LabeledInput';
3
3
  import { Banner } from '@components/Banner';
4
4
  import { Checkbox } from '@components/Form/Checkbox';
5
- import { _EDIT, _VIEW } from '@shell/config/query-params';
5
+ import { _EDIT, _VIEW, _CREATE } from '@shell/config/query-params';
6
6
  import ArrayList from '@shell/components/form/ArrayList';
7
7
  import ACE from '@shell/edit/provisioning.cattle.io.cluster/tabs/networking/ACE';
8
+ import LabeledSelect from '@shell/components/form/LabeledSelect';
8
9
 
9
10
  const NETBIOS_TRUNCATION_LENGTH = 15;
10
11
 
12
+ export const STACK_PREFS = {
13
+ IPV4: 'ipv4',
14
+ IPV6: 'ipv6',
15
+ DUAL: 'dual'
16
+ };
17
+
11
18
  export default {
12
19
  emits: [
13
20
  'update:value', 'cluster-cidr-changed', 'local-cluster-auth-endpoint-changed',
14
21
  'service-cidr-changed', 'cluster-domain-changed', 'cluster-dns-changed',
15
22
  'truncate-hostname-changed', 'ca-certs-changed', 'service-node-port-range-changed',
16
- 'fqdn-changed', 'tls-san-changed'
23
+ 'fqdn-changed', 'tls-san-changed', 'stack-preference-changed', 'validationChanged'
17
24
  ],
18
25
 
19
26
  components: {
@@ -21,7 +28,8 @@ export default {
21
28
  Banner,
22
29
  Checkbox,
23
30
  ArrayList,
24
- ACE
31
+ ACE,
32
+ LabeledSelect
25
33
  },
26
34
 
27
35
  props: {
@@ -34,17 +42,28 @@ export default {
34
42
  type: Object,
35
43
  required: true,
36
44
  },
45
+
37
46
  selectedVersion: {
38
47
  type: Object,
39
48
  required: true,
40
49
  },
50
+
41
51
  truncateLimit: {
42
52
  type: Number,
43
53
  required: false,
44
54
  default: 0
55
+ },
56
+
57
+ hasSomeIpv6Pools: {
58
+ type: Boolean,
59
+ default: false
45
60
  }
46
61
  },
47
62
 
63
+ data() {
64
+ return { STACK_PREFS };
65
+ },
66
+
48
67
  computed: {
49
68
  truncateHostnames() {
50
69
  return this.truncateLimit === NETBIOS_TRUNCATION_LENGTH;
@@ -55,7 +74,20 @@ export default {
55
74
  serverArgs() {
56
75
  return this.selectedVersion?.serverArgs || {};
57
76
  },
58
-
77
+ stackPreferenceOptions() {
78
+ return [{
79
+ label: this.t('cluster.rke2.stackPreference.options.ipv4'),
80
+ value: STACK_PREFS.IPV4
81
+ },
82
+ {
83
+ label: this.t('cluster.rke2.stackPreference.options.ipv6'),
84
+ value: STACK_PREFS.IPV6
85
+ }, {
86
+ label: this.t('cluster.rke2.stackPreference.options.dual'),
87
+ value: STACK_PREFS.DUAL
88
+ },
89
+ ];
90
+ },
59
91
  showIpv6Warning() {
60
92
  const clusterCIDR = this.serverConfig['cluster-cidr'] || '';
61
93
  const serviceCIDR = this.serverConfig['service-cidr'] || '';
@@ -79,6 +111,36 @@ export default {
79
111
  this.$emit('update:value', newValue);
80
112
  }
81
113
  },
114
+
115
+ stackPreference: {
116
+ get() {
117
+ return this.localValue.spec?.networking?.stackPreference || STACK_PREFS.IPV4;
118
+ },
119
+ set(neu) {
120
+ if (!this.localValue.spec.networking) {
121
+ this.localValue.spec.networking = {};
122
+ }
123
+ this.localValue.spec.networking.stackPreference = neu;
124
+ }
125
+ },
126
+ },
127
+
128
+ methods: {
129
+ // if ipv6 pools are detected, we enforce dual-stack or ipv6 stack prefs.
130
+ // If ipv6 pools are not detected we don't know for sure they aren't there so we don't validate the input
131
+ // also not validating the input when editing existing clusters to ensure we don't prevent editing clusters using dual-stack VPCs provisioned before the ipv6 feature was added
132
+ stackPreferenceValidator(val) {
133
+ const value = val?.value || val;
134
+ let isValid;
135
+
136
+ if (this.hasSomeIpv6Pools && this.mode === _CREATE) {
137
+ isValid = value !== STACK_PREFS.IPV4;
138
+
139
+ return isValid ? null : this.t('cluster.rke2.stackPreference.errorNeedsIpv6');
140
+ } else {
141
+ return null;
142
+ }
143
+ }
82
144
  }
83
145
  };
84
146
  </script>
@@ -95,6 +157,7 @@ export default {
95
157
  <Banner
96
158
  v-if="showIpv6Warning"
97
159
  color="warning"
160
+ data-testid="network-tab-ipv6StackPreferenceWarning"
98
161
  >
99
162
  {{ t('cluster.rke2.address.ipv6.warning') }}
100
163
  </Banner>
@@ -210,5 +273,30 @@ export default {
210
273
  @caCerts-changed="$emit('ca-certs-changed', $event)"
211
274
  @local-cluster-auth-endpoint-changed="$emit('local-cluster-auth-endpoint-changed', $event)"
212
275
  />
276
+
277
+ <h3
278
+ v-t="'cluster.rke2.stackPreference.label'"
279
+ class="mt-20"
280
+ />
281
+ <t
282
+ k="cluster.rke2.stackPreference.description"
283
+ raw
284
+ class="text-muted"
285
+ />
286
+ <div class="ro mt-10 mb-20">
287
+ <div class="col span-3">
288
+ <LabeledSelect
289
+ :key="hasSomeIpv6Pools"
290
+ :value="localValue?.spec?.rkeConfig?.networking?.stackPreference || STACK_PREFS.IPV4"
291
+ :mode="mode"
292
+ :options="stackPreferenceOptions"
293
+ :rules="[stackPreferenceValidator]"
294
+ data-testid="network-tab-stackpreferences"
295
+ :require-dirty="false"
296
+ @selecting="e=>$emit('stack-preference-changed', e)"
297
+ @update:validation="e=>$emit('validationChanged', e)"
298
+ />
299
+ </div>
300
+ </div>
213
301
  </div>
214
302
  </template>
@@ -485,7 +485,7 @@ export default {
485
485
  v-else
486
486
  :side-tabs="true"
487
487
  :use-hash="useTabbedHash"
488
- default-tab="data"
488
+ :default-tab="defaultTab || 'data'"
489
489
  >
490
490
  <Tab
491
491
  name="data"
package/edit/service.vue CHANGED
@@ -272,10 +272,14 @@ export default {
272
272
 
273
273
  async loadPods() {
274
274
  try {
275
- const hash = {
276
- provClusters: this.$store.dispatch('management/findAll', { type: CAPI.RANCHER_CLUSTER }),
277
- harvesterConfigs: this.$store.dispatch(`management/findAll`, { type: HCI.HARVESTER_CONFIG }),
278
- };
275
+ const hash = {};
276
+
277
+ if (this.$store.getters[`management/canList`](CAPI.RANCHER_CLUSTER)) {
278
+ hash.provClusters = this.$store.dispatch('management/findAll', { type: CAPI.RANCHER_CLUSTER });
279
+ }
280
+ if (this.$store.getters[`management/canList`](HCI.HARVESTER_CONFIG)) {
281
+ hash.harvesterConfigs = this.$store.dispatch(`management/findAll`, { type: HCI.HARVESTER_CONFIG });
282
+ }
279
283
 
280
284
  await allHash(hash);
281
285
  this.updateMatchingPods();
@@ -347,6 +351,7 @@ export default {
347
351
  <Tabbed
348
352
  :side-tabs="true"
349
353
  :use-hash="useTabbedHash"
354
+ :default-tab="defaultTab"
350
355
  >
351
356
  <Tab
352
357
  v-if="checkTypeIs('ExternalName')"
@@ -145,6 +145,7 @@ export default {
145
145
  <Tabbed
146
146
  :side-tabs="true"
147
147
  :use-hash="useTabbedHash"
148
+ :default-tab="defaultTab"
148
149
  >
149
150
  <Tab
150
151
  name="data"
@@ -240,6 +240,7 @@ export default {
240
240
  <Tabbed
241
241
  :side-tabs="true"
242
242
  :use-hash="useTabbedHash"
243
+ :default-tab="defaultTab"
243
244
  >
244
245
  <Tab
245
246
  name="parameters"
@@ -152,9 +152,10 @@ export default {
152
152
  ref="containersTabbed"
153
153
  class="deployment-tabs"
154
154
  :show-tabs-add-remove="true"
155
- :default-tab="defaultTab"
155
+ :default-tab="defaultTab || defaultWorkloadTab"
156
156
  :flat="true"
157
157
  :use-hash="useTabbedHash"
158
+
158
159
  data-testid="workload-horizontal-tabs"
159
160
  @changed="changed"
160
161
  >
@@ -292,7 +292,7 @@ export default {
292
292
  return { general: this.fvGetPathErrors(['image'])?.length > 0 };
293
293
  },
294
294
 
295
- defaultTab() {
295
+ defaultWorkloadTab() {
296
296
  if (!!this.$route.query.sidecar || this.$route.query.init || this.mode === _CREATE) {
297
297
  const container = this.allContainers.find((c) => c.__active);
298
298
 
@@ -1,5 +1,5 @@
1
1
  <script>
2
- import NuxtLoading from '@shell/components/nav/GlobalLoading.vue';
2
+ import GlobalLoading from '@shell/components/nav/GlobalLoading.vue';
3
3
 
4
4
  import '@shell/assets/styles/app.scss';
5
5
 
@@ -55,12 +55,12 @@ export default {
55
55
  },
56
56
  },
57
57
 
58
- components: { NuxtLoading }
58
+ components: { GlobalLoading }
59
59
  };
60
60
  </script>
61
61
  <template>
62
- <div id="__nuxt">
63
- <NuxtLoading ref="loading" />
62
+ <div id="__root">
63
+ <GlobalLoading ref="loading" />
64
64
  <div
65
65
  id="__layout"
66
66
  >
@@ -11,6 +11,7 @@ import positiveIntNumberDirective from '@shell/directives/positive-int-number.js
11
11
  import trimWhitespaceDirective from '@shell/directives/trim-whitespace';
12
12
  import intNumberDirective from '@shell/directives/int-number';
13
13
  import htmlStrippedAriaLabelDirective from '@shell/directives/strip-html-aria-label';
14
+ import uiContextDirective from '@shell/directives/ui-context';
14
15
 
15
16
  /**
16
17
  * Prevent extensions from overriding existing directives
@@ -49,6 +50,7 @@ function addDirectives(vueApp) {
49
50
  vueApp.directive('intNumber', intNumberDirective);
50
51
  vueApp.directive('positiveIntNumber', positiveIntNumberDirective);
51
52
  vueApp.directive('stripped-aria-label', htmlStrippedAriaLabelDirective);
53
+ vueApp.directive('ui-context', uiContextDirective);
52
54
  }
53
55
 
54
56
  /**
@@ -17,7 +17,7 @@ import axiosShell from '@shell/plugins/axios';
17
17
  import codeMirror from '@shell/plugins/codemirror-loader';
18
18
  import { InstallCodeMirror } from 'codemirror-editor-vue3';
19
19
  import * as intNumber from '@shell/directives/int-number';
20
- import nuxtClientInit from '@shell/plugins/nuxt-client-init';
20
+ import dashboardClientInit from '@shell/plugins/dashboard-client-init';
21
21
  import plugin from '@shell/plugins/plugin';
22
22
  import plugins from '@shell/core/plugins.js';
23
23
  import pluginsLoader from '@shell/core/plugins-loader.js';
@@ -30,6 +30,8 @@ import internalApiPlugin from '@shell/plugins/internal-api';
30
30
  import 'floating-vue/dist/style.css';
31
31
  import { floatingVueOptions } from '@shell/plugins/floating-vue';
32
32
 
33
+ import dynamicContent from '@shell/plugins/dynamic-content';
34
+
33
35
  export async function installPlugins(vueApp) {
34
36
  vueApp.use(globalFormatters);
35
37
  vueApp.use(PortalVue);
@@ -46,7 +48,22 @@ export async function installPlugins(vueApp) {
46
48
  }
47
49
 
48
50
  export async function installInjectedPlugins(app, vueApp) {
49
- const pluginDefinitions = [config, axios, plugins, pluginsLoader, axiosShell, intNumber, codeMirror, nuxtClientInit, replaceAll, plugin, steveCreateWorker, emberCookie, internalApiPlugin];
51
+ const pluginDefinitions = [
52
+ config,
53
+ axios,
54
+ plugins,
55
+ pluginsLoader,
56
+ axiosShell,
57
+ intNumber,
58
+ codeMirror,
59
+ dashboardClientInit,
60
+ replaceAll,
61
+ plugin,
62
+ steveCreateWorker,
63
+ emberCookie,
64
+ internalApiPlugin,
65
+ dynamicContent,
66
+ ];
50
67
 
51
68
  const installations = pluginDefinitions.map(async(pluginDefinition) => {
52
69
  if (typeof pluginDefinition === 'function') {
@@ -199,7 +199,7 @@ export default {
199
199
  }
200
200
 
201
201
  // Filter in if this cluster
202
- if (metadata.namespace.startsWith(this.currentCluster.id)) {
202
+ if (metadata.namespace?.startsWith(this.currentCluster.id)) {
203
203
  return true;
204
204
  }
205
205
 
@@ -10,6 +10,8 @@ import { mapFeature, HARVESTER as HARVESTER_FEATURE } from '@shell/store/feature
10
10
  import { NAME as EXPLORER } from '@shell/config/product/explorer';
11
11
  import ResourceFetch from '@shell/mixins/resource-fetch';
12
12
  import { BadgeState } from '@components/BadgeState';
13
+ import { isAutoscalerFeatureFlagEnabled } from '@shell/utils/autoscaler-utils';
14
+ import { AUTOSCALER_ENABLED } from '@shell/config/table-headers';
13
15
 
14
16
  export default {
15
17
  components: {
@@ -153,6 +155,16 @@ export default {
153
155
  return this.filteredRows.some((c) => c.metadata.namespace !== 'fleet-local' && c.metadata.namespace !== 'fleet-default');
154
156
  },
155
157
 
158
+ headers() {
159
+ const headers = this.$store.getters['type-map/headersFor'](this.schema);
160
+
161
+ if (isAutoscalerFeatureFlagEnabled(this.$store)) {
162
+ headers.splice(-3, 0, AUTOSCALER_ENABLED);
163
+ }
164
+
165
+ return headers;
166
+ }
167
+
156
168
  },
157
169
 
158
170
  $loadingResources() {
@@ -201,7 +213,8 @@ export default {
201
213
  </Masthead>
202
214
 
203
215
  <ResourceTable
204
- :schema="schema"
216
+ :headers="headers"
217
+ :table-actions="true"
205
218
  :rows="filteredRows"
206
219
  :namespaced="nonStandardNamespaces"
207
220
  :loading="loading"
@@ -237,7 +250,7 @@ export default {
237
250
  </template>
238
251
  <template #cell:explorer="{row}">
239
252
  <router-link
240
- v-if="row.mgmt && row.mgmt.isReady && !row.hasError"
253
+ v-if="row.canExplore"
241
254
  data-testid="cluster-manager-list-explore-management"
242
255
  class="btn btn-sm role-secondary"
243
256
  :to="{name: 'c-cluster', params: {cluster: row.mgmt.id}}"
@@ -10,20 +10,22 @@ import { RadioGroup } from '@components/Form/Radio';
10
10
  import { Checkbox } from '@components/Form/Checkbox';
11
11
  import { NORMAN } from '@shell/config/types';
12
12
  import { allHash } from '@shell/utils/promise';
13
- import { addObject, addObjects, findBy } from '@shell/utils/array';
14
13
  import { convertStringToKV, convertKVToString } from '@shell/utils/object';
15
14
  import { sortBy } from '@shell/utils/sort';
16
15
  import { stringify, exceptionToErrorsArray } from '@shell/utils/error';
16
+ import EC2Networking from './components/EC2Networking.vue';
17
17
 
18
18
  const DEFAULT_GROUP = 'rancher-nodes';
19
19
 
20
20
  export default {
21
21
  components: {
22
- Banner, Loading, LabeledInput, LabeledSelect, Checkbox, RadioGroup, UnitInput, KeyValue
22
+ Banner, Loading, LabeledInput, LabeledSelect, Checkbox, RadioGroup, UnitInput, KeyValue, EC2Networking,
23
23
  },
24
24
 
25
25
  mixins: [CreateEditView],
26
26
 
27
+ emits: ['validationChanged', 'update:hasIpv6'],
28
+
27
29
  props: {
28
30
  uuid: {
29
31
  type: String,
@@ -44,6 +46,21 @@ export default {
44
46
  type: Boolean,
45
47
  default: false
46
48
  },
49
+
50
+ hasIpv6: {
51
+ type: Boolean,
52
+ default: false
53
+ },
54
+
55
+ machinePools: {
56
+ type: Array,
57
+ default: () => []
58
+ },
59
+
60
+ poolCreateMode: {
61
+ type: Boolean,
62
+ default: true
63
+ },
47
64
  },
48
65
 
49
66
  async fetch() {
@@ -108,7 +125,6 @@ export default {
108
125
  this.value['instanceType'] = this.$store.getters['aws/defaultInstanceType'];
109
126
  }
110
127
 
111
- this.initNetwork();
112
128
  this.initTags();
113
129
 
114
130
  if ( !this.value.securityGroup?.length ) {
@@ -204,65 +220,6 @@ export default {
204
220
  }).sort();
205
221
  },
206
222
 
207
- networkOptions() {
208
- if ( !this.vpcInfo || !this.subnetInfo ) {
209
- return [];
210
- }
211
-
212
- let vpcs = [];
213
- const subnetsByVpc = {};
214
-
215
- for ( const obj of this.vpcInfo.Vpcs ) {
216
- const name = obj.Tags && obj.Tags?.length ? obj.Tags.find((t) => t.Key === 'Name')?.Value : null;
217
-
218
- vpcs.push({
219
- label: name || obj.VpcId,
220
- subLabel: name ? obj.VpcId : obj.CidrBlock,
221
- isDefault: obj.IsDefault || false,
222
- kind: 'vpc',
223
- value: obj.VpcId,
224
- });
225
- }
226
-
227
- vpcs = sortBy(vpcs, ['isDefault:desc', 'label']);
228
-
229
- for ( const obj of this.subnetInfo.Subnets ) {
230
- if ( obj.AvailabilityZone !== `${ this.value.region }${ this.value.zone }` ) {
231
- continue;
232
- }
233
-
234
- let entry = subnetsByVpc[obj.VpcId];
235
-
236
- if ( !entry ) {
237
- entry = [];
238
- subnetsByVpc[obj.VpcId] = entry;
239
- }
240
-
241
- const name = obj.Tags && obj.Tags?.length ? obj.Tags.find((t) => t.Key === 'Name')?.Value : null;
242
-
243
- entry.push({
244
- label: name || obj.SubnetId,
245
- subLabel: name ? obj.SubnetId : obj.CidrBlock,
246
- kind: 'subnet',
247
- isDefault: obj.DefaultForAz || false,
248
- value: obj.SubnetId,
249
- vpcId: obj.VpcId,
250
- });
251
- }
252
-
253
- const out = [];
254
-
255
- for ( const obj of vpcs ) {
256
- addObject(out, obj);
257
-
258
- if ( subnetsByVpc[obj.value] ) {
259
- addObjects(out, sortBy(subnetsByVpc[obj.value], ['isDefault:desc', 'label']));
260
- }
261
- }
262
-
263
- return out;
264
- },
265
-
266
223
  securityGroupOptions() {
267
224
  if ( !this.securityGroupInfo ) {
268
225
  return [];
@@ -304,7 +261,6 @@ export default {
304
261
  },
305
262
 
306
263
  'value.region'() {
307
- this.updateNetwork();
308
264
  this.$fetch();
309
265
  },
310
266
 
@@ -320,34 +276,6 @@ export default {
320
276
  methods: {
321
277
  stringify,
322
278
 
323
- initNetwork() {
324
- const id = this.value.subnetId || this.value.vpcId;
325
-
326
- this.selectedNetwork = id;
327
- },
328
-
329
- updateNetwork(value) {
330
- let obj;
331
-
332
- if ( value ) {
333
- obj = findBy(this.networkOptions, 'value', value);
334
- }
335
-
336
- if ( obj?.kind === 'subnet' ) {
337
- this.value.subnetId = value;
338
- this.value.vpcId = obj.vpcId;
339
- this.selectedNetwork = value;
340
- } else if ( obj ) {
341
- this.value.subnetId = null;
342
- this.value.vpcId = value;
343
- this.selectedNetwork = value;
344
- } else {
345
- this.value.subnetId = null;
346
- this.value.vpcId = null;
347
- this.selectedNetwork = null;
348
- }
349
- },
350
-
351
279
  initTags() {
352
280
  this.tags = convertStringToKV(this.value.tags);
353
281
  },
@@ -359,7 +287,7 @@ export default {
359
287
  test() {
360
288
  const errors = [];
361
289
 
362
- if (!this.selectedNetwork) {
290
+ if (!this.value.subnetId && !this.value.vpcId) {
363
291
  errors.push(this.t('validation.required', { key: 'VPC/Subnet' }, true));
364
292
  }
365
293
 
@@ -443,28 +371,29 @@ export default {
443
371
  />
444
372
  </div>
445
373
  </div>
374
+
375
+ <EC2Networking
376
+ :key="value.region"
377
+ v-model:enable-primary-ipv6="value.enablePrimaryIpv6"
378
+ v-model:ipv6-address-count="value.ipv6AddressCount"
379
+ v-model:ipv6-address-only="value.ipv6AddressOnly"
380
+ v-model:http-protocol-ipv6="value.httpProtocolIpv6"
381
+ v-model:vpc-id="value.vpcId"
382
+ v-model:subnet-id="value.subnetId"
383
+ :mode="mode"
384
+ :vpc-info="vpcInfo"
385
+ :subnet-info="subnetInfo"
386
+ :zone="value.zone"
387
+ :region="value.region"
388
+ :machine-pools="machinePools"
389
+ :has-ipv6="hasIpv6"
390
+ :disabled="disabled"
391
+ :is-new="poolCreateMode"
392
+ @update:has-ipv6="e=>$emit('update:hasIpv6', e)"
393
+ @validation-changed="e=>$emit('validationChanged',e)"
394
+ />
395
+
446
396
  <div class="row mt-20 mb-20">
447
- <div class="col span-6">
448
- <LabeledSelect
449
- :mode="mode"
450
- :value="selectedNetwork"
451
- :options="networkOptions"
452
- :searchable="true"
453
- :required="true"
454
- :disabled="disabled"
455
- :placeholder="t('cluster.machineConfig.amazonEc2.selectedNetwork.placeholder')"
456
- :label="t('cluster.machineConfig.amazonEc2.selectedNetwork.label')"
457
- data-testid="amazonEc2__selectedNetwork"
458
- option-key="value"
459
- @update:value="updateNetwork($event)"
460
- >
461
- <template v-slot:option="opt">
462
- <div :class="{'vpc': opt.kind === 'vpc', 'vpc-subnet': opt.kind !== 'vpc'}">
463
- <span class="vpc-name">{{ opt.label }}</span><span class="vpc-info">{{ opt.subLabel }}</span>
464
- </div>
465
- </template>
466
- </LabeledSelect>
467
- </div>
468
397
  <div class="col span-6">
469
398
  <LabeledInput
470
399
  v-model:value="value.iamInstanceProfile"
@@ -476,7 +405,6 @@ export default {
476
405
  />
477
406
  </div>
478
407
  </div>
479
-
480
408
  <portal :to="'advanced-'+uuid">
481
409
  <div class="row mt-20">
482
410
  <div class="col span-6">
@@ -658,24 +586,3 @@ export default {
658
586
  </template>
659
587
  </div>
660
588
  </template>
661
- <style scoped lang="scss">
662
- .vpc, .vpc-subnet {
663
- display: flex;
664
- line-height: 30px;
665
-
666
- .vpc-name {
667
- font-weight: bold;
668
- flex: 1;
669
- }
670
-
671
- .vpc-info {
672
- font-size: 12px;
673
- opacity: 0.7;
674
- }
675
- }
676
-
677
- .vpc-subnet .vpc-name {
678
- font-weight: normal;
679
- padding-left: 15px;
680
- }
681
- </style>
@@ -35,7 +35,7 @@ const defaultConfig = {
35
35
  dns: '',
36
36
  environment: 'AzurePublicCloud',
37
37
  faultDomainCount: '3',
38
- image: 'canonical:UbuntuServer:18.04-LTS:latest',
38
+ image: 'canonical:ubuntu-24_04-lts:server-gen1:latest',
39
39
  location: 'westus',
40
40
  managedDisks: false,
41
41
  noPublicIp: false,