Fix and enable gating on H403
Fix occurrences of H403 - multi line docstring end on new line Change-Id: I79a818095e9f64a18ded1686fb152b9d58f3c8b1
This commit is contained in:
		| @@ -118,19 +118,22 @@ class ShellCommands(object): | |||||||
|     def bpython(self): |     def bpython(self): | ||||||
|         """Runs a bpython shell. |         """Runs a bpython shell. | ||||||
|  |  | ||||||
|         Falls back to Ipython/python shell if unavailable""" |         Falls back to Ipython/python shell if unavailable | ||||||
|  |         """ | ||||||
|         self.run('bpython') |         self.run('bpython') | ||||||
|  |  | ||||||
|     def ipython(self): |     def ipython(self): | ||||||
|         """Runs an Ipython shell. |         """Runs an Ipython shell. | ||||||
|  |  | ||||||
|         Falls back to Python shell if unavailable""" |         Falls back to Python shell if unavailable | ||||||
|  |         """ | ||||||
|         self.run('ipython') |         self.run('ipython') | ||||||
|  |  | ||||||
|     def python(self): |     def python(self): | ||||||
|         """Runs a python shell. |         """Runs a python shell. | ||||||
|  |  | ||||||
|         Falls back to Python shell if unavailable""" |         Falls back to Python shell if unavailable | ||||||
|  |         """ | ||||||
|         self.run('python') |         self.run('python') | ||||||
|  |  | ||||||
|     @args('--shell', dest="shell", |     @args('--shell', dest="shell", | ||||||
| @@ -174,7 +177,8 @@ class ShellCommands(object): | |||||||
|     @args('--path', required=True, help='Script path') |     @args('--path', required=True, help='Script path') | ||||||
|     def script(self, path): |     def script(self, path): | ||||||
|         """Runs the script from the specifed path with flags set properly. |         """Runs the script from the specifed path with flags set properly. | ||||||
|         arguments: path""" |         arguments: path | ||||||
|  |         """ | ||||||
|         exec(compile(open(path).read(), path, 'exec'), locals(), globals()) |         exec(compile(open(path).read(), path, 'exec'), locals(), globals()) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -193,7 +197,8 @@ class HostCommands(object): | |||||||
|           help='Availability Zone (default: %(default)s)') |           help='Availability Zone (default: %(default)s)') | ||||||
|     def list(self, zone=None): |     def list(self, zone=None): | ||||||
|         """Show a list of all physical hosts. Filter by zone. |         """Show a list of all physical hosts. Filter by zone. | ||||||
|         args: [zone]""" |         args: [zone] | ||||||
|  |         """ | ||||||
|         print "%-25s\t%-15s" % (_('host'), |         print "%-25s\t%-15s" % (_('host'), | ||||||
|                                 _('zone')) |                                 _('zone')) | ||||||
|         ctxt = context.get_admin_context() |         ctxt = context.get_admin_context() | ||||||
| @@ -246,7 +251,8 @@ class VolumeCommands(object): | |||||||
|           help='Volume ID to be deleted') |           help='Volume ID to be deleted') | ||||||
|     def delete(self, volume_id): |     def delete(self, volume_id): | ||||||
|         """Delete a volume, bypassing the check that it |         """Delete a volume, bypassing the check that it | ||||||
|         must be available.""" |         must be available. | ||||||
|  |         """ | ||||||
|         ctxt = context.get_admin_context() |         ctxt = context.get_admin_context() | ||||||
|         volume = db.volume_get(ctxt, param2id(volume_id)) |         volume = db.volume_get(ctxt, param2id(volume_id)) | ||||||
|         host = volume['host'] |         host = volume['host'] | ||||||
| @@ -272,7 +278,8 @@ class VolumeCommands(object): | |||||||
|     def reattach(self, volume_id): |     def reattach(self, volume_id): | ||||||
|         """Re-attach a volume that has previously been attached |         """Re-attach a volume that has previously been attached | ||||||
|         to an instance.  Typically called after a compute host |         to an instance.  Typically called after a compute host | ||||||
|         has been rebooted.""" |         has been rebooted. | ||||||
|  |         """ | ||||||
|         ctxt = context.get_admin_context() |         ctxt = context.get_admin_context() | ||||||
|         volume = db.volume_get(ctxt, param2id(volume_id)) |         volume = db.volume_get(ctxt, param2id(volume_id)) | ||||||
|         if not volume['instance_id']: |         if not volume['instance_id']: | ||||||
| @@ -504,7 +511,8 @@ class BackupCommands(object): | |||||||
|  |  | ||||||
|     def list(self): |     def list(self): | ||||||
|         """List all backups (including ones in progress) and the host |         """List all backups (including ones in progress) and the host | ||||||
|         on which the backup operation is running.""" |         on which the backup operation is running. | ||||||
|  |         """ | ||||||
|         ctxt = context.get_admin_context() |         ctxt = context.get_admin_context() | ||||||
|         backups = db.backup_get_all(ctxt) |         backups = db.backup_get_all(ctxt) | ||||||
|  |  | ||||||
| @@ -575,7 +583,8 @@ CATEGORIES = { | |||||||
|  |  | ||||||
| def methods_of(obj): | def methods_of(obj): | ||||||
|     """Get all callable methods of an object that don't start with underscore |     """Get all callable methods of an object that don't start with underscore | ||||||
|     returns a list of tuples of the form (method_name, method)""" |     returns a list of tuples of the form (method_name, method) | ||||||
|  |     """ | ||||||
|     result = [] |     result = [] | ||||||
|     for i in dir(obj): |     for i in dir(obj): | ||||||
|         if callable(getattr(obj, i)) and not i.startswith('_'): |         if callable(getattr(obj, i)) and not i.startswith('_'): | ||||||
|   | |||||||
| @@ -71,7 +71,8 @@ class BackupManager(manager.SchedulerDependentManager): | |||||||
|  |  | ||||||
|     def init_host(self): |     def init_host(self): | ||||||
|         """Do any initialization that needs to be run if this is a |         """Do any initialization that needs to be run if this is a | ||||||
|            standalone service.""" |            standalone service. | ||||||
|  |         """ | ||||||
|  |  | ||||||
|         ctxt = context.get_admin_context() |         ctxt = context.get_admin_context() | ||||||
|         self.driver.do_setup(ctxt) |         self.driver.do_setup(ctxt) | ||||||
|   | |||||||
| @@ -326,7 +326,8 @@ def snapshot_data_get_for_project(context, project_id, session=None): | |||||||
| def snapshot_get_active_by_window(context, begin, end=None, project_id=None): | def snapshot_get_active_by_window(context, begin, end=None, project_id=None): | ||||||
|     """Get all the snapshots inside the window. |     """Get all the snapshots inside the window. | ||||||
|  |  | ||||||
|     Specifying a project_id will filter for a certain project.""" |     Specifying a project_id will filter for a certain project. | ||||||
|  |     """ | ||||||
|     return IMPL.snapshot_get_active_by_window(context, begin, end, project_id) |     return IMPL.snapshot_get_active_by_window(context, begin, end, project_id) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -397,7 +398,8 @@ def volume_type_destroy(context, id): | |||||||
| def volume_get_active_by_window(context, begin, end=None, project_id=None): | def volume_get_active_by_window(context, begin, end=None, project_id=None): | ||||||
|     """Get all the volumes inside the window. |     """Get all the volumes inside the window. | ||||||
|  |  | ||||||
|     Specifying a project_id will filter for a certain project.""" |     Specifying a project_id will filter for a certain project. | ||||||
|  |     """ | ||||||
|     return IMPL.volume_get_active_by_window(context, begin, end, project_id) |     return IMPL.volume_get_active_by_window(context, begin, end, project_id) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -418,7 +420,8 @@ def volume_type_extra_specs_update_or_create(context, | |||||||
|                                              volume_type_id, |                                              volume_type_id, | ||||||
|                                              extra_specs): |                                              extra_specs): | ||||||
|     """Create or update volume type extra specs. This adds or modifies the |     """Create or update volume type extra specs. This adds or modifies the | ||||||
|     key/value pairs specified in the extra specs dict argument""" |     key/value pairs specified in the extra specs dict argument | ||||||
|  |     """ | ||||||
|     IMPL.volume_type_extra_specs_update_or_create(context, |     IMPL.volume_type_extra_specs_update_or_create(context, | ||||||
|                                                   volume_type_id, |                                                   volume_type_id, | ||||||
|                                                   extra_specs) |                                                   extra_specs) | ||||||
|   | |||||||
| @@ -331,7 +331,8 @@ class Service(object): | |||||||
|  |  | ||||||
|     A service takes a manager and enables rpc by listening to queues based |     A service takes a manager and enables rpc by listening to queues based | ||||||
|     on topic. It also periodically runs tasks on the manager and reports |     on topic. It also periodically runs tasks on the manager and reports | ||||||
|     it state to the database services table.""" |     it state to the database services table. | ||||||
|  |     """ | ||||||
|  |  | ||||||
|     def __init__(self, host, binary, topic, manager, report_interval=None, |     def __init__(self, host, binary, topic, manager, report_interval=None, | ||||||
|                  periodic_interval=None, periodic_fuzzy_delay=None, |                  periodic_interval=None, periodic_fuzzy_delay=None, | ||||||
|   | |||||||
| @@ -696,7 +696,8 @@ def wire_HTTPConnection_to_WSGI(host, app): | |||||||
|     """ |     """ | ||||||
|     class HTTPConnectionDecorator(object): |     class HTTPConnectionDecorator(object): | ||||||
|         """Wraps the real HTTPConnection class so that when you instantiate |         """Wraps the real HTTPConnection class so that when you instantiate | ||||||
|         the class you might instead get a fake instance.""" |         the class you might instead get a fake instance. | ||||||
|  |         """ | ||||||
|  |  | ||||||
|         def __init__(self, wrapped): |         def __init__(self, wrapped): | ||||||
|             self.wrapped = wrapped |             self.wrapped = wrapped | ||||||
|   | |||||||
| @@ -695,7 +695,8 @@ def wire_HTTPConnection_to_WSGI(host, app): | |||||||
|     """ |     """ | ||||||
|     class HTTPConnectionDecorator(object): |     class HTTPConnectionDecorator(object): | ||||||
|         """Wraps the real HTTPConnection class so that when you instantiate |         """Wraps the real HTTPConnection class so that when you instantiate | ||||||
|         the class you might instead get a fake instance.""" |         the class you might instead get a fake instance. | ||||||
|  |         """ | ||||||
|  |  | ||||||
|         def __init__(self, wrapped): |         def __init__(self, wrapped): | ||||||
|             self.wrapped = wrapped |             self.wrapped = wrapped | ||||||
|   | |||||||
| @@ -62,7 +62,8 @@ class FilterSchedulerTestCase(test_scheduler.SchedulerTestCase): | |||||||
|                       'Test requires Cinder installed (try setup.py develop') |                       'Test requires Cinder installed (try setup.py develop') | ||||||
|     def test_create_volume_non_admin(self): |     def test_create_volume_non_admin(self): | ||||||
|         """Test creating an instance locally using run_instance, passing |         """Test creating an instance locally using run_instance, passing | ||||||
|         a non-admin context.  DB actions should work.""" |         a non-admin context.  DB actions should work. | ||||||
|  |         """ | ||||||
|         self.was_admin = False |         self.was_admin = False | ||||||
|  |  | ||||||
|         def fake_get(context, *args, **kwargs): |         def fake_get(context, *args, **kwargs): | ||||||
| @@ -88,7 +89,8 @@ class FilterSchedulerTestCase(test_scheduler.SchedulerTestCase): | |||||||
|                       'Test requires Cinder installed (try setup.py develop') |                       'Test requires Cinder installed (try setup.py develop') | ||||||
|     def test_schedule_happy_day(self): |     def test_schedule_happy_day(self): | ||||||
|         """Make sure there's nothing glaringly wrong with _schedule() |         """Make sure there's nothing glaringly wrong with _schedule() | ||||||
|         by doing a happy day pass through.""" |         by doing a happy day pass through. | ||||||
|  |         """ | ||||||
|  |  | ||||||
|         self.next_weight = 1.0 |         self.next_weight = 1.0 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -164,7 +164,8 @@ class SchedulerTestCase(test.TestCase): | |||||||
|  |  | ||||||
| class SchedulerDriverBaseTestCase(SchedulerTestCase): | class SchedulerDriverBaseTestCase(SchedulerTestCase): | ||||||
|     """Test cases for base scheduler driver class methods |     """Test cases for base scheduler driver class methods | ||||||
|        that can't will fail if the driver is changed""" |        that can't will fail if the driver is changed. | ||||||
|  |     """ | ||||||
|  |  | ||||||
|     def test_unimplemented_schedule(self): |     def test_unimplemented_schedule(self): | ||||||
|         fake_args = (1, 2, 3) |         fake_args = (1, 2, 3) | ||||||
|   | |||||||
| @@ -103,7 +103,8 @@ class BackupTestCase(test.TestCase): | |||||||
|  |  | ||||||
|     def test_init_host(self): |     def test_init_host(self): | ||||||
|         """Make sure stuck volumes and backups are reset to correct |         """Make sure stuck volumes and backups are reset to correct | ||||||
|         states when backup_manager.init_host() is called""" |         states when backup_manager.init_host() is called | ||||||
|  |         """ | ||||||
|         vol1_id = self._create_volume_db_entry(status='backing-up') |         vol1_id = self._create_volume_db_entry(status='backing-up') | ||||||
|         vol2_id = self._create_volume_db_entry(status='restoring-backup') |         vol2_id = self._create_volume_db_entry(status='restoring-backup') | ||||||
|         backup1_id = self._create_backup_db_entry(status='creating') |         backup1_id = self._create_backup_db_entry(status='creating') | ||||||
| @@ -127,7 +128,8 @@ class BackupTestCase(test.TestCase): | |||||||
|  |  | ||||||
|     def test_create_backup_with_bad_volume_status(self): |     def test_create_backup_with_bad_volume_status(self): | ||||||
|         """Test error handling when creating a backup from a volume |         """Test error handling when creating a backup from a volume | ||||||
|         with a bad status""" |         with a bad status | ||||||
|  |         """ | ||||||
|         vol_id = self._create_volume_db_entry(status='available', size=1) |         vol_id = self._create_volume_db_entry(status='available', size=1) | ||||||
|         backup_id = self._create_backup_db_entry(volume_id=vol_id) |         backup_id = self._create_backup_db_entry(volume_id=vol_id) | ||||||
|         self.assertRaises(exception.InvalidVolume, |         self.assertRaises(exception.InvalidVolume, | ||||||
| @@ -137,7 +139,8 @@ class BackupTestCase(test.TestCase): | |||||||
|  |  | ||||||
|     def test_create_backup_with_bad_backup_status(self): |     def test_create_backup_with_bad_backup_status(self): | ||||||
|         """Test error handling when creating a backup with a backup |         """Test error handling when creating a backup with a backup | ||||||
|         with a bad status""" |         with a bad status | ||||||
|  |         """ | ||||||
|         vol_id = self._create_volume_db_entry(size=1) |         vol_id = self._create_volume_db_entry(size=1) | ||||||
|         backup_id = self._create_backup_db_entry(status='available', |         backup_id = self._create_backup_db_entry(status='available', | ||||||
|                                                  volume_id=vol_id) |                                                  volume_id=vol_id) | ||||||
| @@ -187,7 +190,8 @@ class BackupTestCase(test.TestCase): | |||||||
|  |  | ||||||
|     def test_restore_backup_with_bad_volume_status(self): |     def test_restore_backup_with_bad_volume_status(self): | ||||||
|         """Test error handling when restoring a backup to a volume |         """Test error handling when restoring a backup to a volume | ||||||
|         with a bad status""" |         with a bad status | ||||||
|  |         """ | ||||||
|         vol_id = self._create_volume_db_entry(status='available', size=1) |         vol_id = self._create_volume_db_entry(status='available', size=1) | ||||||
|         backup_id = self._create_backup_db_entry(volume_id=vol_id) |         backup_id = self._create_backup_db_entry(volume_id=vol_id) | ||||||
|         self.assertRaises(exception.InvalidVolume, |         self.assertRaises(exception.InvalidVolume, | ||||||
| @@ -200,7 +204,8 @@ class BackupTestCase(test.TestCase): | |||||||
|  |  | ||||||
|     def test_restore_backup_with_bad_backup_status(self): |     def test_restore_backup_with_bad_backup_status(self): | ||||||
|         """Test error handling when restoring a backup with a backup |         """Test error handling when restoring a backup with a backup | ||||||
|         with a bad status""" |         with a bad status | ||||||
|  |         """ | ||||||
|         vol_id = self._create_volume_db_entry(status='restoring-backup', |         vol_id = self._create_volume_db_entry(status='restoring-backup', | ||||||
|                                               size=1) |                                               size=1) | ||||||
|         backup_id = self._create_backup_db_entry(status='available', |         backup_id = self._create_backup_db_entry(status='available', | ||||||
| @@ -240,7 +245,8 @@ class BackupTestCase(test.TestCase): | |||||||
|  |  | ||||||
|     def test_restore_backup_with_bad_service(self): |     def test_restore_backup_with_bad_service(self): | ||||||
|         """Test error handling when attempting a restore of a backup |         """Test error handling when attempting a restore of a backup | ||||||
|         with a different service to that used to create the backup""" |         with a different service to that used to create the backup | ||||||
|  |         """ | ||||||
|         vol_id = self._create_volume_db_entry(status='restoring-backup', |         vol_id = self._create_volume_db_entry(status='restoring-backup', | ||||||
|                                               size=1) |                                               size=1) | ||||||
|         backup_id = self._create_backup_db_entry(status='restoring', |         backup_id = self._create_backup_db_entry(status='restoring', | ||||||
| @@ -286,7 +292,8 @@ class BackupTestCase(test.TestCase): | |||||||
|  |  | ||||||
|     def test_delete_backup_with_bad_backup_status(self): |     def test_delete_backup_with_bad_backup_status(self): | ||||||
|         """Test error handling when deleting a backup with a backup |         """Test error handling when deleting a backup with a backup | ||||||
|         with a bad status""" |         with a bad status | ||||||
|  |         """ | ||||||
|         vol_id = self._create_volume_db_entry(size=1) |         vol_id = self._create_volume_db_entry(size=1) | ||||||
|         backup_id = self._create_backup_db_entry(status='available', |         backup_id = self._create_backup_db_entry(status='available', | ||||||
|                                                  volume_id=vol_id) |                                                  volume_id=vol_id) | ||||||
| @@ -312,7 +319,8 @@ class BackupTestCase(test.TestCase): | |||||||
|  |  | ||||||
|     def test_delete_backup_with_bad_service(self): |     def test_delete_backup_with_bad_service(self): | ||||||
|         """Test error handling when attempting a delete of a backup |         """Test error handling when attempting a delete of a backup | ||||||
|         with a different service to that used to create the backup""" |         with a different service to that used to create the backup | ||||||
|  |         """ | ||||||
|         vol_id = self._create_volume_db_entry(size=1) |         vol_id = self._create_volume_db_entry(size=1) | ||||||
|         backup_id = self._create_backup_db_entry(status='deleting', |         backup_id = self._create_backup_db_entry(status='deleting', | ||||||
|                                                  volume_id=vol_id) |                                                  volume_id=vol_id) | ||||||
| @@ -327,7 +335,8 @@ class BackupTestCase(test.TestCase): | |||||||
|  |  | ||||||
|     def test_delete_backup_with_no_service(self): |     def test_delete_backup_with_no_service(self): | ||||||
|         """Test error handling when attempting a delete of a backup |         """Test error handling when attempting a delete of a backup | ||||||
|         with no service defined for that backup, relates to bug #1162908""" |         with no service defined for that backup, relates to bug #1162908 | ||||||
|  |         """ | ||||||
|         vol_id = self._create_volume_db_entry(size=1) |         vol_id = self._create_volume_db_entry(size=1) | ||||||
|         backup_id = self._create_backup_db_entry(status='deleting', |         backup_id = self._create_backup_db_entry(status='deleting', | ||||||
|                                                  volume_id=vol_id) |                                                  volume_id=vol_id) | ||||||
| @@ -363,7 +372,8 @@ class BackupTestCase(test.TestCase): | |||||||
|  |  | ||||||
|     def test_backup_get_all_by_project_with_deleted(self): |     def test_backup_get_all_by_project_with_deleted(self): | ||||||
|         """Test deleted backups don't show up in backup_get_all_by_project. |         """Test deleted backups don't show up in backup_get_all_by_project. | ||||||
|            Unless context.read_deleted is 'yes'""" |            Unless context.read_deleted is 'yes' | ||||||
|  |         """ | ||||||
|         backups = db.backup_get_all_by_project(self.ctxt, 'fake') |         backups = db.backup_get_all_by_project(self.ctxt, 'fake') | ||||||
|         self.assertEqual(len(backups), 0) |         self.assertEqual(len(backups), 0) | ||||||
|  |  | ||||||
| @@ -381,7 +391,8 @@ class BackupTestCase(test.TestCase): | |||||||
|  |  | ||||||
|     def test_backup_get_all_by_host_with_deleted(self): |     def test_backup_get_all_by_host_with_deleted(self): | ||||||
|         """Test deleted backups don't show up in backup_get_all_by_project. |         """Test deleted backups don't show up in backup_get_all_by_project. | ||||||
|            Unless context.read_deleted is 'yes'""" |            Unless context.read_deleted is 'yes' | ||||||
|  |         """ | ||||||
|         backups = db.backup_get_all_by_host(self.ctxt, 'testhost') |         backups = db.backup_get_all_by_host(self.ctxt, 'testhost') | ||||||
|         self.assertEqual(len(backups), 0) |         self.assertEqual(len(backups), 0) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -96,7 +96,8 @@ def get_table(engine, name): | |||||||
|     """Returns an sqlalchemy table dynamically from db. |     """Returns an sqlalchemy table dynamically from db. | ||||||
|  |  | ||||||
|     Needed because the models don't work for us in migrations |     Needed because the models don't work for us in migrations | ||||||
|     as models will be far out of sync with the current data.""" |     as models will be far out of sync with the current data. | ||||||
|  |     """ | ||||||
|     metadata = sqlalchemy.schema.MetaData() |     metadata = sqlalchemy.schema.MetaData() | ||||||
|     metadata.bind = engine |     metadata.bind = engine | ||||||
|     return sqlalchemy.Table(name, metadata, autoload=True) |     return sqlalchemy.Table(name, metadata, autoload=True) | ||||||
|   | |||||||
| @@ -451,7 +451,8 @@ class ManagedRBDTestCase(DriverTestCase): | |||||||
|     def _clone_volume_from_image(self, expected_status, |     def _clone_volume_from_image(self, expected_status, | ||||||
|                                  clone_works=True): |                                  clone_works=True): | ||||||
|         """Try to clone a volume from an image, and check the status |         """Try to clone a volume from an image, and check the status | ||||||
|         afterwards""" |         afterwards. | ||||||
|  |         """ | ||||||
|         def fake_clone_image(volume, image_location): |         def fake_clone_image(volume, image_location): | ||||||
|             return True |             return True | ||||||
|  |  | ||||||
|   | |||||||
| @@ -675,7 +675,8 @@ class VolumeTestCase(test.TestCase): | |||||||
|     def _create_volume_from_image(self, expected_status, |     def _create_volume_from_image(self, expected_status, | ||||||
|                                   fakeout_copy_image_to_volume=False): |                                   fakeout_copy_image_to_volume=False): | ||||||
|         """Call copy image to volume, Test the status of volume after calling |         """Call copy image to volume, Test the status of volume after calling | ||||||
|         copying image to volume.""" |         copying image to volume. | ||||||
|  |         """ | ||||||
|         def fake_local_path(volume): |         def fake_local_path(volume): | ||||||
|             return dst_path |             return dst_path | ||||||
|  |  | ||||||
| @@ -719,12 +720,14 @@ class VolumeTestCase(test.TestCase): | |||||||
|  |  | ||||||
|     def test_create_volume_from_image_status_available(self): |     def test_create_volume_from_image_status_available(self): | ||||||
|         """Verify that before copying image to volume, it is in available |         """Verify that before copying image to volume, it is in available | ||||||
|         state.""" |         state. | ||||||
|  |         """ | ||||||
|         self._create_volume_from_image('available') |         self._create_volume_from_image('available') | ||||||
|  |  | ||||||
|     def test_create_volume_from_image_exception(self): |     def test_create_volume_from_image_exception(self): | ||||||
|         """Verify that create volume from image, the volume status is |         """Verify that create volume from image, the volume status is | ||||||
|         'downloading'.""" |         'downloading'. | ||||||
|  |         """ | ||||||
|         dst_fd, dst_path = tempfile.mkstemp() |         dst_fd, dst_path = tempfile.mkstemp() | ||||||
|         os.close(dst_fd) |         os.close(dst_fd) | ||||||
|  |  | ||||||
| @@ -869,7 +872,8 @@ class VolumeTestCase(test.TestCase): | |||||||
|  |  | ||||||
|     def test_create_volume_from_exact_sized_image(self): |     def test_create_volume_from_exact_sized_image(self): | ||||||
|         """Verify that an image which is exactly the same size as the |         """Verify that an image which is exactly the same size as the | ||||||
|         volume, will work correctly.""" |         volume, will work correctly. | ||||||
|  |         """ | ||||||
|         class _FakeImageService: |         class _FakeImageService: | ||||||
|             def __init__(self, db_driver=None, image_service=None): |             def __init__(self, db_driver=None, image_service=None): | ||||||
|                 pass |                 pass | ||||||
|   | |||||||
| @@ -92,7 +92,8 @@ class VolumeTypeTestCase(test.TestCase): | |||||||
|  |  | ||||||
|     def test_default_volume_type_missing_in_db(self): |     def test_default_volume_type_missing_in_db(self): | ||||||
|         """Ensures proper exception raised if default volume type |         """Ensures proper exception raised if default volume type | ||||||
|         is not in database.""" |         is not in database. | ||||||
|  |         """ | ||||||
|         session = db_api.get_session() |         session = db_api.get_session() | ||||||
|         default_vol_type = volume_types.get_default_volume_type() |         default_vol_type = volume_types.get_default_volume_type() | ||||||
|         self.assertEqual(default_vol_type, {}) |         self.assertEqual(default_vol_type, {}) | ||||||
|   | |||||||
| @@ -301,7 +301,8 @@ def last_completed_audit_period(unit=None): | |||||||
|  |  | ||||||
|     returns:  2 tuple of datetimes (begin, end) |     returns:  2 tuple of datetimes (begin, end) | ||||||
|               The begin timestamp of this audit period is the same as the |               The begin timestamp of this audit period is the same as the | ||||||
|               end of the previous.""" |               end of the previous. | ||||||
|  |     """ | ||||||
|     if not unit: |     if not unit: | ||||||
|         unit = CONF.volume_usage_audit_period |         unit = CONF.volume_usage_audit_period | ||||||
|  |  | ||||||
|   | |||||||
| @@ -799,5 +799,6 @@ class HostAPI(base.Base): | |||||||
|  |  | ||||||
|     def set_host_maintenance(self, context, host, mode): |     def set_host_maintenance(self, context, host, mode): | ||||||
|         """Start/Stop host maintenance window. On start, it triggers |         """Start/Stop host maintenance window. On start, it triggers | ||||||
|         volume evacuation.""" |         volume evacuation. | ||||||
|  |         """ | ||||||
|         raise NotImplementedError() |         raise NotImplementedError() | ||||||
|   | |||||||
| @@ -56,7 +56,8 @@ class Configuration(object): | |||||||
|  |  | ||||||
|     def __init__(self, volume_opts, config_group=None): |     def __init__(self, volume_opts, config_group=None): | ||||||
|         """This takes care of grafting the implementation's config |         """This takes care of grafting the implementation's config | ||||||
|            values into the config group""" |            values into the config group | ||||||
|  |         """ | ||||||
|         self.config_group = config_group |         self.config_group = config_group | ||||||
|  |  | ||||||
|         # set the local conf so that __call__'s know what to use |         # set the local conf so that __call__'s know what to use | ||||||
|   | |||||||
| @@ -100,7 +100,8 @@ class VolumeDriver(object): | |||||||
|  |  | ||||||
|     def create_volume(self, volume): |     def create_volume(self, volume): | ||||||
|         """Creates a volume. Can optionally return a Dictionary of |         """Creates a volume. Can optionally return a Dictionary of | ||||||
|         changes to the volume object to be persisted.""" |         changes to the volume object to be persisted. | ||||||
|  |         """ | ||||||
|         raise NotImplementedError() |         raise NotImplementedError() | ||||||
|  |  | ||||||
|     def create_volume_from_snapshot(self, volume, snapshot): |     def create_volume_from_snapshot(self, volume, snapshot): | ||||||
| @@ -132,7 +133,8 @@ class VolumeDriver(object): | |||||||
|  |  | ||||||
|     def create_export(self, context, volume): |     def create_export(self, context, volume): | ||||||
|         """Exports the volume. Can optionally return a Dictionary of changes |         """Exports the volume. Can optionally return a Dictionary of changes | ||||||
|         to the volume object to be persisted.""" |         to the volume object to be persisted. | ||||||
|  |         """ | ||||||
|         raise NotImplementedError() |         raise NotImplementedError() | ||||||
|  |  | ||||||
|     def remove_export(self, context, volume): |     def remove_export(self, context, volume): | ||||||
| @@ -157,7 +159,8 @@ class VolumeDriver(object): | |||||||
|  |  | ||||||
|     def get_volume_stats(self, refresh=False): |     def get_volume_stats(self, refresh=False): | ||||||
|         """Return the current state of the volume service. If 'refresh' is |         """Return the current state of the volume service. If 'refresh' is | ||||||
|            True, run the update first.""" |            True, run the update first. | ||||||
|  |         """ | ||||||
|         return None |         return None | ||||||
|  |  | ||||||
|     def do_setup(self, context): |     def do_setup(self, context): | ||||||
| @@ -514,7 +517,8 @@ class ISCSIDriver(VolumeDriver): | |||||||
|     def get_volume_stats(self, refresh=False): |     def get_volume_stats(self, refresh=False): | ||||||
|         """Get volume status. |         """Get volume status. | ||||||
|  |  | ||||||
|         If 'refresh' is True, run update the stats first.""" |         If 'refresh' is True, run update the stats first. | ||||||
|  |         """ | ||||||
|         if refresh: |         if refresh: | ||||||
|             self._update_volume_status() |             self._update_volume_status() | ||||||
|  |  | ||||||
|   | |||||||
| @@ -49,7 +49,8 @@ CONF.register_opts(volume_opts) | |||||||
|  |  | ||||||
| class GlusterfsDriver(nfs.RemoteFsDriver): | class GlusterfsDriver(nfs.RemoteFsDriver): | ||||||
|     """Gluster based cinder driver. Creates file on Gluster share for using it |     """Gluster based cinder driver. Creates file on Gluster share for using it | ||||||
|     as block device on hypervisor.""" |     as block device on hypervisor. | ||||||
|  |     """ | ||||||
|  |  | ||||||
|     def __init__(self, *args, **kwargs): |     def __init__(self, *args, **kwargs): | ||||||
|         super(GlusterfsDriver, self).__init__(*args, **kwargs) |         super(GlusterfsDriver, self).__init__(*args, **kwargs) | ||||||
| @@ -122,7 +123,8 @@ class GlusterfsDriver(nfs.RemoteFsDriver): | |||||||
|  |  | ||||||
|     def create_export(self, ctx, volume): |     def create_export(self, ctx, volume): | ||||||
|         """Exports the volume. Can optionally return a Dictionary of changes |         """Exports the volume. Can optionally return a Dictionary of changes | ||||||
|         to the volume object to be persisted.""" |         to the volume object to be persisted. | ||||||
|  |         """ | ||||||
|         pass |         pass | ||||||
|  |  | ||||||
|     def remove_export(self, ctx, volume): |     def remove_export(self, ctx, volume): | ||||||
| @@ -160,7 +162,8 @@ class GlusterfsDriver(nfs.RemoteFsDriver): | |||||||
|  |  | ||||||
|     def _ensure_shares_mounted(self): |     def _ensure_shares_mounted(self): | ||||||
|         """Look for GlusterFS shares in the flags and try to mount them |         """Look for GlusterFS shares in the flags and try to mount them | ||||||
|            locally.""" |            locally. | ||||||
|  |         """ | ||||||
|         self._mounted_shares = [] |         self._mounted_shares = [] | ||||||
|  |  | ||||||
|         self._load_shares_config(self.configuration.glusterfs_shares_config) |         self._load_shares_config(self.configuration.glusterfs_shares_config) | ||||||
| @@ -255,7 +258,8 @@ class GlusterfsDriver(nfs.RemoteFsDriver): | |||||||
|     def get_volume_stats(self, refresh=False): |     def get_volume_stats(self, refresh=False): | ||||||
|         """Get volume stats. |         """Get volume stats. | ||||||
|  |  | ||||||
|         If 'refresh' is True, update the stats first.""" |         If 'refresh' is True, update the stats first. | ||||||
|  |         """ | ||||||
|         if refresh or not self._stats: |         if refresh or not self._stats: | ||||||
|             self._update_volume_stats() |             self._update_volume_stats() | ||||||
|  |  | ||||||
|   | |||||||
| @@ -156,7 +156,8 @@ class LVMVolumeDriver(driver.VolumeDriver): | |||||||
|  |  | ||||||
|     def create_volume(self, volume): |     def create_volume(self, volume): | ||||||
|         """Creates a logical volume. Can optionally return a Dictionary of |         """Creates a logical volume. Can optionally return a Dictionary of | ||||||
|         changes to the volume object to be persisted.""" |         changes to the volume object to be persisted. | ||||||
|  |         """ | ||||||
|         self._create_volume(volume['name'], self._sizestr(volume['size'])) |         self._create_volume(volume['name'], self._sizestr(volume['size'])) | ||||||
|  |  | ||||||
|     def create_volume_from_snapshot(self, volume, snapshot): |     def create_volume_from_snapshot(self, volume, snapshot): | ||||||
| @@ -550,7 +551,8 @@ class LVMISCSIDriver(LVMVolumeDriver, driver.ISCSIDriver): | |||||||
|     def get_volume_stats(self, refresh=False): |     def get_volume_stats(self, refresh=False): | ||||||
|         """Get volume status. |         """Get volume status. | ||||||
|  |  | ||||||
|         If 'refresh' is True, run update the stats first.""" |         If 'refresh' is True, run update the stats first. | ||||||
|  |         """ | ||||||
|         if refresh: |         if refresh: | ||||||
|             self._update_volume_status() |             self._update_volume_status() | ||||||
|  |  | ||||||
| @@ -643,7 +645,8 @@ class ThinLVMVolumeDriver(LVMISCSIDriver): | |||||||
|  |  | ||||||
|     def create_volume(self, volume): |     def create_volume(self, volume): | ||||||
|         """Creates a logical volume. Can optionally return a Dictionary of |         """Creates a logical volume. Can optionally return a Dictionary of | ||||||
|         changes to the volume object to be persisted.""" |         changes to the volume object to be persisted. | ||||||
|  |         """ | ||||||
|         sizestr = self._sizestr(volume['size']) |         sizestr = self._sizestr(volume['size']) | ||||||
|         vg_name = ("%s/%s-pool" % (self.configuration.volume_group, |         vg_name = ("%s/%s-pool" % (self.configuration.volume_group, | ||||||
|                                    self.configuration.volume_group)) |                                    self.configuration.volume_group)) | ||||||
| @@ -674,7 +677,8 @@ class ThinLVMVolumeDriver(LVMISCSIDriver): | |||||||
|  |  | ||||||
|     def get_volume_stats(self, refresh=False): |     def get_volume_stats(self, refresh=False): | ||||||
|         """Get volume status. |         """Get volume status. | ||||||
|         If 'refresh' is True, run update the stats first.""" |         If 'refresh' is True, run update the stats first. | ||||||
|  |         """ | ||||||
|         if refresh: |         if refresh: | ||||||
|             self._update_volume_status() |             self._update_volume_status() | ||||||
|  |  | ||||||
|   | |||||||
| @@ -366,7 +366,8 @@ class NaElement(object): | |||||||
|     def add_new_child(self, name, content, convert=False): |     def add_new_child(self, name, content, convert=False): | ||||||
|         """Add child with tag name and context. |         """Add child with tag name and context. | ||||||
|  |  | ||||||
|            Convert replaces entity refs to chars.""" |            Convert replaces entity refs to chars. | ||||||
|  |         """ | ||||||
|         child = NaElement(name) |         child = NaElement(name) | ||||||
|         if convert: |         if convert: | ||||||
|             content = NaElement._convert_entity_refs(content) |             content = NaElement._convert_entity_refs(content) | ||||||
|   | |||||||
| @@ -1109,7 +1109,8 @@ class NetAppISCSIDriver(driver.ISCSIDriver): | |||||||
|     def get_volume_stats(self, refresh=False): |     def get_volume_stats(self, refresh=False): | ||||||
|         """Get volume status. |         """Get volume status. | ||||||
|  |  | ||||||
|         If 'refresh' is True, run update the stats first.""" |         If 'refresh' is True, run update the stats first. | ||||||
|  |         """ | ||||||
|         if refresh: |         if refresh: | ||||||
|             self._update_volume_status() |             self._update_volume_status() | ||||||
|  |  | ||||||
| @@ -1959,7 +1960,8 @@ class NetAppDirectISCSIDriver(driver.ISCSIDriver): | |||||||
|     def get_volume_stats(self, refresh=False): |     def get_volume_stats(self, refresh=False): | ||||||
|         """Get volume status. |         """Get volume status. | ||||||
|  |  | ||||||
|         If 'refresh' is True, run update the stats first.""" |         If 'refresh' is True, run update the stats first. | ||||||
|  |         """ | ||||||
|         if refresh: |         if refresh: | ||||||
|             self._update_volume_status() |             self._update_volume_status() | ||||||
|  |  | ||||||
|   | |||||||
| @@ -103,7 +103,8 @@ class NetAppNFSDriver(nfs.NfsDriver): | |||||||
|  |  | ||||||
|     def _check_dfm_flags(self): |     def _check_dfm_flags(self): | ||||||
|         """Raises error if any required configuration flag for OnCommand proxy |         """Raises error if any required configuration flag for OnCommand proxy | ||||||
|         is missing.""" |         is missing. | ||||||
|  |         """ | ||||||
|         required_flags = ['netapp_wsdl_url', |         required_flags = ['netapp_wsdl_url', | ||||||
|                           'netapp_login', |                           'netapp_login', | ||||||
|                           'netapp_password', |                           'netapp_password', | ||||||
| @@ -325,7 +326,8 @@ class NetAppCmodeNfsDriver (NetAppNFSDriver): | |||||||
|  |  | ||||||
|     def _check_flags(self): |     def _check_flags(self): | ||||||
|         """Raises error if any required configuration flag for NetApp Cloud |         """Raises error if any required configuration flag for NetApp Cloud | ||||||
|         Webservices is missing.""" |         Webservices is missing. | ||||||
|  |         """ | ||||||
|         required_flags = ['netapp_wsdl_url', |         required_flags = ['netapp_wsdl_url', | ||||||
|                           'netapp_login', |                           'netapp_login', | ||||||
|                           'netapp_password', |                           'netapp_password', | ||||||
| @@ -376,7 +378,8 @@ class NetAppDirectNfsDriver (NetAppNFSDriver): | |||||||
|  |  | ||||||
|     def _check_flags(self): |     def _check_flags(self): | ||||||
|         """Raises error if any required configuration flag for NetApp |         """Raises error if any required configuration flag for NetApp | ||||||
|         filer is missing.""" |         filer is missing. | ||||||
|  |         """ | ||||||
|         required_flags = ['netapp_login', |         required_flags = ['netapp_login', | ||||||
|                           'netapp_password', |                           'netapp_password', | ||||||
|                           'netapp_server_hostname', |                           'netapp_server_hostname', | ||||||
|   | |||||||
| @@ -298,7 +298,8 @@ class NexentaDriver(driver.ISCSIDriver):  # pylint: disable=R0921 | |||||||
|     def get_volume_stats(self, refresh=False): |     def get_volume_stats(self, refresh=False): | ||||||
|         """Get volume status. |         """Get volume status. | ||||||
|  |  | ||||||
|         If 'refresh' is True, run update the stats first.""" |         If 'refresh' is True, run update the stats first. | ||||||
|  |         """ | ||||||
|         if refresh: |         if refresh: | ||||||
|             self._update_volume_status() |             self._update_volume_status() | ||||||
|  |  | ||||||
|   | |||||||
| @@ -78,7 +78,8 @@ class RemoteFsDriver(driver.VolumeDriver): | |||||||
|  |  | ||||||
|     def delete_snapshot(self, snapshot): |     def delete_snapshot(self, snapshot): | ||||||
|         """Do nothing for this driver, but allow manager to handle deletion |         """Do nothing for this driver, but allow manager to handle deletion | ||||||
|            of snapshot in error state.""" |            of snapshot in error state. | ||||||
|  |         """ | ||||||
|         pass |         pass | ||||||
|  |  | ||||||
|     def ensure_export(self, ctx, volume): |     def ensure_export(self, ctx, volume): | ||||||
| @@ -91,7 +92,8 @@ class RemoteFsDriver(driver.VolumeDriver): | |||||||
|  |  | ||||||
|     def _create_regular_file(self, path, size): |     def _create_regular_file(self, path, size): | ||||||
|         """Creates regular file of given size. Takes a lot of time for large |         """Creates regular file of given size. Takes a lot of time for large | ||||||
|         files.""" |         files. | ||||||
|  |         """ | ||||||
|  |  | ||||||
|         block_size_mb = 1 |         block_size_mb = 1 | ||||||
|         block_count = size * units.GiB / (block_size_mb * units.MiB) |         block_count = size * units.GiB / (block_size_mb * units.MiB) | ||||||
| @@ -115,7 +117,8 @@ class RemoteFsDriver(driver.VolumeDriver): | |||||||
|  |  | ||||||
|     def _get_hash_str(self, base_str): |     def _get_hash_str(self, base_str): | ||||||
|         """returns string that represents hash of base_str |         """returns string that represents hash of base_str | ||||||
|         (in a hex format).""" |         (in a hex format). | ||||||
|  |         """ | ||||||
|         return hashlib.md5(base_str).hexdigest() |         return hashlib.md5(base_str).hexdigest() | ||||||
|  |  | ||||||
|     def copy_image_to_volume(self, context, volume, image_service, image_id): |     def copy_image_to_volume(self, context, volume, image_service, image_id): | ||||||
| @@ -185,7 +188,8 @@ class RemoteFsDriver(driver.VolumeDriver): | |||||||
|  |  | ||||||
| class NfsDriver(RemoteFsDriver): | class NfsDriver(RemoteFsDriver): | ||||||
|     """NFS based cinder driver. Creates file on NFS share for using it |     """NFS based cinder driver. Creates file on NFS share for using it | ||||||
|     as block device on hypervisor.""" |     as block device on hypervisor. | ||||||
|  |     """ | ||||||
|     def __init__(self, *args, **kwargs): |     def __init__(self, *args, **kwargs): | ||||||
|         super(NfsDriver, self).__init__(*args, **kwargs) |         super(NfsDriver, self).__init__(*args, **kwargs) | ||||||
|         self.configuration.append_config_values(volume_opts) |         self.configuration.append_config_values(volume_opts) | ||||||
| @@ -265,7 +269,8 @@ class NfsDriver(RemoteFsDriver): | |||||||
|  |  | ||||||
|     def create_export(self, ctx, volume): |     def create_export(self, ctx, volume): | ||||||
|         """Exports the volume. Can optionally return a Dictionary of changes |         """Exports the volume. Can optionally return a Dictionary of changes | ||||||
|         to the volume object to be persisted.""" |         to the volume object to be persisted. | ||||||
|  |         """ | ||||||
|         pass |         pass | ||||||
|  |  | ||||||
|     def remove_export(self, ctx, volume): |     def remove_export(self, ctx, volume): | ||||||
| @@ -433,7 +438,8 @@ class NfsDriver(RemoteFsDriver): | |||||||
|     def get_volume_stats(self, refresh=False): |     def get_volume_stats(self, refresh=False): | ||||||
|         """Get volume status. |         """Get volume status. | ||||||
|  |  | ||||||
|         If 'refresh' is True, run update the stats first.""" |         If 'refresh' is True, run update the stats first. | ||||||
|  |         """ | ||||||
|         if refresh or not self._stats: |         if refresh or not self._stats: | ||||||
|             self._update_volume_status() |             self._update_volume_status() | ||||||
|  |  | ||||||
|   | |||||||
| @@ -225,7 +225,8 @@ class RBDDriver(driver.VolumeDriver): | |||||||
|  |  | ||||||
|     def get_volume_stats(self, refresh=False): |     def get_volume_stats(self, refresh=False): | ||||||
|         """Return the current state of the volume service. If 'refresh' is |         """Return the current state of the volume service. If 'refresh' is | ||||||
|            True, run the update first.""" |            True, run the update first. | ||||||
|  |         """ | ||||||
|         if refresh: |         if refresh: | ||||||
|             self._update_volume_stats() |             self._update_volume_stats() | ||||||
|         return self._stats |         return self._stats | ||||||
|   | |||||||
| @@ -1336,7 +1336,8 @@ class StorwizeSVCDriver(san.SanISCSIDriver): | |||||||
|         """Get volume status. |         """Get volume status. | ||||||
|  |  | ||||||
|         If we haven't gotten stats yet or 'refresh' is True, |         If we haven't gotten stats yet or 'refresh' is True, | ||||||
|         run update the stats first.""" |         run update the stats first. | ||||||
|  |         """ | ||||||
|         if not self._stats or refresh: |         if not self._stats or refresh: | ||||||
|             self._update_volume_status() |             self._update_volume_status() | ||||||
|  |  | ||||||
|   | |||||||
| @@ -135,7 +135,8 @@ class VolumeManager(manager.SchedulerDependentManager): | |||||||
|  |  | ||||||
|     def init_host(self): |     def init_host(self): | ||||||
|         """Do any initialization that needs to be run if this is a |         """Do any initialization that needs to be run if this is a | ||||||
|            standalone service.""" |            standalone service. | ||||||
|  |         """ | ||||||
|  |  | ||||||
|         ctxt = context.get_admin_context() |         ctxt = context.get_admin_context() | ||||||
|         self.driver.do_setup(ctxt) |         self.driver.do_setup(ctxt) | ||||||
|   | |||||||
| @@ -43,7 +43,8 @@ def notify_usage_exists(context, volume_ref, current_period=False): | |||||||
|         purposes. |         purposes. | ||||||
|  |  | ||||||
|         Generates usage for last completed period, unless 'current_period' |         Generates usage for last completed period, unless 'current_period' | ||||||
|         is True.""" |         is True. | ||||||
|  |     """ | ||||||
|     begin, end = utils.last_completed_audit_period() |     begin, end = utils.last_completed_audit_period() | ||||||
|     if current_period: |     if current_period: | ||||||
|         audit_start = end |         audit_start = end | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								tox.ini
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								tox.ini
									
									
									
									
									
								
							| @@ -43,6 +43,6 @@ commands = | |||||||
| commands = {posargs} | commands = {posargs} | ||||||
|  |  | ||||||
| [flake8] | [flake8] | ||||||
| ignore = E711,E712,F401,F403,F811,F841,H302,H303,H304,H401,H402,H403,H404 | ignore = E711,E712,F401,F403,F811,F841,H302,H303,H304,H401,H402,H404 | ||||||
| builtins = _ | builtins = _ | ||||||
| exclude = .venv,.tox,dist,doc,openstack,*egg | exclude = .venv,.tox,dist,doc,openstack,*egg | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Dirk Mueller
					Dirk Mueller