A powerful and easy-to-use configuration management system.
Go Shell Other
Latest commit e5aa063 Jan 13, 2017 @stevendborrelli stevendborrelli committed on GitHub Merge pull request #580 from asteris-llc/fix/docker-swarm-example-pip
update pip package to fix failing example
Failed to load latest commit information.
apply when apply fails due to changes still being present; use those diffs … Dec 19, 2016
blackbox blackbox(test_ssl): lowercase success messages Dec 6, 2016
ci Dockerfile: install glide Dec 19, 2016
cmd Makefile,cmd: set version and fail if it's blank Dec 21, 2016
docs add RaiseLevelForDiffs to resource authors guide Jan 11, 2017
examples update pip package to fix failing example Jan 3, 2017
executor remove embedded resource.Status from docker image and docker network Dec 14, 2016
fetch replace "context" with "golang.org/x/net/context" Oct 26, 2016
fuzzing fuzzing: change names to functions under test Dec 2, 2016
graph code review updates Nov 14, 2016
healthcheck replace "context" with "golang.org/x/net/context" Oct 26, 2016
helpers populate lookup map in statuses during execution Dec 14, 2016
keystore Fix lint and vet warnings Oct 5, 2016
load load file.owner Dec 20, 2016
parse fuzzing(names): move fuzzer into package Dec 2, 2016
plan code climate fixes Dec 14, 2016
prettyprinters Make template more readable Dec 2, 2016
render render: remove unnecessary conversions Dec 21, 2016
resource use home_dir value for user add diffs Jan 12, 2017
rpc remove nop task from thunks Dec 20, 2016
samples Update handling of non-existant files Dec 20, 2016
.codeclimate.yml codeclimate: remove markdown linting Oct 11, 2016
.gitignore gitignore: ignore vendor Dec 22, 2016
CHANGELOG.md do not merge: release commit for 0.5.0 Dec 29, 2016
CODE_OF_CONDUCT.md code_of_conduct: clean up whitespace Sep 29, 2016
CONTRIBUTING.md Add statement about testing bugs to contribution doc Oct 11, 2016
LICENSE module: add May 17, 2016
Makefile Makefile: add vendor requirement to fuzzing/* Dec 22, 2016
README.md README: tag code blocks consistently Dec 28, 2016
changelog.sh add changelog generation script Nov 17, 2016
check_license.sh updates to makefile for better linting performance and to check for m… Aug 24, 2016
glide.lock update glide.lock Jan 3, 2017
glide.yaml add file.fetch module Dec 16, 2016
install-converge.sh Update installer to 0.5.0 Jan 3, 2017
main.go Merge branch 'feature/load-http' of ssh://github.com/asteris-llc/conv… Jun 20, 2016
wercker.yml have wercker install script on get.converge.sh Jan 3, 2017


Converge Logo

Converge is a configuration management tool that makes it easy to manage servers, laptops and other devices.

Key features:

  • Easy to install and run. A single binary and configuration file is all you need.
  • A powerful graph engine that automatically generates dependencies and runs tasks in parallel.
  • API-first communication using grpc.
  • Module verification: only run trusted modules.

Converge Graph

Slack Status Code Climate

Table of Contents


The install-converge.sh script will download and install the converge binary to your /usr/local/bin/ directory:

sudo ./install-converge.sh -v 0.4.0

The same installation script is available at get.converge.sh:

curl get.converge.sh | sudo bash -

You can also use go get:

go get github.com/asteris-llc/converge

or download a release for your platform from the releases page on Github.


Comprehensive documentation can be found at converge.aster.is.

You can learn more about Converge from the following blog posts and presentations:


Converge uses HCL for syntax. HCL is a superset of JSON that looks (and acts) quite a bit nicer.

The basic unit of composition in converge is the module. Modules have parameters and contain resources. Creating a module looks something like this:

# write "hello world" to disk
param "message" {
  default = "Hello, World in {{param `filename`}}"

param "filename" {
  default = "test.txt"

file.content "render" {
  destination = "{{param `filename`}}"
  content     = "{{param `message`}}"

Invoke this with converge apply --local samples/fileContent.hcl to place a test file on your system. You can also converge plan --local samples/fileContent.hcl to see what changes will be made before you apply them.



For linting, you'll need:

tool go get
golint github.com/golang/lint/golint
go tool vet (built in)
gosimple honnef.co/go/simple/cmd/gosimple
unconvert github.com/mdempsky/unconvert
structcheck github.com/opennota/check/cmd/structcheck
varcheck github.com/opennota/check/cmd/varcheck
aligncheck github.com/opennota/check/cmd/aligncheck
gas github.com/HewlettPackard/gas


You'll need:

  • Google's protobuf compiler, 3.0 or above.
  • The go protoc plugin: go get -a github.com/golang/protobuf/protoc-gen-go
  • The grpc gateway plugin(s): go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger

Continuous Integration and Testing

We use Wercker for CI with a custom base image. The Dockerfile for that image can be found at /ci/Dockerfile in the root of the project, and is pushed as asteris/converge-ci. You can test Converge in the container with the following invocation:

docker run -i \
           -t \
           --rm \
           --volume $(pwd):/go/src/github.com/asteris-llc/converge \
           asteris/converge-ci \
           /bin/bash -c 'cd /go/src/github.com/asteris-llc/converge; make test'

Benchmarks are run with make bench, and fuzzing is run with make fuzzing/{target}.


Converge is licensed under the Apache 2.0 license. See LICENSE for full details.