def update_zone(self, zone, domain, type='master', ttl=None, extra=None):
        if ttl is None:
            ttl = zone.ttl
        if extra is None:
            extra = zone.extra
        else:
            extra_fields = ZONE_EXTRA_PARAMS_DEFAULT_VALUES.keys()
            missing = set(extra_fields).difference(set(extra.keys()))
            for field in missing:
                extra[field] = zone.extra.get(field)
        schema_params = SCHEMA_BUILDER_MAP.get('update_zone')
        attributes = schema_params.get('attributes')
        schema = api_schema_builder(schema_params.get('urn_nid'),
                                    schema_params.get('method'),
                                    attributes)
        params = {'apiuser': self.key, 'apikey': self.secret,
                  'zonename': domain, 'ttl': ttl}
        params.update(extra)
        urn = schema.getchildren()[0]
        for child in urn:
            key = child.tag.split(':')[2]
            if key in attributes:
                if isinstance(params.get(key), int):
                    child.text = "%d"
                else:
                    child.text = "%s"
        # We can't insert values directly in child.text because API raises
        # and exception for values that need to be integers. And tostring
        # method from ElementTree can't handle int values.
        skel = ensure_string(tostring(schema))  # Deal with PY3
        req_data = skel % (self.key, self.secret, domain, extra['ns'],
                           extra['mbox'], extra['refresh'], extra['retry'],
                           extra['expire'], extra['minimum'], ttl,
                           extra['xfer'], extra['update_acl'])
        action = '/services/dns/updateZone.php?'
        headers = {"SOAPAction": "urn:updateZonewsdl#updateZone"}
        try:
            self.connection.request(action=action,
                                    data=req_data,
                                    method="POST",
                                    headers=headers)
        except DurableDNSException:
            e = sys.exc_info()[1]
            if 'Zone does not exist' in e.message:
                raise ZoneDoesNotExistError(zone_id=zone.id, driver=self,
                                            value=e.message)
            raise e

        # After update the zone, serial number change. In order to have it
        # updated, we need to get again the zone data.
        zone = self.get_zone(zone.id)
        return zone
With optional 'irmc_boot_iso' file name.
dataset/ETHPy150Open apache/libcloud/libcloud/dns/drivers/durabledns.py/DurableDNSDriver.update_zone--crossover with--dataset/ETHPy150Open openstack/ironic/ironic/tests/unit/drivers/modules/irmc/test_boot.py/IRMCDeployPrivateMethodsTestCase.test__parse_instance_info_with_boot_iso_file_name_ok