def test_base(self):
        d1 = {'sket': {
            'bossun': 'concentration',
            'himeko': 2,
            'switch': True
        }}

        d2 = {'gintama': {
            'gin-san': 'hair',
            'shimpachi': 3,
            'kagura': False
        }}

        d_expecting = {
            'sket': {
                'bossun': 'concentration',
                'himeko': 2,
                'switch': True
            },
            'gintama': {
                'gin-san': 'hair',
                'shimpachi': 3,
                'kagura': False
            }
        }

        result = merge(d1, d2)
        self.assertDictEqual(result, d_expecting)
def update_haproxy(args, client, services):
    filter_by_tags = set(args.tag)

    context = \
        { 'haproxy': {}
        , 'services': []
        , 'env': dict(os.environ)
        }

    for service_id, tags in services.iteritems():
        if filter_by_tags and len(set(tags) & filter_by_tags) == 0:
            continue

        # Get service data
        index, service = client.catalog.service(service_id)
        service = service[0]
        # Get data
        path = 'catalog/%s/' % service_id
        index, data = client.kv.get(path, recurse=True)
        data = dict_tools.get\
            ( consul_kv_to_dict(data)
            , 'catalog', service_id
            )
        if data:
            # Here we can override any data from KV storage in Service storage
            service = dict_tools.merge(service, data)
        # service['Domain'] = (client.kv.get('catalog/%s' % service['ServiceID'])[1] or {}).get('Value')
        # Store in context
        context['services'].append(service)

    template = jinja_env.get_template(args.haproxy_template)
    result = template.render(context)

    if args.debug:
        print json.dumps(context, ensure_ascii=False, indent=2)
        print '\n---\n'
        print result
        sys.exit()
    # print ''
    # print '----'
    # print ''
    #
    # print result

    try:
        handler = open(args.haproxy_config, mode='r')
        old_config = handler.read()
        handler.close()
    except Exception as e:
        old_config = ''

    if old_config != result:
        handler = open(args.haproxy_config, mode='w')
        handler.write(result)
        handler.close()
        call(["/etc/haproxy/reload.sh"])
Beispiel #3
0
def update_haproxy(args, client, services):
    filter_by_tags = set(args.tag)

    context = \
        { 'haproxy': {}
        , 'services': []
        , 'env': dict(os.environ)
        }

    for service_id, tags in services.iteritems():
        if filter_by_tags and len(set(tags) & filter_by_tags) == 0:
            continue

        # Get service data
        index, service = client.catalog.service(service_id)
        service = service[0]
        # Get data
        path = 'catalog/%s/' % service_id
        index, data = client.kv.get(path, recurse=True)
        data = dict_tools.get\
            ( consul_kv_to_dict(data)
            , 'catalog', service_id
            )
        if data:
            # Here we can override any data from KV storage in Service storage
            service = dict_tools.merge(service, data)
        # service['Domain'] = (client.kv.get('catalog/%s' % service['ServiceID'])[1] or {}).get('Value')
        # Store in context
        context['services'].append(service)

    template = jinja_env.get_template(args.haproxy_template)
    result = template.render(context)

    # print json.dumps(context, ensure_ascii=False, indent=2)
    # print ''
    # print '----'
    # print ''
    #
    # print result

    try:
        handler = open(args.haproxy_config, mode='r')
        old_config = handler.read()
        handler.close()
    except Exception as e:
        old_config = ''

    if old_config != result:
        handler = open(args.haproxy_config, mode='w')
        handler.write(result)
        handler.close()
        call(["/etc/haproxy/reload.sh"])