Skip to content

Commit e15acc6

Browse files
author
vsilent
committed
deployment lock
1 parent 1676401 commit e15acc6

File tree

3 files changed

+31
-2
lines changed

3 files changed

+31
-2
lines changed

src/cli/deployment_lock.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,7 @@ mod tests {
348348
server_ip: None,
349349
deployment_id: Some(1),
350350
project_id: Some(2),
351+
server_name: None,
351352
});
352353

353354
let enriched = lock.with_server_info(

src/cli/install_runner.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ pub struct DeployResult {
113113
pub deployment_id: Option<i64>,
114114
/// Stacker server project ID (set for remote orchestrator deploys).
115115
pub project_id: Option<i64>,
116+
/// Server name used/generated for this deploy (for lockfile persistence).
117+
pub server_name: Option<String>,
116118
}
117119

118120
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
@@ -212,6 +214,7 @@ impl DeployStrategy for LocalDeploy {
212214
server_ip: None,
213215
deployment_id: None,
214216
project_id: None,
217+
server_name: None,
215218
})
216219
}
217220

@@ -432,6 +435,7 @@ impl DeployStrategy for CloudDeploy {
432435
server_ip: None,
433436
deployment_id: None,
434437
project_id: None,
438+
server_name: None,
435439
});
436440
}
437441

@@ -466,7 +470,7 @@ impl DeployStrategy for CloudDeploy {
466470
reason: format!("Failed to initialize async runtime: {}", e),
467471
})?;
468472

469-
let response = rt.block_on(async {
473+
let (response, effective_server_name) = rt.block_on(async {
470474
let client = StackerClient::new(&base_url, &creds.access_token);
471475

472476
// Step 1: Resolve or auto-create project
@@ -629,6 +633,17 @@ impl DeployStrategy for CloudDeploy {
629633

630634
// Step 4: Build deploy form
631635
let mut deploy_form = stacker_client::build_deploy_form(config);
636+
637+
// Capture the server name from the form (auto-generated or overridden)
638+
// so we can persist it in the deployment lock even if the API fetch
639+
// after deploy doesn't return server details yet.
640+
let effective_server_name = server_name.clone().or_else(|| {
641+
deploy_form
642+
.get("server")
643+
.and_then(|s| s.get("name"))
644+
.and_then(|n| n.as_str())
645+
.map(|s| s.to_string())
646+
});
632647
if let Some(sid) = server_id {
633648
if let Some(server_obj) = deploy_form.get_mut("server") {
634649
if let Some(obj) = server_obj.as_object_mut() {
@@ -672,7 +687,7 @@ impl DeployStrategy for CloudDeploy {
672687
eprintln!(" Deploying project '{}' (id={})...", project_name, project.id);
673688
let resp = client.deploy(project.id, cloud_id, deploy_form).await?;
674689

675-
Ok(resp)
690+
Ok((resp, effective_server_name))
676691
}).map_err(|e: CliError| e)?;
677692

678693
let deploy_id = response
@@ -709,6 +724,7 @@ impl DeployStrategy for CloudDeploy {
709724
server_ip: None,
710725
deployment_id: deploy_id,
711726
project_id: project_id.map(|id| id as i64),
727+
server_name: effective_server_name,
712728
});
713729
}
714730
}
@@ -739,6 +755,7 @@ impl DeployStrategy for CloudDeploy {
739755
server_ip: extract_server_ip(&output.stdout),
740756
deployment_id: None,
741757
project_id: None,
758+
server_name: None,
742759
})
743760
}
744761

@@ -1211,6 +1228,7 @@ impl DeployStrategy for ServerDeploy {
12111228
server_ip: server_host,
12121229
deployment_id: None,
12131230
project_id: None,
1231+
server_name: None,
12141232
})
12151233
}
12161234

src/console/commands/cli/deploy.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1266,6 +1266,15 @@ impl DeployCommand {
12661266
}
12671267
}
12681268

1269+
// Fallback: if the API fetch didn't populate server_name,
1270+
// use the name from the deploy form so subsequent deploys
1271+
// can still find and reuse the server.
1272+
if l.server_name.is_none() {
1273+
if let Some(ref name) = result.server_name {
1274+
l.server_name = Some(name.clone());
1275+
}
1276+
}
1277+
12691278
l
12701279
}
12711280
};
@@ -2129,6 +2138,7 @@ services:
21292138
server_ip: None,
21302139
deployment_id: Some(42),
21312140
project_id: Some(7),
2141+
server_name: None,
21322142
};
21332143
assert_eq!(result.deployment_id, Some(42));
21342144
assert_eq!(result.project_id, Some(7));

0 commit comments

Comments
 (0)