Implemented Update and Delete job queue
This commit is contained in:
		
							parent
							
								
									2249eee49d
								
							
						
					
					
						commit
						4a45acc216
					
				@ -454,6 +454,64 @@ class BatchBackend(BaseBackend):
 | 
			
		||||
 | 
			
		||||
        return result
 | 
			
		||||
 | 
			
		||||
    def update_job_queue(self, queue_name, priority, state, compute_env_order):
 | 
			
		||||
        """
 | 
			
		||||
        Update a job queue
 | 
			
		||||
 | 
			
		||||
        :param queue_name: Queue name
 | 
			
		||||
        :type queue_name: str
 | 
			
		||||
        :param priority: Queue priority
 | 
			
		||||
        :type priority: int
 | 
			
		||||
        :param state: Queue state
 | 
			
		||||
        :type state: string
 | 
			
		||||
        :param compute_env_order: Compute environment list
 | 
			
		||||
        :type compute_env_order: list of dict
 | 
			
		||||
        :return: Tuple of Name, ARN
 | 
			
		||||
        :rtype: tuple of str
 | 
			
		||||
        """
 | 
			
		||||
        if queue_name is None:
 | 
			
		||||
            raise ClientException('jobQueueName must be provided')
 | 
			
		||||
 | 
			
		||||
        job_queue = self.get_job_queue(queue_name)
 | 
			
		||||
        if job_queue is None:
 | 
			
		||||
            raise ClientException('Job queue {0} does not exist'.format(queue_name))
 | 
			
		||||
 | 
			
		||||
        if state is not None:
 | 
			
		||||
            if state not in ('ENABLED', 'DISABLED'):
 | 
			
		||||
                raise ClientException('state {0} must be one of ENABLED | DISABLED'.format(state))
 | 
			
		||||
 | 
			
		||||
            job_queue.state = state
 | 
			
		||||
 | 
			
		||||
        if compute_env_order is not None:
 | 
			
		||||
            if len(compute_env_order) == 0:
 | 
			
		||||
                raise ClientException('At least 1 compute environment must be provided')
 | 
			
		||||
            try:
 | 
			
		||||
                # orders and extracts computeEnvironment names
 | 
			
		||||
                ordered_compute_environments = [item['computeEnvironment'] for item in sorted(compute_env_order, key=lambda x: x['order'])]
 | 
			
		||||
                env_objects = []
 | 
			
		||||
                # Check each ARN exists, then make a list of compute env's
 | 
			
		||||
                for arn in ordered_compute_environments:
 | 
			
		||||
                    env = self.get_compute_environment_by_arn(arn)
 | 
			
		||||
                    if env is None:
 | 
			
		||||
                        raise ClientException('Compute environment {0} does not exist'.format(arn))
 | 
			
		||||
                    env_objects.append(env)
 | 
			
		||||
            except Exception:
 | 
			
		||||
                raise ClientException('computeEnvironmentOrder is malformed')
 | 
			
		||||
 | 
			
		||||
            job_queue.env_order_json = compute_env_order
 | 
			
		||||
            job_queue.environments = env_objects
 | 
			
		||||
 | 
			
		||||
        if priority is not None:
 | 
			
		||||
            job_queue.priority = priority
 | 
			
		||||
 | 
			
		||||
        return queue_name, job_queue.arn
 | 
			
		||||
 | 
			
		||||
    def delete_job_queue(self, queue_name):
 | 
			
		||||
        job_queue = self.get_job_queue(queue_name)
 | 
			
		||||
 | 
			
		||||
        if job_queue is not None:
 | 
			
		||||
            del self._job_queues[job_queue.arn]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
available_regions = boto3.session.Session().get_available_regions("batch")
 | 
			
		||||
batch_backends = {region: BatchBackend(region_name=region) for region in available_regions}
 | 
			
		||||
 | 
			
		||||
