I would like to improve the automation and performance when managing VMs using Ansible. One of my use cases is to install custom software on a variety of operating systems i.e Red-Hat, Ubuntu, Centos. This software is distributed using single-file installers. For instance, installing a mySQL database on Red-Hat and Centos.

I recently learned about "repository managers" (or something similar). I don't know exactly where to look/learn more about what are the tools out there. I also don't know what the official terminology is.

This repository is ideally straightforward to use i.e, I just put a binary there, classify it with some tags[?] maybe like 64-bit, version 3.3, Centos.

Currently, I have this. But I don't really like hosting the binary on an NFS server

name: Get mySQL binary
command: "find {{ nfs }} -name \"*mysql*\""
register: mySQL_location 

name: Install mySQL
command: "{{mySQL_location.stdout}} --option 1 --option 2
become: yes

A typical use case would look like this

  • I want to install Software A on Centos
  • I use Ansible to get the appropriate OS specific version of Software A from a "central repository"
  • I use an Ansible module and specify version, OS, etc, and that downloads that binary (or binaries) to the VM. This should be fast since it will be over the local network, even for binaries of 100 MB+. Afterwards, Ansible installs it.
  • The Ansible role would be configurable to affect the installation settings, etc.
  • Next, I want to reuse the same role to easily do the same for, let's say Red-Hat

My goal is to have the Ansible playbooks be easily maintainable when a new version comes out, without, having to change anything in a playbook, just swap/add a new binary in the repository for a new version of Software A

I understand that the YUM package manager does this in a way, however, I am wondering what other options (if any) are out there.

  • You should most definitely be building rpms/debs; keeping track of installed software is precisely what package managers do. And then as Preston says, you can just create a local repo and install packages out of that. Feb 8, 2018 at 7:12

2 Answers 2


Your scenario is a perfect use case for a binary repository manager. A BRM's primary feature is to act as a central storage system for your binaries, but there are many other features including:

  1. Versioning
  2. Tagging
  3. Permission management
  4. Logging/auditing

Using a BRM is more lightweight than a typical source code repository system such as Git or SVN. Those systems will have much more metadata than is necessary for binary files

I have personally used Artifactory by JFrog, but I have also heard many good things about Nexus.


Another option if you are packaging your binaries (eg, as .deb or .rpm files) is to use a system like Foreman/Katello and the Anisble plugin. Katello was originally developed as a plugin for Foreman, and then Merged into the Foreman project. It is backed by Red Hat and re-branded as Red Hat Satellite 6 if you wish to use their licensed and supported version. While the whole system collectively is for management of the Lifecycle of machines (both physical and virtual), it can also manage Docker containers too.

But for package management, Katello will allow you to import your packages after they are built. You are also able to create environments and content views that allow you to version and control which servers get what when. Essentially, this gives you all of the benefits of a WSUS server for managing the release of your updates.

As an added bonus, Foreman can also create, destroy and build VMs for you with your cloud provider, or in your virtualization stack (if you do this in-house) using kickstart scripts.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.