diff --git a/automonty b/automonty index 75e2899..9384e9c 100755 --- a/automonty +++ b/automonty @@ -60,7 +60,7 @@ def make_comment( selector, rval, hostname ): rvalbits.append( "%s=%s" % ( k, ",".join( "%s:%s" % vi for vi in v.items() ) ) ) else: rvalbits.append( "%s=%s" % ( k, v ) ) - if selector == hostname: + if selector == hostname or selector is None: return "%s [%s]" % ( hostname, " ".join( rvalbits ) ) else: return "%s [%s] %s" % ( hostname, " ".join( rvalbits ), selector ) @@ -83,12 +83,22 @@ def connection( host, username = None, password = None, port = 8729 ): kwargs[ 'ssl_wrapper' ] = ssl_ctx.wrap_socket return librouteros.connect( **kwargs ) +def router_in_groups( options, groups ): + if not groups: + return False + for group in groups: + if group in options.get( 'group', [] ): + return True + return False + def connect_routers( config, args ): routers = config.get( 'router', {} ) rval = {} with progress.bar.PixelBar( 'Connecting', max = len( routers ) ) as bar: - for ( name, kwargs ) in routers.items(): - if ( not args.only ) or ( name in args.only ): + for ( name, options ) in routers.items(): + if ( not args.only_router and not args.only_group ) or ( name in args.only_router ) or router_in_groups( options, args.only_group ): + kwargs = {} + kwargs.update( options.get( 'connection', {} ) ) if 'host' not in kwargs: kwargs[ 'host' ] = name rval[ name ] = connection( **kwargs ) @@ -138,10 +148,10 @@ def monty_fixup( config, args, routers ): while rev.endswith( "." ): rev = rev[ :-1 ] reverse[ item[ 'interface' ] ] = rev - sel = rev + sel = reverse[ item[ 'interface' ] ] new_comment = make_comment( sel, rval, hst ) if args.dry_run: - print( item[ 'interface' ], item[ 'address' ], '->', new_comment ) + print( '/ip address set [find where interface="%s" and network="%s"] comment="%s"' % ( item[ 'interface' ], item[ 'network' ], new_comment ) ) else: print( name, ":", item[ 'interface' ], new_comment ) ip_address.update( **{ 'comment': new_comment, '.id': item[ '.id' ] } ) @@ -164,7 +174,7 @@ def monty_fixup( config, args, routers ): hst = reverse.get( item[ 'interface' ], "XXX " + item[ 'interface' ] ) new_comment = make_comment( sel, rval, hst ) if args.dry_run: - print( item[ 'interface' ], item[ 'address' ], '->', new_comment ) + print( '/ipv6 address set [find where interface="%s" and address="%s" ] comment="%s"' % ( item[ 'interface' ], item[ 'address' ], new_comment ) ) else: print( name, ":", item[ 'interface' ], new_comment ) ipv6_address.update( **{ 'comment': new_comment, '.id': item[ '.id' ] } ) @@ -184,7 +194,8 @@ def main(): ) subparsers = parser.add_subparsers() - parser.add_argument( '--only', action = 'append' ) + parser.add_argument( '--only-router', action = 'append', default = [] ) + parser.add_argument( '--only-group', action = 'append', default = [] ) parser.add_argument( '-n', '--dry-run', action = 'store_true' ) parser_check = subparsers.add_parser( 'check' )