diff --git a/.claude/skills/npm-release/skill.md b/.claude/skills/npm-release/skill.md index bd38e09..98b07da 100644 --- a/.claude/skills/npm-release/skill.md +++ b/.claude/skills/npm-release/skill.md @@ -1,6 +1,6 @@ --- name: npm-release -description: Bump @oxide/api to a new omicron release tag, open the PR, and (after the user merges and CI publishes) hand off the npm dist-tag command. +description: Bump @oxide/api to a new omicron release tag locally, then (after the user pushes, merges, and CI publishes) hand off the npm dist-tag command. user_invocable: true --- @@ -60,28 +60,24 @@ Ask the user for: - `cd oxide-api && npm ci && npm run tsc` - `cd oxide-openapi-gen-ts && npm run tsc && npm run lint && npm run fmt:check` -### Phase 2: PR +### Phase 2: Hand off (do not push) -8. **Create a branch and PR.** Use jj to create a new commit, then push a - branch and open a PR: - ``` - jj desc -m 'Bump API to ()' - jj git push --change @ - ``` - Then create the PR with `gh pr create`. Use a title like - `Bump API to rel/v19/rc0 (0.6.0)` and mention the omicron tag in the body. +8. **Describe the commit and stop.** Set the commit description with + `jj desc -m 'Bump API to ()'` and leave the change in the + working copy for the user to review. -9. **Wait for CI.** The `update-api-spec` workflow runs on push to non-main - branches and may create an "Autogenerate config update" commit — this is - expected. The `validate` workflow must pass. + Do **not** push a branch, and do **not** open a PR. No `jj git push`, no + `gh pr create`. The user pushes and opens the PR themselves. Report what + changed (the files touched and any notable spec changes) and stop there. -10. **Hand off to the user for review and merge.** Once CI is green, report - that the PR is ready and stop. The user will review and merge the PR - themselves, then tell you to continue. Do not merge the PR yourself. + Note for when the PR does exist: the `update-api-spec` workflow runs on push + to non-main branches and may create an "Autogenerate config update" commit — + that is expected. The `validate` workflow must pass. The user reviews and + merges; never merge the PR yourself. ### Phase 3: Publish (automatic) and dist-tag (manual) -11. **Approve and wait for the automatic publish.** Merging the PR triggers the +9. **Approve and wait for the automatic publish.** Merging the PR triggers the `Release` workflow on main, which runs validation and then waits for a required reviewer to approve the `release` environment deployment. Tell the user to approve it (or ask another required reviewer to approve it) in @@ -92,7 +88,7 @@ Ask the user for: and confirm with `npm view @oxide/api version`, which should show the new version. -12. **Add npm dist-tag.** Tag the published version with the release name so +10. **Add npm dist-tag.** Tag the published version with the release name so consumers can pin to it: ``` npm dist-tag add @oxide/api@ rel diff --git a/OMICRON_VERSION b/OMICRON_VERSION index 4f26d5d..4598a52 100644 --- a/OMICRON_VERSION +++ b/OMICRON_VERSION @@ -1 +1 @@ -3e5bafe8ad9d19de5db48fb50bbe2e9437f82e86 +667f7be3d3e4b1be1146cbb1e7b1cb134f49df05 diff --git a/oxide-api/README.md b/oxide-api/README.md index d6ab15e..475cbea 100644 --- a/oxide-api/README.md +++ b/oxide-api/README.md @@ -16,6 +16,7 @@ Make sure to use the SDK compatible with your Oxide system version. | System version | `@oxide/api` version | npm tag | | --- | --- | --- | +| [22](https://docs.oxide.computer/release-notes/system/22) | 0.9.0 | `rel22` | | [21](https://docs.oxide.computer/release-notes/system/21) | 0.8.0 | `rel21` | | [20](https://docs.oxide.computer/release-notes/system/20) | 0.7.0 | `rel20` | | [19](https://docs.oxide.computer/release-notes/system/19) | 0.6.0 | `rel19` | diff --git a/oxide-api/package-lock.json b/oxide-api/package-lock.json index d61522d..2f5c0f5 100644 --- a/oxide-api/package-lock.json +++ b/oxide-api/package-lock.json @@ -1,12 +1,12 @@ { "name": "@oxide/api", - "version": "0.8.0", + "version": "0.9.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@oxide/api", - "version": "0.8.0", + "version": "0.9.0", "license": "MPL-2.0", "devDependencies": { "tsdown": "^0.22.3", diff --git a/oxide-api/package.json b/oxide-api/package.json index 6d858a3..9617536 100644 --- a/oxide-api/package.json +++ b/oxide-api/package.json @@ -1,6 +1,6 @@ { "name": "@oxide/api", - "version": "0.8.0", + "version": "0.9.0", "description": "TypeScript client for the Oxide API", "engines": { "node": ">=18" diff --git a/oxide-api/src/Api.ts b/oxide-api/src/Api.ts index 6703dd0..1e14c52 100644 --- a/oxide-api/src/Api.ts +++ b/oxide-api/src/Api.ts @@ -3069,6 +3069,16 @@ export type InternetGatewayResultsPage = { nextPage?: string | null; }; +/** + * Assignment of an IP pool to resources and services. + */ +export type IpPoolAssignment = + /** Pool is available to be linked to customer silos. */ + | "silos" + + /** Pool is reserved for Oxide-operated rack services (NTP, DNS, etc.). */ + | "system_services"; + /** * Type of IP pool. */ @@ -3082,9 +3092,11 @@ All ranges in a multicast pool must be either ASM or SSM (not mixed). */ | "multicast"; /** - * A collection of IP ranges. If a pool is linked to a silo, IP addresses from the pool can be allocated within that silo. + * A collection of IP ranges. */ export type IpPool = { + /** What this pool is currently assigned to. */ + assignment: IpPoolAssignment; /** Human-readable free-form text about a resource */ description: string; /** Unique, immutable, system-controlled identifier for each resource */ @@ -3101,6 +3113,11 @@ export type IpPool = { timeModified: Date; }; +/** + * Body parameters for reassigning an IP pool. + */ +export type IpPoolAssignParam = { assignment: IpPoolAssignment }; + /** * Create-time parameters for an `IpPool`. * @@ -3109,6 +3126,8 @@ export type IpPool = { * ASM: IPv4 addresses outside 232.0.0.0/8, IPv6 addresses with flag field != 3 SSM: IPv4 addresses in 232.0.0.0/8, IPv6 addresses with flag field = 3 */ export type IpPoolCreate = { + /** What this pool is assigned to (defaults to Silos). */ + assignment?: IpPoolAssignment; description: string; /** The IP version of the pool. @@ -6633,8 +6652,10 @@ export interface InternetGatewayDeleteQueryParams { } export interface IpPoolListQueryParams { + ipVersion?: IpVersion; limit?: number | null; pageToken?: string | null; + poolType?: IpPoolType; sortBy?: NameOrIdSortMode; } @@ -7024,8 +7045,11 @@ export interface SamlIdentityProviderViewQueryParams { } export interface SystemIpPoolListQueryParams { + assignment?: IpPoolAssignment; + ipVersion?: IpVersion; limit?: number | null; pageToken?: string | null; + poolType?: IpPoolType; sortBy?: NameOrIdSortMode; } @@ -7041,6 +7065,10 @@ export interface SystemIpPoolDeletePathParams { pool: NameOrId; } +export interface SystemIpPoolAssignPathParams { + pool: NameOrId; +} + export interface SystemIpPoolRangeListPathParams { pool: NameOrId; } @@ -7086,11 +7114,6 @@ export interface SystemIpPoolUtilizationViewPathParams { pool: NameOrId; } -export interface SystemIpPoolServiceRangeListQueryParams { - limit?: number | null; - pageToken?: string | null; -} - export interface SystemMetricPathParams { metricName: SystemMetricName; } @@ -7659,7 +7682,7 @@ export class Api { * Pulled from info.version in the OpenAPI schema. Sent in the * `api-version` header on all requests. */ - apiVersion = "2026061000.0.0"; + apiVersion = "2026073100.0.0"; constructor({ host = "", baseParams = {}, token }: ApiConfig = {}) { this.host = host; @@ -10858,6 +10881,23 @@ export class Api { ...params, }); }, + /** + * Assign IP pool + */ + systemIpPoolAssign: ( + { + path, + body, + }: { path: SystemIpPoolAssignPathParams; body: IpPoolAssignParam }, + params: FetchParams = {}, + ) => { + return this.request({ + path: `/v1/system/ip-pools/${path.pool}/assignment`, + method: "POST", + body, + ...params, + }); + }, /** * List ranges for IP pool */ @@ -10989,58 +11029,6 @@ export class Api { ...params, }); }, - /** - * Fetch Oxide service IP pool - */ - systemIpPoolServiceView: (_: EmptyObj, params: FetchParams = {}) => { - return this.request({ - path: `/v1/system/ip-pools-service`, - method: "GET", - ...params, - }); - }, - /** - * List IP ranges for the Oxide service pool - */ - systemIpPoolServiceRangeList: ( - { query = {} }: { query?: SystemIpPoolServiceRangeListQueryParams }, - params: FetchParams = {}, - ) => { - return this.request({ - path: `/v1/system/ip-pools-service/ranges`, - method: "GET", - query, - ...params, - }); - }, - /** - * Add IP range to Oxide service pool - */ - systemIpPoolServiceRangeAdd: ( - { body }: { body: IpRange }, - params: FetchParams = {}, - ) => { - return this.request({ - path: `/v1/system/ip-pools-service/ranges/add`, - method: "POST", - body, - ...params, - }); - }, - /** - * Remove IP range from Oxide service pool - */ - systemIpPoolServiceRangeRemove: ( - { body }: { body: IpRange }, - params: FetchParams = {}, - ) => { - return this.request({ - path: `/v1/system/ip-pools-service/ranges/remove`, - method: "POST", - body, - ...params, - }); - }, /** * View metrics */ diff --git a/oxide-openapi-gen-ts/src/__snapshots__/Api.ts b/oxide-openapi-gen-ts/src/__snapshots__/Api.ts index 479379c..450b852 100644 --- a/oxide-openapi-gen-ts/src/__snapshots__/Api.ts +++ b/oxide-openapi-gen-ts/src/__snapshots__/Api.ts @@ -3202,6 +3202,19 @@ export type InternetGatewayResultsPage = /** token used to fetch the next page of results (if any) */ "nextPage"?: string | null,}; +/** +* Assignment of an IP pool to resources and services. + */ +export type IpPoolAssignment = +( +/** Pool is available to be linked to customer silos. */ +| "silos" + +/** Pool is reserved for Oxide-operated rack services (NTP, DNS, etc.). */ +| "system_services" + +); + /** * Type of IP pool. */ @@ -3218,10 +3231,12 @@ All ranges in a multicast pool must be either ASM or SSM (not mixed). */ ); /** -* A collection of IP ranges. If a pool is linked to a silo, IP addresses from the pool can be allocated within that silo. +* A collection of IP ranges. */ export type IpPool = { +/** What this pool is currently assigned to. */ +"assignment": IpPoolAssignment, /** Human-readable free-form text about a resource */ "description": string, /** Unique, immutable, system-controlled identifier for each resource */ @@ -3237,6 +3252,12 @@ export type IpPool = /** Timestamp when this resource was last modified */ "timeModified": Date,}; +/** +* Body parameters for reassigning an IP pool. + */ +export type IpPoolAssignParam = +{"assignment": IpPoolAssignment,}; + /** * Create-time parameters for an `IpPool`. * @@ -3245,7 +3266,9 @@ export type IpPool = * ASM: IPv4 addresses outside 232.0.0.0/8, IPv6 addresses with flag field != 3 SSM: IPv4 addresses in 232.0.0.0/8, IPv6 addresses with flag field = 3 */ export type IpPoolCreate = -{"description": string, +{ +/** What this pool is assigned to (defaults to Silos). */ +"assignment"?: IpPoolAssignment,"description": string, /** The IP version of the pool. The default is IPv4. */ @@ -6796,8 +6819,10 @@ export interface InternetGatewayDeleteQueryParams { } export interface IpPoolListQueryParams { + ipVersion?: IpVersion, limit?: number | null, pageToken?: string | null, + poolType?: IpPoolType, sortBy?: NameOrIdSortMode, } @@ -7187,8 +7212,11 @@ export interface SamlIdentityProviderViewQueryParams { } export interface SystemIpPoolListQueryParams { + assignment?: IpPoolAssignment, + ipVersion?: IpVersion, limit?: number | null, pageToken?: string | null, + poolType?: IpPoolType, sortBy?: NameOrIdSortMode, } @@ -7204,6 +7232,10 @@ export interface SystemIpPoolDeletePathParams { pool: NameOrId, } +export interface SystemIpPoolAssignPathParams { + pool: NameOrId, +} + export interface SystemIpPoolRangeListPathParams { pool: NameOrId, } @@ -7249,11 +7281,6 @@ export interface SystemIpPoolUtilizationViewPathParams { pool: NameOrId, } -export interface SystemIpPoolServiceRangeListQueryParams { - limit?: number | null, - pageToken?: string | null, -} - export interface SystemMetricPathParams { metricName: SystemMetricName, } @@ -7822,7 +7849,7 @@ export interface ApiConfig { * Pulled from info.version in the OpenAPI schema. Sent in the * `api-version` header on all requests. */ - apiVersion = "2026061000.0.0"; + apiVersion = "2026073100.0.0"; constructor({ host = "", baseParams = {}, token }: ApiConfig = {}) { this.host = host; @@ -10589,6 +10616,21 @@ params: FetchParams = {}) => { }) }, /** +* Assign IP pool + */ +systemIpPoolAssign: ({ +path, body, }: {path: SystemIpPoolAssignPathParams, +body: IpPoolAssignParam, +}, +params: FetchParams = {}) => { + return this.request({ + path: `/v1/system/ip-pools/${path.pool}/assignment`, + method: "POST", + body, + ...params, + }) + }, +/** * List ranges for IP pool */ systemIpPoolRangeList: ({ @@ -10705,59 +10747,6 @@ params: FetchParams = {}) => { }) }, /** -* Fetch Oxide service IP pool - */ -systemIpPoolServiceView: (_: EmptyObj, -params: FetchParams = {}) => { - return this.request({ - path: `/v1/system/ip-pools-service`, - method: "GET", - ...params, - }) - }, -/** -* List IP ranges for the Oxide service pool - */ -systemIpPoolServiceRangeList: ({ -query = {}, }: {query?: SystemIpPoolServiceRangeListQueryParams, -}, -params: FetchParams = {}) => { - return this.request({ - path: `/v1/system/ip-pools-service/ranges`, - method: "GET", - query, - ...params, - }) - }, -/** -* Add IP range to Oxide service pool - */ -systemIpPoolServiceRangeAdd: ({ -body, }: {body: IpRange, -}, -params: FetchParams = {}) => { - return this.request({ - path: `/v1/system/ip-pools-service/ranges/add`, - method: "POST", - body, - ...params, - }) - }, -/** -* Remove IP range from Oxide service pool - */ -systemIpPoolServiceRangeRemove: ({ -body, }: {body: IpRange, -}, -params: FetchParams = {}) => { - return this.request({ - path: `/v1/system/ip-pools-service/ranges/remove`, - method: "POST", - body, - ...params, - }) - }, -/** * View metrics */ systemMetric: ({ diff --git a/oxide-openapi-gen-ts/src/__snapshots__/msw-handlers.ts b/oxide-openapi-gen-ts/src/__snapshots__/msw-handlers.ts index fbcfeda..6ed72bf 100644 --- a/oxide-openapi-gen-ts/src/__snapshots__/msw-handlers.ts +++ b/oxide-openapi-gen-ts/src/__snapshots__/msw-handlers.ts @@ -416,6 +416,8 @@ export interface MSWHandlers { systemIpPoolUpdate: (params: { path: Api.SystemIpPoolUpdatePathParams, body: Json, req: Request, cookies: Record }) => Promisable>, /** `DELETE /v1/system/ip-pools/:pool` */ systemIpPoolDelete: (params: { path: Api.SystemIpPoolDeletePathParams, req: Request, cookies: Record }) => Promisable, +/** `POST /v1/system/ip-pools/:pool/assignment` */ + systemIpPoolAssign: (params: { path: Api.SystemIpPoolAssignPathParams, body: Json, req: Request, cookies: Record }) => Promisable>, /** `GET /v1/system/ip-pools/:pool/ranges` */ systemIpPoolRangeList: (params: { path: Api.SystemIpPoolRangeListPathParams, query: Api.SystemIpPoolRangeListQueryParams, req: Request, cookies: Record }) => Promisable>, /** `POST /v1/system/ip-pools/:pool/ranges/add` */ @@ -432,14 +434,6 @@ export interface MSWHandlers { systemIpPoolSiloUnlink: (params: { path: Api.SystemIpPoolSiloUnlinkPathParams, req: Request, cookies: Record }) => Promisable, /** `GET /v1/system/ip-pools/:pool/utilization` */ systemIpPoolUtilizationView: (params: { path: Api.SystemIpPoolUtilizationViewPathParams, req: Request, cookies: Record }) => Promisable>, -/** `GET /v1/system/ip-pools-service` */ - systemIpPoolServiceView: (params: { req: Request, cookies: Record }) => Promisable>, -/** `GET /v1/system/ip-pools-service/ranges` */ - systemIpPoolServiceRangeList: (params: { query: Api.SystemIpPoolServiceRangeListQueryParams, req: Request, cookies: Record }) => Promisable>, -/** `POST /v1/system/ip-pools-service/ranges/add` */ - systemIpPoolServiceRangeAdd: (params: { body: Json, req: Request, cookies: Record }) => Promisable>, -/** `POST /v1/system/ip-pools-service/ranges/remove` */ - systemIpPoolServiceRangeRemove: (params: { body: Json, req: Request, cookies: Record }) => Promisable, /** `GET /v1/system/metrics/:metricName` */ systemMetric: (params: { path: Api.SystemMetricPathParams, query: Api.SystemMetricQueryParams, req: Request, cookies: Record }) => Promisable>, /** `GET /v1/system/networking/address-lot` */ @@ -963,6 +957,7 @@ http.post('/v1/system/ip-pools', handler(handlers['systemIpPoolCreate'], null, s http.get('/v1/system/ip-pools/:pool', handler(handlers['systemIpPoolView'], schema.SystemIpPoolViewParams, null)), http.put('/v1/system/ip-pools/:pool', handler(handlers['systemIpPoolUpdate'], schema.SystemIpPoolUpdateParams, schema.IpPoolUpdate)), http.delete('/v1/system/ip-pools/:pool', handler(handlers['systemIpPoolDelete'], schema.SystemIpPoolDeleteParams, null)), +http.post('/v1/system/ip-pools/:pool/assignment', handler(handlers['systemIpPoolAssign'], schema.SystemIpPoolAssignParams, schema.IpPoolAssignParam)), http.get('/v1/system/ip-pools/:pool/ranges', handler(handlers['systemIpPoolRangeList'], schema.SystemIpPoolRangeListParams, null)), http.post('/v1/system/ip-pools/:pool/ranges/add', handler(handlers['systemIpPoolRangeAdd'], schema.SystemIpPoolRangeAddParams, schema.IpRange)), http.post('/v1/system/ip-pools/:pool/ranges/remove', handler(handlers['systemIpPoolRangeRemove'], schema.SystemIpPoolRangeRemoveParams, schema.IpRange)), @@ -971,10 +966,6 @@ http.post('/v1/system/ip-pools/:pool/silos', handler(handlers['systemIpPoolSiloL http.put('/v1/system/ip-pools/:pool/silos/:silo', handler(handlers['systemIpPoolSiloUpdate'], schema.SystemIpPoolSiloUpdateParams, schema.IpPoolSiloUpdate)), http.delete('/v1/system/ip-pools/:pool/silos/:silo', handler(handlers['systemIpPoolSiloUnlink'], schema.SystemIpPoolSiloUnlinkParams, null)), http.get('/v1/system/ip-pools/:pool/utilization', handler(handlers['systemIpPoolUtilizationView'], schema.SystemIpPoolUtilizationViewParams, null)), -http.get('/v1/system/ip-pools-service', handler(handlers['systemIpPoolServiceView'], null, null)), -http.get('/v1/system/ip-pools-service/ranges', handler(handlers['systemIpPoolServiceRangeList'], schema.SystemIpPoolServiceRangeListParams, null)), -http.post('/v1/system/ip-pools-service/ranges/add', handler(handlers['systemIpPoolServiceRangeAdd'], null, schema.IpRange)), -http.post('/v1/system/ip-pools-service/ranges/remove', handler(handlers['systemIpPoolServiceRangeRemove'], null, schema.IpRange)), http.get('/v1/system/metrics/:metricName', handler(handlers['systemMetric'], schema.SystemMetricParams, null)), http.get('/v1/system/networking/address-lot', handler(handlers['networkingAddressLotList'], schema.NetworkingAddressLotListParams, null)), http.post('/v1/system/networking/address-lot', handler(handlers['networkingAddressLotCreate'], null, schema.AddressLotCreate)), diff --git a/oxide-openapi-gen-ts/src/__snapshots__/type-test.ts b/oxide-openapi-gen-ts/src/__snapshots__/type-test.ts index 1e823ab..8944976 100644 --- a/oxide-openapi-gen-ts/src/__snapshots__/type-test.ts +++ b/oxide-openapi-gen-ts/src/__snapshots__/type-test.ts @@ -233,8 +233,10 @@ assert>> assert>>(); assert>>(); assert>>(); +assert>>(); assert>>(); assert>>(); +assert>>(); assert>>(); assert>>(); assert>>(); diff --git a/oxide-openapi-gen-ts/src/__snapshots__/validate.ts b/oxide-openapi-gen-ts/src/__snapshots__/validate.ts index 8f605d4..e5ca5d8 100644 --- a/oxide-openapi-gen-ts/src/__snapshots__/validate.ts +++ b/oxide-openapi-gen-ts/src/__snapshots__/validate.ts @@ -2360,6 +2360,12 @@ export const InternetGatewayResultsPage = z.preprocess(processResponseBody,z.obj "nextPage": z.string().nullable().optional(), })) +/** +* Assignment of an IP pool to resources and services. + */ +export const IpPoolAssignment = z.preprocess(processResponseBody,z.enum(["silos", "system_services"]) +) + /** * Type of IP pool. */ @@ -2367,9 +2373,10 @@ export const IpPoolType = z.preprocess(processResponseBody,z.enum(["unicast", "m ) /** -* A collection of IP ranges. If a pool is linked to a silo, IP addresses from the pool can be allocated within that silo. +* A collection of IP ranges. */ -export const IpPool = z.preprocess(processResponseBody,z.object({"description": z.string(), +export const IpPool = z.preprocess(processResponseBody,z.object({"assignment": IpPoolAssignment, +"description": z.string(), "id": z.uuid(), "ipVersion": IpVersion, "name": Name, @@ -2378,6 +2385,12 @@ export const IpPool = z.preprocess(processResponseBody,z.object({"description": "timeModified": z.coerce.date(), })) +/** +* Body parameters for reassigning an IP pool. + */ +export const IpPoolAssignParam = z.preprocess(processResponseBody,z.object({"assignment": IpPoolAssignment, +})) + /** * Create-time parameters for an `IpPool`. * @@ -2385,7 +2398,8 @@ export const IpPool = z.preprocess(processResponseBody,z.object({"description": * * ASM: IPv4 addresses outside 232.0.0.0/8, IPv6 addresses with flag field != 3 SSM: IPv4 addresses in 232.0.0.0/8, IPv6 addresses with flag field = 3 */ -export const IpPoolCreate = z.preprocess(processResponseBody,z.object({"description": z.string(), +export const IpPoolCreate = z.preprocess(processResponseBody,z.object({"assignment": IpPoolAssignment.default("silos"), +"description": z.string(), "ipVersion": IpVersion.default("v4"), "name": Name, "poolType": IpPoolType.default("unicast"), @@ -5418,8 +5432,10 @@ export const IpPoolListParams = z.preprocess(processResponseBody, z.object({ path: z.object({ }), query: z.object({ + ipVersion: IpVersion.optional(), limit: z.number().min(1).max(4294967295).nullable().optional(), pageToken: z.string().nullable().optional(), + poolType: IpPoolType.optional(), sortBy: NameOrIdSortMode.optional(), }), })) @@ -6056,8 +6072,11 @@ export const SystemIpPoolListParams = z.preprocess(processResponseBody, z.object path: z.object({ }), query: z.object({ + assignment: IpPoolAssignment.optional(), + ipVersion: IpVersion.optional(), limit: z.number().min(1).max(4294967295).nullable().optional(), pageToken: z.string().nullable().optional(), + poolType: IpPoolType.optional(), sortBy: NameOrIdSortMode.optional(), }), })) @@ -6093,6 +6112,14 @@ export const SystemIpPoolDeleteParams = z.preprocess(processResponseBody, z.obje }), })) +export const SystemIpPoolAssignParams = z.preprocess(processResponseBody, z.object({ + path: z.object({ + pool: NameOrId, + }), + query: z.object({ + }), +})) + export const SystemIpPoolRangeListParams = z.preprocess(processResponseBody, z.object({ path: z.object({ pool: NameOrId, @@ -6164,36 +6191,6 @@ export const SystemIpPoolUtilizationViewParams = z.preprocess(processResponseBod }), })) -export const SystemIpPoolServiceViewParams = z.preprocess(processResponseBody, z.object({ - path: z.object({ - }), - query: z.object({ - }), -})) - -export const SystemIpPoolServiceRangeListParams = z.preprocess(processResponseBody, z.object({ - path: z.object({ - }), - query: z.object({ - limit: z.number().min(1).max(4294967295).nullable().optional(), - pageToken: z.string().nullable().optional(), - }), -})) - -export const SystemIpPoolServiceRangeAddParams = z.preprocess(processResponseBody, z.object({ - path: z.object({ - }), - query: z.object({ - }), -})) - -export const SystemIpPoolServiceRangeRemoveParams = z.preprocess(processResponseBody, z.object({ - path: z.object({ - }), - query: z.object({ - }), -})) - export const SystemMetricParams = z.preprocess(processResponseBody, z.object({ path: z.object({ metricName: SystemMetricName,