Version 69 (modified by lmacken, 9 years ago) (diff)

Add link to SysctlModule

Func: Fedora Unified Network Controller

You Want The Func

  • Have you ever tried to command or query a large number of systems with SSH? Have you wanted a better way?
  • Have you wanted a way to audit all of your remote commands on all of your systems?
  • Tired of writing shell scripts and parsing command output?
  • Are you fed up with CIM, WBEM, and complicated communication systems that prevent you from doing /real/ work?
  • Well have we got a solution for you. It's Func.

You Can Do Almost Anything With It

A lot of programs, systems, and tools need some way to communicate. Func provides a two-way authenticated system for generically doing these sort of things. You can build your own applications on top of it, and easily expand func by adding in additional modules, whether you want these to work through the func command line or by means of some other application. If you just want to use the func command line, that's great. If you want to build apps on the func tools, that's great too. If this sounds generically vague, it's only because it really is that expandable.


  • Func is available on the Fedora and EPEL mirrors
  • You can also get src RPMs and tarballs here
  • (If you're running a non-RPM distro and would like to package func, let us know, we're interested in making things very portable, and it should be mostly portable already)

Examples Speak Louder Than Words

Let's use the command line to illustrate some concepts.

From a central management server, you can do:

From bash:

# func call hardware info

# func "*" call yum install foopackage

# func "*" call moduleyouwrote functionname 1234 5678 firetruck acmelabs hike! 

Everything also can be scripted from Python:

import func.overlord.client as fc
client = fc.Client("*;*")

# package controls!

# service controls!

# hardware info!

# etc ... etc ..

All you have to do to is follow the simple install instructions and you're up and running.

So, if I want Words, What Is Func?

Func allows for running commands on remote systems in a secure way, like SSH, but offers several improvements.

  • Func allows you to manage an arbitrary group of machines all at once.
  • Func automatically distributes certificates to all "slave" machines. There's almost nothing to configure.
  • Func comes with a command line for sending remote commands and gathering data.
  • There are lots of modules already provided for common tasks.
  • Anyone can write their own modules using the simple Python module API.
  • Everything that can be done with the command line can be done with the Python client API. The hack potential is unlimited.
  • You'll never have to use "expect" or other ugly hacks to automate your workflow.
  • It's really simple under the covers. Func works over XMLRPC and SSL.
  • Any program can use func certificates, latch on to them, and take advantage of secure master-to-slave communication.
  • There are no databases or crazy stuff to install and configure. Again, certificate distribution is automatic too.

What Is Supported

  • Fedora Core 6, Fedora 7, and beyond
  • EL-4, EL-5 and beyond
  • anywhere else someone would like to package it

Let's See Some Killer Apps

  • FuncInventory -- func-inventory allows you to inventory your entire network based on arbitrary criteria -- this might be what services are installed, what packages are there, or what hardware is present. The key is, it's generic, and you can inventory anything that has a func module and returns data. The output goes to simple directories kept under version control (using git!), so you can utilize diffs to see when things change. The fact that it's a very simple and lightweight program (one very small Python file) shows off a lot of what func is capable of doing.
  • FuncNagiosIntegration? -- minions can signal the nagios server (which is another minion) that they exist and want to be monitored. (Working on developing this as minion to minion communication is added).
  • Lots of smaller examples are bundled in the Func Source distribution, such as the "Exploding Battery Finder". See below under ScriptingExamples.

Project goals

  • Be crazy-simple to understand
  • Be crazy-simple-to-use
  • Require the bare minimum amount of maintenance and configuration
  • Kick ass.

List of Stock Modules

We have a lot of core plugins so the command line and the API offer up some interesting features by default. As time goes on, the features of the existing modules will expand and new ones will be added. Join the email list (see below) and submit your own modules!

Any plugin you can imagine can be added to func. Just drop it into the modules directory. Share your plugins with the list and we can add them into the stock install "distribution". We'll take just about anything :)

Other Features

  • Globbing -- all about how globbing works, for specifying multiple systems for one command
  • Multiplexer -- send commands to multiple servers at the same time in seperate processes
  • Repeater? -- support hierarchies of Func minions (graphs), for scaling and efficiency (the manchurian candidate) -- pending
  • Async -- background API calls

Source Code



  • Ideas -- a holding place for ideas for future expansion

FuncWeb ("Dragicorn" ?)

We're working on a WebUI powered by Func for systems administration, similar to system-config-* but in batch, for lots of systems at once, and other coolness.

Who Is Func (Alphabetically)

More info