Go JavaScript Shell Makefile Python Ruby Protocol Buffer
Latest commit 4375a79 Mar 21, 2017 @kklin kklin minion: Preserve SSH keys installed by cloud config
Before, we immediately started syncing the SSH keys as soon as the
minion booted. This resulted in a brief period where no keys were
installed. This is because Minion.AuthorizedKeys was not populated until
the foreman connected; therefore, before the foreman sends the
MinionConfig over, we would overwrite the keys installed by the cloud
config. To alleviate this, we do not touch the keys until the foreman
has sent us some keys to install.
Permalink
Failed to load latest commit information.
api minion: Support building Dockerfiles Mar 7, 2017
cluster cluster: Add role to machine join Mar 21, 2017
db minion: MinionSelf no longer returns error Mar 21, 2017
docs quilt: Update github imports to the new repository location Feb 20, 2017
engine quilt: Update github imports to the new repository location Feb 20, 2017
inspect minion: Support building Dockerfiles Mar 7, 2017
join join: Migrate to tests to testify/assert Dec 11, 2016
minion minion: Preserve SSH keys installed by cloud config Mar 21, 2017
ovs ovs: Build multiple kernel module versions in OVS container Mar 19, 2017
quilt-tester quilt-tester: Don't hardcode wait time for spec completion Mar 21, 2017
quiltctl cluster: Pass down role through cloud configs Mar 21, 2017
scripts ci: Add test for duplicate Spark clusters Mar 16, 2017
stitch docker: Create parent directories when writing files Mar 19, 2017
util stitch: Support writing files to containers Mar 1, 2017
vendor vendor: Update fsouza/go-dockerclient Mar 7, 2017
.codecov.yaml make: Remove references to obsolete specs directory Feb 19, 2017
.gitignore tests: Add tests of specs and README back in Mar 7, 2017
.travis.yml travis: Point travis at the new slack Mar 19, 2017
Contributing.md docs: Corrected git commit message style Feb 5, 2017
Dockerfile ovs: Move iptables into the ovs dockerfile Jan 29, 2017
LICENSE.md quilt: Rename the project May 18, 2016
Makefile ci: Add test for duplicate Spark clusters Mar 16, 2017
README.md specs: Update to new Node API Mar 20, 2017
quilt.go quilt: Update github imports to the new repository location Feb 20, 2017

README.md

Build Status Go Report Card Code Coverage

Quilt

Quilt is a simple way to use JavaScript to build and manage anything from website backends to complex distributed systems. As shown above, a few simple commands will get your system up and running.

Building infrastructure and running applications with Quilt is simple, intuitive, and flexible. With Quilt.js, you specify your infrastructure declaratively in JavaScript, and Quilt then takes care of deploying it on one or more cloud providers. Subsequently scaling and modifying the infrastructure then becomes a matter of simply changing a few lines of JavaScript code.

The Quilt.js JavaScript framework allows for development, versioning, and testing of infrastructure in the same way we do for application code. Additionally, Quilt.js code is shareable, reusable and composable, making it easy to set up and manage systems without being an expert in system administration.

Quilt is a research project out of UC Berkeley. It is currently under heavy development, but please try it out - we are eager for feedback!

Example: Deploying a MEAN Stack App with Quilt

The MEAN stack (MongoDB, Express, AngularJS, and Node.js) is a popular fullstack JavaScript framework used for web development. Deploying a flexible, multi-node MEAN stack app can be both time consuming and costly, but Quilt simplifies this process.

With Quilt, it takes fewer than 20 lines of JavaScript code to set up a replicated Node.js application, connect it to MongoDB, and hook it up with a web proxy:

    var Node = require("github.com/quilt/nodejs");
    var HaProxy = require("github.com/quilt/haproxy").Haproxy;
    var Mongo = require("github.com/quilt/mongo");

    // Create 3 replicated instances of each service.
    var mongo = new Mongo(3);
    // `app` is a Node.js application using Express, AngluarJS, and MongoDB.
    var app = new Node({
      nWorker: 3,
      repo: "https://github.com/tejasmanohar/node-todo.git",
      env: {
        PORT: "80",
        MONGO_URI: mongo.uri("mean-example")
      }
    });
    var haproxy = new HaProxy(3, app.services());

    // Connect the app and database.
    mongo.connect(27017, app);
    app.connect(27017, mongo);
    // Make the proxy accessible from the public internet on port 80.
    haproxy.public();

The application is infrastructure agnostic, so it can be deployed on any - and possibly many - of the Quilt supported cloud providers. Here, we specify a possible multi-node setup on AWS:

    var namespace = createDeployment({});

    // An AWS VM with 1-2 CPUs and 1-2 GiB RAM.
    // The Github user `ejj` can ssh into the VMs.
    var baseMachine = new Machine({
        provider: "Amazon",
        cpu: new Range(2),
        ram: new Range(8),
        sshKeys: githubKeys("ejj"),
    });

    // Boot VMs with the properties of `baseMachine`.
    namespace.deploy(baseMachine.asMaster());
    namespace.deploy(baseMachine.asWorker().replicate(3));

All that is left is to deploy the application on the specified infrastructure:

    namespace.deploy(app);
    namespace.deploy(mongo);
    namespace.deploy(haproxy);

This spec can be found in github.com/quilt/mean/example.js and used to deploy your app. Check out this guide for step by step instructions on how to deploy your own application using Quilt.

As shown in the very beginning, deploying a MEAN app with Quilt is now as simple as running the command quilt run github.com/quilt/mean/example.js.

Features

Quilt offers a lot of great features. These are some of them:

  • Build infrastructure in JavaScript
  • Simple deployment and management of applications
  • Easy cross-cloud deployment
  • Low cost
  • Shareable and composable infrastructure code
  • Intuitive networking
  • Flexible and scalable infrastructure

There are more to come in the near future!

Install

Install and Set Up Go

Install Go with your package manager or by following the directions on Go's website.

Setup your GOPATH and PATH environment variables in your ~/.bashrc file. E.g.:

export GOPATH='~/gowork'
export PATH='$PATH:$GOPATH/bin'

Download Quilt

Download and install Quilt and its dependencies using go get

go get github.com/quilt/quilt

Quilt is now installed! Check out the Getting Started guide for more detailed instructions on how to get your Quilt deployment up and running.