Ansible AWX - Using Python to create bulk users


AWX provides an interface to create users via the front-end, command line through the administer tools as well as through the RESTful API.

What if you need to create multiple users. Rather than doing this manually I’ve wrote a Python script which automates the process (making use of the API).

The script carries out the following:

  • reads in a configuration file which stores authentication information, plus path to a users csv file
  • reads in a users.csv file which stores new users information
  • for each request sent to the API an OAuth2 token is sent in the request header: "Authorization: Bearer {OAUTH2 TOKEN}"
  • a HTTP POST is sent to endpoint: <AWX_HOST>/api/v2/users to create a new user

Configuration file

The config.json file.

        "settings": [
                "awx_server_url": "<replace with AWX server url>",
                "api_version": 2,
                "userid": "admin",
                "token": "<replace with OAuth2 token>",
                "user_csv": "users.csv"

I’ve used the admin user here to demonstrate the process, but you could use a custom user with equivalent admin permissions to create users.

Users file

To store a list of users i’ve used a csv file. It makes a list of user easy to edit in something like Excel.


Python script usage

   usage: [-h] [--userid USERID] [--config CONFIG]
   Ansible AWX User creator.
   optional arguments:
     -h, --help       show this help message and exit
     --userid USERID  Specify the userid to connect to the AWX API.
     --config CONFIG  Specify the config json file.

Running the script

    ./ --userid admin --config configuration.json

    2020-03-31 12:42:19:INFO > Creates AWX user accounts.
    2020-03-31 12:42:19:INFO > Authenticating user admin.
    2020-03-31 12:42:19:INFO > Reading in configuration file = configuration.json
    2020-03-31 12:42:19:INFO > Authentication settings found for userid = admin
    2020-03-31 12:42:19:INFO > Creating user, with username = user1
    2020-03-31 12:42:19:INFO > (OK) - Created.
    2020-03-31 12:42:19:INFO > Creating user, with username = user2
    2020-03-31 12:42:21:INFO > (OK) - Created.
    2020-03-31 12:42:21:INFO > Creating user, with username = user3
    2020-03-31 12:42:21:INFO > (OK) - Created.
    2020-03-31 12:42:21:INFO > Creating user, with username = user4
    2020-03-31 12:42:23:INFO > (OK) - Created.
    2020-03-31 12:42:23:INFO > Creating user, with username = user5
    2020-03-31 12:42:24:INFO > (OK) - Created.
    2020-03-31 12:42:24:INFO > Creating user, with username = user6
    2020-03-31 12:42:25:INFO > (OK) - Created.
    2020-03-31 12:42:25:INFO > Creating user, with username = user7
    2020-03-31 12:42:27:INFO > (OK) - Created.

The script and resources can be found in GitLab.

Last updated on 31 Mar 2020
Published on 31 Mar 2020