diff options
author | Michael DeHaan <mdehaan@redhat.com> | 2008-07-07 11:14:59 -0400 |
---|---|---|
committer | Michael DeHaan <mdehaan@redhat.com> | 2008-07-07 11:14:59 -0400 |
commit | 34105d3ae7d7f07e1b377bbaf9b246593da1f471 (patch) | |
tree | b24f97018da22c0336d3d305e1f1be1475e6b2da /scripts/func-transmit | |
parent | db0b4fb07b6b4e0b4a2e1af3a17d4638bc923c52 (diff) | |
download | func-34105d3ae7d7f07e1b377bbaf9b246593da1f471.tar.gz func-34105d3ae7d7f07e1b377bbaf9b246593da1f471.tar.xz func-34105d3ae7d7f07e1b377bbaf9b246593da1f471.zip |
Added func-transmit (Marco's version + tweaks) which allows calling Func via a YAML interface over stdin/stdout protocol. We still need to package yaml properly as Fedora/EPEL does not have a parser that we like well enough (FIXME). We could also change this to work over XMLRPC marshalling if so desired.
Diffstat (limited to 'scripts/func-transmit')
-rw-r--r-- | scripts/func-transmit | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/scripts/func-transmit b/scripts/func-transmit new file mode 100644 index 0000000..163a99c --- /dev/null +++ b/scripts/func-transmit @@ -0,0 +1,65 @@ +#!/usr/bin/python + +## +## func yaml wrapper tool. +## allows usage of func over stdin/stdin using yaml as a marshalling format +## for access to the Overlord() API from non-Python code. +## this should typically be accessed via a pipe, though also works as +## func-transmit < yamlfile +## +## Copyright 2008, Various +## Marco Mornati <mmornati@byte-code.com> +## Michael DeHaan <mdehaan@redhat.com> +## +## 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. +## + + +## Example input file format: +""" +clients: "*" +aysnc: False +nforks: 1 +module: command +method: run +parameters: "/bin/echo Hello World" +""" + +import sys +import distutils.sysconfig + +import cobbler.yaml as yaml # FIXME: need to subpackage this as part of Func +import func.overlord.func_command as func_command +import func.overlord.client as fc + +# load input from stdin +input = sys.stdin.read() +params = yaml.load(input).next() + +# scan arguments +clients = params.get('clients', "*") +async = params.get('async', False) +nforks = params.get('nforks', 1) +module = params.get('module','unknown') +method = params.get('method','unknown') +parameters = params.get('parameters', []) + +# make the call +client = fc.Overlord(clients, async=async, nforks=nforks) +module_handle = getattr(client, module) +method_handle = getattr(module_handle, method) +results = method_handle(parameters) +output = yaml.dump(results) + +# write to stdout +print output + + + + + |