value.value === option.value}
+ label="Value"
+ limitTags={1}
+ loading={!disabled && isLoading && !isError}
+ multiple={multiple}
+ onBlur={fieldOnBlur}
+ onChange={(_, selected, operation) => {
+ const newValue = handleValueChange(
+ selected,
+ operation,
+ multiple ?? false
+ );
+ fieldOnChange(newValue);
+ }}
+ options={values}
+ placeholder={placeholderText}
+ sx={{ flex: 1 }}
+ value={resolveSelectedValues(values, fieldValue, multiple ?? false)}
+ />
+ );
+};
diff --git a/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/ValueFieldRenderer.test.tsx b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/ValueFieldRenderer.test.tsx
index 9be5bb91063..d632857c973 100644
--- a/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/ValueFieldRenderer.test.tsx
+++ b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/ValueFieldRenderer.test.tsx
@@ -7,14 +7,27 @@ import { renderWithTheme } from 'src/utilities/testHelpers';
import { ValueFieldRenderer } from './ValueFieldRenderer';
+import type { DimensionFilterAutocompleteProps } from './constants';
import type {
CloudPulseServiceType,
DimensionFilterOperatorType,
} from '@linode/api-v4';
// Mock child components
+vi.mock('./BlockStorageDimensionFilterAutocomplete', () => ({
+ BlockStorageDimensionFilterAutocomplete: (
+ props: DimensionFilterAutocompleteProps
+ ) => (
+
+ BlockStorage Autocomplete
+
+ ),
+}));
+
vi.mock('./FirewallDimensionFilterAutocomplete', () => ({
- FirewallDimensionFilterAutocomplete: (props: any) => (
+ FirewallDimensionFilterAutocomplete: (
+ props: DimensionFilterAutocompleteProps
+ ) => (
Firewall Autocomplete
@@ -22,7 +35,9 @@ vi.mock('./FirewallDimensionFilterAutocomplete', () => ({
}));
vi.mock('./ObjectStorageDimensionFilterAutocomplete', () => ({
- ObjectStorageDimensionFilterAutocomplete: (props: any) => (
+ ObjectStorageDimensionFilterAutocomplete: (
+ props: DimensionFilterAutocompleteProps
+ ) => (
ObjectStorage Autocomplete
@@ -30,7 +45,7 @@ vi.mock('./ObjectStorageDimensionFilterAutocomplete', () => ({
}));
vi.mock('./DimensionFilterAutocomplete', () => ({
- DimensionFilterAutocomplete: (props: any) => (
+ DimensionFilterAutocomplete: (props: DimensionFilterAutocompleteProps) => (
DimensionFilter Autocomplete
@@ -40,7 +55,9 @@ vi.mock('./DimensionFilterAutocomplete', () => ({
const EQ: DimensionFilterOperatorType = 'eq';
const IN: DimensionFilterOperatorType = 'in';
const NB: CloudPulseServiceType = 'nodebalancer';
-
+const CF: CloudPulseServiceType = 'firewall';
+const OS: CloudPulseServiceType = 'objectstorage';
+const BS: CloudPulseServiceType = 'blockstorage';
describe('', () => {
const defaultProps = {
serviceType: NB,
@@ -85,6 +102,7 @@ describe('', () => {
...defaultProps,
dimensionLabel: 'linode_id', // assume this is configured with useCustomFetch: 'firewall'
operator: IN,
+ serviceType: CF,
};
renderWithTheme();
@@ -96,11 +114,23 @@ describe('', () => {
...defaultProps,
dimensionLabel: 'endpoint', // assume this is configured with useCustomFetch: 'objectstorage'
operator: IN,
+ serviceType: OS,
};
renderWithTheme();
expect(screen.getByTestId('objectstorage-autocomplete')).toBeVisible();
});
+ it('renders BlockStorageDimensionFilter if config.useCustomFetch = blockstorage', () => {
+ const props = {
+ ...defaultProps,
+ serviceType: BS,
+ dimensionLabel: 'linode_id', // assume this is configured with useCustomFetch: 'blockstorage'
+ operator: IN,
+ };
+
+ renderWithTheme();
+ expect(screen.getByTestId('blockstorage-autocomplete')).toBeVisible();
+ });
it('calls onChange when typing into TextField', async () => {
const user = userEvent.setup();
diff --git a/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/ValueFieldRenderer.tsx b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/ValueFieldRenderer.tsx
index 2ac7691b057..3bb1ce9d033 100644
--- a/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/ValueFieldRenderer.tsx
+++ b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/ValueFieldRenderer.tsx
@@ -1,6 +1,7 @@
import { TextField } from '@linode/ui';
import React from 'react';
+import { BlockStorageDimensionFilterAutocomplete } from './BlockStorageDimensionFilterAutocomplete';
import {
MULTISELECT_PLACEHOLDER_TEXT,
SINGLESELECT_PLACEHOLDER_TEXT,
@@ -145,58 +146,61 @@ export const ValueFieldRenderer = (props: ValueFieldRendererProps) => {
? MULTISELECT_PLACEHOLDER_TEXT
: SINGLESELECT_PLACEHOLDER_TEXT;
- switch (config.useCustomFetch) {
+ // Common props shared across all autocomplete components
+ const commonAutocompleteProps = {
+ dimensionLabel,
+ disabled,
+ errorText,
+ fieldOnBlur: onBlur,
+ fieldOnChange: onChange,
+ fieldValue: value,
+ multiple: config.multiple,
+ name,
+ placeholderText: config.placeholder ?? autocompletePlaceholder,
+ serviceType: serviceType ?? null,
+ type,
+ };
+
+ // Determine custom fetch behaviour if there are same dimension_labels across service types
+ const customFetch = Array.isArray(config.useCustomFetch)
+ ? config.useCustomFetch.includes(serviceType ?? '')
+ ? serviceType
+ : undefined
+ : config.useCustomFetch === serviceType
+ ? serviceType
+ : undefined;
+
+ switch (customFetch) {
+ case 'blockstorage':
+ return (
+
+ );
case 'firewall':
return (
);
case 'objectstorage':
return (
);
default:
return (
);
diff --git a/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/constants.ts b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/constants.ts
index 5e8e2a20fd5..a4350f92b33 100644
--- a/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/constants.ts
+++ b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/constants.ts
@@ -102,7 +102,7 @@ export interface AutocompleteConfig extends BaseConfig {
/**
* Flag to use a custom fetch function instead of the static options.
*/
- useCustomFetch?: string;
+ useCustomFetch?: string | string[];
}
/**
@@ -161,7 +161,7 @@ export const valueFieldConfig: ValueFieldConfigMap = {
eq_neq: {
type: 'autocomplete',
multiple: false,
- useCustomFetch: 'firewall',
+ useCustomFetch: ['firewall', 'blockstorage'],
},
startswith_endswith: {
type: 'textfield',
@@ -170,7 +170,7 @@ export const valueFieldConfig: ValueFieldConfigMap = {
in: {
type: 'autocomplete',
multiple: true,
- useCustomFetch: 'firewall',
+ useCustomFetch: ['firewall', 'blockstorage'],
},
'*': {
type: 'textfield',
diff --git a/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/useBlockStorageFetchOptions.ts b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/useBlockStorageFetchOptions.ts
new file mode 100644
index 00000000000..8e41e5b2bda
--- /dev/null
+++ b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/useBlockStorageFetchOptions.ts
@@ -0,0 +1,99 @@
+import { useAllLinodesQuery } from '@linode/queries';
+import { useMemo } from 'react';
+
+import { useResourcesQuery } from 'src/queries/cloudpulse/resources';
+
+import { getOfflineRegionFilteredResources } from '../../../Utils/AlertResourceUtils';
+import { filterRegionByServiceType } from '../../../Utils/utils';
+import { getBlockStorageLinodes, scopeBasedFilteredResources } from './utils';
+
+import type { FetchOptions, FetchOptionsProps } from './constants';
+import type { Filter } from '@linode/api-v4';
+
+export function useBlockStorageFetchOptions(
+ props: FetchOptionsProps
+): FetchOptions {
+ const {
+ dimensionLabel,
+ regions,
+ entities,
+ serviceType,
+ type,
+ scope,
+ selectedRegions,
+ } = props;
+
+ const {
+ data: blockStorageResources,
+ isLoading: isBlockStorageLoading,
+ isError: isBlockStorageError,
+ } = useResourcesQuery(dimensionLabel === 'linode_id', 'blockstorage');
+
+ // Offline filter buckets by supported regions
+ const supportedRegionIds =
+ (regions &&
+ filterRegionByServiceType(type, regions, 'blockstorage').map(
+ ({ id }) => id
+ )) ||
+ [];
+
+ // Create a filter for regions based on supported region IDs
+ const regionFilter: Filter = {
+ '+or':
+ supportedRegionIds && supportedRegionIds.length > 0
+ ? supportedRegionIds.map((regionId) => ({
+ region: regionId,
+ }))
+ : undefined,
+ };
+
+ const regionFilteredBuckets = getOfflineRegionFilteredResources(
+ blockStorageResources ?? [],
+ supportedRegionIds
+ );
+
+ const filteredResources = scopeBasedFilteredResources({
+ scope: scope ?? null,
+ resources: regionFilteredBuckets,
+ entities,
+ selectedRegions,
+ });
+
+ const filteredBlockStorageParentEntityIds = filteredResources?.map(
+ ({ volumeLinodeId }) => volumeLinodeId
+ );
+
+ const idFilter: Filter = {
+ '+or': filteredBlockStorageParentEntityIds.length
+ ? filteredBlockStorageParentEntityIds.map((id) => ({ id }))
+ : undefined,
+ };
+
+ const combinedFilter: Filter = {
+ '+and': [regionFilter, idFilter].filter(Boolean),
+ };
+
+ const {
+ data: linodes,
+ isError: isLinodesError,
+ isLoading: isLinodesLoading,
+ } = useAllLinodesQuery(
+ {},
+ combinedFilter,
+ serviceType === 'blockstorage' &&
+ dimensionLabel === 'linode_id' &&
+ filteredBlockStorageParentEntityIds.length > 0 &&
+ supportedRegionIds.length > 0
+ );
+
+ const blockStorageLinodes = useMemo(
+ () => getBlockStorageLinodes(linodes ?? []),
+ [linodes]
+ );
+
+ return {
+ values: blockStorageLinodes,
+ isLoading: isLinodesLoading || isBlockStorageLoading,
+ isError: isBlockStorageError || isLinodesError,
+ };
+}
diff --git a/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/useFirewallFetchOptions.ts b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/useFirewallFetchOptions.ts
index e842db0468d..64d2371e15e 100644
--- a/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/useFirewallFetchOptions.ts
+++ b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/useFirewallFetchOptions.ts
@@ -51,7 +51,7 @@ export function useFirewallFetchOptions(
? supportedRegionIds.map((regionId) => ({
region: regionId,
}))
- : [{ region: '' }],
+ : undefined,
};
const filterLabels: string[] = [
diff --git a/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/useObjectStorageFetchOptions.ts b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/useObjectStorageFetchOptions.ts
index d709aca65bd..7a651b4d33a 100644
--- a/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/useObjectStorageFetchOptions.ts
+++ b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/useObjectStorageFetchOptions.ts
@@ -5,7 +5,7 @@ import {
getOfflineRegionFilteredResources,
} from '../../../Utils/AlertResourceUtils';
import { filterRegionByServiceType } from '../../../Utils/utils';
-import { scopeBasedFilteredBuckets } from './utils';
+import { scopeBasedFilteredResources } from './utils';
import type { FetchOptions, FetchOptionsProps } from './constants';
/**
@@ -40,9 +40,9 @@ export function useObjectStorageFetchOptions(
);
// Filtering the buckets based on the scope
- const filteredBuckets = scopeBasedFilteredBuckets({
+ const filteredBuckets = scopeBasedFilteredResources({
scope: scope ?? null,
- buckets: regionFilteredBuckets,
+ resources: regionFilteredBuckets,
entities,
selectedRegions,
});
diff --git a/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/utils.test.ts b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/utils.test.ts
index 099c3bcd7d8..80c6f9787a8 100644
--- a/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/utils.test.ts
+++ b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/utils.test.ts
@@ -10,7 +10,7 @@ import {
getStaticOptions,
handleValueChange,
resolveSelectedValues,
- scopeBasedFilteredBuckets,
+ scopeBasedFilteredResources,
} from './utils';
import type { Linode } from '@linode/api-v4';
@@ -243,17 +243,17 @@ describe('Utils', () => {
];
it('returns all buckets for account scope', () => {
- const result = scopeBasedFilteredBuckets({
+ const result = scopeBasedFilteredResources({
scope: 'account',
- buckets,
+ resources: buckets,
});
expect(result).toEqual(buckets);
});
it('filters buckets by entity IDs for entity scope', () => {
- const result = scopeBasedFilteredBuckets({
+ const result = scopeBasedFilteredResources({
scope: 'entity',
- buckets,
+ resources: buckets,
entities: ['bucket-1', 'bucket-3'],
});
expect(result).toEqual([
@@ -263,26 +263,26 @@ describe('Utils', () => {
});
it('returns empty array if no entities match for entity scope', () => {
- const result = scopeBasedFilteredBuckets({
+ const result = scopeBasedFilteredResources({
scope: 'entity',
- buckets,
+ resources: buckets,
entities: ['bucket-99'],
});
expect(result).toEqual([]);
});
it('returns empty array if entities is undefined for entity scope', () => {
- const result = scopeBasedFilteredBuckets({
+ const result = scopeBasedFilteredResources({
scope: 'entity',
- buckets,
+ resources: buckets,
});
expect(result).toEqual([]);
});
it('filters buckets by region IDs for region scope', () => {
- const result = scopeBasedFilteredBuckets({
+ const result = scopeBasedFilteredResources({
scope: 'region',
- buckets,
+ resources: buckets,
selectedRegions: ['us-east', 'eu-central'],
});
expect(result).toEqual([
@@ -292,34 +292,34 @@ describe('Utils', () => {
});
it('returns empty array if no regions match for region scope', () => {
- const result = scopeBasedFilteredBuckets({
+ const result = scopeBasedFilteredResources({
scope: 'region',
- buckets,
+ resources: buckets,
selectedRegions: ['ap-south'],
});
expect(result).toEqual([]);
});
it('returns empty array if selectedRegions is undefined for region scope', () => {
- const result = scopeBasedFilteredBuckets({
+ const result = scopeBasedFilteredResources({
scope: 'region',
- buckets,
+ resources: buckets,
});
expect(result).toEqual([]);
});
it('returns all buckets for null scope', () => {
- const result = scopeBasedFilteredBuckets({
+ const result = scopeBasedFilteredResources({
scope: null,
- buckets,
+ resources: buckets,
});
expect(result).toEqual(buckets);
});
it('returns all buckets for unrecognized scope', () => {
- const result = scopeBasedFilteredBuckets({
+ const result = scopeBasedFilteredResources({
scope: null,
- buckets,
+ resources: buckets,
});
expect(result).toEqual(buckets);
});
diff --git a/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/utils.ts b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/utils.ts
index 5aee1f0f177..ab8be225fab 100644
--- a/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/utils.ts
+++ b/packages/manager/src/features/CloudPulse/Alerts/CreateAlert/Criteria/DimensionFilterValue/utils.ts
@@ -180,15 +180,15 @@ export const getVPCSubnets = (vpcs: VPC[]): Item[] => {
);
};
-interface ScopeBasedFilteredBucketsProps {
+interface ScopeBasedFilteredResourcesProps {
/**
- * The full list of available CloudPulse resources (buckets).
+ * A list of entity IDs to filter by when scope is `entity`.
*/
- buckets: CloudPulseResources[];
+ entities?: string[];
/**
- * A list of entity IDs (bucket IDs) to filter by when scope is `entity`.
+ * The full list of available CloudPulse resources.
*/
- entities?: string[];
+ resources: CloudPulseResources[];
/**
* The scope of the alert definition (`account`, `entity`, `region`, or `null`).
*/
@@ -199,31 +199,45 @@ interface ScopeBasedFilteredBucketsProps {
selectedRegions?: null | string[];
}
-/**
- * Filters a list of Object Storage buckets based on the given alert definition scope.
+/* Filters a list of Resource objects based on the given alert definition scope.
*
* @param props - Object containing filter parameters.
- * @returns A filtered list of buckets based on the provided scope.
+ * @returns A filtered list of resources based on the provided scope.
*/
-export const scopeBasedFilteredBuckets = (
- props: ScopeBasedFilteredBucketsProps
+export const scopeBasedFilteredResources = (
+ props: ScopeBasedFilteredResourcesProps
): CloudPulseResources[] => {
- const { scope, buckets, selectedRegions, entities } = props;
+ const { scope, resources, selectedRegions, entities } = props;
switch (scope) {
case 'account':
- return buckets;
+ return resources;
case 'entity':
return entities
- ? buckets.filter((bucket) => entities.includes(bucket.id))
+ ? resources.filter((resource) => entities.includes(resource.id))
: [];
case 'region':
return selectedRegions
- ? buckets.filter((bucket) =>
- selectedRegions.includes(bucket.region ?? '')
+ ? resources.filter((resource) =>
+ selectedRegions.includes(resource.region ?? '')
)
: [];
default:
- return buckets;
+ return resources;
}
};
+
+/**
+ * Extracts linode items from firewall resources by merging entities.
+ * @param resources - List of firewall resources with entity mappings.
+ * @returns - Flattened list of linode ID/label pairs as options.
+ */
+export const getBlockStorageLinodes = (
+ linodes: Linode[]
+): Item[] => {
+ if (!linodes) return [];
+ return linodes.map((linode) => ({
+ label: transformDimensionValue('blockstorage', 'linode_id', linode.label),
+ value: String(linode.id),
+ }));
+};
diff --git a/packages/manager/src/features/CloudPulse/shared/CloudPulseResourcesSelect.tsx b/packages/manager/src/features/CloudPulse/shared/CloudPulseResourcesSelect.tsx
index ed1950ee874..a6b234c03cc 100644
--- a/packages/manager/src/features/CloudPulse/shared/CloudPulseResourcesSelect.tsx
+++ b/packages/manager/src/features/CloudPulse/shared/CloudPulseResourcesSelect.tsx
@@ -23,6 +23,7 @@ export interface CloudPulseResources {
label: string;
region?: string;
tags?: string[];
+ volumeLinodeId?: string;
}
export interface CloudPulseResourcesSelectProps {
diff --git a/packages/manager/src/features/CloudPulse/shared/DimensionTransform.ts b/packages/manager/src/features/CloudPulse/shared/DimensionTransform.ts
index c7ccdae7870..d90b7c1d669 100644
--- a/packages/manager/src/features/CloudPulse/shared/DimensionTransform.ts
+++ b/packages/manager/src/features/CloudPulse/shared/DimensionTransform.ts
@@ -38,4 +38,7 @@ export const DIMENSION_TRANSFORM_CONFIG: Partial<
objectstorage: {
endpoint: TRANSFORMS.original,
},
+ blockstorage: {
+ linode_id: TRANSFORMS.original,
+ },
};
diff --git a/packages/manager/src/mocks/serverHandlers.ts b/packages/manager/src/mocks/serverHandlers.ts
index 4148cfd5a41..28833ad984d 100644
--- a/packages/manager/src/mocks/serverHandlers.ts
+++ b/packages/manager/src/mocks/serverHandlers.ts
@@ -45,6 +45,8 @@ import {
alertFactory,
alertRulesFactory,
appTokenFactory,
+ blockStorageMetricCriteria,
+ blockStorageMetricRules,
contactFactory,
credentialFactory,
creditPaymentResponseFactory,
@@ -1674,7 +1676,22 @@ export const handlers = [
'resizing',
];
const volumes = statuses.map((status) =>
- volumeFactory.build({ status, region: 'ap-west' })
+ volumeFactory.build({ status, region: 'ap-west', linode_id: 1 })
+ );
+ volumes.push(
+ ...volumeFactory.buildList(2, { region: 'us-east', linode_id: 2 })
+ );
+ volumes.push(
+ ...volumeFactory.buildList(2, { region: 'us-east', linode_id: 3 })
+ );
+ volumes.push(
+ ...volumeFactory.buildList(2, { region: 'us-east', linode_id: 4 })
+ );
+ volumes.push(
+ ...volumeFactory.buildList(2, { region: 'us-east', linode_id: 5 })
+ );
+ volumes.push(
+ ...volumeFactory.buildList(5, { region: 'eu-central', linode_id: 1 })
);
return HttpResponse.json(makeResourcePage(volumes));
}),
@@ -3014,6 +3031,16 @@ export const handlers = [
service_type: 'objectstorage',
entity_ids: ['obj-bucket-804.ap-west.linodeobjects.com'],
}),
+ alertFactory.build({
+ id: 300,
+ type: 'user',
+ label: 'block-storage - testing',
+ service_type: 'blockstorage',
+ entity_ids: ['1', '2', '4', '3', '5', '6', '7', '8', '9', '10'],
+ rule_criteria: {
+ rules: [blockStorageMetricCriteria.build()],
+ },
+ }),
];
return HttpResponse.json(makeResourcePage(alerts));
}),
@@ -3051,6 +3078,20 @@ export const handlers = [
})
);
}
+ if (params.id === '300' && params.serviceType === 'blockstorage') {
+ return HttpResponse.json(
+ alertFactory.build({
+ id: 300,
+ type: 'user',
+ label: 'block-storage - testing',
+ service_type: 'blockstorage',
+ entity_ids: ['1', '2', '4', '3', '5', '6', '7', '8', '9', '10'],
+ rule_criteria: {
+ rules: [blockStorageMetricCriteria.build()],
+ },
+ })
+ );
+ }
if (params.id !== undefined) {
return HttpResponse.json(
alertFactory.build({
@@ -3103,6 +3144,20 @@ export const handlers = [
})
);
}
+ if (params.id === '300' && params.serviceType === 'blockstorage') {
+ return HttpResponse.json(
+ alertFactory.build({
+ id: 300,
+ type: 'user',
+ label: 'block-storage - testing',
+ service_type: 'blockstorage',
+ entity_ids: ['1', '2', '4', '3', '5', '6', '7', '8', '9', '10'],
+ rule_criteria: {
+ rules: [blockStorageMetricCriteria.build()],
+ },
+ })
+ );
+ }
const body: any = request.json();
return HttpResponse.json(
alertFactory.build({
@@ -3197,7 +3252,7 @@ export const handlers = [
evaluation_period_seconds: [300],
polling_interval_seconds: [300],
scope:
- serviceType === 'objectstorage'
+ serviceType === 'objectstorage' || serviceType === 'blockstorage'
? ['entity', 'account', 'region']
: ['entity'],
}),
@@ -3590,6 +3645,9 @@ export const handlers = [
if (params.serviceType === 'objectstorage') {
return HttpResponse.json({ data: objectStorageMetricRules });
}
+ if (params.serviceType === 'blockstorage') {
+ return HttpResponse.json({ data: blockStorageMetricRules });
+ }
return HttpResponse.json(response);
}
),
diff --git a/packages/manager/src/queries/cloudpulse/resources.ts b/packages/manager/src/queries/cloudpulse/resources.ts
index 59641f942b5..405b5ea8820 100644
--- a/packages/manager/src/queries/cloudpulse/resources.ts
+++ b/packages/manager/src/queries/cloudpulse/resources.ts
@@ -62,6 +62,7 @@ export const useResourcesQuery = (
endpoint: resource.s3_endpoint,
entities,
clusterSize: resource.cluster_size,
+ volumeLinodeId: String(resource.linode_id),
};
});
},
diff --git a/packages/utilities/src/__data__/regionsData.ts b/packages/utilities/src/__data__/regionsData.ts
index 28101c979eb..1a73d8320fc 100644
--- a/packages/utilities/src/__data__/regionsData.ts
+++ b/packages/utilities/src/__data__/regionsData.ts
@@ -29,7 +29,7 @@ export const regions: Region[] = [
site_type: 'core',
status: 'ok',
monitors: {
- alerts: ['Cloud Firewall', 'Object Storage'],
+ alerts: ['Cloud Firewall', 'Object Storage', 'Block Storage'],
metrics: [
'Object Storage',
'Cloud Firewall',
@@ -664,7 +664,10 @@ export const regions: Region[] = [
},
site_type: 'core',
status: 'ok',
- monitors: { alerts: ['Linodes'], metrics: ['NodeBalancers'] },
+ monitors: {
+ alerts: ['Linodes', 'Block Storage'],
+ metrics: ['NodeBalancers'],
+ },
},
{
capabilities: [
From 1a1e18f627f4423b01adbd67d37d3fea5b5018bc Mon Sep 17 00:00:00 2001
From: Alban Bailly
Date: Thu, 13 Nov 2025 10:35:27 +0100
Subject: [PATCH 41/41] Cloud version 1.155.0, API v4 version 0.153.0,
Utilities version 0.12.0, Queries version 0.17.0
---
.../pr-13017-changed-1761555478867.md | 5 --
.../pr-13033-added-1761736259411.md | 5 --
...r-13038-upcoming-features-1761832086254.md | 5 --
...r-13061-upcoming-features-1762412605096.md | 5 --
.../pr-13062-added-1762436128763.md | 5 --
...r-13064-upcoming-features-1762444425315.md | 5 --
...r-13070-upcoming-features-1762520053797.md | 5 --
packages/api-v4/CHANGELOG.md | 19 +++++++
packages/api-v4/package.json | 2 +-
.../pr-12967-tests-1762800264059.md | 5 --
.../pr-13002-tech-stories-1761925907093.md | 5 --
.../pr-13008-tests-1761219062241.md | 5 --
.../pr-13017-changed-1761555510591.md | 5 --
...r-13022-upcoming-features-1761581678060.md | 5 --
.../pr-13033-added-1761736284038.md | 5 --
.../pr-13034-fixed-1761754563010.md | 5 --
.../pr-13037-fixed-1761831767872.md | 5 --
...r-13038-upcoming-features-1761833381307.md | 5 --
...r-13042-upcoming-features-1761904401989.md | 5 --
.../pr-13043-added-1761922908861.md | 5 --
.../pr-13044-tech-stories-1761925886848.md | 5 --
.../pr-13046-fixed-1762164490931.md | 5 --
.../pr-13047-fixed-1762181966107.md | 5 --
...r-13048-upcoming-features-1762334225681.md | 5 --
.../pr-13049-fixed-1762250513797.md | 5 --
.../pr-13050-changed-1762189590928.md | 5 --
...r-13051-upcoming-features-1762253162476.md | 5 --
.../pr-13052-changed-1762261389682.md | 5 --
...r-13054-upcoming-features-1762273666682.md | 5 --
.../pr-13055-added-1761777373017.md | 5 --
.../pr-13056-fixed-1762431727811.md | 5 --
.../pr-13058-fixed-1762347933543.md | 5 --
...r-13062-upcoming-features-1762436186094.md | 5 --
...r-13063-upcoming-features-1762436208092.md | 5 --
...r-13064-upcoming-features-1762444937800.md | 5 --
.../pr-13065-fixed-1762443312308.md | 5 --
.../pr-13066-fixed-1762843106064.md | 5 --
.../pr-13067-tech-stories-1762508629516.md | 5 --
...r-13069-upcoming-features-1762501292300.md | 5 --
...r-13070-upcoming-features-1762520005187.md | 5 --
.../pr-13072-tests-1762800216646.md | 5 --
...r-13073-upcoming-features-1762707898134.md | 5 --
.../pr-13074-fixed-1762772948024.md | 5 --
.../pr-13076-tests-1762800160866.md | 5 --
.../pr-13080-added-1762923818606.md | 5 --
packages/manager/CHANGELOG.md | 57 +++++++++++++++++++
packages/manager/package.json | 2 +-
...r-13061-upcoming-features-1762412640686.md | 5 --
...r-13070-upcoming-features-1762520076076.md | 5 --
packages/queries/CHANGELOG.md | 8 +++
packages/queries/package.json | 2 +-
.../pr-13067-tech-stories-1762499626930.md | 5 --
packages/utilities/CHANGELOG.md | 7 +++
packages/utilities/package.json | 2 +-
54 files changed, 95 insertions(+), 234 deletions(-)
delete mode 100644 packages/api-v4/.changeset/pr-13017-changed-1761555478867.md
delete mode 100644 packages/api-v4/.changeset/pr-13033-added-1761736259411.md
delete mode 100644 packages/api-v4/.changeset/pr-13038-upcoming-features-1761832086254.md
delete mode 100644 packages/api-v4/.changeset/pr-13061-upcoming-features-1762412605096.md
delete mode 100644 packages/api-v4/.changeset/pr-13062-added-1762436128763.md
delete mode 100644 packages/api-v4/.changeset/pr-13064-upcoming-features-1762444425315.md
delete mode 100644 packages/api-v4/.changeset/pr-13070-upcoming-features-1762520053797.md
delete mode 100644 packages/manager/.changeset/pr-12967-tests-1762800264059.md
delete mode 100644 packages/manager/.changeset/pr-13002-tech-stories-1761925907093.md
delete mode 100644 packages/manager/.changeset/pr-13008-tests-1761219062241.md
delete mode 100644 packages/manager/.changeset/pr-13017-changed-1761555510591.md
delete mode 100644 packages/manager/.changeset/pr-13022-upcoming-features-1761581678060.md
delete mode 100644 packages/manager/.changeset/pr-13033-added-1761736284038.md
delete mode 100644 packages/manager/.changeset/pr-13034-fixed-1761754563010.md
delete mode 100644 packages/manager/.changeset/pr-13037-fixed-1761831767872.md
delete mode 100644 packages/manager/.changeset/pr-13038-upcoming-features-1761833381307.md
delete mode 100644 packages/manager/.changeset/pr-13042-upcoming-features-1761904401989.md
delete mode 100644 packages/manager/.changeset/pr-13043-added-1761922908861.md
delete mode 100644 packages/manager/.changeset/pr-13044-tech-stories-1761925886848.md
delete mode 100644 packages/manager/.changeset/pr-13046-fixed-1762164490931.md
delete mode 100644 packages/manager/.changeset/pr-13047-fixed-1762181966107.md
delete mode 100644 packages/manager/.changeset/pr-13048-upcoming-features-1762334225681.md
delete mode 100644 packages/manager/.changeset/pr-13049-fixed-1762250513797.md
delete mode 100644 packages/manager/.changeset/pr-13050-changed-1762189590928.md
delete mode 100644 packages/manager/.changeset/pr-13051-upcoming-features-1762253162476.md
delete mode 100644 packages/manager/.changeset/pr-13052-changed-1762261389682.md
delete mode 100644 packages/manager/.changeset/pr-13054-upcoming-features-1762273666682.md
delete mode 100644 packages/manager/.changeset/pr-13055-added-1761777373017.md
delete mode 100644 packages/manager/.changeset/pr-13056-fixed-1762431727811.md
delete mode 100644 packages/manager/.changeset/pr-13058-fixed-1762347933543.md
delete mode 100644 packages/manager/.changeset/pr-13062-upcoming-features-1762436186094.md
delete mode 100644 packages/manager/.changeset/pr-13063-upcoming-features-1762436208092.md
delete mode 100644 packages/manager/.changeset/pr-13064-upcoming-features-1762444937800.md
delete mode 100644 packages/manager/.changeset/pr-13065-fixed-1762443312308.md
delete mode 100644 packages/manager/.changeset/pr-13066-fixed-1762843106064.md
delete mode 100644 packages/manager/.changeset/pr-13067-tech-stories-1762508629516.md
delete mode 100644 packages/manager/.changeset/pr-13069-upcoming-features-1762501292300.md
delete mode 100644 packages/manager/.changeset/pr-13070-upcoming-features-1762520005187.md
delete mode 100644 packages/manager/.changeset/pr-13072-tests-1762800216646.md
delete mode 100644 packages/manager/.changeset/pr-13073-upcoming-features-1762707898134.md
delete mode 100644 packages/manager/.changeset/pr-13074-fixed-1762772948024.md
delete mode 100644 packages/manager/.changeset/pr-13076-tests-1762800160866.md
delete mode 100644 packages/manager/.changeset/pr-13080-added-1762923818606.md
delete mode 100644 packages/queries/.changeset/pr-13061-upcoming-features-1762412640686.md
delete mode 100644 packages/queries/.changeset/pr-13070-upcoming-features-1762520076076.md
delete mode 100644 packages/utilities/.changeset/pr-13067-tech-stories-1762499626930.md
diff --git a/packages/api-v4/.changeset/pr-13017-changed-1761555478867.md b/packages/api-v4/.changeset/pr-13017-changed-1761555478867.md
deleted file mode 100644
index 33ca880758e..00000000000
--- a/packages/api-v4/.changeset/pr-13017-changed-1761555478867.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/api-v4": Changed
----
-
-IAM: cleanup for nodebalancer permissions ([#13017](https://github.com/linode/manager/pull/13017))
diff --git a/packages/api-v4/.changeset/pr-13033-added-1761736259411.md b/packages/api-v4/.changeset/pr-13033-added-1761736259411.md
deleted file mode 100644
index e98818c632e..00000000000
--- a/packages/api-v4/.changeset/pr-13033-added-1761736259411.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/api-v4": Added
----
-
-IAM Parent/Child: delegate permissions ([#13033](https://github.com/linode/manager/pull/13033))
diff --git a/packages/api-v4/.changeset/pr-13038-upcoming-features-1761832086254.md b/packages/api-v4/.changeset/pr-13038-upcoming-features-1761832086254.md
deleted file mode 100644
index 3b9d9f57cc8..00000000000
--- a/packages/api-v4/.changeset/pr-13038-upcoming-features-1761832086254.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/api-v4": Upcoming Features
----
-
-Clean up Delivery Stream and Destination interfaces ([#13038](https://github.com/linode/manager/pull/13038))
diff --git a/packages/api-v4/.changeset/pr-13061-upcoming-features-1762412605096.md b/packages/api-v4/.changeset/pr-13061-upcoming-features-1762412605096.md
deleted file mode 100644
index ce847321fca..00000000000
--- a/packages/api-v4/.changeset/pr-13061-upcoming-features-1762412605096.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/api-v4": Upcoming Features
----
-
-Add new API endpoints, and types for Firewall RS & PL ([#13061](https://github.com/linode/manager/pull/13061))
diff --git a/packages/api-v4/.changeset/pr-13062-added-1762436128763.md b/packages/api-v4/.changeset/pr-13062-added-1762436128763.md
deleted file mode 100644
index 73d512d75e8..00000000000
--- a/packages/api-v4/.changeset/pr-13062-added-1762436128763.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/api-v4": Added
----
-
-Added `Akamai Cloud Pulse Logs ` to the `AccountCapability` type ([#13062](https://github.com/linode/manager/pull/13062))
diff --git a/packages/api-v4/.changeset/pr-13064-upcoming-features-1762444425315.md b/packages/api-v4/.changeset/pr-13064-upcoming-features-1762444425315.md
deleted file mode 100644
index 6c93107913d..00000000000
--- a/packages/api-v4/.changeset/pr-13064-upcoming-features-1762444425315.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/api-v4": Upcoming Features
----
-
-CloudPulse-Metrics: Update `CloudPulseServiceType` and `CapabilityServiceTypeMapping` at types.ts for new service - lke ([#13064](https://github.com/linode/manager/pull/13064))
diff --git a/packages/api-v4/.changeset/pr-13070-upcoming-features-1762520053797.md b/packages/api-v4/.changeset/pr-13070-upcoming-features-1762520053797.md
deleted file mode 100644
index 5663083930d..00000000000
--- a/packages/api-v4/.changeset/pr-13070-upcoming-features-1762520053797.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/api-v4": Upcoming Features
----
-
-New IAM getUserEntitiesByPermission endpoint ([#13070](https://github.com/linode/manager/pull/13070))
diff --git a/packages/api-v4/CHANGELOG.md b/packages/api-v4/CHANGELOG.md
index f20aa9cbf00..f290607bda5 100644
--- a/packages/api-v4/CHANGELOG.md
+++ b/packages/api-v4/CHANGELOG.md
@@ -1,3 +1,22 @@
+## [2025-11-18] - v0.153.0
+
+
+### Added:
+
+- IAM Parent/Child: delegate permissions ([#13033](https://github.com/linode/manager/pull/13033))
+- Added `Akamai Cloud Pulse Logs ` to the `AccountCapability` type ([#13062](https://github.com/linode/manager/pull/13062))
+
+### Changed:
+
+- IAM: cleanup for nodebalancer permissions ([#13017](https://github.com/linode/manager/pull/13017))
+
+### Upcoming Features:
+
+- Clean up Delivery Stream and Destination interfaces ([#13038](https://github.com/linode/manager/pull/13038))
+- Add new API endpoints, and types for Firewall RS & PL ([#13061](https://github.com/linode/manager/pull/13061))
+- CloudPulse-Metrics: Update `CloudPulseServiceType` and `CapabilityServiceTypeMapping` at types.ts for new service - lke ([#13064](https://github.com/linode/manager/pull/13064))
+- New IAM getUserEntitiesByPermission endpoint ([#13070](https://github.com/linode/manager/pull/13070))
+
## [2025-11-04] - v0.152.0
diff --git a/packages/api-v4/package.json b/packages/api-v4/package.json
index 30b01a473a0..f19a56eeb28 100644
--- a/packages/api-v4/package.json
+++ b/packages/api-v4/package.json
@@ -1,6 +1,6 @@
{
"name": "@linode/api-v4",
- "version": "0.152.0",
+ "version": "0.153.0",
"homepage": "https://github.com/linode/manager/tree/develop/packages/api-v4",
"bugs": {
"url": "https://github.com/linode/manager/issues"
diff --git a/packages/manager/.changeset/pr-12967-tests-1762800264059.md b/packages/manager/.changeset/pr-12967-tests-1762800264059.md
deleted file mode 100644
index 27cb9c6f13e..00000000000
--- a/packages/manager/.changeset/pr-12967-tests-1762800264059.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Tests
----
-
-Fix flakey timerange test ([#12967](https://github.com/linode/manager/pull/12967))
diff --git a/packages/manager/.changeset/pr-13002-tech-stories-1761925907093.md b/packages/manager/.changeset/pr-13002-tech-stories-1761925907093.md
deleted file mode 100644
index 9d684b43e16..00000000000
--- a/packages/manager/.changeset/pr-13002-tech-stories-1761925907093.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Tech Stories
----
-
-Replace Formik with React Hook Form in DatabaseManageNetworkingDrawer ([#13002](https://github.com/linode/manager/pull/13002))
diff --git a/packages/manager/.changeset/pr-13008-tests-1761219062241.md b/packages/manager/.changeset/pr-13008-tests-1761219062241.md
deleted file mode 100644
index 7dad56c881a..00000000000
--- a/packages/manager/.changeset/pr-13008-tests-1761219062241.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Tests
----
-
-Add Streams Landing, Create Stream and Edit Stream tests ([#13008](https://github.com/linode/manager/pull/13008))
diff --git a/packages/manager/.changeset/pr-13017-changed-1761555510591.md b/packages/manager/.changeset/pr-13017-changed-1761555510591.md
deleted file mode 100644
index c0a6751644c..00000000000
--- a/packages/manager/.changeset/pr-13017-changed-1761555510591.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Changed
----
-
-IAM: clean up in mapping for nodebalancer permissions ([#13017](https://github.com/linode/manager/pull/13017))
diff --git a/packages/manager/.changeset/pr-13022-upcoming-features-1761581678060.md b/packages/manager/.changeset/pr-13022-upcoming-features-1761581678060.md
deleted file mode 100644
index fad1b6953d3..00000000000
--- a/packages/manager/.changeset/pr-13022-upcoming-features-1761581678060.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Upcoming Features
----
-
-Logs Delivery Stream/Destination Pendo tags ([#13022](https://github.com/linode/manager/pull/13022))
diff --git a/packages/manager/.changeset/pr-13033-added-1761736284038.md b/packages/manager/.changeset/pr-13033-added-1761736284038.md
deleted file mode 100644
index 2a57981d069..00000000000
--- a/packages/manager/.changeset/pr-13033-added-1761736284038.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Added
----
-
-IAM Parent/Child: delegate permissions for child account ([#13033](https://github.com/linode/manager/pull/13033))
diff --git a/packages/manager/.changeset/pr-13034-fixed-1761754563010.md b/packages/manager/.changeset/pr-13034-fixed-1761754563010.md
deleted file mode 100644
index 3526073b2e0..00000000000
--- a/packages/manager/.changeset/pr-13034-fixed-1761754563010.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Fixed
----
-
-Typo + expose search filters on /iam/roles route ([#13034](https://github.com/linode/manager/pull/13034))
diff --git a/packages/manager/.changeset/pr-13037-fixed-1761831767872.md b/packages/manager/.changeset/pr-13037-fixed-1761831767872.md
deleted file mode 100644
index e4e8c6012d9..00000000000
--- a/packages/manager/.changeset/pr-13037-fixed-1761831767872.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Fixed
----
-
-Address oAuth issue with IAM OAuthCallback ([#13037](https://github.com/linode/manager/pull/13037))
diff --git a/packages/manager/.changeset/pr-13038-upcoming-features-1761833381307.md b/packages/manager/.changeset/pr-13038-upcoming-features-1761833381307.md
deleted file mode 100644
index efe100c3175..00000000000
--- a/packages/manager/.changeset/pr-13038-upcoming-features-1761833381307.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Upcoming Features
----
-
-Update Delivery Stream factory ([#13038](https://github.com/linode/manager/pull/13038))
diff --git a/packages/manager/.changeset/pr-13042-upcoming-features-1761904401989.md b/packages/manager/.changeset/pr-13042-upcoming-features-1761904401989.md
deleted file mode 100644
index fc719a52cb7..00000000000
--- a/packages/manager/.changeset/pr-13042-upcoming-features-1761904401989.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Upcoming Features
----
-
-IAM: Empty state for the Default Roles and Default Entities Access tabs ([#13042](https://github.com/linode/manager/pull/13042))
diff --git a/packages/manager/.changeset/pr-13043-added-1761922908861.md b/packages/manager/.changeset/pr-13043-added-1761922908861.md
deleted file mode 100644
index faac2e7fd6c..00000000000
--- a/packages/manager/.changeset/pr-13043-added-1761922908861.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Added
----
-
-IAM: add a permission check for delete nodebalancer drawer ([#13043](https://github.com/linode/manager/pull/13043))
diff --git a/packages/manager/.changeset/pr-13044-tech-stories-1761925886848.md b/packages/manager/.changeset/pr-13044-tech-stories-1761925886848.md
deleted file mode 100644
index 90c24cd6e48..00000000000
--- a/packages/manager/.changeset/pr-13044-tech-stories-1761925886848.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Tech Stories
----
-
-Replace Formik with React Hook Form in ManageAccessControlDrawer ([#13044](https://github.com/linode/manager/pull/13044))
diff --git a/packages/manager/.changeset/pr-13046-fixed-1762164490931.md b/packages/manager/.changeset/pr-13046-fixed-1762164490931.md
deleted file mode 100644
index 7c9f8bd06b1..00000000000
--- a/packages/manager/.changeset/pr-13046-fixed-1762164490931.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Fixed
----
-
-IAM: tags editing was enabled for restricted users ([#13046](https://github.com/linode/manager/pull/13046))
diff --git a/packages/manager/.changeset/pr-13047-fixed-1762181966107.md b/packages/manager/.changeset/pr-13047-fixed-1762181966107.md
deleted file mode 100644
index bc921b1911d..00000000000
--- a/packages/manager/.changeset/pr-13047-fixed-1762181966107.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Fixed
----
-
-IAM Child Account - user not found error handling ([#13047](https://github.com/linode/manager/pull/13047))
diff --git a/packages/manager/.changeset/pr-13048-upcoming-features-1762334225681.md b/packages/manager/.changeset/pr-13048-upcoming-features-1762334225681.md
deleted file mode 100644
index 78dd28d0530..00000000000
--- a/packages/manager/.changeset/pr-13048-upcoming-features-1762334225681.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Upcoming Features
----
-
-ACLP-Alerting: Onboarding Blockstorage service for ACLP Alerts ([#13048](https://github.com/linode/manager/pull/13048))
diff --git a/packages/manager/.changeset/pr-13049-fixed-1762250513797.md b/packages/manager/.changeset/pr-13049-fixed-1762250513797.md
deleted file mode 100644
index 4a63e2e2d24..00000000000
--- a/packages/manager/.changeset/pr-13049-fixed-1762250513797.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Fixed
----
-
-IAM: restricted users could access delete and detach popups without permissions ([#13049](https://github.com/linode/manager/pull/13049))
diff --git a/packages/manager/.changeset/pr-13050-changed-1762189590928.md b/packages/manager/.changeset/pr-13050-changed-1762189590928.md
deleted file mode 100644
index 32de1a27641..00000000000
--- a/packages/manager/.changeset/pr-13050-changed-1762189590928.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Changed
----
-
-IAM: fix permissiom's check for vpc for assigning/unassigning linodes ([#13050](https://github.com/linode/manager/pull/13050))
diff --git a/packages/manager/.changeset/pr-13051-upcoming-features-1762253162476.md b/packages/manager/.changeset/pr-13051-upcoming-features-1762253162476.md
deleted file mode 100644
index a683430c5ce..00000000000
--- a/packages/manager/.changeset/pr-13051-upcoming-features-1762253162476.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Upcoming Features
----
-
-Feature flag for Firewall Rulesets & Prefixlists ([#13051](https://github.com/linode/manager/pull/13051))
diff --git a/packages/manager/.changeset/pr-13052-changed-1762261389682.md b/packages/manager/.changeset/pr-13052-changed-1762261389682.md
deleted file mode 100644
index 14f3b1ad4f6..00000000000
--- a/packages/manager/.changeset/pr-13052-changed-1762261389682.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Changed
----
-
-ACLP Alert: control `edit & delete button` based on status using flag ([#13052](https://github.com/linode/manager/pull/13052))
diff --git a/packages/manager/.changeset/pr-13054-upcoming-features-1762273666682.md b/packages/manager/.changeset/pr-13054-upcoming-features-1762273666682.md
deleted file mode 100644
index 5b431d0d693..00000000000
--- a/packages/manager/.changeset/pr-13054-upcoming-features-1762273666682.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Upcoming Features
----
-
-Feature flag for new Generational Compute Plans ([#13054](https://github.com/linode/manager/pull/13054))
diff --git a/packages/manager/.changeset/pr-13055-added-1761777373017.md b/packages/manager/.changeset/pr-13055-added-1761777373017.md
deleted file mode 100644
index 994381f3113..00000000000
--- a/packages/manager/.changeset/pr-13055-added-1761777373017.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Added
----
-
-Implement pagination for Plans table ([#13055](https://github.com/linode/manager/pull/13055))
diff --git a/packages/manager/.changeset/pr-13056-fixed-1762431727811.md b/packages/manager/.changeset/pr-13056-fixed-1762431727811.md
deleted file mode 100644
index ce6999d3ffd..00000000000
--- a/packages/manager/.changeset/pr-13056-fixed-1762431727811.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Fixed
----
-
-Race condition with Preferences overrides in PrimaryNav ([#13056](https://github.com/linode/manager/pull/13056))
diff --git a/packages/manager/.changeset/pr-13058-fixed-1762347933543.md b/packages/manager/.changeset/pr-13058-fixed-1762347933543.md
deleted file mode 100644
index 61eebf3d21a..00000000000
--- a/packages/manager/.changeset/pr-13058-fixed-1762347933543.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Fixed
----
-
-IAM: add tooltips for disabled buttons for nodebalancers, remove notification banner ([#13058](https://github.com/linode/manager/pull/13058))
diff --git a/packages/manager/.changeset/pr-13062-upcoming-features-1762436186094.md b/packages/manager/.changeset/pr-13062-upcoming-features-1762436186094.md
deleted file mode 100644
index 98df19db365..00000000000
--- a/packages/manager/.changeset/pr-13062-upcoming-features-1762436186094.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Upcoming Features
----
-
-Limit Logs feature based on `Akamai Cloud Pulse Logs` Account Capability ([#13062](https://github.com/linode/manager/pull/13062))
diff --git a/packages/manager/.changeset/pr-13063-upcoming-features-1762436208092.md b/packages/manager/.changeset/pr-13063-upcoming-features-1762436208092.md
deleted file mode 100644
index 861e7c3e1a5..00000000000
--- a/packages/manager/.changeset/pr-13063-upcoming-features-1762436208092.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Upcoming Features
----
-
-IAM Parent/Child: delegate permissions for parent account ([#13063](https://github.com/linode/manager/pull/13063))
diff --git a/packages/manager/.changeset/pr-13064-upcoming-features-1762444937800.md b/packages/manager/.changeset/pr-13064-upcoming-features-1762444937800.md
deleted file mode 100644
index cc8dda8811e..00000000000
--- a/packages/manager/.changeset/pr-13064-upcoming-features-1762444937800.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Upcoming Features
----
-
-CloudPulse-Metrics: Update `FilterConfig.ts`, add lke service and the associated filters ([#13064](https://github.com/linode/manager/pull/13064))
diff --git a/packages/manager/.changeset/pr-13065-fixed-1762443312308.md b/packages/manager/.changeset/pr-13065-fixed-1762443312308.md
deleted file mode 100644
index fd373708664..00000000000
--- a/packages/manager/.changeset/pr-13065-fixed-1762443312308.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Fixed
----
-
-IAM: incorrect permission check disabled Clone Volume for volume_admin role ([#13065](https://github.com/linode/manager/pull/13065))
diff --git a/packages/manager/.changeset/pr-13066-fixed-1762843106064.md b/packages/manager/.changeset/pr-13066-fixed-1762843106064.md
deleted file mode 100644
index cb63914cf6e..00000000000
--- a/packages/manager/.changeset/pr-13066-fixed-1762843106064.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Fixed
----
-
-ACLP Metric: update preference logic to clear children filters ([#13066](https://github.com/linode/manager/pull/13066))
diff --git a/packages/manager/.changeset/pr-13067-tech-stories-1762508629516.md b/packages/manager/.changeset/pr-13067-tech-stories-1762508629516.md
deleted file mode 100644
index 86a57c2e799..00000000000
--- a/packages/manager/.changeset/pr-13067-tech-stories-1762508629516.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Tech Stories
----
-
-Add MSW crud support for types API ([#13067](https://github.com/linode/manager/pull/13067))
diff --git a/packages/manager/.changeset/pr-13069-upcoming-features-1762501292300.md b/packages/manager/.changeset/pr-13069-upcoming-features-1762501292300.md
deleted file mode 100644
index 960185833a8..00000000000
--- a/packages/manager/.changeset/pr-13069-upcoming-features-1762501292300.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Upcoming Features
----
-
-Update data-pendo-id tags placemanet within Logs Delivery ([#13069](https://github.com/linode/manager/pull/13069))
diff --git a/packages/manager/.changeset/pr-13070-upcoming-features-1762520005187.md b/packages/manager/.changeset/pr-13070-upcoming-features-1762520005187.md
deleted file mode 100644
index ab57ddf5a69..00000000000
--- a/packages/manager/.changeset/pr-13070-upcoming-features-1762520005187.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Upcoming Features
----
-
-New IAM getUserEntitiesByPermission (types, queries, hooks, mocks) ([#13070](https://github.com/linode/manager/pull/13070))
diff --git a/packages/manager/.changeset/pr-13072-tests-1762800216646.md b/packages/manager/.changeset/pr-13072-tests-1762800216646.md
deleted file mode 100644
index d5d66b9ecfc..00000000000
--- a/packages/manager/.changeset/pr-13072-tests-1762800216646.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Tests
----
-
-Fix flakey stackscript tests ([#13072](https://github.com/linode/manager/pull/13072))
diff --git a/packages/manager/.changeset/pr-13073-upcoming-features-1762707898134.md b/packages/manager/.changeset/pr-13073-upcoming-features-1762707898134.md
deleted file mode 100644
index 296a8621d11..00000000000
--- a/packages/manager/.changeset/pr-13073-upcoming-features-1762707898134.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Upcoming Features
----
-
-CloudPulse-Metrics: Enhance `CloudPulseDashboardWithFilters.tsx` and `CloudPulseDashboardSelect.tsx` to handle switching between dashboards in contextual view ([#13073](https://github.com/linode/manager/pull/13073))
diff --git a/packages/manager/.changeset/pr-13074-fixed-1762772948024.md b/packages/manager/.changeset/pr-13074-fixed-1762772948024.md
deleted file mode 100644
index 239c556ba43..00000000000
--- a/packages/manager/.changeset/pr-13074-fixed-1762772948024.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Fixed
----
-
-Permissions fixes for admin users on users pages ([#13074](https://github.com/linode/manager/pull/13074))
diff --git a/packages/manager/.changeset/pr-13076-tests-1762800160866.md b/packages/manager/.changeset/pr-13076-tests-1762800160866.md
deleted file mode 100644
index 7815ea076c5..00000000000
--- a/packages/manager/.changeset/pr-13076-tests-1762800160866.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Tests
----
-
-Fix flakey create-database test ([#13076](https://github.com/linode/manager/pull/13076))
diff --git a/packages/manager/.changeset/pr-13080-added-1762923818606.md b/packages/manager/.changeset/pr-13080-added-1762923818606.md
deleted file mode 100644
index f65f1283f0d..00000000000
--- a/packages/manager/.changeset/pr-13080-added-1762923818606.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/manager": Added
----
-
-A notice banner to inform the customers about the upcoming maintenance activity in longview and to download and use the new GPG key ([#13080](https://github.com/linode/manager/pull/13080))
diff --git a/packages/manager/CHANGELOG.md b/packages/manager/CHANGELOG.md
index d19d5e3d253..dd5ff6f1a90 100644
--- a/packages/manager/CHANGELOG.md
+++ b/packages/manager/CHANGELOG.md
@@ -4,6 +4,63 @@ 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-11-18] - v1.155.0
+
+
+### Added:
+
+- IAM Parent/Child: delegate permissions for child account ([#13033](https://github.com/linode/manager/pull/13033))
+- IAM: add a permission check for delete nodebalancer drawer ([#13043](https://github.com/linode/manager/pull/13043))
+- Implement pagination for Plans table ([#13055](https://github.com/linode/manager/pull/13055))
+- A notice banner to inform the customers about the upcoming maintenance activity in longview and to download and use the new GPG key ([#13080](https://github.com/linode/manager/pull/13080))
+
+### Changed:
+
+- IAM: clean up in mapping for nodebalancer permissions ([#13017](https://github.com/linode/manager/pull/13017))
+- IAM: fix permissiom's check for vpc for assigning/unassigning linodes ([#13050](https://github.com/linode/manager/pull/13050))
+- ACLP Alert: control `edit & delete button` based on status using flag ([#13052](https://github.com/linode/manager/pull/13052))
+
+### Fixed:
+
+- Typo + expose search filters on /iam/roles route ([#13034](https://github.com/linode/manager/pull/13034))
+- Address oAuth issue with IAM OAuthCallback ([#13037](https://github.com/linode/manager/pull/13037))
+- IAM: tags editing was enabled for restricted users ([#13046](https://github.com/linode/manager/pull/13046))
+- IAM Child Account - user not found error handling ([#13047](https://github.com/linode/manager/pull/13047))
+- IAM: restricted users could access delete and detach popups without permissions ([#13049](https://github.com/linode/manager/pull/13049))
+- Race condition with Preferences overrides in PrimaryNav ([#13056](https://github.com/linode/manager/pull/13056))
+- IAM: add tooltips for disabled buttons for nodebalancers, remove notification banner ([#13058](https://github.com/linode/manager/pull/13058))
+- IAM: incorrect permission check disabled Clone Volume for volume_admin role ([#13065](https://github.com/linode/manager/pull/13065))
+- ACLP Metric: update preference logic to clear children filters ([#13066](https://github.com/linode/manager/pull/13066))
+- Permissions fixes for admin users on users pages ([#13074](https://github.com/linode/manager/pull/13074))
+
+### Tech Stories:
+
+- Replace Formik with React Hook Form in DatabaseManageNetworkingDrawer ([#13002](https://github.com/linode/manager/pull/13002))
+- Replace Formik with React Hook Form in ManageAccessControlDrawer ([#13044](https://github.com/linode/manager/pull/13044))
+- Add MSW crud support for types API ([#13067](https://github.com/linode/manager/pull/13067))
+
+### Tests:
+
+- Fix flakey timerange test ([#12967](https://github.com/linode/manager/pull/12967))
+- Add Streams Landing, Create Stream and Edit Stream tests ([#13008](https://github.com/linode/manager/pull/13008))
+- Fix flakey stackscript tests ([#13072](https://github.com/linode/manager/pull/13072))
+- Fix flakey create-database test ([#13076](https://github.com/linode/manager/pull/13076))
+
+### Upcoming Features:
+
+- Logs Delivery Stream/Destination Pendo tags ([#13022](https://github.com/linode/manager/pull/13022))
+- Update Delivery Stream factory ([#13038](https://github.com/linode/manager/pull/13038))
+- IAM: Empty state for the Default Roles and Default Entities Access tabs ([#13042](https://github.com/linode/manager/pull/13042))
+- ACLP-Alerting: Onboarding Blockstorage service for ACLP Alerts ([#13048](https://github.com/linode/manager/pull/13048))
+- Feature flag for Firewall Rulesets & Prefixlists ([#13051](https://github.com/linode/manager/pull/13051))
+- Feature flag for new Generational Compute Plans ([#13054](https://github.com/linode/manager/pull/13054))
+- Limit Logs feature based on `Akamai Cloud Pulse Logs` Account Capability ([#13062](https://github.com/linode/manager/pull/13062))
+- IAM Parent/Child: delegate permissions for parent account ([#13063](https://github.com/linode/manager/pull/13063))
+- CloudPulse-Metrics: Update `FilterConfig.ts`, add lke service and the associated filters ([#13064](https://github.com/linode/manager/pull/13064))
+- Update data-pendo-id tags placemanet within Logs Delivery ([#13069](https://github.com/linode/manager/pull/13069))
+- New IAM getUserEntitiesByPermission (types, queries, hooks, mocks) ([#13070](https://github.com/linode/manager/pull/13070))
+- CloudPulse-Metrics: Enhance `CloudPulseDashboardWithFilters.tsx` and `CloudPulseDashboardSelect.tsx` to handle switching between dashboards in contextual view ([#13073](https://github.com/linode/manager/pull/13073))
+
## [2025-11-04] - v1.154.0
### Added:
diff --git a/packages/manager/package.json b/packages/manager/package.json
index 4079788a8d8..d3b16ad2d23 100644
--- a/packages/manager/package.json
+++ b/packages/manager/package.json
@@ -2,7 +2,7 @@
"name": "linode-manager",
"author": "Linode",
"description": "The Linode Manager website",
- "version": "1.154.0",
+ "version": "1.155.0",
"private": true,
"type": "module",
"bugs": {
diff --git a/packages/queries/.changeset/pr-13061-upcoming-features-1762412640686.md b/packages/queries/.changeset/pr-13061-upcoming-features-1762412640686.md
deleted file mode 100644
index 1ec2833713b..00000000000
--- a/packages/queries/.changeset/pr-13061-upcoming-features-1762412640686.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/queries": Upcoming Features
----
-
-Add new queries for Firewall RS & PL ([#13061](https://github.com/linode/manager/pull/13061))
diff --git a/packages/queries/.changeset/pr-13070-upcoming-features-1762520076076.md b/packages/queries/.changeset/pr-13070-upcoming-features-1762520076076.md
deleted file mode 100644
index 681272c7011..00000000000
--- a/packages/queries/.changeset/pr-13070-upcoming-features-1762520076076.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/queries": Upcoming Features
----
-
-New IAM getUserEntitiesByPermission queries ([#13070](https://github.com/linode/manager/pull/13070))
diff --git a/packages/queries/CHANGELOG.md b/packages/queries/CHANGELOG.md
index 293a258fee6..7708246bd6e 100644
--- a/packages/queries/CHANGELOG.md
+++ b/packages/queries/CHANGELOG.md
@@ -1,3 +1,11 @@
+## [2025-11-18] - v0.17.0
+
+
+### Upcoming Features:
+
+- Add new queries for Firewall RS & PL ([#13061](https://github.com/linode/manager/pull/13061))
+- New IAM getUserEntitiesByPermission queries ([#13070](https://github.com/linode/manager/pull/13070))
+
## [2025-10-21] - v0.16.0
### Added:
diff --git a/packages/queries/package.json b/packages/queries/package.json
index d1fba7dc729..930facd44bc 100644
--- a/packages/queries/package.json
+++ b/packages/queries/package.json
@@ -1,6 +1,6 @@
{
"name": "@linode/queries",
- "version": "0.16.0",
+ "version": "0.17.0",
"description": "Linode Utility functions library",
"main": "src/index.js",
"module": "src/index.ts",
diff --git a/packages/utilities/.changeset/pr-13067-tech-stories-1762499626930.md b/packages/utilities/.changeset/pr-13067-tech-stories-1762499626930.md
deleted file mode 100644
index fbcdf47f755..00000000000
--- a/packages/utilities/.changeset/pr-13067-tech-stories-1762499626930.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@linode/utilities": Tech Stories
----
-
-Add MSW crud support for types API ([#13067](https://github.com/linode/manager/pull/13067))
diff --git a/packages/utilities/CHANGELOG.md b/packages/utilities/CHANGELOG.md
index 463ea112cfa..1aeae7b42c4 100644
--- a/packages/utilities/CHANGELOG.md
+++ b/packages/utilities/CHANGELOG.md
@@ -1,3 +1,10 @@
+## [2025-11-18] - v0.12.0
+
+
+### Tech Stories:
+
+- Add MSW crud support for types API ([#13067](https://github.com/linode/manager/pull/13067))
+
## [2025-10-21] - v0.11.0
diff --git a/packages/utilities/package.json b/packages/utilities/package.json
index d1fb315fafe..c4539523877 100644
--- a/packages/utilities/package.json
+++ b/packages/utilities/package.json
@@ -1,6 +1,6 @@
{
"name": "@linode/utilities",
- "version": "0.11.0",
+ "version": "0.12.0",
"description": "Linode Utility functions library",
"main": "src/index.ts",
"module": "src/index.ts",