@ -146,3 +146,35 @@ class BatchResponse(BaseResponse):
 | 
			
		||||
 | 
			
		||||
        result = {'jobQueues': queues}
 | 
			
		||||
        return json.dumps(result)
 | 
			
		||||
 | 
			
		||||
    # UpdateJobQueue
 | 
			
		||||
    def updatejobqueue(self):
 | 
			
		||||
        compute_env_order = self._get_param('computeEnvironmentOrder')
 | 
			
		||||
        queue_name = self._get_param('jobQueue')
 | 
			
		||||
        priority = self._get_param('priority')
 | 
			
		||||
        state = self._get_param('state')
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            name, arn = self.batch_backend.update_job_queue(
 | 
			
		||||
                queue_name=queue_name,
 | 
			
		||||
                priority=priority,
 | 
			
		||||
                state=state,
 | 
			
		||||
                compute_env_order=compute_env_order
 | 
			
		||||
            )
 | 
			
		||||
        except AWSError as err:
 | 
			
		||||
            return err.response()
 | 
			
		||||
 | 
			
		||||
        result = {
 | 
			
		||||
            'jobQueueArn': arn,
 | 
			
		||||
            'jobQueueName': name
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return json.dumps(result)
 | 
			
		||||
 | 
			
		||||
    # DeleteJobQueue
 | 
			
		||||
    def deletejobqueue(self):
 | 
			
		||||
        queue_name = self._get_param('jobQueue')
 | 
			
		||||
 | 
			
		||||
        self.batch_backend.delete_job_queue(queue_name)
 | 
			
		||||
 | 
			
		||||
        return ''
 | 
			
		||||
 | 
			
		||||
@ -12,4 +12,6 @@ url_paths = {
 | 
			
		||||
    '{0}/v1/updatecomputeenvironment': BatchResponse.dispatch,
 | 
			
		||||
    '{0}/v1/createjobqueue': BatchResponse.dispatch,
 | 
			
		||||
    '{0}/v1/describejobqueues': BatchResponse.dispatch,
 | 
			
		||||
    '{0}/v1/updatejobqueue': BatchResponse.dispatch,
 | 
			
		||||
    '{0}/v1/deletejobqueue': BatchResponse.dispatch
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -341,3 +341,83 @@ def test_job_queue_bad_arn():
 | 
			
		||||
        )
 | 
			
		||||
    except ClientError as err:
 | 
			
		||||
        err.response['Error']['Code'].should.equal('ClientException')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@mock_ec2
 | 
			
		||||
@mock_ecs
 | 
			
		||||
@mock_iam
 | 
			
		||||
@mock_batch
 | 
			
		||||
def test_update_job_queue():
 | 
			
		||||
    ec2_client, iam_client, ecs_client, batch_client = _get_clients()
 | 
			
		||||
    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
			
		||||
 | 
			
		||||
    compute_name = 'test_compute_env'
 | 
			
		||||
    resp = batch_client.create_compute_environment(
 | 
			
		||||
        computeEnvironmentName=compute_name,
 | 
			
		||||
        type='UNMANAGED',
 | 
			
		||||
        state='ENABLED',
 | 
			
		||||
        serviceRole=iam_arn
 | 
			
		||||
    )
 | 
			
		||||
    arn = resp['computeEnvironmentArn']
 | 
			
		||||
 | 
			
		||||
    resp = batch_client.create_job_queue(
 | 
			
		||||
        jobQueueName='test_job_queue',
 | 
			
		||||
        state='ENABLED',
 | 
			
		||||
        priority=123,
 | 
			
		||||
        computeEnvironmentOrder=[
 | 
			
		||||
            {
 | 
			
		||||
                'order': 123,
 | 
			
		||||
                'computeEnvironment': arn
 | 
			
		||||
            },
 | 
			
		||||
        ]
 | 
			
		||||
    )
 | 
			
		||||
    queue_arn = resp['jobQueueArn']
 | 
			
		||||
 | 
			
		||||
    batch_client.update_job_queue(
 | 
			
		||||
        jobQueue=queue_arn,
 | 
			
		||||
        priority=5
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    resp = batch_client.describe_job_queues()
 | 
			
		||||
    resp.should.contain('jobQueues')
 | 
			
		||||
    len(resp['jobQueues']).should.equal(1)
 | 
			
		||||
    resp['jobQueues'][0]['priority'].should.equal(5)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@mock_ec2
 | 
			
		||||
@mock_ecs
 | 
			
		||||
@mock_iam
 | 
			
		||||
@mock_batch
 | 
			
		||||
def test_update_job_queue():
 | 
			
		||||
    ec2_client, iam_client, ecs_client, batch_client = _get_clients()
 | 
			
		||||
    vpc_id, subnet_id, sg_id, iam_arn = _setup(ec2_client, iam_client)
 | 
			
		||||
 | 
			
		||||
    compute_name = 'test_compute_env'
 | 
			
		||||
    resp = batch_client.create_compute_environment(
 | 
			
		||||
        computeEnvironmentName=compute_name,
 | 
			
		||||
        type='UNMANAGED',
 | 
			
		||||
        state='ENABLED',
 | 
			
		||||
        serviceRole=iam_arn
 | 
			
		||||
    )
 | 
			
		||||
    arn = resp['computeEnvironmentArn']
 | 
			
		||||
 | 
			
		||||
    resp = batch_client.create_job_queue(
 | 
			
		||||
        jobQueueName='test_job_queue',
 | 
			
		||||
        state='ENABLED',
 | 
			
		||||
        priority=123,
 | 
			
		||||
        computeEnvironmentOrder=[
 | 
			
		||||
            {
 | 
			
		||||
                'order': 123,
 | 
			
		||||
                'computeEnvironment': arn
 | 
			
		||||
            },
 | 
			
		||||
        ]
 | 
			
		||||
    )
 | 
			
		||||
    queue_arn = resp['jobQueueArn']
 | 
			
		||||
 | 
			
		||||
    batch_client.delete_job_queue(
 | 
			
		||||
        jobQueue=queue_arn
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    resp = batch_client.describe_job_queues()
 | 
			
		||||
    resp.should.contain('jobQueues')
 | 
			
		||||
    len(resp['jobQueues']).should.equal(0)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user