Skip to content

Commit 5254642

Browse files
upcoming: [UIE-9368] - Create a firewall Rulesets & Preflixlists feature flag (linode#13051)
* Add firewall rs & pl feature flag * Added changeset: Feature flag for Firewall Rulesets & Prefixlists
1 parent 23e4858 commit 5254642

File tree

5 files changed

+66
-0
lines changed

5 files changed

+66
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@linode/manager": Upcoming Features
3+
---
4+
5+
Feature flag for Firewall Rulesets & Prefixlists ([#13051](https://github.com/linode/manager/pull/13051))

packages/manager/src/dev-tools/FeatureFlagTool.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ const options: { flag: keyof Flags; label: string }[] = [
3030
{ flag: 'blockStorageVolumeLimit', label: 'Block Storage Volume Limit' },
3131
{ flag: 'cloudNat', label: 'Cloud NAT' },
3232
{ flag: 'disableLargestGbPlans', label: 'Disable Largest GB Plans' },
33+
{
34+
flag: 'firewallRulesetsPrefixlists',
35+
label: 'Firewall Rulesets & Prefixlists',
36+
},
3337
{ flag: 'gecko2', label: 'Gecko' },
3438
{ flag: 'generationalPlans', label: 'Generational compute plans' },
3539
{ flag: 'limitsEvolution', label: 'Limits Evolution' },

packages/manager/src/featureFlags.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ export interface Flags {
193193
dbaasV2: BetaFeatureFlag;
194194
dbaasV2MonitorMetrics: BetaFeatureFlag;
195195
disableLargestGbPlans: boolean;
196+
firewallRulesetsPrefixlists: boolean;
196197
gecko2: GeckoFeatureFlag;
197198
generationalPlans: boolean;
198199
gpuv2: GpuV2;

packages/manager/src/features/Firewalls/shared.test.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1+
import { renderHook, waitFor } from '@testing-library/react';
2+
3+
import { wrapWithTheme } from 'src/utilities/testHelpers';
4+
15
import {
26
allIPv4,
37
allIPv6,
48
generateAddressesLabel,
59
predefinedFirewallFromRule,
10+
useIsFirewallRulesetsPrefixlistsEnabled,
611
} from './shared';
712

813
import type { FirewallRuleType } from '@linode/api-v4/lib/firewalls/types';
@@ -144,3 +149,35 @@ describe('generateAddressLabel', () => {
144149
);
145150
});
146151
});
152+
153+
describe('useIsFirewallRulesetsPrefixlistsEnabled', () => {
154+
it('returns true if the feature is enabled', async () => {
155+
const options = { flags: { firewallRulesetsPrefixlists: true } };
156+
157+
const { result } = renderHook(
158+
() => useIsFirewallRulesetsPrefixlistsEnabled(),
159+
{
160+
wrapper: (ui) => wrapWithTheme(ui, options),
161+
}
162+
);
163+
164+
await waitFor(() => {
165+
expect(result.current.isFirewallRulesetsPrefixlistsEnabled).toBe(true);
166+
});
167+
});
168+
169+
it('returns false if the feature is NOT enabled', async () => {
170+
const options = { flags: { firewallRulesetsPrefixlists: false } };
171+
172+
const { result } = renderHook(
173+
() => useIsFirewallRulesetsPrefixlistsEnabled(),
174+
{
175+
wrapper: (ui) => wrapWithTheme(ui, options),
176+
}
177+
);
178+
179+
await waitFor(() => {
180+
expect(result.current.isFirewallRulesetsPrefixlistsEnabled).toBe(false);
181+
});
182+
});
183+
});

packages/manager/src/features/Firewalls/shared.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { truncateAndJoinList } from '@linode/utilities';
22
import { capitalize } from '@linode/utilities';
33

4+
import { useFlags } from 'src/hooks/useFlags';
5+
46
import type { PORT_PRESETS } from './FirewallDetail/Rules/shared';
57
import type {
68
Firewall,
@@ -255,3 +257,20 @@ export const getFirewallDescription = (firewall: Firewall) => {
255257
];
256258
return description.join(', ');
257259
};
260+
261+
/**
262+
* Returns whether or not features related to the Firewall Rulesets & Prefixlists project
263+
* should be enabled.
264+
*
265+
* Note: Currently, this just uses the `firewallRulesetsPrefixlists` feature flag as a source of truth,
266+
* but will eventually also look at account capabilities if available.
267+
*/
268+
export const useIsFirewallRulesetsPrefixlistsEnabled = () => {
269+
const flags = useFlags();
270+
271+
// @TODO: Firewall Rulesets & Prefixlists - check for customer tag/account capability when it exists
272+
return {
273+
isFirewallRulesetsPrefixlistsEnabled:
274+
flags.firewallRulesetsPrefixlists ?? false,
275+
};
276+
};

0 commit comments

Comments
 (0)