Allocate a new Elastic IP address and associate it with your account.

    domain
        (string) Optional param - if set to exactly 'vpc', the address will be
        allocated to the VPC.  The default simply maps the EIP to your
        account container.

    returns
        (dict) dict of 'interesting' information about the newly allocated EIP,
        with probably the most interesting keys being 'public_ip'; and
        'allocation_id' iff 'domain=vpc' was passed.

    CLI Example:

    .. code-block:: bash

        salt-call boto_ec2.allocate_eip_address domain=vpc

    .. versionadded:: 2016.3.0

def allocate_eip_address(domain=None, region=None, key=None, keyid=None, profile=None):
    '''
    Allocate a new Elastic IP address and associate it with your account.

    domain
        (string) Optional param - if set to exactly 'vpc', the address will be
        allocated to the VPC.  The default simply maps the EIP to your
        account container.

    returns
        (dict) dict of 'interesting' information about the newly allocated EIP,
        with probably the most interesting keys being 'public_ip'; and
        'allocation_id' iff 'domain=vpc' was passed.

    CLI Example:

    .. code-block:: bash

        salt-call boto_ec2.allocate_eip_address domain=vpc

    .. versionadded:: 2016.3.0
    '''
    if domain and domain != 'vpc':
        raise SaltInvocationError('The only permitted value for the \'domain\' param is \'vpc\'.')

    conn = _get_conn(region=region, key=key, keyid=keyid, profile=profile)

    try:
        address = conn.allocate_address(domain=domain)
    except boto.exception.BotoServerError as e:
        log.error(e)
        return False

    interesting = ['allocation_id', 'association_id', 'domain', 'instance_id',
                   'network_interface_id', 'network_interface_owner_id', 'public_ip',
                   'private_ip_address']

    return dict([(x, getattr(address, x)) for x in interesting])