Adaptavist have deployed thousands of Atlassian systems over the years and have been a part of shaping best practice around running Atlassian applications. For the last 5 years, our operations teams have focussed on automating the deployment, monitoring and management of these systems for ourselves and our clients. We code-named this initiative MaMa (standing for MaMa: Application Management Automation), and we are now ready to introduce it to the wider world.
Why Create MaMa?
Adaptavist are big believers in the power of the agile movement and the continuous... well, everything that it enables. Underpinning the success of all this is reliable repeatability through automation of tasks.
Several years ago a major client of ours asked us to assist them using Puppet to deploy the full suite of Atlassian products for a major release. This started out with just deploying Java, the Atlassian applications and a few supporting aspects (such as databases). Now it is able to automate the full lifecycle of entire virtual-machines from scratch on cloud infrastructure.
Through other open source tooling, as well as what MaMa provides, Adaptavist are now able to create and recreate entire environments within public cloud providers, like Amazon Web Services, at the push of a button with nothing more than some tracked configuration.
Our vision is to provide a robust set of tooling that enables self-service for deployments for both technical and non-technical users. The tooling we’re releasing now underpins this vision, and is the first step of sharing the infrastructure Adaptavist enjoy.
We and our customers have benefitted from the open source community through the Linux, Java, Ruby communities and it’s only right that we give back in support of the projects we have used and extended, such as Puppet, Hiera, Fog and many, many more.
So today, Adaptavist are open sourcing MaMa, which can be found on GitHub. We have chosen Version 2 of the Apache Software License to release under, as we believe in supporting business that wish to take our code and build on it, and not encumber anyone unnecessarily. But obviously, we’d like you to share the extensions you’ve built with the world too!
What Problems Does MaMa Solve?
Adaptavist believe in loosely coupled tooling which integrate clearly in an opinionated way about the process, but allowing any of the technology to be replaced by better alternatives as they come along. The tool set Adaptavist is open sourcing today includes:
Adaptavist’s Puppet support project which tries to make things as data driven through Hiera configuration as possible, wrapping other modules to make them useable from Hiera where they are not out of the box. Avst-puppet comes as a set of Puppet modules and a data driven template structure.
Configuration of the OS and OS-packaged applications
Configures supporting elements such as web-servers, databases, ldap etc.
Configures and runs avst-app
Support encrypted secrets and facts, so credentials can be stored securely within configurations
Puppet runner - A wrapper runner for puppet that allows for encrypted secrets
Hiera Fragment - Merges yaml files for use with secrets
Hiera Loader - Simplifies looking up values from hiera with programmatic defaults
Completes the setup wizard based on configuration files
Supports JIRA Server, Confluence Server, Bitbucket Server, FishEye/Crucible, Bamboo Server and Crowd
Automates user directory, database and Atlassian application base url configuration
Written in Bash (with native OS packaging)
Configures and manages non-natively packaged applications
- e.g. Atlassian applications, Artifactory/Nexus, Coverity
Adaptavist’s Opinionated Process
Technology only automates a process, but what that process is, in many ways, is more important.
Adaptavist have 5 principles which underpin MaMa:
Loosely coupled elements following the Single Responsibility Principle
The separation of configuration and code
Everything, including configuration, should be version controlled, composable and repeatable
Linux support first
Cloud first, with Vagrant support
We’re still investing in MaMa, and there’s more tools in our kit that will be open sourced over time. Notable tools are:
Drives public cloud infrastructure in a vendor independent way
Ruby, based around fog.io
Takes hiera configuration describing infrastructure
Bootstraps the OS until Puppet can take over
Abstracts various backup technologies to provide a consistent interface for avst-app
Ruby, highly modular
Currently knows how to backup and restore: databases, LDAP and file-systems
Right now, the MaMa has been released as a set of tools, where each of the components are usable in their own right. The coming avst-cloud component will enable the use of the other MaMa components in a more cohesive manner.
For now, the tools are ready for use and we’re investing in making the documentation around how to use the tools as part of a platform ready for public consumption. For now, please visit us at Adaptavist Labs and on GitHub, to follow our progress.
Watch this space!
- 09 Oct 2018 » A strange bug on AWS Lambda
- 17 Jan 2018 » How to run Karma tests in browsers in Docker
- 30 Oct 2017 » Fun with React event handlers
- 17 Jul 2017 » Switching from Groovy to Java
- 24 May 2017 » Useful Git Aliases
- 27 Mar 2017 » Practical Ratpack Promises
- 03 Nov 2016 » Custom Content in Forms for Confluence Connect
- 04 Oct 2016 » Checking user permissions from REST calls
- 30 Sep 2016 » Using the reflection API in Confluence
- 28 Sep 2016 » Creating a custom Confluence Blueprint
- 06 Sep 2016 » ReactJS in Forms for Confluence Connect
- 25 Apr 2016 » Migrating to ES6 in Atlassian Add-ons
- 17 Mar 2016 » All kinds of things I learnt trying to performance test against Fisheye/Crucible
- 24 Dec 2015 » Adaptavist’s Holiday Gift of Atlassian Deployment Automation
- 17 Dec 2015 » Getting a Custom Field value safely
- 07 Dec 2015 » Putting Google Analytics to work with plugins for Confluence
- 02 Dec 2015 » Devoxx Voting, A retrospective
- 25 Nov 2015 » Some things I've learnt about SingleSelect
- 15 Oct 2015 » Using SOY for JIRA actions
- 26 Sep 2015 » Object Reflection in Groovy
- 22 Sep 2015 » Introducing Adaptavist Labs