Geppetto in few words
Geppetto is a remote system automation suitable for remote environments with poor connectivities.
It has a comprehensive web GUI, and is able to tracks remote activities status and balance shared resources between all nodes.
Typical use
[Laurent] "I have to manage a brunch of machines running on a remote network and suffering for various limitations :
- The "head" of the network in an ADSL box connected through a floating IP and configured in very restricted way, on purpose for security reason. Consequently, SSH connectivity is not possible.
- All machines of this park share a poor 512 K ADSL line, preventing having several machines downloading patches at the same time.
- I didn't used system's Cron facility as patches have to be validated first on a test environment.
Actors
Geppetto is build around 2 different kind of entities.
Puppets
Managed remote machines, named "Puppets" are running a simple Geppetto client querying the Puppeteer for additionnal commands to launch, if any, providing hosts status as well.
As soon as a command is finished, it sends back a completion status and related logs.
Thanks to Geppetto's pulling mechanism, they don't need to be publicly exposed on the Internet : an outgoing http(s) access to the Internet is enough.
Concequently, Geppetto can work even with puppets behind a very restrictive firewall.
Geppetto's Puppeteer
Like a conductor, Geppetto's puppeteer, which has to run on a web server reachable by puppets, drives and monitors all tasks spread on its puppets. Some rules can be established to avoid overloading bottlenecks (i.e. avoiding all puppets to download at the same time large files). It can detect and bypass as well dead / unreachable puppets.
Technology
Communication
Only puppets can initiate a communication (polling) and are using exclusively web services (SOAP) over http or https. As a consequence, any machine allowed to browse on the Internet can be a Geppetto's puppet.
How it is made
Geppetto's puppeteer is written in PHP5 in object oriented way and it uses intensively AJAX.
Geppetto's puppets client is currently written in PHP5 - CLI version and needs SOAP enabled.
It has to launch host related executable to do actions, generally but not limited to script shell.
Geppetto is distributed under Gnu Public Licence v3 (a.k.a GPLv3).
"As of April, 25th 2011, it does not include any piece code from other software but utilities listed bellow. The only "external" element is its logo I found on the Internet. Unfortunately, I wasn't able to find out the creator but I would be pleased to add greeting if he come back to me." [Laurent]
Geppetto requires
- A Web server. Apache preferred.
- PHP 5 with SOAP extension enabled. Web server's CGI or module for puppeteer side, and CGI version for puppet side.
- Scriptaculous Ajax library.
Laurent's grouchy note
"Geppetto is targeting POSIX like environments. It has been developed and tested on Linux Ubuntu machines and may work on any open environment.
Web GUI targets civilised browsers, which respect W3C rules and have been heavily tested using Firefox and Midori. Unfortunately, it remains on the market a browser still having a leading position which doesn't enter in 'civilised browsers' category and always creating problem and frustration for web developers. In other words, if you're experiencing issues with the brain damaged ms-internet explorer, think first to switch to a decent browser."
This is a tentative roadmap of Geppetto project. Non yet reached targets may obviously change :
- v0.1α
- Users management GUI implemented.
(released on April, 24th 2011)
- v0.2α
- Tasks management implemented.
(released on May, 15th 2011)
- v0.3α
- Queues implemented.
(released on May, 22th 2011)
- v0.4β
- Tasks' log viewer implemented.
Promoted to beta and the engine is now working and puppet can be handled/simulated using client's CLI test puppet command.
(released on June, 1st 2011)
- v0.5β
- Puppet's client implemented
(released on June, 2nd 2011)
- v0.6β
- Puppeteer's tasks implemented (for the moment, only SendMail)
major tasks implemented : fixes update, task download, shutdown ...
(released on October, 15th 2011)
- v1.0
- Geppetto being in production on some of my system, it's time to switch to stable release 1.0 .
(released on March, 11th 2012)
- v1.1
- Lua puppet failed if a task's response is too long. Now, it is doing REST report (PHP puppet hasn't been touched).
- Task's output popup can be closed by a doubleclick (to avoid the need to scroll down llllooonnng pages).
(released on October, 26th 2012)
Planned for future releases :
- Groups & Puppets classes
- Create group of tasks : the added value is to facilitate the management of tasks in the GUI, especially by restrict tasks only to puppets belonging to a certain classes. For example, APT-Get like commands are useless on Gentoo machine.
- Tasks dependencies
- If task A succeed, then launch task B.
Even if I put it with high priority, it's more for the fun as I don't have strong need right now.
- HTML5
- Switch to HTML5 and remove scriptaculous' dependencies.
- Resources
- To limit the number of concurrent tasks. For example, to avoid timeout due to ADSL line overloading if many puppets upgrade concurrently.
- Next Puppet
- Manage a collection of puppets : tasks are launched on the next puppet of a collection when all is done on the current one.
...