mirror of
https://github.com/nestriness/cdc-file-transfer.git
synced 2026-01-30 14:35:37 +02:00
[cdc_rsync] [cdc_stream] Remove SSH port argument (#41)
This CL removes the port arguments for both tools. The port argument can also be specified via the ssh-command and scp-command flags. In fact, if a port is specified by both port flags and ssh/scp commands, they interfere with each other. For ssh, the one specified in ssh-command wins. For scp, the one specified in scp-command wins. To fix this, one would have to parse scp-command and remove the port arg there. Or we could just remove the ssh-port arg. This is what this CL does. Note that if you need a custom port, it's very likely that you also have to define custom ssh and scp commands.
This commit is contained in:
@@ -135,14 +135,6 @@ void AssetStreamConfig::RegisterCommandLineFlags(lyra::command& cmd,
|
||||
.name("--dev-user-host")
|
||||
.help("Username and host to stream to. See also --dev-src-dir."));
|
||||
|
||||
dev_target_.ssh_port = RemoteUtil::kDefaultSshPort;
|
||||
cmd.add_argument(
|
||||
lyra::opt(dev_target_.ssh_port, "port")
|
||||
.name("--dev-ssh-port")
|
||||
.help("SSH port to use for the connection to the host, default: " +
|
||||
std::to_string(RemoteUtil::kDefaultSshPort) +
|
||||
". See also --dev-src-dir."));
|
||||
|
||||
cmd.add_argument(
|
||||
lyra::opt(dev_target_.ssh_command, "cmd")
|
||||
.name("--dev-ssh-command")
|
||||
@@ -245,7 +237,6 @@ std::string AssetStreamConfig::ToString() {
|
||||
<< session_cfg_.file_change_wait_duration_ms << std::endl;
|
||||
ss << "dev-src-dir = " << dev_src_dir_ << std::endl;
|
||||
ss << "dev-user-host = " << dev_target_.user_host << std::endl;
|
||||
ss << "dev-ssh-port = " << dev_target_.ssh_port << std::endl;
|
||||
ss << "dev-ssh-command = " << dev_target_.ssh_command
|
||||
<< std::endl;
|
||||
ss << "dev-scp-command = " << dev_target_.scp_command
|
||||
|
||||
@@ -36,13 +36,12 @@ LocalAssetsStreamManagerClient::LocalAssetsStreamManagerClient(
|
||||
LocalAssetsStreamManagerClient::~LocalAssetsStreamManagerClient() = default;
|
||||
|
||||
absl::Status LocalAssetsStreamManagerClient::StartSession(
|
||||
const std::string& src_dir, const std::string& user_host, uint16_t ssh_port,
|
||||
const std::string& src_dir, const std::string& user_host,
|
||||
const std::string& mount_dir, const std::string& ssh_command,
|
||||
const std::string& scp_command) {
|
||||
StartSessionRequest request;
|
||||
request.set_workstation_directory(src_dir);
|
||||
request.set_user_host(user_host);
|
||||
request.set_port(ssh_port);
|
||||
request.set_mount_dir(mount_dir);
|
||||
request.set_ssh_command(ssh_command);
|
||||
request.set_scp_command(scp_command);
|
||||
|
||||
@@ -41,12 +41,11 @@ class LocalAssetsStreamManagerClient {
|
||||
// Starting a second session to the same target will stop the first one.
|
||||
// |src_dir| is the Windows source directory to stream.
|
||||
// |user_host| is the Linux host, formatted as [user@:host].
|
||||
// |ssh_port| is the SSH port to use while connecting to the host.
|
||||
// |mount_dir| is the Linux target directory to stream to.
|
||||
// |ssh_command| is the ssh command and extra arguments to use.
|
||||
// |scp_command| is the scp command and extra arguments to use.
|
||||
absl::Status StartSession(const std::string& src_dir,
|
||||
const std::string& user_host, uint16_t ssh_port,
|
||||
const std::string& user_host,
|
||||
const std::string& mount_dir,
|
||||
const std::string& ssh_command,
|
||||
const std::string& scp_command);
|
||||
|
||||
@@ -219,12 +219,11 @@ LocalAssetsStreamManagerServiceImpl::GetTargetForStadia(
|
||||
|
||||
// Run 'ggp ssh init' to determine IP (host) and port.
|
||||
std::string instance_ip;
|
||||
uint16_t instance_port = 0;
|
||||
RETURN_IF_ERROR(InitSsh(*instance_id, *project_id, *organization_id,
|
||||
&instance_ip, &instance_port));
|
||||
ASSIGN_OR_RETURN(instance_ip,
|
||||
InitSsh(*instance_id, *project_id, *organization_id));
|
||||
|
||||
target.user_host = "cloudcast@" + instance_ip;
|
||||
target.ssh_port = instance_port;
|
||||
// Note: Port must be set with ssh_command (-p) and scp_command (-P).
|
||||
return target;
|
||||
}
|
||||
|
||||
@@ -235,9 +234,6 @@ SessionTarget LocalAssetsStreamManagerServiceImpl::GetTarget(
|
||||
target.mount_dir = request.mount_dir();
|
||||
target.ssh_command = request.ssh_command();
|
||||
target.scp_command = request.scp_command();
|
||||
target.ssh_port = request.port() > 0 && request.port() <= UINT16_MAX
|
||||
? static_cast<uint16_t>(request.port())
|
||||
: RemoteUtil::kDefaultSshPort;
|
||||
|
||||
*instance_id = absl::StrCat(target.user_host, ":", target.mount_dir);
|
||||
return target;
|
||||
@@ -257,13 +253,10 @@ metrics::RequestOrigin LocalAssetsStreamManagerServiceImpl::ConvertOrigin(
|
||||
}
|
||||
}
|
||||
|
||||
absl::Status LocalAssetsStreamManagerServiceImpl::InitSsh(
|
||||
absl::StatusOr<std::string> LocalAssetsStreamManagerServiceImpl::InitSsh(
|
||||
const std::string& instance_id, const std::string& project_id,
|
||||
const std::string& organization_id, std::string* instance_ip,
|
||||
uint16_t* instance_port) {
|
||||
const std::string& organization_id) {
|
||||
SdkUtil sdk_util;
|
||||
instance_ip->clear();
|
||||
*instance_port = 0;
|
||||
|
||||
ProcessStartInfo start_info;
|
||||
start_info.command = absl::StrFormat(
|
||||
@@ -305,22 +298,13 @@ absl::Status LocalAssetsStreamManagerServiceImpl::InitSsh(
|
||||
}
|
||||
|
||||
// Parse gamelet IP. Should be "Host: <instance_ip ip>".
|
||||
if (!ParseValue(output, "Host", instance_ip)) {
|
||||
std::string instance_ip;
|
||||
if (!ParseValue(output, "Host", &instance_ip)) {
|
||||
return MakeStatus("Failed to parse host from ggp ssh init response\n%s",
|
||||
output);
|
||||
}
|
||||
|
||||
// Parse ssh port. Should be "Port: <port>".
|
||||
std::string port_string;
|
||||
const bool result = ParseValue(output, "Port", &port_string);
|
||||
int int_port = atoi(port_string.c_str());
|
||||
if (!result || int_port == 0 || int_port <= 0 || int_port > UINT_MAX) {
|
||||
return MakeStatus("Failed to parse ssh port from ggp ssh init response\n%s",
|
||||
output);
|
||||
}
|
||||
|
||||
*instance_port = static_cast<uint16_t>(int_port);
|
||||
return absl::OkStatus();
|
||||
return instance_ip;
|
||||
}
|
||||
|
||||
} // namespace cdc_ft
|
||||
|
||||
@@ -93,11 +93,10 @@ class LocalAssetsStreamManagerServiceImpl final
|
||||
|
||||
// Initializes an ssh connection to a gamelet by calling 'ggp ssh init'.
|
||||
// |instance_id| must be set, |project_id|, |organization_id| are optional.
|
||||
// Returns |instance_ip| and |instance_port| (SSH port).
|
||||
absl::Status InitSsh(const std::string& instance_id,
|
||||
const std::string& project_id,
|
||||
const std::string& organization_id,
|
||||
std::string* instance_ip, uint16_t* instance_port);
|
||||
// Returns the instance's IP address.
|
||||
absl::StatusOr<std::string> InitSsh(const std::string& instance_id,
|
||||
const std::string& project_id,
|
||||
const std::string& organization_id);
|
||||
|
||||
const SessionConfig cfg_;
|
||||
SessionManager* const session_manager_;
|
||||
|
||||
@@ -47,11 +47,11 @@ Session::Session(std::string instance_id, const SessionTarget& target,
|
||||
mount_dir_(target.mount_dir),
|
||||
cfg_(std::move(cfg)),
|
||||
process_factory_(process_factory),
|
||||
remote_util_(cfg_.verbosity, cfg_.quiet, process_factory,
|
||||
remote_util_(target.user_host, cfg_.verbosity, cfg_.quiet,
|
||||
process_factory,
|
||||
/*forward_output_to_logging=*/true),
|
||||
metrics_recorder_(std::move(metrics_recorder)) {
|
||||
assert(metrics_recorder_);
|
||||
remote_util_.SetUserHostAndPort(target.user_host, target.ssh_port);
|
||||
if (!target.ssh_command.empty()) {
|
||||
remote_util_.SetSshCommand(target.ssh_command);
|
||||
}
|
||||
|
||||
@@ -36,8 +36,6 @@ class Process;
|
||||
struct SessionTarget {
|
||||
// SSH username and hostname of the remote target, formed as [user@]host.
|
||||
std::string user_host;
|
||||
// Port to use for SSH connections to the remote target.
|
||||
uint16_t ssh_port;
|
||||
// Ssh command to use to connect to the remote target.
|
||||
std::string ssh_command;
|
||||
// Scp command to use to copy files to the remote target.
|
||||
|
||||
@@ -72,20 +72,12 @@ void StartCommand::RegisterCommandLineFlags(lyra::command& cmd) {
|
||||
"asset stream service, default: " +
|
||||
std::to_string(SessionManagementServer::kDefaultServicePort)));
|
||||
|
||||
ssh_port_ = RemoteUtil::kDefaultSshPort;
|
||||
cmd.add_argument(
|
||||
lyra::opt(ssh_port_, "port")
|
||||
.name("--ssh-port")
|
||||
.help("Port to use while connecting to the remote instance being "
|
||||
"streamed to, default: " +
|
||||
std::to_string(RemoteUtil::kDefaultSshPort)));
|
||||
|
||||
path::GetEnv("CDC_SSH_COMMAND", &ssh_command_).IgnoreError();
|
||||
cmd.add_argument(
|
||||
lyra::opt(ssh_command_, "ssh_command")
|
||||
.name("--ssh-command")
|
||||
.help("Path and arguments of ssh command to use, e.g. "
|
||||
"\"C:\\path\\to\\ssh.exe -F config_file\". Can also be "
|
||||
"\"C:\\path\\to\\ssh.exe -F config_file -p 1234\". Can also be "
|
||||
"specified by the CDC_SSH_COMMAND environment variable."));
|
||||
|
||||
path::GetEnv("CDC_SCP_COMMAND", &scp_command_).IgnoreError();
|
||||
@@ -93,7 +85,7 @@ void StartCommand::RegisterCommandLineFlags(lyra::command& cmd) {
|
||||
lyra::opt(scp_command_, "scp_command")
|
||||
.name("--scp-command")
|
||||
.help("Path and arguments of scp command to use, e.g. "
|
||||
"\"C:\\path\\to\\scp.exe -F config_file\". Can also be "
|
||||
"\"C:\\path\\to\\scp.exe -F config_file -P 1234\". Can also be "
|
||||
"specified by the CDC_SCP_COMMAND environment variable."));
|
||||
|
||||
cmd.add_argument(lyra::arg(PosArgValidator(&src_dir_), "dir")
|
||||
@@ -116,9 +108,8 @@ absl::Status StartCommand::Run() {
|
||||
user_host_dir_, &user_host, &mount_dir));
|
||||
|
||||
LocalAssetsStreamManagerClient client(CreateChannel(service_port_));
|
||||
absl::Status status =
|
||||
client.StartSession(full_src_dir, user_host, ssh_port_, mount_dir,
|
||||
ssh_command_, scp_command_);
|
||||
absl::Status status = client.StartSession(full_src_dir, user_host, mount_dir,
|
||||
ssh_command_, scp_command_);
|
||||
|
||||
if (absl::IsUnavailable(status)) {
|
||||
LOG_DEBUG("StartSession status: %s", status.ToString());
|
||||
@@ -131,8 +122,8 @@ absl::Status StartCommand::Run() {
|
||||
// Recreate client. The old channel might still be in a transient failure
|
||||
// state.
|
||||
LocalAssetsStreamManagerClient new_client(CreateChannel(service_port_));
|
||||
status = new_client.StartSession(full_src_dir, user_host, ssh_port_,
|
||||
mount_dir, ssh_command_, scp_command_);
|
||||
status = new_client.StartSession(full_src_dir, user_host, mount_dir,
|
||||
ssh_command_, scp_command_);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -43,7 +43,6 @@ class StartCommand : public BaseCommand {
|
||||
|
||||
int verbosity_ = 0;
|
||||
uint16_t service_port_ = 0;
|
||||
uint16_t ssh_port_ = 0;
|
||||
std::string ssh_command_;
|
||||
std::string scp_command_;
|
||||
std::string src_dir_;
|
||||
|
||||
@@ -140,7 +140,6 @@ absl::Status StartServiceCommand::RunService() {
|
||||
request.set_workstation_directory(cfg_.dev_src_dir());
|
||||
request.set_user_host(cfg_.dev_target().user_host);
|
||||
request.set_mount_dir(cfg_.dev_target().mount_dir);
|
||||
request.set_port(cfg_.dev_target().ssh_port);
|
||||
request.set_ssh_command(cfg_.dev_target().ssh_command);
|
||||
request.set_scp_command(cfg_.dev_target().scp_command);
|
||||
localassetsstreammanager::StartSessionResponse response;
|
||||
|
||||
Reference in New Issue
Block a user