diff options
author | Wei-chung Hsu <weihsu@google.com> | 2024-01-23 11:43:21 -0800 |
---|---|---|
committer | Wei-chung Hsu <weihsu@google.com> | 2024-01-25 06:31:40 +0000 |
commit | 70921dc34d0c06b760159a62f43258ab2ec7fd06 (patch) | |
tree | 50f2c688f6c434c345bef42cb086942e06205b2e | |
parent | 0b5b749d311989d260d43f3428b1b3a09495c038 (diff) | |
download | acloud-70921dc34d0c06b760159a62f43258ab2ec7fd06.tar.gz |
Changed the hard-code fixed ID=1 to use the config.json ID when it is in HOME directory.
Bug: b/320754554
Test: launch_cvd --daemon
launch_cvd --daemon
acloud-dev list
acloud-dev delete --all
Change-Id: Ib8c274a94f517e024b07b699d7fe25a38e966875
-rw-r--r-- | internal/lib/cvd_runtime_config.py | 16 | ||||
-rw-r--r-- | list/instance.py | 26 |
2 files changed, 36 insertions, 6 deletions
diff --git a/internal/lib/cvd_runtime_config.py b/internal/lib/cvd_runtime_config.py index 4f4b4478..14604873 100644 --- a/internal/lib/cvd_runtime_config.py +++ b/internal/lib/cvd_runtime_config.py @@ -36,7 +36,7 @@ _RE_LOCAL_INSTANCE_ID = re.compile(r".+(?:local-instance-|instance_home_)" r"(?P<ins_id>\d+).+") -def _GetIdFromInstanceDirStr(instance_dir): +def _GetIdFromInstanceDirStr(instance_dir, config_dict): """Look for instance id from the path of instance dir. Args: @@ -51,7 +51,15 @@ def _GetIdFromInstanceDirStr(instance_dir): # To support the device which is not created by acloud. if os.path.expanduser("~") in instance_dir: - return "1" + if config_dict: + instances = config_dict.get(_CFG_KEY_INSTANCES) + if instances: + return min(instances.keys()) + else: + # Old runtime config doesn't have "instances" information. + return "1" + else: + return "1" return None @@ -116,10 +124,10 @@ class CvdRuntimeConfig(): if not config_path and not raw_data: raise errors.ConfigError("No cuttlefish config found!") self._config_path = config_path - self._instance_id = "1" if raw_data else _GetIdFromInstanceDirStr( - config_path) self._config_dict = self._GetCuttlefishRuntimeConfig(config_path, raw_data) + self._instance_id = "1" if raw_data else _GetIdFromInstanceDirStr( + config_path, self._config_dict) self._instances = self._config_dict.get(_CFG_KEY_INSTANCES) # Old runtime config doesn't have "instances" information. self._instance_ids = list(self._instances.keys()) if self._instances else ["1"] diff --git a/list/instance.py b/list/instance.py index d6fa6fef..0372a30c 100644 --- a/list/instance.py +++ b/list/instance.py @@ -52,6 +52,7 @@ from acloud.internal.lib.gcompute_client import GetGCEHostName logger = logging.getLogger(__name__) _ACLOUD_CVD_TEMP = os.path.join(tempfile.gettempdir(), "acloud_cvd_temp") +_CFG_KEY_INSTANCES = "instances" _CVD_RUNTIME_FOLDER_NAME = "cuttlefish_runtime" _CVD_BIN = "cvd" _CVD_BIN_FOLDER = "host_bins/bin" @@ -162,6 +163,20 @@ def GetLocalInstanceConfig(local_instance_id): return cfg_path return None +def GetInstanceId(cfg_path): + """Get the cuttlefish ID from config file. + + Args: + cfg_path: Path to config file. + + Return: + Cuttlefish ID. + """ + with open(cfg_path, "r") as cf_config: + config_dict = json.load(cf_config) + instances = config_dict.get(_CFG_KEY_INSTANCES) + ins_id = int(min(instances.keys())) if instances else 1 + return ins_id def GetAllLocalInstanceConfigs(): """Get all cuttlefish runtime configs from the known locations. @@ -171,18 +186,25 @@ def GetAllLocalInstanceConfigs(): path. """ id_cfg_pairs = [] + id_set = set() # Check if any instance config is under home folder. cfg_path = GetDefaultCuttlefishConfig() if cfg_path: - id_cfg_pairs.append((1, cfg_path)) + ins_id = GetInstanceId(cfg_path) + + # skip redundant id in HOME and /tmp + if ins_id not in id_set: + id_set.add(ins_id) + id_cfg_pairs.append((ins_id, cfg_path)) # Check if any instance config is under acloud cvd temp folder. if os.path.exists(_ACLOUD_CVD_TEMP): for ins_name in os.listdir(_ACLOUD_CVD_TEMP): ins_id = GetLocalInstanceIdByName(ins_name) - if ins_id is not None: + if ins_id is not None and ins_id not in id_set: cfg_path = GetLocalInstanceConfig(ins_id) if cfg_path: + id_set.add(ins_id) id_cfg_pairs.append((ins_id, cfg_path)) return id_cfg_pairs |