'Add a volume to a storage group.
:param serial_number: array serial number
:param list_device_id: list of volume device id
:param storagegroup_name: storage group name
:param extra_specs: extra specifications'

def add_volumes_to_storage_group(self, serial_number, list_device_id, storagegroup_name, extra_specs):

    if (not list_device_id):
        LOG.info('add_volumes_to_storage_group:    No    volumes    to    add')
        return
    start_time = time.time()
    temp_device_id_list = list_device_id
    @coordination.synchronized('emc-sg-{sg_name}')
    def do_add_volume_to_sg(sg_name):
        volume_list = self.rest.get_volumes_in_storage_group(serial_number, storagegroup_name)
        for volume in volume_list:
            if (volume in temp_device_id_list):
                LOG.info('Volume:    %(volume_name)s    is    already    part    of    storage    group    %(sg_name)s.', {'volume_name': volume, 'sg_name': storagegroup_name})
                temp_device_id_list.remove(volume)
        self.rest.add_vol_to_sg(serial_number, storagegroup_name, temp_device_id_list, extra_specs)
    do_add_volume_to_sg(storagegroup_name)
    LOG.debug('Add    volumes    to    storagegroup    took:    %(delta)s    H:MM:SS.', {'delta': self.utils.get_time_delta(start_time, time.time())})
    LOG.info('Added    volumes    to    storage    group    %(sg_name)s.', {'sg_name': storagegroup_name})
