Synapse enables you to remotely manage a large number of hosts. It brings together features of Configuration Management and Orchestration in a lightweight framework. Written in Python and using AMQP for messaging between the nodes.
- A RabbitMQ server
- The synapse-agent on the hosts you want to manage
- The synapse-client to control them
Manipulates resources (packages, files, services, ...) instead of executing commands. Describe a resource state and synapse takes care of it. For example, installing a package means sending this kind of message to synapse:
{
"collection": "packages",
"action": "update",
"id": "htop",
"attributes": {
"installed": true
}
}
Of course, you can use the synapse-client to make it easy:
synapse-client packages install htop
Abstract the definition of resources so you can focus on the what, not the how.
The example above about how to install a package works independently of the underlying platform.
Manage any kind of resources on the remote hosts with custom plugins. Available built-in resources are:
- files
- packages
- services
- users
- groups
Why not building a "cron" plugin.
How ? Take a look at the existing packages-plugin and start your own ?
Easy to deploy, small memory footprint. Look at the Quick Start Guide
No incoming open port required (not even port 22/ssh), secured with PKI/SSL
Parallelize tasks accross all your hosts.
Synapse-agents are automatically bound to an AMQP fanout exchange. It means that if a single message is published into that exchange, the RabbitMQ server broadcasts this message to every synapse-agent bound to that exchange.
Reach nodes without knowing their ip or hostname, filter requests by hostname, ip, platform Want to reach only hosts in particular subdomains ?
synapse-client services syslog-ng restart --filter_hosts *.guardis.be