From 54e0792024615aeb09c52383403a69481dbe6a3c Mon Sep 17 00:00:00 2001 From: MasterPtato Date: Wed, 19 Jun 2024 23:20:36 +0000 Subject: [PATCH] feat(clusters): add toggle for prebakes --- .../definition/admin/clusters/__package__.yml | 3 ++ fern/definition/admin/clusters/common.yml | 16 +++++++ .../definition/admin/clusters/datacenters.yml | 14 +++--- fern/definition/admin/clusters/servers.yml | 2 + .../cli/src/commands/cluster/datacenter.rs | 34 +++++++++----- lib/bolt/config/src/ns.rs | 6 +++ lib/convert/src/impls/admin.rs | 21 ++++++++- proto/backend/cluster.proto | 1 + sdks/full/go/admin/clusters/datacenters.go | 9 ++-- sdks/full/go/admin/clusters/types.go | 34 ++++++++++++++ sdks/full/openapi/openapi.yml | 44 ++++++++++++------- sdks/full/openapi_compat/openapi.yml | 44 ++++++++++++------- sdks/full/rust-cli/.openapi-generator/FILES | 2 + sdks/full/rust-cli/README.md | 1 + .../AdminClustersCreateDatacenterRequest.md | 1 + .../rust-cli/docs/AdminClustersPoolUpdate.md | 16 +++++++ .../AdminClustersUpdateDatacenterRequest.md | 8 +--- ...dmin_clusters_create_datacenter_request.rs | 5 ++- .../src/models/admin_clusters_pool_update.rs | 43 ++++++++++++++++++ ...dmin_clusters_update_datacenter_request.rs | 26 +++-------- sdks/full/rust-cli/src/models/mod.rs | 2 + sdks/full/rust/.openapi-generator/FILES | 2 + sdks/full/rust/README.md | 1 + .../AdminClustersCreateDatacenterRequest.md | 1 + .../full/rust/docs/AdminClustersPoolUpdate.md | 16 +++++++ .../AdminClustersUpdateDatacenterRequest.md | 8 +--- ...dmin_clusters_create_datacenter_request.rs | 5 ++- .../src/models/admin_clusters_pool_update.rs | 43 ++++++++++++++++++ ...dmin_clusters_update_datacenter_request.rs | 26 +++-------- sdks/full/rust/src/models/mod.rs | 2 + sdks/full/typescript/archive.tgz | 4 +- .../resources/common/types/index.d.ts | 1 + .../types/CreateDatacenterRequest.d.ts | 1 + .../types/UpdateDatacenterRequest.d.ts | 8 +--- .../resources/common/types/index.d.ts | 1 + .../types/CreateDatacenterRequest.d.ts | 1 + .../types/UpdateDatacenterRequest.d.ts | 8 +--- sdks/runtime/typescript/archive.tgz | 4 +- .../admin/src/route/clusters/datacenters.rs | 25 ++++------- .../20240619221123_prebake_toggle.down.sql | 0 .../20240619221123_prebake_toggle.up.sql | 2 + svc/pkg/cluster/ops/datacenter-get/src/lib.rs | 3 ++ .../ops/datacenter-get/tests/integration.rs | 1 + .../ops/datacenter-list/tests/integration.rs | 1 + .../tests/integration.rs | 1 + .../tests/integration.rs | 1 + .../datacenter-tls-get/tests/integration.rs | 1 + .../ops/server-destroy-with-filter/src/lib.rs | 4 +- .../standalone/default-update/src/lib.rs | 3 ++ .../standalone/gc/tests/integration.rs | 1 + .../cluster/types/msg/datacenter-create.proto | 1 + .../cluster/types/msg/datacenter-update.proto | 1 + .../worker/src/workers/datacenter_create.rs | 4 +- .../worker/src/workers/datacenter_update.rs | 5 ++- .../worker/src/workers/server_provision.rs | 1 + svc/pkg/cluster/worker/tests/common.rs | 1 + .../cluster/worker/tests/datacenter_create.rs | 1 + .../worker/tests/datacenter_tls_issue.rs | 1 + .../cluster/worker/tests/datacenter_update.rs | 2 + svc/pkg/cluster/worker/tests/server_taint.rs | 2 + .../linode/ops/server-provision/src/lib.rs | 10 ++--- svc/pkg/linode/types/server-provision.proto | 1 + .../worker/tests/prebake_install_complete.rs | 1 + .../linode/worker/tests/prebake_provision.rs | 1 + .../ops/list-for-game/tests/integration.rs | 1 + .../ops/resolve-for-game/tests/integration.rs | 1 + 66 files changed, 392 insertions(+), 149 deletions(-) create mode 100644 sdks/full/rust-cli/docs/AdminClustersPoolUpdate.md create mode 100644 sdks/full/rust-cli/src/models/admin_clusters_pool_update.rs create mode 100644 sdks/full/rust/docs/AdminClustersPoolUpdate.md create mode 100644 sdks/full/rust/src/models/admin_clusters_pool_update.rs create mode 100644 svc/pkg/cluster/db/cluster/migrations/20240619221123_prebake_toggle.down.sql create mode 100644 svc/pkg/cluster/db/cluster/migrations/20240619221123_prebake_toggle.up.sql diff --git a/fern/definition/admin/clusters/__package__.yml b/fern/definition/admin/clusters/__package__.yml index 55ac874d5..d589dbbc3 100644 --- a/fern/definition/admin/clusters/__package__.yml +++ b/fern/definition/admin/clusters/__package__.yml @@ -12,6 +12,7 @@ service: method: GET docs: Get clusters response: ListClustersResponse + create: path: "" method: POST @@ -24,10 +25,12 @@ types: ListClustersResponse: properties: clusters: list + CreateClusterRequest: properties: name_id: string owner_team_id: optional + CreateClusterResponse: properties: cluster_id: uuid diff --git a/fern/definition/admin/clusters/common.yml b/fern/definition/admin/clusters/common.yml index 9d3bdae93..b879f6e39 100644 --- a/fern/definition/admin/clusters/common.yml +++ b/fern/definition/admin/clusters/common.yml @@ -6,13 +6,16 @@ types: - job - gg - ats + Provider: enum: - linode + BuildDeliveryMethod: enum: - traffic_server - s3_direct + Pool: properties: pool_type: PoolType @@ -21,15 +24,18 @@ types: min_count: integer max_count: integer drain_timeout: long + Hardware: properties: provider_hardware: string + Cluster: properties: cluster_id: uuid name_id: string create_ts: long owner_team_id: optional + Datacenter: properties: datacenter_id: uuid @@ -41,7 +47,17 @@ types: provider_api_token: optional pools: list build_delivery_method: BuildDeliveryMethod + Server: properties: server_id: uuid public_ip: string + + PoolUpdate: + properties: + pool_type: PoolType + hardware: list + desired_count: optional + min_count: optional + max_count: optional + drain_timeout: optional diff --git a/fern/definition/admin/clusters/datacenters.yml b/fern/definition/admin/clusters/datacenters.yml index bfaa687c3..bdfaec488 100644 --- a/fern/definition/admin/clusters/datacenters.yml +++ b/fern/definition/admin/clusters/datacenters.yml @@ -15,12 +15,14 @@ service: method: GET docs: Get datacenters of a cluster response: ListDatacentersResponse + create: path: "" method: POST request: body: CreateDatacenterRequest response: CreateDatacenterResponse + update: path: /{datacenter_id} path-parameters: @@ -34,6 +36,7 @@ types: ListDatacentersResponse: properties: datacenters: list + CreateDatacenterRequest: properties: display_name: string @@ -41,14 +44,13 @@ types: provider: localCommons.Provider provider_datacenter_id: string build_delivery_method: localCommons.BuildDeliveryMethod + prebakes_enabled: boolean + CreateDatacenterResponse: properties: datacenter_id: uuid + UpdateDatacenterRequest: properties: - pool_type: localCommons.PoolType - hardware: list - desired_count: optional - min_count: optional - max_count: optional - drain_timeout: optional + pools: list + prebakes_enabled: optional diff --git a/fern/definition/admin/clusters/servers.yml b/fern/definition/admin/clusters/servers.yml index 09f283293..d05ca808a 100644 --- a/fern/definition/admin/clusters/servers.yml +++ b/fern/definition/admin/clusters/servers.yml @@ -21,6 +21,7 @@ service: pool: optional public_ip: optional response: ListServersResponse + taint: path: /taint method: POST @@ -31,6 +32,7 @@ service: datacenter: optional pool: optional public_ip: optional + destroy: path: /destroy method: POST diff --git a/lib/bolt/cli/src/commands/cluster/datacenter.rs b/lib/bolt/cli/src/commands/cluster/datacenter.rs index 457a31c5d..a28989612 100644 --- a/lib/bolt/cli/src/commands/cluster/datacenter.rs +++ b/lib/bolt/cli/src/commands/cluster/datacenter.rs @@ -76,6 +76,9 @@ pub enum SubCommand { /// The build delivery method #[clap(long)] build_delivery_method: DatacenterBuildDeliveryMethod, + /// Whether or not prebakes are enabled + #[clap(long)] + prebakes_enabled: bool, }, /// Lists all datacenters of a cluster List { @@ -109,6 +112,9 @@ pub enum SubCommand { /// The drain timeout #[clap(long)] drain_timeout: Option, + /// Whether or not prebakes are enabled + #[clap(long)] + prebakes_enabled: Option, }, } @@ -128,6 +134,7 @@ impl SubCommand { provider, provider_datacenter_id, build_delivery_method, + prebakes_enabled, } => { ensure!( ctx.ns().rivet.provisioning.is_some(), @@ -155,6 +162,7 @@ impl SubCommand { provider: provider.into(), provider_datacenter_id, build_delivery_method: build_delivery_method.into(), + prebakes_enabled, }, ) .await?; @@ -198,6 +206,7 @@ impl SubCommand { min_count, max_count, drain_timeout, + prebakes_enabled, } => { let clusters = admin_clusters_api::admin_clusters_list(&ctx.openapi_config_cloud().await?) @@ -230,17 +239,20 @@ impl SubCommand { &cluster.cluster_id.to_string(), &datacenter.datacenter_id.to_string(), models::AdminClustersUpdateDatacenterRequest { - desired_count, - drain_timeout, - hardware: hardware - .iter() - .map(|hardware| models::AdminClustersHardware { - provider_hardware: hardware.clone(), - }) - .collect(), - min_count, - max_count, - pool_type: pool.into(), + pools: vec![models::AdminClustersPoolUpdate { + desired_count, + drain_timeout, + hardware: hardware + .iter() + .map(|hardware| models::AdminClustersHardware { + provider_hardware: hardware.clone(), + }) + .collect(), + min_count, + max_count, + pool_type: pool.into(), + }], + prebakes_enabled, }, ) .await?; diff --git a/lib/bolt/config/src/ns.rs b/lib/bolt/config/src/ns.rs index 66a870681..326e6e9a4 100644 --- a/lib/bolt/config/src/ns.rs +++ b/lib/bolt/config/src/ns.rs @@ -645,6 +645,8 @@ pub struct ProvisioningDatacenter { pub provider_datacenter_name: String, #[serde(default)] pub build_delivery_method: ProvisioningBuildDeliveryMethod, + #[serde(default = "default_prebakes_enabled")] + pub prebakes_enabled: bool, #[serde(default)] pub pools: HashMap, } @@ -774,6 +776,10 @@ fn default_job_server_provision_margin() -> u32 { 2 } +fn default_prebakes_enabled() -> bool { + true +} + // Used for parsing from 1password #[derive(Deserialize, Debug)] pub struct PartialNamespace { diff --git a/lib/convert/src/impls/admin.rs b/lib/convert/src/impls/admin.rs index 6598bd6bc..fd911158d 100644 --- a/lib/convert/src/impls/admin.rs +++ b/lib/convert/src/impls/admin.rs @@ -1,4 +1,4 @@ -use proto::backend; +use proto::backend::{self, pkg::*}; use rivet_api::models; use rivet_operation::prelude::*; @@ -121,3 +121,22 @@ impl ApiTryFrom for models::AdminClustersDatacente }) } } + +impl ApiFrom for cluster::msg::datacenter_update::PoolUpdate { + fn api_from(value: models::AdminClustersPoolUpdate) -> cluster::msg::datacenter_update::PoolUpdate { + cluster::msg::datacenter_update::PoolUpdate { + pool_type: ApiInto::::api_into(value.pool_type) as i32, + hardware: value + .hardware + .iter() + .map(|h| backend::cluster::Hardware { + provider_hardware: h.provider_hardware.clone(), + }) + .collect(), + desired_count: value.desired_count.map(|c| c as u32), + min_count: value.min_count.map(|c| c as u32), + max_count: value.max_count.map(|c| c as u32), + drain_timeout: value.drain_timeout.map(|d| d as u64), + } + } +} \ No newline at end of file diff --git a/proto/backend/cluster.proto b/proto/backend/cluster.proto index 84bbd11c7..8c901f555 100644 --- a/proto/backend/cluster.proto +++ b/proto/backend/cluster.proto @@ -30,6 +30,7 @@ message Datacenter { repeated Pool pools = 8; BuildDeliveryMethod build_delivery_method = 9; + bool prebakes_enabled = 12; } message Pool { diff --git a/sdks/full/go/admin/clusters/datacenters.go b/sdks/full/go/admin/clusters/datacenters.go index 5215c46d2..e8c1c6a97 100644 --- a/sdks/full/go/admin/clusters/datacenters.go +++ b/sdks/full/go/admin/clusters/datacenters.go @@ -15,6 +15,7 @@ type CreateDatacenterRequest struct { Provider Provider `json:"provider,omitempty"` ProviderDatacenterId string `json:"provider_datacenter_id"` BuildDeliveryMethod BuildDeliveryMethod `json:"build_delivery_method,omitempty"` + PrebakesEnabled bool `json:"prebakes_enabled"` _rawJSON json.RawMessage } @@ -101,12 +102,8 @@ func (l *ListDatacentersResponse) String() string { } type UpdateDatacenterRequest struct { - PoolType PoolType `json:"pool_type,omitempty"` - Hardware []*Hardware `json:"hardware,omitempty"` - DesiredCount *int `json:"desired_count,omitempty"` - MinCount *int `json:"min_count,omitempty"` - MaxCount *int `json:"max_count,omitempty"` - DrainTimeout *int64 `json:"drain_timeout,omitempty"` + Pools []*PoolUpdate `json:"pools,omitempty"` + PrebakesEnabled *bool `json:"prebakes_enabled,omitempty"` _rawJSON json.RawMessage } diff --git a/sdks/full/go/admin/clusters/types.go b/sdks/full/go/admin/clusters/types.go index 37e85c883..af67373ea 100644 --- a/sdks/full/go/admin/clusters/types.go +++ b/sdks/full/go/admin/clusters/types.go @@ -163,6 +163,40 @@ func (p *Pool) String() string { return fmt.Sprintf("%#v", p) } +type PoolUpdate struct { + PoolType PoolType `json:"pool_type,omitempty"` + Hardware []*Hardware `json:"hardware,omitempty"` + DesiredCount *int `json:"desired_count,omitempty"` + MinCount *int `json:"min_count,omitempty"` + MaxCount *int `json:"max_count,omitempty"` + DrainTimeout *int64 `json:"drain_timeout,omitempty"` + + _rawJSON json.RawMessage +} + +func (p *PoolUpdate) UnmarshalJSON(data []byte) error { + type unmarshaler PoolUpdate + var value unmarshaler + if err := json.Unmarshal(data, &value); err != nil { + return err + } + *p = PoolUpdate(value) + p._rawJSON = json.RawMessage(data) + return nil +} + +func (p *PoolUpdate) String() string { + if len(p._rawJSON) > 0 { + if value, err := core.StringifyJSON(p._rawJSON); err == nil { + return value + } + } + if value, err := core.StringifyJSON(p); err == nil { + return value + } + return fmt.Sprintf("%#v", p) +} + type Provider string const ( diff --git a/sdks/full/openapi/openapi.yml b/sdks/full/openapi/openapi.yml index ffb9aa91b..90495ff22 100644 --- a/sdks/full/openapi/openapi.yml +++ b/sdks/full/openapi/openapi.yml @@ -10085,6 +10085,27 @@ components: required: - server_id - public_ip + AdminClustersPoolUpdate: + type: object + properties: + pool_type: + $ref: '#/components/schemas/AdminClustersPoolType' + hardware: + type: array + items: + $ref: '#/components/schemas/AdminClustersHardware' + desired_count: + type: integer + min_count: + type: integer + max_count: + type: integer + drain_timeout: + type: integer + format: int64 + required: + - pool_type + - hardware AdminClustersListDatacentersResponse: type: object properties: @@ -10107,12 +10128,15 @@ components: type: string build_delivery_method: $ref: '#/components/schemas/AdminClustersBuildDeliveryMethod' + prebakes_enabled: + type: boolean required: - display_name - name_id - provider - provider_datacenter_id - build_delivery_method + - prebakes_enabled AdminClustersCreateDatacenterResponse: type: object properties: @@ -10124,24 +10148,14 @@ components: AdminClustersUpdateDatacenterRequest: type: object properties: - pool_type: - $ref: '#/components/schemas/AdminClustersPoolType' - hardware: + pools: type: array items: - $ref: '#/components/schemas/AdminClustersHardware' - desired_count: - type: integer - min_count: - type: integer - max_count: - type: integer - drain_timeout: - type: integer - format: int64 + $ref: '#/components/schemas/AdminClustersPoolUpdate' + prebakes_enabled: + type: boolean required: - - pool_type - - hardware + - pools AdminClustersListServersResponse: type: object properties: diff --git a/sdks/full/openapi_compat/openapi.yml b/sdks/full/openapi_compat/openapi.yml index e1f27e389..4534bbfa2 100644 --- a/sdks/full/openapi_compat/openapi.yml +++ b/sdks/full/openapi_compat/openapi.yml @@ -51,6 +51,8 @@ components: type: string name_id: type: string + prebakes_enabled: + type: boolean provider: $ref: '#/components/schemas/AdminClustersProvider' provider_datacenter_id: @@ -61,6 +63,7 @@ components: - provider - provider_datacenter_id - build_delivery_method + - prebakes_enabled type: object AdminClustersCreateDatacenterResponse: properties: @@ -169,6 +172,27 @@ components: - gg - ats type: string + AdminClustersPoolUpdate: + properties: + desired_count: + type: integer + drain_timeout: + format: int64 + type: integer + hardware: + items: + $ref: '#/components/schemas/AdminClustersHardware' + type: array + max_count: + type: integer + min_count: + type: integer + pool_type: + $ref: '#/components/schemas/AdminClustersPoolType' + required: + - pool_type + - hardware + type: object AdminClustersProvider: enum: - linode @@ -186,24 +210,14 @@ components: type: object AdminClustersUpdateDatacenterRequest: properties: - desired_count: - type: integer - drain_timeout: - format: int64 - type: integer - hardware: + pools: items: - $ref: '#/components/schemas/AdminClustersHardware' + $ref: '#/components/schemas/AdminClustersPoolUpdate' type: array - max_count: - type: integer - min_count: - type: integer - pool_type: - $ref: '#/components/schemas/AdminClustersPoolType' + prebakes_enabled: + type: boolean required: - - pool_type - - hardware + - pools type: object AdminLoginRequest: properties: diff --git a/sdks/full/rust-cli/.openapi-generator/FILES b/sdks/full/rust-cli/.openapi-generator/FILES index fa802f51f..dda235bb7 100644 --- a/sdks/full/rust-cli/.openapi-generator/FILES +++ b/sdks/full/rust-cli/.openapi-generator/FILES @@ -19,6 +19,7 @@ docs/AdminClustersListDatacentersResponse.md docs/AdminClustersListServersResponse.md docs/AdminClustersPool.md docs/AdminClustersPoolType.md +docs/AdminClustersPoolUpdate.md docs/AdminClustersProvider.md docs/AdminClustersServer.md docs/AdminClustersServersApi.md @@ -404,6 +405,7 @@ src/models/admin_clusters_list_datacenters_response.rs src/models/admin_clusters_list_servers_response.rs src/models/admin_clusters_pool.rs src/models/admin_clusters_pool_type.rs +src/models/admin_clusters_pool_update.rs src/models/admin_clusters_provider.rs src/models/admin_clusters_server.rs src/models/admin_clusters_update_datacenter_request.rs diff --git a/sdks/full/rust-cli/README.md b/sdks/full/rust-cli/README.md index 794695035..c7806fcdf 100644 --- a/sdks/full/rust-cli/README.md +++ b/sdks/full/rust-cli/README.md @@ -183,6 +183,7 @@ Class | Method | HTTP request | Description - [AdminClustersListServersResponse](docs/AdminClustersListServersResponse.md) - [AdminClustersPool](docs/AdminClustersPool.md) - [AdminClustersPoolType](docs/AdminClustersPoolType.md) + - [AdminClustersPoolUpdate](docs/AdminClustersPoolUpdate.md) - [AdminClustersProvider](docs/AdminClustersProvider.md) - [AdminClustersServer](docs/AdminClustersServer.md) - [AdminClustersUpdateDatacenterRequest](docs/AdminClustersUpdateDatacenterRequest.md) diff --git a/sdks/full/rust-cli/docs/AdminClustersCreateDatacenterRequest.md b/sdks/full/rust-cli/docs/AdminClustersCreateDatacenterRequest.md index 0b33f6a93..68a4a4428 100644 --- a/sdks/full/rust-cli/docs/AdminClustersCreateDatacenterRequest.md +++ b/sdks/full/rust-cli/docs/AdminClustersCreateDatacenterRequest.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **build_delivery_method** | [**crate::models::AdminClustersBuildDeliveryMethod**](AdminClustersBuildDeliveryMethod.md) | | **display_name** | **String** | | **name_id** | **String** | | +**prebakes_enabled** | **bool** | | **provider** | [**crate::models::AdminClustersProvider**](AdminClustersProvider.md) | | **provider_datacenter_id** | **String** | | diff --git a/sdks/full/rust-cli/docs/AdminClustersPoolUpdate.md b/sdks/full/rust-cli/docs/AdminClustersPoolUpdate.md new file mode 100644 index 000000000..20ac98882 --- /dev/null +++ b/sdks/full/rust-cli/docs/AdminClustersPoolUpdate.md @@ -0,0 +1,16 @@ +# AdminClustersPoolUpdate + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**desired_count** | Option<**i32**> | | [optional] +**drain_timeout** | Option<**i64**> | | [optional] +**hardware** | [**Vec**](AdminClustersHardware.md) | | +**max_count** | Option<**i32**> | | [optional] +**min_count** | Option<**i32**> | | [optional] +**pool_type** | [**crate::models::AdminClustersPoolType**](AdminClustersPoolType.md) | | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sdks/full/rust-cli/docs/AdminClustersUpdateDatacenterRequest.md b/sdks/full/rust-cli/docs/AdminClustersUpdateDatacenterRequest.md index 7e05f0a82..8709d3d16 100644 --- a/sdks/full/rust-cli/docs/AdminClustersUpdateDatacenterRequest.md +++ b/sdks/full/rust-cli/docs/AdminClustersUpdateDatacenterRequest.md @@ -4,12 +4,8 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**desired_count** | Option<**i32**> | | [optional] -**drain_timeout** | Option<**i64**> | | [optional] -**hardware** | [**Vec**](AdminClustersHardware.md) | | -**max_count** | Option<**i32**> | | [optional] -**min_count** | Option<**i32**> | | [optional] -**pool_type** | [**crate::models::AdminClustersPoolType**](AdminClustersPoolType.md) | | +**pools** | [**Vec**](AdminClustersPoolUpdate.md) | | +**prebakes_enabled** | Option<**bool**> | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/sdks/full/rust-cli/src/models/admin_clusters_create_datacenter_request.rs b/sdks/full/rust-cli/src/models/admin_clusters_create_datacenter_request.rs index c539d1ffc..4c284fd22 100644 --- a/sdks/full/rust-cli/src/models/admin_clusters_create_datacenter_request.rs +++ b/sdks/full/rust-cli/src/models/admin_clusters_create_datacenter_request.rs @@ -19,6 +19,8 @@ pub struct AdminClustersCreateDatacenterRequest { pub display_name: String, #[serde(rename = "name_id")] pub name_id: String, + #[serde(rename = "prebakes_enabled")] + pub prebakes_enabled: bool, #[serde(rename = "provider")] pub provider: crate::models::AdminClustersProvider, #[serde(rename = "provider_datacenter_id")] @@ -26,11 +28,12 @@ pub struct AdminClustersCreateDatacenterRequest { } impl AdminClustersCreateDatacenterRequest { - pub fn new(build_delivery_method: crate::models::AdminClustersBuildDeliveryMethod, display_name: String, name_id: String, provider: crate::models::AdminClustersProvider, provider_datacenter_id: String) -> AdminClustersCreateDatacenterRequest { + pub fn new(build_delivery_method: crate::models::AdminClustersBuildDeliveryMethod, display_name: String, name_id: String, prebakes_enabled: bool, provider: crate::models::AdminClustersProvider, provider_datacenter_id: String) -> AdminClustersCreateDatacenterRequest { AdminClustersCreateDatacenterRequest { build_delivery_method, display_name, name_id, + prebakes_enabled, provider, provider_datacenter_id, } diff --git a/sdks/full/rust-cli/src/models/admin_clusters_pool_update.rs b/sdks/full/rust-cli/src/models/admin_clusters_pool_update.rs new file mode 100644 index 000000000..21aad9a46 --- /dev/null +++ b/sdks/full/rust-cli/src/models/admin_clusters_pool_update.rs @@ -0,0 +1,43 @@ +/* + * Rivet API + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * + * Generated by: https://openapi-generator.tech + */ + + + + +#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +pub struct AdminClustersPoolUpdate { + #[serde(rename = "desired_count", skip_serializing_if = "Option::is_none")] + pub desired_count: Option, + #[serde(rename = "drain_timeout", skip_serializing_if = "Option::is_none")] + pub drain_timeout: Option, + #[serde(rename = "hardware")] + pub hardware: Vec, + #[serde(rename = "max_count", skip_serializing_if = "Option::is_none")] + pub max_count: Option, + #[serde(rename = "min_count", skip_serializing_if = "Option::is_none")] + pub min_count: Option, + #[serde(rename = "pool_type")] + pub pool_type: crate::models::AdminClustersPoolType, +} + +impl AdminClustersPoolUpdate { + pub fn new(hardware: Vec, pool_type: crate::models::AdminClustersPoolType) -> AdminClustersPoolUpdate { + AdminClustersPoolUpdate { + desired_count: None, + drain_timeout: None, + hardware, + max_count: None, + min_count: None, + pool_type, + } + } +} + + diff --git a/sdks/full/rust-cli/src/models/admin_clusters_update_datacenter_request.rs b/sdks/full/rust-cli/src/models/admin_clusters_update_datacenter_request.rs index 3fabb783b..a5f705648 100644 --- a/sdks/full/rust-cli/src/models/admin_clusters_update_datacenter_request.rs +++ b/sdks/full/rust-cli/src/models/admin_clusters_update_datacenter_request.rs @@ -13,29 +13,17 @@ #[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] pub struct AdminClustersUpdateDatacenterRequest { - #[serde(rename = "desired_count", skip_serializing_if = "Option::is_none")] - pub desired_count: Option, - #[serde(rename = "drain_timeout", skip_serializing_if = "Option::is_none")] - pub drain_timeout: Option, - #[serde(rename = "hardware")] - pub hardware: Vec, - #[serde(rename = "max_count", skip_serializing_if = "Option::is_none")] - pub max_count: Option, - #[serde(rename = "min_count", skip_serializing_if = "Option::is_none")] - pub min_count: Option, - #[serde(rename = "pool_type")] - pub pool_type: crate::models::AdminClustersPoolType, + #[serde(rename = "pools")] + pub pools: Vec, + #[serde(rename = "prebakes_enabled", skip_serializing_if = "Option::is_none")] + pub prebakes_enabled: Option, } impl AdminClustersUpdateDatacenterRequest { - pub fn new(hardware: Vec, pool_type: crate::models::AdminClustersPoolType) -> AdminClustersUpdateDatacenterRequest { + pub fn new(pools: Vec) -> AdminClustersUpdateDatacenterRequest { AdminClustersUpdateDatacenterRequest { - desired_count: None, - drain_timeout: None, - hardware, - max_count: None, - min_count: None, - pool_type, + pools, + prebakes_enabled: None, } } } diff --git a/sdks/full/rust-cli/src/models/mod.rs b/sdks/full/rust-cli/src/models/mod.rs index c85cc29c9..cca9c150d 100644 --- a/sdks/full/rust-cli/src/models/mod.rs +++ b/sdks/full/rust-cli/src/models/mod.rs @@ -24,6 +24,8 @@ pub mod admin_clusters_pool; pub use self::admin_clusters_pool::AdminClustersPool; pub mod admin_clusters_pool_type; pub use self::admin_clusters_pool_type::AdminClustersPoolType; +pub mod admin_clusters_pool_update; +pub use self::admin_clusters_pool_update::AdminClustersPoolUpdate; pub mod admin_clusters_provider; pub use self::admin_clusters_provider::AdminClustersProvider; pub mod admin_clusters_server; diff --git a/sdks/full/rust/.openapi-generator/FILES b/sdks/full/rust/.openapi-generator/FILES index fa802f51f..dda235bb7 100644 --- a/sdks/full/rust/.openapi-generator/FILES +++ b/sdks/full/rust/.openapi-generator/FILES @@ -19,6 +19,7 @@ docs/AdminClustersListDatacentersResponse.md docs/AdminClustersListServersResponse.md docs/AdminClustersPool.md docs/AdminClustersPoolType.md +docs/AdminClustersPoolUpdate.md docs/AdminClustersProvider.md docs/AdminClustersServer.md docs/AdminClustersServersApi.md @@ -404,6 +405,7 @@ src/models/admin_clusters_list_datacenters_response.rs src/models/admin_clusters_list_servers_response.rs src/models/admin_clusters_pool.rs src/models/admin_clusters_pool_type.rs +src/models/admin_clusters_pool_update.rs src/models/admin_clusters_provider.rs src/models/admin_clusters_server.rs src/models/admin_clusters_update_datacenter_request.rs diff --git a/sdks/full/rust/README.md b/sdks/full/rust/README.md index 794695035..c7806fcdf 100644 --- a/sdks/full/rust/README.md +++ b/sdks/full/rust/README.md @@ -183,6 +183,7 @@ Class | Method | HTTP request | Description - [AdminClustersListServersResponse](docs/AdminClustersListServersResponse.md) - [AdminClustersPool](docs/AdminClustersPool.md) - [AdminClustersPoolType](docs/AdminClustersPoolType.md) + - [AdminClustersPoolUpdate](docs/AdminClustersPoolUpdate.md) - [AdminClustersProvider](docs/AdminClustersProvider.md) - [AdminClustersServer](docs/AdminClustersServer.md) - [AdminClustersUpdateDatacenterRequest](docs/AdminClustersUpdateDatacenterRequest.md) diff --git a/sdks/full/rust/docs/AdminClustersCreateDatacenterRequest.md b/sdks/full/rust/docs/AdminClustersCreateDatacenterRequest.md index 0b33f6a93..68a4a4428 100644 --- a/sdks/full/rust/docs/AdminClustersCreateDatacenterRequest.md +++ b/sdks/full/rust/docs/AdminClustersCreateDatacenterRequest.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **build_delivery_method** | [**crate::models::AdminClustersBuildDeliveryMethod**](AdminClustersBuildDeliveryMethod.md) | | **display_name** | **String** | | **name_id** | **String** | | +**prebakes_enabled** | **bool** | | **provider** | [**crate::models::AdminClustersProvider**](AdminClustersProvider.md) | | **provider_datacenter_id** | **String** | | diff --git a/sdks/full/rust/docs/AdminClustersPoolUpdate.md b/sdks/full/rust/docs/AdminClustersPoolUpdate.md new file mode 100644 index 000000000..20ac98882 --- /dev/null +++ b/sdks/full/rust/docs/AdminClustersPoolUpdate.md @@ -0,0 +1,16 @@ +# AdminClustersPoolUpdate + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**desired_count** | Option<**i32**> | | [optional] +**drain_timeout** | Option<**i64**> | | [optional] +**hardware** | [**Vec**](AdminClustersHardware.md) | | +**max_count** | Option<**i32**> | | [optional] +**min_count** | Option<**i32**> | | [optional] +**pool_type** | [**crate::models::AdminClustersPoolType**](AdminClustersPoolType.md) | | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/sdks/full/rust/docs/AdminClustersUpdateDatacenterRequest.md b/sdks/full/rust/docs/AdminClustersUpdateDatacenterRequest.md index 7e05f0a82..8709d3d16 100644 --- a/sdks/full/rust/docs/AdminClustersUpdateDatacenterRequest.md +++ b/sdks/full/rust/docs/AdminClustersUpdateDatacenterRequest.md @@ -4,12 +4,8 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**desired_count** | Option<**i32**> | | [optional] -**drain_timeout** | Option<**i64**> | | [optional] -**hardware** | [**Vec**](AdminClustersHardware.md) | | -**max_count** | Option<**i32**> | | [optional] -**min_count** | Option<**i32**> | | [optional] -**pool_type** | [**crate::models::AdminClustersPoolType**](AdminClustersPoolType.md) | | +**pools** | [**Vec**](AdminClustersPoolUpdate.md) | | +**prebakes_enabled** | Option<**bool**> | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/sdks/full/rust/src/models/admin_clusters_create_datacenter_request.rs b/sdks/full/rust/src/models/admin_clusters_create_datacenter_request.rs index c539d1ffc..4c284fd22 100644 --- a/sdks/full/rust/src/models/admin_clusters_create_datacenter_request.rs +++ b/sdks/full/rust/src/models/admin_clusters_create_datacenter_request.rs @@ -19,6 +19,8 @@ pub struct AdminClustersCreateDatacenterRequest { pub display_name: String, #[serde(rename = "name_id")] pub name_id: String, + #[serde(rename = "prebakes_enabled")] + pub prebakes_enabled: bool, #[serde(rename = "provider")] pub provider: crate::models::AdminClustersProvider, #[serde(rename = "provider_datacenter_id")] @@ -26,11 +28,12 @@ pub struct AdminClustersCreateDatacenterRequest { } impl AdminClustersCreateDatacenterRequest { - pub fn new(build_delivery_method: crate::models::AdminClustersBuildDeliveryMethod, display_name: String, name_id: String, provider: crate::models::AdminClustersProvider, provider_datacenter_id: String) -> AdminClustersCreateDatacenterRequest { + pub fn new(build_delivery_method: crate::models::AdminClustersBuildDeliveryMethod, display_name: String, name_id: String, prebakes_enabled: bool, provider: crate::models::AdminClustersProvider, provider_datacenter_id: String) -> AdminClustersCreateDatacenterRequest { AdminClustersCreateDatacenterRequest { build_delivery_method, display_name, name_id, + prebakes_enabled, provider, provider_datacenter_id, } diff --git a/sdks/full/rust/src/models/admin_clusters_pool_update.rs b/sdks/full/rust/src/models/admin_clusters_pool_update.rs new file mode 100644 index 000000000..21aad9a46 --- /dev/null +++ b/sdks/full/rust/src/models/admin_clusters_pool_update.rs @@ -0,0 +1,43 @@ +/* + * Rivet API + * + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: 0.0.1 + * + * Generated by: https://openapi-generator.tech + */ + + + + +#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] +pub struct AdminClustersPoolUpdate { + #[serde(rename = "desired_count", skip_serializing_if = "Option::is_none")] + pub desired_count: Option, + #[serde(rename = "drain_timeout", skip_serializing_if = "Option::is_none")] + pub drain_timeout: Option, + #[serde(rename = "hardware")] + pub hardware: Vec, + #[serde(rename = "max_count", skip_serializing_if = "Option::is_none")] + pub max_count: Option, + #[serde(rename = "min_count", skip_serializing_if = "Option::is_none")] + pub min_count: Option, + #[serde(rename = "pool_type")] + pub pool_type: crate::models::AdminClustersPoolType, +} + +impl AdminClustersPoolUpdate { + pub fn new(hardware: Vec, pool_type: crate::models::AdminClustersPoolType) -> AdminClustersPoolUpdate { + AdminClustersPoolUpdate { + desired_count: None, + drain_timeout: None, + hardware, + max_count: None, + min_count: None, + pool_type, + } + } +} + + diff --git a/sdks/full/rust/src/models/admin_clusters_update_datacenter_request.rs b/sdks/full/rust/src/models/admin_clusters_update_datacenter_request.rs index 3fabb783b..a5f705648 100644 --- a/sdks/full/rust/src/models/admin_clusters_update_datacenter_request.rs +++ b/sdks/full/rust/src/models/admin_clusters_update_datacenter_request.rs @@ -13,29 +13,17 @@ #[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)] pub struct AdminClustersUpdateDatacenterRequest { - #[serde(rename = "desired_count", skip_serializing_if = "Option::is_none")] - pub desired_count: Option, - #[serde(rename = "drain_timeout", skip_serializing_if = "Option::is_none")] - pub drain_timeout: Option, - #[serde(rename = "hardware")] - pub hardware: Vec, - #[serde(rename = "max_count", skip_serializing_if = "Option::is_none")] - pub max_count: Option, - #[serde(rename = "min_count", skip_serializing_if = "Option::is_none")] - pub min_count: Option, - #[serde(rename = "pool_type")] - pub pool_type: crate::models::AdminClustersPoolType, + #[serde(rename = "pools")] + pub pools: Vec, + #[serde(rename = "prebakes_enabled", skip_serializing_if = "Option::is_none")] + pub prebakes_enabled: Option, } impl AdminClustersUpdateDatacenterRequest { - pub fn new(hardware: Vec, pool_type: crate::models::AdminClustersPoolType) -> AdminClustersUpdateDatacenterRequest { + pub fn new(pools: Vec) -> AdminClustersUpdateDatacenterRequest { AdminClustersUpdateDatacenterRequest { - desired_count: None, - drain_timeout: None, - hardware, - max_count: None, - min_count: None, - pool_type, + pools, + prebakes_enabled: None, } } } diff --git a/sdks/full/rust/src/models/mod.rs b/sdks/full/rust/src/models/mod.rs index c85cc29c9..cca9c150d 100644 --- a/sdks/full/rust/src/models/mod.rs +++ b/sdks/full/rust/src/models/mod.rs @@ -24,6 +24,8 @@ pub mod admin_clusters_pool; pub use self::admin_clusters_pool::AdminClustersPool; pub mod admin_clusters_pool_type; pub use self::admin_clusters_pool_type::AdminClustersPoolType; +pub mod admin_clusters_pool_update; +pub use self::admin_clusters_pool_update::AdminClustersPoolUpdate; pub mod admin_clusters_provider; pub use self::admin_clusters_provider::AdminClustersProvider; pub mod admin_clusters_server; diff --git a/sdks/full/typescript/archive.tgz b/sdks/full/typescript/archive.tgz index e9f869c14..9206d47b9 100644 --- a/sdks/full/typescript/archive.tgz +++ b/sdks/full/typescript/archive.tgz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6138b7a60e0c3b32cc1cf0481c04e1360cac40d1d9dbbc442534515196e78c4c -size 640544 +oid sha256:6dd57b0829c24ebac5513e6bec6c92519111cb03619a811f4150d151fb440078 +size 641144 diff --git a/sdks/full/typescript/types/api/resources/admin/resources/clusters/resources/common/types/index.d.ts b/sdks/full/typescript/types/api/resources/admin/resources/clusters/resources/common/types/index.d.ts index 4ce682068..016a5be82 100644 --- a/sdks/full/typescript/types/api/resources/admin/resources/clusters/resources/common/types/index.d.ts +++ b/sdks/full/typescript/types/api/resources/admin/resources/clusters/resources/common/types/index.d.ts @@ -6,3 +6,4 @@ export * from "./Hardware"; export * from "./Cluster"; export * from "./Datacenter"; export * from "./Server"; +export * from "./PoolUpdate"; diff --git a/sdks/full/typescript/types/api/resources/admin/resources/clusters/resources/datacenters/types/CreateDatacenterRequest.d.ts b/sdks/full/typescript/types/api/resources/admin/resources/clusters/resources/datacenters/types/CreateDatacenterRequest.d.ts index fac3bf58c..838c0e125 100644 --- a/sdks/full/typescript/types/api/resources/admin/resources/clusters/resources/datacenters/types/CreateDatacenterRequest.d.ts +++ b/sdks/full/typescript/types/api/resources/admin/resources/clusters/resources/datacenters/types/CreateDatacenterRequest.d.ts @@ -8,4 +8,5 @@ export interface CreateDatacenterRequest { provider: Rivet.admin.clusters.Provider; providerDatacenterId: string; buildDeliveryMethod: Rivet.admin.clusters.BuildDeliveryMethod; + prebakesEnabled: boolean; } diff --git a/sdks/full/typescript/types/api/resources/admin/resources/clusters/resources/datacenters/types/UpdateDatacenterRequest.d.ts b/sdks/full/typescript/types/api/resources/admin/resources/clusters/resources/datacenters/types/UpdateDatacenterRequest.d.ts index c2bcb74bd..92d0d27bf 100644 --- a/sdks/full/typescript/types/api/resources/admin/resources/clusters/resources/datacenters/types/UpdateDatacenterRequest.d.ts +++ b/sdks/full/typescript/types/api/resources/admin/resources/clusters/resources/datacenters/types/UpdateDatacenterRequest.d.ts @@ -3,10 +3,6 @@ */ import * as Rivet from "../../../../../../.."; export interface UpdateDatacenterRequest { - poolType: Rivet.admin.clusters.PoolType; - hardware: Rivet.admin.clusters.Hardware[]; - desiredCount?: number; - minCount?: number; - maxCount?: number; - drainTimeout?: number; + pools: Rivet.admin.clusters.PoolUpdate[]; + prebakesEnabled?: boolean; } diff --git a/sdks/full/typescript/types/serialization/resources/admin/resources/clusters/resources/common/types/index.d.ts b/sdks/full/typescript/types/serialization/resources/admin/resources/clusters/resources/common/types/index.d.ts index 4ce682068..016a5be82 100644 --- a/sdks/full/typescript/types/serialization/resources/admin/resources/clusters/resources/common/types/index.d.ts +++ b/sdks/full/typescript/types/serialization/resources/admin/resources/clusters/resources/common/types/index.d.ts @@ -6,3 +6,4 @@ export * from "./Hardware"; export * from "./Cluster"; export * from "./Datacenter"; export * from "./Server"; +export * from "./PoolUpdate"; diff --git a/sdks/full/typescript/types/serialization/resources/admin/resources/clusters/resources/datacenters/types/CreateDatacenterRequest.d.ts b/sdks/full/typescript/types/serialization/resources/admin/resources/clusters/resources/datacenters/types/CreateDatacenterRequest.d.ts index 332c6ae33..8102b302c 100644 --- a/sdks/full/typescript/types/serialization/resources/admin/resources/clusters/resources/datacenters/types/CreateDatacenterRequest.d.ts +++ b/sdks/full/typescript/types/serialization/resources/admin/resources/clusters/resources/datacenters/types/CreateDatacenterRequest.d.ts @@ -12,5 +12,6 @@ export declare namespace CreateDatacenterRequest { provider: serializers.admin.clusters.Provider.Raw; provider_datacenter_id: string; build_delivery_method: serializers.admin.clusters.BuildDeliveryMethod.Raw; + prebakes_enabled: boolean; } } diff --git a/sdks/full/typescript/types/serialization/resources/admin/resources/clusters/resources/datacenters/types/UpdateDatacenterRequest.d.ts b/sdks/full/typescript/types/serialization/resources/admin/resources/clusters/resources/datacenters/types/UpdateDatacenterRequest.d.ts index ce5533572..e41657997 100644 --- a/sdks/full/typescript/types/serialization/resources/admin/resources/clusters/resources/datacenters/types/UpdateDatacenterRequest.d.ts +++ b/sdks/full/typescript/types/serialization/resources/admin/resources/clusters/resources/datacenters/types/UpdateDatacenterRequest.d.ts @@ -7,11 +7,7 @@ import * as core from "../../../../../../../../core"; export declare const UpdateDatacenterRequest: core.serialization.ObjectSchema; export declare namespace UpdateDatacenterRequest { interface Raw { - pool_type: serializers.admin.clusters.PoolType.Raw; - hardware: serializers.admin.clusters.Hardware.Raw[]; - desired_count?: number | null; - min_count?: number | null; - max_count?: number | null; - drain_timeout?: number | null; + pools: serializers.admin.clusters.PoolUpdate.Raw[]; + prebakes_enabled?: boolean | null; } } diff --git a/sdks/runtime/typescript/archive.tgz b/sdks/runtime/typescript/archive.tgz index f191571d2..0b08de48b 100644 --- a/sdks/runtime/typescript/archive.tgz +++ b/sdks/runtime/typescript/archive.tgz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e621aa3d8c747333b446a271500b95cc70b25eceb87445341599ea5111362581 -size 371644 +oid sha256:e87919af89dc342446b6689ebfa0d97010ccf1b65a8f3694cd86cc74876b9ce7 +size 371685 diff --git a/svc/api/admin/src/route/clusters/datacenters.rs b/svc/api/admin/src/route/clusters/datacenters.rs index fb3ab9993..001fa0a27 100644 --- a/svc/api/admin/src/route/clusters/datacenters.rs +++ b/svc/api/admin/src/route/clusters/datacenters.rs @@ -1,7 +1,7 @@ use api_helper::{anchor::WatchIndexQuery, ctx::Ctx}; use proto::backend; use rivet_api::models; -use rivet_convert::{ApiFrom, ApiTryFrom}; +use rivet_convert::{ApiFrom, ApiInto, ApiTryFrom}; use rivet_operation::prelude::{proto::backend::pkg::cluster, *}; use serde_json::{json, Value}; @@ -100,6 +100,7 @@ pub async fn create( pools: pools, build_delivery_method: backend::cluster::BuildDeliveryMethod::api_from(body.build_delivery_method) as i32, + prebakes_enabled: body.prebakes_enabled, }) .await?; @@ -129,24 +130,14 @@ pub async fn update( bail_with!(CLUSTER_DATACENTER_NOT_IN_CLUSTER); } - let pools = vec![cluster::msg::datacenter_update::PoolUpdate { - pool_type: backend::cluster::PoolType::api_from(body.pool_type) as i32, - hardware: body - .hardware - .iter() - .map(|h| backend::cluster::Hardware { - provider_hardware: h.provider_hardware.clone(), - }) - .collect(), - desired_count: body.desired_count.map(|c| c as u32), - min_count: body.min_count.map(|c| c as u32), - max_count: body.max_count.map(|c| c as u32), - drain_timeout: body.drain_timeout.map(|d| d as u64), - }]; - msg!([ctx] cluster::msg::datacenter_update(datacenter_id) -> cluster::msg::datacenter_scale { datacenter_id: Some(datacenter_id.into()), - pools: pools, + pools: body.pools + .iter() + .cloned() + .map(ApiInto::api_into) + .collect::>(), + prebakes_enabled: body.prebakes_enabled, }) .await .unwrap(); diff --git a/svc/pkg/cluster/db/cluster/migrations/20240619221123_prebake_toggle.down.sql b/svc/pkg/cluster/db/cluster/migrations/20240619221123_prebake_toggle.down.sql new file mode 100644 index 000000000..e69de29bb diff --git a/svc/pkg/cluster/db/cluster/migrations/20240619221123_prebake_toggle.up.sql b/svc/pkg/cluster/db/cluster/migrations/20240619221123_prebake_toggle.up.sql new file mode 100644 index 000000000..16f403431 --- /dev/null +++ b/svc/pkg/cluster/db/cluster/migrations/20240619221123_prebake_toggle.up.sql @@ -0,0 +1,2 @@ +ALTER TABLE datacenters +ADD COLUMN prebakes_enabled BOOLEAN NOT NULL DEFAULT TRUE; \ No newline at end of file diff --git a/svc/pkg/cluster/ops/datacenter-get/src/lib.rs b/svc/pkg/cluster/ops/datacenter-get/src/lib.rs index 12d2cc7b4..81ba4b353 100644 --- a/svc/pkg/cluster/ops/datacenter-get/src/lib.rs +++ b/svc/pkg/cluster/ops/datacenter-get/src/lib.rs @@ -15,6 +15,7 @@ struct Datacenter { provider_api_token: Option, pools: Vec, build_delivery_method: i64, + prebakes_enabled: bool, } impl TryFrom for backend::cluster::Datacenter { @@ -34,6 +35,7 @@ impl TryFrom for backend::cluster::Datacenter { provider_api_token: value.provider_api_token, pools, build_delivery_method: value.build_delivery_method as i32, + prebakes_enabled: value.prebakes_enabled, }) } } @@ -87,6 +89,7 @@ async fn get_dcs( provider_api_token, pools, build_delivery_method, + prebakes_enabled, create_ts FROM db_cluster.datacenters WHERE datacenter_id = ANY($1) diff --git a/svc/pkg/cluster/ops/datacenter-get/tests/integration.rs b/svc/pkg/cluster/ops/datacenter-get/tests/integration.rs index 73e82157d..a2669d93b 100644 --- a/svc/pkg/cluster/ops/datacenter-get/tests/integration.rs +++ b/svc/pkg/cluster/ops/datacenter-get/tests/integration.rs @@ -27,6 +27,7 @@ async fn empty(ctx: TestCtx) { pools: Vec::new(), build_delivery_method: backend::cluster::BuildDeliveryMethod::TrafficServer as i32, + prebakes_enabled: false, }) .await .unwrap(); diff --git a/svc/pkg/cluster/ops/datacenter-list/tests/integration.rs b/svc/pkg/cluster/ops/datacenter-list/tests/integration.rs index 097590f4a..ff707b2a2 100644 --- a/svc/pkg/cluster/ops/datacenter-list/tests/integration.rs +++ b/svc/pkg/cluster/ops/datacenter-list/tests/integration.rs @@ -27,6 +27,7 @@ async fn empty(ctx: TestCtx) { pools: Vec::new(), build_delivery_method: backend::cluster::BuildDeliveryMethod::TrafficServer as i32, + prebakes_enabled: false, }) .await .unwrap(); diff --git a/svc/pkg/cluster/ops/datacenter-location-get/tests/integration.rs b/svc/pkg/cluster/ops/datacenter-location-get/tests/integration.rs index 1f89e8373..cb9c2409f 100644 --- a/svc/pkg/cluster/ops/datacenter-location-get/tests/integration.rs +++ b/svc/pkg/cluster/ops/datacenter-location-get/tests/integration.rs @@ -28,6 +28,7 @@ async fn basic(ctx: TestCtx) { pools: Vec::new(), build_delivery_method: backend::cluster::BuildDeliveryMethod::TrafficServer as i32, + prebakes_enabled: false, }) .await .unwrap(); diff --git a/svc/pkg/cluster/ops/datacenter-resolve-for-name-id/tests/integration.rs b/svc/pkg/cluster/ops/datacenter-resolve-for-name-id/tests/integration.rs index 750315fc1..ab185ce60 100644 --- a/svc/pkg/cluster/ops/datacenter-resolve-for-name-id/tests/integration.rs +++ b/svc/pkg/cluster/ops/datacenter-resolve-for-name-id/tests/integration.rs @@ -28,6 +28,7 @@ async fn empty(ctx: TestCtx) { pools: Vec::new(), build_delivery_method: backend::cluster::BuildDeliveryMethod::TrafficServer as i32, + prebakes_enabled: false, }) .await .unwrap(); diff --git a/svc/pkg/cluster/ops/datacenter-tls-get/tests/integration.rs b/svc/pkg/cluster/ops/datacenter-tls-get/tests/integration.rs index f2342486f..4d81a6da4 100644 --- a/svc/pkg/cluster/ops/datacenter-tls-get/tests/integration.rs +++ b/svc/pkg/cluster/ops/datacenter-tls-get/tests/integration.rs @@ -32,6 +32,7 @@ async fn empty(ctx: TestCtx) { pools: Vec::new(), build_delivery_method: backend::cluster::BuildDeliveryMethod::TrafficServer as i32, + prebakes_enabled: false, }) .await .unwrap(); diff --git a/svc/pkg/cluster/ops/server-destroy-with-filter/src/lib.rs b/svc/pkg/cluster/ops/server-destroy-with-filter/src/lib.rs index 696452eec..7e2a367ca 100644 --- a/svc/pkg/cluster/ops/server-destroy-with-filter/src/lib.rs +++ b/svc/pkg/cluster/ops/server-destroy-with-filter/src/lib.rs @@ -6,10 +6,8 @@ use std::collections::HashSet; pub async fn handle( ctx: OperationContext, ) -> GlobalResult { - let filter = unwrap!(ctx.filter.clone()); - let servers_res = op!([ctx] cluster_server_list { - filter: Some(filter) + filter: ctx.filter.clone(), }) .await?; diff --git a/svc/pkg/cluster/standalone/default-update/src/lib.rs b/svc/pkg/cluster/standalone/default-update/src/lib.rs index 59cc69082..4a9a1fe78 100644 --- a/svc/pkg/cluster/standalone/default-update/src/lib.rs +++ b/svc/pkg/cluster/standalone/default-update/src/lib.rs @@ -19,6 +19,7 @@ struct Datacenter { provider_datacenter_name: String, pools: HashMap, build_delivery_method: BuildDeliveryMethod, + prebakes_enabled: bool, } #[derive(Deserialize)] @@ -214,6 +215,7 @@ pub async fn run_from_env(use_autoscaler: bool) -> GlobalResult<()> { msg!([ctx] @wait cluster::msg::datacenter_update(datacenter.datacenter_id) { datacenter_id: Some(datacenter_id_proto), pools: new_pools, + prebakes_enabled: Some(datacenter.prebakes_enabled), }) .await?; } @@ -241,6 +243,7 @@ pub async fn run_from_env(use_autoscaler: bool) -> GlobalResult<()> { }).collect::>(), build_delivery_method: Into::::into(datacenter.build_delivery_method) as i32, + prebakes_enabled: datacenter.prebakes_enabled, }) .await?; } diff --git a/svc/pkg/cluster/standalone/gc/tests/integration.rs b/svc/pkg/cluster/standalone/gc/tests/integration.rs index 78c04ad03..19fb4187c 100644 --- a/svc/pkg/cluster/standalone/gc/tests/integration.rs +++ b/svc/pkg/cluster/standalone/gc/tests/integration.rs @@ -139,6 +139,7 @@ async fn setup( pools: pools.clone(), build_delivery_method: backend::cluster::BuildDeliveryMethod::TrafficServer as i32, + prebakes_enabled: false, }) .await .unwrap(); diff --git a/svc/pkg/cluster/types/msg/datacenter-create.proto b/svc/pkg/cluster/types/msg/datacenter-create.proto index 710e25757..dbac3a646 100644 --- a/svc/pkg/cluster/types/msg/datacenter-create.proto +++ b/svc/pkg/cluster/types/msg/datacenter-create.proto @@ -21,6 +21,7 @@ message Message { repeated rivet.backend.cluster.Pool pools = 8; rivet.backend.cluster.BuildDeliveryMethod build_delivery_method = 9; + bool prebakes_enabled = 10; } // Helper proto for writing to sql diff --git a/svc/pkg/cluster/types/msg/datacenter-update.proto b/svc/pkg/cluster/types/msg/datacenter-update.proto index cbd794dcf..1fa69eb15 100644 --- a/svc/pkg/cluster/types/msg/datacenter-update.proto +++ b/svc/pkg/cluster/types/msg/datacenter-update.proto @@ -12,6 +12,7 @@ import "proto/backend/cluster.proto"; message Message { rivet.common.Uuid datacenter_id = 1; repeated PoolUpdate pools = 2; + optional bool prebakes_enabled = 3; } message PoolUpdate { diff --git a/svc/pkg/cluster/worker/src/workers/datacenter_create.rs b/svc/pkg/cluster/worker/src/workers/datacenter_create.rs index 2a7bf149e..d04018c80 100644 --- a/svc/pkg/cluster/worker/src/workers/datacenter_create.rs +++ b/svc/pkg/cluster/worker/src/workers/datacenter_create.rs @@ -40,9 +40,10 @@ async fn worker( provider_api_token, pools, build_delivery_method, + prebakes_enabled, create_ts ) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) ", datacenter_id, cluster_id, @@ -53,6 +54,7 @@ async fn worker( &ctx.provider_api_token, pools_buf, ctx.build_delivery_method as i64, + ctx.prebakes_enabled, util::timestamp::now(), ) .await?; diff --git a/svc/pkg/cluster/worker/src/workers/datacenter_update.rs b/svc/pkg/cluster/worker/src/workers/datacenter_update.rs index 0bf29fb4a..9f7871a49 100644 --- a/svc/pkg/cluster/worker/src/workers/datacenter_update.rs +++ b/svc/pkg/cluster/worker/src/workers/datacenter_update.rs @@ -56,11 +56,14 @@ async fn worker( [ctx] " UPDATE db_cluster.datacenters - SET pools = $2 + SET + pools = $2 AND + prebakes_enabled = coalesce($3, prebakes_enabled) WHERE datacenter_id = $1 ", datacenter_id, pools_buf, + ctx.prebakes_enabled, ) .await?; diff --git a/svc/pkg/cluster/worker/src/workers/server_provision.rs b/svc/pkg/cluster/worker/src/workers/server_provision.rs index d28325ee9..fed2dc24c 100644 --- a/svc/pkg/cluster/worker/src/workers/server_provision.rs +++ b/svc/pkg/cluster/worker/src/workers/server_provision.rs @@ -112,6 +112,7 @@ async fn inner( pool_type: ctx.pool_type, vlan_ip: vlan_ip.to_string(), tags: ctx.tags.clone(), + use_prebakes: datacenter.prebakes_enabled, }) .await; diff --git a/svc/pkg/cluster/worker/tests/common.rs b/svc/pkg/cluster/worker/tests/common.rs index 35f0dc4d5..7af2e14cb 100644 --- a/svc/pkg/cluster/worker/tests/common.rs +++ b/svc/pkg/cluster/worker/tests/common.rs @@ -48,6 +48,7 @@ pub async fn setup(ctx: &TestCtx, opts: Setup) -> SetupRes { pools: pools.clone(), build_delivery_method: backend::cluster::BuildDeliveryMethod::TrafficServer as i32, + prebakes_enabled: false, }) .await .unwrap(); diff --git a/svc/pkg/cluster/worker/tests/datacenter_create.rs b/svc/pkg/cluster/worker/tests/datacenter_create.rs index 05660dfd7..a71564ccc 100644 --- a/svc/pkg/cluster/worker/tests/datacenter_create.rs +++ b/svc/pkg/cluster/worker/tests/datacenter_create.rs @@ -27,6 +27,7 @@ async fn datacenter_create(ctx: TestCtx) { pools: Vec::new(), build_delivery_method: backend::cluster::BuildDeliveryMethod::TrafficServer as i32, + prebakes_enabled: false, }) .await .unwrap(); diff --git a/svc/pkg/cluster/worker/tests/datacenter_tls_issue.rs b/svc/pkg/cluster/worker/tests/datacenter_tls_issue.rs index 2d04571a0..23b7ca165 100644 --- a/svc/pkg/cluster/worker/tests/datacenter_tls_issue.rs +++ b/svc/pkg/cluster/worker/tests/datacenter_tls_issue.rs @@ -32,6 +32,7 @@ async fn datacenter_tls_issue(ctx: TestCtx) { pools: Vec::new(), build_delivery_method: backend::cluster::BuildDeliveryMethod::TrafficServer as i32, + prebakes_enabled: false, }) .await .unwrap(); diff --git a/svc/pkg/cluster/worker/tests/datacenter_update.rs b/svc/pkg/cluster/worker/tests/datacenter_update.rs index c1a6596bb..19aa9d8c4 100644 --- a/svc/pkg/cluster/worker/tests/datacenter_update.rs +++ b/svc/pkg/cluster/worker/tests/datacenter_update.rs @@ -35,6 +35,7 @@ async fn datacenter_update(ctx: TestCtx) { pools: pools.clone(), build_delivery_method: backend::cluster::BuildDeliveryMethod::TrafficServer as i32, + prebakes_enabled: false, }) .await .unwrap(); @@ -49,6 +50,7 @@ async fn datacenter_update(ctx: TestCtx) { max_count: None, drain_timeout: None, }], + prebakes_enabled: Some(false), }) .await .unwrap(); diff --git a/svc/pkg/cluster/worker/tests/server_taint.rs b/svc/pkg/cluster/worker/tests/server_taint.rs index 9cca2e30d..3ff12fb6f 100644 --- a/svc/pkg/cluster/worker/tests/server_taint.rs +++ b/svc/pkg/cluster/worker/tests/server_taint.rs @@ -75,6 +75,7 @@ async fn datacenter_taint(ctx: TestCtx) { max_count: Some(1), drain_timeout: None, }], + prebakes_enabled: None, }) .await .unwrap(); @@ -118,6 +119,7 @@ async fn datacenter_taint(ctx: TestCtx) { max_count: Some(0), drain_timeout: None, }], + prebakes_enabled: None, }) .await .unwrap(); diff --git a/svc/pkg/linode/ops/server-provision/src/lib.rs b/svc/pkg/linode/ops/server-provision/src/lib.rs index 56f6005a1..d08dd1c2f 100644 --- a/svc/pkg/linode/ops/server-provision/src/lib.rs +++ b/svc/pkg/linode/ops/server-provision/src/lib.rs @@ -168,8 +168,11 @@ async fn create_disks( opts: CreateDisks<'_>, ) -> GlobalResult<(api::CreateDisksResponse, bool)> { // Try to get custom image (if exists) - let (custom_image, updated) = - get_custom_image(ctx, crdb, opts.datacenter_id, opts.pool_type).await?; + let (custom_image, updated) = if ctx.use_prebakes { + get_custom_image(ctx, crdb, opts.datacenter_id, opts.pool_type).await? + } else { + (None, false) + }; // Default image let used_custom_image = custom_image.is_some(); @@ -212,9 +215,6 @@ async fn get_custom_image( datacenter_id: Uuid, pool_type: PoolType, ) -> GlobalResult<(Option, bool)> { - // TODO(RVTEE-107): Disable prebake images completely until Linode fixes the limits - return Ok((None, false)); - let provider = backend::cluster::Provider::Linode; // Get the custom image id for this server, or insert a record and start creating one diff --git a/svc/pkg/linode/types/server-provision.proto b/svc/pkg/linode/types/server-provision.proto index 0e12c13c0..81eabb0d2 100644 --- a/svc/pkg/linode/types/server-provision.proto +++ b/svc/pkg/linode/types/server-provision.proto @@ -13,6 +13,7 @@ message Request { rivet.backend.cluster.PoolType pool_type = 4; string vlan_ip = 5; repeated string tags = 6; + bool use_prebakes = 8; } message Response { diff --git a/svc/pkg/linode/worker/tests/prebake_install_complete.rs b/svc/pkg/linode/worker/tests/prebake_install_complete.rs index a37a21f45..f9c03e228 100644 --- a/svc/pkg/linode/worker/tests/prebake_install_complete.rs +++ b/svc/pkg/linode/worker/tests/prebake_install_complete.rs @@ -25,6 +25,7 @@ async fn prebake_install_complete(ctx: TestCtx) { pools: Vec::new(), build_delivery_method: backend::cluster::BuildDeliveryMethod::TrafficServer as i32, + prebakes_enabled: false, }) .await .unwrap(); diff --git a/svc/pkg/linode/worker/tests/prebake_provision.rs b/svc/pkg/linode/worker/tests/prebake_provision.rs index 3e977445b..af922d79f 100644 --- a/svc/pkg/linode/worker/tests/prebake_provision.rs +++ b/svc/pkg/linode/worker/tests/prebake_provision.rs @@ -25,6 +25,7 @@ async fn prebake_provision(ctx: TestCtx) { pools: Vec::new(), build_delivery_method: backend::cluster::BuildDeliveryMethod::TrafficServer as i32, + prebakes_enabled: false, }) .await .unwrap(); diff --git a/svc/pkg/region/ops/list-for-game/tests/integration.rs b/svc/pkg/region/ops/list-for-game/tests/integration.rs index 7e5a42034..d2067269b 100644 --- a/svc/pkg/region/ops/list-for-game/tests/integration.rs +++ b/svc/pkg/region/ops/list-for-game/tests/integration.rs @@ -52,6 +52,7 @@ async fn create_dc(ctx: &TestCtx) -> (Uuid, Uuid) { pools: Vec::new(), build_delivery_method: backend::cluster::BuildDeliveryMethod::TrafficServer as i32, + prebakes_enabled: false, }) .await .unwrap(); diff --git a/svc/pkg/region/ops/resolve-for-game/tests/integration.rs b/svc/pkg/region/ops/resolve-for-game/tests/integration.rs index 082ba71b5..d9c548414 100644 --- a/svc/pkg/region/ops/resolve-for-game/tests/integration.rs +++ b/svc/pkg/region/ops/resolve-for-game/tests/integration.rs @@ -60,6 +60,7 @@ async fn create_dc(ctx: &TestCtx) -> (Uuid, Uuid, String) { pools: Vec::new(), build_delivery_method: backend::cluster::BuildDeliveryMethod::TrafficServer as i32, + prebakes_enabled: false, }) .await .unwrap();