Free an Elastic IP address.  Pass either a public IP address to release an
    EC2 Classic EIP, or an AllocationId to release a VPC EIP.

    public_ip
        (string) - The public IP address - for EC2 elastic IPs.
    allocation_id
        (string) - The Allocation ID - for VPC elastic IPs.

    returns
        (bool) - True on success, False on failure

    CLI Example:

    .. code-block:: bash

        salt myminion boto_ec2.release_eip_address allocation_id=eipalloc-ef382c8a

    .. versionadded:: 2016.3.0

def release_eip_address(public_ip=None, allocation_id=None, region=None, key=None,
                        keyid=None, profile=None):
    '''
    Free an Elastic IP address.  Pass either a public IP address to release an
    EC2 Classic EIP, or an AllocationId to release a VPC EIP.

    public_ip
        (string) - The public IP address - for EC2 elastic IPs.
    allocation_id
        (string) - The Allocation ID - for VPC elastic IPs.

    returns
        (bool) - True on success, False on failure

    CLI Example:

    .. code-block:: bash

        salt myminion boto_ec2.release_eip_address allocation_id=eipalloc-ef382c8a

    .. versionadded:: 2016.3.0
    '''
    if not salt.utils.data.exactly_one((public_ip, allocation_id)):
        raise SaltInvocationError("Exactly one of 'public_ip' OR "
                                  "'allocation_id' must be provided")

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

    try:
        return conn.release_address(public_ip, allocation_id)
    except boto.exception.BotoServerError as e:
        log.error(e)
        return False