'Create a static address in a region, or a global address.
:param  name: Name of static address
:type   name: ``str``
:keyword  region: Name of region for the address (e.g. \'us-central1\')
Use \'global\' to create a global address.
:type     region: ``str`` or :class:`GCERegion`
:keyword  address: Ephemeral IP address to promote to a static one
(e.g. \'xxx.xxx.xxx.xxx\')
:type     address: ``str`` or ``None``
:keyword  description: Optional descriptive comment.
:type     description: ``str`` or ``None``
:return:  Static Address object
:rtype:   :class:`GCEAddress`'

def ex_create_address(self, name, region=None, address=None, description=None):

    region = (region or self.region)
    if ((region != 'global') and (not hasattr(region, 'name'))):
        region = self.ex_get_region(region)
    elif (region is None):
        raise ValueError('REGION_NOT_SPECIFIED', 'Region    must    be    provided    for    an    address')
    address_data = {'name': name}
    if address:
        address_data['address'] = address
    if description:
        address_data['description'] = description
    if (region == 'global'):
        request = '/global/addresses'
    else:
        request = ('/regions/%s/addresses' % region.name)
    self.connection.async_request(request, method='POST', data=address_data)
    return self.ex_get_address(name, region=region)
