diff --git a/OMICRON_VERSION b/OMICRON_VERSION index 12caeb17a2..b118b82b12 100644 --- a/OMICRON_VERSION +++ b/OMICRON_VERSION @@ -1 +1 @@ -51b6b160c4913ee77685ab95dbfc50047d5503fe \ No newline at end of file +9b666e73dec06f2a645a714cdfbb21d63a2f3504 \ No newline at end of file diff --git a/app/forms/vpc-router-create.tsx b/app/forms/vpc-router-create.tsx deleted file mode 100644 index df28acbe3b..0000000000 --- a/app/forms/vpc-router-create.tsx +++ /dev/null @@ -1,59 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, you can obtain one at https://mozilla.org/MPL/2.0/. - * - * Copyright Oxide Computer Company - */ -import { useApiMutation, useApiQueryClient, type VpcRouterCreate } from '@oxide/api' - -import { DescriptionField, NameField, SideModalForm } from 'app/components/form' -import { useForm, useToast, useVpcSelector } from 'app/hooks' - -const defaultValues: VpcRouterCreate = { - name: '', - description: '', -} - -type CreateVpcRouterFormProps = { - onDismiss: () => void -} - -export function CreateVpcRouterForm({ onDismiss }: CreateVpcRouterFormProps) { - const vpcSelector = useVpcSelector() - const queryClient = useApiQueryClient() - const addToast = useToast() - - const createRouter = useApiMutation('vpcRouterCreate', { - onSuccess(router) { - queryClient.invalidateQueries('vpcRouterList') - // avoid the vpc fetch when the vpc page loads since we have the data - queryClient.setQueryData( - 'vpcRouterView', - { path: { router: router.name }, query: vpcSelector }, - router - ) - addToast({ content: 'Your VPC router has been created' }) - onDismiss() - }, - }) - - const form = useForm({ defaultValues }) - - return ( - - createRouter.mutate({ query: vpcSelector, body: { name, description } }) - } - loading={createRouter.isPending} - submitError={createRouter.error} - > - - - - ) -} diff --git a/app/forms/vpc-router-edit.tsx b/app/forms/vpc-router-edit.tsx deleted file mode 100644 index 589d76d450..0000000000 --- a/app/forms/vpc-router-edit.tsx +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, you can obtain one at https://mozilla.org/MPL/2.0/. - * - * Copyright Oxide Computer Company - */ -import { useApiMutation, useApiQueryClient, type VpcRouter } from '@oxide/api' -import { pick } from '@oxide/util' - -import { DescriptionField, NameField, SideModalForm } from 'app/components/form' -import { useForm, useVpcSelector } from 'app/hooks' - -type EditVpcRouterFormProps = { - onDismiss: () => void - editing: VpcRouter -} - -export function EditVpcRouterForm({ onDismiss, editing }: EditVpcRouterFormProps) { - const vpcSelector = useVpcSelector() - const queryClient = useApiQueryClient() - - const updateRouter = useApiMutation('vpcRouterUpdate', { - onSuccess() { - queryClient.invalidateQueries('vpcRouterList') - onDismiss() - }, - }) - - const defaultValues = pick(editing, 'name', 'description') /* satisfies VpcRouterUpdate */ - const form = useForm({ defaultValues }) - - return ( - { - updateRouter.mutate({ - path: { router: editing.name }, - query: vpcSelector, - body: { name, description }, - }) - }} - loading={updateRouter.isPending} - submitError={updateRouter.error} - > - - - - ) -} diff --git a/app/pages/project/networking/VpcPage/VpcPage.tsx b/app/pages/project/networking/VpcPage/VpcPage.tsx index c679280756..6ede9eab20 100644 --- a/app/pages/project/networking/VpcPage/VpcPage.tsx +++ b/app/pages/project/networking/VpcPage/VpcPage.tsx @@ -17,9 +17,6 @@ import { getVpcSelector, useVpcSelector } from 'app/hooks' import { VpcFirewallRulesTab } from './tabs/VpcFirewallRulesTab' import { VpcSubnetsTab } from './tabs/VpcSubnetsTab' -// import { VpcRoutersTab } from './tabs/VpcRoutersTab' -// import { VpcSystemRoutesTab } from './tabs/VpcSystemRoutesTab' - VpcPage.loader = async ({ params }: LoaderFunctionArgs) => { const { project, vpc } = getVpcSelector(params) await apiQueryClient.prefetchQuery('vpcView', { path: { vpc }, query: { project } }) @@ -56,19 +53,11 @@ export function VpcPage() { Subnets - {/* System Routes - Routers */} Firewall Rules - {/* - - - - - */} diff --git a/app/pages/project/networking/VpcPage/tabs/VpcRoutersTab.tsx b/app/pages/project/networking/VpcPage/tabs/VpcRoutersTab.tsx deleted file mode 100644 index 81b41ea8d7..0000000000 --- a/app/pages/project/networking/VpcPage/tabs/VpcRoutersTab.tsx +++ /dev/null @@ -1,60 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, you can obtain one at https://mozilla.org/MPL/2.0/. - * - * Copyright Oxide Computer Company - */ -import { useState } from 'react' - -import type { VpcRouter } from '@oxide/api' -import { DateCell, LabelCell, useQueryTable, type MenuAction } from '@oxide/table' -import { Button, EmptyMessage } from '@oxide/ui' - -import { CreateVpcRouterForm } from 'app/forms/vpc-router-create' -import { EditVpcRouterForm } from 'app/forms/vpc-router-edit' -import { useVpcSelector } from 'app/hooks' - -export const VpcRoutersTab = () => { - const vpcSelector = useVpcSelector() - - const { Table, Column } = useQueryTable('vpcRouterList', { query: vpcSelector }) - - const [creating, setCreating] = useState(false) - const [editing, setEditing] = useState(null) - - const makeActions = (router: VpcRouter): MenuAction[] => [ - { - label: 'Edit', - onActivate: () => setEditing(router), - }, - ] - - const emptyState = ( - setCreating(true)} - /> - ) - - return ( - <> -
- - {creating && setCreating(false)} />} - {editing && ( - setEditing(null)} /> - )} -
- - - - -
- - ) -} diff --git a/app/pages/project/networking/VpcPage/tabs/VpcSystemRoutesTab.tsx b/app/pages/project/networking/VpcPage/tabs/VpcSystemRoutesTab.tsx deleted file mode 100644 index 98a94b1dd5..0000000000 --- a/app/pages/project/networking/VpcPage/tabs/VpcSystemRoutesTab.tsx +++ /dev/null @@ -1,36 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, you can obtain one at https://mozilla.org/MPL/2.0/. - * - * Copyright Oxide Computer Company - */ -import { TypeValueCell, useQueryTable } from '@oxide/table' -import { EmptyMessage } from '@oxide/ui' - -import { useVpcSelector } from 'app/hooks' - -const EmptyState = () => ( - {}} - /> -) - -export const VpcSystemRoutesTab = () => { - const vpcSelector = useVpcSelector() - const { Table, Column } = useQueryTable('vpcRouterRouteList', { - query: { ...vpcSelector, router: 'system' }, - }) - - return ( - }> - - - - -
- ) -} diff --git a/libs/api-mocks/msw/db.ts b/libs/api-mocks/msw/db.ts index afbe2eec9a..480aa56098 100644 --- a/libs/api-mocks/msw/db.ts +++ b/libs/api-mocks/msw/db.ts @@ -100,30 +100,6 @@ export const lookup = { return vpc }, - vpcRouter({ router: id, ...vpcSelector }: PP.VpcRouter): Json { - if (!id) throw notFoundErr - - if (isUuid(id)) return lookupById(db.vpcRouters, id) - - const vpc = lookup.vpc(vpcSelector) - const router = db.vpcRouters.find((s) => s.vpc_id === vpc.id && s.name === id) - if (!router) throw notFoundErr - - return router - }, - vpcRouterRoute({ route: id, ...routerSelector }: PP.RouterRoute): Json { - if (!id) throw notFoundErr - - if (isUuid(id)) return lookupById(db.vpcRouterRoutes, id) - - const router = lookup.vpcRouter(routerSelector) - const route = db.vpcRouterRoutes.find( - (s) => s.vpc_router_id === router.id && s.name === id - ) - if (!route) throw notFoundErr - - return route - }, vpcSubnet({ subnet: id, ...vpcSelector }: PP.VpcSubnet): Json { if (!id) throw notFoundErr @@ -224,8 +200,6 @@ const initDb = { sshKeys: [...mock.sshKeys], users: [...mock.users], vpcFirewallRules: [...mock.defaultFirewallRules], - vpcRouterRoutes: [mock.vpcRouterRoute], - vpcRouters: [mock.vpcRouter], vpcs: [mock.vpc], vpcSubnets: [mock.vpcSubnet], } diff --git a/libs/api-mocks/msw/handlers.ts b/libs/api-mocks/msw/handlers.ts index fafbe6827c..ccdce18d38 100644 --- a/libs/api-mocks/msw/handlers.ts +++ b/libs/api-mocks/msw/handlers.ts @@ -670,14 +670,6 @@ export const handlers = makeHandlers({ db.vpcSubnets = db.vpcSubnets.filter((s) => s.vpc_id !== vpc.id) db.vpcFirewallRules = db.vpcFirewallRules.filter((r) => r.vpc_id !== vpc.id) - const routersToRemove = db.vpcRouters - .filter((r) => r.vpc_id === vpc.id) - .map((r) => r.id) - db.vpcRouterRoutes = db.vpcRouterRoutes.filter( - (r) => !routersToRemove.includes(r.vpc_router_id) - ) - db.vpcRouters = db.vpcRouters.filter((r) => r.vpc_id !== vpc.id) - return 204 }, vpcFirewallRulesView({ query }) { @@ -704,87 +696,6 @@ export const handlers = makeHandlers({ return { rules: sortBy(rules, (r) => r.name) } }, - vpcRouterList({ query }) { - const vpc = lookup.vpc(query) - const routers = db.vpcRouters.filter((r) => r.vpc_id === vpc.id) - return paginated(query, routers) - }, - vpcRouterCreate({ body, query }) { - const vpc = lookup.vpc(query) - errIfExists(db.vpcRouters, { vpc_id: vpc.id, name: body.name }) - - const newRouter: Json = { - id: uuid(), - vpc_id: vpc.id, - kind: 'custom', - ...body, - ...getTimestamps(), - } - db.vpcRouters.push(newRouter) - return json(newRouter, { status: 201 }) - }, - vpcRouterView: ({ path, query }) => lookup.vpcRouter({ ...path, ...query }), - vpcRouterUpdate({ body, path, query }) { - const router = lookup.vpcRouter({ ...path, ...query }) - - if (body.name) { - router.name = body.name - } - if (typeof body.description === 'string') { - router.description = body.description - } - - return router - }, - vpcRouterDelete({ path, query }) { - const router = lookup.vpcRouter({ ...path, ...query }) - - // TODO: Are there routers that can't be deleted? - db.vpcRouters = db.vpcRouters.filter((r) => r.id !== router.id) - - return 204 - }, - vpcRouterRouteList({ query }) { - const router = lookup.vpcRouter(query) - const routers = db.vpcRouterRoutes.filter((s) => s.vpc_router_id === router.id) - return paginated(query, routers) - }, - vpcRouterRouteCreate({ body, query }) { - const router = lookup.vpcRouter(query) - - errIfExists(db.vpcRouterRoutes, { vpc_router_id: router.id, name: body.name }) - - const newRoute: Json = { - id: uuid(), - vpc_router_id: router.id, - kind: 'custom', - ...body, - ...getTimestamps(), - } - return json(newRoute, { status: 201 }) - }, - vpcRouterRouteView: ({ path, query }) => lookup.vpcRouterRoute({ ...path, ...query }), - vpcRouterRouteUpdate({ body, path, query }) { - const route = lookup.vpcRouterRoute({ ...path, ...query }) - if (route.kind !== 'custom') { - throw 'Only custom routes may be modified' - } - if (body.name) { - route.name = body.name - } - if (typeof body.description === 'string') { - route.description = body.description - } - return route - }, - vpcRouterRouteDelete({ path, query }) { - const route = lookup.vpcRouterRoute({ ...path, ...query }) - if (route.kind !== 'custom') { - throw 'Only custom routes may be modified' - } - db.vpcRouterRoutes = db.vpcRouterRoutes.filter((r) => r.id !== route.id) - return 204 - }, vpcSubnetList({ query }) { const vpc = lookup.vpc(query) const subnets = db.vpcSubnets.filter((s) => s.vpc_id === vpc.id) @@ -1036,6 +947,7 @@ export const handlers = makeHandlers({ siloMetric: handleMetrics, // Misc endpoints we're not using yet in the console + addSledToInitializedRack: NotImplemented, certificateCreate: NotImplemented, certificateDelete: NotImplemented, certificateList: NotImplemented, @@ -1091,9 +1003,11 @@ export const handlers = makeHandlers({ siloPolicyView: NotImplemented, siloUserList: NotImplemented, siloUserView: NotImplemented, + sledSetProvisionState: NotImplemented, switchList: NotImplemented, switchView: NotImplemented, systemPolicyUpdate: NotImplemented, + uninitializedSledList: NotImplemented, userBuiltinList: NotImplemented, userBuiltinView: NotImplemented, }) diff --git a/libs/api-mocks/sled.ts b/libs/api-mocks/sled.ts index e26e96c590..a5f85e2af5 100644 --- a/libs/api-mocks/sled.ts +++ b/libs/api-mocks/sled.ts @@ -14,6 +14,7 @@ export const sled: Json = { time_created: new Date(2021, 0, 1).toISOString(), time_modified: new Date(2021, 0, 2).toISOString(), rack_id: '6fbafcc7-1626-4785-be65-e212f8ad66d0', + provision_state: 'provisionable', baseboard: { part: '913-0000008', serial: 'BRM02222867', diff --git a/libs/api-mocks/vpc.ts b/libs/api-mocks/vpc.ts index 1c610108fe..605e6f99ff 100644 --- a/libs/api-mocks/vpc.ts +++ b/libs/api-mocks/vpc.ts @@ -5,9 +5,8 @@ * * Copyright Oxide Computer Company */ -import type { RouterRoute } from 'libs/api/__generated__/Api' -import type { Vpc, VpcFirewallRule, VpcRouter, VpcSubnet } from '@oxide/api' +import type { Vpc, VpcFirewallRule, VpcSubnet } from '@oxide/api' import type { Json } from './json-type' import { project } from './project' @@ -119,25 +118,3 @@ export const defaultFirewallRules: Json = [ vpc_id: vpc.id, }, ] - -export const vpcRouter: Json = { - description: 'a vpc router', - id: systemRouterId, - kind: 'system', - name: 'system', - time_created, - time_modified, - vpc_id: vpc.id, -} - -export const vpcRouterRoute: Json = { - description: 'a vpc router route', - id: '3784f74a-728e-4ee6-950d-2167b1072e29', - name: 'system', - kind: 'default', - target: { type: 'instance', value: 'an-instance' }, - destination: { type: 'vpc', value: 'a-vpc' }, - time_created, - time_modified, - vpc_router_id: vpcRouter.id, -} diff --git a/libs/api/__generated__/Api.ts b/libs/api/__generated__/Api.ts index cda8c71784..ff66451245 100644 --- a/libs/api/__generated__/Api.ts +++ b/libs/api/__generated__/Api.ts @@ -268,7 +268,7 @@ export type BgpImportedRouteIpv4 = { /** * A BGP peer configuration for an interface. Includes the set of announcements that will be advertised to the peer identified by `addr`. The `bgp_config` parameter is a reference to global BGP parameters. The `interface_name` indicates what interface the peer should be contacted on. */ -export type BgpPeerConfig = { +export type BgpPeer = { /** The address of the host to peer with. */ addr: string /** The set of announcements advertised by the peer. */ @@ -289,6 +289,8 @@ export type BgpPeerConfig = { keepalive: number } +export type BgpPeerConfig = { peers: BgpPeer[] } + /** * The current state of a BGP peer. */ @@ -735,6 +737,40 @@ export type Histogramfloat = { bins: Binfloat[]; nSamples: number; startTime: Da */ export type Histogramdouble = { bins: Bindouble[]; nSamples: number; startTime: Date } +/** + * The type of an individual datum of a metric. + */ +export type DatumType = + | 'bool' + | 'i8' + | 'u8' + | 'i16' + | 'u16' + | 'i32' + | 'u32' + | 'i64' + | 'u64' + | 'f32' + | 'f64' + | 'string' + | 'bytes' + | 'cumulative_i64' + | 'cumulative_u64' + | 'cumulative_f32' + | 'cumulative_f64' + | 'histogram_i8' + | 'histogram_u8' + | 'histogram_i16' + | 'histogram_u16' + | 'histogram_i32' + | 'histogram_u32' + | 'histogram_i64' + | 'histogram_u64' + | 'histogram_f32' + | 'histogram_f64' + +export type MissingDatum = { datumType: DatumType; startTime?: Date } + /** * A `Datum` is a single sampled data point from a metric. */ @@ -766,6 +802,7 @@ export type Datum = | { datum: Histogramuint64; type: 'histogram_u64' } | { datum: Histogramfloat; type: 'histogram_f32' } | { datum: Histogramdouble; type: 'histogram_f64' } + | { datum: MissingDatum; type: 'missing' } export type DerEncodedKeyPair = { /** request signing private key (base64 encoded der file) */ @@ -1432,6 +1469,8 @@ export type LinkSpeed = * Switch link configuration. */ export type LinkConfig = { + /** Whether or not to set autonegotiation */ + autoneg: boolean /** The forward error correction mode of the link. */ fec: LinkFec /** The link-layer discovery protocol (LLDP) configuration for the link. */ @@ -1673,111 +1712,6 @@ export type RouteConfig = { routes: Route[] } -/** - * A `RouteDestination` is used to match traffic with a routing rule, on the destination of that traffic. - * - * When traffic is to be sent to a destination that is within a given `RouteDestination`, the corresponding `RouterRoute` applies, and traffic will be forward to the `RouteTarget` for that rule. - */ -export type RouteDestination = - /** Route applies to traffic destined for a specific IP address */ - | { type: 'ip'; value: string } - /** Route applies to traffic destined for a specific IP subnet */ - | { type: 'ip_net'; value: IpNet } - /** Route applies to traffic destined for the given VPC. */ - | { type: 'vpc'; value: Name } - /** Route applies to traffic */ - | { type: 'subnet'; value: Name } - -/** - * A `RouteTarget` describes the possible locations that traffic matching a route destination can be sent. - */ -export type RouteTarget = - /** Forward traffic to a particular IP address. */ - | { type: 'ip'; value: string } - /** Forward traffic to a VPC */ - | { type: 'vpc'; value: Name } - /** Forward traffic to a VPC Subnet */ - | { type: 'subnet'; value: Name } - /** Forward traffic to a specific instance */ - | { type: 'instance'; value: Name } - /** Forward traffic to an internet gateway */ - | { type: 'internet_gateway'; value: Name } - -/** - * The kind of a `RouterRoute` - * - * The kind determines certain attributes such as if the route is modifiable and describes how or where the route was created. - */ -export type RouterRouteKind = - /** Determines the default destination of traffic, such as whether it goes to the internet or not. - -`Destination: An Internet Gateway` `Modifiable: true` */ - | 'default' - /** Automatically added for each VPC Subnet in the VPC - -`Destination: A VPC Subnet` `Modifiable: false` */ - | 'vpc_subnet' - /** Automatically added when VPC peering is established - -`Destination: A different VPC` `Modifiable: false` */ - | 'vpc_peering' - /** Created by a user; see `RouteTarget` - -`Destination: User defined` `Modifiable: true` */ - | 'custom' - -/** - * A route defines a rule that governs where traffic should be sent based on its destination. - */ -export type RouterRoute = { - /** human-readable free-form text about a resource */ - description: string - destination: RouteDestination - /** unique, immutable, system-controlled identifier for each resource */ - id: string - /** Describes the kind of router. Set at creation. `read-only` */ - kind: RouterRouteKind - /** unique, mutable, user-controlled identifier for each resource */ - name: Name - target: RouteTarget - /** timestamp when this resource was created */ - timeCreated: Date - /** timestamp when this resource was last modified */ - timeModified: Date - /** The ID of the VPC Router to which the route belongs */ - vpcRouterId: string -} - -/** - * Create-time parameters for a `RouterRoute` - */ -export type RouterRouteCreate = { - description: string - destination: RouteDestination - name: Name - target: RouteTarget -} - -/** - * A single page of results - */ -export type RouterRouteResultsPage = { - /** list of items on this page of results */ - items: RouterRoute[] - /** token used to fetch the next page of results (if any) */ - nextPage?: string -} - -/** - * Updateable properties of a `RouterRoute` - */ -export type RouterRouteUpdate = { - description?: string - destination: RouteDestination - name?: Name - target: RouteTarget -} - /** * Identity-related metadata that's included in nearly all public API objects */ @@ -1920,6 +1854,21 @@ export type SiloRolePolicy = { roleAssignments: SiloRoleRoleAssignment[] } +/** + * The provision state of a sled. + * + * This controls whether new resources are going to be provisioned on this sled. + */ +export type SledProvisionState = + /** New resources will be provisioned on this sled. */ + | 'provisionable' + /** New resources will not be provisioned on this sled. However, existing resources will continue to be on this sled unless manually migrated off. */ + | 'non_provisionable' + /** This is a state that isn't known yet. + +This is defined to avoid API breakage. */ + | 'unknown' + /** * An operator's view of a Sled. */ @@ -1927,6 +1876,8 @@ export type Sled = { baseboard: Baseboard /** unique, immutable, system-controlled identifier for each resource */ id: string + /** The provision state of the sled. */ + provisionState: SledProvisionState /** The rack to which this Sled is currently attached */ rackId: string /** timestamp when this resource was created */ @@ -1969,6 +1920,24 @@ export type SledInstanceResultsPage = { nextPage?: string } +/** + * Parameters for `sled_set_provision_state`. + */ +export type SledProvisionStateParams = { + /** The provision state. */ + state: SledProvisionState +} + +/** + * Response to `sled_set_provision_state`. + */ +export type SledProvisionStateResponse = { + /** The new provision state. */ + newState: SledProvisionState + /** The old provision state. */ + oldState: SledProvisionState +} + /** * A single page of results */ @@ -2314,6 +2283,11 @@ export type SwitchResultsPage = { nextPage?: string } +/** + * A sled that has not been added to an initialized rack yet + */ +export type UninitializedSled = { baseboard: Baseboard; cubby: number; rackId: string } + /** * View of a User */ @@ -2556,47 +2530,6 @@ export type VpcResultsPage = { nextPage?: string } -export type VpcRouterKind = 'system' | 'custom' - -/** - * A VPC router defines a series of rules that indicate where traffic should be sent depending on its destination. - */ -export type VpcRouter = { - /** human-readable free-form text about a resource */ - description: string - /** unique, immutable, system-controlled identifier for each resource */ - id: string - kind: VpcRouterKind - /** unique, mutable, user-controlled identifier for each resource */ - name: Name - /** timestamp when this resource was created */ - timeCreated: Date - /** timestamp when this resource was last modified */ - timeModified: Date - /** The VPC to which the router belongs. */ - vpcId: string -} - -/** - * Create-time parameters for a `VpcRouter` - */ -export type VpcRouterCreate = { description: string; name: Name } - -/** - * A single page of results - */ -export type VpcRouterResultsPage = { - /** list of items on this page of results */ - items: VpcRouter[] - /** token used to fetch the next page of results (if any) */ - nextPage?: string -} - -/** - * Updateable properties of a `VpcRouter` - */ -export type VpcRouterUpdate = { description?: string; name?: Name } - /** * A VPC subnet represents a logical grouping for instances that allows network traffic between them, within a IPv4 subnetwork or optionall an IPv6 subnetwork. */ @@ -3156,6 +3089,10 @@ export interface SledInstanceListQueryParams { sortBy?: IdSortMode } +export interface SledSetProvisionStatePathParams { + sledId: string +} + export interface NetworkingSwitchPortListQueryParams { limit?: number pageToken?: string @@ -3427,91 +3364,6 @@ export interface VpcFirewallRulesUpdateQueryParams { vpc: NameOrId } -export interface VpcRouterRouteListQueryParams { - limit?: number - pageToken?: string - project?: NameOrId - router?: NameOrId - sortBy?: NameOrIdSortMode - vpc?: NameOrId -} - -export interface VpcRouterRouteCreateQueryParams { - project?: NameOrId - router: NameOrId - vpc?: NameOrId -} - -export interface VpcRouterRouteViewPathParams { - route: NameOrId -} - -export interface VpcRouterRouteViewQueryParams { - project?: NameOrId - router: NameOrId - vpc?: NameOrId -} - -export interface VpcRouterRouteUpdatePathParams { - route: NameOrId -} - -export interface VpcRouterRouteUpdateQueryParams { - project?: NameOrId - router?: NameOrId - vpc?: NameOrId -} - -export interface VpcRouterRouteDeletePathParams { - route: NameOrId -} - -export interface VpcRouterRouteDeleteQueryParams { - project?: NameOrId - router?: NameOrId - vpc?: NameOrId -} - -export interface VpcRouterListQueryParams { - limit?: number - pageToken?: string - project?: NameOrId - sortBy?: NameOrIdSortMode - vpc?: NameOrId -} - -export interface VpcRouterCreateQueryParams { - project?: NameOrId - vpc: NameOrId -} - -export interface VpcRouterViewPathParams { - router: NameOrId -} - -export interface VpcRouterViewQueryParams { - project?: NameOrId - vpc?: NameOrId -} - -export interface VpcRouterUpdatePathParams { - router: NameOrId -} - -export interface VpcRouterUpdateQueryParams { - project?: NameOrId - vpc?: NameOrId -} - -export interface VpcRouterDeletePathParams { - router: NameOrId -} - -export interface VpcRouterDeleteQueryParams { - project?: NameOrId - vpc?: NameOrId -} - export interface VpcSubnetListQueryParams { limit?: number pageToken?: string @@ -3621,6 +3473,7 @@ export type ApiListMethods = Pick< | 'sledInstanceList' | 'networkingSwitchPortList' | 'switchList' + | 'uninitializedSledList' | 'siloIdentityProviderList' | 'ipPoolList' | 'ipPoolRangeList' @@ -3636,8 +3489,6 @@ export type ApiListMethods = Pick< | 'siloUserList' | 'userBuiltinList' | 'userList' - | 'vpcRouterRouteList' - | 'vpcRouterList' | 'vpcSubnetList' | 'vpcList' > @@ -4755,6 +4606,20 @@ export class Api extends HttpClient { ...params, }) }, + /** + * Add a sled to an initialized rack + */ + addSledToInitializedRack: ( + { body }: { body: UninitializedSled }, + params: FetchParams = {} + ) => { + return this.request({ + path: `/v1/system/hardware/sleds`, + method: 'POST', + body, + ...params, + }) + }, /** * Fetch a sled */ @@ -4799,6 +4664,23 @@ export class Api extends HttpClient { ...params, }) }, + /** + * Set the sled's provision state. + */ + sledSetProvisionState: ( + { + path, + body, + }: { path: SledSetProvisionStatePathParams; body: SledProvisionStateParams }, + params: FetchParams = {} + ) => { + return this.request({ + path: `/v1/system/hardware/sleds/${path.sledId}/provision-state`, + method: 'PUT', + body, + ...params, + }) + }, /** * List switch ports */ @@ -4880,6 +4762,16 @@ export class Api extends HttpClient { ...params, }) }, + /** + * List uninitialized sleds in a given rack + */ + uninitializedSledList: (_: EmptyObj, params: FetchParams = {}) => { + return this.request({ + path: `/v1/system/hardware/uninitialized-sleds`, + method: 'GET', + ...params, + }) + }, /** * List a silo's IdP's name */ @@ -5222,7 +5114,7 @@ export class Api extends HttpClient { }) }, /** - * Get BGP configurations. + * List BGP configurations */ networkingBgpConfigList: ( { query = {} }: { query?: NetworkingBgpConfigListQueryParams }, @@ -5236,7 +5128,7 @@ export class Api extends HttpClient { }) }, /** - * Create a new BGP configuration. + * Create a new BGP configuration */ networkingBgpConfigCreate: ( { body }: { body: BgpConfigCreate }, @@ -5250,7 +5142,7 @@ export class Api extends HttpClient { }) }, /** - * Delete a BGP configuration. + * Delete a BGP configuration */ networkingBgpConfigDelete: ( { query }: { query?: NetworkingBgpConfigDeleteQueryParams }, @@ -5264,7 +5156,7 @@ export class Api extends HttpClient { }) }, /** - * Get originated routes for a given BGP configuration. + * Get originated routes for a BGP configuration */ networkingBgpAnnounceSetList: ( { query }: { query?: NetworkingBgpAnnounceSetListQueryParams }, @@ -5278,7 +5170,7 @@ export class Api extends HttpClient { }) }, /** - * Create a new BGP announce set. + * Create a new BGP announce set */ networkingBgpAnnounceSetCreate: ( { body }: { body: BgpAnnounceSetCreate }, @@ -5292,7 +5184,7 @@ export class Api extends HttpClient { }) }, /** - * Delete a BGP announce set. + * Delete a BGP announce set */ networkingBgpAnnounceSetDelete: ( { query }: { query?: NetworkingBgpAnnounceSetDeleteQueryParams }, @@ -5306,7 +5198,7 @@ export class Api extends HttpClient { }) }, /** - * Get imported IPv4 BGP routes. + * Get imported IPv4 BGP routes */ networkingBgpImportedRoutesIpv4: ( { query }: { query?: NetworkingBgpImportedRoutesIpv4QueryParams }, @@ -5330,7 +5222,7 @@ export class Api extends HttpClient { }) }, /** - * Get loopback addresses, optionally filtering by id + * List loopback addresses */ networkingLoopbackAddressList: ( { query = {} }: { query?: NetworkingLoopbackAddressListQueryParams }, @@ -5643,178 +5535,6 @@ export class Api extends HttpClient { ...params, }) }, - /** - * List routes - */ - vpcRouterRouteList: ( - { query = {} }: { query?: VpcRouterRouteListQueryParams }, - params: FetchParams = {} - ) => { - return this.request({ - path: `/v1/vpc-router-routes`, - method: 'GET', - query, - ...params, - }) - }, - /** - * Create a router - */ - vpcRouterRouteCreate: ( - { query, body }: { query?: VpcRouterRouteCreateQueryParams; body: RouterRouteCreate }, - params: FetchParams = {} - ) => { - return this.request({ - path: `/v1/vpc-router-routes`, - method: 'POST', - body, - query, - ...params, - }) - }, - /** - * Fetch a route - */ - vpcRouterRouteView: ( - { - path, - query, - }: { path: VpcRouterRouteViewPathParams; query?: VpcRouterRouteViewQueryParams }, - params: FetchParams = {} - ) => { - return this.request({ - path: `/v1/vpc-router-routes/${path.route}`, - method: 'GET', - query, - ...params, - }) - }, - /** - * Update a route - */ - vpcRouterRouteUpdate: ( - { - path, - query = {}, - body, - }: { - path: VpcRouterRouteUpdatePathParams - query?: VpcRouterRouteUpdateQueryParams - body: RouterRouteUpdate - }, - params: FetchParams = {} - ) => { - return this.request({ - path: `/v1/vpc-router-routes/${path.route}`, - method: 'PUT', - body, - query, - ...params, - }) - }, - /** - * Delete a route - */ - vpcRouterRouteDelete: ( - { - path, - query = {}, - }: { path: VpcRouterRouteDeletePathParams; query?: VpcRouterRouteDeleteQueryParams }, - params: FetchParams = {} - ) => { - return this.request({ - path: `/v1/vpc-router-routes/${path.route}`, - method: 'DELETE', - query, - ...params, - }) - }, - /** - * List routers - */ - vpcRouterList: ( - { query = {} }: { query?: VpcRouterListQueryParams }, - params: FetchParams = {} - ) => { - return this.request({ - path: `/v1/vpc-routers`, - method: 'GET', - query, - ...params, - }) - }, - /** - * Create a VPC router - */ - vpcRouterCreate: ( - { query, body }: { query?: VpcRouterCreateQueryParams; body: VpcRouterCreate }, - params: FetchParams = {} - ) => { - return this.request({ - path: `/v1/vpc-routers`, - method: 'POST', - body, - query, - ...params, - }) - }, - /** - * Fetch a router - */ - vpcRouterView: ( - { - path, - query = {}, - }: { path: VpcRouterViewPathParams; query?: VpcRouterViewQueryParams }, - params: FetchParams = {} - ) => { - return this.request({ - path: `/v1/vpc-routers/${path.router}`, - method: 'GET', - query, - ...params, - }) - }, - /** - * Update a router - */ - vpcRouterUpdate: ( - { - path, - query = {}, - body, - }: { - path: VpcRouterUpdatePathParams - query?: VpcRouterUpdateQueryParams - body: VpcRouterUpdate - }, - params: FetchParams = {} - ) => { - return this.request({ - path: `/v1/vpc-routers/${path.router}`, - method: 'PUT', - body, - query, - ...params, - }) - }, - /** - * Delete a router - */ - vpcRouterDelete: ( - { - path, - query = {}, - }: { path: VpcRouterDeletePathParams; query?: VpcRouterDeleteQueryParams }, - params: FetchParams = {} - ) => { - return this.request({ - path: `/v1/vpc-routers/${path.router}`, - method: 'DELETE', - query, - ...params, - }) - }, /** * List subnets */ diff --git a/libs/api/__generated__/OMICRON_VERSION b/libs/api/__generated__/OMICRON_VERSION index 3214f9b1bb..b49fa25c92 100644 --- a/libs/api/__generated__/OMICRON_VERSION +++ b/libs/api/__generated__/OMICRON_VERSION @@ -1,2 +1,2 @@ # generated file. do not update manually. see docs/update-pinned-api.md -51b6b160c4913ee77685ab95dbfc50047d5503fe +9b666e73dec06f2a645a714cdfbb21d63a2f3504 diff --git a/libs/api/__generated__/msw-handlers.ts b/libs/api/__generated__/msw-handlers.ts index dace34bcf3..93a87adb24 100644 --- a/libs/api/__generated__/msw-handlers.ts +++ b/libs/api/__generated__/msw-handlers.ts @@ -529,6 +529,12 @@ export interface MSWHandlers { req: Request cookies: Record }) => Promisable> + /** `POST /v1/system/hardware/sleds` */ + addSledToInitializedRack: (params: { + body: Json + req: Request + cookies: Record + }) => Promisable /** `GET /v1/system/hardware/sleds/:sledId` */ sledView: (params: { path: Api.SledViewPathParams @@ -549,6 +555,13 @@ export interface MSWHandlers { req: Request cookies: Record }) => Promisable> + /** `PUT /v1/system/hardware/sleds/:sledId/provision-state` */ + sledSetProvisionState: (params: { + path: Api.SledSetProvisionStatePathParams + body: Json + req: Request + cookies: Record + }) => Promisable> /** `GET /v1/system/hardware/switch-port` */ networkingSwitchPortList: (params: { query: Api.NetworkingSwitchPortListQueryParams @@ -582,6 +595,11 @@ export interface MSWHandlers { req: Request cookies: Record }) => Promisable> + /** `GET /v1/system/hardware/uninitialized-sleds` */ + uninitializedSledList: (params: { + req: Request + cookies: Record + }) => Promisable /** `GET /v1/system/identity-providers` */ siloIdentityProviderList: (params: { query: Api.SiloIdentityProviderListQueryParams @@ -924,76 +942,6 @@ export interface MSWHandlers { req: Request cookies: Record }) => Promisable> - /** `GET /v1/vpc-router-routes` */ - vpcRouterRouteList: (params: { - query: Api.VpcRouterRouteListQueryParams - req: Request - cookies: Record - }) => Promisable> - /** `POST /v1/vpc-router-routes` */ - vpcRouterRouteCreate: (params: { - query: Api.VpcRouterRouteCreateQueryParams - body: Json - req: Request - cookies: Record - }) => Promisable> - /** `GET /v1/vpc-router-routes/:route` */ - vpcRouterRouteView: (params: { - path: Api.VpcRouterRouteViewPathParams - query: Api.VpcRouterRouteViewQueryParams - req: Request - cookies: Record - }) => Promisable> - /** `PUT /v1/vpc-router-routes/:route` */ - vpcRouterRouteUpdate: (params: { - path: Api.VpcRouterRouteUpdatePathParams - query: Api.VpcRouterRouteUpdateQueryParams - body: Json - req: Request - cookies: Record - }) => Promisable> - /** `DELETE /v1/vpc-router-routes/:route` */ - vpcRouterRouteDelete: (params: { - path: Api.VpcRouterRouteDeletePathParams - query: Api.VpcRouterRouteDeleteQueryParams - req: Request - cookies: Record - }) => Promisable - /** `GET /v1/vpc-routers` */ - vpcRouterList: (params: { - query: Api.VpcRouterListQueryParams - req: Request - cookies: Record - }) => Promisable> - /** `POST /v1/vpc-routers` */ - vpcRouterCreate: (params: { - query: Api.VpcRouterCreateQueryParams - body: Json - req: Request - cookies: Record - }) => Promisable> - /** `GET /v1/vpc-routers/:router` */ - vpcRouterView: (params: { - path: Api.VpcRouterViewPathParams - query: Api.VpcRouterViewQueryParams - req: Request - cookies: Record - }) => Promisable> - /** `PUT /v1/vpc-routers/:router` */ - vpcRouterUpdate: (params: { - path: Api.VpcRouterUpdatePathParams - query: Api.VpcRouterUpdateQueryParams - body: Json - req: Request - cookies: Record - }) => Promisable> - /** `DELETE /v1/vpc-routers/:router` */ - vpcRouterDelete: (params: { - path: Api.VpcRouterDeletePathParams - query: Api.VpcRouterDeleteQueryParams - req: Request - cookies: Record - }) => Promisable /** `GET /v1/vpc-subnets` */ vpcSubnetList: (params: { query: Api.VpcSubnetListQueryParams @@ -1509,6 +1457,10 @@ export function makeHandlers(handlers: MSWHandlers): HttpHandler[] { '/v1/system/hardware/sleds', handler(handlers['sledList'], schema.SledListParams, null) ), + http.post( + '/v1/system/hardware/sleds', + handler(handlers['addSledToInitializedRack'], null, schema.UninitializedSled) + ), http.get( '/v1/system/hardware/sleds/:sledId', handler(handlers['sledView'], schema.SledViewParams, null) @@ -1521,6 +1473,14 @@ export function makeHandlers(handlers: MSWHandlers): HttpHandler[] { '/v1/system/hardware/sleds/:sledId/instances', handler(handlers['sledInstanceList'], schema.SledInstanceListParams, null) ), + http.put( + '/v1/system/hardware/sleds/:sledId/provision-state', + handler( + handlers['sledSetProvisionState'], + schema.SledSetProvisionStateParams, + schema.SledProvisionStateParams + ) + ), http.get( '/v1/system/hardware/switch-port', handler( @@ -1553,6 +1513,10 @@ export function makeHandlers(handlers: MSWHandlers): HttpHandler[] { '/v1/system/hardware/switches/:switchId', handler(handlers['switchView'], schema.SwitchViewParams, null) ), + http.get( + '/v1/system/hardware/uninitialized-sleds', + handler(handlers['uninitializedSledList'], null, null) + ), http.get( '/v1/system/identity-providers', handler( @@ -1852,62 +1816,6 @@ export function makeHandlers(handlers: MSWHandlers): HttpHandler[] { schema.VpcFirewallRuleUpdateParams ) ), - http.get( - '/v1/vpc-router-routes', - handler(handlers['vpcRouterRouteList'], schema.VpcRouterRouteListParams, null) - ), - http.post( - '/v1/vpc-router-routes', - handler( - handlers['vpcRouterRouteCreate'], - schema.VpcRouterRouteCreateParams, - schema.RouterRouteCreate - ) - ), - http.get( - '/v1/vpc-router-routes/:route', - handler(handlers['vpcRouterRouteView'], schema.VpcRouterRouteViewParams, null) - ), - http.put( - '/v1/vpc-router-routes/:route', - handler( - handlers['vpcRouterRouteUpdate'], - schema.VpcRouterRouteUpdateParams, - schema.RouterRouteUpdate - ) - ), - http.delete( - '/v1/vpc-router-routes/:route', - handler(handlers['vpcRouterRouteDelete'], schema.VpcRouterRouteDeleteParams, null) - ), - http.get( - '/v1/vpc-routers', - handler(handlers['vpcRouterList'], schema.VpcRouterListParams, null) - ), - http.post( - '/v1/vpc-routers', - handler( - handlers['vpcRouterCreate'], - schema.VpcRouterCreateParams, - schema.VpcRouterCreate - ) - ), - http.get( - '/v1/vpc-routers/:router', - handler(handlers['vpcRouterView'], schema.VpcRouterViewParams, null) - ), - http.put( - '/v1/vpc-routers/:router', - handler( - handlers['vpcRouterUpdate'], - schema.VpcRouterUpdateParams, - schema.VpcRouterUpdate - ) - ), - http.delete( - '/v1/vpc-routers/:router', - handler(handlers['vpcRouterDelete'], schema.VpcRouterDeleteParams, null) - ), http.get( '/v1/vpc-subnets', handler(handlers['vpcSubnetList'], schema.VpcSubnetListParams, null) diff --git a/libs/api/__generated__/validate.ts b/libs/api/__generated__/validate.ts index cc47cfd499..75d7c7190c 100644 --- a/libs/api/__generated__/validate.ts +++ b/libs/api/__generated__/validate.ts @@ -285,7 +285,7 @@ export const BgpImportedRouteIpv4 = z.preprocess( /** * A BGP peer configuration for an interface. Includes the set of announcements that will be advertised to the peer identified by `addr`. The `bgp_config` parameter is a reference to global BGP parameters. The `interface_name` indicates what interface the peer should be contacted on. */ -export const BgpPeerConfig = z.preprocess( +export const BgpPeer = z.preprocess( processResponseBody, z.object({ addr: z.string().ip(), @@ -300,6 +300,11 @@ export const BgpPeerConfig = z.preprocess( }) ) +export const BgpPeerConfig = z.preprocess( + processResponseBody, + z.object({ peers: BgpPeer.array() }) +) + /** * The current state of a BGP peer. */ @@ -844,6 +849,47 @@ export const Histogramdouble = z.preprocess( }) ) +/** + * The type of an individual datum of a metric. + */ +export const DatumType = z.preprocess( + processResponseBody, + z.enum([ + 'bool', + 'i8', + 'u8', + 'i16', + 'u16', + 'i32', + 'u32', + 'i64', + 'u64', + 'f32', + 'f64', + 'string', + 'bytes', + 'cumulative_i64', + 'cumulative_u64', + 'cumulative_f32', + 'cumulative_f64', + 'histogram_i8', + 'histogram_u8', + 'histogram_i16', + 'histogram_u16', + 'histogram_i32', + 'histogram_u32', + 'histogram_i64', + 'histogram_u64', + 'histogram_f32', + 'histogram_f64', + ]) +) + +export const MissingDatum = z.preprocess( + processResponseBody, + z.object({ datumType: DatumType, startTime: z.coerce.date().optional() }) +) + /** * A `Datum` is a single sampled data point from a metric. */ @@ -877,6 +923,7 @@ export const Datum = z.preprocess( z.object({ datum: Histogramuint64, type: z.enum(['histogram_u64']) }), z.object({ datum: Histogramfloat, type: z.enum(['histogram_f32']) }), z.object({ datum: Histogramdouble, type: z.enum(['histogram_f64']) }), + z.object({ datum: MissingDatum, type: z.enum(['missing']) }), ]) ) @@ -1513,6 +1560,7 @@ export const LinkSpeed = z.preprocess( export const LinkConfig = z.preprocess( processResponseBody, z.object({ + autoneg: SafeBoolean, fec: LinkFec, lldp: LldpServiceConfig, mtu: z.number().min(0).max(65535), @@ -1752,97 +1800,6 @@ export const RouteConfig = z.preprocess( z.object({ routes: Route.array() }) ) -/** - * A `RouteDestination` is used to match traffic with a routing rule, on the destination of that traffic. - * - * When traffic is to be sent to a destination that is within a given `RouteDestination`, the corresponding `RouterRoute` applies, and traffic will be forward to the `RouteTarget` for that rule. - */ -export const RouteDestination = z.preprocess( - processResponseBody, - z.union([ - z.object({ type: z.enum(['ip']), value: z.string().ip() }), - z.object({ type: z.enum(['ip_net']), value: IpNet }), - z.object({ type: z.enum(['vpc']), value: Name }), - z.object({ type: z.enum(['subnet']), value: Name }), - ]) -) - -/** - * A `RouteTarget` describes the possible locations that traffic matching a route destination can be sent. - */ -export const RouteTarget = z.preprocess( - processResponseBody, - z.union([ - z.object({ type: z.enum(['ip']), value: z.string().ip() }), - z.object({ type: z.enum(['vpc']), value: Name }), - z.object({ type: z.enum(['subnet']), value: Name }), - z.object({ type: z.enum(['instance']), value: Name }), - z.object({ type: z.enum(['internet_gateway']), value: Name }), - ]) -) - -/** - * The kind of a `RouterRoute` - * - * The kind determines certain attributes such as if the route is modifiable and describes how or where the route was created. - */ -export const RouterRouteKind = z.preprocess( - processResponseBody, - z.enum(['default', 'vpc_subnet', 'vpc_peering', 'custom']) -) - -/** - * A route defines a rule that governs where traffic should be sent based on its destination. - */ -export const RouterRoute = z.preprocess( - processResponseBody, - z.object({ - description: z.string(), - destination: RouteDestination, - id: z.string().uuid(), - kind: RouterRouteKind, - name: Name, - target: RouteTarget, - timeCreated: z.coerce.date(), - timeModified: z.coerce.date(), - vpcRouterId: z.string().uuid(), - }) -) - -/** - * Create-time parameters for a `RouterRoute` - */ -export const RouterRouteCreate = z.preprocess( - processResponseBody, - z.object({ - description: z.string(), - destination: RouteDestination, - name: Name, - target: RouteTarget, - }) -) - -/** - * A single page of results - */ -export const RouterRouteResultsPage = z.preprocess( - processResponseBody, - z.object({ items: RouterRoute.array(), nextPage: z.string().optional() }) -) - -/** - * Updateable properties of a `RouterRoute` - */ -export const RouterRouteUpdate = z.preprocess( - processResponseBody, - z.object({ - description: z.string().optional(), - destination: RouteDestination, - name: Name.optional(), - target: RouteTarget, - }) -) - /** * Identity-related metadata that's included in nearly all public API objects */ @@ -1965,6 +1922,16 @@ export const SiloRolePolicy = z.preprocess( z.object({ roleAssignments: SiloRoleRoleAssignment.array() }) ) +/** + * The provision state of a sled. + * + * This controls whether new resources are going to be provisioned on this sled. + */ +export const SledProvisionState = z.preprocess( + processResponseBody, + z.enum(['provisionable', 'non_provisionable', 'unknown']) +) + /** * An operator's view of a Sled. */ @@ -1973,6 +1940,7 @@ export const Sled = z.preprocess( z.object({ baseboard: Baseboard, id: z.string().uuid(), + provisionState: SledProvisionState, rackId: z.string().uuid(), timeCreated: z.coerce.date(), timeModified: z.coerce.date(), @@ -2009,6 +1977,22 @@ export const SledInstanceResultsPage = z.preprocess( z.object({ items: SledInstance.array(), nextPage: z.string().optional() }) ) +/** + * Parameters for `sled_set_provision_state`. + */ +export const SledProvisionStateParams = z.preprocess( + processResponseBody, + z.object({ state: SledProvisionState }) +) + +/** + * Response to `sled_set_provision_state`. + */ +export const SledProvisionStateResponse = z.preprocess( + processResponseBody, + z.object({ newState: SledProvisionState, oldState: SledProvisionState }) +) + /** * A single page of results */ @@ -2304,6 +2288,18 @@ export const SwitchResultsPage = z.preprocess( z.object({ items: Switch.array(), nextPage: z.string().optional() }) ) +/** + * A sled that has not been added to an initialized rack yet + */ +export const UninitializedSled = z.preprocess( + processResponseBody, + z.object({ + baseboard: Baseboard, + cubby: z.number().min(0).max(65535), + rackId: z.string().uuid(), + }) +) + /** * View of a User */ @@ -2543,48 +2539,6 @@ export const VpcResultsPage = z.preprocess( z.object({ items: Vpc.array(), nextPage: z.string().optional() }) ) -export const VpcRouterKind = z.preprocess(processResponseBody, z.enum(['system', 'custom'])) - -/** - * A VPC router defines a series of rules that indicate where traffic should be sent depending on its destination. - */ -export const VpcRouter = z.preprocess( - processResponseBody, - z.object({ - description: z.string(), - id: z.string().uuid(), - kind: VpcRouterKind, - name: Name, - timeCreated: z.coerce.date(), - timeModified: z.coerce.date(), - vpcId: z.string().uuid(), - }) -) - -/** - * Create-time parameters for a `VpcRouter` - */ -export const VpcRouterCreate = z.preprocess( - processResponseBody, - z.object({ description: z.string(), name: Name }) -) - -/** - * A single page of results - */ -export const VpcRouterResultsPage = z.preprocess( - processResponseBody, - z.object({ items: VpcRouter.array(), nextPage: z.string().optional() }) -) - -/** - * Updateable properties of a `VpcRouter` - */ -export const VpcRouterUpdate = z.preprocess( - processResponseBody, - z.object({ description: z.string().optional(), name: Name.optional() }) -) - /** * A VPC subnet represents a logical grouping for instances that allows network traffic between them, within a IPv4 subnetwork or optionall an IPv6 subnetwork. */ @@ -3521,6 +3475,14 @@ export const SledListParams = z.preprocess( }) ) +export const AddSledToInitializedRackParams = z.preprocess( + processResponseBody, + z.object({ + path: z.object({}), + query: z.object({}), + }) +) + export const SledViewParams = z.preprocess( processResponseBody, z.object({ @@ -3559,6 +3521,16 @@ export const SledInstanceListParams = z.preprocess( }) ) +export const SledSetProvisionStateParams = z.preprocess( + processResponseBody, + z.object({ + path: z.object({ + sledId: z.string().uuid(), + }), + query: z.object({}), + }) +) + export const NetworkingSwitchPortListParams = z.preprocess( processResponseBody, z.object({ @@ -3620,6 +3592,14 @@ export const SwitchViewParams = z.preprocess( }) ) +export const UninitializedSledListParams = z.preprocess( + processResponseBody, + z.object({ + path: z.object({}), + query: z.object({}), + }) +) + export const SiloIdentityProviderListParams = z.preprocess( processResponseBody, z.object({ @@ -4198,139 +4178,6 @@ export const VpcFirewallRulesUpdateParams = z.preprocess( }) ) -export const VpcRouterRouteListParams = z.preprocess( - processResponseBody, - z.object({ - path: z.object({}), - query: z.object({ - limit: z.number().min(1).max(4294967295).optional(), - pageToken: z.string().optional(), - project: NameOrId.optional(), - router: NameOrId.optional(), - sortBy: NameOrIdSortMode.optional(), - vpc: NameOrId.optional(), - }), - }) -) - -export const VpcRouterRouteCreateParams = z.preprocess( - processResponseBody, - z.object({ - path: z.object({}), - query: z.object({ - project: NameOrId.optional(), - router: NameOrId, - vpc: NameOrId.optional(), - }), - }) -) - -export const VpcRouterRouteViewParams = z.preprocess( - processResponseBody, - z.object({ - path: z.object({ - route: NameOrId, - }), - query: z.object({ - project: NameOrId.optional(), - router: NameOrId, - vpc: NameOrId.optional(), - }), - }) -) - -export const VpcRouterRouteUpdateParams = z.preprocess( - processResponseBody, - z.object({ - path: z.object({ - route: NameOrId, - }), - query: z.object({ - project: NameOrId.optional(), - router: NameOrId.optional(), - vpc: NameOrId.optional(), - }), - }) -) - -export const VpcRouterRouteDeleteParams = z.preprocess( - processResponseBody, - z.object({ - path: z.object({ - route: NameOrId, - }), - query: z.object({ - project: NameOrId.optional(), - router: NameOrId.optional(), - vpc: NameOrId.optional(), - }), - }) -) - -export const VpcRouterListParams = z.preprocess( - processResponseBody, - z.object({ - path: z.object({}), - query: z.object({ - limit: z.number().min(1).max(4294967295).optional(), - pageToken: z.string().optional(), - project: NameOrId.optional(), - sortBy: NameOrIdSortMode.optional(), - vpc: NameOrId.optional(), - }), - }) -) - -export const VpcRouterCreateParams = z.preprocess( - processResponseBody, - z.object({ - path: z.object({}), - query: z.object({ - project: NameOrId.optional(), - vpc: NameOrId, - }), - }) -) - -export const VpcRouterViewParams = z.preprocess( - processResponseBody, - z.object({ - path: z.object({ - router: NameOrId, - }), - query: z.object({ - project: NameOrId.optional(), - vpc: NameOrId.optional(), - }), - }) -) - -export const VpcRouterUpdateParams = z.preprocess( - processResponseBody, - z.object({ - path: z.object({ - router: NameOrId, - }), - query: z.object({ - project: NameOrId.optional(), - vpc: NameOrId.optional(), - }), - }) -) - -export const VpcRouterDeleteParams = z.preprocess( - processResponseBody, - z.object({ - path: z.object({ - router: NameOrId, - }), - query: z.object({ - project: NameOrId.optional(), - vpc: NameOrId.optional(), - }), - }) -) - export const VpcSubnetListParams = z.preprocess( processResponseBody, z.object({ diff --git a/libs/api/path-params.ts b/libs/api/path-params.ts index 833baf312a..9f561d1623 100644 --- a/libs/api/path-params.ts +++ b/libs/api/path-params.ts @@ -16,8 +16,6 @@ export type NetworkInterface = Merge export type Snapshot = Merge export type Vpc = Merge export type VpcSubnet = Merge -export type VpcRouter = Merge -export type RouterRoute = Merge export type Silo = { silo?: string } export type IdentityProvider = Merge export type SystemUpdate = { version: string }