Index: tools/check-batch-cmd
===================================================================
--- tools/check-batch-cmd	(revision 10092)
+++ tools/check-batch-cmd	(revision 10093)
@@ -6,9 +6,17 @@
 # Rick van der Zwet <info@rickvanderzwet.nl>
 #
+import argparse
 import gformat
 import netsnmp
+import os
 import paramiko
 import socket
 import sys
+import time
+
+try:
+  SSHPASS = os.environ['SSHPASS']
+except KeyError:
+  SSHPASS = 'SSH_NOT_SET'
 
 netsnmp.verbose = 0
@@ -22,5 +30,5 @@
   ssh = paramiko.SSHClient()
   ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
-  ssh.connect(hostname, username='root', password='XXXXXXXXXX',timeout=3)
+  ssh.connect(hostname, username='root', password=SSHPASS,timeout=3)
   stdin, stdout, stderr = ssh.exec_command(cmd)
   stdout = stdout.readlines()
@@ -46,8 +54,9 @@
 
 
-def main(hostfilter=None):
+def update_hosts(filters=[]):
   for host in gformat.get_hostlist():
-    if hostfilter and not hostfilter in host:
+    if filters and not any([f in host for f in filters]):
       continue
+
     print "# Processing host", host
     datadump = gformat.get_yaml(host)
@@ -70,14 +79,68 @@
         
 
+def make_output(stdout, stderr):
+  def p(prefix, lines):
+    return ''.join(["#%s: %s" % (prefix, line) for line in lines])
+  output = p('STDOUT', stdout)
+  output += p('STDERR', stderr)
+  return output
+
+def ubnt_snmp(hostname):
+  lines = """\
+snmp.community=public
+snmp.contact=beheer@lijst.wirelessleiden.nl
+snmp.location=WL
+snmp.status=enabled\
+"""
+  cmd = '(mca-config get /tmp/get.cfg | grep -v snmp /tmp/get.cfg; echo "%s") >/tmp/new.cfg \
+    && mca-config activate /tmp/new.cfg' % lines
+  ssh = paramiko.SSHClient()
+  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+  ssh.connect(hostname, username='root', password=SSHPASS,timeout=3)
+  stdin, stdout, stderr = ssh.exec_command(cmd)
+  stdout = stdout.readlines()
+  stderr = stderr.readlines()
+  print make_output(stdout, stderr)
+  ssh.close()
+
+def ubnt_keys(hostname):
+  keys = open('authorized_keys','r').read()
+  ssh = paramiko.SSHClient()
+  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+  ssh.connect(hostname, username='root', password=SSHPASS,timeout=3)
+  cmd = 'test -d .ssh || mkdir .ssh;\
+    echo "%s" > .ssh/authorized_keys && \
+    chmod 0700 .ssh && \
+    chmod 0755 . && cfgmtd -p /etc -w' % keys
+  stdin, stdout, stderr = ssh.exec_command(cmd)
+  stdout = stdout.readlines()
+  stderr = stderr.readlines()
+  print make_output(stdout, stderr)
+  ssh.close()
+
 if __name__ == '__main__':
-  if len(sys.argv) == 2:
-    main(hostfilter=sys.argv[1])
-  else:
-    main()
+  # create the top-level parser
+  parser = argparse.ArgumentParser(prog='Various WL management tools')
+  #parser.add_argument('--foo', action='store_true', help='foo help')
+  subparsers = parser.add_subparsers(help='sub-command help')
+  
+  parser_snmp = subparsers.add_parser('snmp', help='enable SNMP on UBNT')
+  parser_snmp.add_argument('host',type=str)
+  parser_snmp.set_defaults(func='snmp')
+  
+  parser_keys = subparsers.add_parser('keys', help='add ssh keys on UBNT')
+  parser_keys.add_argument('host', type=str)
+  parser_snmp.set_defaults(func='keys')
 
+  parser_update = subparsers.add_parser('update', help='process all UBNT')
+  parser_update.add_argument('filters', default=None, nargs='*', type=str)
+  parser_update.set_defaults(func='update')
+  
+  args = parser.parse_args()
 
-
-
-
-
-
+  if args.func == 'keys':
+    ubnt_keys(args.host)
+  elif args.func == 'snmp':
+    ubnt_snmp(args.host)
+  elif args.func == 'update':
+    update_hosts(args.filters)
