Skip to main content

ansible 2.10.x and Fedora/EPEL

As some of you all may know, there were some big changes around how ansible upstream is distributed and maintained with the 2.10.x release(es). I thought I would recap for everyone who was not aware of these changes, then share my plans for the Fedora/EPEL ansible packages. Everyone is going to end up in a better place after this settles out, so there's no need to panic. :)

ansible has some good problems with their community: They are very popular, very easy to work on and very widely used. This means there's a flood of people always submitting bug reports, pull requests, fixes, enhancements, and all manner of things. In the old ansible setup before 2.10, this resulted in bottlenecks. The core ansible maintainers couldn't review, merge and handle all the incoming flow of things. There were a bunch of things that were tried to help this (ansibot marking up issues and PR's), making modules git submodules of ansible, making more people 'community maintainers' with merge and other powers over some modules, etc. Even with these measures however, that hits another problem: ansible only releases every N months. If you have fixed some big bug in your module, users aren't going to get that fix very quickly at all.

The 2.10 changes are another stab at fixing or at least mitigating things so that ansible can surge forward with all the community energy behind it. Basically: The ansible "engine" has been split off into 'ansible-base'. This allows it to move as quickly (or slowly!) as it needs to to be stable and improve things. ansible-base does have some modules included, but only the very base ansible modules like copy or the like. Most of the rest of the modules that used to be in older ansible versions are now shipped as 'ansible-community' in a group of collections that have all agreed to ship at the same time as a bundle. Each of those collections are seperate and able to be managed by people who care about that collection. Finally there's all the other collections out there that can self manage, release when they like, etc. the 'ansible' collection contents can be seen in: https://github.com/ansible-community/ansible-build-data/blob/2.10.1/2.10/ansible-2.10.1.deps (for example for 2.10.1).

So now we have ansible-base (the engine and just a few base modules), ansible-community (a collection of collections that is most of the modules in old ansible +- some) and all the collections in ansible galaxy. Each can now be maintained by people who care about just that collection/thing and update on their schedule. This removes the central bottleneck and hopefully gets things cranking along at a good pace.

So, what does this mean for Fedora/EPEL? Well, for one thing, upstream is no longer going to ship rpms or tar.gz releases of ansible-base ("ansible") or ansible-community. They have decided distributions can do a fine job there and it's just duplicating effort (releases of ansible/ansible-base and ansible-community will be on pypi just like many other python upstreams). Next, of course, ansible-2.9.x is not going away anytime soon. It should continue to get updates for a while. I'm planning on submitting 'ansible-base' package to Fedora review today (it's all ready except that you cannot build full web docs currently as it needs a stack of new packages and a bugfix/update to python-pydandic, so I will be disabling full web docs to start with). Then I am going to start on a ansible-community package. Once they are both done in rawhide and the packaging is all sorted out, I'm planning on encouraging collections in the ansible-community meta collection to packaging and maintaining their own collections along with any collections that are not part of that meta bundle that want to package up. Once thats all working, we will look at retiring the old 'ansible' (2.9.x) package in favor of ansible-base + collections and push that out to other Fedora branches and EPEL. Some versions of EPEL (I'm looking at you 7) may stick with 2.9.x for as long as possible as 2.10.x may start to use newer python features that won't work on EPEL7. EPEL8 may need to switch to newer python module, but time will tell.

I'm looking forward to this new setup and the added velocity it gives ansible!

Any feedback/comments/better ideas are welcome in the tracking bug for ansible-2.10.x: https://bugzilla.redhat.com/show_bug.cgi?id=1848739