Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
ef4637e
upcoming: [M3-7932] - Placement Groups copy updates (#10399)
carrillo-erik Apr 25, 2024
4da9553
upcoming: [M3-7874] - Linode Create Refactor - Marketplace - Part 1 (…
bnussman-akamai Apr 25, 2024
1534a9c
test: [various] - Cypress test cleanup and flake fixes (#10405)
jdamore-linode Apr 26, 2024
a0dad15
upcoming: [M3-7980] - Update PlacementGroups linodes tooltip and Sele…
abailly-akamai Apr 26, 2024
e9a7f57
upcoming: [M3-7671] - Add Resources Section to Placement Groups Landi…
carrillo-erik Apr 26, 2024
56fcec0
change: [M3-6856] - Update Account Closure Dialog Wording (#10406)
cpathipa Apr 26, 2024
0db7c62
fix: [M3-6856] - Disable Object ACL select filed in loading state (#1…
cpathipa Apr 26, 2024
13b858c
feat: [M3-8005] – Add `disk_encryption` to types & validation schemas…
dwiley-akamai Apr 29, 2024
0f593e0
upcoming: [M3-7875] - Linode Create Refactor - Backups (#10404)
bnussman-akamai Apr 29, 2024
d2187dd
Merge pull request #10416 from linode/staging
hkhalil-akamai Apr 29, 2024
43398a4
Merge branch 'master' into develop
hkhalil-akamai Apr 29, 2024
ac1d251
test: [M3-8050] - Fix OBJ E2E tests following API release (#10417)
jdamore-linode Apr 30, 2024
1edef12
feat: [M3-8006] – Support `disk_encryption` in mocks (#10418)
dwiley-akamai Apr 30, 2024
5e50ddc
refactor: [M3-8043] - Query Key Factory for Volumes (#10414)
bnussman-akamai Apr 30, 2024
24b4cb1
fix: [M3-8053] - Fix table component props forwarding (#10424)
abailly-akamai May 1, 2024
fce59a2
refactor: [M3-7661] - Remove `linodeCloneUiChanges` flag and clean up…
hkhalil-akamai May 1, 2024
09787fb
change: Remove semver bump in `generate-changelogs.mjs` (#10426)
hkhalil-akamai May 1, 2024
f522c56
upcoming: [M3-8051] - Set PlacementGroupSelect clearOnBlur (#10427)
abailly-akamai May 1, 2024
fe6ed9f
M3-7467 Add Cypress test for Domain cloning (#10403)
cliu-akamai May 1, 2024
c4b8259
test: [M3-7465] - Add Cypress test coverage for Firewall renaming (#1…
cliu-akamai May 1, 2024
94b2db4
test: [M3-7781 & M3-7782] - Add Cypress integration tests for Placeme…
jdamore-linode May 2, 2024
96a4051
upcoming: [M3-8012] - Fix PG event text formatting (#10420)
carrillo-erik May 2, 2024
429c01c
upcoming: [M3-8062] - Replace PG feature flag restriction with `useIs…
carrillo-erik May 2, 2024
21c1c55
refactor: [M3-8056] - Query Key Factory for Kubernetes (#10428)
bnussman-akamai May 2, 2024
df186a8
Fix VMPG delete tests following wording improvement (#10432)
jdamore-linode May 2, 2024
aff8f48
upcoming: [M3-7876] - Linode Create Refactor - Clone (#10421)
bnussman-akamai May 3, 2024
22ff369
upcoming: [M3-8025] - Placement Groups: Allow null for maximum_pgs_pe…
abailly-akamai May 3, 2024
93cf229
upcoming: [M3-7874] - Linode Create Refactor - Marketplace - Part 2 (…
bnussman-akamai May 3, 2024
8a37043
change: [M3-8000] - GPUv2 Plan Divider & PlanSelection cleanup (#10407)
abailly-akamai May 3, 2024
020e084
refactor: [M3-8059] - Clean up Main Content Banner (#10430)
bnussman-akamai May 3, 2024
c2dd6ee
upcoming: [M3 -8049] - Last round of placement group copy updates (#1…
abailly-akamai May 3, 2024
ee202fe
upcoming: [M3-7983] - Use 'edge'-class plans for edge regions (#10415)
hkhalil-akamai May 6, 2024
423d84f
feat: [M3-7921] - Added Dialog to Refresh Proxy Tokens as Time Expire…
jaalah-akamai May 6, 2024
fb52207
upcoming: [M3-7690] - Support PlacementGroups in CLI tool (#10438)
carrillo-erik May 7, 2024
f636ab7
fix: [M3-7822] - Prevent Modification of Linode config 'interfaces' …
cpathipa May 7, 2024
37586d4
refactor: [M3-8064] - Clean up Database Feature Flagging Logic (#10435)
bnussman-akamai May 7, 2024
1ab4d3c
Merge pull request #10444 from linode/staging
hkhalil-akamai May 8, 2024
af6d38a
test: [M3-8088] - Fix One-Click App test failure by using Ubuntu 22.0…
jdamore-linode May 8, 2024
3e69050
feat: [M3-8018] – "Disk Encryption" section component (#10439)
dwiley-akamai May 8, 2024
a368661
upcoming: [M3-8077] - Add Distribution Icon to Image Select v2 (#10440)
bnussman-akamai May 8, 2024
0bff517
fix: [M3-8057] - Disable dedicated > shared DatabaseResize same plan …
abailly-akamai May 9, 2024
9349ec3
test: [M3-7772] - Add Cypress integration test for Placement Group cr…
jdamore-linode May 9, 2024
aec2dc4
Merge branch 'master' into develop
hkhalil-akamai May 9, 2024
eedf4ec
Cloud version 1.119.0, API v4 version 0.117.0, and Validation version…
May 13, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions packages/api-v4/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
## [2024-05-13] - v0.117.0


### Added:

- 'edge' Linode type class ([#10415](https://github.com/linode/manager/pull/10415))

### Changed:

- Allow `backup_id` to be `null` in `CreateLinodeRequest` ([#10404](https://github.com/linode/manager/pull/10404))
- Add disk_encryption to Linode, Disk, CreateLinodeRequest, RebuildRequest, and KubeNodePoolResponse interfaces ([#10413](https://github.com/linode/manager/pull/10413))
- Allow null for Placement Groups maximum_pgs_per_customer ([#10433](https://github.com/linode/manager/pull/10433))

### Upcoming Features:

- Update Placement Group event types ([#10420](https://github.com/linode/manager/pull/10420))


## [2024-05-06] - v0.116.0


Expand Down
2 changes: 1 addition & 1 deletion packages/api-v4/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@linode/api-v4",
"version": "0.116.0",
"version": "0.117.0",
"homepage": "https://github.com/linode/manager/tree/develop/packages/api-v4",
"bugs": {
"url": "https://github.com/linode/manager/issues"
Expand Down
11 changes: 6 additions & 5 deletions packages/api-v4/src/account/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -359,11 +359,12 @@ export type EventAction =
| 'nodebalancer_update'
| 'password_reset'
| 'placement_group_assign'
| 'placement_group_created'
| 'placement_group_assigned'
| 'placement_group_unassigned'
| 'placement_group_updated'
| 'placement_group_deleted'
| 'placement_group_became_non_compliant'
| 'placement_group_became_compliant'
| 'placement_group_create'
| 'placement_group_unassign'
| 'placement_group_update'
| 'placement_group_delete'
| 'profile_update'
| 'stackscript_create'
| 'stackscript_delete'
Expand Down
3 changes: 3 additions & 0 deletions packages/api-v4/src/kubernetes/types.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import type { EncryptionStatus } from 'src/linodes';

export interface KubernetesCluster {
created: string;
updated: string;
Expand All @@ -16,6 +18,7 @@ export interface KubeNodePoolResponse {
nodes: PoolNodeResponse[];
type: string;
autoscaler: AutoscaleSettings;
disk_encryption?: EncryptionStatus; // @TODO LDE: remove optionality once LDE is fully rolled out
}

export interface PoolNodeResponse {
Expand Down
14 changes: 12 additions & 2 deletions packages/api-v4/src/linodes/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import type { PlacementGroupPayload } from '../placement-groups/types';

export type Hypervisor = 'kvm' | 'zen';

export type EncryptionStatus = 'enabled' | 'disabled';

export interface LinodeSpecs {
disk: number;
memory: number;
Expand All @@ -18,6 +20,7 @@ export interface Linode {
alerts: LinodeAlerts;
backups: LinodeBackups;
created: string;
disk_encryption?: EncryptionStatus; // @TODO LDE: Remove optionality once LDE is fully rolled out
region: string;
image: string | null;
group: string;
Expand Down Expand Up @@ -267,6 +270,7 @@ export interface Disk {
filesystem: Filesystem;
created: string;
updated: string;
disk_encryption?: EncryptionStatus; // @TODO LDE: remove optionality once LDE is fully rolled out
}

export type DiskStatus = 'ready' | 'not ready' | 'deleting';
Expand Down Expand Up @@ -374,7 +378,7 @@ export interface CreateLinodeRequest {
*
* This field and the image field are mutually exclusive.
*/
backup_id?: number;
backup_id?: number | null;
/**
* When deploying from an Image, this field is optional, otherwise it is ignored.
* This is used to set the swap disk size for the newly-created Linode.
Expand Down Expand Up @@ -447,9 +451,14 @@ export interface CreateLinodeRequest {
*/
firewall_id?: number | null;
/**
* An object that assigns this the Linode to a placment group upon creation.
* An object that assigns this the Linode to a placement group upon creation.
*/
placement_group?: CreateLinodePlacementGroupPayload;
/**
* A property with a string literal type indicating whether the Linode is encrypted or unencrypted.
* @default 'enabled' (if the region supports LDE)
*/
disk_encryption?: EncryptionStatus;
}

export interface MigrateLinodeRequest {
Expand Down Expand Up @@ -485,6 +494,7 @@ export interface RebuildRequest {
stackscript_id?: number;
stackscript_data?: any;
booted?: boolean;
disk_encryption?: EncryptionStatus;
}

export interface LinodeDiskCreationData {
Expand Down
2 changes: 1 addition & 1 deletion packages/api-v4/src/placement-groups/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export const AFFINITY_TYPES = {
} as const;

export type AffinityType = keyof typeof AFFINITY_TYPES;
export type AffinityEnforcement = 'Strict' | 'Flexible';
export type AffinityTypeEnforcement = 'Strict' | 'Flexible';

export interface PlacementGroup {
id: number;
Expand Down
2 changes: 1 addition & 1 deletion packages/api-v4/src/regions/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export interface Region {
country: Country;
capabilities: Capabilities[];
placement_group_limits: {
maximum_pgs_per_customer: number;
maximum_pgs_per_customer: number | null; // This value can be unlimited for some customers, for which the API returns the `null` value.
maximum_linodes_per_pg: number;
};
status: RegionStatus;
Expand Down
56 changes: 56 additions & 0 deletions packages/manager/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,62 @@ 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/).

## [2024-05-13] - v1.119.0


### Changed:

- Update Account Closure Dialog Wording ([#10406](https://github.com/linode/manager/pull/10406))
- Implement GPUv2 plan divider & cleanup/consolidate plan selection components ([#10407](https://github.com/linode/manager/pull/10407)) [#10450](https://github.com/linode/manager/pull/10450)

### Fixed:

- Object ACL select field enabled in loading state ([#10412](https://github.com/linode/manager/pull/10412))
- Modification of Linode config 'interfaces' array on no changes ([#10423](https://github.com/linode/manager/pull/10423))
- Table component props forwarding ([#10424](https://github.com/linode/manager/pull/10424))

### Tech Stories:

- Remove `linodeCloneUiChanges` feature flag and clean up usages ([#10385](https://github.com/linode/manager/pull/10385))
- Query Key Factory for Volumes ([#10414](https://github.com/linode/manager/pull/10414))
- Query Key Factory for Kubernetes ([#10428](https://github.com/linode/manager/pull/10428))
- Clean up Main Content Banner ([#10430](https://github.com/linode/manager/pull/10430))
- Clean up Database feature flagging logic ([#10435](https://github.com/linode/manager/pull/10435))

### Tests:

- Add Cypress test coverage for Firewall renaming ([#10384](https://github.com/linode/manager/pull/10384))
- Add Cypress test for Domain cloning ([#10403](https://github.com/linode/manager/pull/10403))
- Fix VPC subnet Linode assignment integration test failures ([#10405](https://github.com/linode/manager/pull/10405))
- Fix access key test failure when user has many OBJ buckets ([#10405](https://github.com/linode/manager/pull/10405))
- Refactor Linode config end-to-end tests ([#10405](https://github.com/linode/manager/pull/10405))
- Fix failing OBJ E2E tests following API release ([#10417](https://github.com/linode/manager/pull/10417))
- Add Cypress tests for Placement Group deletion flows ([#10425](https://github.com/linode/manager/pull/10425))
- Add Placement Group create flow UI test ([#10445](https://github.com/linode/manager/pull/10445))
- Fix One-Click App test by using Ubuntu 22.04 image ([#10447](https://github.com/linode/manager/pull/10447))

### Upcoming Features:

- Add dialog to refresh proxy tokens as time expires ([#10361](https://github.com/linode/manager/pull/10361))
- Update Placement Groups text copy ([#10399](https://github.com/linode/manager/pull/10399))
- Linode Create Refactor:
- Marketplace - Part 1 ([#10401](https://github.com/linode/manager/pull/10401))
- Backups (#10404)
- Marketplace - Part 2 (#10419)
- Cloning ([#10421](https://github.com/linode/manager/pull/10421))
- Update Placement Group Table Row linodes tooltip and SelectPlacementGroup option label ([#10408](https://github.com/linode/manager/pull/10408))
- Add content to the ResourcesSection of the PG landing page in empty state ([#10411](https://github.com/linode/manager/pull/10411))
- Use 'edge'-class plans in edge regions ([#10415](https://github.com/linode/manager/pull/10415))
- Add disk_encryption to several factories for mocked data ([#10418](https://github.com/linode/manager/pull/10418))
- Fix Placement Group action event formatting ([#10420](https://github.com/linode/manager/pull/10420))
- Replace remaining feature flag implementation with `useIsPlacementGroupsEnabled` utility function ([#10431](https://github.com/linode/manager/pull/10431))
- Update Placement Groups final copy ([#10434](https://github.com/linode/manager/pull/10434))
- Add support for Placement Groups in Linode CLI tool ([#10438](https://github.com/linode/manager/pull/10438))
- Set PlacementGroupSelect clearOnBlur to true ([#10427](https://github.com/linode/manager/pull/10427))
- Update Placement Groups maximum_pgs_per_customer UI (#10433)
- Add DiskEncryption component ([#10439](https://github.com/linode/manager/pull/10439))


## [2024-05-06] - v1.118.1


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,9 @@ describe('Account cancellation', () => {
});

ui.dialog
.findByTitle('Are you sure you want to close your Linode account?')
.findByTitle(
'Are you sure you want to close your cloud computing services account?'
)
.should('be.visible')
.within(() => {
cy.findByText(cancellationDataLossWarning, { exact: false }).should(
Expand Down Expand Up @@ -179,7 +181,9 @@ describe('Account cancellation', () => {

// Fill out cancellation dialog and attempt submission.
ui.dialog
.findByTitle('Are you sure you want to close your Linode account?')
.findByTitle(
'Are you sure you want to close your cloud computing services account?'
)
.should('be.visible')
.within(() => {
cy.findByLabelText(
Expand Down Expand Up @@ -353,7 +357,9 @@ describe('Parent/Child account cancellation', () => {
});

ui.dialog
.findByTitle('Are you sure you want to close your Linode account?')
.findByTitle(
'Are you sure you want to close your cloud computing services account?'
)
.should('be.visible')
.within(() => {
cy.findByText(cancellationDataLossWarning, { exact: false }).should(
Expand Down
137 changes: 137 additions & 0 deletions packages/manager/cypress/e2e/core/domains/smoke-clone-domain.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
import { Domain } from '@linode/api-v4';
import { domainFactory } from '@src/factories';
import { getClick, fbtClick, fbltClick } from 'support/helpers';
import { authenticate } from 'support/api/authentication';
import { randomDomainName } from 'support/util/random';
import { createDomain } from '@linode/api-v4/lib/domains';
import { createDomainRecords } from 'support/constants/domains';
import { interceptCreateDomainRecord } from 'support/intercepts/domains';
import { ui } from 'support/ui';
import { cleanUp } from 'support/util/cleanup';

authenticate();
describe('Clone a Domain', () => {
before(() => {
cleanUp('domains');
});

/*
* - Clicks "Clone" action menu item for domain but cancels operation.
* - Clicks "Clone" action menu item for domain and confirms operation.
* - Confirms that a "Domain is not valid." error is yielded when entering an invalid domain name.
* - Confirms that the user is redirected to the new Domain's details page after cloning.
* - Confirms that domain is still in landing page list after canceled operation.
* - Confirms that cloned domains contain the same records as the original Domain.
*/
it('clones a domain', () => {
const domainRequest = domainFactory.build({
domain: randomDomainName(),
group: 'test-group',
});

const invalidDomainName = 'invalid-domain-name';
const clonedDomainName = randomDomainName();

const domainRecords = createDomainRecords();

cy.defer(createDomain(domainRequest), 'creating domain').then(
(domain: Domain) => {
// Add records to the domain.
cy.visitWithLogin(`/domains/${domain.id}`);

domainRecords.forEach((rec) => {
interceptCreateDomainRecord().as('apiCreateRecord');
fbtClick(rec.name);
rec.fields.forEach((f) => {
getClick(f.name).type(f.value);
});
fbtClick('Save');
cy.wait('@apiCreateRecord');
});

cy.visitWithLogin('/domains');

// Confirm that domain is listed and initiate deletion.
cy.findByText(domain.domain)
.should('be.visible')
.closest('tr')
.within(() => {
ui.actionMenu
.findByTitle(`Action menu for Domain ${domain}`)
.should('be.visible')
.click();
});
ui.actionMenuItem.findByTitle('Clone').should('be.visible').click();

// Cancel cloning when prompted to confirm.
ui.drawer
.findByTitle(`Clone Domain`)
.should('be.visible')
.within(() => {
ui.buttonGroup
.findButtonByTitle('Cancel')
.should('be.visible')
.should('be.enabled')
.click();
});

// Confirm that no new domain is added and initiate cloning again.
cy.findByText(domain.domain)
.should('be.visible')
.closest('tr')
.within(() => {
ui.actionMenu
.findByTitle(`Action menu for Domain ${domain}`)
.should('be.visible')
.click();
});
ui.actionMenuItem.findByTitle('Clone').should('be.visible').click();

// Confirm cloning.
ui.drawer
.findByTitle(`Clone Domain`)
.should('be.visible')
.within(() => {
// The button should be disabled before confirming the correct domain
ui.buttonGroup
.findButtonByTitle('Create Domain')
.should('be.visible')
.should('be.disabled');

// Confirm that an error is displayed when entering an invalid domain name
fbltClick('New Domain').type(invalidDomainName);
ui.buttonGroup
.findButtonByTitle('Create Domain')
.should('be.visible')
.should('be.enabled')
.click();
cy.findByText('Domain is not valid.').should('be.visible');

fbltClick('New Domain').clear().type(clonedDomainName);
ui.buttonGroup
.findButtonByTitle('Create Domain')
.should('be.visible')
.should('be.enabled')
.click();
});
// After cloning a Domain, the user is redirected to the new Domain's details page
cy.url().should('endWith', 'domains');

// Confirm that domain is cloned and cloned domains contain the same records as the original Domain.
cy.visitWithLogin('/domains');
cy.findByText(domain.domain).should('be.visible');
cy.findByText(clonedDomainName).should('be.visible').click();
domainRecords.forEach((rec) => {
cy.get(`[aria-label="${rec.tableAriaLabel}"]`).within((_table) => {
rec.fields.forEach((f) => {
if (f.skipCheck) {
return;
}
cy.findByText(f.value, { exact: !f.approximate });
});
});
});
}
);
});
});
Loading