blob: b14c0bb5a0ed865768567314b4eba95221d8febb [file] [log] [blame]
# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from recipe_engine import recipe_api
# Pinned gcloud version.
GCLOUD_VERSION = 'version:266.0.0.chromium0'
class GCloudApi(recipe_api.RecipeApi):
"""GCloudApi provides support for common gcloud operations."""
def __init__(self, *args, **kwargs):
super(GCloudApi, self).__init__(*args, **kwargs)
self._gcloud_executable = None
def __call__(self, *args, **kwargs):
"""Executes specified gcloud command."""
self._ensure()
step_name = kwargs.pop('step_name', 'gcloud %s' % args[0])
cmd = [self._gcloud_executable]
return self.m.step(step_name, cmd + list(args), **kwargs)
def _ensure(self):
if self._gcloud_executable:
return
with self.m.step.nest('ensure gcloud'):
with self.m.context(infra_steps=True):
pkgs = self.m.cipd.EnsureFile()
pkgs.add_package('infra/gcloud/${platform}', GCLOUD_VERSION)
cipd_dir = self.m.path['start_dir'].join('cipd', 'gcloud')
self.m.cipd.ensure(cipd_dir, pkgs)
self.m.file.remove('remove gcloud wrapper',
cipd_dir.join('bin', 'gcloud'))
self.m.file.copy('copy patched gcloud', self.resource('gcloud'),
cipd_dir.join('bin', 'gcloud'))
self._gcloud_executable = cipd_dir.join('bin').join('gcloud')
def container_image_exists(self, image):
step_result = self(
'container',
'images',
'describe',
image,
ok_ret='any',
step_name='check existence of %s' % image)
return step_result.retcode == 0