Skip to content

Commit a582b52

Browse files
authored
set up API versioning machinery for most internal services (#8789)
Part of #8727 (the easy ones)
1 parent abb5f25 commit a582b52

File tree

42 files changed

+294
-41
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+294
-41
lines changed

Cargo.lock

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

clickhouse-admin/api/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ dropshot.workspace = true
1313
omicron-common.workspace = true
1414
omicron-uuid-kinds.workspace = true
1515
omicron-workspace-hack.workspace = true
16+
openapi-manager-types.workspace = true
1617
schemars.workspace = true
18+
semver.workspace = true
1719
serde.workspace = true

clickhouse-admin/api/src/lib.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,41 @@ use dropshot::{
1313
HttpResponseUpdatedNoContent, Path, Query, RequestContext, TypedBody,
1414
};
1515
use omicron_common::api::external::Generation;
16+
use openapi_manager_types::{
17+
SupportedVersion, SupportedVersions, api_versions,
18+
};
19+
20+
api_versions!([
21+
// NOTE: These versions will be used across **all three** APIs defined in
22+
// this file. When we need to add the next version, consider carefully if
23+
// these APIs should be split into separate modules or crates with their
24+
// own versions.
25+
26+
// WHEN CHANGING THE API (part 1 of 2):
27+
//
28+
// +- Pick a new semver and define it in the list below. The list MUST
29+
// | remain sorted, which generally means that your version should go at
30+
// | the very top.
31+
// |
32+
// | Duplicate this line, uncomment the *second* copy, update that copy for
33+
// | your new API version, and leave the first copy commented out as an
34+
// | example for the next person.
35+
// v
36+
// (next_int, IDENT), // NOTE: read the note at the start of this macro!
37+
(1, INITIAL),
38+
]);
39+
40+
// WHEN CHANGING THE API (part 2 of 2):
41+
//
42+
// The call to `api_versions!` above defines constants of type
43+
// `semver::Version` that you can use in your Dropshot API definition to specify
44+
// the version when a particular endpoint was added or removed. For example, if
45+
// you used:
46+
//
47+
// (2, ADD_FOOBAR)
48+
//
49+
// Then you could use `VERSION_ADD_FOOBAR` as the version in which endpoints
50+
// were added or removed.
1651

1752
/// API interface for our clickhouse-admin-keeper server
1853
///

clickhouse-admin/src/lib.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,12 @@ pub async fn start_server_admin_server(
6868
log.new(slog::o!("component" => "dropshot")),
6969
)
7070
.config(server_config.dropshot)
71+
.version_policy(dropshot::VersionPolicy::Dynamic(Box::new(
72+
dropshot::ClientSpecifiesVersionInHeader::new(
73+
omicron_common::api::VERSION_HEADER,
74+
clickhouse_admin_api::VERSION_INITIAL,
75+
),
76+
)))
7177
.start()
7278
.map_err(StartError::InitializeHttpServer)
7379
}
@@ -105,6 +111,12 @@ pub async fn start_keeper_admin_server(
105111
log.new(slog::o!("component" => "dropshot")),
106112
)
107113
.config(server_config.dropshot)
114+
.version_policy(dropshot::VersionPolicy::Dynamic(Box::new(
115+
dropshot::ClientSpecifiesVersionInHeader::new(
116+
omicron_common::api::VERSION_HEADER,
117+
clickhouse_admin_api::VERSION_INITIAL,
118+
),
119+
)))
108120
.start()
109121
.map_err(StartError::InitializeHttpServer)
110122
}
@@ -142,6 +154,12 @@ pub async fn start_single_admin_server(
142154
log.new(slog::o!("component" => "dropshot")),
143155
)
144156
.config(server_config.dropshot)
157+
.version_policy(dropshot::VersionPolicy::Dynamic(Box::new(
158+
dropshot::ClientSpecifiesVersionInHeader::new(
159+
omicron_common::api::VERSION_HEADER,
160+
clickhouse_admin_api::VERSION_INITIAL,
161+
),
162+
)))
145163
.start()
146164
.map_err(StartError::InitializeHttpServer)
147165
}

clients/clickhouse-admin-keeper-client/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//! running in an omicron zone.
77
88
progenitor::generate_api!(
9-
spec = "../../openapi/clickhouse-admin-keeper.json",
9+
spec = "../../openapi/clickhouse-admin-keeper/clickhouse-admin-keeper-latest.json",
1010
interface = Positional,
1111
inner_type = slog::Logger,
1212
pre_hook = (|log: &slog::Logger, request: &reqwest::Request| {

clients/clickhouse-admin-server-client/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//! running in an omicron zone.
77
88
progenitor::generate_api!(
9-
spec = "../../openapi/clickhouse-admin-server.json",
9+
spec = "../../openapi/clickhouse-admin-server/clickhouse-admin-server-latest.json",
1010
interface = Positional,
1111
inner_type = slog::Logger,
1212
pre_hook = (|log: &slog::Logger, request: &reqwest::Request| {

clients/clickhouse-admin-single-client/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//! ClickHouse database.
77
88
progenitor::generate_api!(
9-
spec = "../../openapi/clickhouse-admin-single.json",
9+
spec = "../../openapi/clickhouse-admin-single/clickhouse-admin-single-latest.json",
1010
interface = Positional,
1111
inner_type = slog::Logger,
1212
pre_hook = (|log: &slog::Logger, request: &reqwest::Request| {

clients/cockroach-admin-client/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
//! Interface for making API requests to an Omicron CockroachDB admin server
66
77
progenitor::generate_api!(
8-
spec = "../../openapi/cockroach-admin.json",
8+
spec = "../../openapi/cockroach-admin/cockroach-admin-latest.json",
99
interface = Positional,
1010
inner_type = slog::Logger,
1111
pre_hook = (|log: &slog::Logger, request: &reqwest::Request| {

clients/ntp-admin-client/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
//! Interface for making API requests to an Omicron NTP admin server
66
77
progenitor::generate_api!(
8-
spec = "../../openapi/ntp-admin.json",
8+
spec = "../../openapi/ntp-admin/ntp-admin-latest.json",
99
interface = Positional,
1010
inner_type = slog::Logger,
1111
pre_hook = (|log: &slog::Logger, request: &reqwest::Request| {

clients/oximeter-client/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
//! Interface for API requests to an Oximeter metric collection server
88
99
progenitor::generate_api!(
10-
spec = "../../openapi/oximeter.json",
10+
spec = "../../openapi/oximeter/oximeter-latest.json",
1111
interface = Positional,
1212
inner_type = slog::Logger,
1313
pre_hook = (|log: &slog::Logger, request: &reqwest::Request| {

0 commit comments

Comments
 (0)