Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: [M3-9156] - Linode Config Dialog misrepresenting primary interface #11542

Merged

Conversation

bnussman-akamai
Copy link
Member

@bnussman-akamai bnussman-akamai commented Jan 21, 2025

Description 📝

  • The Linode Config dialog is misrepresenting what is actually the default network interface
  • This PR aims to fix the Primary Interface being misrepresented

How "Primary Interface" works ❓

  • If an interface is primary we know that's the primary
  • If the API response returns an empty array "interfaces": [], under the hood, a public interface eth0 is inherently configured on the Linode. This interface will be primary.
  • If a config has interfaces, but none of them are marked primary: true, then the first interface in the list that’s not a VLAN will be the primary interface

Preview 📷

Before After
Screenshot 2025-01-21 at 12 14 58 PM Screenshot 2025-01-21 at 12 15 15 PM
Screenshot 2025-01-21 at 12 16 29 PM Screenshot 2025-01-21 at 12 16 44 PM

How to test 🧪

  • Test various network interface variations (try different combinations of VPC, VLAN, Public Internet) in the LInode Config Dialog
    • Be sure to test create and edit
    • Verify the logic explained in How "Primary Interface" works above always remains true
  • Verify the Linode Create flow's network interfaces still work correctly
  • Verify that for the VPC Subnet Linode table row, the unrecommended config notice is consistent with Linode config dialog's unrecommended config notice
Author Checklists

As an Author, to speed up the review process, I considered 🤔

👀 Doing a self review
❔ Our contribution guidelines
🤏 Splitting feature into small PRs
➕ Adding a changeset
🧪 Providing/improving test coverage
🔐 Removing all sensitive information from the code and PR description
🚩 Using a feature flag to protect the release
👣 Providing comprehensive reproduction steps
📑 Providing or updating our documentation
🕛 Scheduling a pair reviewing session
📱 Providing mobile support
♿ Providing accessibility support


  • I have read and considered all applicable items listed above.

As an Author, before moving this PR from Draft to Open, I confirmed ✅

  • All unit tests are passing
  • TypeScript compilation succeeded without errors
  • Code passes all linting rules

@bnussman-akamai bnussman-akamai added Bug Fixes for regressions or bugs Linodes Dealing with the Linodes section of the app labels Jan 21, 2025
@bnussman-akamai bnussman-akamai self-assigned this Jan 21, 2025
@bnussman-akamai bnussman-akamai requested a review from a team as a code owner January 21, 2025 17:22
@bnussman-akamai bnussman-akamai requested review from hana-akamai and cpathipa and removed request for a team January 21, 2025 17:22
@coliu-akamai coliu-akamai self-requested a review January 21, 2025 17:27
Copy link

github-actions bot commented Jan 21, 2025

Coverage Report:
Base Coverage: 86.69%
Current Coverage: 86.69%

@bnussman-akamai bnussman-akamai force-pushed the poc/primary-interface-fix branch from 6ece9b6 to f34b2a6 Compare January 21, 2025 18:24
Comment on lines 35 to 44
// If a config has interfaces but none of them are marked as primary,
// then the first interface in the list that’s not a VLAN will be the primary interface.
const inherentIndexOfPrimaryInterface = interfaces.findIndex(
(i) => i.purpose !== 'vlan'
);

