<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def generate_ha_relation_data(service, extra_settings=None):
 """ Generate relation data for ha relation Based on configuration options and unit interfaces, generate a json encoded dict of relation data items for the hacluster relation, providing configuration for DNS HA or VIP's + haproxy clone sets. Example of supplying additional settings:: COLO_CONSOLEAUTH = 'inf: res_nova_consoleauth grp_nova_vips' AGENT_CONSOLEAUTH = 'ocf:openstack:nova-consoleauth' AGENT_CA_PARAMS = 'op monitor interval="5s"' ha_console_settings = { 'colocations': {'vip_consoleauth': COLO_CONSOLEAUTH}, 'init_services': {'res_nova_consoleauth': 'nova-consoleauth'}, 'resources': {'res_nova_consoleauth': AGENT_CONSOLEAUTH}, 'resource_params': {'res_nova_consoleauth': AGENT_CA_PARAMS}) generate_ha_relation_data('nova', extra_settings=ha_console_settings) @param service: Name of the service being configured @param extra_settings: Dict of additional resource data @returns dict: json encoded data for use with relation_set """

    _haproxy_res = 'res_{}_haproxy'.format(service)
    _relation_data = {
        'resources': {
            _haproxy_res: 'lsb:haproxy',
        },
        'resource_params': {
            _haproxy_res: 'op monitor interval="5s"'
        },
        'init_services': {
            _haproxy_res: 'haproxy'
        },
        'clones': {
            'cl_{}_haproxy'.format(service): _haproxy_res
        },
    }

    if extra_settings:
        for k, v in extra_settings.items():
            if _relation_data.get(k):
                _relation_data[k].update(v)
            else:
                _relation_data[k] = v

    if config('dns-ha'):
        update_hacluster_dns_ha(service, _relation_data)
    else:
        update_hacluster_vip(service, _relation_data)

    return {
        'json_{}'.format(k): json.dumps(v, **JSON_ENCODE_OPTIONS)
        for k, v in _relation_data.items() if v
    }