self.keypair_settings.public_filepath)
 
                 if self.keypair_settings.delete_on_clean is not None:
-                    self.__delete_keys_on_clean = self.keypair_settings.delete_on_clean
+                    delete_on_clean = self.keypair_settings.delete_on_clean
+                    self.__delete_keys_on_clean = delete_on_clean
                 else:
                     self.__delete_keys_on_clean = False
             else:
                 logger.info("Creating new keypair")
-                # TODO - Make this value configurable
-                keys = nova_utils.create_keys(1024)
+                keys = nova_utils.create_keys(self.keypair_settings.key_size)
                 self.__keypair = nova_utils.upload_keypair(
                     self.__nova, self.keypair_settings.name,
                     nova_utils.public_key_openssh(keys))
                     self.keypair_settings.private_filepath)
 
                 if self.keypair_settings.delete_on_clean is not None:
-                    self.__delete_keys_on_clean = self.keypair_settings.delete_on_clean
+                    delete_on_clean = self.keypair_settings.delete_on_clean
+                    self.__delete_keys_on_clean = delete_on_clean
                 else:
                     self.__delete_keys_on_clean = True
         elif self.__keypair and not os.path.isfile(
                                 public key file is or will be stored
         :param private_filepath: The path where the generated private key file
                                  will be stored
+        :param key_size: The number of bytes for the key size when it needs to
+                         be generated (Must be >=512 default 1024)
         :param delete_on_clean: when True, the key files will be deleted when
                                 OpenStackKeypair#clean() is called
         :return:
         self.name = kwargs.get('name')
         self.public_filepath = kwargs.get('public_filepath')
         self.private_filepath = kwargs.get('private_filepath')
+        self.key_size = int(kwargs.get('key_size', 1024))
 
         if kwargs.get('delete_on_clean') is not None:
             if isinstance(kwargs.get('delete_on_clean'), bool):
         if not self.name:
             raise KeypairSettingsError('Name is a required attribute')
 
+        if self.key_size < 512:
+            raise KeypairSettingsError('key_size must be >=512')
+
 
 class KeypairSettingsError(Exception):
     """
 
         with self.assertRaises(KeypairSettingsError):
             KeypairSettings(**dict())
 
+    def test_small_key_size(self):
+        with self.assertRaises(KeypairSettingsError):
+            KeypairSettings(name='foo', key_size=511)
+
     def test_name_only(self):
         settings = KeypairSettings(name='foo')
         self.assertEqual('foo', settings.name)
+        self.assertEqual(1024, settings.key_size)
         self.assertIsNone(settings.public_filepath)
         self.assertIsNone(settings.private_filepath)
         self.assertIsNone(settings.delete_on_clean)
     def test_config_with_name_only(self):
         settings = KeypairSettings(**{'name': 'foo'})
         self.assertEqual('foo', settings.name)
+        self.assertEqual(1024, settings.key_size)
         self.assertIsNone(settings.public_filepath)
         self.assertIsNone(settings.private_filepath)
         self.assertIsNone(settings.delete_on_clean)
     def test_name_pub_only(self):
         settings = KeypairSettings(name='foo', public_filepath='/foo/bar.pub')
         self.assertEqual('foo', settings.name)
+        self.assertEqual(1024, settings.key_size)
         self.assertEqual('/foo/bar.pub', settings.public_filepath)
         self.assertIsNone(settings.private_filepath)
         self.assertIsNone(settings.delete_on_clean)
         settings = KeypairSettings(
             **{'name': 'foo', 'public_filepath': '/foo/bar.pub'})
         self.assertEqual('foo', settings.name)
+        self.assertEqual(1024, settings.key_size)
         self.assertEqual('/foo/bar.pub', settings.public_filepath)
         self.assertIsNone(settings.private_filepath)
         self.assertIsNone(settings.delete_on_clean)
     def test_name_priv_only(self):
         settings = KeypairSettings(name='foo', private_filepath='/foo/bar')
         self.assertEqual('foo', settings.name)
+        self.assertEqual(1024, settings.key_size)
         self.assertIsNone(settings.public_filepath)
         self.assertEqual('/foo/bar', settings.private_filepath)
         self.assertIsNone(settings.delete_on_clean)
         settings = KeypairSettings(
             **{'name': 'foo', 'private_filepath': '/foo/bar'})
         self.assertEqual('foo', settings.name)
+        self.assertEqual(1024, settings.key_size)
         self.assertIsNone(settings.public_filepath)
         self.assertEqual('/foo/bar', settings.private_filepath)
         self.assertIsNone(settings.delete_on_clean)
     def test_all_delete_bool(self):
         settings = KeypairSettings(
             name='foo', public_filepath='/foo/bar.pub',
-            private_filepath='/foo/bar', delete_on_clean=True)
+            private_filepath='/foo/bar', delete_on_clean=True,
+            key_size=999)
         self.assertEqual('foo', settings.name)
+        self.assertEqual(999, settings.key_size)
         self.assertEqual('/foo/bar.pub', settings.public_filepath)
         self.assertEqual('/foo/bar', settings.private_filepath)
         self.assertTrue(settings.delete_on_clean)
             name='foo', public_filepath='/foo/bar.pub',
             private_filepath='/foo/bar', delete_on_clean='True')
         self.assertEqual('foo', settings.name)
+        self.assertEqual(1024, settings.key_size)
         self.assertEqual('/foo/bar.pub', settings.public_filepath)
         self.assertEqual('/foo/bar', settings.private_filepath)
         self.assertTrue(settings.delete_on_clean)
             name='foo', public_filepath='/foo/bar.pub',
             private_filepath='/foo/bar', delete_on_clean='true')
         self.assertEqual('foo', settings.name)
+        self.assertEqual(1024, settings.key_size)
         self.assertEqual('/foo/bar.pub', settings.public_filepath)
         self.assertEqual('/foo/bar', settings.private_filepath)
         self.assertTrue(settings.delete_on_clean)
             name='foo', public_filepath='/foo/bar.pub',
             private_filepath='/foo/bar', delete_on_clean='False')
         self.assertEqual('foo', settings.name)
+        self.assertEqual(1024, settings.key_size)
         self.assertEqual('/foo/bar.pub', settings.public_filepath)
         self.assertEqual('/foo/bar', settings.private_filepath)
         self.assertFalse(settings.delete_on_clean)
     def test_all_delete_str_false_lc(self):
         settings = KeypairSettings(
             name='foo', public_filepath='/foo/bar.pub',
-            private_filepath='/foo/bar', delete_on_clean='false')
+            private_filepath='/foo/bar', delete_on_clean='false',
+            key_size='999')
         self.assertEqual('foo', settings.name)
+        self.assertEqual(999, settings.key_size)
         self.assertEqual('/foo/bar.pub', settings.public_filepath)
         self.assertEqual('/foo/bar', settings.private_filepath)
         self.assertFalse(settings.delete_on_clean)
     def test_config_all_delete_false_bool(self):
         settings = KeypairSettings(
             **{'name': 'foo', 'public_filepath': '/foo/bar.pub',
-               'private_filepath': '/foo/bar', 'delete_on_clean': False})
+               'private_filepath': '/foo/bar', 'delete_on_clean': False,
+               'key_size': 999})
         self.assertEqual('foo', settings.name)
+        self.assertEqual(999, settings.key_size)
         self.assertEqual('/foo/bar.pub', settings.public_filepath)
         self.assertEqual('/foo/bar', settings.private_filepath)
         self.assertFalse(settings.delete_on_clean)
             **{'name': 'foo', 'public_filepath': '/foo/bar.pub',
                'private_filepath': '/foo/bar', 'delete_on_clean': 'False'})
         self.assertEqual('foo', settings.name)
+        self.assertEqual(1024, settings.key_size)
         self.assertEqual('/foo/bar.pub', settings.public_filepath)
         self.assertEqual('/foo/bar', settings.private_filepath)
         self.assertFalse(settings.delete_on_clean)
             **{'name': 'foo', 'public_filepath': '/foo/bar.pub',
                'private_filepath': '/foo/bar', 'delete_on_clean': 'false'})
         self.assertEqual('foo', settings.name)
+        self.assertEqual(1024, settings.key_size)
         self.assertEqual('/foo/bar.pub', settings.public_filepath)
         self.assertEqual('/foo/bar', settings.private_filepath)
         self.assertFalse(settings.delete_on_clean)
     def test_config_all_delete_false_str_foo(self):
         settings = KeypairSettings(
             **{'name': 'foo', 'public_filepath': '/foo/bar.pub',
-               'private_filepath': '/foo/bar', 'delete_on_clean': 'foo'})
+               'private_filepath': '/foo/bar', 'delete_on_clean': 'foo',
+               'key_size': '999'})
         self.assertEqual('foo', settings.name)
+        self.assertEqual(999, settings.key_size)
         self.assertEqual('/foo/bar.pub', settings.public_filepath)
         self.assertEqual('/foo/bar', settings.private_filepath)
         self.assertFalse(settings.delete_on_clean)
                                             self.keypair_creator.get_keypair())
         self.assertEqual(self.keypair_creator.get_keypair(), keypair)
 
+    def test_create_keypair_large_key(self):
+        """
+        Tests the creation of a generated keypair without saving to file
+        :return:
+        """
+        self.keypair_creator = OpenStackKeypair(self.os_creds, KeypairSettings(
+            name=self.keypair_name, key_size=10000))
+        self.keypair_creator.create()
+
+        keypair = nova_utils.keypair_exists(self.nova,
+                                            self.keypair_creator.get_keypair())
+        self.assertEqual(self.keypair_creator.get_keypair(), keypair)
+
     def test_create_delete_keypair(self):
         """
         Tests the creation then deletion of an OpenStack keypair to ensure