diff --git a/moto/ec2/models.py b/moto/ec2/models.py index 595b96d7..b3ac035b 100644 --- a/moto/ec2/models.py +++ b/moto/ec2/models.py @@ -169,6 +169,8 @@ class KeyPairBackend(object): super(KeyPairBackend, self).__init__() def create_key_pair(self, name): + if name in self.keypairs: + raise InvalidIdError(name) self.keypairs[name] = keypair = random_key_pair() keypair['name'] = name return keypair diff --git a/moto/ec2/responses/key_pairs.py b/moto/ec2/responses/key_pairs.py index 30cd2dd6..9afabda8 100644 --- a/moto/ec2/responses/key_pairs.py +++ b/moto/ec2/responses/key_pairs.py @@ -1,14 +1,21 @@ from jinja2 import Template from moto.core.responses import BaseResponse from moto.ec2.models import ec2_backend +from moto.ec2.exceptions import InvalidIdError class KeyPairs(BaseResponse): def create_key_pair(self): - name = self.querystring.get('KeyName')[0] - template = Template(CREATE_KEY_PAIR_RESPONSE) - return template.render(**ec2_backend.create_key_pair(name)) + try: + name = self.querystring.get('KeyName')[0] + keypair = ec2_backend.create_key_pair(name) + except InvalidIdError as exc: + template = Template(CREATE_KEY_PAIR_INVALID_NAME) + return template.render(keypair_id=exc.id), dict(status=400) + else: + template = Template(CREATE_KEY_PAIR_RESPONSE) + return template.render(**keypair) def delete_key_pair(self): raise NotImplementedError('KeyPairs.delete_key_pair is not yet implemented') @@ -36,3 +43,8 @@ CREATE_KEY_PAIR_RESPONSE = """ +InvalidKeyPair.DuplicateThe keypair '{{ keypair_id }}' already exists.f4f76e81-8ca5-4e61-a6d5-a4a96EXAMPLE +"""