Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
2 changes: 1 addition & 1 deletion bin/propolis-server/src/lib/migrate/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@

use serde::{Deserialize, Serialize};

use propolis_api_types_versions::v1::instance::ReplacementComponent;
use propolis_api_types::instance::ReplacementComponent;
use propolis_api_types_versions::{v1, v2, v3, v6};
Comment on lines +91 to 92

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the correct way to refer to these types per RFD 619.


use std::collections::BTreeMap;
Expand Down
12 changes: 6 additions & 6 deletions bin/propolis-server/src/lib/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ pub use nexus_client::Client as NexusClient;
use oximeter::types::ProducerRegistry;
use propolis::attestation::server::AttestationServerConfig;
use propolis_api_types::disk::{
InstanceVCRReplace, SnapshotRequestPathParams, VCRRequestPathParams,
InstanceVcrReplace, SnapshotRequestPathParams, VCRRequestPathParams,
VolumeStatus, VolumeStatusPathParams,
};
use propolis_api_types::instance::{
Expand Down Expand Up @@ -534,7 +534,7 @@ impl PropolisServerApi for PropolisServerImpl {
async fn instance_issue_crucible_snapshot_request(
rqctx: RequestContext<Self::Context>,
path_params: Path<SnapshotRequestPathParams>,
) -> Result<HttpResponseOk<()>, HttpError> {
) -> Result<HttpResponseUpdatedNoContent, HttpError> {
let vm = rqctx
.context()
.vm
Expand All @@ -555,7 +555,7 @@ impl PropolisServerApi for PropolisServerImpl {
HttpError::for_bad_request(Some(e.to_string()), e.to_string())
})?;

Ok(HttpResponseOk(()))
Ok(HttpResponseUpdatedNoContent {})
}

async fn disk_volume_status_v1(
Expand Down Expand Up @@ -617,7 +617,7 @@ impl PropolisServerApi for PropolisServerImpl {
async fn instance_issue_crucible_vcr_request(
rqctx: RequestContext<Self::Context>,
path_params: Path<VCRRequestPathParams>,
request: TypedBody<InstanceVCRReplace>,
request: TypedBody<InstanceVcrReplace>,
) -> Result<HttpResponseOk<crucible_client_types::ReplaceResult>, HttpError>
{
let path_params = path_params.into_inner();
Expand Down Expand Up @@ -663,7 +663,7 @@ impl PropolisServerApi for PropolisServerImpl {

async fn instance_issue_nmi(
rqctx: RequestContext<Self::Context>,
) -> Result<HttpResponseOk<()>, HttpError> {
) -> Result<HttpResponseUpdatedNoContent, HttpError> {
let vm = rqctx
.context()
.vm
Expand All @@ -672,7 +672,7 @@ impl PropolisServerApi for PropolisServerImpl {
.ok_or_else(not_created_error)?;
let _ = vm.objects().lock_shared().await.machine().inject_nmi();

Ok(HttpResponseOk(()))
Ok(HttpResponseUpdatedNoContent {})
}
}

Expand Down
5 changes: 2 additions & 3 deletions bin/propolis-server/src/lib/spec/api_spec_v1.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,15 @@

use std::collections::BTreeMap;

use propolis_api_types::instance::ReplacementComponent;
use propolis_api_types::instance_spec::{
components::{
board::Board as InstanceSpecBoard,
devices::{BootSettings, SerialPort as SerialPortDesc},
},
SpecKey,
};
use propolis_api_types_versions::{
v1, v1::instance::ReplacementComponent, v2, v3, v6,
};
use propolis_api_types_versions::{v1, v2, v3, v6};

#[cfg(feature = "falcon")]
use propolis_api_types::instance_spec::components::devices::SoftNpuPort as SoftNpuPortSpec;
Expand Down
5 changes: 2 additions & 3 deletions bin/propolis-server/src/lib/spec/api_spec_v2.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,9 @@

use std::collections::BTreeMap;

use propolis_api_types::instance::ReplacementComponent;
use propolis_api_types::instance_spec::SpecKey;
use propolis_api_types_versions::{
v1, v1::instance::ReplacementComponent, v2, v3,
};
use propolis_api_types_versions::{v1, v2, v3};

use super::{builder::SpecBuilder, LegacyApiSpecError, Spec};
use crate::migrate::MigrateError;
Expand Down
5 changes: 2 additions & 3 deletions bin/propolis-server/src/lib/spec/api_spec_v3.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,9 @@

use std::collections::BTreeMap;

use propolis_api_types::instance::ReplacementComponent;
use propolis_api_types::instance_spec::SpecKey;
use propolis_api_types_versions::{
v1::instance::ReplacementComponent, v2, v3, v6,
};
use propolis_api_types_versions::{v2, v3, v6};

use super::{api_spec_v6, builder::SpecBuilder, LegacyApiSpecError, Spec};
use crate::migrate::MigrateError;
Expand Down
3 changes: 2 additions & 1 deletion bin/propolis-server/src/lib/spec/api_spec_v6.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@

use std::collections::BTreeMap;

use propolis_api_types::instance::ReplacementComponent;
use propolis_api_types::instance_spec::SpecKey;
use propolis_api_types_versions::{v1::instance::ReplacementComponent, v3, v6};
use propolis_api_types_versions::{v3, v6};

use super::{builder::SpecBuilder, ApiSpecError, Disk, Spec, StorageDevice};
use crate::migrate::MigrateError;
Expand Down
31 changes: 17 additions & 14 deletions crates/propolis-api-types-versions/src/latest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,31 +48,32 @@ pub mod components {
}

pub mod disk {
pub use crate::v1::disk::InstanceVCRReplace;
pub use crate::v1::disk::SnapshotRequestPathParams;
pub use crate::v1::disk::VCRRequestPathParams;
pub use crate::v1::disk::VolumeStatusPathParams;
pub use crate::v5::disk::VolumeStatus;

pub use crate::v7::disk::InstanceVcrReplace;
}

pub mod instance {
pub use crate::v1::instance::ErrorCode;
pub use crate::v1::instance::Instance;
pub use crate::v1::instance::InstanceEnsureResponse;
pub use crate::v1::instance::InstanceGetResponse;
pub use crate::v1::instance::InstanceMetadata;
pub use crate::v1::instance::InstanceNameParams;
pub use crate::v1::instance::InstancePathParams;
pub use crate::v1::instance::InstanceProperties;
pub use crate::v1::instance::InstanceState;
pub use crate::v1::instance::InstanceStateChange;
pub use crate::v1::instance::InstanceStateMonitorRequest;
pub use crate::v1::instance::InstanceStateMonitorResponse;
pub use crate::v1::instance::InstanceStateRequested;
pub use crate::v1::instance::ReplacementComponent;

pub use crate::v6::api::InstanceEnsureRequest;
pub use crate::v6::api::InstanceInitializationMethod;
pub use crate::v7::api::InstanceEnsureRequest;
pub use crate::v7::api::InstanceInitializationMethod;
pub use crate::v7::instance::Instance;
pub use crate::v7::instance::InstanceGetResponse;
pub use crate::v7::instance::InstanceState;
pub use crate::v7::instance::InstanceStateMonitorResponse;
pub use crate::v7::instance::InstanceStateRequested;
pub use crate::v7::instance::ReplacementComponent;
}

pub mod instance_spec {
Expand All @@ -87,17 +88,19 @@ pub mod instance_spec {

pub use crate::v6::instance_spec::Component;
pub use crate::v6::instance_spec::InstanceSpec;
pub use crate::v6::instance_spec::InstanceSpecGetResponse;
pub use crate::v6::instance_spec::InstanceSpecStatus;

pub use crate::v7::instance_spec::InstanceSpecGetResponse;
pub use crate::v7::instance_spec::InstanceSpecStatus;
}

pub mod migration {
pub use crate::v1::migration::InstanceMigrateInitiateRequest;
pub use crate::v1::migration::InstanceMigrateInitiateResponse;
pub use crate::v1::migration::InstanceMigrateStartRequest;
pub use crate::v1::migration::InstanceMigrateStatusResponse;
pub use crate::v1::migration::InstanceMigrationStatus;
pub use crate::v1::migration::MigrationState;

pub use crate::v7::migration::InstanceMigrateStatusResponse;
pub use crate::v7::migration::InstanceMigrationStatus;
pub use crate::v7::migration::MigrationState;
}

pub mod serial {
Expand Down
2 changes: 2 additions & 0 deletions crates/propolis-api-types-versions/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,3 +41,5 @@ pub mod v3;
pub mod v5;
#[path = "nvme_write_cache/mod.rs"]
pub mod v6;
#[path = "openapi_lint/mod.rs"]
pub mod v7;
65 changes: 65 additions & 0 deletions crates/propolis-api-types-versions/src/openapi_lint/api.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
// 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/.

use std::{collections::BTreeMap, net::SocketAddr};

use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use uuid::Uuid;

use super::instance::ReplacementComponent;
use crate::v1::instance::InstanceProperties;
use crate::v1::instance_spec::SpecKey;
use crate::v6;
use crate::v6::instance_spec::InstanceSpec;

#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema)]
#[serde(tag = "method", content = "value", rename_all = "snake_case")]
pub enum InstanceInitializationMethod {
Spec {
spec: InstanceSpec,
},
MigrationTarget {
migration_id: Uuid,
src_addr: SocketAddr,
replace_components: BTreeMap<SpecKey, ReplacementComponent>,
},
}

#[derive(Clone, Debug, Deserialize, Serialize, JsonSchema)]
pub struct InstanceEnsureRequest {
pub properties: InstanceProperties,
pub init: InstanceInitializationMethod,
}

impl From<v6::api::InstanceInitializationMethod>
for InstanceInitializationMethod
{
fn from(old: v6::api::InstanceInitializationMethod) -> Self {
match old {
v6::api::InstanceInitializationMethod::Spec { spec } => {
Self::Spec { spec }
}
v6::api::InstanceInitializationMethod::MigrationTarget {
migration_id,
src_addr,
replace_components,
} => Self::MigrationTarget {
migration_id,
src_addr,
replace_components: replace_components
.into_iter()
.map(|(k, v)| (k, ReplacementComponent::from(v)))
.collect(),
},
}
}
}

impl From<v6::api::InstanceEnsureRequest> for InstanceEnsureRequest {
fn from(old: v6::api::InstanceEnsureRequest) -> Self {
let v6::api::InstanceEnsureRequest { properties, init } = old;
Self { properties, init: init.into() }
}
}
20 changes: 20 additions & 0 deletions crates/propolis-api-types-versions/src/openapi_lint/disk.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// 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/.

use schemars::JsonSchema;
use serde::{Deserialize, Serialize};

use crate::v1;

#[derive(Clone, Deserialize, Serialize, JsonSchema)]
pub struct InstanceVcrReplace {
pub vcr_json: String,
}

impl From<v1::disk::InstanceVCRReplace> for InstanceVcrReplace {
fn from(old: v1::disk::InstanceVCRReplace) -> Self {
let v1::disk::InstanceVCRReplace { vcr_json } = old;
Self { vcr_json }
}
}
Loading
Loading