On 2/10/10 6:18 PM, Paul Querna wrote:
I believe doing this kind of API would best embody what has made
libcloud successful, instead of reinventing everything, try to
normalize what is already out there. What do you think?
I concur, a provider interface abstraction over configuration management
is desirable. Ideally, I think the interface would look something like:
def provision_node(node, role):
### upcast the bare metal to a defined state
### configuration mgt is transparently setup on the node
### recipes appropriate to the role are applied
This may be asking libcloud to do too much; not sure if its safe to
assume that providers have a role concept. The abstraction boundaries
would need to be driven by the lowest common denominators of their
models. Under the hood, perhaps the simplest thing possible looks like this:
def provision_cfg_mgt(node, provisioning_script, destination):
### assume ssh keys are configured correctly
# scp provisioning_script node:/path/destination
# ssh node 'chmod 755 /path/destination; /path/destination >
/path/provision.log'
Doink. Where provisioning_script is a stub that drives the full setup of
chef or puppet to put the node into the proper state (or if that's too
high tech, some homebrewed mess of a shell script, choose your pain
wisely though).
-Ian
--
Ian Kallen
blog: http://www.arachna.com/roller/spidaman
tweetz: http://twitter.com/spidaman
vox: 925.385.8426