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());