# HG changeset patch # User Tero Marttila # Date 1387211797 -7200 # Node ID 560ba054425434886dc53bdffc1406d253023ffe # Parent 8c0c1b6e6afff12d4fbbe7c6ffb8f08a0a398766 pvl.hosts-import: ugly indexed foo.X keys for multi-value fields.. diff -r 8c0c1b6e6aff -r 560ba0544254 bin/pvl.hosts-import --- a/bin/pvl.hosts-import Mon Dec 16 18:36:09 2013 +0200 +++ b/bin/pvl.hosts-import Mon Dec 16 18:36:37 2013 +0200 @@ -1,10 +1,10 @@ #!/usr/bin/env python """ - Manipulate host definitions for dns/dhcp. + Import hosts from existing BIND or dhcpd files. """ -import pvl.args, optparse +import pvl.args import pvl.dns.zone import pvl.dhcp.config import pvl.ldap.args @@ -143,7 +143,7 @@ hostname, domain = fixed_address.split('.', 1) #if suffix : - # yield hostname, 'ethernet:{suffix}'.format(suffix=suffix), ethernet + # yield hostname, ('ethernet', suffix), ethernet if hostname and ethernet : yield hostname, 'ethernet', ethernet else : @@ -308,18 +308,18 @@ log.info("%s: %s (%s)", host, owner, comment) - yield 'owner-comment', comment + yield 'comment-owner', comment yield 'owner', owner, else : log.warn("%s: unknown owner: %s", host, info) - yield 'comment', "owner: {group} / {owner}".format( + yield 'comment-owner', "{group} / {owner}".format( group = info.get('group', ''), owner = info.get('owner', ''), ) if info.get('host') : - yield 'comment', info['host'] + yield 'comment-host', info['host'] def process_hosts_comments (options, import_hosts) : """ @@ -354,12 +354,12 @@ if options.import_zone_hosts: for info in import_zone_hosts(options, - pvl.args.apply_file(options.import_zone_hosts)) : + pvl.args.apply_file(options.import_zone_hosts, 'r', options.input_charset)) : yield info if options.import_dhcp_hosts: for info in import_dhcp_conf(options, - pvl.args.apply_file(options.import_dhcp_hosts)) : + pvl.args.apply_file(options.import_dhcp_hosts, 'r', options.input_charset)) : yield info def import_hosts (options) : @@ -389,7 +389,7 @@ # sort by IP if ip : - sort = ip = ip[0] + sort = ip[0] else : # fake, to sort correctly sort = ipaddr.IPAddress(0) @@ -412,7 +412,7 @@ hosts = [(host, fields) for sort, host, fields in sorted(process_export_hosts(options, hosts))] for host, fields in hosts : - for comment in fields.get('comment', ()) : + for comment in fields.get('comment-host', ()): print >>file, u"# {comment}".format(comment=comment) print >>file, u"[{host}]".format(host=host) @@ -420,12 +420,23 @@ for field, fmt in ( ('ip', None), ('ethernet', None), - ('owner', u"\t{field:15} = {value} # {fields[owner-comment][0]}"), + ('owner', u"\t{field:15} = {value} # {fields[comment-owner][0]}"), + ('alias', None), ) : if not fmt : fmt = u"\t{field:15} = {value}" + + values = fields.get(field, ()) - for value in fields.get(field, ()) : + if len(values) > 1 : + for index, value in enumerate(values, 1) : + print >>file, fmt.format( + field = "{field}.{index}".format(field=field, index=index), + value = value, + fields = fields + ) + elif len(values) > 0 : + value, = values print >>file, fmt.format(field=field, value=value, fields=fields) print >>file