aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWei-chung Hsu <weihsu@google.com>2024-01-23 11:43:21 -0800
committerWei-chung Hsu <weihsu@google.com>2024-01-25 06:31:40 +0000
commit70921dc34d0c06b760159a62f43258ab2ec7fd06 (patch)
tree50f2c688f6c434c345bef42cb086942e06205b2e
parent0b5b749d311989d260d43f3428b1b3a09495c038 (diff)
downloadacloud-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.py16
-rw-r--r--list/instance.py26
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