-3

I'm creating a SaaS platform, and I need a component / library that can create, delete and store the connection details for cloud servers. It also needs to support executing shell commands on these servers and returning the response to the caller. I want a central database of servers and their configuration, plus the ability to reach out and manage the servers via SSH execution of bash scripts. I don't want something that needs agents on every server like Chef.

For example, this command is received by the hypothetical application:

CREATE USER
server = server12345
name = myuser

It's translated into the following set of actions and executed by the app, which knows how to connect to server12345, and how to create a user on that server:

$ ssh root@server12345
$ adduser myuser

And returns the output from the shell:

Added user myuser.

I've done research on Google and can't quite quite find something that does this already. I've found:

fabric

This part handles the executing of the shell commands very elegantly, and can take multiple server definitions, but it's supposed to be a deployment tool so doesn't do everything that would be required above - for example, it doesn't have a daemon mode where it listens for commands - it expects to be executed on the shell. It also can't provide the central database functionality.

libcloud

This library can handle the server admin (CRUD) part, but doesn't have a command interface daemon either, and doesn't let you execute commands on the servers.

I guess I need something that is a combination of libcloud, fabric and django for an API. Or something else that does that same thing regardless of language.

Overmind

Overmind is a GUI and wrapper around libcloud, but doesn't support the command execution part.

What am I missing here?

Michael Dillon
  • 1,809
  • 13
  • 16
Mark Theunissen
  • 3,038
  • 3
  • 15
  • 10
  • Seems to me to be a great question for ServerFault. In fact I recently came across a tool http://saltstack.org/ which seems to address exactly your use case. It runs commands remotely on a set of servers and has prebuilt command modules for a lot of common stuff. – Michael Dillon Jul 10 '12 at 20:28
  • @MichaelDillon - because it's effectively a [shopping question](http://blog.stackoverflow.com/2010/11/qa-is-hard-lets-go-shopping/), which are off-topic on the SE networks. – Mark Henderson Jul 10 '12 at 20:35
  • It is only marginally a shopping question and could have easily been edited to focus more on the technical issue related to server management. He did a lot of research already and if he had said, "This is what I tried to solve my problem but I'm stuck" it would not have been closed. It would have been better to add some comments asking him what he means by "CRUD the servers" and why he lumps Jenkins in with the other tools. – Michael Dillon Jul 10 '12 at 20:43

2 Answers2

2

Im sure you will get marked down for shopping, but I'm very surprised your googling didnt identify Puppet, or Chef

Sirch
  • 5,697
  • 4
  • 19
  • 36
  • +1 for Puppet/Chef. Precisely what they're designed for. – ceejayoz May 15 '12 at 15:00
  • Yes you are talking about configuration management. Take a look at Canonical's Juju too, but it is more related to managing full instances. – coredump May 15 '12 at 15:01
  • 1
    @ceejayoz I misread your comment as "PuppetChef" and had a sudden image in my head of [this guy](http://www.youtube.com/watch?v=sY_Yf4zz-yo) with a root login to my servers. – Ladadadada May 15 '12 at 15:14
  • Chef/puppet are used to manage configuration. I don't believe they provide a method of proxying arbitrary commands from a client to the targeted server. – Mark Theunissen May 15 '12 at 15:20
0

Your requirements, especially the remote execution, sound closer to a PaaS stack than any one library.

There are some options described here

Barak
  • 393
  • 2
  • 9