'Add zone configuration.
This method will add the zone configuration passed by user.
:param add_zones_info: Zone names mapped to members. Zone members
are colon separated but case-insensitive
.. code-block:: python
{   zonename1:[zonememeber1,zonemember2,...],
zonename2:[zonemember1, zonemember2,...]...}
e.g:
\'openstack50060b0000c26604201900051ee8e329\':
[\'50:06:0b:00:00:c2:66:04\', \'20:19:00:05:1e:e8:e3:29\']
:param activate: True will activate the zone config.
:param active_zone_set: Active zone set dict retrieved from
get_active_zone_set method
:raises BrocadeZoningHttpException:'

def add_zones(self, add_zones_info, activate, active_zone_set=None):

    LOG.debug('Add    zones    -    zones    passed:    %(zones)s.', {'zones': add_zones_info})
    cfg_name = zone_constant.CFG_NAME
    cfgs = self.cfgs
    zones = self.zones
    alias = self.alias
    qlps = self.qlps
    ifas = self.ifas
    active_cfg = self.active_cfg
    (zones, cfgs, active_cfg) = self.add_zones_cfgs(cfgs, zones, add_zones_info, active_cfg, cfg_name)
    data = self.form_zone_string(cfgs, active_cfg, zones, alias, qlps, ifas, activate)
    LOG.debug('Add    zones:    final    zone    string    after    applying    to    the    switch:    %(zonestring)s', {'zonestring': data})
    (error_code, error_msg) = self.post_zone_data(data)
    if (error_code != '0'):
        msg = (_('Applying    the    zones    and    cfgs    to    the    switch    failed    (error    code=%(err_code)s    error    msg=%(err_msg)s.') % {'err_code': error_code, 'err_msg': error_msg})
        LOG.error(msg)
        raise exception.BrocadeZoningHttpException(reason=msg)
