def get_pod_volumes( self, docker_volumes: Sequence[DockerVolume], aws_ebs_volumes: Sequence[AwsEbsVolume], ) -> Sequence[V1Volume]: pod_volumes = [] unique_docker_volumes = { self.get_docker_volume_name(docker_volume): docker_volume for docker_volume in docker_volumes } for name, docker_volume in unique_docker_volumes.items(): pod_volumes.append( V1Volume( host_path=V1HostPathVolumeSource( path=docker_volume['hostPath'], ), name=name, ), ) unique_aws_ebs_volumes = { self.get_aws_ebs_volume_name(aws_ebs_volume): aws_ebs_volume for aws_ebs_volume in aws_ebs_volumes } for name, aws_ebs_volume in unique_aws_ebs_volumes.items(): pod_volumes.append( V1Volume( aws_elastic_block_store=V1AWSElasticBlockStoreVolumeSource( volume_id=aws_ebs_volume['volume_id'], fs_type=aws_ebs_volume.get('fs_type'), partition=aws_ebs_volume.get('partition'), # k8s wants RW volume even if it's later mounted RO read_only=False, ), name=name, ), ) return pod_volumes
def test_get_pod_volumes(self): mock_docker_volumes = [ { 'hostPath': '/nail/blah', 'containerPath': '/nail/foo' }, { 'hostPath': '/nail/thing', 'containerPath': '/nail/bar' }, ] mock_aws_ebs_volumes = [ { 'volume_id': 'vol-ZZZZZZZZZZZZZZZZZ', 'fs_type': 'ext4', 'container_path': '/nail/qux' }, ] expected_volumes = [ V1Volume( host_path=V1HostPathVolumeSource(path='/nail/blah', ), name='host--slash-nailslash-blah', ), V1Volume( host_path=V1HostPathVolumeSource(path='/nail/thing', ), name='host--slash-nailslash-thing', ), V1Volume( aws_elastic_block_store=V1AWSElasticBlockStoreVolumeSource( volume_id='vol-ZZZZZZZZZZZZZZZZZ', fs_type='ext4', read_only=False, ), name='aws-ebs--vol-ZZZZZZZZZZZZZZZZZ', ), ] assert self.deployment.get_pod_volumes( docker_volumes=mock_docker_volumes, aws_ebs_volumes=mock_aws_ebs_volumes, ) == expected_volumes