Example #1
0
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
Example #2
0
    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()
Example #3
0
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