Fork me on GitHub

Infrastructure Deployment Specification

Design of a specification for the automation of infrastructure deployments

This project aims to define a tool- and cloud-independent specification to automate infrastructure provisioning, which, together with a Configuration Managment System like Chef or Puppet should for the first time fully deliver on the promise of Infrastructure as code.

There are already Open Source cloud-agnostic libraries for cloud APIs (fog, libcloud...), and several tools that make use of it (Chef's knife, Spiceweasel) but a tool-independent infrastructure specification is still missing.

Go to the Wiki and help in defining this specification!

Format

Deployments are defined in JSON, following the same syntax as Chef's nodes, roles and cookbooks.

Definition of a Node resource

KeyValue
nameASCII string
descriptionText describing the node
providerCloud provider
imageOS Image
sizeVM Size/Type
zoneAvailability Zone
rolesArray of roles that the Configuration Management System should apply
attributesAssociative array of node attributes that overwrite defaults

Example Deployment Code

{
    "name": "Web App",
    "version": "1.0",
    "description": "A full Web application, master DB and master slave deployment",
    "environment": "production",
    "nodes": [
        {
            "name": "Master DB",
            "description": "This node will host the Master DB",
            "provider": "Rackspace",
            "image": "49",
            "size": "2",
            "zone": "1",
            "roles": [
                "role[master_db]"
            ]
        },
        {
            "name": "Slave DB",
            "description": "This node will host the Slave DB",
            "provider": "Rackspace",
            "image": "49",
            "size": "2",
            "zone": "1",
            "roles": [
                "role[slave_db]"
            ]
        },
        {
            "name": "WebApp",
            "description": "The Apache web server and our App",
            "provider": "EC2",
            "image": "ami-014da868",
            "size": "c1.xlarge",
            "zone": "us-east-1",
            "roles": [
                "role[frontend]"
            ],
            "attributes" {
                "php": {
                    "memory_limit": "256M"
                }
            }
        }
    ]
}

License

http://creativecommons.org/licenses/by-sa/3.0/

Authors

Miquel Torres (tobami@googlemail.com)

Grig Gheorghiu (grig.gheorghiu@gmail.com)

Contact

Miquel Torres (tobami@googlemail.com)

Download

You can clone the project with Git by running:

$ git clone git://github.com/tobami/Infrastructure-Deployment-Spec