def acr_build_task_update( cmd, # pylint: disable=too-many-locals client, build_task_name, registry_name, resource_group_name=None, # build task parameters alias=None, status=None, os_type=None, cpu=None, timeout=None, repository_url=None, commit_trigger_enabled=None, git_access_token=None, # build step parameters branch=None, image_names=None, no_push=None, no_cache=None, docker_file_path=None, build_arg=None, secret_build_arg=None, base_image_trigger=None): _, resource_group_name = validate_managed_registry( cmd.cli_ctx, registry_name, resource_group_name, BUILD_TASKS_NOT_SUPPORTED) build_task = client.get(resource_group_name, registry_name, build_task_name) # pylint: disable=too-many-boolean-expressions if alias or status or os_type or cpu or timeout or repository_url or commit_trigger_enabled or git_access_token: build_task_update_parameters = BuildTaskUpdateParameters() build_task_update_parameters.alias = alias build_task_update_parameters.status = status build_task_update_parameters.platform = PlatformProperties( os_type=os_type or build_task.platform.os_type, cpu=cpu) build_task_update_parameters.timeout = timeout build_task_update_parameters.source_repository = SourceRepositoryUpdateParameters( source_control_auth_properties=SourceControlAuthInfo( token=git_access_token, token_type=DEFAULT_TOKEN_TYPE) if git_access_token else None, is_commit_trigger_enabled=commit_trigger_enabled) build_task = LongRunningOperation(cmd.cli_ctx)(client.update( resource_group_name=resource_group_name, registry_name=registry_name, build_task_name=build_task_name, step_name=_get_build_step_name(build_task_name), build_task_update_parameters=build_task_update_parameters)) from ._client_factory import cf_acr_build_steps client_build_steps = cf_acr_build_steps(cmd.cli_ctx) build_step = None # pylint: disable=too-many-boolean-expressions if branch or image_names or no_push is not None or no_cache is not None or \ docker_file_path or build_arg or secret_build_arg or base_image_trigger: build_step_update_parameters = DockerBuildStepUpdateParameters() build_step_update_parameters.branch = branch build_step_update_parameters.image_names = image_names build_step_update_parameters.is_push_enabled = ( not no_push) if no_push is not None else None build_step_update_parameters.no_cache = no_cache build_step_update_parameters.docker_file_path = docker_file_path build_step_update_parameters.build_arguments = build_arg + secret_build_arg \ if build_arg and secret_build_arg else build_arg or secret_build_arg build_step_update_parameters.base_image_trigger = base_image_trigger try: build_step = LongRunningOperation(cmd.cli_ctx)( client_build_steps.update( resource_group_name=resource_group_name, registry_name=registry_name, build_task_name=build_task_name, step_name=_get_build_step_name(build_task_name), properties=build_step_update_parameters)) except CloudError as e: if e.status_code != 404: raise logger.warning( "Could not update build task details. Build task basic information is updated." ) # If build step is not updated, get it here if not build_step: try: build_step = client_build_steps.get( resource_group_name, registry_name, build_task_name, _get_build_step_name(build_task_name)) except CloudError as e: if e.status_code != 404: raise if build_step: setattr(build_task, 'properties', build_step.properties) return build_task
def test_build_step(self, resource_group, location): registry_name = self.get_resource_name('pyacr') build_task_name = self.get_resource_name('pyacr') build_step_name = self.get_resource_name('pyacr') # Create a managed registry self._create_managed_registry(registry_name, resource_group.name, location) # Create a build task self._create_build_task(build_task_name, registry_name, resource_group.name, location) # Create a build step self._create_build_step(build_step_name, build_task_name, registry_name, resource_group.name, location) # List build steps build_steps = list( self.client.build_steps.list(resource_group.name, registry_name, build_task_name)) self.assertEqual(len(build_steps), 1) # Update the build step build_step_update_parameters = DockerBuildStepUpdateParameters( branch='dev', image_names=['repo1:tag1', 'repo2:tag2'], is_push_enabled=False, no_cache=True, docker_file_path='src\Dockerfile', build_arguments=[ BuildArgument(name='key1', value='value1', is_secret=False), BuildArgument(name='key2', value='value2', is_secret=True) ], base_image_trigger=BaseImageTriggerType.none) build_step = self.client.build_steps.update( resource_group_name=resource_group.name, registry_name=registry_name, build_task_name=build_task_name, step_name=build_step_name, properties=build_step_update_parameters).result() self.assertEqual(build_step.name, build_step_name) self.assertEqual(build_step.properties.branch, 'dev') self.assertEqual(build_step.properties.image_names, ['repo1:tag1', 'repo2:tag2']) self.assertEqual(build_step.properties.is_push_enabled, False) self.assertEqual(build_step.properties.no_cache, True) self.assertEqual(build_step.properties.docker_file_path, 'src\Dockerfile') self.assertEqual(build_step.properties.build_arguments[0].name, 'key1') self.assertEqual(build_step.properties.build_arguments[0].value, 'value1') self.assertEqual(build_step.properties.build_arguments[0].is_secret, False) self.assertEqual(build_step.properties.base_image_trigger, BaseImageTriggerType.none.value) self.assertEqual(build_step.properties.provisioning_state, ProvisioningState.succeeded.value) # Get the build step build_step = self.client.build_steps.get( resource_group_name=resource_group.name, registry_name=registry_name, build_task_name=build_task_name, step_name=build_step_name) self.assertEqual(build_step.name, build_step_name) self.assertEqual(build_step.properties.branch, 'dev') self.assertEqual(build_step.properties.image_names, ['repo1:tag1', 'repo2:tag2']) self.assertEqual(build_step.properties.is_push_enabled, False) self.assertEqual(build_step.properties.no_cache, True) self.assertEqual(build_step.properties.docker_file_path, 'src\Dockerfile') self.assertEqual(build_step.properties.build_arguments[0].name, 'key1') self.assertEqual(build_step.properties.build_arguments[0].value, 'value1') self.assertEqual(build_step.properties.build_arguments[0].is_secret, False) self.assertEqual(build_step.properties.base_image_trigger, BaseImageTriggerType.none.value) self.assertEqual(build_step.properties.provisioning_state, ProvisioningState.succeeded.value) # Get the build step build arguments build_arguments = list( self.client.build_steps.list_build_arguments( resource_group_name=resource_group.name, registry_name=registry_name, build_task_name=build_task_name, step_name=build_step_name)) self.assertEqual(len(build_arguments), 2) # Delete the build step self.client.build_steps.delete(resource_group.name, registry_name, build_task_name, build_step_name).wait() self.client.build_tasks.delete(resource_group.name, registry_name, build_task_name).wait() self.client.registries.delete(resource_group.name, registry_name).wait()
def acr_build_task_update(cmd, # pylint: disable=too-many-locals client, build_task_name, registry_name, resource_group_name=None, # build task parameters alias=None, status=None, os_type=None, cpu=None, timeout=None, repository_url=None, commit_trigger_enabled=None, git_access_token=None, # build step parameters branch=None, image_names=None, no_push=None, no_cache=None, docker_file_path=None, build_arg=None, secret_build_arg=None, base_image_trigger=None): _, resource_group_name = validate_managed_registry( cmd.cli_ctx, registry_name, resource_group_name, BUILD_TASKS_NOT_SUPPORTED) build_task = client.get(resource_group_name, registry_name, build_task_name) # pylint: disable=too-many-boolean-expressions if alias or status or os_type or cpu or timeout or repository_url or commit_trigger_enabled or git_access_token: build_task_update_parameters = BuildTaskUpdateParameters() build_task_update_parameters.alias = alias build_task_update_parameters.status = status build_task_update_parameters.platform = PlatformProperties(os_type=os_type or build_task.platform.os_type, cpu=cpu) build_task_update_parameters.timeout = timeout build_task_update_parameters.source_repository = SourceRepositoryUpdateParameters( source_control_auth_properties=SourceControlAuthInfo( token=git_access_token, token_type=DEFAULT_TOKEN_TYPE) if git_access_token else None, is_commit_trigger_enabled=commit_trigger_enabled) build_task = LongRunningOperation(cmd.cli_ctx)( client.update(resource_group_name=resource_group_name, registry_name=registry_name, build_task_name=build_task_name, step_name=_get_build_step_name(build_task_name), build_task_update_parameters=build_task_update_parameters)) from ._client_factory import cf_acr_build_steps client_build_steps = cf_acr_build_steps(cmd.cli_ctx) build_step = None # pylint: disable=too-many-boolean-expressions if branch or image_names or no_push is not None or no_cache is not None or \ docker_file_path or build_arg or secret_build_arg or base_image_trigger: build_step_update_parameters = DockerBuildStepUpdateParameters() build_step_update_parameters.branch = branch build_step_update_parameters.image_names = image_names build_step_update_parameters.is_push_enabled = (not no_push) if no_push is not None else None build_step_update_parameters.no_cache = no_cache build_step_update_parameters.docker_file_path = docker_file_path build_step_update_parameters.build_arguments = build_arg + secret_build_arg \ if build_arg and secret_build_arg else build_arg or secret_build_arg build_step_update_parameters.base_image_trigger = base_image_trigger try: build_step = LongRunningOperation(cmd.cli_ctx)( client_build_steps.update(resource_group_name=resource_group_name, registry_name=registry_name, build_task_name=build_task_name, step_name=_get_build_step_name(build_task_name), properties=build_step_update_parameters)) except CloudError as e: if e.status_code != 404: raise logger.warning("Could not update build task details. Build task basic information is updated.") # If build step is not updated, get it here if not build_step: try: build_step = client_build_steps.get(resource_group_name, registry_name, build_task_name, _get_build_step_name(build_task_name)) except CloudError as e: if e.status_code != 404: raise if build_step: setattr(build_task, 'properties', build_step.properties) return build_task