Skip to content

Commit

Permalink
Only send scaling config in deploy request if specified in toml (#51)
Browse files Browse the repository at this point in the history
* Only send scaling config if specified

* Only send scaling config if specified

* Only send scaling config if specified

* Update to not warn unecessarily

* Make desired replicas optional in create deployment request payload

* Handle drift better
  • Loading branch information
donaltuohy authored Dec 6, 2023
1 parent 26e47f2 commit 47b4429
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 16 deletions.
6 changes: 4 additions & 2 deletions src/api/cage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,8 @@ pub struct CreateCageDeploymentIntentRequest {
metadata: VersionMetadata,
#[serde(skip_serializing_if = "Option::is_none")]
healthcheck: Option<String>,
desired_replicas: u32,
#[serde(skip_serializing_if = "Option::is_none")]
desired_replicas: Option<u32>,
}

impl CreateCageDeploymentIntentRequest {
Expand All @@ -343,6 +344,7 @@ impl CreateCageDeploymentIntentRequest {
installer_version: String,
git_timestamp: String,
git_hash: String,
desired_replicas: Option<u32>,
) -> Self {
Self {
pcrs: pcrs.clone(),
Expand All @@ -360,7 +362,7 @@ impl CreateCageDeploymentIntentRequest {
git_timestamp,
},
healthcheck: config.healthcheck().map(String::from),
desired_replicas: config.scaling.desired_replicas,
desired_replicas,
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/build/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -449,9 +449,9 @@ mod test {
enabled: egress_enabled,
destinations: None,
},
scaling: ScalingSettings {
scaling: Some(ScalingSettings {
desired_replicas: 2,
},
}),
attestation: None,
signing: ValidatedSigningInfo {
cert: "".into(),
Expand Down
22 changes: 17 additions & 5 deletions src/cli/deploy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,15 +115,27 @@ pub async fn run(deploy_args: DeployArgs) -> exitcode::ExitCode {
}
};

let local_replicas = validated_config.scaling.desired_replicas;
let local_replicas = validated_config
.scaling
.as_ref()
.map(|local_scaling_config| local_scaling_config.desired_replicas);

// Warn if local scaling config differs from remote
let has_scaling_config_drift = cage_scaling_config
.as_ref()
.is_some_and(|config| config.desired_replicas() != local_replicas);
let has_scaling_config_drift = cage_scaling_config.as_ref().is_some_and(|config| {
local_replicas.is_some_and(|replicas| config.desired_replicas() != replicas)
});

// cage scaling config is None - has_scaling_config_drift: false
// cage scaling config is Some - local scaling config is None : has_scaling_config_drift: false
// cage scaling config is Some - local scaling config is Some - scaling config differs : has_scaling_config_drift: true

if has_scaling_config_drift {
let remote_replicas = cage_scaling_config.as_ref().unwrap().desired_replicas();
log::warn!("Remote scaling config differs from local config. This deployment will apply the local config.\n\nCurrent remote replica count: {remote_replicas}\nLocal replica count: {local_replicas}\n");
let local_replicas_count = local_replicas
.map(|count| count.to_string())
.expect("Infallible - checked above");

log::warn!("Remote scaling config differs from local config. This deployment will apply the local config.\n\nCurrent remote replica count: {remote_replicas}\nLocal replica count: {local_replicas_count}\n");
}

let timestamp = get_source_date_epoch();
Expand Down
7 changes: 4 additions & 3 deletions src/cli/init.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,10 +106,11 @@ impl std::convert::From<InitArgs> for CageConfig {
app_uuid: None,
team_uuid: None,
debug: val.debug,

egress: EgressSettings::new(convert_comma_list(val.egress_destinations), val.egress),
scaling: Some(ScalingSettings {
desired_replicas: val.desired_replicas.unwrap_or(2),
}),
scaling: val
.desired_replicas
.map(|desired_replicas| ScalingSettings { desired_replicas }),
dockerfile: val.dockerfile.unwrap_or_else(default_dockerfile), // need to manually set default dockerfile
signing: signing_info,
attestation: None,
Expand Down
6 changes: 4 additions & 2 deletions src/cli/scale.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,10 @@ pub async fn run(args: ScaleArgs) -> i32 {
let has_scaling_drift = config
.scaling
.as_ref()
.map(|scaling| scaling.desired_replicas != scaling_config.desired_replicas())
.unwrap_or(true);
.is_some_and(|config_scaling_settings| {
config_scaling_settings.desired_replicas != scaling_config.desired_replicas()
});

if (args.sync || args.desired_replicas.is_some()) && has_scaling_drift {
config.set_scaling_config(ScalingSettings {
desired_replicas: scaling_config.desired_replicas(),
Expand Down
4 changes: 2 additions & 2 deletions src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ pub struct ValidatedCageBuildConfig {
pub debug: bool,
pub dockerfile: String,
pub egress: EgressSettings,
pub scaling: ScalingSettings,
pub scaling: Option<ScalingSettings>,
pub signing: ValidatedSigningInfo,
pub attestation: Option<EIFMeasurements>,
pub disable_tls_termination: bool,
Expand Down Expand Up @@ -467,7 +467,7 @@ impl std::convert::TryFrom<&CageConfig> for ValidatedCageBuildConfig {
(true, true) => Ok(true), // (logging enabled, tls_termination enabled) = logging enabled
}?;

let scaling_settings = config.scaling.clone().unwrap_or_default();
let scaling_settings = config.scaling.clone();

Ok(ValidatedCageBuildConfig {
cage_uuid,
Expand Down
4 changes: 4 additions & 0 deletions src/deploy/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,10 @@ pub async fn deploy_eif<T: CageApi + Clone>(
installer_version,
get_source_date_epoch(),
get_git_hash(),
validated_config
.scaling
.as_ref()
.map(|config| config.desired_replicas),
);

let deployment_intent = cage_api
Expand Down

0 comments on commit 47b4429

Please sign in to comment.