Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 38 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ members = [
"clients/repo-depot-client",
"clients/sled-agent-client",
"clients/wicketd-client",
"clients/wicketd-commission-client",
"cockroach-admin",
"cockroach-admin/api",
"cockroach-admin/types",
Expand Down Expand Up @@ -184,6 +185,7 @@ members = [
"wicket",
"wicketd",
"wicketd-api",
"wicketd-commission-api",
"wicketd-commission-types",
"wicketd-commission-types/versions",
"workspace-hack",
Expand Down Expand Up @@ -217,6 +219,7 @@ default-members = [
"clients/repo-depot-client",
"clients/sled-agent-client",
"clients/wicketd-client",
"clients/wicketd-commission-client",
"cockroach-admin",
"cockroach-admin/api",
"cockroach-admin/types",
Expand Down Expand Up @@ -378,6 +381,7 @@ default-members = [
"wicket",
"wicketd",
"wicketd-api",
"wicketd-commission-api",
"wicketd-commission-types",
"wicketd-commission-types/versions",
"workspace-hack",
Expand Down Expand Up @@ -895,6 +899,8 @@ wicket = { path = "wicket" }
wicket-common = { path = "wicket-common" }
wicketd-api = { path = "wicketd-api" }
wicketd-client = { path = "clients/wicketd-client" }
wicketd-commission-api = { path = "wicketd-commission-api" }
wicketd-commission-client = { path = "clients/wicketd-commission-client" }
wicketd-commission-types = { path = "wicketd-commission-types" }
wicketd-commission-types-versions = { path = "wicketd-commission-types/versions" }
x509-cert = { version = "0.2.5", default-features = false }
Expand Down
21 changes: 21 additions & 0 deletions clients/wicketd-commission-client/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
[package]
name = "wicketd-commission-client"
version = "0.1.0"
edition.workspace = true
license = "MPL-2.0"

[lints]
workspace = true

[dependencies]
iddqd.workspace = true
omicron-uuid-kinds.workspace = true
oxnet.workspace = true
progenitor.workspace = true
regress.workspace = true
reqwest = { workspace = true, features = ["json", "rustls", "stream"] }
schemars.workspace = true
serde.workspace = true
slog.workspace = true
wicketd-commission-types-versions.workspace = true
omicron-workspace-hack.workspace = true
72 changes: 72 additions & 0 deletions clients/wicketd-commission-client/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
// 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/.

//! Interface for making requests to the wicketd commissioning API.

progenitor::generate_api!(
spec = "../../openapi/wicketd-commission/wicketd-commission-latest.json",
interface = Positional,
inner_type = slog::Logger,
pre_hook = (|log: &slog::Logger, request: &reqwest::Request| {
slog::debug!(log, "client request";
"method" => %request.method(),
"uri" => %request.url(),
"body" => ?&request.body(),
);
}),
post_hook = (|log: &slog::Logger, result: &Result<_, _>| {
slog::debug!(log, "client response"; "result" => ?result);
}),
derives = [schemars::JsonSchema],
crates = {
"iddqd" = "*",
"omicron-uuid-kinds" = "*",
"oxnet" = "0.1.0",
},
replace = {
AllowedSourceIps = wicketd_commission_types_versions::latest::rack_setup::AllowedSourceIps,
BgpAuthKeyId = wicketd_commission_types_versions::latest::rack_setup::BgpAuthKeyId,
BgpConfig = wicketd_commission_types_versions::latest::rack_setup::BgpConfig,
BootstrapSled = wicketd_commission_types_versions::latest::inventory::BootstrapSled,
Caboose = wicketd_commission_types_versions::latest::inventory::Caboose,
CertificateUploadResponse = wicketd_commission_types_versions::latest::rack_setup::CertificateUploadResponse,
ClearUpdateStateParams = wicketd_commission_types_versions::latest::update::ClearUpdateStateParams,
IpRange = wicketd_commission_types_versions::latest::rack_setup::IpRange,
Ipv4Range = wicketd_commission_types_versions::latest::rack_setup::Ipv4Range,
Ipv6Range = wicketd_commission_types_versions::latest::rack_setup::Ipv6Range,
LinkFec = wicketd_commission_types_versions::latest::rack_setup::LinkFec,
LinkSpeed = wicketd_commission_types_versions::latest::rack_setup::LinkSpeed,
LldpAdminStatus = wicketd_commission_types_versions::latest::rack_setup::LldpAdminStatus,
LldpPortConfig = wicketd_commission_types_versions::latest::rack_setup::LldpPortConfig,
LocationInfo = wicketd_commission_types_versions::latest::inventory::LocationInfo,
ManualPortConfig = wicketd_commission_types_versions::latest::rack_setup::ManualPortConfig,
MaxPathConfig = wicketd_commission_types_versions::latest::rack_setup::MaxPathConfig,
PowerState = wicketd_commission_types_versions::latest::inventory::PowerState,
PutRecoveryUserPasswordHash = wicketd_commission_types_versions::latest::rack_setup::PutRecoveryUserPasswordHash,
PutRssUserConfigInsensitive = wicketd_commission_types_versions::latest::rack_setup::PutRssUserConfigInsensitive,
RackOperationStatus = wicketd_commission_types_versions::latest::rack_setup::RackOperationStatus,
RepositoryDescription = wicketd_commission_types_versions::latest::update::RepositoryDescription,
RotInfo = wicketd_commission_types_versions::latest::inventory::RotInfo,
RotSlot = wicketd_commission_types_versions::latest::inventory::RotSlot,
RouteConfig = wicketd_commission_types_versions::latest::rack_setup::RouteConfig,
RouterLifetimeConfig = wicketd_commission_types_versions::latest::rack_setup::RouterLifetimeConfig,
RssStepInfo = wicketd_commission_types_versions::latest::rack_setup::RssStepInfo,
SpIdentifier = wicketd_commission_types_versions::latest::inventory::SpIdentifier,
SpInfo = wicketd_commission_types_versions::latest::inventory::SpInfo,
SpType = wicketd_commission_types_versions::latest::inventory::SpType,
SpUpdateProgress = wicketd_commission_types_versions::latest::update::SpUpdateProgress,
SpUpdateProgressEntry = wicketd_commission_types_versions::latest::update::SpUpdateProgressEntry,
StartUpdateOptions = wicketd_commission_types_versions::latest::update::StartUpdateOptions,
StartUpdateParams = wicketd_commission_types_versions::latest::update::StartUpdateParams,
TxEqConfig = wicketd_commission_types_versions::latest::rack_setup::TxEqConfig,
UserSpecifiedBgpPeerConfig = wicketd_commission_types_versions::latest::rack_setup::UserSpecifiedBgpPeerConfig,
UserSpecifiedImportExportPolicy = wicketd_commission_types_versions::latest::rack_setup::UserSpecifiedImportExportPolicy,
UserSpecifiedPortConfig = wicketd_commission_types_versions::latest::rack_setup::UserSpecifiedPortConfig,
UserSpecifiedRackNetworkConfig = wicketd_commission_types_versions::latest::rack_setup::UserSpecifiedRackNetworkConfig,
UserSpecifiedRouterPeerAddr = wicketd_commission_types_versions::latest::rack_setup::UserSpecifiedRouterPeerAddr,
UserSpecifiedUplinkAddressConfig = wicketd_commission_types_versions::latest::rack_setup::UserSpecifiedUplinkAddressConfig,
},
);

pub type ClientError = crate::Error<crate::types::Error>;
1 change: 1 addition & 0 deletions common/src/address.rs
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,7 @@ pub const DDMD_PORT: u16 = 8000;
pub const MGS_PORT: u16 = 12225;
pub const WICKETD_PORT: u16 = 12226;
pub const BOOTSTRAP_ARTIFACT_PORT: u16 = 12227;
pub const WICKETD_COMMISSION_PORT: u16 = 12233;
pub const CRUCIBLE_PANTRY_PORT: u16 = 17000;
pub const TFPORTD_PORT: u16 = 12231;
pub const NEXUS_INTERNAL_PORT: u16 = 12221;
Expand Down
1 change: 1 addition & 0 deletions dev-tools/dropshot-apis/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ serde.workspace = true
serde_json.workspace = true
sled-agent-api.workspace = true
wicketd-api.workspace = true
wicketd-commission-api.workspace = true

[lints]
workspace = true
17 changes: 17 additions & 0 deletions dev-tools/dropshot-apis/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ use repo_depot_api::*;
use serde::{Deserialize, Serialize};
use sled_agent_api::*;
use wicketd_api::*;
use wicketd_commission_api::*;

fn environment() -> anyhow::Result<Environment> {
// The workspace root is two levels up from this crate's directory.
Expand Down Expand Up @@ -339,6 +340,22 @@ fn all_apis() -> anyhow::Result<ManagedApis> {
api_description: wicketd_api_mod::stub_api_description,
ident: "wicketd",
}),
ManagedApi::from(ManagedApiConfig {
title: "Wicketd Commission API",
versions: Versions::new_versioned(
wicketd_commission_api::supported_versions(),
),
metadata: ManagedApiMetadata {
description: Some(
"Stable API for rack commissioning (RFD 710)",
),
contact_url: Some("https://oxide.computer"),
contact_email: Some("api@oxide.computer"),
extra: to_value(ApiBoundary::External),
},
api_description: wicketd_commission_api_mod::stub_api_description,
ident: "wicketd-commission",
}),
];

let apis = ManagedApis::new(apis)
Expand Down
11 changes: 11 additions & 0 deletions dev-tools/ls-apis/api-manifest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -432,6 +432,17 @@ notes = """
wicketd-client is only used by wicket, which is deployed in a unit with wicketd.
"""

[[apis]]
client_package_name = "wicketd-commission-client"
label = "Wicketd Commission"
server_package_name = "wicketd-commission-api"
versioned_how = "server"
notes = """
Stable rack commissioning API (RFD 710), served by wicketd on its own port. The
production consumer is rkdeploy, which lives outside this workspace and is
not currently modeled by ls-apis.
"""

[[apis]]
client_package_name = "crucible-control-client"
label = "Crucible Control (for testing only)"
Expand Down
1 change: 1 addition & 0 deletions dev-tools/ls-apis/tests/api_check.out
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ Server-managed APIs:
Propolis (propolis-client, exposed by propolis-server)
Sled Agent (sled-agent-client, exposed by omicron-sled-agent)
Wicketd (wicketd-client, exposed by wicketd)
Wicketd Commission (wicketd-commission-client, exposed by wicketd)


Client-managed API:
Expand Down
4 changes: 3 additions & 1 deletion dev-tools/ls-apis/tests/api_dependencies.out
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Bootstrap Agent (client: bootstrap-agent-client)
consumed by: wicketd (omicron/wicketd) via 1 path

Bootstrap Agent Lockstep API (client: bootstrap-agent-lockstep-client)
consumed by: wicketd (omicron/wicketd) via 2 paths
consumed by: wicketd (omicron/wicketd) via 1 path

Clickhouse Cluster Admin for Keepers (client: clickhouse-admin-keeper-client)
consumed by: omicron-nexus (omicron/nexus) via 3 paths
Expand Down Expand Up @@ -108,3 +108,5 @@ Sled Agent (client: sled-agent-client)

Wicketd (client: wicketd-client)

Wicketd Commission (client: wicketd-commission-client)

8 changes: 8 additions & 0 deletions gateway-types/versions/src/impls/ignition.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,14 @@ impl SpIgnition {
Self::Absent => false,
}
}

/// Returns `true` if an SP is present in this slot.
pub fn is_present(&self) -> bool {
match self {
Self::Present { .. } => true,
Self::Absent => false,
}
}
}

impl From<gateway_messages::ignition::SystemType> for SpIgnitionSystemType {
Expand Down
1 change: 1 addition & 0 deletions gateway-types/versions/src/initial/component.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ pub struct SpState {
Copy,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
Serialize,
Expand Down
1 change: 1 addition & 0 deletions gateway-types/versions/src/initial/rot.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ pub enum RotState {
Copy,
PartialEq,
Eq,
Hash,
PartialOrd,
Ord,
Deserialize,
Expand Down
Loading
Loading
You are viewing a condensed version of this merge commit. You can view the full changes here.