def upgrade_releases(connection): select = text( """SELECT id, attributes_metadata, roles_metadata from releases""") update = text( """UPDATE releases SET attributes_metadata = :attrs, roles_metadata = :roles, wizard_metadata = :wiz_meta WHERE id = :id""") r = connection.execute(select) # reading fixture files in loop is in general a bad idea and as long as # wizard_metadata is the same for all existing releases getting it can # be moved outside of the loop for release in r: attrs_meta = upgrade_release_attributes_50_to_51( jsonutils.loads(release[1])) roles_meta = upgrade_release_roles_50_to_51( jsonutils.loads(release[2])) connection.execute( update, id=release[0], attrs=jsonutils.dumps(attrs_meta), roles=jsonutils.dumps(roles_meta), wiz_meta=jsonutils.dumps(_wizard_meta) )
def test_release_attributes_metadata_upgrade_50_to_51(self): attributes_metadata_50 = { 'editable': { 'storage': { 'volumes_ceph': { 'value': False, 'label': "Ceph RBD for volumes (Cinder)", 'description': "Configures Cinder to store " "volumes in Ceph RBD images.", 'weight': 20, 'type': "checkbox", 'conflicts': [{ "settings:common.libvirt_type.value": "vcenter" }, { "settings:storage.volumes_lvm.value": True }] }, 'objects_ceph': { 'value': False, 'label': "Ceph RadosGW for objects(Swift API)", 'description': "Configures RadosGW front end " "for Ceph RBD.", 'weight': 40, 'type': "checkbox", 'depends': [{ "settings:storage.images_ceph.value": True }], 'conflicts': [{ "settings:common.libvirt_type.value": "vcenter" }] } } } } attributes_metadata_51 = upgrade_release_attributes_50_to_51( attributes_metadata_50) storage_attrs = attributes_metadata_51["editable"]["storage"] self.assertEqual(storage_attrs['volumes_ceph'].get("restrictions"), [ "settings:common.libvirt_type.value == 'vcenter'", "settings:storage.volumes_lvm.value == true" ]) self.assertEqual(storage_attrs['objects_ceph'].get("restrictions"), [ "settings:storage.images_ceph.value != true", "settings:common.libvirt_type.value == 'vcenter'" ])
def test_release_attributes_metadata_upgrade_50_to_51(self): attributes_metadata_50 = { 'editable': { 'storage': { 'volumes_ceph': { 'value': False, 'label': "Ceph RBD for volumes (Cinder)", 'description': "Configures Cinder to store " "volumes in Ceph RBD images.", 'weight': 20, 'type': "checkbox", 'conflicts': [ {"settings:common.libvirt_type.value": "vcenter"}, {"settings:storage.volumes_lvm.value": True} ] }, 'objects_ceph': { 'value': False, 'label': "Ceph RadosGW for objects(Swift API)", 'description': "Configures RadosGW front end " "for Ceph RBD.", 'weight': 40, 'type': "checkbox", 'depends': [ {"settings:storage.images_ceph.value": True} ], 'conflicts': [ {"settings:common.libvirt_type.value": "vcenter"} ] } } } } attributes_metadata_51 = upgrade_release_attributes_50_to_51( attributes_metadata_50 ) storage_attrs = attributes_metadata_51["editable"]["storage"] self.assertEqual( storage_attrs['volumes_ceph'].get("restrictions"), [ "settings:common.libvirt_type.value == 'vcenter'", "settings:storage.volumes_lvm.value == true" ] ) self.assertEqual( storage_attrs['objects_ceph'].get("restrictions"), [ "settings:storage.images_ceph.value != true", "settings:common.libvirt_type.value == 'vcenter'" ] )