Skip to content

Commit eee5e76

Browse files
authored
cli: propagate server-data-dir and extensions-dir when installing service (microsoft#236734)
Fixes microsoft#236195
1 parent 720422c commit eee5e76

File tree

2 files changed

+38
-21
lines changed

2 files changed

+38
-21
lines changed

cli/src/bin/code/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ async fn main() -> Result<(), std::convert::Infallible> {
103103
serve_web::serve_web(context!(), sw_args).await
104104
}
105105

106-
Some(args::Commands::Tunnel(tunnel_args)) => match tunnel_args.subcommand {
106+
Some(args::Commands::Tunnel(mut tunnel_args)) => match tunnel_args.subcommand.take() {
107107
Some(args::TunnelSubcommand::Prune) => tunnels::prune(context!()).await,
108108
Some(args::TunnelSubcommand::Unregister) => tunnels::unregister(context!()).await,
109109
Some(args::TunnelSubcommand::Kill) => tunnels::kill(context!()).await,
@@ -116,7 +116,7 @@ async fn main() -> Result<(), std::convert::Infallible> {
116116
tunnels::user(context!(), user_command).await
117117
}
118118
Some(args::TunnelSubcommand::Service(service_args)) => {
119-
tunnels::service(context_no_logger(), service_args).await
119+
tunnels::service(context_no_logger(), tunnel_args, service_args).await
120120
}
121121
Some(args::TunnelSubcommand::ForwardInternal(forward_args)) => {
122122
tunnels::forward(context_no_logger(), forward_args).await

cli/src/commands/tunnels.rs

Lines changed: 36 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use tokio::{
2121

2222
use super::{
2323
args::{
24-
AuthProvider, CliCore, CommandShellArgs, ExistingTunnelArgs, TunnelForwardArgs,
24+
AuthProvider, CliCore, CommandShellArgs, ExistingTunnelArgs, TunnelArgs, TunnelForwardArgs,
2525
TunnelRenameArgs, TunnelServeArgs, TunnelServiceSubCommands, TunnelUserSubCommands,
2626
},
2727
CommandContext,
@@ -104,12 +104,16 @@ fn fulfill_existing_tunnel_args(
104104
}
105105

106106
struct TunnelServiceContainer {
107-
args: CliCore,
107+
core_args: CliCore,
108+
tunnel_args: TunnelArgs,
108109
}
109110

110111
impl TunnelServiceContainer {
111-
fn new(args: CliCore) -> Self {
112-
Self { args }
112+
fn new(core_args: CliCore, tunnel_args: TunnelArgs) -> Self {
113+
Self {
114+
core_args,
115+
tunnel_args,
116+
}
113117
}
114118
}
115119

@@ -120,7 +124,8 @@ impl ServiceContainer for TunnelServiceContainer {
120124
log: log::Logger,
121125
launcher_paths: LauncherPaths,
122126
) -> Result<(), AnyError> {
123-
let csa = (&self.args).into();
127+
let mut csa = (&self.core_args).into();
128+
self.tunnel_args.serve_args.server_args.apply_to(&mut csa);
124129
serve_with_csa(
125130
launcher_paths,
126131
log,
@@ -242,8 +247,27 @@ async fn is_port_available(host: IpAddr, port: u16) -> bool {
242247
.is_ok()
243248
}
244249

250+
fn make_service_args<'a: 'c, 'b: 'c, 'c>(
251+
root_path: &'a str,
252+
tunnel_args: &'b TunnelArgs,
253+
) -> Vec<&'c str> {
254+
let mut args = ["--verbose", "--cli-data-dir", root_path, "tunnel"].to_vec();
255+
256+
if let Some(d) = tunnel_args.serve_args.server_args.extensions_dir.as_ref() {
257+
args.extend_from_slice(&["--extensions-dir", d]);
258+
}
259+
if let Some(d) = tunnel_args.serve_args.server_args.server_data_dir.as_ref() {
260+
args.extend_from_slice(&["--server-data-dir", d]);
261+
}
262+
263+
args.extend_from_slice(&["service", "internal-run"]);
264+
265+
args
266+
}
267+
245268
pub async fn service(
246269
ctx: CommandContext,
270+
tunnel_args: TunnelArgs,
247271
service_args: TunnelServiceSubCommands,
248272
) -> Result<i32, AnyError> {
249273
let manager = create_service_manager(ctx.log.clone(), &ctx.paths);
@@ -265,20 +289,10 @@ pub async fn service(
265289
legal::require_consent(&ctx.paths, args.accept_server_license_terms)?;
266290

267291
let current_exe = canonical_exe().map_err(|e| wrap(e, "could not get current exe"))?;
292+
let root_path = ctx.paths.root().as_os_str().to_string_lossy();
293+
let args = make_service_args(&root_path, &tunnel_args);
268294

269-
manager
270-
.register(
271-
current_exe,
272-
&[
273-
"--verbose",
274-
"--cli-data-dir",
275-
ctx.paths.root().as_os_str().to_string_lossy().as_ref(),
276-
"tunnel",
277-
"service",
278-
"internal-run",
279-
],
280-
)
281-
.await?;
295+
manager.register(current_exe, &args).await?;
282296
ctx.log.result(format!("Service successfully installed! You can use `{APPLICATION_NAME} tunnel service log` to monitor it, and `{APPLICATION_NAME} tunnel service uninstall` to remove it."));
283297
}
284298
TunnelServiceSubCommands::Uninstall => {
@@ -289,7 +303,10 @@ pub async fn service(
289303
}
290304
TunnelServiceSubCommands::InternalRun => {
291305
manager
292-
.run(ctx.paths.clone(), TunnelServiceContainer::new(ctx.args))
306+
.run(
307+
ctx.paths.clone(),
308+
TunnelServiceContainer::new(ctx.args, tunnel_args),
309+
)
293310
.await?;
294311
}
295312
}

0 commit comments

Comments
 (0)