summaryrefslogtreecommitdiffstats
path: root/func
diff options
context:
space:
mode:
authorMichael DeHaan <mdehaan@redhat.com>2007-10-25 17:55:57 -0400
committerMichael DeHaan <mdehaan@redhat.com>2007-10-25 17:55:57 -0400
commit1b4fbf4c013f9e08cef511f8b88b516d11fb275c (patch)
treed0caab329728a72375328680ffd02b469a086733 /func
parentf260d08b05f263c0bb92937e18996c4b3caba1c4 (diff)
downloadthird_party-func-1b4fbf4c013f9e08cef511f8b88b516d11fb275c.tar.gz
third_party-func-1b4fbf4c013f9e08cef511f8b88b516d11fb275c.tar.xz
third_party-func-1b4fbf4c013f9e08cef511f8b88b516d11fb275c.zip
Added a ping function to the test module and a new command "func '*' ping" which can be used to see
what servers are contactable from the command line for any given operation, without needing to run an otherwise meaningful command on them. Note that it does try to contact each server before showing results, so ideally we should provide a method in the client class to get the system list and create the client objects seperately for each contact, so output can stream back one line at a time. TBA.
Diffstat (limited to 'func')
-rwxr-xr-xfunc/minion/modules/test.py6
-rw-r--r--func/overlord/cmd_modules/ping.py70
-rw-r--r--func/overlord/func_command.py3
3 files changed, 77 insertions, 2 deletions
diff --git a/func/minion/modules/test.py b/func/minion/modules/test.py
index 55265a3..f900326 100755
--- a/func/minion/modules/test.py
+++ b/func/minion/modules/test.py
@@ -8,12 +8,16 @@ class Test(func_module.FuncModule):
description = "Just a very simple example module"
def __init__(self):
self.methods = {
- "add": self.add
+ "add": self.add,
+ "ping": self.ping
}
func_module.FuncModule.__init__(self)
def add(self, numb1, numb2):
return numb1 + numb2
+ def ping(self):
+ return 1
+
methods = Test()
register_rpc = methods.register_rpc
diff --git a/func/overlord/cmd_modules/ping.py b/func/overlord/cmd_modules/ping.py
new file mode 100644
index 0000000..d5f57cc
--- /dev/null
+++ b/func/overlord/cmd_modules/ping.py
@@ -0,0 +1,70 @@
+#!/usr/bin/python
+
+"""
+copyfile command line
+
+Copyright 2007, Red Hat, Inc
+Michael DeHaan <mdehaan@redhat.com>
+also see AUTHORS
+
+This software may be freely redistributed under the terms of the GNU
+general public license.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+"""
+
+
+import optparse
+import os
+import pprint
+import stat
+import xmlrpclib
+
+from func.overlord import command
+from func.overlord import client
+
+# FIXME: this really should not be in each sub module.
+DEFAULT_PORT = 51234
+
+class Ping(client.command.Command):
+ name = "ping"
+ useage = "see what func minions are up/accessible"
+
+
+ def addOptions(self):
+ """
+ Not too many options for you! (Seriously, it's a simple command ... func "*" ping)
+ """
+ # FIXME: verbose and port should be added globally to all sub modules
+ self.parser.add_option("-v", "--verbose", dest="verbose",
+ action="store_true")
+ self.parser.add_option("-p", "--port", dest="port",
+ default=DEFAULT_PORT)
+
+
+ def handleOptions(self, options):
+ """
+ Nothing to do here...
+ """
+ pass
+
+
+ def do(self, args):
+ self.server_spec = self.parentCommand.server_spec
+
+ client_obj = client.Client(self.server_spec,
+ port=self.options.port,
+ interactive=False,
+ verbose=self.options.verbose,
+ config=self.config)
+
+ results = client_obj.run("test", "ping", [])
+ for (host,result) in results.iteritems():
+ if result == 1:
+ print "[ ok ... ] %s" % host
+ else:
+ print "[ FAILED ] %s" % host
+ return 1
+
diff --git a/func/overlord/func_command.py b/func/overlord/func_command.py
index b33565c..1a13233 100644
--- a/func/overlord/func_command.py
+++ b/func/overlord/func_command.py
@@ -11,6 +11,7 @@ from cmd_modules import call
from cmd_modules import show
from cmd_modules import copyfile
from cmd_modules import listminions
+from cmd_modules import ping
from func.overlord import client
@@ -19,7 +20,7 @@ class FuncCommandLine(command.Command):
useage = "func is the commandline interface to a func minion"
subCommandClasses = [call.Call, show.Show,
- copyfile.CopyFile, listminions.ListMinions]
+ copyfile.CopyFile, listminions.ListMinions, ping.Ping]
def __init__(self):