• Tim - Epix

Tech Blog - Development Environment

We recently updated our developer laptop configuration tool from a bash script-based system to using Salt.

Salt (sometimes referred to as SaltStack) is Python-based, open-source software for event-driven IT automation, remote task execution, and configuration management.

Salt is:

  • A configuration management system. Salt is capable of maintaining remote nodes in defined states. For example, it can ensure that specific packages are installed and that specific services are running.

  • A distributed remote execution system used to execute commands and query data on remote nodes. Salt can query and execute commands either on individual nodes or by using an arbitrary selection criteria.

The architecture of Salt is designed to work with any number of servers, from a handful of local network systems to international deployments across different data centers. The topology is a simple server/client model with the needed functionality built into a single set of daemons.

The core functions of Salt:

  • Enable commands to remote systems to be called in parallel rather than serially

  • Use a secure and encrypted protocol

  • Use the smallest and fastest network payloads possible

Salt is very fast, easy to set up, and provides a single remote execution architecture that can manage the diverse requirements of any number of servers.

Now, running a simple command from the Salt server updates our new Linux-based developer laptop from a standard install into a fully configured developer environment, including the following areas:

  • Installs the required software packages for program editing, compiling, web services etc

  • Configures the database environment for use with FirebirdSQL

  • Configures and starts the web service, php cgi service, and other sundry systems

  • Creates user accounts and SSH encryption keys

  • Creates SSL certificates for the web server

This ensures that when a new developer starts, they can log in, checkout source-code from our GIT repository, change the server-settings file to point the a specific database on our internal database server, and they're good to go.