Remoting refactor (#503)

This commit is contained in:
Roey Darwish Dror
2020-08-22 14:46:17 +03:00
committed by GitHub
parent 417ca1257a
commit f4a1f26e39
7 changed files with 58 additions and 48 deletions

46
src/steps/remote/ssh.rs Normal file
View File

@@ -0,0 +1,46 @@
#[cfg(unix)]
use crate::error::SkipStep;
use crate::{execution_context::ExecutionContext, terminal::print_separator, utils};
use anyhow::Result;
pub fn ssh_step(ctx: &ExecutionContext, hostname: &str) -> Result<()> {
let ssh = utils::require("ssh")?;
let topgrade = ctx.config().remote_topgrade_path();
if ctx.config().run_in_tmux() && !ctx.run_type().dry() {
#[cfg(unix)]
{
let command = format!(
"{ssh} -t {hostname} env TOPGRADE_PREFIX={hostname} TOPGRADE_KEEP_END=1 {topgrade}",
ssh = ssh.display(),
hostname = hostname,
topgrade = topgrade
);
crate::tmux::run_command(ctx, &command)?;
Err(SkipStep(String::from("Remote Topgrade launched in Tmux")).into())
}
#[cfg(not(unix))]
unreachable!("Tmux execution is only implemented in Unix");
} else {
let mut args = vec!["-t", hostname];
if let Some(ssh_arguments) = ctx.config().ssh_arguments() {
args.extend(ssh_arguments.split_whitespace());
}
let env = format!("TOPGRADE_PREFIX={}", hostname);
args.extend(&["env", &env, topgrade]);
if ctx.config().yes() {
args.push("-y");
}
print_separator(format!("Remote ({})", hostname));
println!("Connecting to {}...", hostname);
ctx.run_type().execute(&ssh).args(&args).check_run()
}
}