AWX modernization: Ansible Jewel

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:

  1. Fork or clone both the ansible/jewel and ansible/awx repositories.

  2. 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 with cat 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/.

  3. Start a Jewel development environment.
    3a. Open another terminal window in the root of the ansible/jewel repository.
    3b. Build a headless image with make docker-compose-build HEADLESS=1.
    3c. Start Jewel with make docker-compose-basic HEADLESS=1.
    3d. Check that Jewel is running with curl -sk https://localhost:8000/api/gateway/v1/ -u admin:'<PASSWORD>'.
    3e. Register the AWX service with make register-services.
    3f. Ping AWX via the proxy with curl -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

2 Likes