diff --git a/packages/manager/.changeset/pr-13253-changed-1767795144176.md b/packages/manager/.changeset/pr-13253-changed-1767795144176.md new file mode 100644 index 00000000000..e9cdb2c6786 --- /dev/null +++ b/packages/manager/.changeset/pr-13253-changed-1767795144176.md @@ -0,0 +1,5 @@ +--- +"@linode/manager": Changed +--- + +Changes related to private IP field in create linode flow ([#13253](https://github.com/linode/manager/pull/13253)) diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.test.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.test.tsx index e39c3fb7e70..7055b71c46b 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.test.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.test.tsx @@ -37,4 +37,34 @@ describe('Linode Create Addons', () => { 'Backups and Private IP are not available for distributed regions.' ); }); + + it('should hide the Private IP addon if interface generation is "linode"', () => { + const { queryByText } = renderWithThemeAndHookFormContext({ + component: , + useFormOptions: { + values: { + interface_generation: 'linode', + }, + }, + }); + + const privateIPLabel = queryByText('Private IP'); + + expect(privateIPLabel).not.toBeInTheDocument(); + }); + + it('should show the Private IP addon if interface generation is not "linode"', () => { + const { queryByText } = renderWithThemeAndHookFormContext({ + component: , + useFormOptions: { + values: { + interface_generation: 'legacy_config', + }, + }, + }); + + const privateIPLabel = queryByText('Private IP'); + + expect(privateIPLabel).toBeVisible(); + }); }); diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.tsx index a8d97d19911..114468f1754 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/Addons/Addons.tsx @@ -9,7 +9,10 @@ import { PrivateIP } from './PrivateIP'; import type { CreateLinodeRequest } from '@linode/api-v4'; export const Addons = () => { - const regionId = useWatch({ name: 'region' }); + const [regionId, interfaceGeneration] = useWatch< + CreateLinodeRequest, + ['region', 'interface_generation'] + >({ name: ['region', 'interface_generation'] }); const { data: regions } = useRegionsQuery(); @@ -21,6 +24,8 @@ export const Addons = () => { const isDistributedRegionSelected = selectedRegion?.site_type === 'distributed'; + const shouldShowPrivateIP = interfaceGeneration !== 'linode'; + return ( @@ -33,7 +38,7 @@ export const Addons = () => { )} } spacing={2}> - + {shouldShowPrivateIP && } diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Addons/PrivateIP.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Addons/PrivateIP.tsx index 70e7e9802fc..a1a8ca2876a 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/Addons/PrivateIP.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/Addons/PrivateIP.tsx @@ -2,6 +2,7 @@ import { useRegionsQuery } from '@linode/queries'; import { Checkbox, FormControlLabel, + NewFeatureChip, Notice, Stack, Typography, @@ -55,9 +56,18 @@ export const PrivateIP = () => { /> )} - Use Private IP for a backend node to a NodeBalancer. Use VPC instead - for private communication between your Linodes. + Lets you connect with other Linodes in the same region over the data + center's private network, without using a public IPv4 address. + + + + + You can use VPC for private networking instead. NodeBalancers + now connect to backend nodes without a private IPv4 address. + + + } onChange={field.onChange}