From 0107d5dc8f3a137dc0ed692687e2eb14bec9ce45 Mon Sep 17 00:00:00 2001 From: Alban Bailly Date: Thu, 15 Feb 2024 20:56:18 -0500 Subject: [PATCH] Update Linode and PG types --- packages/api-v4/src/linodes/types.ts | 8 ++---- packages/api-v4/src/placement-groups/types.ts | 17 +++++++---- packages/manager/src/__data__/linodes.ts | 28 ++++++++++++++++--- packages/manager/src/factories/linodes.ts | 15 ++++------ .../manager/src/factories/placementGroups.ts | 1 + .../LinodesCreate/AddonsPanel.test.tsx | 21 ++++++++++++-- .../LinodeRow/LinodeRow.test.tsx | 2 +- .../Linodes/LinodesLanding/ListView.tsx | 2 +- 8 files changed, 64 insertions(+), 30 deletions(-) diff --git a/packages/api-v4/src/linodes/types.ts b/packages/api-v4/src/linodes/types.ts index f8c1abe5ee2..b6c0ea4dd06 100644 --- a/packages/api-v4/src/linodes/types.ts +++ b/packages/api-v4/src/linodes/types.ts @@ -1,7 +1,7 @@ import type { Region } from '../regions'; import type { IPAddress, IPRange } from '../networking/types'; import type { SSHKey } from '../profile/types'; -import type { PlacementGroup } from '../placement-groups/types'; +import type { LinodePlacementGroup } from '../placement-groups/types'; export type Hypervisor = 'kvm' | 'zen'; @@ -24,11 +24,7 @@ export interface Linode { ipv4: string[]; ipv6: string | null; label: string; - // While the API returns an array of PlacementGroup objects for future proofing, - // we only support one PlacementGroup per Linode at this time, hence the tuple. - placement_groups: - | [Pick] - | []; + placement_group: LinodePlacementGroup; type: string | null; status: LinodeStatus; updated: string; diff --git a/packages/api-v4/src/placement-groups/types.ts b/packages/api-v4/src/placement-groups/types.ts index 63f64584004..2188cfae30b 100644 --- a/packages/api-v4/src/placement-groups/types.ts +++ b/packages/api-v4/src/placement-groups/types.ts @@ -14,14 +14,21 @@ export interface PlacementGroup { affinity_type: AffinityType; is_compliant: boolean; linode_ids: number[]; + strict: boolean; } -// The `strict` parameter specifies whether placement groups should be ignored when looking for a host. -// TODO VM_Placement: figure out the values for each create flow (create, clone, migrate etc) -export type CreatePlacementGroupPayload = Pick< +type PlacementGroupPayload = Pick< PlacementGroup, - 'label' | 'affinity_type' | 'region' -> & { strict: boolean }; + 'label' | 'affinity_type' | 'strict' +>; + +export type LinodePlacementGroup = PlacementGroupPayload & { + id: number; +}; + +export type CreatePlacementGroupPayload = PlacementGroupPayload & { + region: Region['id']; +}; export type RenamePlacementGroupPayload = Pick; diff --git a/packages/manager/src/__data__/linodes.ts b/packages/manager/src/__data__/linodes.ts index e0c5d2a608a..dbf3eca7223 100644 --- a/packages/manager/src/__data__/linodes.ts +++ b/packages/manager/src/__data__/linodes.ts @@ -24,7 +24,12 @@ export const linode1: Linode = { ipv4: ['97.107.143.78', '98.107.143.78', '99.107.143.78'], ipv6: '2600:3c03::f03c:91ff:fe0a:109a/64', label: 'test', - placement_groups: [], + placement_group: { + affinity_type: 'anti_affinity', + id: 1, + label: 'pg-1', + strict: true, + }, region: 'us-east', specs: { disk: 20480, @@ -64,7 +69,12 @@ export const linode2: Linode = { ipv4: ['97.107.143.49'], ipv6: '2600:3c03::f03c:91ff:fe0a:0d7a/64', label: 'another-test', - placement_groups: [], + placement_group: { + affinity_type: 'anti_affinity', + id: 1, + label: 'pg-1', + strict: true, + }, region: 'us-east', specs: { disk: 30720, @@ -104,7 +114,12 @@ export const linode3: Linode = { ipv4: ['97.107.143.49'], ipv6: '2600:3c03::f03c:91ff:fe0a:0d7a/64', label: 'another-test', - placement_groups: [], + placement_group: { + affinity_type: 'anti_affinity', + id: 1, + label: 'pg-1', + strict: true, + }, region: 'us-east', specs: { disk: 30720, @@ -144,7 +159,12 @@ export const linode4: Linode = { ipv4: ['97.107.143.49'], ipv6: '2600:3c03::f03c:91ff:fe0a:0d7a/64', label: 'another-test-eu', - placement_groups: [], + placement_group: { + affinity_type: 'anti_affinity', + id: 1, + label: 'pg-1', + strict: true, + }, region: 'eu-west', specs: { disk: 30720, diff --git a/packages/manager/src/factories/linodes.ts b/packages/manager/src/factories/linodes.ts index 64807d6cd23..62d5b55bb64 100644 --- a/packages/manager/src/factories/linodes.ts +++ b/packages/manager/src/factories/linodes.ts @@ -262,16 +262,11 @@ export const linodeFactory = Factory.Sync.makeFactory({ ipv4: ['50.116.6.212', '192.168.203.1'], ipv6: '2600:3c00::f03c:92ff:fee2:6c40/64', label: Factory.each((i) => `linode-${i}`), - placement_groups: [ - placementGroupFactory.build({ - affinity_type: 'anti_affinity', - id: 1, - is_compliant: true, - label: 'test', - linode_ids: [1], - region: 'us-east', - }), - ], + placement_group: placementGroupFactory.build({ + affinity_type: 'anti_affinity', + id: 1, + label: 'pg-1', + }), region: 'us-east', specs: linodeSpecsFactory.build(), status: 'running', diff --git a/packages/manager/src/factories/placementGroups.ts b/packages/manager/src/factories/placementGroups.ts index fb0d0a2a73c..f83e2cbc891 100644 --- a/packages/manager/src/factories/placementGroups.ts +++ b/packages/manager/src/factories/placementGroups.ts @@ -14,6 +14,7 @@ export const placementGroupFactory = Factory.Sync.makeFactory({ label: Factory.each((id) => `pg-${id}`), linode_ids: [0, 1, 2, 3, 5, 6, 7, 8, 43], region: 'us-east', + strict: true, }); export const createPlacementGroupPayloadFactory = Factory.Sync.makeFactory( diff --git a/packages/manager/src/features/Linodes/LinodesCreate/AddonsPanel.test.tsx b/packages/manager/src/features/Linodes/LinodesCreate/AddonsPanel.test.tsx index 54712f0649d..dca3f5e21c1 100644 --- a/packages/manager/src/features/Linodes/LinodesCreate/AddonsPanel.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesCreate/AddonsPanel.test.tsx @@ -62,7 +62,12 @@ const props: AddonsPanelProps = { ipv4: ['45.56.75.98'], ipv6: '2600:3c00::f03c:93ff:fe85:576d/128', label: 'test_instance', - placement_groups: [], + placement_group: { + affinity_type: 'anti_affinity', + id: 1, + label: 'test', + strict: true, + }, region: 'us-central', specs: { disk: 51200, @@ -102,7 +107,12 @@ const props: AddonsPanelProps = { ipv4: ['192.168.139.183', '139.144.17.202'], ipv6: '2600:3c04::f03c:93ff:fe75:0612/128', label: 'debian-ca-central', - placement_groups: [], + placement_group: { + affinity_type: 'anti_affinity', + id: 1, + label: 'test', + strict: true, + }, region: 'ca-central', specs: { disk: 25600, @@ -141,7 +151,12 @@ const props: AddonsPanelProps = { ipv4: ['45.79.74.95'], ipv6: '2600:3c01::f03c:93ff:fe75:e4f9/128', label: 'almalinux-us-west', - placement_groups: [], + placement_group: { + affinity_type: 'anti_affinity', + id: 1, + label: 'test', + strict: true, + }, region: 'us-west', specs: { disk: 25600, diff --git a/packages/manager/src/features/Linodes/LinodesLanding/LinodeRow/LinodeRow.test.tsx b/packages/manager/src/features/Linodes/LinodesLanding/LinodeRow/LinodeRow.test.tsx index 234c8c01ab6..083885f2282 100644 --- a/packages/manager/src/features/Linodes/LinodesLanding/LinodeRow/LinodeRow.test.tsx +++ b/packages/manager/src/features/Linodes/LinodesLanding/LinodeRow/LinodeRow.test.tsx @@ -42,7 +42,7 @@ describe('LinodeRow', () => { ipv6={linode.ipv6 || ''} key={`linode-row-${1}`} label={linode.label} - placement_groups={linode.placement_groups} + placement_group={linode.placement_group} region={linode.region} specs={linode.specs} status={linode.status} diff --git a/packages/manager/src/features/Linodes/LinodesLanding/ListView.tsx b/packages/manager/src/features/Linodes/LinodesLanding/ListView.tsx index 50bde0d77d4..ac316735313 100644 --- a/packages/manager/src/features/Linodes/LinodesLanding/ListView.tsx +++ b/packages/manager/src/features/Linodes/LinodesLanding/ListView.tsx @@ -46,7 +46,7 @@ export const ListView = (props: RenderLinodesProps) => { ipv6={linode.ipv6 || ''} key={`linode-row-${idx}`} label={linode.label} - placement_groups={linode.placement_groups} + placement_group={linode.placement_group} region={linode.region} specs={linode.specs} status={linode.status}