1
0
mirror of https://github.com/CumulusNetworks/ifupdown2.git synced 2024-05-06 15:54:50 +00:00
CumulusNetworks-ifupdown2/docs/examples/generate_interfaces.py
roopa 883f7f83f2 Add examples and script to generate sample interfaces file
Ticket: CM-2643
Reviewed By:
Testing Done: Tested build/install

This also pulls in python-gvgen package from wheezy sid into our
upstream dir. Previously i had packaged the gvgen module directly
into the ifupdown package
2014-05-19 07:00:12 -07:00

151 lines
4.7 KiB
Python
Executable File

#!/usr/bin/python
import argparse
import sys
import subprocess
""" This script prints to stdout /etc/network/interfaces entries for
requested interfaces.
Currently it supports generation of interfaces(5) section for all
swp interfaces on the system. And also an interface section
for a bridge with all swp ports.
Example use of this script:
generate the swp_defaults file:
(bkup existing /etc/network/interfaces.d/swp_defaults file if one exists)
#generate_interfaces.py -s > /etc/network/interfaces.d/swp_defaults
User -m option if you want the new swp_defaults to be auto merged
with the contents from the old file, use -m option
#generate_interfaces.py -s -m /etc/network/interfaces.d/swp_defaults > /etc/network/interfaces.d/swp_defaults.new
Include the swp_defaults file in /etc/network/interfaces file
(if not already there) using the source command as shown below:
source /etc/network/interfaces.d/swp_defaults
"""
def get_swp_interfaces():
porttab_path = '/var/lib/cumulus/porttab'
ports = []
ptfile = open(porttab_path, 'r')
for line in ptfile.readlines():
line = line.strip()
if '#' in line:
continue
try:
ports.append(line.split()[0])
except ValueError:
continue
return ports
def print_swp_defaults_header():
print '''
# ** This file is autogenerated by /usr/share/doc/python-ifupdown2/generate_interfaces.py **
#
# This is /etc/network/interfaces section for all available swp
# ports on the system.
#
# To include this file in the main /etc/network/interfaces file,
# copy this file under /etc/network/interfaces.d/ and use the
# source line in the /etc/network/interfaces file.
#
# example entry in /etc/network/interfaces:
# source /etc/network/interfaces.d/<filename>
#
# See manpage interfaces(5) for details.
'''
def print_bridge_untagged_defaults_header():
print '''
# ** This file is autogenerated by /usr/share/doc/python-ifupdown2/generate_interfaces.py **
#
# This is /etc/network/interfaces section for a bridge device with all swp
# ports in the system.
#
# To include this file in the main /etc/network/interfaces file,
# copy this file under /etc/network/interfaces.d/ and use the
# source line in the /etc/network/interfaces file as shown below.
# details.
#
# example entry in /etc/network/interfaces:
# source /etc/network/interfaces.d/filename
#
# See manpage interfaces(5) for details
'''
def interfaces_print_swp_default(swp_intf):
outbuf = None
if args.mergefile:
try:
cmd = ['/sbin/ifquery', '%s' %swp_intf, '-i', '%s' %args.mergefile]
outbuf = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
except Exception, e:
# no interface found gen latest
pass
if not outbuf:
outbuf = 'auto %s\niface %s\n\n' %(swp_intf, swp_intf)
return outbuf
def interfaces_print_swp_defaults(swp_intfs):
print_swp_defaults_header()
outbuf = ''
for i in swp_intfs:
outbuf += interfaces_print_swp_default(i)
print outbuf
def interfaces_print_bridge_default(swp_intfs):
print_bridge_untagged_defaults_header()
outbuf = 'auto bridge-untagged\n'
outbuf += 'iface bridge-untagged\n'
outbuf += ' bridge-ports \\\n'
linen = 5
ports = ''
for i in range(0, len(swp_intfs), linen):
if ports:
ports += ' \\\n'
ports += ' %s' %(' '.join(swp_intfs[i:i+linen]))
outbuf += ports
print outbuf
def populate_argparser(argparser):
group = argparser.add_mutually_exclusive_group(required=False)
group.add_argument('-s', '--swp-defaults', action='store_true',
dest='swpdefaults', help='generate swp defaults file')
group.add_argument('-b', '--bridge-default', action='store_true',
dest='bridgedefault',
help='generate default untagged bridge')
argparser.add_argument('-m', '--merge', dest='mergefile', help='merge ' +
'new generated iface content with the old one')
argparser = argparse.ArgumentParser(description='ifupdown interfaces file gen helper')
populate_argparser(argparser)
args = argparser.parse_args(sys.argv[1:])
if not args.swpdefaults and not args.bridgedefault:
argparser.print_help()
exit(1)
if args.bridgedefault and args.mergefile:
print 'error: mergefile option currently only supported with -s'
argparser.print_help()
exit(1)
swp_intfs = get_swp_interfaces()
if not swp_intfs:
print 'error: no ports found'
exit(1)
if args.swpdefaults:
interfaces_print_swp_defaults(swp_intfs)
elif args.bridgedefault:
interfaces_print_bridge_default(swp_intfs)
else:
argparser.print_help()