Skip to content

Resonance is a configuration management tool.

License

Notifications You must be signed in to change notification settings

fornellas/resonance

Repository files navigation

Latest Release Push Go Report Card Coverage Status Go Reference License: GPL v3 Buy me a beer: donate

Status: experimental. Please check the roadmap. Help welcome 🙏!

resonance

A configuration management tool with novel features to Ansible, Chef or Puppet:

  • Stateful: Persistent host state enables deletion of old resources, rollback to previous state (on failures) and detection of external changes.
  • Transactional changes: things such as APT packages are done "all together or nothing" (single apt call), eliminating isses with conflicting packages.
  • Painless refresh: no need to manually tell "please restart the service after changes" as these are implicitly declared so things "just work".
  • Painless dependencies: declared order is always respected.
  • Speed: read-only checks and possible changes happen concurrently; a lightweight agent is used so things fly even via SSH.

Install

Pick the latest release with:

GOARCH=$(case $(uname -m) in i[23456]86) echo 386;; x86_64) echo amd64;; armv6l|armv7l) echo arm;; aarch64) echo arm64;; *) echo Unknown machine $(uname -m) 1>&2 ; exit 1 ;; esac) && wget -O- https://github.com/fornellas/resonance/releases/latest/download/resonance.$(uname -s | tr A-Z a-z).$GOARCH.gz | gunzip > resonance && chmod 755 resonance
./resonance --help

Development

Docker is used to create a reproducible development environment on any machine:

git clone [email protected]:fornellas/resonance.git
cd resonance/
./build.sh

Typically you'll want to stick to ./build.sh rrb, as it enables you to edit files as preferred, and the build will automatically be triggered on any file changes (Linux only). The full build can be manually done with ./build.sh ci. A development shell is available with ./build.sh shell.

Native build

The official build relies on ./build.sh, but in some circumstances (eg: Docker being super slow on Mac) it may be useful to run the build without Docker, which requires manual configuration that is easy to get wrong / be outdated.

  • Install GNU Make.
    • In MacOS this can be done with Homebrew: brew install make. Note that the GNU Make binary will be called gmake, and this is how it should be invoked. make is Apple's ancient provided Make which will NOT work!
  • make ci