chiark / gitweb /
Fix some format and other varargs errors.
[tripe] / svc / watch.in
index 5917c79eb9c5405c610979472529519c1af3abf7..4aaf20be713f1198c62ce10366b1bf8542d3870d 100644 (file)
@@ -329,6 +329,22 @@ def connect(peer, conn = None):
       q.get()
   potwatch('connect', peer, q)
 
+def disconnect(peer, disconn = None):
+  """
+  Start the job of disconnecting from a passive PEER.
+
+  The DISCONN string is a shell command which will disconnect from the peer.
+  """
+  if disconn is None:
+    try:
+      conn = peerinfo(peer)['disconnect']
+    except KeyError:
+      return
+  q = T.Queue()
+  cmd = Command(['disconnect', peer], q, 'disconnect',
+                ['/bin/sh', '-c', disconn], None)
+  potwatch('disconnect', peer, q)
+
 _pingseq = 0
 class PingPeer (object):
   """
@@ -641,6 +657,9 @@ def delpeer(peer):
     pinger.kill(peer)
   except KeyError:
     pass
+  if 'disconnect' in info:
+    T.Coroutine(disconnect, name = 'disconnect %s' % peer) \
+                            .switch(peer, info['disconnect'])
   if 'ifdown' in info:
     T.Coroutine(ifupdown, name = 'ifdown %s' % peer) \
                           .switch('ifdown', peer, info)