Support --pet-name for cvd acloud
Per discussion with Ram, we are adding --pet-name flag to cvd acloud.
Bug: 265201102
Test: acloud create --local-instance --local-image --pet-name=Foo-Bar
Test: acloud create --local-instance --local-image
Change-Id: I92d9cff73287368c7df0e8ed818bcf6e67145812
diff --git a/host/commands/cvd/acloud/Android.bp b/host/commands/cvd/acloud/Android.bp
index bea3a56..89e19a5 100644
--- a/host/commands/cvd/acloud/Android.bp
+++ b/host/commands/cvd/acloud/Android.bp
@@ -24,8 +24,9 @@
"config.cpp",
],
static_libs: [
- "libprotobuf-cpp-full",
"libcuttlefish_launch_cvd_proto",
+ "libcvd_selector",
+ "libprotobuf-cpp-full",
],
defaults: ["cvd_lib_defaults"],
}
diff --git a/host/commands/cvd/acloud/converter.cpp b/host/commands/cvd/acloud/converter.cpp
index bc67252..66e5c09 100644
--- a/host/commands/cvd/acloud/converter.cpp
+++ b/host/commands/cvd/acloud/converter.cpp
@@ -39,6 +39,7 @@
#include "host/commands/cvd/command_sequence.h"
#include "host/commands/cvd/common_utils.h"
#include "host/commands/cvd/instance_lock.h" // TempDir()
+#include "host/commands/cvd/selector/instance_database_utils.h"
#include "host/commands/cvd/selector/selector_constants.h"
#include "host/commands/cvd/server_client.h"
#include "host/commands/cvd/server_command/utils.h"
@@ -103,6 +104,7 @@
public:
INJECT(ConvertAcloudCreateCommandImpl()) {}
~ConvertAcloudCreateCommandImpl() override = default;
+
Result<ConvertedAcloudCreateCommand> Convert(
const RequestWithStdio& request) {
auto arguments = ParseInvocation(request.Message()).arguments;
@@ -382,6 +384,16 @@
return true;
}));
+ std::optional<std::string> pet_name;
+ Flag pet_name_gflag = GflagsCompatFlag("pet-name");
+ flags.emplace_back(
+ GflagsCompatFlag("pet-name")
+ .Getter([&pet_name]() { return (pet_name ? *pet_name : ""); })
+ .Setter([&pet_name](const FlagMatch& match) {
+ pet_name = match.value;
+ return true;
+ }));
+
CF_EXPECT(ParseFlags(flags, arguments));
CF_EXPECT(arguments.size() == 0,
"Unrecognized arguments:'"
@@ -620,7 +632,23 @@
start_command.mutable_selector_opts()->add_args(
std::string("--") + selector::SelectorFlags::kDisableDefaultGroup +
"=true");
- static constexpr char kAndroidProductOut[] = "ANDROID_PRODUCT_OUT";
+ if (pet_name) {
+ const auto [group_name, instance_name] =
+ CF_EXPECT(selector::BreakDeviceName(*pet_name),
+ *pet_name << " must be a group name followed by - "
+ << "followed by an instance name.");
+ std::string group_name_arg = "--";
+ group_name_arg.append(selector::SelectorFlags::kGroupName)
+ .append("=")
+ .append(group_name);
+ std::string instance_name_arg = "--";
+ instance_name_arg.append(selector::SelectorFlags::kInstanceName)
+ .append("=")
+ .append(instance_name);
+ start_command.mutable_selector_opts()->add_args(group_name_arg);
+ start_command.mutable_selector_opts()->add_args(instance_name_arg);
+ }
+
auto& start_env = *start_command.mutable_env();
if (local_image) {
start_env[kAndroidHostOut] = host_artifacts_path->second;
diff --git a/host/commands/cvd/server_command/Android.bp b/host/commands/cvd/server_command/Android.bp
index a006b80..7bb0be1 100644
--- a/host/commands/cvd/server_command/Android.bp
+++ b/host/commands/cvd/server_command/Android.bp
@@ -53,6 +53,7 @@
],
static_libs: [
"libcvd_acloud",
+ "libcvd_selector",
],
defaults: ["cvd_lib_defaults"],
}