From 8a4a900f93a704f18d5489b682508840a8cda179 Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Tue, 30 Jan 2024 16:07:49 +0100 Subject: just-mrrc: support remote-execution properties While just-mr does not use remote-execution properties, it is still useful to have those as a separate entry in the rc file. With rc-file delegation, this gives committed rc files an easy way to specify the image to be used without having to set all the remaining arguments for the various just subcommands in "just args". --- src/other_tools/just_mr/cli.hpp | 5 +++++ src/other_tools/just_mr/launch.cpp | 11 +++++++++++ src/other_tools/just_mr/launch.hpp | 1 + src/other_tools/just_mr/main.cpp | 1 + src/other_tools/just_mr/rc.cpp | 24 ++++++++++++++++++++++++ src/other_tools/just_mr/utils.hpp | 27 ++++++++++++++++++--------- 6 files changed, 60 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/other_tools/just_mr/cli.hpp b/src/other_tools/just_mr/cli.hpp index bcd5302a..1a77bc62 100644 --- a/src/other_tools/just_mr/cli.hpp +++ b/src/other_tools/just_mr/cli.hpp @@ -92,6 +92,10 @@ struct MultiRepoRemoteAuthArguments { std::optional tls_client_key{std::nullopt}; }; +struct ForwardOnlyArguments { + std::vector remote_execution_properties{}; +}; + enum class SubCommand { kUnknown, kMRVersion, @@ -112,6 +116,7 @@ struct CommandLineArguments { MultiRepoUpdateArguments update; MultiRepoJustSubCmdsArguments just_cmd; MultiRepoRemoteAuthArguments auth; + ForwardOnlyArguments launch_fwd; }; static inline void SetupMultiRepoCommonArguments( diff --git a/src/other_tools/just_mr/launch.cpp b/src/other_tools/just_mr/launch.cpp index f8f14659..7a7975e7 100644 --- a/src/other_tools/just_mr/launch.cpp +++ b/src/other_tools/just_mr/launch.cpp @@ -35,6 +35,7 @@ auto CallJust(std::optional const& config_file, MultiRepoJustSubCmdsArguments const& just_cmd_args, MultiRepoLogArguments const& log_args, MultiRepoRemoteAuthArguments const& auth_args, + ForwardOnlyArguments const& launch_fwd, bool forward_build_root, std::string multi_repo_tool_name) -> int { // check if subcmd_name can be taken from additional args @@ -50,6 +51,7 @@ auto CallJust(std::optional const& config_file, bool use_launcher{false}; bool supports_defines{false}; bool supports_remote{false}; + bool supports_remote_properties{false}; bool supports_serve{false}; bool supports_dispatch{false}; bool supports_cacert{false}; @@ -89,6 +91,8 @@ auto CallJust(std::optional const& config_file, use_launcher = kKnownJustSubcommands.at(*subcommand).launch; supports_defines = kKnownJustSubcommands.at(*subcommand).defines; supports_remote = kKnownJustSubcommands.at(*subcommand).remote; + supports_remote_properties = + kKnownJustSubcommands.at(*subcommand).remote_props; supports_serve = kKnownJustSubcommands.at(*subcommand).serve; supports_dispatch = kKnownJustSubcommands.at(*subcommand).dispatch; supports_cacert = kKnownJustSubcommands.at(*subcommand).cacert; @@ -190,6 +194,13 @@ auto CallJust(std::optional const& config_file, cmd.emplace_back(auth_args.tls_client_key->string()); } } + // forward-only arguments, still to come before the just-arguments + if (supports_remote_properties) { + for (auto const& prop : launch_fwd.remote_execution_properties) { + cmd.emplace_back("--remote-execution-property"); + cmd.emplace_back(prop); + } + } // add args read from just-mrrc if (subcommand and just_cmd_args.just_args.contains(*subcommand)) { for (auto const& subcmd_arg : just_cmd_args.just_args.at(*subcommand)) { diff --git a/src/other_tools/just_mr/launch.hpp b/src/other_tools/just_mr/launch.hpp index 11559ffe..0560f42e 100644 --- a/src/other_tools/just_mr/launch.hpp +++ b/src/other_tools/just_mr/launch.hpp @@ -28,6 +28,7 @@ MultiRepoJustSubCmdsArguments const& just_cmd_args, MultiRepoLogArguments const& log_args, MultiRepoRemoteAuthArguments const& auth_args, + ForwardOnlyArguments const& launch_fwd, bool forward_build_root, std::string multi_repo_tool_name) -> int; diff --git a/src/other_tools/just_mr/main.cpp b/src/other_tools/just_mr/main.cpp index e42f5eca..2d1c7328 100644 --- a/src/other_tools/just_mr/main.cpp +++ b/src/other_tools/just_mr/main.cpp @@ -333,6 +333,7 @@ auto main(int argc, char* argv[]) -> int { arguments.just_cmd, arguments.log, arguments.auth, + arguments.launch_fwd, forward_build_root, my_name); } diff --git a/src/other_tools/just_mr/rc.cpp b/src/other_tools/just_mr/rc.cpp index 209e4be6..8985c958 100644 --- a/src/other_tools/just_mr/rc.cpp +++ b/src/other_tools/just_mr/rc.cpp @@ -359,6 +359,30 @@ namespace { clargs->just_cmd.just_args[cmd_name] = std::move(args); } } + // read remote-execution properties, used for extending the launch + // command-line (not settable on just-mr's command line). + auto re_props = rc_config["remote-execution properties"]; + if (re_props.IsNotNull()) { + if (not re_props->IsList()) { + Logger::Log(LogLevel::Error, + "Configuration-file provided remote-execution " + "properties have to be a list of strings, but found {}", + re_props->ToString()); + std::exit(kExitConfigError); + } + for (auto const& entry : re_props->List()) { + if (not entry->IsString()) { + Logger::Log( + LogLevel::Error, + "Configuration-file provided remote-execution properties " + "have to be a list of strings, but found entry {}", + entry->ToString()); + std::exit(kExitConfigError); + } + clargs->launch_fwd.remote_execution_properties.emplace_back( + entry->String()); + } + } // read default for local launcher if (not clargs->common.local_launcher) { auto launcher = rc_config["local launcher"]; diff --git a/src/other_tools/just_mr/utils.hpp b/src/other_tools/just_mr/utils.hpp index fa7c82b7..36a03ddf 100644 --- a/src/other_tools/just_mr/utils.hpp +++ b/src/other_tools/just_mr/utils.hpp @@ -45,15 +45,16 @@ std::vector const kTakeOver = {"bindings", "expression_file_name"}; struct JustSubCmdFlags { - bool config; // requires setup - bool build_root; // supports the local build root arg - bool launch; // supports the local launcher arg - bool defines; // supports defines arg - bool remote; // supports remote exec args - bool serve; // supports a serve endpoint - bool dispatch; // supports dispatching of the remote-execution endpoint - bool cacert; // supports CA cert arg - bool client_auth; // supports client auth args + bool config; // requires setup + bool build_root; // supports the local build root arg + bool launch; // supports the local launcher arg + bool defines; // supports defines arg + bool remote; // supports remote exec args + bool remote_props; // supports remote-execution properties + bool serve; // supports a serve endpoint + bool dispatch; // supports dispatching of the remote-execution endpoint + bool cacert; // supports CA cert arg + bool client_auth; // supports client auth args }; // ordered, so that we have replicability @@ -64,6 +65,7 @@ std::map const kKnownJustSubcommands{ .launch = false, .defines = false, .remote = false, + .remote_props = false, .serve = false, .dispatch = false, .cacert = false, @@ -74,6 +76,7 @@ std::map const kKnownJustSubcommands{ .launch = false, .defines = true, .remote = false, + .remote_props = false, .serve = false, .dispatch = false, .cacert = false, @@ -84,6 +87,7 @@ std::map const kKnownJustSubcommands{ .launch = false, .defines = true, .remote = true, + .remote_props = true, .serve = true, .dispatch = true, .cacert = false, @@ -94,6 +98,7 @@ std::map const kKnownJustSubcommands{ .launch = true, .defines = true, .remote = true, + .remote_props = true, .serve = true, .dispatch = true, .cacert = true, @@ -104,6 +109,7 @@ std::map const kKnownJustSubcommands{ .launch = true, .defines = true, .remote = true, + .remote_props = true, .serve = true, .dispatch = true, .cacert = true, @@ -114,6 +120,7 @@ std::map const kKnownJustSubcommands{ .launch = true, .defines = true, .remote = true, + .remote_props = true, .serve = true, .dispatch = true, .cacert = true, @@ -124,6 +131,7 @@ std::map const kKnownJustSubcommands{ .launch = false, .defines = false, .remote = true, + .remote_props = false, .serve = false, .dispatch = false, .cacert = true, @@ -134,6 +142,7 @@ std::map const kKnownJustSubcommands{ .launch = false, .defines = false, .remote = false, + .remote_props = false, .serve = false, .dispatch = false, .cacert = false, -- cgit v1.2.3