Skip to content

Commit a79aaf8

Browse files
Merge pull request #13005 from linode/staging
Release v1.153.1 - staging → master
2 parents 3090640 + a8d763e commit a79aaf8

File tree

7 files changed

+51
-11
lines changed

7 files changed

+51
-11
lines changed

packages/manager/CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file.
44

55
The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/).
66

7+
8+
## [2025-10-22] - v1.153.1
9+
10+
### Fixed:
11+
12+
- VPC IP range errors not being surfaced on the Linode Create page ([#13004](https://github.com/linode/manager/pull/13004))
13+
- Unexpected VPC IPv4 auto-assign checkbox behavior on the Linode Create page ([#13004](https://github.com/linode/manager/pull/13004))
14+
- VPC Dual Stack error on the Linode Create page ([#13004](https://github.com/linode/manager/pull/13004))
15+
716
## [2025-10-21] - v1.153.0
817

918

packages/manager/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "linode-manager",
33
"author": "Linode",
44
"description": "The Linode Manager website",
5-
"version": "1.153.0",
5+
"version": "1.153.1",
66
"private": true,
77
"type": "module",
88
"bugs": {

packages/manager/src/features/Linodes/LinodeCreate/Networking/VPC.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,11 @@ export const VPC = ({ index }: Props) => {
100100
// Otherwise, just clear the selected subnet
101101
resetField(`linodeInterfaces.${index}.vpc.subnet_id`);
102102
}
103+
104+
// Clear any previously selected dual-stack values if the current vpc is not dual-stack
105+
if (isDualStackEnabled && !vpc?.ipv6) {
106+
resetField(`linodeInterfaces.${index}.vpc.ipv6`);
107+
}
103108
}}
104109
options={vpcs ?? []}
105110
placeholder="None"
@@ -145,6 +150,7 @@ export const VPC = ({ index }: Props) => {
145150
name={`linodeInterfaces.${index}.vpc.ipv4.addresses.0.address`}
146151
render={({ field, fieldState }) => (
147152
<VPCIPv4Address
153+
autoAssignValue="auto"
148154
disabled={!regionSupportsVPCs}
149155
errorMessage={
150156
fieldState.error?.message ??

packages/manager/src/features/Linodes/LinodeCreate/VPC/VPC.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,11 @@ export const VPC = () => {
158158
setValue('interfaces.0.subnet_id', null);
159159
}
160160

161+
// Clear any previously selected dual-stack values if the current vpc is not dual-stack
162+
if (isDualStackEnabled && !vpc?.ipv6) {
163+
setValue(`interfaces.0.ipv6`, undefined);
164+
}
165+
161166
// Capture analytics
162167
if (!vpc?.id) {
163168
sendLinodeCreateFormInputEvent({
@@ -232,6 +237,7 @@ export const VPC = () => {
232237
name="interfaces.0.ipv4.vpc"
233238
render={({ field, fieldState }) => (
234239
<VPCIPv4Address
240+
autoAssignValue={null}
235241
errorMessage={fieldState.error?.message}
236242
fieldValue={field.value}
237243
onChange={field.onChange}
@@ -292,11 +298,11 @@ export const VPC = () => {
292298
sx={(theme) => ({ marginTop: theme.spacingFunction(16) })}
293299
/>
294300
</Box>
295-
{formState.errors.interfaces?.[1] &&
296-
formState.errors.interfaces[1] &&
297-
'ip_ranges' in formState.errors.interfaces[1] && (
301+
{formState.errors.interfaces?.[0] &&
302+
formState.errors.interfaces[0] &&
303+
'ip_ranges' in formState.errors.interfaces[0] && (
298304
<Notice
299-
text={formState.errors.interfaces[1].ip_ranges?.message}
305+
text={formState.errors.interfaces[0].ip_ranges?.message}
300306
variant="error"
301307
/>
302308
)}

packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeInterfaces/AddInterfaceDrawer/VPC/AddVPCIPv4Address.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export const AddVPCIPv4Address = (props: Props) => {
3232
name={`vpc.ipv4.addresses.${index}.address`}
3333
render={({ field, fieldState }) => (
3434
<VPCIPv4Address
35+
autoAssignValue="auto"
3536
errorMessage={fieldState.error?.message}
3637
fieldValue={field.value}
3738
onChange={field.onChange}

packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeInterfaces/EditInterfaceDrawer/VPCInterface/EditVPCIPv4Address.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ export const EditVPCIPv4Address = (props: Props) => {
3737
name={`vpc.ipv4.addresses.${index}.address`}
3838
render={({ field, fieldState }) => (
3939
<VPCIPv4Address
40+
autoAssignValue="auto"
4041
errorMessage={fieldState.error?.message}
4142
fieldValue={field.value}
4243
ipv4Address={linodeInterface.vpc?.ipv4?.addresses[index].address}

packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/LinodeInterfaces/VPCIPv4Address.tsx

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,51 @@ import {
1313
} from 'src/features/VPCs/constants';
1414

1515
interface Props {
16+
/**
17+
* Linode Interfaces use "auto" to auto-assign IP addresses
18+
* Legacy Config Interfaces use `null` to auto-assign IP addresses
19+
*/
20+
autoAssignValue: 'auto' | null;
1621
disabled?: boolean;
1722
errorMessage?: string;
1823
fieldValue?: null | string;
1924
ipv4Address?: string;
2025
onBlur?: () => void;
21-
onChange: (ipv4Address: string) => void;
26+
onChange: (ipv4Address: null | string) => void;
2227
}
2328

2429
export const VPCIPv4Address = (props: Props) => {
25-
const { errorMessage, fieldValue, onBlur, disabled, onChange, ipv4Address } =
26-
props;
30+
const {
31+
errorMessage,
32+
fieldValue,
33+
onBlur,
34+
disabled,
35+
onChange,
36+
ipv4Address,
37+
autoAssignValue,
38+
} = props;
39+
40+
// Auto-assign should be checked if any of the following are true
41+
// - field value matches the identifier
42+
// - field value is undefined (because the API's default behavior is to auto-assign)
43+
const shouldAutoAssign = fieldValue === autoAssignValue || fieldValue === undefined;
2744

2845
return (
2946
<Stack rowGap={1}>
3047
<Stack direction="row">
3148
<FormControlLabel
32-
checked={['auto', null, undefined].includes(fieldValue)}
49+
checked={shouldAutoAssign}
3350
control={<Checkbox />}
3451
disabled={disabled}
3552
label="Auto-assign VPC IPv4"
3653
onChange={(e, checked) =>
37-
onChange(checked ? 'auto' : (ipv4Address ?? ''))
54+
onChange(checked ? autoAssignValue : (ipv4Address ?? ''))
3855
}
3956
sx={{ pl: 0.4, mr: 0 }}
4057
/>
4158
<TooltipIcon status="info" text={VPC_AUTO_ASSIGN_IPV4_TOOLTIP} />
4259
</Stack>
43-
{fieldValue !== 'auto' && (
60+
{!shouldAutoAssign && (
4461
<TextField
4562
containerProps={{ sx: { mb: 1.5, mt: 1 } }}
4663
errorText={errorMessage}

0 commit comments

Comments
 (0)