def test_raise_exception_when_plugin_overlap_release_volumes(self): cluster = self.env.create_cluster(api=False) plugin_name = 'test_plugin_3' volumes_metadata = { 'volumes_roles_mapping': { plugin_name: [ {'allocate_size': 'min', 'id': plugin_name} ] }, 'volumes': [ {'id': 'os', 'type': 'vg'}, {'id': plugin_name, 'type': 'vg'} ] } self.env.create_plugin( api=True, cluster=cluster, name=plugin_name, package_version='3.0.0', fuel_version=['7.0'], volumes_metadata=volumes_metadata ) expected_message = ( 'Plugin test_plugin_3-0.1.0 is overlapping with release ' 'by introducing the same volume with id "os"') with self.assertRaisesRegexp(errors.AlreadyExists, expected_message): PluginManager.get_volumes_metadata(cluster)
def test_raise_exception_when_plugin_overlap_another_plugin_volumes(self): plugin_name = 'test_plugin_4' volumes_metadata = { 'volumes_roles_mapping': { plugin_name: [{ 'allocate_size': 'min', 'id': plugin_name }] }, 'volumes': [{ 'id': 'test_plugin_2', 'type': 'vg' }, { 'id': plugin_name, 'type': 'vg' }] } self.env.create_plugin(api=True, cluster=self.cluster, name=plugin_name, package_version='3.0.0', fuel_version=['7.0'], volumes_metadata=volumes_metadata) expected_message = ( 'Plugin test_plugin_4-0.1.0 is overlapping with plugin ' 'test_plugin_2-0.1.0 by introducing the same volume ' 'with id "test_plugin_2"') with self.assertRaisesRegexp(errors.AlreadyExists, expected_message): PluginManager.get_volumes_metadata(self.cluster)
def test_raise_exception_when_plugin_overlap_release_volumes(self): cluster = self.env.create_cluster(api=False) plugin_name = 'test_plugin_3' volumes_metadata = { 'volumes_roles_mapping': { plugin_name: [ {'allocate_size': 'min', 'id': plugin_name} ] }, 'volumes': [ {'id': 'os', 'type': 'vg'}, {'id': plugin_name, 'type': 'vg'} ] } self.env.create_plugin( cluster=cluster, name=plugin_name, package_version='3.0.0', fuel_version=['7.0'], volumes_metadata=volumes_metadata ) expected_message = ( 'Plugin test_plugin_3-0.1.0 is overlapping with release ' 'by introducing the same volume with id "os"') with self.assertRaisesRegexp(errors.AlreadyExists, expected_message): PluginManager.get_volumes_metadata(cluster)
def test_raise_exception_when_plugin_overlap_another_plugin_volumes(self): plugin_name = 'test_plugin_4' volumes_metadata = { 'volumes_roles_mapping': { plugin_name: [ {'allocate_size': 'min', 'id': plugin_name} ] }, 'volumes': [ {'id': 'test_plugin_2', 'type': 'vg'}, {'id': plugin_name, 'type': 'vg'} ] } self.env.create_plugin( cluster=self.cluster, name=plugin_name, package_version='3.0.0', fuel_version=['7.0'], volumes_metadata=volumes_metadata ) expected_message = ( 'Plugin test_plugin_4-0.1.0 is overlapping with plugin ' 'test_plugin_2-0.1.0 by introducing the same volume ' 'with id "test_plugin_2"') with self.assertRaisesRegexp(errors.AlreadyExists, expected_message): PluginManager.get_volumes_metadata(self.cluster)
def test_get_plugin_volumes_metadata_for_cluster(self): volumes_metadata = PluginManager.get_volumes_metadata(self.cluster) expected_volumes_metadata = { 'volumes_roles_mapping': { 'test_plugin_1': [{ 'allocate_size': 'min', 'id': 'test_plugin_1' }], 'test_plugin_2': [{ 'allocate_size': 'min', 'id': 'test_plugin_2' }], }, 'volumes': [{ 'id': 'test_plugin_1', 'type': 'vg' }, { 'id': 'test_plugin_2', 'type': 'vg' }] } self.assertEqual(volumes_metadata['volumes_roles_mapping'], expected_volumes_metadata['volumes_roles_mapping']) self.assertItemsEqual(volumes_metadata['volumes'], expected_volumes_metadata['volumes'])
def test_get_empty_plugin_volumes_metadata_for_cluster(self): cluster = self.env.create_cluster(api=False) self.env.create_plugin(cluster=cluster, package_version='3.0.0') volumes_metadata = PluginManager.get_volumes_metadata(cluster) expected_volumes_metadata = { 'volumes_roles_mapping': {}, 'volumes': [] } self.assertEqual(volumes_metadata, expected_volumes_metadata)
def test_get_empty_plugin_volumes_metadata_for_cluster(self): cluster = self.env.create_cluster(api=False) self.env.create_plugin( cluster=cluster, package_version='3.0.0' ) volumes_metadata = PluginManager.get_volumes_metadata(cluster) expected_volumes_metadata = { 'volumes_roles_mapping': {}, 'volumes': []} self.assertEqual( volumes_metadata, expected_volumes_metadata)
def get_volumes_metadata(cls, instance): """Return proper volumes metadata for cluster and consists with general volumes metadata from release and volumes metadata from plugins which releated to this cluster :param instance: Cluster DB instance :returns: dict -- object with merged volumes metadata """ volumes_metadata = copy.deepcopy(instance.release.volumes_metadata) plugin_volumes = PluginManager.get_volumes_metadata(instance) volumes_metadata["volumes_roles_mapping"].update(plugin_volumes["volumes_roles_mapping"]) volumes_metadata["volumes"].extend(plugin_volumes["volumes"]) return volumes_metadata
def get_volumes_metadata(cls, instance): """Return proper volumes metadata for cluster and consists with general volumes metadata from release and volumes metadata from plugins which releated to this cluster :param instance: Cluster DB instance :returns: dict -- object with merged volumes metadata """ volumes_metadata = copy.deepcopy(instance.release.volumes_metadata) plugin_volumes = PluginManager.get_volumes_metadata(instance) volumes_metadata['volumes_roles_mapping'].update( plugin_volumes['volumes_roles_mapping']) volumes_metadata['volumes'].extend(plugin_volumes['volumes']) return volumes_metadata
def test_get_plugin_volumes_metadata_for_cluster(self): volumes_metadata = PluginManager.get_volumes_metadata( self.cluster) expected_volumes_metadata = { 'volumes_roles_mapping': { 'test_plugin_1': [ {'allocate_size': 'min', 'id': 'test_plugin_1'} ], 'test_plugin_2': [ {'allocate_size': 'min', 'id': 'test_plugin_2'} ], }, 'volumes': [ {'id': 'test_plugin_1', 'type': 'vg'}, {'id': 'test_plugin_2', 'type': 'vg'} ] } self.assertEqual( volumes_metadata['volumes_roles_mapping'], expected_volumes_metadata['volumes_roles_mapping']) self.assertItemsEqual( volumes_metadata['volumes'], expected_volumes_metadata['volumes'])