This project is no longer actively maintained.
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.
- Resources to make changes on your system: docker images and containers, users and groups, systemd, and more. The Resource Reference at converge.aster.is has a complete list of resources and their configuration settings.
- A powerful graph engine that automatically generates dependencies and runs tasks in parallel.
- API-first communication using grpc.
- Module verification: only run trusted modules.
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.0The 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/convergeor 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
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.