diff --git a/packages/manager/.changeset/pr-10858-changed-1725914163062.md b/packages/manager/.changeset/pr-10858-changed-1725914163062.md
new file mode 100644
index 00000000000..578b70a3494
--- /dev/null
+++ b/packages/manager/.changeset/pr-10858-changed-1725914163062.md
@@ -0,0 +1,5 @@
+---
+"@linode/manager": Changed
+---
+
+Move Region section above Images in Linode Create and update default OS to Ubuntu 24.04 LTS ([#10858](https://github.com/linode/manager/pull/10858))
diff --git a/packages/manager/cypress/e2e/core/linodes/create-linode-mobile.spec.ts b/packages/manager/cypress/e2e/core/linodes/create-linode-mobile.spec.ts
index 1cc4bfa5f59..608791634f8 100644
--- a/packages/manager/cypress/e2e/core/linodes/create-linode-mobile.spec.ts
+++ b/packages/manager/cypress/e2e/core/linodes/create-linode-mobile.spec.ts
@@ -29,7 +29,7 @@ describe('Linode create mobile smoke', () => {
cy.viewport(viewport.width, viewport.height);
cy.visitWithLogin('/linodes/create');
- linodeCreatePage.selectImage('Debian 11');
+ linodeCreatePage.selectImage('Ubuntu 24.04 LTS');
linodeCreatePage.selectRegionById(mockLinodeRegion.id);
linodeCreatePage.selectPlanCard('Shared CPU', 'Nanode 1 GB');
linodeCreatePage.setLabel(mockLinode.label);
@@ -39,7 +39,7 @@ describe('Linode create mobile smoke', () => {
.scrollIntoView()
.within(() => {
cy.findByText('Nanode 1 GB').should('be.visible');
- cy.findByText('Debian 11').should('be.visible');
+ cy.findByText('Ubuntu 24.04 LTS').should('be.visible');
cy.findByText(mockLinodeRegion.label).should('be.visible');
});
@@ -52,7 +52,7 @@ describe('Linode create mobile smoke', () => {
cy.wait('@createLinode').then((xhr) => {
const requestBody = xhr.request.body;
- expect(requestBody['image']).to.equal('linode/debian11');
+ expect(requestBody['image']).to.equal('linode/ubuntu24.04');
expect(requestBody['label']).to.equal(mockLinode.label);
expect(requestBody['region']).to.equal(mockLinodeRegion.id);
expect(requestBody['type']).to.equal('g6-nanode-1');
diff --git a/packages/manager/cypress/e2e/core/linodes/create-linode-view-code-snippet.spec.ts b/packages/manager/cypress/e2e/core/linodes/create-linode-view-code-snippet.spec.ts
index 8cbe3a649e3..4df65bffb9c 100644
--- a/packages/manager/cypress/e2e/core/linodes/create-linode-view-code-snippet.spec.ts
+++ b/packages/manager/cypress/e2e/core/linodes/create-linode-view-code-snippet.spec.ts
@@ -214,7 +214,7 @@ describe('Create Linode', () => {
cy.findByLabelText('Linode Label').should(
'have.value',
- `debian-${linodeRegion.id}`
+ `ubuntu-${linodeRegion.id}`
);
cy.findByLabelText('Linode Label')
diff --git a/packages/manager/cypress/e2e/core/linodes/linode-storage.spec.ts b/packages/manager/cypress/e2e/core/linodes/linode-storage.spec.ts
index 9403d258e72..4172c5d0414 100644
--- a/packages/manager/cypress/e2e/core/linodes/linode-storage.spec.ts
+++ b/packages/manager/cypress/e2e/core/linodes/linode-storage.spec.ts
@@ -110,7 +110,7 @@ describe('linode storage tab', () => {
});
it('try to delete in use disk', () => {
- const diskName = 'Debian 11 Disk';
+ const diskName = 'Ubuntu 24.04 LTS Disk';
cy.defer(() => createTestLinode({ booted: true })).then((linode) => {
interceptDeleteDisks(linode.id).as('deleteDisk');
cy.visitWithLogin(`linodes/${linode.id}/storage`);
diff --git a/packages/manager/cypress/e2e/core/linodes/resize-linode.spec.ts b/packages/manager/cypress/e2e/core/linodes/resize-linode.spec.ts
index d3ab5c2bd09..59137de9022 100644
--- a/packages/manager/cypress/e2e/core/linodes/resize-linode.spec.ts
+++ b/packages/manager/cypress/e2e/core/linodes/resize-linode.spec.ts
@@ -122,7 +122,7 @@ describe('resize linode', () => {
{ securityMethod: 'vlan_no_internet' }
)
).then((linode) => {
- const diskName = 'Debian 11 Disk';
+ const diskName = 'Ubuntu 24.04 LTS Disk';
const size = '50000'; // 50 GB
// Error flow when attempting to resize a linode to a smaller size without
diff --git a/packages/manager/cypress/e2e/core/oneClickApps/one-click-apps.spec.ts b/packages/manager/cypress/e2e/core/oneClickApps/one-click-apps.spec.ts
index a6961e86709..36c19f5b5cf 100644
--- a/packages/manager/cypress/e2e/core/oneClickApps/one-click-apps.spec.ts
+++ b/packages/manager/cypress/e2e/core/oneClickApps/one-click-apps.spec.ts
@@ -133,7 +133,7 @@ describe('OneClick Apps (OCA)', () => {
description: 'Minecraft OCA',
ordinal: 10,
logo_url: 'assets/Minecraft.svg',
- images: ['linode/debian11', 'linode/ubuntu22.04'],
+ images: ['linode/debian11', 'linode/ubuntu24.04'],
deployments_total: 18854,
deployments_active: 412,
is_public: true,
diff --git a/packages/manager/cypress/e2e/core/stackscripts/smoke-community-stackscripts.spec.ts b/packages/manager/cypress/e2e/core/stackscripts/smoke-community-stackscripts.spec.ts
index 26453578d7b..4ae8be80f21 100644
--- a/packages/manager/cypress/e2e/core/stackscripts/smoke-community-stackscripts.spec.ts
+++ b/packages/manager/cypress/e2e/core/stackscripts/smoke-community-stackscripts.spec.ts
@@ -43,7 +43,7 @@ const mockStackScripts: StackScript[] = [
'linode/rocky8',
'linode/debian11',
'linode/centos-stream9',
- 'linode/ubuntu22.04',
+ 'linode/ubuntu24.04',
'linode/almalinux9',
'linode/rocky9',
],
diff --git a/packages/manager/cypress/support/util/linodes.ts b/packages/manager/cypress/support/util/linodes.ts
index 9bbe9ad4b9f..2c6bca8da83 100644
--- a/packages/manager/cypress/support/util/linodes.ts
+++ b/packages/manager/cypress/support/util/linodes.ts
@@ -108,7 +108,7 @@ export const createTestLinode = async (
const resolvedCreatePayload = {
...createLinodeRequestFactory.build({
booted: false,
- image: 'linode/debian11',
+ image: 'linode/ubuntu24.04',
label: randomLabel(),
region: chooseRegion().id,
}),
diff --git a/packages/manager/src/features/Linodes/LinodeCreatev2/Region.tsx b/packages/manager/src/features/Linodes/LinodeCreatev2/Region.tsx
index fb9d1002e3a..da792c73378 100644
--- a/packages/manager/src/features/Linodes/LinodeCreatev2/Region.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreatev2/Region.tsx
@@ -41,7 +41,7 @@ import {
import type { LinodeCreateFormValues } from './utilities';
import type { Region as RegionType } from '@linode/api-v4';
-export const Region = () => {
+export const Region = React.memo(() => {
const {
isDiskEncryptionFeatureEnabled,
} = useIsDiskEncryptionFeatureEnabled();
@@ -267,4 +267,4 @@ export const Region = () => {
)}
);
-};
+});
diff --git a/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/Clone/Clone.tsx b/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/Clone/Clone.tsx
index 0bf8cc097b3..9b4956dc0cf 100644
--- a/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/Clone/Clone.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/Clone/Clone.tsx
@@ -3,18 +3,22 @@ import React from 'react';
import { Paper } from 'src/components/Paper';
import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
+import { Region } from 'src/features/Linodes/LinodeCreatev2/Region';
import { LinodeSelectTable } from '../../shared/LinodeSelectTable';
import { CloneWarning } from './CloneWarning';
export const Clone = () => {
return (
-
-
- Select Linode to Clone From
-
-
-
-
+
+
+
+ Select Linode to Clone From
+
+
+
+
+
+
);
};
diff --git a/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/Images.tsx b/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/Images.tsx
index bed5a6a0faf..3f68fcd9b6a 100644
--- a/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/Images.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/Images.tsx
@@ -12,6 +12,7 @@ import { Paper } from 'src/components/Paper';
import { Placeholder } from 'src/components/Placeholder/Placeholder';
import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
+import { Region } from 'src/features/Linodes/LinodeCreatev2/Region';
import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck';
import { useAllImagesQuery } from 'src/queries/images';
import { useRegionsQuery } from 'src/queries/regions/regions';
@@ -95,27 +96,30 @@ export const Images = () => {
}
return (
-
- Choose an Image
-
-
- {showDistributedCapabilityNotice && (
-
-
-
- Indicates compatibility with distributed compute regions.
-
-
- )}
-
-
+
+
+
+ Choose an Image
+
+
+ {showDistributedCapabilityNotice && (
+
+
+
+ Indicates compatibility with distributed compute regions.
+
+
+ )}
+
+
+
);
};
diff --git a/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/Marketplace/Marketplace.tsx b/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/Marketplace/Marketplace.tsx
index dab314f8e03..4b90214c62e 100644
--- a/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/Marketplace/Marketplace.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/Marketplace/Marketplace.tsx
@@ -1,6 +1,7 @@
import React, { useState } from 'react';
import { Stack } from 'src/components/Stack';
+import { Region } from 'src/features/Linodes/LinodeCreatev2/Region';
import { StackScriptImages } from '../StackScripts/StackScriptImages';
import { UserDefinedFields } from '../StackScripts/UserDefinedFields/UserDefinedFields';
@@ -18,6 +19,7 @@ export const Marketplace = () => {
+
setDrawerStackScriptId(undefined)}
diff --git a/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/OperatingSystems.tsx b/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/OperatingSystems.tsx
index ec3b526fc33..79a97d4b303 100644
--- a/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/OperatingSystems.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/OperatingSystems.tsx
@@ -4,7 +4,9 @@ import { useController, useFormContext } from 'react-hook-form';
import { ImageSelectv2 } from 'src/components/ImageSelectv2/ImageSelectv2';
import { Paper } from 'src/components/Paper';
+import { Stack } from 'src/components/Stack';
import { Typography } from 'src/components/Typography';
+import { Region } from 'src/features/Linodes/LinodeCreatev2/Region';
import { useRestrictedGlobalGrantCheck } from 'src/hooks/useRestrictedGlobalGrantCheck';
import { getGeneratedLinodeLabel } from '../utilities';
@@ -45,18 +47,21 @@ export const OperatingSystems = () => {
};
return (
-
- Choose an OS
-
-
+
+
+
+ Choose an OS
+
+
+
);
};
diff --git a/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/StackScripts/StackScripts.tsx b/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/StackScripts/StackScripts.tsx
index 3df32c14ba2..8221c739745 100644
--- a/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/StackScripts/StackScripts.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreatev2/Tabs/StackScripts/StackScripts.tsx
@@ -1,6 +1,7 @@
import React from 'react';
import { Stack } from 'src/components/Stack';
+import { Region } from 'src/features/Linodes/LinodeCreatev2/Region';
import { StackScriptImages } from './StackScriptImages';
import { StackScriptSelection } from './StackScriptSelection';
@@ -11,6 +12,7 @@ export const StackScripts = () => {
+
);
diff --git a/packages/manager/src/features/Linodes/LinodeCreatev2/index.tsx b/packages/manager/src/features/Linodes/LinodeCreatev2/index.tsx
index e3dde917e42..52476730937 100644
--- a/packages/manager/src/features/Linodes/LinodeCreatev2/index.tsx
+++ b/packages/manager/src/features/Linodes/LinodeCreatev2/index.tsx
@@ -35,7 +35,6 @@ import { EUAgreement } from './EUAgreement';
import { Firewall } from './Firewall';
import { FirewallAuthorization } from './FirewallAuthorization';
import { Plan } from './Plan';
-import { Region } from './Region';
import { getLinodeCreateResolver } from './resolvers';
import { Security } from './Security';
import { SMTP } from './SMTP';
@@ -225,7 +224,6 @@ export const LinodeCreatev2 = () => {
- {params.type !== 'Backups' && }
{params.type !== 'Clone Linode' && }
diff --git a/packages/manager/src/features/Linodes/LinodeCreatev2/utilities.ts b/packages/manager/src/features/Linodes/LinodeCreatev2/utilities.ts
index 5679f43bc84..c227d2c0a15 100644
--- a/packages/manager/src/features/Linodes/LinodeCreatev2/utilities.ts
+++ b/packages/manager/src/features/Linodes/LinodeCreatev2/utilities.ts
@@ -28,7 +28,7 @@ import type { FieldErrors } from 'react-hook-form';
/**
* This is the ID of the Image of the default OS.
*/
-const DEFAULT_OS = 'linode/debian11';
+const DEFAULT_OS = 'linode/ubuntu24.04';
/**
* This interface is used to type the query params on the Linode Create flow.
diff --git a/packages/manager/src/features/Linodes/LinodesCreate/AddonsPanel.test.tsx b/packages/manager/src/features/Linodes/LinodesCreate/AddonsPanel.test.tsx
index 37c33a7ed0d..92bbcbc398d 100644
--- a/packages/manager/src/features/Linodes/LinodesCreate/AddonsPanel.test.tsx
+++ b/packages/manager/src/features/Linodes/LinodesCreate/AddonsPanel.test.tsx
@@ -107,7 +107,7 @@ const props: AddonsPanelProps = {
group: '',
hypervisor: 'kvm',
id: 45329311,
- image: 'linode/debian11',
+ image: 'linode/ubuntu24.04',
ipv4: ['192.168.139.183', '139.144.17.202'],
ipv6: '2600:3c04::f03c:93ff:fe75:0612/128',
label: 'debian-ca-central',
diff --git a/packages/manager/src/features/Linodes/LinodesCreate/ApiAwarenessModal/IntegrationsTabPanel.test.tsx b/packages/manager/src/features/Linodes/LinodesCreate/ApiAwarenessModal/IntegrationsTabPanel.test.tsx
index 91d86d43265..b62fdd695a5 100644
--- a/packages/manager/src/features/Linodes/LinodesCreate/ApiAwarenessModal/IntegrationsTabPanel.test.tsx
+++ b/packages/manager/src/features/Linodes/LinodesCreate/ApiAwarenessModal/IntegrationsTabPanel.test.tsx
@@ -11,7 +11,7 @@ import type { IntegrationsTabPanelProps } from './IntegrationsTabPanel';
const defaultProps: IntegrationsTabPanelProps = {
payLoad: {
- image: 'linode/debian11',
+ image: 'linode/ubuntu24.04',
label: 'debian-us-ord-001',
region: 'us-ord',
root_pass: 'testpassword',
diff --git a/packages/manager/src/features/Linodes/LinodesCreate/ApiAwarenessModal/SDKTabPanel.test.tsx b/packages/manager/src/features/Linodes/LinodesCreate/ApiAwarenessModal/SDKTabPanel.test.tsx
index e6a734363d7..036a8726bdd 100644
--- a/packages/manager/src/features/Linodes/LinodesCreate/ApiAwarenessModal/SDKTabPanel.test.tsx
+++ b/packages/manager/src/features/Linodes/LinodesCreate/ApiAwarenessModal/SDKTabPanel.test.tsx
@@ -11,7 +11,7 @@ import type { SDKTabPanelProps } from './SDKTabPanel';
const defaultProps: SDKTabPanelProps = {
payLoad: {
- image: 'linode/debian11',
+ image: 'linode/ubuntu24.04',
label: 'debian-us-ord-001',
region: 'us-ord',
root_pass: 'testpassword',
diff --git a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx
index a22ee2d6371..edcecffe224 100644
--- a/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx
+++ b/packages/manager/src/features/Linodes/LinodesCreate/LinodeCreateContainer.tsx
@@ -91,7 +91,7 @@ import type { MapState } from 'src/store/types';
import type { ExtendedType } from 'src/utilities/extendType';
import type { ExtendedIP } from 'src/utilities/ipUtils';
-const DEFAULT_IMAGE = 'linode/debian11';
+const DEFAULT_IMAGE = 'linode/ubuntu24.04';
interface State {
additionalIPv4RangesForVPC: ExtendedIP[];
diff --git a/packages/manager/src/store/image/image.helpers.test.ts b/packages/manager/src/store/image/image.helpers.test.ts
index c56bc961f1b..296313cb9ea 100644
--- a/packages/manager/src/store/image/image.helpers.test.ts
+++ b/packages/manager/src/store/image/image.helpers.test.ts
@@ -8,6 +8,6 @@ describe('isLinodeKubeImageId', () => {
expect(isLinodeKubeImageId('linode/alpine3.15')).toBe(false);
});
it('should be true if the image is a linode kube image', () => {
- expect(isLinodeKubeImageId('linode/debian11-kube-v1.23.4')).toBe(true);
+ expect(isLinodeKubeImageId('linode/ubuntu24.04-kube-v1.23.4')).toBe(true);
});
});
diff --git a/packages/manager/src/store/image/image.helpers.ts b/packages/manager/src/store/image/image.helpers.ts
index 19228e7c1ea..19e0362f62a 100644
--- a/packages/manager/src/store/image/image.helpers.ts
+++ b/packages/manager/src/store/image/image.helpers.ts
@@ -24,7 +24,7 @@ export const filterImagesByType = (
* LKE (Linode Kubernetes Engine) image. In Cloud Manager, we hide
* these images from the user.
*
- * Image IDs are in the form linode/debian11 or private/15943292
+ * Image IDs are in the form linode/ubuntu24.04 or private/15943292
*
* @param {string | null} id the image's id (unlike most entities, image ids are string)
* @returns {boolean} true if the image is an LKE image