diff --git a/packages/api-v4/CHANGELOG.md b/packages/api-v4/CHANGELOG.md index e3ce21b1ddb..f2c6a8739c5 100644 --- a/packages/api-v4/CHANGELOG.md +++ b/packages/api-v4/CHANGELOG.md @@ -1,4 +1,4 @@ -## [2025-03-11] - v0.136.0 +## [2025-03-17] - v0.136.0 ### Changed: diff --git a/packages/manager/CHANGELOG.md b/packages/manager/CHANGELOG.md index 995127667ce..45ed4eef732 100644 --- a/packages/manager/CHANGELOG.md +++ b/packages/manager/CHANGELOG.md @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -## [2025-03-11] - v1.138.0 +## [2025-03-17] - v1.138.0 ### Added: @@ -18,6 +18,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p - Allow Tags in Volume Create flow ([#11696](https://github.com/linode/manager/pull/11696)) - Update copy for LKE ACL section ([#11746](https://github.com/linode/manager/pull/11746)) - Update copy for LKE Recycle, Upgrade Version, and Delete Pool modals ([#11775](https://github.com/linode/manager/pull/11775)) +- Account for `LA Disk Encryption` region capability when checking if region supports Disk Encryption ([#11833](https://github.com/linode/manager/pull/11833)) +- Account for whether region supports LDE when determining tooltip display for unencrypted linodes & node pools ([#11833](https://github.com/linode/manager/pull/11833)) ### Fixed: @@ -93,12 +95,13 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p - Improve UX of CloudPulse Alerts create flow and resources section ([#11748](https://github.com/linode/manager/pull/11748)) - Fix CloudPulse document titles with appropriate keywords (#11662) - Update LKE checkout bar & NodeBalancer details summary ([#11653](https://github.com/linode/manager/pull/11653)) +- ## [2025-02-27] - v1.137.2 ### Fixed: -- Disk Encryption logic preventing Linode deployment in distributed regions ([#11760](https://github.com/linode/manager/pull/11760) +- Disk Encryption logic preventing Linode deployment in distributed regions ([#11760](https://github.com/linode/manager/pull/11760)) ## [2025-02-25] - v1.137.1 diff --git a/packages/manager/src/features/Kubernetes/CreateCluster/NodePoolPanel.tsx b/packages/manager/src/features/Kubernetes/CreateCluster/NodePoolPanel.tsx index 66c2612593a..8722581f69f 100644 --- a/packages/manager/src/features/Kubernetes/CreateCluster/NodePoolPanel.tsx +++ b/packages/manager/src/features/Kubernetes/CreateCluster/NodePoolPanel.tsx @@ -94,11 +94,18 @@ const Panel = (props: NodePoolPanelProps) => { setSelectedType(planId); }; - const regionSupportsDiskEncryption = doesRegionSupportFeature( - selectedRegionId ?? '', - regions, - 'Disk Encryption' - ); + // "Disk Encryption" indicates general availability and "LA Disk Encryption" indicates limited availability + const regionSupportsDiskEncryption = + doesRegionSupportFeature( + selectedRegionId ?? '', + regions, + 'Disk Encryption' + ) || + doesRegionSupportFeature( + selectedRegionId ?? '', + regions, + 'LA Disk Encryption' + ); return ( diff --git a/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/NodePoolsDisplay/NodePool.tsx b/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/NodePoolsDisplay/NodePool.tsx index dec7ecfcaf0..eebdfc6492c 100644 --- a/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/NodePoolsDisplay/NodePool.tsx +++ b/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/NodePoolsDisplay/NodePool.tsx @@ -41,6 +41,7 @@ interface Props { openRecycleAllNodesDialog: (poolId: number) => void; openRecycleNodeDialog: (nodeID: string, linodeLabel: string) => void; poolId: number; + regionSupportsDiskEncryption: boolean; statusFilter: StatusFilter; tags: string[]; typeLabel: string; @@ -65,6 +66,7 @@ export const NodePool = (props: Props) => { openRecycleAllNodesDialog, openRecycleNodeDialog, poolId, + regionSupportsDiskEncryption, statusFilter, tags, typeLabel, @@ -227,6 +229,7 @@ export const NodePool = (props: Props) => { nodes={nodes} openRecycleNodeDialog={openRecycleNodeDialog} poolId={poolId} + regionSupportsDiskEncryption={regionSupportsDiskEncryption} statusFilter={statusFilter} tags={tags} typeLabel={typeLabel} diff --git a/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/NodePoolsDisplay/NodePoolsDisplay.tsx b/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/NodePoolsDisplay/NodePoolsDisplay.tsx index 4940e242d02..5468dcdf642 100644 --- a/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/NodePoolsDisplay/NodePoolsDisplay.tsx +++ b/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/NodePoolsDisplay/NodePoolsDisplay.tsx @@ -143,6 +143,15 @@ export const NodePoolsDisplay = (props: Props) => { setExpandedAccordions, } = useDefaultExpandedNodePools(clusterID, _pools); + const regionSupportsDiskEncryption = + (regionsData + .find((regionDatum) => regionDatum.id === clusterRegionId) + ?.capabilities.includes('Disk Encryption') || + regionsData + .find((regionDatum) => regionDatum.id === clusterRegionId) + ?.capabilities.includes('LA Disk Encryption')) ?? + false; + if (isLoading || pools === undefined) { return ; } @@ -302,6 +311,7 @@ export const NodePoolsDisplay = (props: Props) => { key={id} nodes={nodes ?? []} poolId={thisPool.id} + regionSupportsDiskEncryption={regionSupportsDiskEncryption} statusFilter={statusFilter} tags={tags} typeLabel={typeLabel} diff --git a/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/NodePoolsDisplay/NodeTable.test.tsx b/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/NodePoolsDisplay/NodeTable.test.tsx index dc80917e70e..a6610035774 100644 --- a/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/NodePoolsDisplay/NodeTable.test.tsx +++ b/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/NodePoolsDisplay/NodeTable.test.tsx @@ -34,6 +34,7 @@ const props: Props = { nodes: mockKubeNodes, openRecycleNodeDialog: vi.fn(), poolId: 1, + regionSupportsDiskEncryption: false, statusFilter: 'all', tags: [], typeLabel: 'Linode 2G', diff --git a/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/NodePoolsDisplay/NodeTable.tsx b/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/NodePoolsDisplay/NodeTable.tsx index 5ad41fa7de2..3b2d970ae13 100644 --- a/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/NodePoolsDisplay/NodeTable.tsx +++ b/packages/manager/src/features/Kubernetes/KubernetesClusterDetail/NodePoolsDisplay/NodeTable.tsx @@ -51,6 +51,7 @@ export interface Props { nodes: PoolNodeResponse[]; openRecycleNodeDialog: (nodeID: string, linodeLabel: string) => void; poolId: number; + regionSupportsDiskEncryption: boolean; statusFilter: StatusFilter; tags: string[]; typeLabel: string; @@ -67,6 +68,7 @@ export const NodeTable = React.memo((props: Props) => { nodes, openRecycleNodeDialog, poolId, + regionSupportsDiskEncryption, statusFilter, tags, typeLabel, @@ -268,6 +270,9 @@ export const NodeTable = React.memo((props: Props) => { @@ -309,9 +314,11 @@ export const nodeToRow = ( export const EncryptedStatus = ({ encryptionStatus, + regionSupportsDiskEncryption, tooltipText, }: { encryptionStatus: EncryptionStatus; + regionSupportsDiskEncryption: boolean; tooltipText: string | undefined; }) => { return encryptionStatus === 'enabled' ? ( @@ -324,7 +331,9 @@ export const EncryptedStatus = ({ Not Encrypted - {tooltipText ? : null} + {regionSupportsDiskEncryption && tooltipText ? ( + + ) : null} ) : null; diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Region.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Region.tsx index decfebeb1eb..91be43734e6 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/Region.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/Region.tsx @@ -144,11 +144,11 @@ export const Region = React.memo(() => { setValue('disk_encryption', undefined); } else { // Enable disk encryption by default if the region supports it - const defaultDiskEncryptionValue = region.capabilities.includes( - 'Disk Encryption' - ) - ? 'enabled' - : undefined; + const defaultDiskEncryptionValue = + region.capabilities.includes('Disk Encryption') || + region.capabilities.includes('LA Disk Encryption') + ? 'enabled' + : undefined; setValue('disk_encryption', defaultDiskEncryptionValue); } diff --git a/packages/manager/src/features/Linodes/LinodeCreate/Security.tsx b/packages/manager/src/features/Linodes/LinodeCreate/Security.tsx index 5634120c999..ae33f9bc3d4 100644 --- a/packages/manager/src/features/Linodes/LinodeCreate/Security.tsx +++ b/packages/manager/src/features/Linodes/LinodeCreate/Security.tsx @@ -36,9 +36,10 @@ export const Security = () => { const selectedRegion = regions?.find((r) => r.id === regionId); - const regionSupportsDiskEncryption = selectedRegion?.capabilities.includes( - 'Disk Encryption' - ); + // "Disk Encryption" indicates general availability and "LA Disk Encryption" indicates limited availability + const regionSupportsDiskEncryption = + selectedRegion?.capabilities.includes('Disk Encryption') || + selectedRegion?.capabilities.includes('LA Disk Encryption'); const isDistributedRegion = getIsDistributedRegion( regions ?? [], diff --git a/packages/manager/src/features/Linodes/LinodeEntityDetail.tsx b/packages/manager/src/features/Linodes/LinodeEntityDetail.tsx index 406acf5ce56..58f6971512b 100644 --- a/packages/manager/src/features/Linodes/LinodeEntityDetail.tsx +++ b/packages/manager/src/features/Linodes/LinodeEntityDetail.tsx @@ -90,6 +90,15 @@ export const LinodeEntityDetail = (props: Props) => { linode.region ); + const regionSupportsDiskEncryption = + (regions + ?.find((r) => r.id === linode.region) + ?.capabilities.includes('Disk Encryption') || + regions + ?.find((r) => r.id === linode.region) + ?.capabilities.includes('LA Disk Encryption')) ?? + false; + let progress; let transitionText; @@ -132,6 +141,7 @@ export const LinodeEntityDetail = (props: Props) => { numCPUs={linode.specs.vcpus} numVolumes={numberOfVolumes} region={linode.region} + regionSupportsDiskEncryption={regionSupportsDiskEncryption} vpcLinodeIsAssignedTo={vpcLinodeIsAssignedTo} /> } diff --git a/packages/manager/src/features/Linodes/LinodeEntityDetailBody.tsx b/packages/manager/src/features/Linodes/LinodeEntityDetailBody.tsx index 08b541f7b16..74478fcaba4 100644 --- a/packages/manager/src/features/Linodes/LinodeEntityDetailBody.tsx +++ b/packages/manager/src/features/Linodes/LinodeEntityDetailBody.tsx @@ -82,6 +82,7 @@ export interface BodyProps { numCPUs: number; numVolumes: number; region: string; + regionSupportsDiskEncryption: boolean; vpcLinodeIsAssignedTo?: VPC; } @@ -105,6 +106,7 @@ export const LinodeEntityDetailBody = React.memo((props: BodyProps) => { numCPUs, numVolumes, region, + regionSupportsDiskEncryption, vpcLinodeIsAssignedTo, } = props; @@ -249,6 +251,7 @@ export const LinodeEntityDetailBody = React.memo((props: BodyProps) => { : UNENCRYPTED_STANDARD_LINODE_GUIDANCE_COPY } encryptionStatus={encryptionStatus} + regionSupportsDiskEncryption={regionSupportsDiskEncryption} /> diff --git a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/DiskEncryption.tsx b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/DiskEncryption.tsx index 706d09a694e..e020ceea3ec 100644 --- a/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/DiskEncryption.tsx +++ b/packages/manager/src/features/Linodes/LinodesDetail/LinodeRebuild/DiskEncryption.tsx @@ -24,8 +24,12 @@ export const DiskEncryption = (props: Props) => { const { data: region } = useRegionQuery(linodeRegion); const isLinodeInDistributedRegion = region?.site_type === 'distributed'; + + // "Disk Encryption" indicates general availability and "LA Disk Encryption" indicates limited availability const regionSupportsDiskEncryption = - region?.capabilities.includes('Disk Encryption') ?? false; + (region?.capabilities.includes('Disk Encryption') || + region?.capabilities.includes('LA Disk Encryption')) ?? + false; const { isDiskEncryptionFeatureEnabled, diff --git a/packages/ui/CHANGELOG.md b/packages/ui/CHANGELOG.md index e2531dc66e6..da480e637c6 100644 --- a/packages/ui/CHANGELOG.md +++ b/packages/ui/CHANGELOG.md @@ -1,4 +1,4 @@ -## [2025-03-11] - v0.8.0 +## [2025-03-17] - v0.8.0 ### Added: diff --git a/packages/utilities/CHANGELOG.md b/packages/utilities/CHANGELOG.md index 9019abf8a51..9067a77ffc0 100644 --- a/packages/utilities/CHANGELOG.md +++ b/packages/utilities/CHANGELOG.md @@ -1,4 +1,4 @@ -## [2025-03-11] - v0.1.0 +## [2025-03-17] - v0.1.0 ### Added: @@ -8,7 +8,3 @@ ### Changed: - Move @vitest/ui to monorepo root dependency ([#11755](https://github.com/linode/manager/pull/11755)) - -### Tech Stories: - -- Update `@vitest/ui` from `2.1.1` to `3.0.3` ([#11749](https://github.com/linode/manager/pull/11749)) diff --git a/packages/validation/CHANGELOG.md b/packages/validation/CHANGELOG.md index d97ecce4374..36b146c4509 100644 --- a/packages/validation/CHANGELOG.md +++ b/packages/validation/CHANGELOG.md @@ -1,4 +1,4 @@ -## [2025-03-11] - v0.62.0 +## [2025-03-17] - v0.62.0 ### Added: