Func is a nifty, although not yet polished, Python-based service for running tasks on many hosts at once. It lets you do things like restart Apache instances, run yum updates or provision virtual machines.
You can accomplish theses tasks via the command line interface
func web-*.example.net call service restart httpd
or through the Python API
import func.overlord.client as fc
client = fc.Client('web-*.example.net')
print client.service.restart('httpd')
One of the annoying issues I'm dealing with right now is the distribution of Func modules, which for various reasons isn't as simple as packaging the modules and pushing them to all the hosts (it is, just not in my network).
My solution is Push, a Func module which lets you instantly run Python code on any or all hosts in your network.
Example usage:
import func.overlord.client as fc
client = fc.Client('web-*.example.net')
source = """
def main():
return 'Hello World'
"""
print client.push.code(source)
I realize this isn't the most elegant solution, but its very useful and extremely simple.
I also realize that I could use the copyfile module to push modules via Func, but I haven't found a way to restart funcd via Func (required to initialize modules), so until that happens I need a solution which doesn't require restarting Func.
Licensing information is available on the about page, for additional questions or comments feel free to contact me.