]> git.datanom.net - netconf.git/blobdiff - netconf
Add test for option record
[netconf.git] / netconf
diff --git a/netconf b/netconf
index 07bf06018335e965a605ca55318dd282d34084aa..25d3bff8f2f62af7886f4def1bd701d5b4c960a9 100644 (file)
--- a/netconf
+++ b/netconf
@@ -6,7 +6,7 @@
 # 1.0 of the CDDL.
 #
 # A full copy of the text of the CDDL should have accompanied this
-# source.  A copy of the CDDL is also available via the Internet at
+# source. A copy of the CDDL is also available via the Internet at
 # http://www.illumos.org/license/CDDL.
 #
 
@@ -146,21 +146,23 @@ def usage():
     -g, --gateway      Default gateway. Optional.
     -i, --interface    Interface to configure.
     -m, --netmask      Netmask to use for interface. Default /24.
-    -n, --nameserver   Nameserver to use. Optional."""
+    -n, --nameserver   Nameserver to use. Optional.
+    -r, --record       Output create commands to stdout."""
 
 def parse_input():
     options = ()
 
     try:
        opts, args = getopt.gnu_getopt(sys.argv[1:],
-           'ha:g:i:m:n', ['help', 'address=', 'gateway=',
-                          'interface=', 'netmask=', 'nameserver='])
+                'ha:g:i:m:n:r', ['help', 'address=', 'gateway=',
+               'interface=', 'netmask=', 'nameserver=', 'record'])
     except getopt.GetoptError as err:
        print str(err)
        usage()
        sys.exit(2)
 
     address = gateway = interface = netmask = nameserver = None
+    record = False
 
     if opts:
        for o, a in opts:
@@ -177,13 +179,22 @@ def parse_input():
                netmask = a
            elif o in ('-n', '--nameserver'):
                nameserver = a
+           elif o in ('-r', '--record'):
+               record = True
            else:
                assert False, 'Unhandled option'
-    
-       if not address or not interface:
-           print 'Error: missing options'
-           usage()
-           sys.exit(2)
+
+       if (record):
+           if not (bool(address) ^ bool(interface)):
+               print 'Error: missing options'
+               usage()
+               sys.exit(2)
+       else:
+           if not address or not interface or error:
+               print 'Error: missing options'
+               usage()
+               sys.exit(2)
+
        if address == '0':
            address = None
        if not netmask:
@@ -207,7 +218,15 @@ def main():
            if interactive:
                nic = make_menu(interfaces)
            else:
-               nic[0] = options[0]
+                nic = options
+                found = False
+                for i in interfaces:
+                    if nic[0] == i[0]:
+                        found = True
+                        break
+                if not found:
+                    err = '%s: No such interface' % nic[0]
+                    raise RuntimeError(err)
             if nic:
                if interactive:
                    (ip,mask,gw) = get_config()
@@ -216,34 +235,50 @@ def main():
                    mask = options[2]
                    gw = options[3]
                 cmd = 'ipadm delete-if %s' % nic[0]
-                runcmd(cmd)
+               if record:
+                   print cmd
+               else:
+                   runcmd(cmd)
                 cmd = 'ipadm create-if %s' % nic[0]
-                (out, err) = runcmd(cmd)
-                if err:
-                    raise RuntimeError(err)
+               if record:
+                   print cmd
+               else:
+                   (out, err) = runcmd(cmd)
+                   if err:
+                       raise RuntimeError(err)
                 if not ip:
                     # use DHCP
                     cmd = 'ipadm create-addr -T dhcp %s/v4' % nic[0]
-                    (out, err) = runcmd(cmd)
-                    if err:
-                        raise RuntimeError(err)
+                   if record:
+                       print cmd
+                   else:
+                       (out, err) = runcmd(cmd)
+                       if err:
+                           raise RuntimeError(err)
                 else:
                     # use STATIC
                     cmd = 'ipadm create-addr -T static -a %s/%s %s/v4' % (ip, mask, nic[0])
-                    (out, err) = runcmd(cmd)
-                    if err:
-                        raise RuntimeError(err)
+                   if record:
+                       print cmd
+                   else:
+                       (out, err) = runcmd(cmd)
+                       if err:
+                           raise RuntimeError(err)
                     if gw:
                         cmd = 'route -p add default %s' % gw
-                        (out, err) = runcmd(cmd)
-                        if err:
-                            raise RuntimeError(err)
-                cmd = 'netstat -rn -finet'
-                (out, err) = runcmd(cmd)
-                if err:
-                    raise RuntimeError(err)
-                print 'New route table'
-                print out
+                       if record:
+                           print cmd
+                       else:
+                           (out, err) = runcmd(cmd)
+                           if err:
+                               raise RuntimeError(err)
+               if not record:
+                   cmd = 'netstat -rn -finet'
+                   (out, err) = runcmd(cmd)
+                   if err:
+                       raise RuntimeError(err)
+                   print 'New route table'
+                   print out
                if interactive:
                    dns = raw_input('Configure DNS [n]? ').lower()
                else:
@@ -260,9 +295,12 @@ def main():
                     cmd = "echo 'nameserver %s' >> /etc/resolv.conf " % dns
                     cmd += '&& cp /etc/nsswitch.conf{,.bak} '
                     cmd += '&& cp /etc/nsswitch.{dns,conf}'
-                    (out, err) = runcmd(cmd)
-                    if err:
-                        raise RuntimeError(err)
+                   if record:
+                       print cmd
+                   else:
+                       (out, err) = runcmd(cmd)
+                       if err:
+                           raise RuntimeError(err)
         else:
             print "Found no unassigned interfaces"
     except ParserError as e:
This page took 0.042183 seconds and 5 git commands to generate.