Make the overlay image part of the instance-specific runtime
This removes the overlay_image argument as it is explicitly
instance-specific now.
Test: launch_cvd
Bug: 145247175
Change-Id: I14e2c0059ffbe2ee67645b1a099f6b78a50ec09a
diff --git a/host/commands/assemble_cvd/flags.cc b/host/commands/assemble_cvd/flags.cc
index 09c1e09..2711792 100644
--- a/host/commands/assemble_cvd/flags.cc
+++ b/host/commands/assemble_cvd/flags.cc
@@ -94,7 +94,6 @@
"Location of the misc partition image. If the image does not "
"exist, a blank new misc partition image is created.");
DEFINE_string(composite_disk, "", "Location of the composite disk image. ");
-DEFINE_string(overlay_disk, "", "Location of the overlay disk.");
DEFINE_bool(deprecated_boot_completed, false, "Log boot completed message to"
" host kernel. This is only used during transition of our clients."
@@ -205,9 +204,6 @@
std::string default_composite_disk = FLAGS_system_image_dir + "/composite.img";
SetCommandLineOptionWithMode("composite_disk", default_composite_disk.c_str(),
google::FlagSettingMode::SET_FLAGS_DEFAULT);
- std::string default_overlay_disk = FLAGS_system_image_dir + "/overlay.img";
- SetCommandLineOptionWithMode("overlay_disk", default_overlay_disk.c_str(),
- google::FlagSettingMode::SET_FLAGS_DEFAULT);
std::string default_vendor_boot_image = FLAGS_system_image_dir
+ "/vendor_boot.img";
SetCommandLineOptionWithMode("vendor_boot_image",
@@ -246,6 +242,8 @@
vsoc::CuttlefishConfig tmp_config_obj;
tmp_config_obj.set_assembly_dir(FLAGS_assembly_dir);
auto instance = tmp_config_obj.ForDefaultInstance();
+ auto const_instance = const_cast<const vsoc::CuttlefishConfig&>(tmp_config_obj)
+ .ForDefaultInstance();
// Set this first so that calls to PerInstancePath below are correct
instance.set_instance_dir(FLAGS_instance_dir);
if (!vm_manager::VmManager::IsValidName(FLAGS_vm_manager)) {
@@ -312,7 +310,7 @@
tmp_config_obj.set_guest_force_normal_boot(FLAGS_guest_force_normal_boot);
tmp_config_obj.set_extra_kernel_cmdline(FLAGS_extra_kernel_cmdline);
- tmp_config_obj.set_virtual_disk_paths({FLAGS_overlay_disk});
+ instance.set_virtual_disk_paths({const_instance.PerInstancePath("overlay.img")});
tmp_config_obj.set_ramdisk_image_path(ramdisk_path);
tmp_config_obj.set_vendor_ramdisk_image_path(vendor_ramdisk_path);
@@ -597,9 +595,6 @@
LOG(ERROR) << "Could not ensure " << FLAGS_composite_disk << " exists";
return false;
}
- if (FLAGS_overlay_disk.empty()) {
- LOG(FATAL) << "asked to create overlay disk, but path was empty";
- }
if (FLAGS_vm_manager == vm_manager::CrosvmManager::name()) {
auto existing_size = cvd::FileSize(FLAGS_data_image);
auto available_space = AvailableSpaceAtPath(FLAGS_data_image);
@@ -612,8 +607,9 @@
}
std::string header_path = config.AssemblyPath("gpt_header.img");
std::string footer_path = config.AssemblyPath("gpt_footer.img");
+ auto overlay_path = config.ForDefaultInstance().PerInstancePath("overlay.img");
create_composite_disk_and_overlay(config.crosvm_binary(), disk_config(), header_path,
- footer_path, FLAGS_composite_disk, FLAGS_overlay_disk);
+ footer_path, FLAGS_composite_disk, overlay_path);
} else {
auto existing_size = cvd::FileSize(FLAGS_composite_disk);
auto available_space = AvailableSpaceAtPath(FLAGS_composite_disk);
@@ -776,8 +772,9 @@
}
}
+ auto instance = config->ForDefaultInstance();
// Check that the files exist
- for (const auto& file : config->virtual_disk_paths()) {
+ for (const auto& file : instance.virtual_disk_paths()) {
if (!file.empty() && !cvd::FileHasContent(file.c_str())) {
LOG(ERROR) << "File not found: " << file;
exit(cvd::kCuttlefishConfigurationInitError);
diff --git a/host/libs/config/cuttlefish_config.cpp b/host/libs/config/cuttlefish_config.cpp
index 818cb6d..098fd87 100644
--- a/host/libs/config/cuttlefish_config.cpp
+++ b/host/libs/config/cuttlefish_config.cpp
@@ -338,21 +338,21 @@
SetPath(kVendorRamdiskImagePath, vendor_ramdisk_image_path);
}
-std::vector<std::string> CuttlefishConfig::virtual_disk_paths() const {
+std::vector<std::string> CuttlefishConfig::InstanceSpecific::virtual_disk_paths() const {
std::vector<std::string> virtual_disks;
- auto virtual_disks_json_obj = (*dictionary_)[kVirtualDiskPaths];
+ auto virtual_disks_json_obj = (*Dictionary())[kVirtualDiskPaths];
for (const auto& disk : virtual_disks_json_obj) {
virtual_disks.push_back(disk.asString());
}
return virtual_disks;
}
-void CuttlefishConfig::set_virtual_disk_paths(
+void CuttlefishConfig::MutableInstanceSpecific::set_virtual_disk_paths(
const std::vector<std::string>& virtual_disk_paths) {
Json::Value virtual_disks_json_obj(Json::arrayValue);
for (const auto& arg : virtual_disk_paths) {
virtual_disks_json_obj.append(arg);
}
- (*dictionary_)[kVirtualDiskPaths] = virtual_disks_json_obj;
+ (*Dictionary())[kVirtualDiskPaths] = virtual_disks_json_obj;
}
std::string CuttlefishConfig::InstanceSpecific::kernel_log_pipe_name() const {
diff --git a/host/libs/config/cuttlefish_config.h b/host/libs/config/cuttlefish_config.h
index 2ee6135..92863d4 100644
--- a/host/libs/config/cuttlefish_config.h
+++ b/host/libs/config/cuttlefish_config.h
@@ -135,9 +135,6 @@
void set_vendor_ramdisk_image_path(const std::string&
vendor_ramdisk_image_path);
- std::vector<std::string> virtual_disk_paths() const;
- void set_virtual_disk_paths(const std::vector<std::string>& disk_paths);
-
bool deprecated_boot_completed() const;
void set_deprecated_boot_completed(bool deprecated_boot_completed);
@@ -290,6 +287,7 @@
int vsock_guest_cid() const;
std::string uuid() const;
std::string instance_name() const;
+ std::vector<std::string> virtual_disk_paths() const;
// Returns the path to a file with the given name in the instance directory..
std::string PerInstancePath(const char* file_name) const;
@@ -344,6 +342,7 @@
void set_vsock_guest_cid(int vsock_guest_cid);
void set_uuid(const std::string& uuid);
void set_instance_dir(const std::string& instance_dir);
+ void set_virtual_disk_paths(const std::vector<std::string>& disk_paths);
};
private:
diff --git a/host/libs/vm_manager/crosvm_manager.cpp b/host/libs/vm_manager/crosvm_manager.cpp
index 5674a21..8a2bdc0 100644
--- a/host/libs/vm_manager/crosvm_manager.cpp
+++ b/host/libs/vm_manager/crosvm_manager.cpp
@@ -122,7 +122,7 @@
crosvm_cmd.AddParameter("--mem=", config_->memory_mb());
crosvm_cmd.AddParameter("--cpus=", config_->cpus());
crosvm_cmd.AddParameter("--params=", kernel_cmdline_);
- for (const auto& disk : config_->virtual_disk_paths()) {
+ for (const auto& disk : instance.virtual_disk_paths()) {
crosvm_cmd.AddParameter("--rwdisk=", disk);
}
crosvm_cmd.AddParameter("--socket=", GetControlSocketPath(config_));
diff --git a/host/libs/vm_manager/qemu_manager.cpp b/host/libs/vm_manager/qemu_manager.cpp
index 643ffc5..af15f0d 100644
--- a/host/libs/vm_manager/qemu_manager.cpp
+++ b/host/libs/vm_manager/qemu_manager.cpp
@@ -140,7 +140,7 @@
LogAndSetEnv("gdb_flag", config_->gdb_flag());
LogAndSetEnv("ramdisk_image_path", config_->final_ramdisk_path());
LogAndSetEnv("kernel_cmdline", kernel_cmdline_);
- LogAndSetEnv("virtual_disk_paths", JoinString(config_->virtual_disk_paths(),
+ LogAndSetEnv("virtual_disk_paths", JoinString(instance.virtual_disk_paths(),
";"));
LogAndSetEnv("wifi_tap_name", instance.wifi_tap_name());
LogAndSetEnv("mobile_tap_name", instance.mobile_tap_name());