if (inherentIndexOfPrimaryInterface !== -1) {
// If we're able to find the inherent primary interface, just return it.
return inherentIndexOfPrimaryInterface;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand why we've done this historically for simple linodes that only have the implicit public interface (basically just to reduce confusion for users), but it does feel a bit odd in the case where there are public, VLAN, and VPC interfaces, none of which are explicitly primary.

I wonder if it'd be better to display "None" for every case other than when there's only an implicit public interface and when there's an explicit primary interface 🤔 Do we make things clearer by not matching more closely what the API has?

Copy link
Member Author

@bnussman-akamai bnussman-akamai Jan 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if it'd be better to display "None" for every case other than when there's only an implicit public interface and when there's an explicit primary interface

Just to make sure I understand: Are you suggesting we show the Primary Interface as None unless one is explicitly set? I do like this idea because it more closely aligns with the API.

when there's only an implicit public interface and when there's an explicit primary interface

What if there is an implicit primary VPC interface? (I think this is possible)

I think both approaches are fine. Whichever route we go with, I feel like we should make the "Primary Interface" field show exactly what the API returns or the derived implicit/explicit primary interface. Not something in the middle

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm that's a good point 🤔

fwiw for the linode configs I've checked so far, this PR's current behavior matches what's specified in admin - this consistency could be helpful for customer support specialists when they're trying to answer tickets

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess the main upside to the current approach is that the user will have a clear indication of the "primary" interface being used under the hood without needing to reference documentation. I do like the idea of more closely aligning with the API response but I'm not sure what UX difference that could make

Copy link
Contributor

@coliu-akamai coliu-akamai Jan 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ohh one thought I just had though - with this PR if we create a linode via the api with a single interface, vpc, that is not specified as primary, in the UI there's an inconsistency:

  • In the linode config dialog, there will be no 'config unrecommended notice'
  • In the subnet table there is one:
    image

here, aligning with the API could make more sense so that people know their config isn't explicitly the primary one?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added bonus, using your getPrimaryInterfaceIndex method for this notice would take care of the issue mentioned in this PR about existing configs 👀

This does not resolve the unrecommended config notice for already existing Linodes, just for newly created ones. Customers with this notice on their Linode will need to manually edit their configs to resolve it.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, that would be awesome if we could reuse the getPrimaryInterfaceIndex logic there. Want to push that change @coliu-akamai ?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can do! i'm gonna test a bit more stuff just to make sure first (it seems p good so far tho 🤞)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if it'd be better to display "None" for every case other than when there's only an implicit public interface and when there's an explicit primary interface

Just to make sure I understand: Are you suggesting we show the Primary Interface as None unless one is explicitly set? I do like this idea because it more closely aligns with the API.

when there's only an implicit public interface and when there's an explicit primary interface

What if there is an implicit primary VPC interface? (I think this is possible)

I think both approaches are fine. Whichever route we go with, I feel like we should make the "Primary Interface" field show exactly what the API returns or the derived implicit/explicit primary interface. Not something in the middle

@bnussman-akamai Yup that's basically what I was suggesting.

I'm seeing now though that the API docs do say "If you haven't specifically set a primary, the first non-vlan type interface is automatically treated as the primary." That makes me feel more comfortable with the current approach in this PR

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just pushed something up - the code I had above did not fully work, but I think what I have now does, albeit could maybe use some cleanup

@coliu-akamai coliu-akamai requested a review from a team as a code owner January 22, 2025 15:27
@coliu-akamai coliu-akamai requested review from jdamore-linode and removed request for a team January 22, 2025 15:27
coliu-akamai and others added 2 commits January 22, 2025 10:28
Comment on lines +973 to +975
disableClearable={interfacesWithoutPlaceholderInterfaces.some(
(i) => i.purpose === 'public' || i.purpose === 'vpc'
)}
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the only part I'm not 100% sure about. We should just double check this logic and make sure this doesn't prevent the user from doing what they need to do.

The idea here is that Linode configs that have a VPC and/or Public interface will always have a primary interface (could be explicit or implicit) but the user should be able to have No Primary Interface if they just have a VLAN interface

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems to work as intended from my testing; when there is a VPC or Public interface, the Primary Interface field is not clearable. When there isn't, the Primary Interface field becomes clearable.

@coliu-akamai
Copy link
Contributor

coliu-akamai commented Jan 22, 2025

✅ only vlan interface(s) (tested 1-3 vlan only interfaces) - primary interface select defaults to null and is clearable
✅ trying to set a vlan interface as primary leads to an error
✅ if there is either a public or vpc (or both) interfaces, the select is not clearable (and defaults to first non vlan interface)
✅ interface combinations - tested implicit primary interfaces for following combinations

  • no interfaces (default public) ✅
  • vlan only ✅
  • vpc only ✅
  • public only ✅
  • vpc, vlan ✅ (and vice versa )
  • vpc, public ✅ (and vice versa )
  • public, vlan ✅ (and vice versa)
  • combos of three ✅

✅ confirm subnet linode row notice
✅ creating linode still works

✅ editing a config
✅ creating a config

❓ when creating a new config, not including VLAN interfaces - if I don't change the default selected primary interface, the primary field doesn't get populated in the payload (and the resulting config is not marked as primary).
❓ similarly, when editing a config, if I start with no interface explicitly marked as primary, and just click save w/o changes, no primary: true field will be populated for the implicitly primary interface

Unsure if these are considered blockers though, since it doesn't affect any of the interface's/config functionality (an implicit primary still exists). However, since I'm clicking the 'Create/Save Changes' button, ig I would expect the primary field to be explicitly updated + this is a difference in behavior than prod

Create Config example - On prod, the interface payload for the same actions as in the video is

{
  "ip_ranges": [],
  "ipv4": {
    "nat_1_1": "any"
  },
  "purpose": "vpc",
  "subnet_id": 125165,
  "vpc_id": 130162,
  "primary": true
}
Screen.Recording.2025-01-22.at.5.09.29.PM.mov

@linode-gh-bot
Copy link
Collaborator

Cloud Manager UI test results

🎉 475 passing tests on test run #16 ↗︎

❌ Failing✅ Passing↪️ Skipped🕐 Duration
0 Failing475 Passing2 Skipped92m 4s

@coliu-akamai
Copy link
Contributor

honestly now that I think about it, it's like having to set an explicit primary field no longer feels necessary, just based on how there's no visual or interface functionality difference for the two ❓ I had above. If I hadn't looked at the network requests, I wouldn't have realized those interfaces weren't being explicitly marked primary :o

Copy link
Contributor

@dwiley-akamai dwiley-akamai left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code review ✅

Tested/verified the following:

  • Create new Linode and assign it to a VPC — VPC interface is still primary ✅
  • Create new Linode and attach a VLAN — public interface in eth0 and VLAN in eth1, no primary ✅
  • Edit & save config (no interface currently set to primary) w/o explicitly setting Primary Interface — upon opening dialog again, it consistently reflects the first non-VLAN interface ✅
  • Edit config that has multiple interfaces, remove all but the VLAN interface — Primary Interface becomes “None” and is not clearable ✅
  • Get an error when you try to set a VLAN as the primary interface ✅
  • Unrecommended Config notice consistency b/w Linode Config dialog & VPC Subnet Linode table row ✅

/**
* - Confirms UI for Linode with a config with an implicit primary VPC interface (no notice)
*/
it('does not display an unrecommended config notice for a Linode with an implicit primary VPC', () => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
it('does not display an unrecommended config notice for a Linode with an implicit primary VPC', () => {
it('does not display an unrecommended config notice for a Linode with an implicit primary VPC interface', () => {

Comment on lines +973 to +975
disableClearable={interfacesWithoutPlaceholderInterfaces.some(
(i) => i.purpose === 'public' || i.purpose === 'vpc'
)}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems to work as intended from my testing; when there is a VPC or Public interface, the Primary Interface field is not clearable. When there isn't, the Primary Interface field becomes clearable.

@bnussman-akamai
Copy link
Member Author

bnussman-akamai commented Jan 22, 2025

I think I see what you mean @coliu-akamai

Are you saying we should make Cloud Manager pass primary: true (for the implicit primary) so that the backend actually marks the interface as primary?

@coliu-akamai
Copy link
Contributor

@bnussman-akamai yep, sorry I wasn't clear 😅

ig it's a nice to have and would match prod's behavior, but it no longer feels as necessary now that we can show the implicit primary interface - will approve this PR!

@bnussman-akamai
Copy link
Member Author

I do agree that it might be preferable to make Cloud Manger explicitly pass primary: true but I don't think it matters from a functionality perspective 🤔 It should be a somewhat easy change if we decide to make it. I will try it out 👀

@bnussman-akamai
Copy link
Member Author

Actually, I might feel okay with how things are currently. I think it's okay if we just abide by how the API works and not try to make Cloud Manager forcefully set a primary. I could go either way but I think what we have is acceptable 😵‍💫

@coliu-akamai
Copy link
Contributor

makes sense, sounds good to me 🚀

@coliu-akamai coliu-akamai added the Approved Multiple approvals and ready to merge! label Jan 23, 2025
@bnussman-akamai bnussman-akamai merged commit 77b9661 into linode:develop Jan 23, 2025
23 checks passed
Copy link

cypress bot commented Jan 23, 2025

Cloud Manager E2E    Run #7108

Run Properties:  status check passed Passed #7108  •  git commit 77b9661efa: fix: [M3-9156] - Linode Config Dialog misrepresenting primary interface (#11542)
Project Cloud Manager E2E
Branch Review develop
Run status status check passed Passed #7108
Run duration 28m 12s
Commit git commit 77b9661efa: fix: [M3-9156] - Linode Config Dialog misrepresenting primary interface (#11542)
Committer Banks Nussman
View all properties for this run ↗︎

Test results
Tests that failed  Failures 0
Tests that were flaky  Flaky 1
Tests that did not run due to a developer annotating a test with .skip  Pending 2
Tests that did not run due to a failure in a mocha hook  Skipped 0
Tests that passed  Passing 476
View all changes introduced in this branch ↗︎

abailly-akamai added a commit that referenced this pull request Jan 23, 2025
* change: [UIE-8228] - Database Resize: disable same size plan (#11481)

* change: [UIE-8228] - Database Resize: disable same size plan

* Added changeset: Database Resize: Disable plans when the usable storage equals the used storage of the database cluster

* test: Fix DateTimeRangePicker unit test failure (#11502)

## Description 📝

This attempts to fix a unit test failure in `DateTimeRangePicker.test.ts` when the test is run in an environment whose system locale is not set to central time (UTC-06:00). Also does some clean up related to the way that the system time is mocked.

## Changes  🔄

- Fix test failure in DateTimeRangePicker unit tests
- Clean up

## How to test 🧪

```bash
yarn test DateTimeRangePicker.test
```

* fix: Preferences type_to_confirm being undefined no longer causes button to be disabled (#11500)

## Description 📝
There is an edge case where `preferences?.type_to_confirm` is `undefined` when the user has not yet set a preference as seen in `/profile/settings?preferenceEditor=true`. 

## Changes  🔄
- Ensure that `preferences?.type_to_confirm` resolves to a boolean value (default true)

## How to test 🧪

### Prerequisites
- Removed `type_to_confirm` preference from /profile/settings?preferenceEditor=true

### Reproduction steps
- Observe the disabled button for linode deletion dialogs and others

### Verification steps
#### Step 1
- Removed `type_to_confirm` preference from /profile/settings?preferenceEditor=true
- Ensure type-to-confirm is enabled by default
- Check linode: delete, resize, rebuild
- Check domain: delete
- Check close account still works as intended
#### Step 2
- Disable type-to-confirm
- Check linode: delete, resize, rebuild
- Check domain: delete
- Check close account still works as intended

---------

Co-authored-by: Jaalah Ramos <[email protected]>
Co-authored-by: Hana Xu <[email protected]>

* refactor: [M3-8246, M3-8252] - Replace Ramda's `splitAt` with custom utility (#11483)

* Add custom utility and remove `splitAt` ramda instances

* Cleanup with method overloading

* Fix comments

* Added changeset: Replace ramda's `splitAt` with custom utility

* Fix comment

* test: [M3-8313] - Move OBJ Multicluster Cypress tests to `ObjectStorageMulticluster` (#11484)

* Move OBJ multicluster tests from `objectStorage` to `objectStorageMulticluster` dir

* Added changeset: Improve organization of Object Storage and Object Storage Multicluster tests

* feat: [UIE-8134] - add new entities component (#11429)

* refactor: [M3-9016] - Convert `DomainRecords.tsx` to functional component (#11447)

* Initial commit

* More refactoring...

* Consolidate Pagination Footer

* Few fixes...

* Fix NS record domain render

* Added changeset: Refactor DomainRecords and convert DomainRecords to functional component

* Update changeset

* Fix DomainRecordTable paginatedData type

* Refactor generateTypes

* Memoize generateTypes

* Utility rename for clarity

* Update tablerow key

* Change to more descriptive var names

* Fix typo

* Use scrollErrorIntoViewV2

* Fix linting

* Refactor to remove some ramda dependencies and avoid `any` types

* refactor: [M3-9031] - Replace one-off hardcoded color values with color tokens pt5 (#11488)

* Replace hardcoded color values with color tokens pt5

* Added changeset: Replace one-off hardcoded color values with color tokens pt5

* Revert back the color replacement of `#10`

* test: [M3-9066] - Remove Cypress deprecated helper functions (#11501)

* Remove dedrecated Cypress helper functions

* Added changeset: Remove cypress deprecated helper.ts functions

* change: [M3-9067] - Improve Backups Banner Styles and Refactor Notice Component (#11480)

* initial improvements and notice fixes

* clean up more

* make jsx more readable

* fix placement group unit test test id

* fix cypress tests

* add changesets

* tighten spacing

* use  variant based on UX feedback

* remove the `marketing` notice variant

* changeset

* final fixes and tweaks

* clean up a bit more

---------

Co-authored-by: Banks Nussman <[email protected]>

* upcoming: [DI-22132] - Added criteria section in alert details page for ACLP Alerting (#11477)

* upcoming: [DI-22596] - Criteria changes

* upcoming: [DI-22596] - Criteria changes

* upcoming: [DI-22596] - Criteria changes

* upcoming: [DI-22596] - Alert detail chips

* upcoming: [DI-22596] - CSS changes

* upcoming: [DI-22596] - Code refactoring

* upcoming: [DI-22596] - Add types

* upcoming: [DI-22132] - Code refactoring

* upcoming: [DI-22132] - Add changeset

* upcoming: [DI-22132] - Add factories and constants

* upcoming: [DI-22132] - Use factories in mock

* upcoming: [DI-22132] - Refactor alert criteria component

* upcoming: [DI-22132] - Code refactoring, util update and constants update

* upcoming: [DI-22132] - Code refactoring

* upcoming: [DI-22132] - UT updates and code clean up

* upcoming: [DI-22132] - Code updates

* upcoming: [DI-22132] - Comment update and label update

* upcoming: [DI-22132] - Code refactoring and updates

* upcoming: [DI-22132] - Reusable typography

* upcoming: [DI-22132] - Use common typography

* upcoming: [DI-22132] - Rename common typography

* upcoming: [DI-22132] - Add logical comments

* upcoming: [DI-22132] - Add spacing constant

* upcoming: [DI-22132] - Code refactoring

* upcoming: [DI-22132] - Code refactoring

* upcoming: [DI-22132] - CSS fixes

* upcoming: [DI-22132] - Remove pick random

* upcoming: [DI-22132] - Code merge error fixes

* upcoming: [DI-22132] - Merge imports into one

* upcoming: [DI-22132] - Color changes for PR

* upcoming: [DI-22132] - ES lint issue fix

* upcoming: [DI-22132] - Height changes to px value

* upcoming: [DI-22132] - Constants and text update

---------

Co-authored-by: vmangalr <[email protected]>

* change: Update understanding bucket rate limits for OBJ Gen2 (#11513)

* Update understanding bucket rate limits link

* Added changeset: Tech doc link for Bucket Rate Limits have changed

* Update link

---------

Co-authored-by: Jaalah Ramos <[email protected]>

* upcoming: [DI-22714] - Metrics and JWE Token api request update in CloudPulse (#11506)

* upcoming: [DI-22714] - metrics call request update

* upcoming: [DI-22714] - update factory

* upcoming: [DI-22714] - jwe token call payload update

* upcoming: [DI-22714] - small enhancement

* upcoming: [DI-22714] - Add changeset

* refactor: [M3-8252] - Remove ramda from `CreateDomain.tsx` (#11505)

* Remove ramda from `CreateDomain`

* Add changeset

* fix: [M3-9009] - Fix spacing for LKE cluster tags (#11507)

* Fix spacing for cluster tags

* Added changeset: Spacing for LKE cluster tags at desktop screen sizes

* refactor: [M3-9053] - Reroute Longview (#11490)

* Initial commit

* useTabs hooks improvements

* improve hook

* default redirect

* Update hook with ref

* tablist!

* cleanup & tests

* moar cleanup

* feedback @mjac0bs

* Post rebase fix

* change: [M3-8956] - Update `tsconfig.json`s to use `bundler` moduleResolution (#11487)

* update tsconfigs

* add changesets

* fix cypress typecheck

---------

Co-authored-by: Banks Nussman <[email protected]>

* upcoming: [M3-9084] - Handle edge cases with UDP NodeBalancer (#11515)

* handle edge cases with UDP

* add changesets

* add one more changeset

---------

Co-authored-by: Banks Nussman <[email protected]>

* test: [M3-8692] - Component tests for PasswordInput (#11508)

* initial commit

* password input tests

* Added changeset: Add component tests for PasswordInput

* couple other tests

* test updates + address feedback @hana-akamai

* deps: [M3-9082, M3-9083] - Dependabot Fixes (#11510)

* deps: [M3-9082] - Dependabot Fixes

* Added changeset: Dependabot security fixes

---------

Co-authored-by: Jaalah Ramos <[email protected]>

* fix: [M3-9073] - Fix duplicate specs in Cypress Slack / GH notifications (#11489)

* Avoid duplicating specs in run command output, reduce Slack failure list to 4

* Add changeset

* feat: [DI-22550] - Enhance date range picker component (#11495)

* feat: [DI-22550] - Enhanced default value logic

* feat: [DI-22550] - Added logic to disable end date calendar dates which are before selected start date

* feat: [DI-222550] - Updated test cases

* feat: [DI-22550] - Updated test case

* feat: [DI-22550] - Updated test cases

* feat: [DI-22550] - Added disabled support for timezone

* feat: [DI-22550] - Added qa id

* feat: [DI-22550] - Added Calcutta as additional timezone for IST

* feat: [DI-22550] - Removed error from date picker on click preset button

* feat: [DI-22550] - Remove end date error condition

* Added changeset

* updated changeset

* feat: [DI-22550] - Removed unused variable

* feat: [DI-22550] - fix typechek error

* upcoming: [M3-8921] - Limits Evolution foundations (#11493)

* Add quota API types and endpoints

* Add limitsEvolution feature flag

* Update Quotas API types

* Add Quotas to MSW CRUD preset

* Added changeset: Quotas feature flag and MSW CRUD preset support

* Added changeset: Types for Quotas endpoints

* Move changeset to upcoming

* Add quota query keys and hooks

* Latest API changes

* Feedback @abailly-akamai

* test: [M3-9123] - Reset test account preferences when Cypress starts (#11522)

* Reset test account preferences when environment variable is set

* Reset GHA test account preferences on run start

* Added changeset: Add `CY_TEST_RESET_PREFERENCES` env var to reset user preferences at test run start

* fix: [DI-22875] - Zoom-in icon hover effect fix in CloudPulse (#11526)

* upcoming: [DI-22875] - Zoom-in icon hover effect fix

* upcoming: [DI-22875] - Naming correction

* upcoming: [DI-22875] - Test case fix

* upcoming: [DI-22875] - Add changeset

* upcoming: [DI-22875] - Cypress update

* refactor: [M3-8252] - Remove ramda from `DomainRecords` (Part 1) (#11514)

* Remove ramda from `DomainRecords` pt1

* Added changeset: Remove ramda from `DomainRecords` pt1

* feat: [UIE-8136] - add new users table component (part 2) (#11402)

* upcoming: [M3-9071] - Display cluster provisioning after an LKE-E cluster is created (#11518)

## Description 📝
We want to account for the differences in timing with node provisioning in LKE-E vs standard.

For standard LKE, nodes are returned right when the cluster is created (and display status of provisioning), but that is not possible in enterprise because the machine resources are created only once the cluster is ready.

So for the first ~5 minutes after a LKE-E cluster's creation, the details page displays 'No data to display' under node pools and this delay is not explained to the user.

This PR improves the UX by displaying a cluster provisioning message when a cluster has been created within the first 10 minutes and there have been no nodes returned yet and also surfaces the number of nodes for each pool as added confirmation that the node allocation is correct.

## Changes  🔄

List any change(s) relevant to the reviewer.

- Display cluster provisioning message in the cluster detail page if the cluster was created within the first 10 mins with no nodes returned
- Display number of nodes for each pool
- Update NodePool unit test

## How to test 🧪

### Prerequisites

(How to setup test environment)

- Ensure you have LKE-E customer tags (check project tracker)

```
yarn test NodeTable
```

### Verification steps

(How to verify changes)

- [ ] Create a LKE-E cluster
- [ ] Observe the cluster details page. You should first see a cluster provisioning message in the Node Pools table while the cluster is provisioning. After ~5mins, you should see that replaced with the provisioning nodes
- [ ] Unit tests pass and there are no regressions in the standard LKE cluster flow

---------

Co-authored-by: Mariah Jacobs <[email protected]>

* upcoming: [DI-22838] - Add Scaffolding for resources section in Cloud Pulse Alert details page (#11524)

* upcoming: [DI-22132] - Initial changes for adding resources section

* upcoming: [DI-22838] - Added unit tests

* upcoming: [DI-22838] - Error message corrections

* upcoming: [DI-22838] - Add a skeletal table

* upcoming: [DI-22838] - Update comments

* upcoming: [DI-22838] - Add UT for utils

* upcoming: [DI-22838] - Code refactoring

* upcoming: [DI-22838] - Add changeset

* upcoming: [DI-22838] - Code refactoring for region filter

* upcoming: [DI-22838] - Code refactoring for region filter

* upcoming: [DI-22838] - Updated comments

* upcoming: [DI-22838] - Code refactoring for utils

* upcoming: [DI-22838] - Code refactoring

* upcoming: [DI-22838] - Code comments

* upcoming: [DI-22838] - Removed error text

* upcoming: [DI-22838] - UT update for utils

* upcoming: [DI-22838] - UT updates

* upcoming: [DI-22838] - Import update for TableBody

* upcoming: [DI-22838] - Event handler updates

* upcoming: [DI-22838] - ESlint issue updates

* upcoming: [DI-22838] - Variable name updates

---------

Co-authored-by: vmangalr <[email protected]>

* deps: [M3-9135] - Upgrade to TypeScript v5.7 (#11531)

* update typescript to v5.7

* update typescript to v5.7 part 2

* revert extra change

* revert extra change

* revert extra change

* revert extra change

* add changeset

---------

Co-authored-by: Banks Nussman <[email protected]>

* refactor: [M3-6919] - replace remaining react-select instances & types in Linodes Feature (#11509)

* Type improvements and cleanup

* ip sharing

* select story fix

* feedback @bnussman-akamai

* Added changeset: Replace remaining react-select instances & types in Linodes Feature

* feedback @dwiley-akamai

* change: [M3-9132] – Revise description for "Disk Encryption" section in Linode Create flow (#11536)

* upcoming: [DI - 22836] - Added AddNotificationChannel component (#11511)

* upcoming: [22836] - Added Notification Channel Drawer component with relevant types,schemas

* upcoming: [DI-22836] - adding changesets

* upcoming: [DI-22836] - Renaming the type from ChannelTypes to ChannelType

* upcoming: [DI-22836] - Fixing failing test

* upcoming :[DI-22836] - Review changes: removing conditional rendering of Drawer component

* upcoming: [DI-22836] - Review changes

* upcoming: [DI-22836] - Removed the To label as per review comment

* fix: Notice alignment and Linode details button spacing (#11535)

## Description 📝

Fix some Notice alignment regressions from #11480. (There might be more minor notice alignment issues but these were the ones I noticed)

Also noticed the in-line action button padding looks off in the Linode entity header so adjusted that to match our other entity detail headers

## How to test 🧪
### Verification steps

(How to verify changes)

- [ ] Try to power off a Linode to open the dialog, the alignment should be fixed
- [ ] Go to Linode details page and notice in-line header buttons x padding matches LKE entity header
- [ ] Go to StackScript Create, the tips box alignment should be fixed

---------

Co-authored-by: Banks Nussman <[email protected]>

* test: [M3-9131] - Increase Linode clone timeout to 5 minutes (#11529)

* Increase Linode clone timeout to 5 minutes

* Added changeset: Increase timeouts when performing Linode clone operations

* change: Improve search syntax for `+neq` (#11521)

* improve not equal syntax

* add changeset

---------

Co-authored-by: Banks Nussman <[email protected]>

* refactor: [M3-6916] Replace EnhancedSelect with Autocomplete in: help (#11470)

* refactor: [M3-6916] Replace EnhancedSelect with Autocomplete in: help

* Added changeset: Replace EnhancedSelect with Autocomplete component in the Help feature

* Fix search redirect and Autocomplete options width

* Change hover colors

* Remove Hover regression

* Added Stlying as per the CDS Mockup

* Cleanup

* Replace colors with Design Tokens

* Eliminate the use of classNames for `sx` components.

* Cleanup

* Add a note about necessary env vars for working search

* Remove the use of `searchtext` prop

---------

Co-authored-by: mjac0bs <[email protected]>

* fix: [UIE-8386] - fix redirects to old route (#11539)

Fix redirects from /account/ to /iam/ when editing the username or deleting the user.

* feat: [M3-9158] - Add GPU plans support for LKE in Cloud Manager (#11544)

* initial commit - add GPU split plan selection panel

* test + banner display

* update tables and test for consistency

* Optimize refactor

* remove test skipping

* Added changeset: GPU plans in Kubernetes create flow

* Allo GPU in add node pool drawer

* fix: [M3-9156] - Linode Config Dialog misrepresenting primary interface (#11542)

* initial refacror

* more progress

* clean up

* add schema change

* fix bug

* more progress on clearable issue and clean up

* fix spelling

* sort props

* changeset

* fix typecheck

* comment more

* use getPrimaryInterfaceIndex for unrecommended config notice in subnet linode row - should work now...

* add some comments

* update cypress test to account for implicit primary VPC interfaces

* fix typo

* Apply suggestions from @dwiley-akamai

Thanks!

Co-authored-by: Dajahi Wiley <[email protected]>

---------

Co-authored-by: Banks Nussman <[email protected]>
Co-authored-by: Connie Liu <[email protected]>
Co-authored-by: Dajahi Wiley <[email protected]>

* Cloud Manager v1.135, API v4 v0.133.0, Validation v0.59.0, and UI v0.6.0

* Update changelos

---------

Co-authored-by: mpolotsk-akamai <[email protected]>
Co-authored-by: jdamore-linode <[email protected]>
Co-authored-by: Jaalah Ramos <[email protected]>
Co-authored-by: Jaalah Ramos <[email protected]>
Co-authored-by: Hana Xu <[email protected]>
Co-authored-by: Purvesh Makode <[email protected]>
Co-authored-by: aaleksee-akamai <[email protected]>
Co-authored-by: hasyed-akamai <[email protected]>
Co-authored-by: dmcintyr-akamai <[email protected]>
Co-authored-by: Banks Nussman <[email protected]>
Co-authored-by: Banks Nussman <[email protected]>
Co-authored-by: venkatmano-akamai <[email protected]>
Co-authored-by: vmangalr <[email protected]>
Co-authored-by: Ankita <[email protected]>
Co-authored-by: Mariah Jacobs <[email protected]>
Co-authored-by: Connie Liu <[email protected]>
Co-authored-by: Nikhil Agrawal <[email protected]>
Co-authored-by: Hussain Khalil <[email protected]>
Co-authored-by: Hana Xu <[email protected]>
Co-authored-by: Dajahi Wiley <[email protected]>
Co-authored-by: santoshp210-akamai <[email protected]>
Co-authored-by: mjac0bs <[email protected]>
Co-authored-by: Connie Liu <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Approved Multiple approvals and ready to merge! Bug Fixes for regressions or bugs Linodes Dealing with the Linodes section of the app
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants