Hey folks, Jake here again,
We’ve got another update on the AWX modernization that we’d like to share with the Ansible community. As we’ve mentioned from the first announcement here in the forum, our goal has been to refactor AWX into a pluggable, service-based architecture.
Today I’m pleased to announce that, with the availability of the ansible/jewel source code, we’ve reached another significant milestone with our refactoring effort.
The Jewel project and AWX
The ansible/jewel repository provides a proxy layer that connects AWX, for job scheduling and execution, and other pluggable Ansible services.
In the quickstart below we’re going to spin up the Jewel API and an AWX development environment. This table shows you the services that we’ll create and their network locations:
| Service | URL |
|---|---|
| Jewel API | https://localhost:8000 |
| Jewel Proxy (Envoy) | https://localhost:443 |
| Controller (AWX) via proxy | https://localhost:443/api/controller/ |
| AWX direct | https://localhost:8043 |
To stand this up locally and try it for yourself, complete the following steps:
-
Fork or clone both the
ansible/jewelandansible/awxrepositories. -
Start an AWX development environment.
2a. Open a terminal window in the root of the ansible/awx repository.
2b. Build the development image with make docker-compose-build.
2c. Start the environment with make docker-compose.
2d. Note the superuser password. You can also find this withcat tools/docker-compose/_sources/secrets/admin_password.yml.
2e. Check that AWX is listening on ports 8043 (HTTPS) and 8013 (HTTP). For example, try:curl -sk https://localhost:8043/api/v2/ping/. -
Start a Jewel development environment.
3a. Open another terminal window in the root of theansible/jewelrepository.
3b. Build a headless image withmake docker-compose-build HEADLESS=1.
3c. Start Jewel withmake docker-compose-basic HEADLESS=1.
3d. Check that Jewel is running withcurl -sk https://localhost:8000/api/gateway/v1/ -u admin:'<PASSWORD>'.
3e. Register the AWX service withmake register-services.
3f. Ping AWX via the proxy withcurl -sk https://localhost:443/api/controller/v2/ping/.
Your next step could be trying docs/service_token_authentication.md to set up JWT-based trust between Jewel and AWX so they can authenticate API calls. That requires running gw-manage generate_service_secret controller inside the Jewel container and configuring AWX’s RESOURCE_SERVER settings.
Contributions to the Jewel and AWX documentation are welcome. If you’re looking for more ways to get involved and contribute, see John’s Ansible Jewel: Connecting Ansible services post that announces the Jewel project.
Next steps
There are other goals we’ve set out here in the forum, such as simplifying the code base and making it easier to contribute. We want the community to help shape the project and steer technical direction of the AWX project. You can expect to hear more about this in the forum as follow on posts.
Useful links
- Forum: AWX topics
- Forum: Jewel topics
- Forum: Newsletter Category
- AWX project documentation
- AWX code repository