Cherrypick cl/230919088 and cl/231435617
Bug: 123894473
Test: atest acloud_test --host
Change-Id: I18afbcd794399adf1c2f2b274dd1ea689d30d685
diff --git a/internal/lib/android_compute_client.py b/internal/lib/android_compute_client.py
index 63b36c4..2c77cfb 100755
--- a/internal/lib/android_compute_client.py
+++ b/internal/lib/android_compute_client.py
@@ -238,8 +238,10 @@
gpu=None,
extra_disk_name=None,
labels=None,
- avd_spec=None):
+ avd_spec=None,
+ extra_scopes=None):
"""Create a gce instance with a gce image.
+
Args:
instance: String, instance name.
image_name: String, source image used to create this disk.
@@ -259,6 +261,8 @@
extra_disk_name: String,the name of the extra disk to attach.
labels: Dict, will be added to the instance's labels.
avd_spec: AVDSpec object that tells us what we're going to create.
+ extra_scopes: List, extra scopes (strings) to be passed to the
+ instance.
"""
self._CheckMachineSize()
disk_args = self._GetDiskArgs(instance, image_name)
@@ -293,7 +297,7 @@
super(AndroidComputeClient, self).CreateInstance(
instance, image_name, self._machine_type, metadata, self._network,
self._zone, disk_args, image_project, gpu, extra_disk_name,
- labels=labels)
+ labels=labels, extra_scopes=extra_scopes)
def CheckBootFailure(self, serial_out, instance):
"""Determine if serial output has indicated any boot failure.
diff --git a/internal/lib/android_compute_client_test.py b/internal/lib/android_compute_client_test.py
index 9b4bdca..f73913f 100644
--- a/internal/lib/android_compute_client_test.py
+++ b/internal/lib/android_compute_client_test.py
@@ -48,6 +48,7 @@
DPI = 160
X_RES = 720
Y_RES = 1280
+ EXTRA_SCOPES = None
def _GetFakeConfig(self):
"""Create a fake configuration object.
@@ -67,6 +68,7 @@
fake_cfg.orientation = self.ORIENTATION
fake_cfg.resolution = self.DEVICE_RESOLUTION
fake_cfg.metadata_variable = {self.METADATA[0]: self.METADATA[1]}
+ fake_cfg.extra_scopes = self.EXTRA_SCOPES
return fake_cfg
def setUp(self):
@@ -137,7 +139,7 @@
instance_name, self.IMAGE, self.MACHINE_TYPE,
expected_metadata, self.NETWORK, self.ZONE,
expected_disk_args, image_project, gpu, extra_disk_name,
- labels=labels)
+ labels=labels, extra_scopes=self.EXTRA_SCOPES)
# pylint: disable=invalid-name
def testCheckMachineSizeMeetsRequirement(self):
diff --git a/internal/lib/cvd_compute_client.py b/internal/lib/cvd_compute_client.py
index 2c06b29..920e807 100644
--- a/internal/lib/cvd_compute_client.py
+++ b/internal/lib/cvd_compute_client.py
@@ -61,7 +61,8 @@
def CreateInstance(self, instance, image_name, image_project,
build_target=None, branch=None, build_id=None,
kernel_branch=None, kernel_build_id=None,
- blank_data_disk_size_gb=None, avd_spec=None):
+ blank_data_disk_size_gb=None, avd_spec=None,
+ extra_scopes=None):
"""Create a cuttlefish instance given stable host image and build id.
Args:
@@ -76,6 +77,7 @@
kernel_build_id: Kernel build id, a string, e.g. "223051", "P280427"
blank_data_disk_size_gb: Size of the blank data disk in GB.
avd_spec: An AVDSpec instance.
+ extra_scopes: A list of extra scopes to be passed to the instance.
"""
self._CheckMachineSize()
@@ -169,4 +171,5 @@
machine_type=self._machine_type,
network=self._network,
zone=self._zone,
- labels=labels)
+ labels=labels,
+ extra_scopes=extra_scopes)
diff --git a/internal/lib/cvd_compute_client_test.py b/internal/lib/cvd_compute_client_test.py
index d154c0e..aea2579 100644
--- a/internal/lib/cvd_compute_client_test.py
+++ b/internal/lib/cvd_compute_client_test.py
@@ -50,6 +50,7 @@
EXTRA_DATA_DISK_SIZE_GB = 4
BOOT_DISK_SIZE_GB = 10
LAUNCH_ARGS = "--setupwizard_mode=REQUIRED"
+ EXTRA_SCOPES = ["scope1"]
def _GetFakeConfig(self):
"""Create a fake configuration object.
@@ -67,6 +68,7 @@
fake_cfg.metadata_variable = self.METADATA
fake_cfg.extra_data_disk_size_gb = self.EXTRA_DATA_DISK_SIZE_GB
fake_cfg.launch_args = self.LAUNCH_ARGS
+ fake_cfg.extra_scopes = self.EXTRA_SCOPES
return fake_cfg
def setUp(self):
@@ -112,7 +114,8 @@
self.cvd_compute_client.CreateInstance(
self.INSTANCE, self.IMAGE, self.IMAGE_PROJECT, self.TARGET,
self.BRANCH, self.BUILD_ID, self.KERNEL_BRANCH,
- self.KERNEL_BUILD_ID, self.EXTRA_DATA_DISK_SIZE_GB)
+ self.KERNEL_BUILD_ID, self.EXTRA_DATA_DISK_SIZE_GB,
+ extra_scopes=self.EXTRA_SCOPES)
mock_create.assert_called_with(
self.cvd_compute_client,
instance=self.INSTANCE,
@@ -123,7 +126,8 @@
machine_type=self.MACHINE_TYPE,
network=self.NETWORK,
zone=self.ZONE,
- labels={constants.LABEL_CREATE_BY: "fake_user"})
+ labels={constants.LABEL_CREATE_BY: "fake_user"},
+ extra_scopes=self.EXTRA_SCOPES)
#test use local image in the remote instance.
local_image_metadata = dict(expected_metadata)
@@ -148,7 +152,8 @@
self.cvd_compute_client.CreateInstance(
self.INSTANCE, self.IMAGE, self.IMAGE_PROJECT, self.TARGET, self.BRANCH,
self.BUILD_ID, self.KERNEL_BRANCH, self.KERNEL_BUILD_ID,
- self.EXTRA_DATA_DISK_SIZE_GB, fake_avd_spec)
+ self.EXTRA_DATA_DISK_SIZE_GB, fake_avd_spec,
+ extra_scopes=self.EXTRA_SCOPES)
expected_labels = {constants.LABEL_CREATE_BY: "fake_user"}
mock_create.assert_called_with(
@@ -161,7 +166,8 @@
machine_type=self.MACHINE_TYPE,
network=self.NETWORK,
zone=self.ZONE,
- labels=expected_labels)
+ labels=expected_labels,
+ extra_scopes=self.EXTRA_SCOPES)
if __name__ == "__main__":
diff --git a/internal/lib/gcompute_client.py b/internal/lib/gcompute_client.py
index f70a5ea..759fb65 100755
--- a/internal/lib/gcompute_client.py
+++ b/internal/lib/gcompute_client.py
@@ -1083,7 +1083,8 @@
image_project=None,
gpu=None,
extra_disk_name=None,
- labels=None):
+ labels=None,
+ extra_scopes=None):
"""Create a gce instance with a gce image.
Args:
@@ -1104,11 +1105,18 @@
https://cloud.google.com/compute/docs/gpus/add-gpus
extra_disk_name: String,the name of the extra disk to attach.
labels: Dict, will be added to the instance's labels.
+ extra_scopes: A list of extra scopes to be provided to the instance.
"""
disk_args = (disk_args
or self._GetDiskArgs(instance, image_name, image_project))
if extra_disk_name:
disk_args.extend(self._GetExtraDiskArgs(extra_disk_name, zone))
+
+ scopes = []
+ scopes.extend(self.DEFAULT_INSTANCE_SCOPE)
+ if extra_scopes:
+ scopes.extend(extra_scopes)
+
body = {
"machineType": self.GetMachineType(machine_type, zone)["selfLink"],
"name": instance,
@@ -1116,10 +1124,11 @@
"disks": disk_args,
"serviceAccounts": [{
"email": "default",
- "scopes": self.DEFAULT_INSTANCE_SCOPE
+ "scopes": scopes,
}],
}
+
if labels is not None:
body["labels"] = labels
if gpu:
diff --git a/internal/lib/gcompute_client_test.py b/internal/lib/gcompute_client_test.py
index f9ed0c7..5176306 100644
--- a/internal/lib/gcompute_client_test.py
+++ b/internal/lib/gcompute_client_test.py
@@ -65,6 +65,7 @@
"pxXR7I2YhynqovkEt/OXG4qWgvLEXGsWtSQs0CtCzqEVxz0Y9ECr7er4VdjSQxV"
"AaeLAsQsK9ROae8hMBFZ3//8zLVapBwpuffCu+fUoql9qeV9xagZcc9zj8XOUOW"
"ApiihqNL1111 test@test1.org")
+ EXTRA_SCOPES = ["scope1"]
def setUp(self):
"""Set up test."""
@@ -72,6 +73,7 @@
self.Patch(gcompute_client.ComputeClient, "InitResourceHandle")
fake_cfg = mock.MagicMock()
fake_cfg.project = PROJECT
+ fake_cfg.extra_scopes = self.EXTRA_SCOPES
self.compute_client = gcompute_client.ComputeClient(
fake_cfg, mock.MagicMock())
self.compute_client._service = mock.MagicMock()
@@ -530,6 +532,9 @@
extra_disk_name = "gce-x86-userdebug-2345-abcd-data"
expected_disk_args = [self._disk_args]
expected_disk_args.extend([{"fake_extra_arg": "fake_extra_value"}])
+ expected_scope = []
+ expected_scope.extend(self.compute_client.DEFAULT_INSTANCE_SCOPE)
+ expected_scope.extend(self.EXTRA_SCOPES)
expected_body = {
"machineType": self.MACHINE_TYPE_URL,
@@ -547,7 +552,7 @@
"disks": expected_disk_args,
"serviceAccounts": [
{"email": "default",
- "scopes": self.compute_client.DEFAULT_INSTANCE_SCOPE}
+ "scopes": expected_scope}
],
"metadata": {
"items": [{"key": self.METADATA[0],
@@ -562,7 +567,8 @@
metadata={self.METADATA[0]: self.METADATA[1]},
network=self.NETWORK,
zone=self.ZONE,
- extra_disk_name=extra_disk_name)
+ extra_disk_name=extra_disk_name,
+ extra_scopes=self.EXTRA_SCOPES)
resource_mock.insert.assert_called_with(
project=PROJECT, zone=self.ZONE, body=expected_body)
@@ -632,7 +638,8 @@
metadata={self.METADATA[0]: self.METADATA[1]},
network=self.NETWORK,
zone=self.ZONE,
- gpu=self.GPU)
+ gpu=self.GPU,
+ extra_scopes=None)
resource_mock.insert.assert_called_with(
project=PROJECT, zone=self.ZONE, body=expected_body)
diff --git a/internal/lib/goldfish_compute_client.py b/internal/lib/goldfish_compute_client.py
index be2209c..877eb3d 100644
--- a/internal/lib/goldfish_compute_client.py
+++ b/internal/lib/goldfish_compute_client.py
@@ -134,7 +134,8 @@
emulator_build_id=None,
blank_data_disk_size_gb=None,
gpu=None,
- avd_spec=None):
+ avd_spec=None,
+ extra_scopes=None):
"""Create a goldfish instance given a stable host image and a build id.
Args:
@@ -151,6 +152,7 @@
gpu: String, GPU that should be attached to the instance, or None of no
acceleration is needed. e.g. "nvidia-tesla-k80"
avd_spec: An AVDSpec instance.
+ extra_scopes: A list of extra scopes to be passed to the instance.
"""
self._CheckMachineSize()
@@ -221,4 +223,5 @@
network=self._network,
zone=self._zone,
gpu=gpu,
- labels=labels)
+ labels=labels,
+ extra_scopes=extra_scopes)
diff --git a/internal/lib/goldfish_compute_client_test.py b/internal/lib/goldfish_compute_client_test.py
index 33f16e7..fcdf085 100644
--- a/internal/lib/goldfish_compute_client_test.py
+++ b/internal/lib/goldfish_compute_client_test.py
@@ -44,6 +44,7 @@
EXTRA_DATA_DISK_SIZE_GB = 4
BOOT_DISK_SIZE_GB = 10
GPU = "nvidia-tesla-k80"
+ EXTRA_SCOPES = "scope1"
def _GetFakeConfig(self):
"""Create a fake configuration object.
@@ -60,6 +61,7 @@
x=self.X_RES, y=self.Y_RES, dpi=self.DPI)
fake_cfg.metadata_variable = self.METADATA
fake_cfg.extra_data_disk_size_gb = self.EXTRA_DATA_DISK_SIZE_GB
+ fake_cfg.extra_scopes = self.EXTRA_SCOPES
return fake_cfg
def setUp(self):
@@ -112,7 +114,8 @@
self.goldfish_compute_client.CreateInstance(
self.INSTANCE, self.IMAGE, self.IMAGE_PROJECT, self.TARGET,
self.BRANCH, self.BUILD_ID, self.EMULATOR_BRANCH,
- self.EMULATOR_BUILD_ID, self.EXTRA_DATA_DISK_SIZE_GB, self.GPU)
+ self.EMULATOR_BUILD_ID, self.EXTRA_DATA_DISK_SIZE_GB, self.GPU,
+ extra_scopes=self.EXTRA_SCOPES)
# pylint: disable=no-member
gcompute_client.ComputeClient.CreateInstance.assert_called_with(
@@ -126,7 +129,8 @@
network=self.NETWORK,
zone=self.ZONE,
gpu=self.GPU,
- labels=expected_labels)
+ labels=expected_labels,
+ extra_scopes=self.EXTRA_SCOPES)
if __name__ == "__main__":