def get_relation_ip(interface, cidr_network=None):
    """Return this unit's IP for the given interface.

    Allow for an arbitrary interface to use with network-get to select an IP.
    Handle all address selection options including passed cidr network and
    IPv6.

    Usage: get_relation_ip('amqp', cidr_network='10.0.0.0/8')

    @param interface: string name of the relation.
    @param cidr_network: string CIDR Network to select an address from.
    @raises Exception if prefer-ipv6 is configured but IPv6 unsupported.
    @returns IPv6 or IPv4 address
    """
    # Select the interface address first
    # For possible use as a fallback bellow with get_address_in_network
    try:
        # Get the interface specific IP
        address = network_get_primary_address(interface)
    except NotImplementedError:
        # If network-get is not available
        address = get_host_ip(unit_get('private-address'))
    except NoNetworkBinding:
        log("No network binding for {}".format(interface), WARNING)
        address = get_host_ip(unit_get('private-address'))

    if config('prefer-ipv6'):
        # Currently IPv6 has priority, eventually we want IPv6 to just be
        # another network space.
        assert_charm_supports_ipv6()
        return get_ipv6_addr()[0]
    elif cidr_network:
        # If a specific CIDR network is passed get the address from that
        # network.
        return get_address_in_network(cidr_network, address)

    # Return the interface address
    return address
Return this unit's IP for the given interface.

    Allow for an arbitrary interface to use with network-get to select an IP.
    Handle all address selection options including passed cidr network and
    IPv6.

    Usage: get_relation_ip('amqp', cidr_network='10.0.0.0/8')

    @param interface: string name of the relation.
    @param cidr_network: string CIDR Network to select an address from.
    @raises Exception if prefer-ipv6 is configured but IPv6 unsupported.
    @returns IPv6 or IPv4 address