Skip to content

Commit 8e63c07

Browse files
authored
Fix cloud_build_machine_type option (#39342)
1 parent 0d1f25d commit 8e63c07

2 files changed

Lines changed: 42 additions & 1 deletion

File tree

sdks/python/apache_beam/runners/portability/sdk_container_builder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ def _invoke_docker_build_and_push(self, container_image_name):
243243
build = cloud_build_types.Build()
244244
if self._cloud_build_machine_type:
245245
build.options = cloud_build_types.BuildOptions()
246-
build.options.machineType = self._cloud_build_machine_type
246+
build.options.machine_type = self._cloud_build_machine_type
247247
build.steps = []
248248
step = cloud_build_types.BuildStep()
249249
step.name = 'quay.io/buildah/stable:latest'

sdks/python/apache_beam/runners/portability/sdk_container_builder_test.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,18 @@
2121

2222
import gc
2323
import logging
24+
import tempfile
2425
import unittest
2526
import unittest.mock
2627

2728
from apache_beam.options import pipeline_options
2829
from apache_beam.runners.portability import sdk_container_builder
2930

31+
try:
32+
from google.cloud.devtools import cloudbuild_v1
33+
except ImportError:
34+
cloudbuild_v1 = None
35+
3036

3137
class SdkContainerBuilderTest(unittest.TestCase):
3238
def tearDown(self):
@@ -120,6 +126,41 @@ def test_container_image_name_uses_forward_slashes(self):
120126
f' got: {container_image_name}'
121127
)
122128

129+
@unittest.skipIf(
130+
cloudbuild_v1 is None, 'GCP Cloud Build dependencies are not installed')
131+
def test_cloud_builder_assign_machine_type(self):
132+
"""Verify Cloud Build machine_type is correctly set on BuildOptions."""
133+
from google.cloud.devtools.cloudbuild_v1 import types as cloud_build_types
134+
135+
with tempfile.TemporaryDirectory() as temp_dir:
136+
options = pipeline_options.PipelineOptions([
137+
'--project=test-project',
138+
'--temp_location=gs://test-bucket/temp',
139+
'--cloud_build_machine_type=n1-highcpu-8',
140+
'--no_auth', # Avoid fetching credential for unit testing
141+
])
142+
builder = sdk_container_builder._SdkContainerImageCloudBuilder(options)
143+
builder._temp_src_dir = temp_dir
144+
builder._upload_to_gcs = unittest.mock.MagicMock()
145+
146+
mock_cloudbuild_client = unittest.mock.MagicMock()
147+
mock_build_response = unittest.mock.MagicMock()
148+
mock_build_response.metadata.build.id = 'dummy-id'
149+
mock_build_response.metadata.build.log_url = 'http://dummy.url'
150+
mock_cloudbuild_client.create_build.return_value = mock_build_response
151+
mock_cloudbuild_client.get_build.return_value = cloud_build_types.Build(
152+
status=cloud_build_types.Build.Status.SUCCESS)
153+
builder._cloudbuild_client = mock_cloudbuild_client
154+
155+
builder._invoke_docker_build_and_push(
156+
'gcr.io/test-project/prebuilt_beam_sdk:latest')
157+
158+
mock_cloudbuild_client.create_build.assert_called_once()
159+
create_build_request = mock_cloudbuild_client.create_build.call_args[0][0]
160+
self.assertEqual(
161+
create_build_request.build.options.machine_type,
162+
cloud_build_types.BuildOptions.MachineType.N1_HIGHCPU_8)
163+
123164

124165
if __name__ == '__main__':
125166
# Run the tests.

0 commit comments

Comments
 (0)