Hi folks,
For those of you who don’t know me, I’m John “Gundalow” Barker and have been part of the Ansible team at Red Hat for over 8 years. I am an engineering manager and currently responsible for the Ansible engineering team that focuses on the upstream community. You can find me on this Forum or Matrix as gundalow.
In a recent blog post, we talked about some upcoming changes we’ll be making to the AWX project. This will sound familiar if you attended Red Hat Summit/Ansible Fest 2024. As we acknowledged at both AnsibleFest and in the blog, we know we didn’t go into all the details as they are still forming.
The issues we face have been building for many years, we’ve either ignored them, pushed them to another day or attempted adjustments, and while we are just beginning to talk about how we might evolve AWX, the thoughts we have are many, but unstructured. We have lots to overcome but also need to focus on how we address them as both an open source project and as one of the upstream components of Red Hat’s Ansible Automation Platform.
While usage of AWX has grown beyond what we ever anticipated, this did not happen without encountering a fair share of challenges along the way. Unsurprisingly, over time, it has become more and more challenging to make changes, both upstream and downstream. While we have done our best to support our community by enabling and collaborating with contributors, triaging and debugging issues, and providing regular releases, we have struggled to support the project and product as usage continues to increase.
The changing needs of the project and the broader ecosystem have led to the realization that we must rethink AWX. To meet these increasing demands, we need to transform it into a more modern and scalable solution.
Reaffirming the intent of AWX
As AWX is now a fairly well-known and established open source project, we realize that not everyone may be familiar with its history. Originally, AWX was the internal name for the closed-source product Ansible Tower, written and sold by Ansible and then Red Hat after the former was acquired. In the FAQ that was published when AWX was very first open sourced by Red Hat in 2017, it stated:
Q: WHAT’S THE DIFFERENCE BETWEEN AWX AND ANSIBLE TOWER?
AWX is designed to be a frequently released, fast-moving project where all new development happens.
Ansible Tower is produced by taking selected releases of AWX, hardening them for long-term supportability, and making them available to customers as the Ansible Tower offering.
This is a tested and trusted method of software development for Red Hat, which follows a similar model to Fedora and Red Hat Enterprise Linux.
With the introduction of AWX, we spent months going through the process of getting it ready for the world to see and use. From the very beginning, we have always wanted to stay true to Ansible and Red Hat’s dedication to collaboration and open source, as we believe it results in higher quality and more secure software.
The years that followed the initial release have resulted in a wide set of contributions, ranging from new features to bug fixes, documentation, and a community of users supporting each other and the project.
Through our experience in supporting AWX, one of the main challenges of accepting active contributions was the initial design of the Ansible Tower project all those years ago, and the law of unintended consequences. Since the codebase was not originally designed as a community-minded project, when we do get contributions, a seemingly sensible change in one location causes knock-on impacts elsewhere, making it difficult to have confidence we are not breaking something down the delivery pipeline.
While we want to make changes that enable more collaboration with our community, at the same time we also must reduce the overhead we as the Ansible Engineering team within Red Hat spend supporting AWX so that we can more effectively serve both our upstream community and paying customers.
Our goal here isn’t to offer an exact replica of our commercial product for free. Instead, we aim to foster an innovative and collaborative environment for upstream development within the Ansible Ecosystem that ultimately results in higher quality code and a better experience for everyone.
Changes to how we version AWX
You may have seen our recent AWX Office Hours meeting where we proposed a shift to Calendar Versioning (CalVer) for AWX. This is the first change we’re making and is something that will continue to roll out across all of the Ansible projects, like we have already done in our Ansible Development Tools projects such as ansible-lint.
Why CalVer over SemVer?
Traditionally, AWX has used Semantic Versioning (SemVer). This approach implies a certain level of stability and support, and has led to confusion and mismatched expectations over the years. AWX has always been a “one-way street” - no stable/release branches, and tags have always been created from the most recent commit on the devel branch at a certain point in time. CalVer, on the other hand, better aligns with our intent of a single, rapidly evolving development stream.
As we’ve started socializing this idea, one FAQ has been how we will be denoting and communicating breaking changes. This and some other things we don’t know yet are captured a little further down. What we do know, is that release notes will continue to be auto-generated from Pull Request titles. We will also be engaging the community as we begin to make changes to our tooling to look into possible ways of programmatically detecting or automating this.
Additional changes: How we build and distribute AWX
As we begin to make changes to AWX, we need to balance the effort we put into maintaining it with making progress towards its future. The alternative is we fork the project and start afresh in parallel, but we are reluctant to do that. As those that have maintained large projects might understand, it’s nearly impossible to merge diverging branches back together later without incurring a lot of work. Now let’s take a look at some steps we’ll be taking in order to achieve what we’ve outlined above.
Pausing releases
Until we’ve completed some of the changes we’ve described in this post, we would like to focus our limited time and energy on what comes next for the project. Therefore, AWX 24.6.1 will be the last release until we implement CalVer and other changes around our build and release processes.
During this time, we will still be making and accepting new contributions. If they happen to be against an area of the codebase that’s undergoing large changes, we may put them on-hold, though we don’t anticipate many, if any, in these areas.
For those that would like to stay on the bleeding edge, you are free to build the images yourself using the tooling and documentation in the repo.
Additional changes: common services
Part of our strategy for Ansible Automation Platform is to build standard, common services for its various components. This reduces duplicated code, makes it easier to maintain, and makes it easier for people to contribute.
As we continue to move towards a more services-based architecture, it will also be critical that we think about how all of the components within AAP communicate with each other. An early example of this will be in the next version of AAP, where we will introduce a new unified UI and provide a single place to log in and manage the platform. We hope to discuss these changes more in the coming weeks to give a more comprehensive overview of more forward-looking ideas in the Ansible Forum.
What we don’t know yet
We don’t have all the answers, and that’s part of why we are using the forum to gather feedback and allow dialogue. Some current unknowns are:
- Should we use
YY.MM.DD
orYYYY.MM.DD
- How breaking changes will be communicated as we move from SemVer to CalVer.
- At what cadence AWX will be released. We are currently considering nightly builds, or perhaps weekly snapshots.
- The first CalVer release. This is dependent on how timely we can make the changes to our tooling.
Looking ahead
We understand we are talking about some large structural changes to how AWX is developed today, though they are needed to allow continued development. The initial response to these changes during AWX Office Hours was positive and attendees understood how this would allow faster development and easier contribution.
We look forward to the discussion and collaboration with our contributors and upstream users to help shape the future structure, and see how we can work together to ensure we can continue to scale your automation needs. All ideas are welcome, we hope you will find time and reason to participate.
Join the discussion
We value your input on these changes. You can share your thoughts asynchronously by replying to this Forum Post
I’ll also add a link later to allow you to provide anonymous feedback form if you prefer.
Stay updated
To stay in the loop with all things AWX, join The Forum, follow the News & Announcements and follow the awx.
Links in this AWX update series
- Blog: Upcoming Changes to the AWX Project
- Streamlining AWX Releases (this post)
- Refactoring AWX into a Pluggable, Service-Oriented Architecture
- Upcoming changes to AWX Operator installation methods
- AWX UI and credential types transitioning to the new pluggable architecture
Useful links
- Devtools Projects Transitioning to CalVer Releases
- The Forum: AWX topics
- The Forum: Newsletter Category
- Initial move to CalVer ansible/awx#15358
Updates
- Corrected proposal to be
YY.MM.DD
orYYYY.MM.DD
- Added link to CalVer PR