raise exception.FlavorMissing(flavor_id=flavor)
return flavor_id
+ def _get_keypair(self, key_name):
+ for keypair in self.nova().keypairs.list():
+ if keypair.name == key_name:
+ return keypair
+ raise exception.UserKeyPairMissing(key_name=key_name)
+
def handle_create(self):
security_groups = self._get_security_groups()
userdata = self.properties['UserData'] or ''
flavor = self.properties['InstanceType']
- key_name = self.properties['KeyName']
availability_zone = self.properties['AvailabilityZone']
- keypairs = [k.name for k in self.nova().keypairs.list()]
- if key_name not in keypairs and key_name is not None:
- raise exception.UserKeyPairMissing(key_name=key_name)
+ key_name = self.properties['KeyName']
+ if key_name:
+ # confirm keypair exists
+ self._get_keypair(key_name)
image_name = self.properties['ImageId']
'Flavor': {'Type': 'String', 'Required': True},
'ImageName': {'Type': 'String', 'Required': True},
'UserData': {'Type': 'String'},
- 'PublicKey': {'Type': 'String'},
+ 'key_name': {'Type': 'String'},
'Volumes': {'Type': 'List'}}
attributes_schema = {'PrivateDnsName': ('Private DNS name of the specified'
"""
# Retrieve server creation parameters from properties
flavor = self.properties['Flavor']
- user_public_key = self.properties['PublicKey'] or ''
# Generate SSH public/private keypair
if self._private_key is not None:
else:
rsa = RSA.generate(1024)
self.private_key = rsa.exportKey()
- public_key = rsa.publickey().exportKey('OpenSSH')
- public_keys = public_key + "\n" + user_public_key
- personality_files = {"/root/.ssh/authorized_keys": public_keys}
+ public_keys = [rsa.publickey().exportKey('OpenSSH')]
+ if self.properties.get('key_name'):
+ key_name = self.properties['key_name']
+ public_keys.append(self._get_keypair(key_name).public_key)
+ personality_files = {
+ "/root/.ssh/authorized_keys": '\n'.join(public_keys)}
# Create server
client = self.nova().servers