GitHub repository: ansible/awx

Issues:
issue_14935: state: open
title: Add test for utils method is_testing
body: ##### SUMMARY
Discovered this method was broken in the course of testing the DAB resource registry, so this would add regression coverage for that.

It should fail initially if all goes right.

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API


user: AlanCoding
issue_14934: state: open
title: Replace view reverse URLs with header value
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
Enables replacing part of the URLs that appear on the API page with a request header.

If a special header is present in the HTTP request, the substring will be replaced with the header value provided.

for example,

in settings.py

```
URL_REPLACE_FROM_HEADER = {
    'header': 'Aap-Prefix',
    'to_replace': 'api/v2',
}
```

This will replace

    api/v2/instances/3

with

    api/controller/v2/instances/3

if 'Aap-Prefix' is defined in the request header.

This feature is added to allow consistent URLs when controller is deployed alongside aap-gateway.

- [ ] should the setting be turned off be default
- [ ] there are few places where we import `reverse` from restframework and django.urls instead of our custom defined `reverse`. So we may need to tweak those imports

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API
user: fosterseth
issue_14931: state: open
title: Show EE that was used for a job
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Right now EE that was selected is invisible to user, see here

![image](https://github.com/ansible/awx/assets/1560121/a61b4a40-d6ee-421f-932c-925716b0f996)

A specific version of EE was used for this template, but it's not visible anywhere in the job history (it was changed between runs) and therefore we can't verify if that specific version was really used or not and which version of EE the job was started with

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Create a template, pick a custom EE, start a job, then edit template, pick another EE, start a new job. You won't be able to tell which job was started with which EE.

### Current results

See above

### Sugested feature result

Make it so that chosen EE version is visible just like other fields, job template, project etc.

### Additional information

_No response_
user: benapetr
issue_14927: state: open
title: Large netbox dynamic inventory ouput doesn't allow sync hosts
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

While using Netbox dynamic inventory script, which outputs inventory just for 1 host, it works fine. But if using more then 1 host awx-dispatcher  gets an error:
```
awx-dispatcher stderr | 2024-02-26 14:52:49,591 ERROR    [ac98e042] awx.main.tasks.jobs inventory_update 4882 (running) Post run hook errored.
awx-dispatcher stderr | Traceback (most recent call last):
awx-dispatcher stderr |   File "/awx_devel/awx/main/tasks/jobs.py", line 636, in run
awx-dispatcher stderr |     self.post_run_hook(self.instance, status)
awx-dispatcher stderr |   File "/awx_devel/awx/main/tasks/jobs.py", line 1645, in post_run_hook
awx-dispatcher stderr |     with open(expected_output) as f:
awx-dispatcher stderr | FileNotFoundError: [Errno 2] No such file or directory: '/tmp/awx_4882_5jqtcokc/artifacts/4882/output.json'
```

### AWX version

22.3.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

Ubuntu 18.04.5 LTS

### Web browser

Chrome

### Steps to reproduce

I use such Netbox inventory script for getting all active virtual machines and group it for their role:
```
plugin: netbox.netbox.nb_inventory
api_endpoint: "https://netbox.example.com"
timeout: 300
validate_certs: false
leading_separator: false
keyed_groups:
  - key: custom_fields.vm_role
query_filters:
  - status: active
  - cluster: cluster1
device_query_filters:
  - device_type: "null"
```
If use it localy with ansible, it outputs 1 group with 2 host in each:
```
ansible-inventory --list -i netbox-inventory.yaml

{
    "_meta": {
        "hostvars": {
            "server1": {
                "cluster": "cluster1",
                "cluster_group": "cluster_group1",
                "cluster_type": "cluster_type1",
                "custom_fields": {
                    "vm_option_1":  null,
                    "vm_option_2": null,
                    "vm_option_3": null,
                    "vm_option_4": null,
                    "vm_option_5": null,
                    "vm_role": "role1"
                },
                "disk": 15,
                "is_virtual": true,
                "local_context_data": [
                    null
                ],
                "locations": [],
                "memory": 1024,
                "platforms": [
                    "linux"
                ],
                "regions": [
                    "city1",
                    "country1"
                ],
                "services": [],
                "site_groups": [
                    "site_group1"
                ],
                "sites": [
                    "site1"
                ],
                "status": {
                    "label": "Active",
                    "value": "active"
                },
                "tags": [],
                "tenants": [
                    "test"
                ],
                "vcpus": 1.0
            },
            "server2": {
                "cluster": "cluster1",
                "cluster_group": "cluster_group1",
                "cluster_type": "cluster_type1",
                "custom_fields": {
                    "vm_option_1":  null,
                    "vm_option_2": null,
                    "vm_option_3": null,
                    "vm_option_4": null,
                    "vm_option_5": null,
                    "vm_role": "role1"
                },
                "disk": 10,
                "is_virtual": true,
                "local_context_data": [
                    null
                ],
                "locations": [],
                "memory": 1024,
                "platforms": [
                    "linux"
                ],
                "regions": [
                    "city1",
                    "country1"
                ],
                "services": [],
                "site_groups": [
                    "site_group1"
                ],
                "sites": [
                    "site1"
                ],
                "status": {
                    "label": "Active",
                    "value": "active"
                },
                "tags": [],
                "vcpus": 1.0
            }
        }
    },
    "all": {
        "children": [
            "ungrouped",
            "group1"
        ]
    },
    "group1": {
        "hosts": [
            "server1",
            "server2"
        ]
    }
}
```

And if using it in AWX while syncing:
```
awx-uwsgi stderr | 2024-02-26 16:13:13,005 INFO     [706eb8ab] awx.analytics.job_lifecycle inventoryupdate-4922 created
awx-dispatcher stderr | 2024-02-26 16:13:13,137 INFO     [706eb8ab] awx.analytics.job_lifecycle inventoryupdate-4922 acknowledged
awx-dispatcher stderr | 2024-02-26 16:13:13,204 INFO     [706eb8ab] awx.analytics.job_lifecycle inventoryupdate-4922 controller node chosen
awx-dispatcher stderr | 2024-02-26 16:13:13,205 INFO     [706eb8ab] awx.analytics.job_lifecycle inventoryupdate-4922 execution node chosen
awx-dispatcher stderr | 2024-02-26 16:13:13,275 INFO     [706eb8ab] awx.analytics.job_lifecycle inventoryupdate-4922 waiting
awx-dispatcher stderr | 2024-02-26 16:13:13,451 INFO     [706eb8ab] awx.analytics.job_lifecycle inventoryupdate-4922 pre run
awx-dispatcher stderr | 2024-02-26 16:13:17,758 INFO     [706eb8ab] awx.analytics.job_lifecycle inventoryupdate-4922 preparing playbook
awx-dispatcher stderr | 2024-02-26 16:13:17,814 INFO     [706eb8ab] awx.analytics.job_lifecycle inventoryupdate-4922 running playbook
awx-dispatcher stderr | 2024-02-26 16:13:17,823 INFO     [706eb8ab] awx.analytics.job_lifecycle inventoryupdate-4922 work unit id received
awx-dispatcher stderr | 2024-02-26 16:13:17,838 INFO     [706eb8ab] awx.analytics.job_lifecycle inventoryupdate-4922 work unit id assigned
awx-receiver stderr | 2024-02-26 16:14:15,235 INFO     [706eb8ab] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 4922
awx-dispatcher stderr | 2024-02-26 16:14:15,240 INFO     [706eb8ab] awx.analytics.job_lifecycle inventoryupdate-4922 post run
awx-dispatcher stderr | 2024-02-26 16:14:15,265 ERROR    [706eb8ab] awx.main.tasks.jobs inventory_update 4922 (running) Post run hook errored.
awx-dispatcher stderr | Traceback (most recent call last):
awx-dispatcher stderr |   File "/awx_devel/awx/main/tasks/jobs.py", line 636, in run
awx-dispatcher stderr |     self.post_run_hook(self.instance, status)
awx-dispatcher stderr |   File "/awx_devel/awx/main/tasks/jobs.py", line 1645, in post_run_hook
awx-dispatcher stderr |     with open(expected_output) as f:
awx-dispatcher stderr | FileNotFoundError: [Errno 2] No such file or directory: '/tmp/awx_4922_kfiu_9ak/artifacts/4922/output.json'
awx-receiver stderr | 2024-02-26 16:14:15,287 INFO     [706eb8ab] awx.analytics.job_lifecycle inventoryupdate-4922 stats wrapup finished
awx-dispatcher stderr | 2024-02-26 16:14:15,391 INFO     [706eb8ab] awx.analytics.job_lifecycle inventoryupdate-4922 finalize run
```

But if I use inventory which get only 1 server, it works ok:
```
plugin: netbox.netbox.nb_inventory
api_endpoint: "https://netbox.example.com"
timeout: 300
validate_certs: false
leading_separator: false
keyed_groups:
  - key: custom_fields.vm_role
query_filters:
  - name: server1
  - status: active
  - cluster: cluster1
device_query_filters:
  - device_type: "null"
```

### Expected results

While using dynamic inventory with large output, every host and group should be handled. 

### Actual results

If dynamic inventory outputs more then 1 host, sync job crushes with error.

### Additional information

_No response_
user: proletariandrift
issue_14924: state: open
title: Unformatted help text is popped out when peers for intances are changed
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Following unformatted help text (includes `{0}` and `{1}`) is popped out on the top-right corner when I change peers for any intances.

> Peers update on {0}. Please be sure to run the install bundle for {1} again in order to see changes take effect.

![image](https://github.com/ansible/awx/assets/2920259/91cb7395-d965-42b0-a93a-0d3b99c80f86)


### AWX version

23.8.1

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

N/A

### Operating system

CentOS Stream 8

### Web browser

Chrome

### Steps to reproduce

Unformatted help text will be popped out on the steps 4 and 5.

1. Add `hop01.example.com` as new hop node
2. Add `exec01.example.com` as new execution node, with port `27199`
3. Open `hop01.example.com` and move on to the `Peers` tab
4. Associate `exec01.example.com` as a peer
5. Remove `exec01.example.com` from peers

### Expected results

The help text should be

> Peers update on hop01.example.com. Please be sure to run the install bundle for hop01.example.com again in order to see changes take effect.

### Actual results

Help text contains `{0}` and `{1}`.

> Peers update on {0}. Please be sure to run the install bundle for {1} again in order to see changes take effect.

### Additional information

_No response_
user: kurokobo
issue_14923: state: open
title: Modules that take password are not idempotent in --check mode
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

User and Credential modules show "changed" in --check mode when password field is specified, even with update_secrets set to false.

### AWX version

23.2.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.14.2

### Operating system

Red Hat Enterprise Linux release 9.1 (Plow)

### Web browser

Chrome

### Steps to reproduce

```
test_bugs.yml

    - ansible.controller.user:
        username: 'A'
        password: 'pass'
        update_secrets: false

    - ansible.controller.credential:
        name: 'Machine A'
        credential_type: 'Machine'
        update_secrets: false
        inputs: {'password': '', 'username': 'AAA'}

    - ansible.controller.user:
        username: 'A'

    - ansible.controller.credential:
        name: 'Machine A'
        credential_type: 'Machine'
        inputs: {'username': 'AAA'}

ansible-playbook test_bugs.yml

ansible-playbook test_bugs.yml --check
```

### Expected results

```
ok: [localhost] ...
ok: [localhost] ...
ok: [localhost] ...
ok: [localhost] ...

ok: [localhost] ...
ok: [localhost] ...
ok: [localhost] ...
ok: [localhost] ...
```

### Actual results

```
ok: [localhost] ...
ok: [localhost] ...
ok: [localhost] ...
ok: [localhost] ...

changed: [localhost] ...
changed: [localhost] ...
ok: [localhost] ...
ok: [localhost] ...
```

### Additional information

_No response_
user: kk-at-redhat
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14922: state: open
title: Inventory and Host modules are not idempotent in --check mode
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Inventory and Host modules will report "ok" in real mode but "changed" in --check mode

### AWX version

23.2.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.14.2

### Operating system

Red Hat Enterprise Linux release 9.1 (Plow)

### Web browser

Chrome

### Steps to reproduce

```
test_bugs.yml

    - ansible.controller.inventory:
        name: 'Dynamic A'
        organization: 'A'

    - ansible.controller.host:
        name: 'Host A'
        inventory: 'Dynamic A'

ansible-playbook test_bugs.yml

ansible-playbook test_bugs.yml --check

### Expected results

```
ok: [localhost] ...
ok: [localhost] ...

ok: [localhost] ...
ok: [localhost] ...
```

### Actual results

```
ok: [localhost] ...
ok: [localhost] ...

changed: [localhost]
changed: [localhost]
```

### Additional information

_No response_
user: kk-at-redhat
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14921: state: open
title: No ability to specify null values for source_project (ansible.controller.inventory_source)
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Depending on the source, source_project value is either defined or null. However, there is no way to specify null value source_project in a playbook.  A workaround would be to have a different playbook for each source type (project, Satellite etc.) which is not scalable.

### AWX version

23.2.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.14.2

### Operating system

Red Hat Enterprise Linux release 9.1 (Plow)

### Web browser

Chrome

### Steps to reproduce

```
- ansible.controller.inventory_source:
    name: "Sat"
    inventory: "Dynamic A"
    source_project: ""

- ansible.controller.inventory_source:
    name: "Sat"
    inventory: "Dynamic A"
    source_project: None
```

### Expected results

```
ok: [localhost] ...

ok: [localhost] ...
```

### Actual results

```
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Request to /api/v2/projects/ returned 6 items, expected 1"

fatal: [localhost]: FAILED! => {"changed": false, "msg": "The specified source project, {}, was not found."}
```

### Additional information

_No response_
user: kk-at-redhat
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14920: state: open
title: Unable to specify empty value for execution_environment (ansible.controller.inventory_source)
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

There is no way to specify empty value for execution_environment in ansible.controller.inventory_source

### AWX version

23.2.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.14.2

### Operating system

Red Hat Enterprise Linux release 9.1 (Plow)

### Web browser

Chrome

### Steps to reproduce

```
- ansible.controller.inventory_source:
    name: "A"
    inventory: "Dynamic A"
    execution_environment: ""

- ansible.controller.inventory_source:
    name: "A"
    inventory: "Dynamic A"
    execution_environment: None
```

### Expected results

```
changed: [localhost] ...

changed: [localhost] ...
```

### Actual results

```
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Request to /api/v2/execution_environments/ returned 4 items, expected 1"

fatal: [localhost]: FAILED! => {"changed": false, "msg": "Request to /api/v2/execution_environments/?name=None returned 0 items, expected 1"
```

### Additional information

_No response_
user: kk-at-redhat
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14919: state: open
title: Unable to specify empty value for credential (multiple modules)
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

There is no way to specify empty credential for idempotency purposes or to remove configured credentials to manage configuration drift:

- projects: credentials
- inventory sources: credential

Also, see https://github.com/ansible/awx/issues/14843

### AWX version

23.2.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.14.2

### Operating system

Red Hat Enterprise Linux release 9.1 (Plow)

### Web browser

Chrome

### Steps to reproduce

```
- ansible.controller.project:
    name: "Creds A"
    credential: None

- ansible.controller.project:
    name: "Creds A"
    credential: ""

- ansible.controller.inventory_source:
    name: "A"
    inventory: "Dynamic A"
    credential: None

- ansible.controller.inventory_source:
    name: "A"
    inventory: "Dynamic A"
    credential: ""
```

### Expected results

```
changed: [localhost] ...

changed: [localhost] ...

changed: [localhost] ...

changed: [localhost] ...
```

### Actual results

```
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Request to /api/v2/credentials/?name=None returned 0 items, expected 1", "query": {"name": "None"}, "response": {"json": {"count": 0, "next": null, "previous": null, "results": []}, "status_code": 200}, "total_results": 0}

fatal: [localhost]: FAILED! => {"changed": false, "msg": "Request to /api/v2/credentials/ returned 15 items, expected 1"

fatal: [localhost]: FAILED! => {"changed": false, "msg": "Request to /api/v2/credentials/?name=None returned 0 items, expected 1", "query": {"name": "None"}, "response": {"json": {"count": 0, "next": null, "previous": null, "results": []}, "status_code": 200}, "total_results": 0}

fatal: [localhost]: FAILED! => {"changed": false, "msg": "Request to /api/v2/credentials/ returned 15 items, expected 1"
```

### Additional information

_No response_
user: kk-at-redhat
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14918: state: open
title: variables and source_vars expect dictionary but apply as yaml (multiple modules)
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Dictionary with provided variables seems to be applying as yaml:
 - inventories: variables
 - hosts: variables
 - groups: variables
 - inventory sources: source_vars

Also, see https://github.com/ansible/awx/issues/14842

### AWX version

23.2.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.14.2

### Operating system

Red Hat Enterprise Linux release 9.1 (Plow)

### Web browser

Chrome

### Steps to reproduce
```
- ansible.controller.inventory:
    name: "Dynamic A"
    organization: "A"
    variables: {tt: tt}

- ansible.controller.host:
    name: "Host A"
    inventory: "Static A"
    variables: {tt: tt}

- ansible.controller.group:
    name: "Group A"
    inventory: "Static A"
    variables: {tt: tt}

- ansible.controller.inventory_source:
    name: "A"
    inventory: "Dynamic A"
    source_vars: {tt: tt}
```
### Expected results
```
YAML:
---
tt: tt
```
### Actual results
```
YAML:
{"tt": "tt"}
```
### Additional information

_No response_
user: kk-at-redhat
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14917: state: open
title: ansible.controller.export should expose "external_account" field for users
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

When exporting user configuration ansible.controller.export should show "external_account" field which is required to differentiate locally created accounts from the external ones (LDAP etc.)

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

- name: Get users from AAP
  ansible.controller.export:
    users: 'all'
  register: aap_users

### Current results

external_account field nowhere to be found

### Sugested feature result

external_account should be in the output for each user together with other fields like username, email first-name etc.

### Additional information

Workaround is to use controller_api lookup:

- name: Get users from AAP
  ansible.builtin.set_fact:
    aap_users: "{{ lookup('ansible.controller.controller_api', 'users') }}"
user: kk-at-redhat
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14914: state: open
title: Precedence of playbook group_vars/all vs. inventory group_vars/* vs. inventory host_vars/*
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

AWX seems to handle variable precedence in a way that differs from the Ansible CLI, but also from AWX's own documentation.

### AWX version

23.8.1

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.16.3

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Our project structure is as follows:

```
test_playbook.yml
test_inventory/
  hosts.yml
  group_vars/
    test_inventory.yml
group_vars/
  all.yml
```

With contents:

`test_playbook.yml`:

```
- hosts: localhost
  tasks:
    - ansible.builtin.debug:
        msg: "{{ test_variable }}"
```

`test_inventory/hosts.yml`:

```
test_inventory:
  children:
    test_group:
      hosts:
        localhost:
          ansible_connection: local
```

`test_inventory/group_vars/test_inventory.yml`:

```
test_variable: "from inventory group_vars/test_inventory"
```

`group_vars/all.yml`:

```
test_variable: "from playbook group_vars/all"
```

We import the project into AWX from Git and run `test_playbook.yml` against inventory `test_inventory` and compare the output with running `ansible-playbook -i test_inventory test_playbook.yml`.

### Expected results

According to [AWX's documentation](https://ansible.readthedocs.io/projects/awx/en/latest/userguide/job_templates.html#extra-variables) (see table "AWX Variable Precedence Hierarchy") we learn that any kind of playbook group_var has higher precedence than any inventory  group_vars and would expect both AWX and Ansible to print:

```
ok: [localhost] => 
  msg: from playbook group_vars/all
```



### Actual results

And that is indeed what is printed by AWX, however, [Ansible's own documentation](https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_variables.html#understanding-variable-precedence) contradicts AWX's description of what Ansible does by going into more detail and giving inventory group_vars/* higher precedence than playbook group_vars/all and in fact Ansible prints:

```
ok: [localhost] => 
  msg: from inventory group_vars/test_inventory
```

Thus AWX's behavior differs significantly from that of Ansible while the AWX documentation suggests both should behave the same way.

### Additional information

Additionally, AWX's behavior contradicts its own documentation. If we add `test_inventory/host_vars/localhost.yml` with contents as follows:

```
test_variable: "from inventory host_vars/localhost"
```

We would still expect the output to remain the same, since the playbook group_vars should have higher precedence, but in fact the inventory host_vars win and now AWX prints

```
ok: [localhost] => 
  msg: from inventory host_vars/localhost
```

which matches `ansible-playbook`.
user: bsteinb
issue_14912: state: open
title: User Details redirects to a resource that is "not found"
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When any user selects the "User Details" Button in the upper right hand corner they are redirected to a missing resource.
This is the path "http://,Hostname"/users/4/details"

### AWX version

17.1.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.14.9

### Operating system

Rocky Linux 9.3

### Web browser

Chrome

### Steps to reproduce

Install AWX as normal process indicates and add a new user in GUI, select dropdown and error should occur.

### Expected results

The resource for http://,Hostname"/users/4/details should be missing.

### Actual results

The resource for http://,Hostname"/users/4/details is missing.

### Additional information

Please let me know what further information you may require.
user: daydone
issue_14910: state: open
title: AAP 20885 20627 English string comparisons
body: ##### SUMMARY
This work is to remove string validation using comparisons of English literals for comparison.
This replaces validation with error/op codes as a universal approach to validation and comparison


##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API

##### AWX VERSION
```
all
```


user: dmzoneill
issue_14909: state: open
title: Support parameter --playbook-dir for Inventory Sources
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

The `ansible-inventory` command allows to set a `--playbook-dir` base directory to locate all kinds of things inside a project. I personally use this to load a project-specific inventory plugin from the `inventory_plugins` directory of my project. But according to the documentation, it could also be relevant in a ton of other use cases.

AWX currently does not allow to set this variable for an inventory source, as far as I can see. This makes it impossible to load the dynamic inventory through the plugin for my project.

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

1. Set up an Ansible project with
   * a dummy playbook
   * a custom inventory plugin written in Python (in my case, `sharepoint.py`)
   * an inventory configuration for the plugin (to trigger the loading of the plugin) - here: `hosts/sharepoint.yaml`
2. Add the project to AWX (e.g., from a Git repository)
3. Configure a new Inventory in AWX
4. Set up an Inventory Source "Sourced from a Project" and select the inventory configuration
5. Try to synchronize the inventory

### Current results

> [WARNING]:  * Failed to parse /runner/project/hosts/sharepoint.yaml with
auto plugin: inventory config '/runner/project/hosts/sharepoint.yaml'
specifies unknown plugin 'sharepoint'

### Sugested feature result

I would wish that either

* AWX would automatically populate the parameter `--playbook-dir` with the path to the project (which seems to be `/runner/project` or
* AWX would offer a UI field for me to enter the variable value (doesn't really make much sense, so I only suggest this if the first option is complicated)

### Additional information

_No response_
user: gendergap
issue_14907: state: open
title: Approving a workflow approval not possible via awx cli
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Currently there is no option to approve a workflow approval with the store awx.
Checking:

https://github.com/ansible/awx/blob/23.8.1/awxkit/awxkit/api/pages/workflow_approvals.py

there is a small implementation for that already, but it is never used in other files (or did I miss something?)

However, there already exists a workflow_approval Ansible Module:
https://github.com/ansible/awx/blob/23.8.1/awx_collection/plugins/modules/workflow_approval.py


### AWX version

23.8.1

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [x] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

use awx cli to approve a workflow approval

### Expected results

awx workflow_approvals approve 3460

### Actual results

usage: awx workflow_approvals [-h] action ...

positional arguments:
  action
    list
    get
    delete

options:
  -h, --help  show this help message and exit

awx workflow_approvals: the following arguments are required: action

### Additional information

_No response_
user: SimHeb
issue_14905: state: open
title: Replace role system with permissions-based DB roles
body: ##### SUMMARY
This replaces https://github.com/ansible/awx/pull/14735 as we have introduced a feature branch for this purpose.

This makes use of https://github.com/ansible/django-ansible-base/pull/45 and the intent is to have that merged before this.

New endpoints are exposed from DAB. These are
 - role definitions
 - role user assignments
 - role team assignments

The routers/views/serializers for these new endpoints live in DAB, not in this patch. This is mostly concerned with the "translation" layer to make the new roles look kind of like the old roles. Generally this is intended to be a backward-compatible change.

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - API


##### ADDITIONAL INFORMATION


user: AlanCoding
labels: component:awx_collection: issues related to the collection for controlling AWX
dependencies: Pull requests that update a dependency file
issue_14904: state: open
title: Job stdout blank after reload
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Since upgrading to 23.8.1 the job output doesn't load after a reload. This seems to be on jobs that have more than 4000 lines, as smaller jobs load their stdout no problem and can be reloaded as well. To be safe, we changed the setting to 8000 rather than the default 4000 but to no avail.
```
    - setting: MAX_UI_JOB_EVENTS
      value: "8000"
``` 

### AWX version

23.8.1

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

rocky 8.8 (K8s cluster RKE2 v1.26.8+rke2r1)

### Web browser

Firefox, Chrome, Safari

### Steps to reproduce

Run a job that has a stdout of over 4000 lines. This job we are running calls multiple roles against about 40 hosts. Clean installation of AWX through the awx-operator helm chart


### Expected results

Output that can be used for troubleshooting by other teams
![Screenshot 2024-02-20 at 9 44 04 AM](https://github.com/ansible/awx/assets/47154121/8a81687e-09be-45bf-8e69-5cbe3cb07a13)


### Actual results

No output other than hostname is given

![Screenshot 2024-02-15 at 4 01 29 PM](https://github.com/ansible/awx/assets/47154121/ed64fff0-36b8-43df-8947-1af87a8f5d48)
![Screenshot 2024-02-20 at 9 54 12 AM](https://github.com/ansible/awx/assets/47154121/ce1711ed-66e2-4e45-aae2-a0f05d15382c)



### Additional information

Reading through older posts, I found someone was able to temporarily resolve this by running awx-manage run_callback_receiver but my output is as follows if I try
```
sh-5.1# awx-manage run_callback_receiver
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 8, in <module>
    sys.exit(manage())
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/__init__.py", line 175, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/__init__.py", line 436, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/base.py", line 412, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/base.py", line 458, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/management/commands/run_callback_receiver.py", line 30, in handle
    CallbackReceiverMetricsServer().start()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/analytics/subsystem_metrics.py", line 455, in __init__
    registry.register(CustomToPrometheusMetricsCollector(DispatcherMetrics(metrics_have_changed=False)))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/prometheus_client/registry.py", line 40, in register
    names = self._get_names(collector)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/prometheus_client/registry.py", line 80, in _get_names
    for metric in desc_func():
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/analytics/subsystem_metrics.py", line 440, in collect
    entry = host_metrics.get(metric.field)
AttributeError: 'NoneType' object has no attribute 'get'
``` 
user: Tfinn92
issue_14903: state: open
title: Support diff mode in awx.awx.* modules
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

During the playbook development process, we heavily use the `--check` and `--diff` modes to verify what will be changed on the controller before applying the configuration. However, as the `awx.awx.*` modules do not yet support the diff mode, the playbook output is not helpful during a dry run.

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

n/a

### Current results

n/a

### Sugested feature result

show diff output

### Additional information

We use `infra.controller_configuration` collection to configure all AWX resources (GitOps). Therefore, a dry run with proper diff output would be very helpful in detecting issues that may potentially destroy the entire AWX instance.
user: keilr
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14896: state: open
title: Integrate resources API in Controller
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
Integrate resources API from django-ansible-base.
<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```

```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: jessicamack
labels: dependencies: Pull requests that update a dependency file
issue_14895: state: open
title: Could not find or access '/tmp/DISABLE-SHA1.pmod' on the Ansible Controller
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Hi

I try to copy file from my awx adhoc command job (from inventory)  but can not

src=/tmp/DISABLE-SHA1.pmod dest=/usr/share/crypto-policies/policies/modules/DISABLE-CBC.pmod owner=root group=root mode=644

I coped file locally in /tmp on awx-ee but job failed :

An exception occurred during task execution. To see the full traceback, use -vvv. The error was: If you are using a module and expect the file to exist on the remote, see the remote_src option
vmdedrfes03 | FAILED! => {
    "changed": false,
    "msg": "Could not find or access '/tmp/DISABLE-CBC.pmod' on the Ansible Controller.\nIf you are using a module and expect the file to exist on the remote, see the remote_src option"
}

### AWX version

23.6.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.12.5

### Operating system

Red Hat 

### Web browser

Chrome

### Steps to reproduce

copy file on awx-ee first under /tmp

execute adhoc command via copy module (from awx inventory ) to copy file on each managed node



### Expected results

file be copied

### Actual results

expect the file to exist on the remote, see the remote_src option
vmdedrfes03 | FAILED! => {
    "changed": false,
    "msg": "Could not find or access '/tmp/DISABLE-CBC.pmod' on the Ansible Controller.\nIf you are using a module and expect the file to exist on the remote, see the remote_src option"
}

### Additional information

_No response_
user: birb57
issue_14890: state: open
title: awx-ee Error opening log stream for pod Failed to load  proxyconnect tcp: proxy error from 127.0.0.1:6443
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Hi. I have this message error form awx-ee.  Is possible try using some setting set proxy  in deploy awx? Where information deploy EE proxy vars?.

Failed to load logs: Get "https://node_ip:10250/containerLogs/awx-founos/awx-founos-task-679cf5fd5d-6bh9g/awx-founos-ee?tailLines=502&timestamps=true": proxyconnect tcp: proxy error from 127.0.0.1:6443 while dialing proxy.prd.prod:8080, code 502: 502 Bad Gateway

ERROR 2024/02/16 16:21:11 Error opening log stream for pod awx-founos/automation-job-201043-mcmnm. Error: Get "[https://node_ip:10250/containerLogs/awx-founos/automation-job-201043-mcmnm/worker?follow=true&sinceTime=0001-01-01T00%!A(MISSING)00%!A(MISSING)00Z&timestamps=true":](https://node_ip:10250/containerLogs/awx-founos/automation-job-201043-mcmnm/worker?follow=true&sinceTime=0001-01-01T00%!A(MISSING)00%!A(MISSING)00Z&timestamps=true%22:) proxyconnect tcp: proxy error from 127.0.0.1:6443 while dialing proxy.prd.prod:8080, code 502: 502 Bad Gateway

Regards

### AWX version

23.6.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Launch Job template - Same issue all launch job.

### Expected results

Pass all run job template

### Actual results

Failed to JSON parse a line from worker stream. Error: Expecting value: line 1 column 1 (char 0) Line with invalid JSON data: b''
Receptor detail:
Error opening log stream for pod awx-founos/automation-job-201011-x2zrm. Error: Get "https://node_ip:10250/containerLogs/awx-founos/automation-job-201011-x2zrm/worker?follow=true&sinceTime=0001-01-01T00%3A00%3A00Z&timestamps=true": proxyconnect tcp: proxy error from 127.0.0.1:6443 while dialing proxy.prd.prod:8080, code 502: 502 Bad Gateway

### Additional information

_No response_
user: pablodorao
issue_14889: state: open
title: K8S json parse error
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

![image](https://github.com/ansible/awx/assets/63640985/69966a40-709d-4f6b-9985-76f89f053524)
Error started to happen around 3 days ago, i tested it on:
AWX 23.7.0 & 23.8.0 & 23.8.1
  ee_extra_env: |
    - name: RECEPTOR_KUBE_SUPPORT_RECONNECT
      value: disabled
  Also doesn't help.
  Based on other similar bug reports i also tested watchers limit and max file limit.
  Problem happen only on k8s hosts, after adding receptor_kube_support_reconnect on disabled - job finish sucessfully, but error on web still persist.
  Based on some comment i also tested out awx-ee in most available versions, unfortunately without success.
  Automation_job pod logs are large, that might be a problem so next step i tried out was to increase container-log-max-size but it also didn't helped.
Verbosity level on job also dosen't change anything.
  

### AWX version

AWX 23.7.0 & 23.8.0 & 23.8.1 (tried on all 3)

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

on host ansible 2.9.6

### Operating system

Debian

### Web browser

Firefox, Chrome, Safari, Edge

### Steps to reproduce

Run playbook on some large k8s cluster(i tried out 3 different k8s clusters)

### Expected results

Job finished sucessfully also in web ui.

### Actual results

Job finish but error on web persist - like on screen above.

### Additional information

_No response_
user: marianskrzypekk
issue_14883: state: open
title: Adding public key via playbook only succeeds, when the path is set - even if its the default in the userprofile/ Root/.ssh/authorized_keys
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

My playbook gets marked as successfully executed, but there are no entrys in any authorized_keys files.
After trying to set a custom path where the content of the public key gets added  the playbook did add the line in the custom path.
Then i tried my (default?) path at /root/.ssh/authorized_keys and the key got added there too.
I got requested to report the bug from the Ansible forum:
https://forum.ansible.com/t/default-code-to-add-public-ssh-key-fails/3702/34

### AWX version

AWX 23.6.0 

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

Ubuntu server 22

### Web browser

_No response_

### Steps to reproduce

`---
- name: Set authorized keys
  hosts: all
  gather_facts: false
  vars:
    key_url: "https://raw.githubusercontent.com/gsg-git/awx_pub/main/awxtestpub"
    key_content: "{{ lookup('url', key_url, split_lines=false) }}"
    conversion_cmd: 'ssh-keygen -i -m RFC4716 -f /dev/stdin <<<"{{ key_content }}"'
    new_key_content: "{{ lookup('pipe', conversion_cmd) }}"
  
  tasks:
    - name: Set authorized keys taken from url
      ansible.posix.authorized_key:
        user: root
        state: present
        key: "{{ new_key_content }}"
`
Here i have to add at the end:
`path: /root/.ssh/authorized_keys`

### Expected results

Adding the ssh key at the default location without further config

### Actual results

i have to add the path even the default ones.

### Additional information

Links for the successfull job log:
https://github.com/gsg-git/awx_pub/blob/main/job_237.txt
link for the false positive log where nothing gets entered:
https://github.com/gsg-git/awx_pub/blob/main/job_263-falsepositive.txt
user: gsg-git
issue_14877: state: open
title: Make an option to hide templates from templates view that aren't meant to be an entry point or aren't meant to be executed independently outside of the workflow
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Right now, when you open templates view, you can see all templates that are accessible to you. However sometimes a template is not meant to be an "entry point", instead it is a part of some workflow and isn't meant to be launched standalone.

I think it would make it easier to navigate templates if it was possible to hide the templates that are explicitly marked as "non-entry" templates.

When you have a workflow that is really complex, for example containing 100 individual steps that comprise of different templates, then you want to launch that workflow, you open the template view and you have to filter the name of the actual workflow out of the templates that only take part of it and on its own aren't supposed to be launched individually.

I am not talking about restrictions that prevent people from running those individual templates, that can be already done via permissions, I am just talking about cosmetic improvement that makes the navigation through the templates view easier. For large instalations that contain thousands of templates it's already very hard to navigate it, given that there is no hierarchy (directory) support.

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Make 100 templates called workflow_N (where N {0 .. 99}), then put them inside of workflow called "workflow"

### Current results

When you open templates view, you will see all 101 items, searching for the actual entry point (workflow) is going to be non-trivial.

### Sugested feature result

There would be a filter (enabled by default) where non-entry point templates would be filtered out, so only the entry-point workflow would be visible by default, making it easy to find the template

### Additional information

_No response_
user: benapetr
issue_14870: state: open
title: Jobs are killed after 4 hours
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

It seems that this bug is back - https://github.com/ansible/awx/issues/11805

Every job that runs longer than 4 hours gets killed by AWX exactly when 4 hours "limit" is reached

### AWX version

23.7.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

Oracle Linux

### Web browser

_No response_

### Steps to reproduce

Start a job that runs longer than 4 hours, it gets killed

### Expected results

Jobs don't get killed

### Actual results

Job gets killed

### Additional information

_No response_
user: benapetr
issue_14868: state: open
title: Constructed Inventory does not get passed extra vars - AWX
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

_No response_

### AWX version

Ansible AWX 23.5.2

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.15.9

### Operating system

Ubuntu

### Web browser

_No response_

### Steps to reproduce

Ansible AWX - constructed inventory doesn't get the extra_vars / survey variables passed to it... 

Create "constructed inventory"

![Screenshot 2024-02-13 at 12 32 42 pm](https://github.com/ansible/awx/assets/144011572/9e0aad4c-863a-4fad-941c-c05c40214fc6)

Set source vars for constructed inventory: 

![Screenshot 2024-02-13 at 12 44 04 pm](https://github.com/ansible/awx/assets/144011572/973af630-a704-4d38-9d28-8f9edd821672)

Run Job / Workflow Job  (tested both) - with extra_vars or survey vars:

![Screenshot 2024-02-13 at 12 47 15 pm](https://github.com/ansible/awx/assets/144011572/87739a67-ad29-48bc-866f-6a3eb18a79ed)


[WARNING]:  * Failed to parse /runner/inventory/constructed.yml with auto
plugin: failed to parse /runner/inventory/constructed.yml: Could not set
play_customer for host HOST123: 'play_customer' is undefined. 'play_customer' is undefined
. Could not set play_customer for host HOST234: 'play_customer' is undefined.
'play_customer' is undefined




On Ansible CLI (outside AWX) - it works perfectly. 

`ansible-playbook -i ./dynamic-mysql.yml -i ./constructed.yml playbooks/setup.yml -e "play_customer='Ferrari'" -l target`


### Expected results

play_customer variable being interpolated in constructed inventory


### Actual results

[WARNING]:  * Failed to parse /runner/inventory/constructed.yml with auto
plugin: failed to parse /runner/inventory/constructed.yml: Could not set
play_customer for host HOST123: 'play_customer' is undefined. 'play_customer' is undefined
. Could not set play_customer for host HOST234: 'play_customer' is undefined.
'play_customer' is undefined

### Additional information

I've done lot of testing and confirmed that the 'Control Plane' execution environment that runs the inventory source job for the constructed inventory, does not have the extra vars 

All the other jobs in the workflow - do have the extra vars


user: j-oss2023
labels: needs_investigation: PRs or issues that need further investigation
issue_14863: state: open
title: GCP Dynamic inventory folders
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Using the folders variable to the inventory plugin does not work.

### AWX version

23.7.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

core 2.15.9 (AWX EE Latest)

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Create a gcp inventory source. Set source variables to
---
```
folders: 
  - folderID
hostnames:
  - name
compose:
  ansible_host: networkInterfaces[0].networkIP
```

### Expected results

All machines from projects in folder added to inventory.

### Actual results

```
ansible-inventory [core 2.15.9]
  config file = None
  configured module search path = ['/runner/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.9/site-packages/ansible
  ansible collection location = /runner/.ansible/collections:/usr/share/ansible/collections:/usr/share/automation-controller/collections
  executable location = /usr/local/bin/ansible-inventory
  python version = 3.9.18 (main, Jan  4 2024, 00:00:00) [GCC 11.4.1 20231218 (Red Hat 11.4.1-3)] (/usr/bin/python3)
  jinja version = 3.1.3
  libyaml = True
No config file found; using defaults
setting up inventory plugins
Loading collection ansible.builtin from 
redirecting (type: inventory) ansible.builtin.gcp_compute to google.cloud.gcp_compute
Loading collection google.cloud from /usr/share/ansible/collections/ansible_collections/google/cloud
Using inventory plugin 'ansible_collections.google.cloud.plugins.inventory.gcp_compute' to process inventory source '/runner/inventory/gcp_compute.yml'
[WARNING]:  * Failed to parse /runner/inventory/gcp_compute.yml with auto
plugin: 'auth_kind'
  File "/usr/local/lib/python3.9/site-packages/ansible/inventory/manager.py", line 293, in parse_source
    plugin.parse(self._inventory, self._loader, source, cache=cache)
  File "/usr/local/lib/python3.9/site-packages/ansible/plugins/inventory/auto.py", line 59, in parse
    plugin.parse(inventory, loader, path, cache=cache)
  File "/usr/share/ansible/collections/ansible_collections/google/cloud/plugins/inventory/gcp_compute.py", line 608, in parse
    projects = projects + self.projects_for_folder(config_data, folder)
  File "/usr/share/ansible/collections/ansible_collections/google/cloud/plugins/inventory/gcp_compute.py", line 531, in projects_for_folder
    projects_response = self.fetch_projects(config_data, link, query)
  File "/usr/share/ansible/collections/ansible_collections/google/cloud/plugins/inventory/gcp_compute.py", line 523, in fetch_projects
    response = auth.get(link, params={"filter": query})
  File "/usr/share/ansible/collections/ansible_collections/google/cloud/plugins/module_utils/gcp_utils.py", line 85, in get
    return self.full_get(url, **kwargs)
  File "/usr/share/ansible/collections/ansible_collections/google/cloud/plugins/module_utils/gcp_utils.py", line 150, in full_get
    return self.session().get(url, params=params, **kwargs)
  File "/usr/share/ansible/collections/ansible_collections/google/cloud/plugins/module_utils/gcp_utils.py", line 194, in session
    self._credentials())
  File "/usr/share/ansible/collections/ansible_collections/google/cloud/plugins/module_utils/gcp_utils.py", line 220, in _credentials
    cred_type = self.module.params['auth_kind']
[WARNING]: Unable to parse /runner/inventory/gcp_compute.yml as an inventory
source
ERROR! No inventory was parsed, please check your configuration and options.
```

### Additional information

Using the same config but filtering on projects works.
```
projects: 
  - projectID
hostnames:
  - name
compose:
  ansible_host: networkInterfaces[0].networkIP
```

Using the same config from local machine with ansible and the same service account works.
```
plugin: google.cloud.gcp_compute
folders:
  - folderID 
service_account_file: credentials.json
auth_kind: serviceaccount
hostnames:
  - name
compose:
  ansible_host: networkInterfaces[0].networkIP
```

`ansible-inventory --graph -i gcp.yml`

Can it be that some GCP variable is set in the background that impacts this?
user: per-lind
issue_14860: state: open
title: AWX Surveys do not support dictionary variables
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Variable dictionaries are supported in the Template variables and can be passed just fine as follows:
```
---
inputs:
  region_code: uk
  client_code: some_code
  app_version: 1.1-beta-997

```

However, if a survey is created with variable name `inputs.region_code` as follows:
![image](https://github.com/ansible/awx/assets/102537335/3a9e6bd4-b5dd-4bdd-a5aa-09dbc81f00c0)

Then AWX complains that the field is blank despite specifying values:
![image](https://github.com/ansible/awx/assets/102537335/a243bfe6-d71b-4040-b567-af62f530c7e0)

Given that Ansible supports nested variable dictionaries, and such variables can be passed from commandline or in Template definitions, the Survey should also support it so that existing Playbooks can be used rather than requiring them to be refactored to work with Surveys.

### AWX version

23.7.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Firefox, Chrome, Safari, Edge

### Steps to reproduce

Try to override a nested variable from a Survey

### Expected results

Values provided in Survey should be accepted and passed to the Playbook

### Actual results

UI complains that the field is empty/missing

### Additional information

_No response_
user: ksharma-qc
issue_14857: state: open
title: Support for auditors in SAML (Social) Organization Map
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
Adds support for Auditors in SAML (Social) Organization Map field. Based on code at:
- https://github.com/ansible/awx/blob/694d7e98e77c7bd11e57ead6f2ddee43aa34a87c/awx/sso/saml_pipeline.py#L86
- https://github.com/ansible/awx/blob/694d7e98e77c7bd11e57ead6f2ddee43aa34a87c/awx/sso/saml_pipeline.py#L120
the `auditors` and `remove_auditors` are valid attributes for SAML Organization Map (`SOCIAL_AUTH_SAML_ORGANIZATION_MAP`).

I've also updated one of the tests to reflect this change, but unsure if others will need similar changes.

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API
 - Other

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 23.7.1.dev79+gb3aeb962ce
```

##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

1. Configure SAML SSO (adjust attributes and values in (2) and (3) accordingly)
2. In SAML Organization Attribute Mapping set as following:
```json
{
  "saml_attr": "member-of",
  "saml_admin_attr": "admin-of",
  "saml_auditor_attr": "auditor-of",
  "remove": true,
  "remove_admins": false,
  "remove_auditors": false
}
```
3. In SAML Organization Map set as following:
```json
{
  "org1_group_from_saml": {
    "users": true,
    "admins": true,
    "auditors": true,
    "organization_alias": "org1"  
  }
}
```
4. Saving the form results in `Invalid field` error. Removing the `"auditors": true` allows for saving.

<img width="408" alt="image" src="https://github.com/ansible/awx/assets/243891/1be744b7-3f57-4eb9-bb2b-4b7bc1f5e24d">


user: egmar
issue_14853: state: open
title: when running a template via job_launch some facts are undefined
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Hi

when running a template via job_launch (ansible awx module)  some facts gathered at begining are undefined&empty

Thanks for your help

### AWX version

23.6.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.12.5

### Operating system

Red Hat 

### Web browser

Chrome

### Steps to reproduce

create a playbook to run awx module

    - name: Launch a job template with extra_vars on remote controller instance
      delegate_to: localhost
      awx.awx.job_launch:
        job_template: "Ansible RH Upgrade"
        inventory: "00 satellite_inventory_noprod"
        extra_vars:
          hosts_var: "{{ inventory_hostname }}"
          #cs_release: "{{ ansible_distribution_version }}"
        instance_groups: "Mouche"
      register: job



### Expected results

successfull

### Actual results

failed with variable i snot defined message

TASK [debug] *******************************************************************
ok: [vmsb86rhel308] => {
    "guest_name": "vmsb86rhel308"
}
Wednesday 07 February 2024  15:01:46 +0000 (0:00:00.105)       0:00:01.032 **** 
Wednesday 07 February 2024  15:01:46 +0000 (0:00:00.106)       0:00:01.029 **** 
TASK [debug] *******************************************************************
ok: [vmsb86rhel308] => {
    "cs_release": "VARIABLE IS NOT DEFINED!"              <<<<<<<<<<<<<<<<<-------------------------------------
}
Wednesday 07 February 2024  15:01:46 +0000 (0:00:00.100)       0:00:01.132 **** 
Wednesday 07 February 2024  15:01:46 +0000 (0:00:00.098)       0:00:01.128 **** 
TASK [debug] *******************************************************************
ok: [vmsb86rhel308] => {
    "cs_domain": "bat"
}
Wednesday 07 February 2024  15:01:46 +0000 (0:00:00.097)       0:00:01.230 **** 
Wednesday 07 February 2024  15:01:46 +0000 (0:00:00.097)       0:00:01.226 **** 
TASK [debug] *******************************************************************
ok: [vmsb86rhel308] => {
    "cs_major_release": "8"

### Additional information

_No response_
user: birb57
issue_14852: state: open
title: Fix formsubmiterror not showing
body: ##### SUMMARY
This fixes an issue where form submit error does not show on 400 PUT method result.

Related #12253 

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - UI

![image](https://github.com/ansible/awx/assets/15192260/bb91a673-c7a3-4d73-a196-fa6d611cee0c)

user: dmzoneill
issue_14851: state: open
title: AWX UI goes unresponsive post reboot
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

We have provisioned one controller node and two execution nodes, one node status keeps switching between ready and unavailable and gives an error message "Another cluster node has determined this instance to be unresponsive " and after this issue when i reboots my controller node, AWX UI is not accessible and provides message your connection is not private.

### AWX version

23.6.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.14.9

### Operating system

Red Hat Enterprise Linux release 8.9 (Ootpa)

### Web browser

Chrome, Edge

### Steps to reproduce

We have provisioned one controller node and two execution nodes, one node status keeps switching between ready and unavailable and gives an error message "Another cluster node has determined this instance to be unresponsive " and after this issue when i reboots my controller node, AWX UI is not accessible and provides message your connection is not private.

### Expected results

it should be working

### Actual results

AWX UI is not accessible and provides message your connection is not private.

### Additional information

_No response_
user: muskanmittal015
issue_14849: state: open
title: [BUG?] ERROR: work type did not expect a signature when running health check in AWX with work-kubernetes in Receptor
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When using the `work-kubernetes` type as described in [the documentation](https://ansible.readthedocs.io/projects/receptor/en/latest/user_guide/k8s.html), we get the following error when checking the health of the node from AWX.
```
ERROR 2024/02/07 00:40:42 : work type did not expect a signature
```

![image](https://github.com/ansible/receptor/assets/56408488/9a15cdb1-16c4-42ee-b6b3-441d5ac67dd2)

Does AWX not support the `work-kubernetes` type yet and the health check is not reporting a readable error for this? The error is quite vague and I'm not sure what the issue is. 

Our goal here is to run Receptor in a Kubernetes cluster so we can host execution and/or hop nodes in Kubernetes. I'm not certain whether this is an issue in AWX or in Receptor.

### AWX version

23.7.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

Ubuntu 22.04

### Web browser

_No response_

### Steps to reproduce

The following receptor config is used:

<details><summary> receptor.conf </summary>

```yaml

---
- node:
    id: 192.168.21.54
 
- work-verification:
    publickey: /etc/receptor/work_public_key.pem
 
- log-level: debug
 
- control-service:
    service: control
    filename: /tmp/receptor.sock
    permissions: 0660
    tls: tls_server
- tls-server:
    name: tls_server
    cert: /etc/receptor/tls/receptor.crt
    key: /etc/receptor/tls/receptor.key
    clientcas: /etc/receptor/tls/ca/mesh-CA.crt
    requireclientcert: true
    mintls13: False
 
- tls-client:
    name: tls_client
    cert: /etc/receptor/tls/receptor.crt
    key: /etc/receptor/tls/receptor.key
    rootcas: /etc/receptor/tls/ca/mesh-CA.crt
    insecureskipverify: false
    mintls13: False
- tcp-listener:
    port: 27199
    tls: tls_server
 
- work-kubernetes:
    worktype: kubeit
    authmethod: kubeconfig
    allowruntimeauth: true
    allowruntimepod: true
    allowruntimeparams: true
    verifysignature: true

```
</details>

After starting Receptor and checking the health of the instance, I get the error.

### Expected results

AWX should succeed the health check and use Receptor to run workloads on the Kubernetes cluster with the `kubeit` worktype. 

If this is not a supported usecase yet, I would expect a clearer error message. This error message seems quite arbitrary to me and confused us for days.

### Actual results

We get an error
```
ERROR 2024/02/07 00:40:42 : work type did not expect a signature
```

This does not seem relevant to what we are trying to achieve. I looked through the code to see what causes this and it seems to be related to the health check not using the correct work type (more information later).

### Additional information


It seems this error occurs due to the workType being given as `ansible-runner` instead of `kubeit`. I'm not too familiar with the code at work here, but I added some debug statements in Receptor.

```go
func (c *workceptorCommand) processSignature(workType, signature string, connIsUnix, signWork bool) error {
	shouldVerifySignature := c.w.ShouldVerifySignature(workType, signWork)
	fmt.Print("shouldVerifySignature: ", shouldVerifySignature)
	fmt.Print("workType: ", workType)
	fmt.Print("connIsUnix: ", connIsUnix)

	if !shouldVerifySignature && signature != "" {
		return fmt.Errorf("work type did not expect a signature")
	}
	if shouldVerifySignature && !connIsUnix {
		err := c.w.VerifySignature(signature)
		if err != nil {
			return err
		}
	}

	return nil
```
```
shouldVerifySignature: false
workType: ansible-runner
connIsUnix: false

```

And in ShouldVerifySignature
```go
func (w *Workceptor) ShouldVerifySignature(workType string, signWork bool) bool {
	// if work unit is remote, just get the signWork boolean from the
	// remote extra data field
	if workType == "remote" {
		return signWork
	}
	w.workTypesLock.RLock()
	fmt.Print("w: ", w, " workTypes: ", w.workTypes, "\n")

	wt, ok := w.workTypes[workType]
	w.workTypesLock.RUnlock()
	fmt.Print("w: ", w, " wt: ", wt, " ok: ", ok, "\n")

	if ok && wt.verifySignature {
		return true
	}

	return false
}
```
```
workTypes: map[kubeit:0xc000379e80 remote:0xc000379620]
w: &{0xc0002adb30 0x495fe0 0xc0001ef880 /tmp/receptor/192.168.21.54 0xc0000a74d0 map[kubeit:0xc000379e80 remote:0xc000379620] 0xc0000a74e8 map[]  5m0s /etc/receptor/work_public_key.pem}
wt: <nil>
ok: false

```

Am I correct here in that it seems like it thinks the only valid workTypes are `kubeit` and `remote` here but AWX is sending `ansible-runner` for the health check?

user: diademiemi
issue_14848: state: open
title: Add support on survey for object
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Hi team,

I have an idea for survey in AWX. Apart dynamic form, i notice that we can assign to Question a variable like `key.sub_key` and during launch of job this variable is correctly papped in yaml like:
```yaml
key:
  sub_key: 1
```
But, if we not have "prompt on launch" in extra_vars, this type of variable is ignored and not passed to job.

If we set "prompt on launch" in extra_vars, the variable is passed to job two times, one in dot version and one in yml version, like:

```yaml
key.sub_key: 1
key:
  sub_key: 1
```

Probably is not a "standard" use case, or os better map object in playbook itself, but this can be usefull in certain use case.


### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Create a survey with variable with dot

### Current results

If we set "prompt on launch" in extra_vars, the variable is passed to job two times, one in dot versione and one in yml version, like:
if we not have "prompt on launch" in extra_vars, this type of variable is ignored and not passed to job.

### Sugested feature result

dot variable passed as a object, and not ignored if extra_vars is not prompted.

If extra_vars is prompted, ignore dot version and use object

### Additional information

_No response_
user: tanganellilore
issue_14846: state: open
title: Error LDAP Organization Map admins filter
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

I have tried using the LDAP Organization Map to set a group child-group members as admin but i have the error below.

`Invalid DN:
memberof:1.2.840.113556.1.4.1941:=cn=engineering_admins,ou=groups,dc=example,dc=com`

So  LDAP Organization Map doesn't work when I use a more complex filter to search nested groups

My LDAP Organization Map configuration:
```
{
  "engineering": {
    "users": true,
    "admins": "memberof:1.2.840.113556.1.4.1941:=cn=engineering_admins,ou=groups,dc=example,dc=com",
    "remove_users": true,
    "remove_admins": true
  }
}
```

### AWX version

22.4.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Settings > LDAP settings > LDAP Organization Map
```
{
  "engineering": {
    "users": true,
    "admins": "memberof:1.2.840.113556.1.4.1941:=cn=engineering_admins,ou=groups,dc=example,dc=com",
    "remove_users": true,
    "remove_admins": true
  }
}
```

### Expected results

Memebers and sub members of the group **cn=engineering_admins,ou=groups,dc=example,dc=com** should be admin of the organization

### Actual results

`Invalid DN:
memberof:1.2.840.113556.1.4.1941:=cn=engineering_admins,ou=groups,dc=example,dc=com`

### Additional information

_No response_
user: Workasis
issue_14844: state: open
title: Webhook_credential field validation updates #14843
body: ##### SUMMARY
Allow webhook_credential in ansible.controller.job_template to accept empty value and remove s=any existing selections in that field.

related #14843 

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - Collection

user: kk-at-redhat
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14843: state: open
title: Unable to specify empty value for webhook_credential (ansible.controller.job_template)
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

There is no way to specify empty webhook_credential for idempotency or to remove credential selection in that field. It should be accepting empty value and in this case also removing any credentials currently selected.

### AWX version

23.2.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.14.2

### Operating system

Red Hat Enterprise Linux release 9.1 (Plow)

### Web browser

Chrome

### Steps to reproduce

```
  tasks:
    - ansible.controller.export:
        job_templates: 'all'
      register: aap_templates

    - debug:
        var: aap_templates.assets.job_templates[0].webhook_credential

    - ansible.controller.job_template:
        name: "{{ aap_templates.assets.job_templates[0].name }}"
        webhook_credential: "{{ aap_templates.assets.job_templates[0].webhook_credential }}"
      ignore_errors: true

    - ansible.controller.job_template:
        name: "{{ aap_templates.assets.job_templates[0].name }}"
        webhook_credential: ""
      ignore_errors: true

    - ansible.controller.job_template:
        name: "{{ aap_templates.assets.job_templates[0].name }}"
        webhook_credential: {}
      ignore_errors: true

    - ansible.controller.job_template:
        name: "{{ aap_templates.assets.job_templates[0].name }}"
        webhook_credential: None
      ignore_errors: true
```

### Expected results

```
TASK [ansible.controller.job_template] *********************************************************************************************************************
ok: [localhost]
```

### Actual results

```
TASK [ansible.controller.export] ***************************************************************************************************************************
ok: [localhost]

TASK [debug] ***********************************************************************************************************************************************
ok: [localhost] => {
    "aap_templates.assets.job_templates[0].webhook_credential": ""
}

TASK [ansible.controller.job_template] *********************************************************************************************************************
[WARNING]: You are running collection version 4.5.0 but connecting to Red Hat Ansible Automation Platform version 4.3.4
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Request to /api/v2/credentials/ returned 20 items, expected 1", "query": null, "response": {"json": {"count": 20, "next": null, "previous": null, "results": [{"cloud": false, "created": "2024-01-02T22:07:12.298153Z", "credential_type": 1, "description": "", "id": 31, "inputs": {"become_method": "", "become_username": "", "password": "$encrypted$", "username": "ccc"}, "kind": "ssh", "kubernetes": false, "managed": false, "modified": "2024-01-02T22:07:12.298168Z", "name": "AAA", "organization": null, "related": {"access_list": "/api/v2/credentials/31/access_list/", "activity_stream": "/api/v2/credentials/31/activity_stream/", "copy": "/api/v2/credentials/31/copy/", "created_by": "/api/v2/users/1/", "credential_type": "/api/v2/credential_types/1/", "input_sources": "/api/v2/credentials/31/input_sources/", "modified_by": "/api/v2/users/1/", "object_roles": "/api/v2/credentials/31/object_roles/", "owner_teams": "/api/v2/credentials/31/owner_teams/", "owner_users": "/api/v2/credentials/31/owner_users/", "user": "/api/v2/users/1/"}, "summary_fields": {"created_by": {"first_name": "", "id": 1, "last_name": "", "username": "admin"}, "credential_type": {"description": "", "id": 1, "name": "Machine"}, "modified_by": {"first_name": "", "id": 1, "last_name": "", "username": "admin"}, "object_roles": {"admin_role": {"description": "Can manage all aspects of the credential", "id": 185, "name": "Admin"}, "read_role": {"description": "May view settings for the credential", "id": 187, "name": "Read"}, "use_role": {"description": "Can use the credential in a job template", "id": 186, "name": "Use"}}, "owners": [{"description": " ", "id": 1, "name": "admin", "type": "user", "url": "/api/v2/users/1/"}], "user_capabilities": {"copy": true, "delete": true, "edit": true, "use": true}}, "type": "credential", "url": "/api/v2/credentials/31/"}, {"cloud": false, "created": "2023-02-08T05:32:26.706064Z", "credential_type": 18, "description": "", "id": 2, "inputs": {"url": "https://galaxy.ansible.com/"}, "kind": "galaxy_api_token", "kubernetes": false, "managed": true, "modified": "2023-02-08T05:32:26.706075Z", "name": "Ansible Galaxy", "organization": null, "related": {"access_list": "/api/v2/credentials/2/access_list/", "activity_stream": "/api/v2/credentials/2/activity_stream/", "copy": "/api/v2/credentials/2/copy/", "created_by": "/api/v2/users/1/", "credential_type": "/api/v2/credential_types/18/", "input_sources": "/api/v2/credentials/2/input_sources/", "modified_by": "/api/v2/users/1/", "object_roles": "/api/v2/credentials/2/object_roles/", "owner_teams": "/api/v2/credentials/2/owner_teams/", "owner_users": "/api/v2/credentials/2/owner_users/"}, "summary_fields": {"created_by": {"first_name": "", "id": 1, "last_name": "", "username": "admin"}, "credential_type": {"description": "", "id": 18, "name": "Ansible Galaxy/Automation Hub API Token"}, "modified_by": {"first_name": "", "id": 1, "last_name": "", "username": "admin"}, "object_roles": {"admin_role": {"description": "Can manage all aspects of the credential", "id": 23, "name": "Admin"}, "read_role": {"description": "May view settings for the credential", "id": 25, "name": "Read"}, "use_role": {"description": "Can use the credential in a job template", "id": 24, "name": "Use"}}, "owners": [], "user_capabilities": {"copy": true, "delete": false, "edit": false, "use": true}}, "type": "credential", "url": "/api/v2/credentials/2/"}, "...more results snipped..."]}, "status_code": 200}, "total_results": 20}
...ignoring

TASK [ansible.controller.job_template] *********************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Request to /api/v2/credentials/ returned 20 items, expected 1", "query": null, "response": {"json": {"count": 20, "next": null, "previous": null, "results": [{"cloud": false, "created": "2024-01-02T22:07:12.298153Z", "credential_type": 1, "description": "", "id": 31, "inputs": {"become_method": "", "become_username": "", "password": "$encrypted$", "username": "ccc"}, "kind": "ssh", "kubernetes": false, "managed": false, "modified": "2024-01-02T22:07:12.298168Z", "name": "AAA", "organization": null, "related": {"access_list": "/api/v2/credentials/31/access_list/", "activity_stream": "/api/v2/credentials/31/activity_stream/", "copy": "/api/v2/credentials/31/copy/", "created_by": "/api/v2/users/1/", "credential_type": "/api/v2/credential_types/1/", "input_sources": "/api/v2/credentials/31/input_sources/", "modified_by": "/api/v2/users/1/", "object_roles": "/api/v2/credentials/31/object_roles/", "owner_teams": "/api/v2/credentials/31/owner_teams/", "owner_users": "/api/v2/credentials/31/owner_users/", "user": "/api/v2/users/1/"}, "summary_fields": {"created_by": {"first_name": "", "id": 1, "last_name": "", "username": "admin"}, "credential_type": {"description": "", "id": 1, "name": "Machine"}, "modified_by": {"first_name": "", "id": 1, "last_name": "", "username": "admin"}, "object_roles": {"admin_role": {"description": "Can manage all aspects of the credential", "id": 185, "name": "Admin"}, "read_role": {"description": "May view settings for the credential", "id": 187, "name": "Read"}, "use_role": {"description": "Can use the credential in a job template", "id": 186, "name": "Use"}}, "owners": [{"description": " ", "id": 1, "name": "admin", "type": "user", "url": "/api/v2/users/1/"}], "user_capabilities": {"copy": true, "delete": true, "edit": true, "use": true}}, "type": "credential", "url": "/api/v2/credentials/31/"}, {"cloud": false, "created": "2023-02-08T05:32:26.706064Z", "credential_type": 18, "description": "", "id": 2, "inputs": {"url": "https://galaxy.ansible.com/"}, "kind": "galaxy_api_token", "kubernetes": false, "managed": true, "modified": "2023-02-08T05:32:26.706075Z", "name": "Ansible Galaxy", "organization": null, "related": {"access_list": "/api/v2/credentials/2/access_list/", "activity_stream": "/api/v2/credentials/2/activity_stream/", "copy": "/api/v2/credentials/2/copy/", "created_by": "/api/v2/users/1/", "credential_type": "/api/v2/credential_types/18/", "input_sources": "/api/v2/credentials/2/input_sources/", "modified_by": "/api/v2/users/1/", "object_roles": "/api/v2/credentials/2/object_roles/", "owner_teams": "/api/v2/credentials/2/owner_teams/", "owner_users": "/api/v2/credentials/2/owner_users/"}, "summary_fields": {"created_by": {"first_name": "", "id": 1, "last_name": "", "username": "admin"}, "credential_type": {"description": "", "id": 18, "name": "Ansible Galaxy/Automation Hub API Token"}, "modified_by": {"first_name": "", "id": 1, "last_name": "", "username": "admin"}, "object_roles": {"admin_role": {"description": "Can manage all aspects of the credential", "id": 23, "name": "Admin"}, "read_role": {"description": "May view settings for the credential", "id": 25, "name": "Read"}, "use_role": {"description": "Can use the credential in a job template", "id": 24, "name": "Use"}}, "owners": [], "user_capabilities": {"copy": true, "delete": false, "edit": false, "use": true}}, "type": "credential", "url": "/api/v2/credentials/2/"}, "...more results snipped..."]}, "status_code": 200}, "total_results": 20}
...ignoring

TASK [ansible.controller.job_template] *********************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Request to /api/v2/credentials/?name=%7B%7D returned 0 items, expected 1", "query": {"name": "{}"}, "response": {"json": {"count": 0, "next": null, "previous": null, "results": []}, "status_code": 200}, "total_results": 0}
...ignoring

TASK [ansible.controller.job_template] *********************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Request to /api/v2/credentials/?name=None returned 0 items, expected 1", "query": {"name": "None"}, "response": {"json": {"count": 0, "next": null, "previous": null, "results": []}, "status_code": 200}, "total_results": 0}
...ignoring
```

### Additional information

_No response_
user: kk-at-redhat
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14842: state: open
title: extra_vars expects dictionary but applies as yaml (ansible.controller.job_template)
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

There is no way to specify no extra variables (remove extra variables) for an existing template.

### AWX version

23.2.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.14.2

### Operating system

Red Hat Enterprise Linux release 9.1 (Plow)

### Web browser

Chrome

### Steps to reproduce

  tasks:
    - ansible.controller.export:
        job_templates: 'all'
      register: aap_templates

    - debug:
        var: aap_templates.assets.job_templates[0].extra_vars

    - ansible.controller.job_template:
        name: "{{ aap_templates.assets.job_templates[0].name }}"
        extra_vars: "{{ aap_templates.assets.job_templates[0].extra_vars }}"
      ignore_errors: true

    - debug:
        var: aap_templates.assets.job_templates[0].extra_vars | from_yaml

    - ansible.controller.job_template:
        name: "{{ aap_templates.assets.job_templates[0].name }}"
        extra_vars: "{{ aap_templates.assets.job_templates[0].extra_vars | from_yaml }}"
      ignore_errors: true

    - ansible.controller.job_template:
        name: "{{ aap_templates.assets.job_templates[0].name }}"
        extra_vars: {""}

    - ansible.controller.export:
        job_templates: 'all'
      register: aap_templates

    - debug:
        var: aap_templates.assets.job_templates[0].extra_vars

### Expected results

TASK [ansible.controller.job_template] *********************************************************************************************************************
ok: [localhost]

### Actual results

TASK [ansible.controller.export] ***************************************************************************************************************************
ok: [localhost]

TASK [debug] ***********************************************************************************************************************************************
ok: [localhost] => {
    "aap_templates.assets.job_templates[0].extra_vars": "---"
}

TASK [ansible.controller.job_template] *********************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "argument 'extra_vars' is of type <class 'str'> and we were unable to convert to dict: dictionary requested, could not parse JSON or key=value"}
...ignoring

TASK [debug] ***********************************************************************************************************************************************
ok: [localhost] => {
    "aap_templates.assets.job_templates[0].extra_vars | from_yaml": ""
}

TASK [ansible.controller.job_template] *********************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "argument 'extra_vars' is of type <class 'str'> and we were unable to convert to dict: dictionary requested, could not parse JSON or key=value"}
...ignoring

TASK [ansible.controller.job_template] *********************************************************************************************************************
[WARNING]: You are running collection version 4.5.0 but connecting to Red Hat Ansible Automation Platform version 4.3.4
changed: [localhost]

TASK [ansible.controller.export] ***************************************************************************************************************************
ok: [localhost]

TASK [debug] ***********************************************************************************************************************************************
ok: [localhost] => {
    "aap_templates.assets.job_templates[0].extra_vars": {}
}

### Additional information

_No response_
user: kk-at-redhat
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14841: state: open
title: Empty value in execution_environment should remove selections (ansible.controller.job_template)
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When a template has Execution Environment selected but playbook specifies execution_environment = "", the selection in the template should be removed.

### AWX version

23.2.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.14.2

### Operating system

Red Hat Enterprise Linux release 9.1 (Plow)

### Web browser

Chrome

### Steps to reproduce

    - name: Get all templates from AAP
      ansible.controller.export:
        job_templates: 'all'
      register: aap_templates

    - debug:
        var: aap_templates.assets.job_templates[0].execution_environment

    - set_fact:
        ee: ""

    - name: Create templates
      ansible.controller.job_template:
        name: "{{ aap_templates.assets.job_templates[0].name }}"
        execution_environment: "{{ ee }}"

### Expected results

TASK [Create templates] ************************************************************************************************************************************
changed: [localhost]

### Actual results

TASK [Get all templates from AAP] **************************************************************************************************************************
ok: [localhost]

TASK [debug] ***********************************************************************************************************************************************
ok: [localhost] => {
    "aap_templates.assets.job_templates[0].execution_environment": {
        "name": "Automation Hub Default execution environment",
        "type": "execution_environment"
    }
}

TASK [set_fact] ********************************************************************************************************************************************
ok: [localhost]

TASK [Create templates] ************************************************************************************************************************************
ok: [localhost]

### Additional information

_No response_
user: kk-at-redhat
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14840: state: open
title: Add terraform state inventory source
body: ##### SUMMARY
This adds a new terraform state inventory source, using the new [terraform_state inventory plugin](https://github.com/ansible-collections/cloud.terraform/blob/stable-statefile-inventory/plugins/inventory/terraform_state.py) from cloud.terraform. The plugin will parse a terraform state file and add host for AWS EC2, GCE, and Azure instances.

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - UI
 - Inventory source

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 23.7.1.dev3+g845101c497
```

##### ADDITIONAL INFORMATION
Depends on #14828 
user: hakbailey
issue_14838: state: open
title: Monthly issue metrics
body: ##### SUMMARY
This will create an issue monthly on statistics of issues for the month.
https://github.com/github/issue-metrics

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - Other

user: dmzoneill
issue_14837: state: open
title: Implement an option to choose a job type on relaunch (issue #14177)
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
This PR adds a feature for users to change the Job Type (run type) on relaunching the job.
<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API
 - UI

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
23.6.1.dev29+g02f77b54af
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->
Before this change, modifying the run type required creating a new job, which could be inconvenient, especially for jobs with numerous prompts. The aim is to improve the user experience by allowing users to choose the run type while relaunching the job.

I decided to use a dropdown instead of modal (modal was suggested in the issue).
By implementing a dropdown instead of a modal, we avoid potential negative impacts on the user experience. The dropdown was chosen as it is already used for failed jobs, providing a consistent interface.

I have tested this feature thoroughly on `job_list`, `job_detail`, and `job_output` screens.
<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```
user: Sasa993
issue_14831: state: open
title: Unable to upgrade AWX
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

I try to upgrade AWX from 21.13.0 to 23.7.0. I upgrade the operator and the AWX versions at the same time. Then my upgrade is stuck at migration process. If I try to run migrations manually from a task pod I get the following error:
```
bash-5.1$ awx-manage migrate                                                                                                                                                                                                                   
Operations to perform:                         
  Apply all migrations: auth, conf, contenttypes, main, oauth2_provider, sessions, sites, social_django, sso  
Running migrations:                        
  Applying conf.0010_change_to_JSONField...Traceback (most recent call last):                        
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 87, in _execute
    return self.cursor.execute(sql)                                                                                    
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/psycopg/cursor.py", line 723, in execute
    raise ex.with_traceback(None)                                                                                      
psycopg.errors.InvalidTextRepresentation: invalid input syntax for type json
DETAIL:  Token "https" is invalid.                                                                                     
CONTEXT:  JSON data, line 1: https...
                                                           
The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 8, in <module>
    sys.exit(manage())
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/__init__.py", line 175, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/__init__.py", line 436, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv) 
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/base.py", line 412, in run_from_argv 
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/base.py", line 458, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/base.py", line 106, in wrapper
    res = handle_func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/commands/migrate.py", line 356, in handle
    post_migrate_state = executor.migrate(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/migrations/executor.py", line 135, in migrate
    state = self._migrate_all_forwards(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/migrations/executor.py", line 167, in _migrate_all_forwards
    state = self.apply_migration(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/migrations/executor.py", line 252, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/migrations/migration.py", line 132, in apply
    operation.database_forwards(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/migrations/operations/fields.py", line 235, in database_forwards
    schema_editor.alter_field(from_model, from_field, to_field)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/base/schema.py", line 830, in alter_field
    self._alter_field(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/postgresql/schema.py", line 287, in _alter_field
    super()._alter_field(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/base/schema.py", line 1055, in _alter_field
    self.execute(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/postgresql/schema.py", line 48, in execute
    return super().execute(sql, None)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/base/schema.py", line 201, in execute
    cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 87, in _execute
    return self.cursor.execute(sql)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/psycopg/cursor.py", line 723, in execute
    raise ex.with_traceback(None)
django.db.utils.DataError: invalid input syntax for type json
DETAIL:  Token "https" is invalid.
CONTEXT:  JSON data, line 1: https...
```

### AWX version

21.13.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. Install 21.13.0
2. Upgrade operator and AWX to last version
3. Connect to a task pod `kubectl exec -it <task_pod> -- bash`
4. Run the migration command `awx-manage migrate`

### Expected results

Migrations executes without any error

### Actual results

Migration `conf.0010_change_to_JSONField` raise an exception

### Additional information

_No response_
user: dangoncalves
issue_14823: state: open
title: Stale action for prs issues
body: ##### SUMMARY
This will enable the github action for stale PRS/Issues in DEBUG MODE

debug: true

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - Other

user: dmzoneill
issue_14822: state: open
title: Make auth class and backend an mutable
body: ##### SUMMARY
Allow external apps to add additional DEFAULT_AUTHENTICATION_CLASSES and AUTHENTICATION_BACKENDS


##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API


##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 23.6.1.dev26+g4e07264862
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: TheRealHaoLiu
issue_14819: state: open
title: Something went wrong... There was an error loading this content. Please reload the page. Back to Dashboard.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Hi

when trying to enter data in prompt for a job schedule I encounter below error just after slecting inventory :

TypeError: Cannot read properties of undefined (reading 'split')
TypeError: Cannot read properties of undefined (reading 'split')
    at https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:2056367
    at $Z (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:2056411)
    at ao (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:851391)
    at Ks (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:903735)
    at Al (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:890981)
    at Tl (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:890909)
    at El (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:890772)
    at yl (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:887738)
    at https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:837183
    at t.unstable_runWithPriority (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:933489)



Thanks for your support

### AWX version

23.6.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.12.5

### Operating system

Red Hat 

### Web browser

_No response_

### Steps to reproduce

I create a schedule for my awx template (yum update) and when trying to enter data in "Prompt" I encounter upper error just after selecting inventory

### Expected results

no error

### Actual results

TypeError: Cannot read properties of undefined (reading 'split')
TypeError: Cannot read properties of undefined (reading 'split')
    at https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:2056367
    at $Z (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:2056411)
    at ao (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:851391)
    at Ks (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:903735)
    at Al (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:890981)
    at Tl (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:890909)
    at El (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:890772)
    at yl (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:887738)
    at https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:837183
    at t.unstable_runWithPriority (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:933489)



### Additional information

TypeError: Cannot read properties of undefined (reading 'split')
TypeError: Cannot read properties of undefined (reading 'split')
    at https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:2056367
    at $Z (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:2056411)
    at ao (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:851391)
    at Ks (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:903735)
    at Al (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:890981)
    at Tl (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:890909)
    at El (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:890772)
    at yl (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:887738)
    at https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:837183
    at t.unstable_runWithPriority (https://tower.cedelgroup.com/static/js/main.fcec0bf3.js:2:933489)


user: birb57
issue_14813: state: open
title: Workflow Approval Toolbar Action Items Ignore Approve Role
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

The Approve Role controls whether a Workflow Approval node can be approved or denied.

When a login is not a member of a team with the Approve Role, the row items are correctly greyed out however the toolbar equivalents (thumbs-up & thumbs-down) are not greyed out.

### AWX version

23.6.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

Amazon Linux 2

### Web browser

Firefox, Chrome, Safari, Edge

### Steps to reproduce

1. Ensure a login is **not** a member of a team with the Approve role.
2. Launch a workflow template with an approval node.
3. Go to Workflow Approvals.

### Expected results

The Workflow Approval corresponding to the launched Workflow Template should have both the row items and toolbar items greyed out.

### Actual results

The Workflow Approval corresponding to the launched Workflow Template row items are correctly greyed out but the toolbar items are not greyed out.

### Additional information

_No response_
user: kymcharlesworth-srg
issue_14811: state: open
title: mockldap not available as defined in requirements_dev.txt
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

the source of mockldap is not available as defined in requirements_dev.txt

### AWX version

all

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

debian 12

### Web browser

Firefox, Chrome, Safari, Edge

### Steps to reproduce

git clone https://github.com/ansible/awx.git
cd awx
make docker-compose-build
# build fail

### Expected results

successfully docker-compose build

### Actual results

 > [builder 10/10] RUN cd /tmp && make requirements_awx_dev:                                                                                                                                                       
#24 0.341 find: ‘awx_collection’: No such file or directory                                                                                                                                                        
#24 0.362 python3.9: can't open file '/tmp/tools/scripts/scm_version.py': [Errno 2] No such file or directory                                                                                                      
#24 0.385 python3.9: can't open file '/tmp/tools/scripts/scm_version.py': [Errno 2] No such file or directory                                                                                                      
#24 0.389 /var/lib/awx/venv/awx/bin/pip install -r requirements/requirements_dev.txt                                                                                                                               
#24 1.003 Collecting mockldap
#24 1.003   Cloning https://github.com/artefactual-labs/mockldap.git (to revision master) to ./pip-install-0pi620zv/mockldap_6e58290e20be4a568cce57f40924c559
#24 1.003   Running command git clone -q https://github.com/artefactual-labs/mockldap.git /tmp/pip-install-0pi620zv/mockldap_6e58290e20be4a568cce57f40924c559
#24 1.244   fatal: could not read Username for 'https://github.com': No such device or address
#24 1.248 WARNING: Discarding git+https://github.com/artefactual-labs/mockldap.git@master#egg=mockldap. Command errored out with exit status 128: git clone -q https://github.com/artefactual-labs/mockldap.git /tmp/pip-install-0pi620zv/mockldap_6e58290e20be4a568cce57f40924c559 Check the logs for full command output.
#24 1.486 Collecting build
#24 1.489   Using cached build-1.0.3-py3-none-any.whl (18 kB)
#24 1.591 Collecting coreapi
#24 1.728   Downloading coreapi-2.3.3-py2.py3-none-any.whl (25 kB)
#24 1.867 Collecting django-debug-toolbar==3.2.4
#24 1.894   Downloading django_debug_toolbar-3.2.4-py3-none-any.whl (216 kB)
#24 2.014 Collecting django-test-migrations
#24 2.042   Downloading django_test_migrations-1.3.0-py3-none-any.whl (24 kB)
#24 2.198 Collecting drf-yasg
#24 2.234   Downloading drf_yasg-1.21.7-py3-none-any.whl (4.3 MB)
#24 2.659 Collecting ipython>=7.31.1
#24 2.692   Downloading ipython-8.18.1-py3-none-any.whl (808 kB)
#24 2.791 Collecting unittest2
#24 2.819   Downloading unittest2-1.1.0-py2.py3-none-any.whl (96 kB)
#24 3.111 Collecting black
#24 3.140   Downloading black-24.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB)
#24 3.431 Collecting pytest!=7.0.0
#24 3.460   Downloading pytest-8.0.0-py3-none-any.whl (334 kB)
#24 3.566 Collecting pytest-cov
#24 3.593   Downloading pytest_cov-4.1.0-py3-none-any.whl (21 kB)
#24 3.710 Collecting pytest-django
#24 3.736   Downloading pytest_django-4.7.0-py3-none-any.whl (23 kB)
#24 3.797 Collecting pytest-pythonpath
#24 3.824   Downloading pytest_pythonpath-0.7.4-py3-none-any.whl (3.7 kB)
#24 3.938 Collecting pytest-mock==1.11.1
#24 3.968   Downloading pytest_mock-1.11.1-py2.py3-none-any.whl (10 kB)
#24 4.050 Collecting pytest-timeout
#24 4.081   Downloading pytest_timeout-2.2.0-py3-none-any.whl (13 kB)
#24 4.206 Collecting pytest-xdist==1.34.0
#24 4.232   Downloading pytest_xdist-1.34.0-py2.py3-none-any.whl (36 kB)
#24 4.543 Collecting tox
#24 4.572   Downloading tox-4.12.1-py3-none-any.whl (154 kB)
#24 4.641 Collecting logutils
#24 4.668   Downloading logutils-0.3.5.tar.gz (27 kB)
#24 5.463 Collecting jupyter
#24 5.489   Downloading jupyter-1.0.0-py2.py3-none-any.whl (2.7 kB)
#24 5.550 Collecting backports.tempfile
#24 5.580   Downloading backports.tempfile-1.0-py2.py3-none-any.whl (4.4 kB)
#24 5.637 ERROR: Could not find a version that satisfies the requirement mockldap (unavailable) (from versions: 0.1, 0.1.1, 0.1.2, 0.1.3, 0.1.4, 0.1.5, 0.1.6, 0.1.7, 0.1.8, 0.2.0, 0.2.1, 0.2.2, 0.2.3, 0.2.4, 0.2.5, 0.2.6, 0.2.7, 0.2.8, 0.3.0, 0.3.0.post1)
#24 5.637 ERROR: No matching distribution found for mockldap (unavailable)
#24 5.645 WARNING: You are using pip version 21.2.4; however, version 23.3.2 is available.
#24 5.645 You should consider upgrading via the '/var/lib/awx/venv/awx/bin/python3.9 -m pip install --upgrade pip' command.
#24 5.787 make: *** [Makefile:161: requirements_awx_dev] Error 1

### Additional information

_No response_
user: otih
issue_14807: state: open
title: Schedule Prompt Causes Type Error for Certain Prompts
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When trying to edit a workflow template schedule, if the workflow template has Job Tags or Skip Tags set to prompt on launch, an error occurs and you can't set the schedule's prompts.

### AWX version

23.6.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.15.8

### Operating system

_No response_

### Web browser

Chrome, Edge

### Steps to reproduce

- Create or open a workflow template.
- Edit the workflow template to have Job Tags or Skip Tags set to prompt on launch.
- Go to the template's schedule tab.
- Create or open a schedule.
- Click the Edit button to edit the schedule
- Click the Prompt button to adjust prompts
- If the Inventory is set to prompt on launch, choose an inventory and then proceed
- The "Other Prompts" is where the error occurs.

### Expected results

We should move on to the Other Prompts tab and be able to specify prompts for Job Tags or Skip Tags.

### Actual results

A "Something Went Wrong" page appears with the following error:
`TypeError: Cannot read properties of undefined (reading 'split')`

You have to exit back out to even get to a screen where you can go and correct the settings issues.


### Additional information

_No response_
user: fhomess
issue_14802: state: open
title: Error reporting and handling in GH14575/GH12682
body: ##### SUMMARY
* Bug: Error Reporting and None/"" handling for Grafana notifier

related https://github.com/ansible/awx/issues/14675
related https://github.com/ansible/awx/issues/12682

##### ISSUE TYPE
* Bug, Docs Fix or other nominal change

##### COMPONENT NAME
* awx

##### AWX VERSION
* all

user: dmzoneill
issue_14800: state: open
title: Inventory Source Sync not respecting collections_path in ansible.cfg
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When syncing an Inventory source with AWX `ansible collection location` does not include the path specified in ansible.cfg with the setting `collections_path`, but does include path if `collections_paths` is used

### AWX version

23.6.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.16.2

### Operating system

Stream 9

### Web browser

Edge

### Steps to reproduce

In the root of the project folder, have an ansible.cfg with the following settings:
```
[defaults]
collections_path = ./collections
```

Setup an Inventory with a source of a yml file in the project and Verbosity set to 1 (Info).  Then attempt to sync the Inventory source and observe the info at the very top (or observe a failure if the inventory sync depends on an inventory plugin from the project collections path)

Note that the line `ansible collection location` does not include `/runner/project/collections` when ansible.cfg specifies collection_path, but does include it if collection_paths is defined with the same location.



### Expected results

```
ansible-inventory [core 2.16.2]
  config file = /runner/project/ansible.cfg
  configured module search path = ['/runner/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.11/site-packages/ansible
  ansible collection location = /runner/requirements_collections:/runner/project/collections:/runner/.ansible/collections:/usr/share/ansible/collections:/usr/share/automation-controller/collections
  executable location = /usr/local/bin/ansible-inventory
  python version = 3.11.5 (main, Jan  9 2024, 00:00:00) [GCC 11.4.1 20231218 (Red Hat 11.4.1-3)] (/usr/bin/python3.11)
  jinja version = 3.1.3
  libyaml = True
Using /runner/project/ansible.cfg as config file
[DEPRECATION WARNING]: ANSIBLE_COLLECTIONS_PATHS option, does not fit var 
naming standard, use the singular form ANSIBLE_COLLECTIONS_PATH instead. This 
feature will be removed from ansible-core in version 2.19. Deprecation warnings
 can be disabled by setting deprecation_warnings=False in ansible.cfg.
```

### Actual results

```
ansible-inventory [core 2.16.2]
  config file = /runner/project/ansible.cfg
  configured module search path = ['/runner/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.11/site-packages/ansible
  ansible collection location = /runner/requirements_collections:/runner/.ansible/collections:/usr/share/ansible/collections:/usr/share/automation-controller/collections
  executable location = /usr/local/bin/ansible-inventory
  python version = 3.11.5 (main, Jan  9 2024, 00:00:00) [GCC 11.4.1 20231218 (Red Hat 11.4.1-3)] (/usr/bin/python3.11)
  jinja version = 3.1.3
  libyaml = True
Using /runner/project/ansible.cfg as config file
[DEPRECATION WARNING]: ANSIBLE_COLLECTIONS_PATHS option, does not fit var 
naming standard, use the singular form ANSIBLE_COLLECTIONS_PATH instead. This 
feature will be removed from ansible-core in version 2.19. Deprecation warnings
 can be disabled by setting deprecation_warnings=False in ansible.cfg.
```

### Additional information

Possibly unrelated but a separate issue is that `[DEPRECATION WARNING]: ANSIBLE_COLLECTIONS_PATHS` appears in this output, even though we have not configured this environment variable anywhere in our AWX config or EE that includes 2.16.2
user: MallocArray
issue_14799: state: open
title: Migration to django-ansible-base for LDAP authentication
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
Adding LDAP authentication via django-ansible-base and removing the current LDAP code.
<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```

```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: jessicamack
labels: dependencies: Pull requests that update a dependency file
issue_14798: state: open
title: Adding Credential Input Source Export for Exporting Credentials using awxkit 
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
When exporting credentials using awxkit, if the credential had input sources, they would not be exported. 
This PR will add the ability to export those values and import them afterwards. #14738 
<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - Collection
 - CLI
##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
23.6.0
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->
<!--- Paste verbatim command output below, e.g. before and after your change -->
```
Relates to the issue #14738 
```

user: neevnuv
issue_14797: state: open
title: Add setting for configuring rsyslog omhttp batching
body: ##### SUMMARY
add following new setting to configure batching for omhttp configuration in rsyslog
`LOG_AGGREGATOR_OMHTTP_BATCH_ENABLED`
`LOG_AGGREGATOR_OMHTTP_BATCH_MAXSIZE`
`LOG_AGGREGATOR_OMHTTP_BATCH_FORMAT`

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature


##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API


##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 23.6.1.dev15+g031bc88cc0
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: TheRealHaoLiu
issue_14796: state: open
title: awx ad-hoc command (ping) job stay in running status indefinitely
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Hi

I run ping ad-hoc command via awx web interface with high fork 

At the beginning it is running faster and finally stay in running state with forking processes 2 by 2 only

why is forking value/capacity decrease over the processing time ?

Thanks for your support

### AWX version

23.5.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [x] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.14.2

### Operating system

Redhat 8.8

### Web browser

Chrome

### Steps to reproduce

run awx adhoc command (ping module for example) via inventory on big server list (over 4000) and never finished
Note that I have the same behavior with command module


### Expected results

job completed in failed or successful status but stay in running status indefinitely.


### Actual results

adhoc (ping module) command job is running indefinitely



### Additional information

Nothing to highlight in pods logs or podman logs
user: bskou57
issue_14790: state: open
title: Better error message when Basic authentication is disabled
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Show meaningful message when trying to use Basic authentication but unable to authenticate because it's disabled in Controller settings.

### AWX version

23.2.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.14.2

### Operating system

Red Hat Enterprise Linux release 9.1 (Plow)

### Web browser

Chrome

### Steps to reproduce

Disable Basic authentication in AAP settings. Try to use one of ansible.controller modules specifying username and password, for example:

```
    - name: Get all credential types from AAP
      ansible.controller.export:
        controller_username: "{{ aap_config_user }}"
        controller_password: "{{ aap_config_pass }}"
        controller_host: "{{ aap_config_host }}"
        credential_types: 'all'
        validate_certs: false
```

### Expected results

Meaningful error message saying "failed to authenticate"  or "incorrect credentials" or "unable to use specified authentication method".

### Actual results

Exception that doesn't help to understand what failed.

```
msg: This endpoint raised an error: /api/v2/credentials
exception:
  File /tmp/ansible_ansible.controller.export_payload_c2dy_i7_/ansible_ansible.controller.export_payload.zip/ansible_collections/ansible/controller/plugins/modules/export.py, line 185, in main
  File /tmp/ansible_ansible.controller.export_payload_c2dy_i7_/ansible_ansible.controller.export_payload.zip/ansible_collections/ansible/controller/plugins/module_utils/controller_api.py, line 282, in exit_jsonn super().exit_json(**kwargs)
  File /tmp/ansible_ansible.controller.export_payload_c2dy_i7_/ansible_ansible.controller.export_payload.zip/ansible/module_utils/basic.py, line 1514, in exit_json sys.exit(0)
```

### Additional information

_No response_
user: kk-at-redhat
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14789: state: open
title: wsrelay certificate verification is siliently ignored when enabled
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When experimenting with/validating AWX, I noticed that SSL certificate verification for the wsrelay is silently ignored when requested via `BROADCAST_WEBSOCKET_VERIFY_CERT=True`.

Specifically, I set the following:
```python
BROADCAST_WEBSOCKET_SECRET = '<redacted>'
BROADCAST_WEBSOCKET_VERIFY_CERT = True
BROADCAST_WEBSOCKET_PROTOCOL = 'https'
```

I then installed an expired SSL certificate on the control plane hosts and bounced the wsrelay service. My expectation was that the handshake should fail with an SSL error, but instead the connection was opened successfully per the logs.

Upon digging into the code I believe I found what is a logic error here:
https://github.com/ansible/awx/blob/74cd23be5cf24c48ea1ffdb6f9f2a2d14d90a436/awx/main/wsrelay.py#L91

Per the [aiohttp docs](https://docs.aiohttp.org/en/stable/client_reference.html#aiohttp.ClientSession.ws_connect), the `ssl=...` parameter is supposed to be either `None`, `False`, `aiohttp.Fingerprint`, or `ssl.SSLContext`. I believe the intent here was to set `verify_ssl=self.verify_ssl` instead.

### AWX version

23.6.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

N/A

### Modifications

yes

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Set:

```python
BROADCAST_WEBSOCKET_SECRET = '<redacted>'
BROADCAST_WEBSOCKET_VERIFY_CERT = True
BROADCAST_WEBSOCKET_PROTOCOL = 'https'
```

Then install an expired certificate in front of the wsrelay and observe that there are no handshake errors.

### Expected results

The wsrelay connection handshake fails when SSL verification is requested but should fail if attempted.

### Actual results

SSL verification does not fail, ever, and the wsrelay connection is established regardless of whether or not verification is requested.

### Additional information

_No response_
user: tj90241
issue_14788: state: open
title: add a dependencies file or section for Debian/Ubuntu packages
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Looking to build AWX on Debian/Ubuntu shows missing packages, please include a file to install all requires .deb dependencies or include it in a README section.

`apt install libldap2-dev libsasl2-dev libxml2-dev libxmlsec1-dev pkgconfig`


### Select the relevant components

- [ ] UI
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

make requirements

### Current results

fails to build  on python3-ldap and xmlsec

### Sugested feature result

builds without issue

### Additional information

_No response_
user: commandline-be
issue_14782: state: open
title: Mount emptyDir with medium: Memory to  control plan EE container
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

As ansible output streams back from receptor, it is temporarily buffered to `/tmp` 

If this directory is not mounted to anything, AFAIK it behaves like a container would when otherwise running on a host -- it writes to the container's writable layer. Where that writable layer is depends on what storage driver is being used by the underlying container engine. Best docs I've found are from docker https://docs.docker.com/storage/storagedriver/#:~:text=When%20you%20create%20a%20new,this%20thin%20writable%20container%20layer. 

tl;dr writing to this layer can look like writing to the underlying worker node disk, and can be slow/put lots of pressure on the disk. 

On a VM, /tmp is often a tmpfs, which is memory backed. To get similar behavior in k8s, we could use a memoyr backed emptyDir. @fosterseth indicated the right container where receptor is buffering events to is the ee container in the task pod, where it stays until the dispatcher reads those events and enqueues them in Redis for the callback receiver to process.

https://github.com/ansible/awx-operator/blob/66f03c3c16431cb4f1483ae4d1d630b41721f145/roles/installer/templates/deployments/task.yaml.j2#L281-L336

Idea would be to add a volume mount to /tmp and indicate it is to be backed by Memory
```   
volumeMounts:
    - mountPath: /tmp
      name: receptor-tmp-volume
  volumes:
  - name: receptor-tmp-volume
    emptyDir:
      medium: Memory
```

Right thing to do is deploy it both ways, and run a workload that produces many events. Observe:
 - overall latency
 - event processing latency
 - overall node pressure (disk i/o, cpu, memory usage)

And determine if the memory backed empty dir is a net win.


### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

Run jobs that produce lots of output

### Current results

tbd, need to measure

### Sugested feature result

Reduce latency, disk i/o, cpu context switches

### Additional information

_No response_
user: kdelee
issue_14781: state: open
title: API calls to AWX read operation timed out
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Our environment : 

- 1 awx master on k3s (v1.25.4+k3s1) with 2 external workers (using receptor) with 8 vCPUs and 16G RAM
- projects are hosted on enterprise github
- SAML auth
- Upgraded from 22.1.0 to 23.3.0 (~ december)
- Control node EE fixed to the AWX version to avoid "latest" usage. (23.3.0 currently). Only custom workers EE for playbooks.
- Postgres database size ~90G.
- No limit added to pods

We have since a few weeks (maybe months now) some timeout issues to contact the AWX API.
It's not systematic but it became more frequent (weekly if lucky and sometimes daily).
It is typically experienced when a playbook interact with AWX with awx.awx collection to create schedule, launch job, wait for job end, etc.

Typical message : "There was an unknown error when trying to connect to https://awx-faky.fake/api/v2/XXXXX/XXXXX: timeout The read operation timed out"

### AWX version

23.3.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.14

### Operating system

RHEL 8.9

### Web browser

_No response_

### Steps to reproduce

Didn't find a way to reproduce it with the exact same behaviour.
With our dev environment, I tried to trigger the API from awx jobs and from external calls.
I managed to reproduce the timeout error but the awx master also got heavy load1m (which may be the source of timeout in that case) so it wasn't the exact same behavior.

### Expected results

API calls to AWX don't get timeouts.

### Actual results

API calls to AWX can produce timeout errors even when the awx plateform doesn't run other jobs.

### Additional information

I checked some metrics and logs but without any real finding.

**• System**
CPU and load1m can rise up a bit but no saturation so it seems to be more likely a consequence than the cause.
Memory doesn't change (app, cache, slab and everything but free =~ 90%)
Not a clear process behavior. awx-manage and uwsgi can use a bit more CPU.
Heavy read and i/o on awx filesystem can be observed sometimes (nearly the DB size) but not specially when a timeout is reach on api.
Checked also CPU/MEM limits on pods/containers and none were reached.
Logs do not show anything abnormal.

**• AWX**
The timeout errors can appear without other jobs running (so theorically no saturation of the control node, good capacity available for control and execution nodes.
Web pod : I can see the requests associated to the playbook calls but no errors or warnings to link.
Task pod : Constant warnings and some errors for the ee container but not related to our issues
			-	"Could not read in control service: read unix /var/run/receptor/receptor.sock->@: use of closed network connection"
			-	"Exceeded retries for reading stdout /tmp/receptor/awx-faky-fake-7bd9c49475-2c9bj/fHz0QLTm/stdout"


After reading some documnentation about performance ([Automation Controller Performance](https://docs.ansible.com/automation-controller/latest/html/administration/performance.html#) for example), we need to do some work on our infrastructure (number of master, forks on jobs, dedicated db host, log aggregator, etc).
But since our current timeout issue can append without specific load on awx infrastructure, that doesn't seem to be a solution (and it could potentially hide the real issue). 

A few weeks ago, we experienced some recurrent awx plateform crashes. We find out that our DB wasn't correctly purged by the cleanup jobs (related to unpartitionned tables) and was growing (nearly 127G).
After fixing it, the DB shrinked to ~70G and the crashes stopped. But maybe DB is still to large and in some cases api access can be slow and reach time out ?
user: sylvain-de-fuster
issue_14779: state: open
title: The Survey enable toggle button does not properly reflect the status.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

The enable toggle button on the template survey does not properly reflect the status.

### AWX version

23.5.0 

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome 120.0.6099.234 on macOS

### Steps to reproduce

1. Open the survey tab on existed Job Template
2. Enable Survey
3. Open the other tab (ex.Jobs).
4. Open the Survey tab, again.



### Expected results

Survey is enabled.

### Actual results

Survey is disabled on the display. Contrary to the actual setting.

When reloaded, survey is Enabled. 

### Additional information

When enabled with the toggle button, the request is correctly made as follows.

```json
{"survey_enabled":true}
```

However, the display when moving tabs is different.

Video attached.

![survey](https://github.com/ansible/awx/assets/16851744/58f62b68-eff7-4912-8cc7-3a9d5fab0bac)


user: akira6592
issue_14778: state: open
title: EKS upgrade from 1.25 to 1.26
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Currently i am running AWX on EKS 1.25 without any issue. Now we need to upgrade EKS from 1.25 to 1.26. I need to check whether current version of AWX support running on EKS 1.26 cluster. Please let me know if this works. How to check the compatibility matrix for AWX?

Please see the below version i have been using
AWX: 21.5
AWX-Operator: 0.28.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

Nill

### Current results

Nill

### Sugested feature result

Nill

### Additional information

_No response_
user: manutn1988
issue_14771: state: open
title: AAP-13369 Python 3.9 -> 3.11 upgrade
body: ##### SUMMARY
* This updates python version from 3.9 to 3.11

related https://github.com/ansible/awx/issues/13820

##### ISSUE TYPE
* New or Enhanced Feature

##### COMPONENT NAME
* n/a

##### AWX VERSION
* n/a

##### ADDITIONAL INFORMATION
* n/a
user: dmzoneill
labels: dependencies: Pull requests that update a dependency file
issue_14769: state: open
title: Cannot sync GitHub repo using HTTPS - certificate issue
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

AWX fails to sync GitHub repo over HTTPS with below error message about certificate:

SSL: no alternative certificate subject name matches target host name 'github.com'

PLAY [Update source tree if necessary] *****************************************

TASK [Delete project directory before update] **********************************
ok: [localhost]

TASK [Update project using git] ************************************************
fatal: [localhost]: FAILED! => {"changed": false, "cmd": "/usr/bin/git ls-remote https://github.com/Gibonnn/ansible.git -h refs/heads/HEAD", "msg": "fatal: unable to access 'https://github.com/Gibonnn/ansible.git/': SSL: no alternative certificate subject name matches target host name 'github.com'", "rc": 128, "stderr": "fatal: unable to access 'https://github.com/Gibonnn/ansible.git/': SSL: no alternative certificate subject name matches target host name 'github.com'\\n", "stderr_lines": ["fatal: unable to access 'https://github.com/Gibonnn/ansible.git/': SSL: no alternative certificate subject name matches target host name 'github.com'"], "stdout": "", "stdout_lines": []}

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   
`

Why is this happening? I would expect GitHub sync to work out of the box. Thanks

### AWX version

23.5.1

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

core 2.15.8

### Operating system

Ubuntu

### Web browser

Chrome

### Steps to reproduce

Configure Project to sync source control using HTTPs.

### Expected results

Repo is being synced

### Actual results

Connection to Github fails with:

SSL: no alternative certificate subject name matches target host name 'github.com'

### Additional information

_No response_
user: Gibonnn
issue_14767: state: open
title: Cannot sync any GitHub or GitLab repo using SSH
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Hello,
I have a clean AWX installation and have Im unable to sync any (private/public) repo from Github using SSH keys. 
Here the steps I did:
- Created an SSH key with ssh-keygen -t ed25519
- Uploaded the public key to Github
- Created credentials in AWX, type Source control, no username and password, uploaded the private SSH key
- Created a project to sync public repo using git@github.com:ansible/ansible.git and my created credentials.
On project sync it always fails with:
`Identity added: /tmp/awx_60_ln4iooqu/artifacts/60/ssh_key_data (xxx@xxx.zz)

PLAY [Update source tree if necessary] *****************************************

TASK [Delete project directory before update] **********************************
ok: [localhost]

TASK [Update project using git] ************************************************
fatal: [localhost]: FAILED! => {"changed": false, "cmd": "/usr/bin/git ls-remote git@github.com:ansible/ansible.git -h refs/heads/HEAD", "msg": "git@github.com: Permission denied (publickey,password).\\r\\nfatal: Could not read from remote repository.\\n\\nPlease make sure you have the correct access rights\\nand the repository exists.", "rc": 128, "stderr": "git@github.com: Permission denied (publickey,password).\\r\\nfatal: Could not read from remote repository.\\n\\nPlease make sure you have the correct access rights\\nand the repository exists.\\n", "stderr_lines": ["git@github.com: Permission denied (publickey,password).", "fatal: Could not read from remote repository.", "", "Please make sure you have the correct access rights", "and the repository exists."], "stdout": "", "stdout_lines": []}

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   
`
I have no clue why. 
When I do git clone from my underlying Linux and the same key, all works fine.

### AWX version

23.5.1

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

core 2.15.8

### Operating system

Ubuntu

### Web browser

_No response_

### Steps to reproduce

- Created an SSH key with ssh-keygen -t ed25519
- Uploaded the public key to Github
- Created credentials in AWX, type Source control, no username and password, uploaded the private SSH key
- Created a project to sync public repo using git@github.com:ansible/ansible.git and my created credentials.

### Expected results

Repo is being synced

### Actual results

Repo is not synced and the connection fails with Permissions denied.

### Additional information

_No response_
user: Gibonnn
issue_14756: state: open
title: AWX Community Meeting Agenda - Feb 2024
body: # AWX Office Hours

## Proposed agenda based on topics
- @fosterseth Mesh Ingress DEMO!
- @TheRealHaoLiu "Failed to JSON parse a line from worker stream due to unexpected EOF(b'')" saga https://github.com/ansible/awx/issues/14693
- @rooftopcellist AWX Operator deployment overrides PR's
  * @TheRealHaoLiu  initial PR - https://github.com/ansible/awx-operator/pull/1695
  * @kurokobo alternate PR - https://github.com/ansible/awx-operator/pull/1697
- @AlanCoding custom RBAC role in AWX
  * https://github.com/ansible/django-ansible-base/pull/45
  * https://github.com/ansible/awx/pull/14735

## What

After a successful Contributor Summit in October, one of the bits of feedback we got was to host a regular time for the Automation Controller (AWX) Team to be available for your folks in the AWX Community, so we are happy to announce a new regular video meeting.

This kind of feedback loop is vital to the success of AWX and the AWX team wants to make it as easy as possible for you - our community - to get involved.

## Where & When
Our next meeting will be held on Tuesday, Feb th, 2024 at [1500 UTC](https://dateful.com/time-zone-converter?t=15:00&tz=UTC)


* [Google Meet](https://meet.google.com/vyk-dfow-cfi)
* Via Phone PIN: 842522378 [Guide](https://support.google.com/meet/answer/9518557)

This meeting is held once a month, on the second Tuesday of the month, at [1500 UTC](https://dateful.com/time-zone-converter?t=15:00&tz=UTC)

## How

Add one topic per comment in this GitHub issue

If you don't have a GitHub account, jump on [#awx:ansible.com](https://matrix.to/#/#awx:ansible.com) on Matrix and we can add the topic for you

## Talk with us

As well as the fortnightly video meeting you can join the Community (inc development team) on Matrix Chat.

* Matrix: [#awx:ansible.com](https://matrix.to/#/#awx:ansible.com) (recomended)
* libera.chat IRC: `#ansible-awx` (If you are already setup on IRC)

The Matrix & IRC channels are bridged, you'll just have a better experience on Matrix

## Links
[AWX YouTube Chanel](https://www.youtube.com/@ansible-awx)
[Previous Meeting](https://github.com/ansible/awx/issues/14712)
Meeting recording
Next Meeting

See you soon!

user: john-westcott-iv
issue_14754: state: open
title: After SAML Authentication, it redirects to /login
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

I've integrated the SML Authentication with AWX. It redirects to my IDP (I get 200 OK). Authenticate it there. And then redirects back to the http://localhost:8052/sso/complete/saml/ (here I get 302 Found) But after this, it redirects to the http://localhost:8052/sso/error/ (And here I get 301 Moved Permanently) and then to http://localhost:8052/#/login . I'm unable to login into the AWX by SAML. Please resolve the issue.
<img width="442" alt="Capture" src="https://github.com/ansible/awx/assets/156211480/ee8a3b18-2984-4525-84aa-3a8ffeed8268">


### AWX version

AWX v23.5.0

### Select the relevant components

- [X] UI
- [X] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Firefox, Chrome, Edge

### Steps to reproduce

Install AWX with following helm yaml file:

AWX:
  enabled: true
  name: awx-demo
  spec:
    no_log: false
    service_type: ClusterIP
    service_annotations: |
      prometheus.io/scrape: "true"
    service_labels: |
      release: kube-prometheus-stack
    extra_settings:
    - setting: ALLOW_METRICS_FOR_ANONYMOUS_USERS
      value: "True"
    ingress_type: ingress
    ingress_class_name: alb
    hostname: 
    ingress_path_type: Prefix
    ingress_annotations: |
      "alb.ingress.kubernetes.io/group.name": "devsecopsalb"
      "alb.ingress.kubernetes.io/group.order": "14"
      "alb.ingress.kubernetes.io/scheme": "internet-facing"
      "alb.ingress.kubernetes.io/target-type": "ip"
      "alb.ingress.kubernetes.io/target-group-attributes": "stickiness.enabled=true","stickiness.lb_cookie.duration_seconds=300"
      "alb.ingress.kubernetes.io/listen-ports": "'[{"HTTPS":443}, {"HTTP":80}]'"
      "alb.ingress.kubernetes.io/ssl-redirect": "443" 
    auto_upgrade: true
    replicas: 2
    ipv6_disabled: true
    # projects_persistence: true
    # projects_storage_class: gp2
    # projects_storage_size: 10Gi
    # projects_storage_access_mode: ReadWriteOnce
    web_replicas: 2
    task_replicas: 2
    task_resource_requirements:
      requests:
        cpu: 100m
        memory: 128Mi
        ephemeral-storage: 100M
      limits:
        cpu: 2000m
        memory: 4Gi
        ephemeral-storage: 500M
    web_resource_requirements:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 1000m
        memory: 4Gi
    ee_resource_requirements:
      requests:
        cpu: 100m
        memory: 64Mi
      limits:
        cpu: 1000m
        memory: 4Gi
    redis_resource_requirements:
      requests:
        cpu: 50m
        memory: 64Mi
      limits:
        cpu: 1000m
        memory: 4Gi
    rsyslog_resource_requirements:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 1000m
        memory: 2Gi
    init_container_resource_requirements:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 1000m
        memory: 2Gi
    postgres_configuration_secret: awx-demo-postgres-configuration
    postgres_storage_requirements:
      requests:
        storage: 10Gi
      limits:
        storage: 20Gi
    postgres_storage_class: gp2
    postgres_init_container_resource_requirements:
      requests:
        cpu: 10m
        memory: 64Mi
      limits:
        cpu: 1000m
        memory: 2Gi
  status:
    postgresConfigurationSecret: awx-demo-postgres-configuration

### Expected results

It should login into the AWX after getting response from the IDP

### Actual results

It redirects to http://localhost
<img width="442" alt="Capture" src="https://github.com/ansible/awx/assets/156211480/339ce51b-4cff-4412-85b9-dea24f129032">
/#/login

### Additional information

_No response_
user: sathyarchana
issue_14753: state: open
title: pyparsing >= 3 compatibility
body: Just in case awx decides to depend on pyparsing >= 3, the important change is:
`grammar.ignore_whitespace()` is needed for the SortedQuery tests to pass.



user: kapouer
issue_14751: state: open
title: 增加中文版本呗
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

缺少中文

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

需要中文页面

### Current results

需要中文页面

### Sugested feature result

需要中文页面

### Additional information

需要中文页面
user: Lyvin-zhang
issue_14749: state: open
title: Add self-check pg_notify messages for silently dropped connections
body: ##### SUMMARY
The problem this addresses is roughly established by this form of testing:

```
awx-manage run_dispatcher --status
strace -f -s 1024 -p 8491
lsof -p 8491 | grep 28
# run as root
iptables -I OUTPUT -p tcp --sport 34586 -j DROP
```

The dropping of the connection is undetected by the dispatcher, which is bad. This leaves the dispatcher in a state where it no longer receives messages. Worse, it doesn't know that it cannot receive messages. I have poked around several options to test the connection outside of this, and they all seem terrible. I think I've concluded I need threading to testing doing `SELECT 1`, because the very scenario I want to diagnose causes that to _hang_ which makes it even less functional than if we had not added that check..

That leads me to the nuclear option - this. This is how it looks from logs:

```
tools_awx_1 | 2024-01-09 15:56:38,547 ERROR    [-] awx.main.dispatch Error consuming new events from postgres, will retry for 40 s
tools_awx_1 | Traceback (most recent call last):
tools_awx_1 |   File "/awx_devel/awx/main/dispatch/worker/base.py", line 267, in run
tools_awx_1 |     conn.select_timeout = self.run_periodic_tasks(conn)
tools_awx_1 |   File "/awx_devel/awx/main/dispatch/worker/base.py", line 237, in run_periodic_tasks
tools_awx_1 |     raise db.DatabaseError(f'pg_notify self-check missing after {delta:.3f}s, did you drop the connection?')
tools_awx_1 | django.db.utils.DatabaseError: pg_notify self-check missing after 26.015s, did you drop the connection?
tools_awx_1 | 2024-01-09 15:56:39,576 INFO     [-] awx.main.dispatch Dispatcher listener connection established
```

Obvious drawback - this is _slow_ to detect problems. I've set this to send every 60 seconds, and then receiving has a tolerance of 20 seconds + whatever task interval we encounter... thus that 26 seconds. This is additive, and we add at least 1 second of delay in retry loop, so call it 87 seconds here to recover. To articulate my feelings:

![recover](https://github.com/ansible/awx/assets/1385596/174d770d-4769-407a-9bcb-8e6d5ca81ec4)

The advantages of this are that it detects this state when nothing else can, and it goes into the error handling loop we want which re-connects but doesn't arbitrarily fail jobs in progress.

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API


user: AlanCoding
issue_14747: state: open
title: Support for AWX user Management 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

We are trying to manage user access using "Azure AD OAuth2 Organization Map" in AWX. Below are the things that we have difficulty in setting up.
 
1. Manage user access with respect to DL (Distribution List)
2. Providing a specific DL admin rights
3. Providing 2 or more DL's with read only
4. Restricting access to all other AD members

**Any support would be highly appreciated  

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

We have tried this AWX document - https://docs.ansible.com/ansible-tower/latest/html/administration/social_auth.html#ag-org-team-maps

{
  "Default": {
    "users": true
  },
  "TEST-AX": {
    "users": false,
    "admins": [
      "AWX_ACCESS_TEST-DL"
    ]
  }
}

### Current results

We are not able to manage more DL's and Different level of access roles 

### Sugested feature result

We would require to add more DL's and assign roles  

### Additional information

_No response_
user: tgopalra
issue_14739: state: open
title: Corrected the error handling mechanism for Input Group Integer Fields.
body: ##### SUMMARY
Corrected the error handling mechanism for Input Group Integer Fields.
Fixes #8556 

##### ISSUE TYPE
Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - UI
 

##### AWX VERSION
```
Ansible AWX 23.5.2.dev18+g325f5250db
```


##### ADDITIONAL INFORMATION

This fix is specifically targeted for the Ansible Automation Platform, given its license-based nature. In accordance with the resolution implemented in issue #8446, the max_host field is hidden in the AWX installation as this field is relevant only to licensed installations (i.e., Tower).

To thoroughly test the code, I temporarily skipped the validation for the license condition. This allowed me to focus on validating other aspects of the code without being hindered by the license-related checks. Additionally, I made corrections to the validation message that is displayed when an incorrect input value is provided for the max_hosts parameter. This ensures that the user receives clear and accurate feedback when interacting with this parameter.


Below are the screenshots before and after the fix:

![Image 27-12-23 at 18 20](https://github.com/ansible/awx/assets/24710827/5b4d532f-bd97-44f4-9654-7b19d59287cd)

After we applied the fix , below validation message noticed i.e.
![Image 27-12-23 at 18 17](https://github.com/ansible/awx/assets/24710827/c9183844-59e3-445b-9767-d7ecc7bcd29b)


user: cNeha
issue_14738: state: open
title: awxkit and awx.awx don't export credential input sources. 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

I am looking into exporting my AWX instance into a json file in order to migrate from one AWX instance to another.
I am using Hashicorp Vault credential input source to get the sensitive information from secrets save in my vault instance.

The issue is, when exporting, the credential input sources aren't exported, so when I import into a new AWX, the credentials are created without inputs. Plus, looking into the api, each credential has a separate page just for the input sources (<awx>/api/v2/credentials/<id>/credential_input_sources).

I would like to add the credential input sources to the exported json file.


### AWX version

23.5.1

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [X] Collection
- [X] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Step 1: 
Create a HashiCorp Vault Secret Lookup Credential. Give it a token that allows reading secrets from your vault. Test that you can indeed pull secrets from vault

Step 2: 
Create another credential that uses the HashiCorp Vault Secret Lookup in order to get a secret from the vault.

Step 3: 
Export using awxkit or awx.awx
awx export --credentials > resources.json

Step 4: 
Import to new AWX
awx import < resources.json

If the issue occured, you should see that the new credentials in the new instance do not have inupts.

### Expected results

Newly imported credentials have the credential input source configured after exporting and importing the credential.

### Actual results

Newly imported credentials are created with no input source and no inputs

### Additional information

_No response_
user: neevnuv
labels: component:awx_collection: issues related to the collection for controlling AWX
type:feature: prioritized on a feature board
issue_14733: state: open
title: Job name to adapt variable
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

We do see that the job names are represented now as  "Job Number- Job Template Name"
We would like to know if there is any possibility of appending some variables to it, because at time we see it difficult to search for a job that has run with some details.

Basically we have same job template running several times with different data, So at a point to search for the job that run with some specific details we had to go through every job and identify. Instead if had the option of appending variable to the job name it will help us giving some unique name for each job. So it would be easy for us to filter it in the future.

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

this is a feature request

### Current results

"Job Number- Job Template Name"

### Sugested feature result

"Job Number- Job Template Name- Some Variable"

### Additional information

_No response_
user: Iyappanj
issue_14729: state: open
title: Job stuck in "Running" state while all other jobs stuck in "Pending"
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

I experienced a bug in AWX that is a little bit strange: we had just one job stuck in "Running" state while all other jobs were stuck in "Pending". Cancelling the running job broke the deadlock and everything returned to a normal situation.

After analyzing the logs, I found this stacktrace:
```
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/fields/related_descriptors.py", line 173, in __get__
    rel_obj = self.field.get_cached_value(instance)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/fields/mixins.py", line 15, in get_cached_value
    return instance._state.fields_cache[cache_name]
KeyError: 'last_job'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/task.py", line 102, in perform_work
    result = self.run_callable(body)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/task.py", line 77, in run_callable
    return _call(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/tasks.py", line 25, in task_manager
    run_manager(TaskManager, "task")
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/tasks.py", line 20, in run_manager
    manager().schedule()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/task_manager.py", line 136, in schedule
    self._schedule()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/task_manager.py", line 57, in inner
    result = func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/task_manager.py", line 741, in _schedule
    self.process_tasks()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/task_manager.py", line 710, in process_tasks
    self.process_pending_tasks(pending_tasks)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/task_manager.py", line 57, in inner
    result = func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/task_manager.py", line 641, in process_pending_tasks
    self.start_task(task, instance_group, None)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/task_manager.py", line 57, in inner
    result = func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/task_manager.py", line 552, in start_task
    task.save()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/models/unified_jobs.py", line 916, in save
    self._update_parent_instance()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/models/unified_jobs.py", line 834, in _update_parent_instance
    parent_instance.save(update_fields=update_fields)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/models/jobs.py", line 359, in save
    return super(JobTemplate, self).save(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/models/unified_jobs.py", line 276, in save
    updated_fields = self._set_status_and_last_job_run(save=False)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/models/unified_jobs.py", line 301, in _set_status_and_last_job_run
    last_job_run = self._get_last_job_run()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/models/unified_jobs.py", line 296, in _get_last_job_run
    if self.last_job:
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/fields/related_descriptors.py", line 187, in __get__
    rel_obj = self.get_object(instance)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/fields/related_descriptors.py", line 154, in get_object
    return qs.get(self.field.get_reverse_related_filter(instance))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/query.py", line 435, in get
    raise self.model.DoesNotExist(
awx.main.models.unified_jobs.UnifiedJob.DoesNotExist: UnifiedJob matching query does not exist.
```
After looking at existing issues, I found [this one that may be related](https://github.com/ansible/awx/issues/13512) and [this PR that is still a draft](https://github.com/ansible/awx/pull/13553)

### AWX version

21.13.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Not sure it's a good way to reproduce, but before having this situation we updated the related project and launched the stuck job.

### Expected results

All jobs should be executed as expected, especially going from "pending" to "running" state.

### Actual results

After updating the project, the job stuck in running state and blocks all other jobs.

### Additional information

Just to clarify one thing: the stuck "running" job is not the syncing project job, but a manually launched job.
user: dangoncalves
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14727: state: open
title: Fix #2192 This addition will allow users to pass their Red Hat Satellite Credential values to their playbook
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->

 It will address this issue that was reported: https://github.com/ansible/awx/issues/2192

This feature will simply allow users to pass the values from the Red Hat Satellite credential to their playbook. A user will be able to run any included role from either redhat.satellite or theforeman.foreman collection with the Red Hat Satellite credential that they assign to their job template without having to worry about the following variables:

```
            'SATELLITE_SERVER_URL':     '{{ host }}',
            'SATELLITE_USERNAME':       '{{ username }}',
            'SATELLITE_PASSWORD':       '{{ password }}',
            'SATELLITE_VALIDATE_CERTS': '{{ verify_ssl }}',
            'FOREMAN__SERVER_URL':      '{{ host }}',
            'FOREMAN_USERNAME':         '{{ username }}',
            'FOREMAN_PASSWORD':         '{{ password }}',
            'FOREMAN_VALIDATE_CERTS':   '{{ verify_ssl }}',
```

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 0.1.dev33661+gb14518c
awx-manage --version 4.4.4
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->
  
The following was tested:

- The following changes worked with credential used as an inventory source. Their source variables would overwrite the environments set from the credential. This was to be expected.
- Each variable was passed to the playbook, as expected. 

<!--- Paste verbatim command output below, e.g. before and after your change -->
```
- hosts: localhost
  tasks: 

  - debug:
      msg:
      - "{{ lookup('env','SATELLITE_SERVER_URL') }}"
      - "{{ lookup('env','SATELLITE_USERNAME') }}"
      - "{{ lookup('env','SATELLITE_PASSWORD') }}"
      - "{{ lookup('env','SATELLITE_VALIDATE_CERTS') }}"
      - "{{ lookup('env','FOREMAN_SERVER_URL') }}"
      - "{{ lookup('env','FOREMAN_USERNAME') }}"
      - "{{ lookup('env','FOREMAN_PASSWORD') }}"
      - "{{ lookup('env','FOREMAN_VALIDATE_CERTS') }}"
```
Before
```
TASK [debug] *******************************************************************
task path: /runner/project/env.yml:4
ok: [localhost] => {
    "msg": [
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        ""
    ]
}
```
After
```
TASK [debug] *******************************************************************
task path: /runner/project/env.yml:4
ok: [localhost] => {
    "msg": [
        "https://satellite.lou.land",
        "admin",
        "redhat",
        false,
        "https://satellite.lou.land",
        "admin",
        "redhat",
        false
    ]
}
```
user: Greek-Fire
issue_14724: state: open
title: Collection: Fix using ID for schedule unified_job_template parameter (related #14458)
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->

Fixes using an ID for the `unified_job_template` parameter of the schedule module which was broken by #11135

Also tweaks a prior, similar fix for the workflow_job_template_node module in #11198, changing `get_one()` to `get_exactly_one()` which fails gracefully if the `unified_job_template` value can't be resolved.

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - Collection

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```

```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: pluto00987
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14723: state: open
title: Allow editing of run variables when relaunching a (failed) job
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

We have the ability to relaunch jobs on either failed hosts or have it run on all hosts. However, when relaunching a job, we cannot edit the variables that were used to run the job. 

It may happen that a job failed because a variable was wrong, or that one of the variables controls output and we need it for better debugging the failure (both have happened for us).

Please add the ability to edit run-time variables when relaunching a job.

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

1. Run a job
2. Go to job details page
3. Click "Relaunch"


### Current results

Variables JSON is shown, and is read-only. When clicking "Relaunch", there's no way to update values.

### Sugested feature result

Allow updating of variable values to a relaunch modal/page/dialog box.

### Additional information

_No response_
user: sagarkhushalani
issue_14722: state: open
title: add granularity to system cleanup job (#14384)
body: ##### SUMMARY
as described here, https://github.com/ansible/awx/issues/14384, this allows the system cleanup jobs to be more specific.

passing a list of resources in extra_vars allows adding specific arguments to the cleanup command.

to remain compatible, omitting the resource types in extra_vars results in the current behavior, all arguments are appended.

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - API

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 23.5.1.dev0+g2ac304d289.d20231213
```


user: bobumba
issue_14718: state: open
title: Bump sphinx-ansible-theme from 0.10.2 to 0.10.3 in /docs/docsite
body: Bumps [sphinx-ansible-theme](https://github.com/ansible-community/sphinx_ansible_theme) from 0.10.2 to 0.10.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/ansible-community/sphinx_ansible_theme/releases">sphinx-ansible-theme's releases</a>.</em></p>
<blockquote>
<h2>v0.10.3</h2>
<ul>
<li>update nav menu items (<a href="https://redirect.github.com/ansible-community/sphinx_ansible_theme/issues/97">#97</a>) <a href="https://github.com/oraNod"><code>@​oraNod</code></a></li>
<li>Run MyPy against 4 Python versions (<a href="https://redirect.github.com/ansible-community/sphinx_ansible_theme/issues/95">#95</a>) <a href="https://github.com/webknjaz"><code>@​webknjaz</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/ansible-community/sphinx_ansible_theme/commit/0ac1feace80d9306f434558aa8292fdef804b6e8"><code>0ac1fea</code></a> Merge pull request <a href="https://redirect.github.com/ansible-community/sphinx_ansible_theme/issues/99">#99</a> from ansible-community/dependabot/github_actions/actio...</li>
<li><a href="https://github.com/ansible-community/sphinx_ansible_theme/commit/625add859f209be331c9bcd479c979ed34633f2e"><code>625add8</code></a> Bump actions/setup-python from 4 to 5</li>
<li><a href="https://github.com/ansible-community/sphinx_ansible_theme/commit/e229afcb7c4114cfb4743990833226903466d82a"><code>e229afc</code></a> Merge pull request <a href="https://redirect.github.com/ansible-community/sphinx_ansible_theme/issues/98">#98</a> from ansible-community/pre-commit-ci-update-config</li>
<li><a href="https://github.com/ansible-community/sphinx_ansible_theme/commit/5ff61c2f5bc5a8e4ca0e18576aff2617620b058d"><code>5ff61c2</code></a> chore: pre-commit autoupdate</li>
<li><a href="https://github.com/ansible-community/sphinx_ansible_theme/commit/c0dbfabe1bbc63a3483cc7ac6cd38200b996f32f"><code>c0dbfab</code></a> Merge pull request <a href="https://redirect.github.com/ansible-community/sphinx_ansible_theme/issues/96">#96</a> from ansible-community/pre-commit-ci-update-config</li>
<li><a href="https://github.com/ansible-community/sphinx_ansible_theme/commit/8fba724f61a827f99d1e18c4c05df75757c3456c"><code>8fba724</code></a> Drop <code>pyparsing</code> from the lockfile</li>
<li><a href="https://github.com/ansible-community/sphinx_ansible_theme/commit/c0c6f0532ca77b6852015d72094319a24fbd7ea6"><code>c0c6f05</code></a> Run <code>pre-commit</code> with <code>--show-diff-on-failure</code> @ tox</li>
<li><a href="https://github.com/ansible-community/sphinx_ansible_theme/commit/5e57029de93b370f657a9a5bbdef433d0adfa2a7"><code>5e57029</code></a> Bump the <code>packaging</code> pin in lockfile to v23.2</li>
<li><a href="https://github.com/ansible-community/sphinx_ansible_theme/commit/1850d17204ab276e577202255e9dfa1f54fcf1e9"><code>1850d17</code></a> Stop running MyPy against Python 3.6</li>
<li><a href="https://github.com/ansible-community/sphinx_ansible_theme/commit/6806386c6c0551a9498a4c14c822cc7ea3f2ca04"><code>6806386</code></a> chore: pre-commit autoupdate</li>
<li>Additional commits viewable in <a href="https://github.com/ansible-community/sphinx_ansible_theme/compare/v0.10.2...v0.10.3">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sphinx-ansible-theme&package-manager=pip&previous-version=0.10.2&new-version=0.10.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

You can trigger a rebase of this PR by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>

> **Note**
> Automatic rebases have been disabled on this pull request as it has been open for over 30 days.

user: dependabot[bot]
issue_14703: state: open
title: Fix Delinea imports and import test
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

`DomainPasswordGrantAuthorizer` is unused in `awx/main/credential_plugins/tss.py`. Flake8 will most likely catch this on the next run so just want to get ahead of this. 

`awx/main/tests/functional/test_credential_plugins.py` will also need to be adjusted for its removal.

### AWX version

devel

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

n/a

### Operating system

n/a

### Web browser

_No response_

### Steps to reproduce

Run flake8 and functional tests locally, they will fail with unused imports. 

### Expected results

Tests pass without issue.

### Actual results

`ImportError: cannot import name 'DomainPasswordGrantAuthorizer' from 'awx.main.credential_plugins.tss' (/awx_devel/awx/main/credential_plugins/tss.py)` or an `unused import: DomainPasswordGrantAuthorizer is imported but not used` will show up

### Additional information

We can remove the try except block now as well if we want as the requirements file has been updated. I will pick this up if no one from the community wants to take it up
user: thedoubl3j
issue_14700: state: open
title: Color blind mode - UI Workflow Template
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Colorblind people have difficulty viewing condition-based flow types on the workflow template screen, which is color-based using the red/green colors.

The different anomalous condition types are protanomaly, which is a reduced sensitivity to **red** light, deuteranomaly which is a reduced sensitivity to **green** light (the most common form of colour blindness) and tritanomaly which is a reduced sensitivity to **blue** light (extremely rare).

![image](https://github.com/ansible/awx/assets/2206414/47003f60-7e6b-4f59-8895-4016e43aa869)


### Select the relevant components

- [X] UI
- [ ] API
- [x] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

- Create or Edit new Workflow Template
- Access the visualizer
- Add a new Node 
  - The condition is color-based (On Success, On Failure or Always)

### Current results

On the Workflow Template/visualizer screen, the only way to view the type of condition is by color, even with the legend activated/open.

### Sugested feature result

The Workflow Template can use distinct icons and text labels, like other pages (e.g., Job views)

![image](https://github.com/ansible/awx/assets/2206414/34384fca-fa69-44e1-82a0-d9922b3b317f)


### Additional information

Similar issue (different page) and some a11y discussions: [#8797](https://github.com/ansible/awx/issues/8797)
user: airtonbjunior
issue_14699: state: open
title: Link to docs in UI's Help Button needs to go to the AWX docs
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

The Help button link on the AWX UI currently goes to the controller docs. It needs to be re-addressed to the new AWX docs URL instead: https://ansible.readthedocs.io/projects/awx/en/latest/userguide/index.html

### AWX version

latest

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

MacOS

### Web browser

Chrome

### Steps to reproduce

1. Run an instance of AWX and log in with your credentials.
2. At the top of the screen, click (?) drop-down menu and select **Help**.
3. The controller docs open.

### Expected results

Help needs to go to: https://ansible.readthedocs.io/projects/awx/en/latest/userguide/index.html

### Actual results

Help goes to: https://docs.ansible.com/automation-controller/latest/html/userguide/index.html

### Additional information

Location of the Help button:
![image](https://github.com/ansible/awx/assets/7514801/d13227dc-68e0-4c75-a3ee-85878cdf4a89)

user: tvo318
issue_14698: state: open
title: Add option to use UDP for rsyslog
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
- Add UDP input for rsyslog
- Add setting option to use UDP for rsyslog
<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API
 - Other

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 23.5.1.dev2+ge97cfdfef1
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: TheRealHaoLiu
issue_14693: state: open
title: Failed to JSON parse a line from worker stream due to unexpected EOF(b'')
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

I've encountered an issue with some of my jobs in AWX 23.3.1, and I’m hoping to gather insights or solutions from anyone who might have faced a similar problem.

## Error Message
The execution fails with an error message on the details tab:
```
Failed to JSON parse a line from worker stream. Error: Expecting value: line 1 column 1 (char 0) Line with invalid JSON data: b'
```

## Environment
AWX Version: 23.3.1 Deployment Platform: Kubernetes Operator Version: 2.7.2

I'm inclined to think that this issue stems from a UI error during the process of logging data from the pod, although I'm not entirely certain.

Any Idea?  


### AWX version

23.3.1

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

ansible [core 2.16.0]

### Operating system

Linux

### Web browser

Firefox, Chrome

### Steps to reproduce

Randomly at executing some templates

### Expected results

Finish the Ansible playbook execution without errors

### Actual results

The Jobs don't fail, they just finish the execution with error:
```
Failed to JSON parse a line from worker stream. Error: Expecting value: line 1 column 1 (char 0) Line with invalid JSON data: b'
```

### Additional information

I tried using different Ansible EE version (included the latest one)
user: aryklein
issue_14687: state: open
title: Inventory sync from ini file in git repo/project fails when submodules are tracked
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Syncing an inventory from a git project fails, if the git submodules are tracked. The project itself syncs regardless if submodule tracking is enabled or disabled. The problem is only the inventory source job.

Example repo/project containing an inventory file and a submodule. The parse of inventory.ini fails if the submodule is tracked.

- inventory.ini
- roles/my-submodule

### AWX version

2.7.2

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

ansible [core 2.15.4]

### Operating system

AlmaLinux 9.3

### Web browser

Firefox

### Steps to reproduce

1. create a git repository
2. add a inventory ini
3. add a submodule to the repository
4. add the repository as a project in AWX 
5. Enable **track submodules**
6. Create a new inventory
7. add the inventory ini from the project as a source
8. sync

### Expected results

Hosts from the file should be added to the AWX inventory.

### Actual results

The sync fails.

### Additional information

Output from job:

Previous Task Failed: {"job_type": "project_update", "job_name": "USERNAME/REPO @ inventory-tests", "job_id": "993"}

```
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 500, in run
    self.build_project_dir(self.instance, private_data_dir)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 1634, in build_project_dir
    self.sync_and_copy(source_project, private_data_dir, scm_branch=inventory_update.inventory_source.scm_branch)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 791, in sync_and_copy
    return self.sync_and_copy_without_lock(project, private_data_dir, scm_branch=scm_branch)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 747, in sync_and_copy_without_lock
    sync_task.run(local_project_sync.id)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 94, in _wrapped
    return f(self, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/signals.py", line 81, in _wrapped
    return f(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 665, in run
    raise AwxTaskError.TaskError(self.instance, rc)
Exception: project_update 993 (failed) encountered an error (rc=None), please see task stdout for details.
```
user: fuggla
issue_14685: state: open
title: Added the :alt: attribute 
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
Added the :alt: attribute to display alt text for all image
<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->
related #14505 

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - Docs

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```

```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: Dule-martins
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_14684: state: open
title: related #14683 Implement podman's --pull=newer policy for execution environments
body: ##### SUMMARY
(Super trivial)
Implement podman's `--pull=newer` policy for Execution Environments as requested in #14683 .


##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
- Other: base application and Execution Environment model.

##### AWX VERSION
```
awx: 0.1.dev33643+g340710e
```


##### ADDITIONAL INFORMATION
This is super trivial: add a new `PULL_CHOICE` option for the ExecutionEnvironment object's `pull` attribute.

Podman defines these pull policies:
```
   --pull=policy
       Pull image policy. The default is missing.
              · always: Always pull the image and throw an error if the pull fails.
              · missing: Pull the image only if it could not be found in the local containers storage.  Throw an error if no image could be found and the pull fails.
              · never: Never pull the image but use the one from the local containers storage.  Throw an error if no image could be found.
              · newer:  Pull  if  the  image  on  the registry is newer than the one in the local containers storage.  An image is considered to be newer when the digests are different.  Comparing the time stamps is prone to errors.  Pull errors are suppressed if a local image was found.
```

The `newer` policy is the newest one of these and arguably does "The Right Thing" which in my limited experience is what a significant number of awx users expect.

This change merely adds the option to define a pull policy of `newer` for Execution Environment objects.
user: phess
issue_14683: state: open
title: Add podman's "--pull=newer" policy to Execution Environments
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Podman-run has had the `--pull=newer` policy for a while. In my experience supporting customers this policy is arguably more suitable than `--pull=always` in most situations. Most users just want podman to try to fetch the latest EE image if available and use the local copy otherwise. That's _exactly_ what `--pull=newer` does.

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

1. Have an EE image that may or may not have a newer version in its registry.
2. When an execution node is to run a job, it will run `podman run --pull=<policy>` to spin up the EE container. We want it to download the latest version of the EE image if one is available, otherwise use the one it has available.
3. `podman` will check with the registry whether a new image version is available (technically, it will simply check if the remote checksum differs from the local) and will download the image if it differs from the one already stored locally.


### Current results

The `--pull=newer` policy is not implemented in AWX. Only `always` and `missing` and `never` are implemented. There is currently no way to tell AWX to pull EE images only if newer ones are available.

### Sugested feature result

`podman` will download a new EE version only if a different one is available from the registry.
Also, as an arguably positive side-effect, in case the registry is faulty in any way, the `--pull=newer` policy will allow `podman` to succeed, whereas the `--pull=always` policy would fail in this scenario and cause the job to not run at all.

### Additional information

_No response_
user: phess
issue_14682: state: open
title: DTSTART of RRULE does not correspond to Schedule's First Run
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When creating a schedule from a workflow template that has previously been ran, the DTSTART of the RRULE will show a year, month, and date of the day selected when editing the schedule instead of the first day the schedule is to be executed. This is confusing since it does not accurately represent the start of the schedule.

### AWX version

23.2.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

Fedora CoreOS

### Web browser

_No response_

### Steps to reproduce

1. Create a workflow template, run it once
2. Create a schedule with recurrence pattern such that it will be executed sometime in the future, but make the `Start date/time` prior to that of the schedules first execution.

### Expected results

I believe the `dtstart` should be the `DTSTART` that appears within the `rrule` in the API endpoint.

It would probably make more sense that anytime the schedules `Frequency Details` are manipulated in the UI that the `DTSTART`  mirror the new `dtstart` generated.

### Actual results

`/api/v2/schedule/{id}` will then show an `rrule `with a `DTSTART` of the day the workflow template was ran or what the user selected as the `Start date/time` when editing the schedule, even though `dtstart` in API shows a first run when the schedule itself is actually to be first executed.

### Additional information

This does not appear to happen whenever the workflow template has never previously been ran.
user: paytonward6
issue_14680: state: open
title: Constructed inventory will fail if encrypted variables are used.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

The following constructed inventory will fail if the tested variable is containing encrypted data.

```yaml
---
plugin: constructed
strict: true
use_vars_plugins: true
groups:
  dict_group: test_dict is defined
```

If a host_vars contains this it will fail:
```yaml
test_dict:
  name: host2
  password: '{{ test_secret }}'
``` 
```yaml
test_secret: '{{ test_secret_vault }}'
test_secret_vault: !vault |
  $ANSIBLE_VAULT;1.2;AES256;all
  36343365643636653362623963373537393562663633333936323934333066653736373032616336
  6335363532663539333437393964663731336532383562340a633937393932626239363832383032
  38663333386665336337666563666264653334623138666165613030613132353366383965323864
  3038653332303664340a343636663030386362636138366431633462616663373933373834353765
  3136
```


### AWX version

23.4.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

-

### Operating system

-

### Web browser

Edge

### Steps to reproduce

You can find a complete test inventory here: https://github.com/janorn/awx_inventory.git

Us it and create a constructed inventory with the following config:
```yaml
---
plugin: constructed
strict: true
use_vars_plugins: true
groups:
  dict_group: test_dict is defined
```

Hit sync and it will fail.

### Expected results

A new inventory with only two hosts

### Actual results

'{'name': 'host2', 'password': '{{ test_secret }}'}'. Error was a <class
'ansible.errors.AnsibleError'>, original message: An unhandled exception
occurred while templating '{{ test_secret_vault }}'. Error was a <class
'ansible.parsing.vault.AnsibleVaultError'>, original message: Attempting to
decrypt but no vault secrets found . Could not add host host2 to group
dict_group: An unhandled exception occurred while templating '{'name': 'host2',
'password': '{{ test_secret }}'}'. Error was a <class
'ansible.errors.AnsibleError'>, original message: An unhandled exception
occurred while templating '{{ test_secret_vault }}'. Error was a <class
'ansible.parsing.vault.AnsibleVaultError'>, original message: Attempting to
decrypt but no vault secrets found
[WARNING]:  * Failed to parse /runner/inventory/constructed.yml with script
plugin: problem running /runner/inventory/constructed.yml --list ([Errno 8]
Exec format error: '/runner/inventory/constructed.yml')
ERROR! Completely failed to parse inventory source /runner/inventory/constructed.yml

### Additional information

```
'{'name': 'host2', 'password': '{{ test_secret }}'}'. Error was a <class
'ansible.errors.AnsibleError'>, original message: An unhandled exception
occurred while templating '{{ test_secret_vault }}'. Error was a <class
'ansible.parsing.vault.AnsibleVaultError'>, original message: Attempting to
decrypt but no vault secrets found . Could not add host host2 to group
dict_group: An unhandled exception occurred while templating '{'name': 'host2',
'password': '{{ test_secret }}'}'. Error was a <class
'ansible.errors.AnsibleError'>, original message: An unhandled exception
occurred while templating '{{ test_secret_vault }}'. Error was a <class
'ansible.parsing.vault.AnsibleVaultError'>, original message: Attempting to
decrypt but no vault secrets found
[WARNING]:  * Failed to parse /runner/inventory/constructed.yml with script
plugin: problem running /runner/inventory/constructed.yml --list ([Errno 8]
Exec format error: '/runner/inventory/constructed.yml')
ERROR! Completely failed to parse inventory source /runner/inventory/constructed.yml
```
user: janorn
issue_14677: state: open
title: RBAC to enable access for users to execute job template
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Hi Team,

I have the following requests , 
1) Enable job template execute permissions to users and they should not be able to view any other resources , administration tabs. It should be hidden , is this possible
2) job templates should be grouped within the folder based on usecase for easy access and identification

Thanks.

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Create a user with normal user access they should not be able to view any of the resources and templates until we provide access to them explicitly

### Current results

normal user able to view all the tabs including administration and all the job templates are being displayed , inorder to avoid confusion all job templates should be grouped together within the folder

### Sugested feature result

All administration option should be hidden
under resources except job templates everything else should be hiddent

### Additional information

_No response_
user: nx2804
issue_14675: state: open
title: Grafana Notification is not working.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary


Notification Configuration:
![image](https://github.com/ansible/awx/assets/123352775/32988151-8df8-4270-8102-60532484cec4)


**Error Logs of awx_task:** 

2023-11-18 16:40:43,959 DEBUG    awx.main.dispatch task 1d09d510-7c48-4b5f-b8be-9f59af200e32 starting awx.main.tasks.send_notifications(*[[43]])
2023-11-18 16:40:44,087 ERROR    awx.main.notifications.grafana_backend Error sending notification grafana: 400
2023-11-18 16:40:44,088 ERROR    awx.main.tasks Send Notification Failed Error sending notification grafana: 400
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 336, in send_notifications
    sent = notification.notification_template.send(notification.subject, notification.body)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/models/notifications.py", line 194, in send
    return backend_obj.send_messages([notification_obj])
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/notifications/grafana_backend.py", line 99, in send_messages
    raise Exception(smart_text(_("Error sending notification grafana: {}").format(r.status_code)))
Exception: Error sending notification grafana: 400
You have new mail in /var/spool/mail/root

### AWX version

AWX 17.1.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

centos

### Web browser

Chrome

### Steps to reproduce

1. Go to AWX Notification.
- Give a name: "alert to grafana"
- Description is blank
- Organization: Default
- Type: Grafana

2. Type Details:
- Grafana URL: Provide Grafana URL
- Grafana API key: Provide Grafana Service Account Token. Please note this service account token as admin privileges in Grafana.
- ID of the dashboard (optional): Left it blank
- ID of the panel (optional): Left it blank
- Tags for the annotation: ansible

### Expected results

Grafana annotation creation.

### Actual results

2023-11-18 16:40:43,049 DEBUG    awx.main.dispatch task 92d16647-28b7-49c2-8a1c-779c2d71ac9b starting awx.main.tasks.handle_work_success(*[])
2023-11-18 16:40:43,066 DEBUG    awx.main.dispatch task 050a0207-f36b-4276-9a63-8da9fa5bf8ff starting awx.main.scheduler.tasks.run_task_manager(*[])
2023-11-18 16:40:43,072 DEBUG    awx.main.scheduler Running Tower task manager.
2023-11-18 16:40:43,079 DEBUG    awx.main.scheduler Starting Scheduler
2023-11-18 16:40:43,105 DEBUG    awx.main.scheduler Finishing Scheduler
2023-11-18 16:40:43,959 DEBUG    awx.main.dispatch task 1d09d510-7c48-4b5f-b8be-9f59af200e32 starting awx.main.tasks.send_notifications(*[[43]])
2023-11-18 16:40:44,087 ERROR    awx.main.notifications.grafana_backend Error sending notification grafana: 400
2023-11-18 16:40:44,088 ERROR    awx.main.tasks Send Notification Failed Error sending notification grafana: 400
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 336, in send_notifications
    sent = notification.notification_template.send(notification.subject, notification.body)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/models/notifications.py", line 194, in send
    return backend_obj.send_messages([notification_obj])
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/notifications/grafana_backend.py", line 99, in send_messages
    raise Exception(smart_text(_("Error sending notification grafana: {}").format(r.status_code)))
Exception: Error sending notification grafana: 400

### Additional information

_No response_
user: learnwithvikasjha
issue_14672: state: open
title: Sync Job Fails on Galaxy Collection Install: Cert Validate Failed
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When syncing a job, if I include a collection/requirements.yml file the sync fails with the below error.

I suspect this happens because this is installed in our enterprise environment that uses a self-signed cert on all internet destined HTTPS communications at our web gateways/proxies.

`[WARNING]: Skipping Galaxy server https://galaxy.ansible.com/. Got an
unexpected error when getting available versions of collection
community.crypto: Unknown error when attempting to call Galaxy at
'https://galaxy.ansible.com/api/': <urlopen error [SSL:
CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local
issuer certificate (_ssl.c:1129)>. <urlopen error [SSL:
CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local
issuer certificate (_ssl.c:1129)>
ERROR! Unknown error when attempting to call Galaxy at 'https://galaxy.ansible.com/api/': <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)>. <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)>`

### AWX version

23.4.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.15.6

### Operating system

Red Hat Enterprise Linux release 8.8 (Ootpa)

### Web browser

Firefox

### Steps to reproduce

Install AWX-Operator 2.7.2 using rancher k3s
Sync a project from source control that has a requirements.yml file containing collections to install.

### Expected results

The project should sync.  AWX should install the collection.

### Actual results

Job sync fails, complaining about certificate validation with the below error on the Project Sync job details in AWX.
`[WARNING]: Skipping Galaxy server https://galaxy.ansible.com/. Got an
unexpected error when getting available versions of collection
community.crypto: Unknown error when attempting to call Galaxy at
'https://galaxy.ansible.com/api/': <urlopen error [SSL:
CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local
issuer certificate (_ssl.c:1129)>. <urlopen error [SSL:
CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local
issuer certificate (_ssl.c:1129)>
ERROR! Unknown error when attempting to call Galaxy at 'https://galaxy.ansible.com/api/': <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)>. <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)>`

### Additional information

I am able to work around this for non-standard collections like a10.acos_axapi by installing them to the collections folder in the project and using ansible.cfg to specify the collection directory.  However, I cannot get some of the collections that come with CLI ansible to install to that collection folder.
user: Dustin-Wi
issue_14667: state: open
title: DOCS: merge CONTRIBUTOR.md to the contributor guide
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

There are two sources of info for contributors:
- CONTRIBUTOR.md (in the repo)
- docs/docsite/rst/contributor/index.rst (is a source for https://ansible.readthedocs.io/projects/awx/en/latest/contributor/index.html)

Despite a lot of intersections, they are different + CONTRIBUTOR.md is irrelevant in terms of communication channels (it still asks contributors to go to mailing lists and IRC).

To improve contributor experience, I suggest:
1. merging CONTRIBUTOR.md to docs/docsite/rst/contributor/index.rst
2. then replacing CONTRIBUTOR.md's content with a link to docs/docsite/rst/contributor/index.rst

### AWX version

devel

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Open the files

### Expected results

Contributors have one source of truth, on https://ansible.readthedocs.io/projects/awx/en/latest/contributor/index.html. CONTRIBUTOR.md contains only a link to that page.

### Actual results

Contributors have 2 intersecting but not matching and partly relevant guides

### Additional information

_No response_
user: Andersson007
issue_14662: state: open
title: Awx not releading automatically
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When starting a job or workflow the output is not reloading the current status. Only when doing a refresh of the output the current output is shown.

### AWX version

23.4.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

minikube

### Modifications

no

### Ansible version

_No response_

### Operating system

Ubuntu 22.04

### Web browser

_No response_

### Steps to reproduce

Start a workflow or job

### Expected results

Seeing actual output without manually interference. 

### Actual results

The actual output is not shown only by a refresh the output is shown.

### Additional information

_No response_
user: Arjunasvr
issue_14657: state: open
title: Unintended (misleading display of) admin role 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

We are experiencing two linked phenomena regarding admin access roles on AWX resources:

1) Unintended (misleading display of) privileged access
When granting a team comprised of organization admin users e.g. 'use' role to a resource outside of their organization, those users show up with admin user role on that resource. (I think this is only a misleading display of User roles in the UI, that have no effect on the respective resource)

2) Unintended removal of org-admin-status
When using the [x] button on the admin chip showing up under the respective resource´s Access tab to remove such a user´s "unintended privileged access", this user´s organization admin status is removed.


### AWX version

23.3.1

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

openshift

### Modifications

no

### Ansible version

6.7/2.13.7

### Operating system

Windows 10/RHEL

### Web browser

Firefox, Chrome

### Steps to reproduce

1) Unintended (display of) privileged access on resource
* We need user_A that is admin within org_A and member in a team_A
* We need user_B that is admin within org_B
* As user_B we create an inventory_B
* As user_B (via the Access tab within inventory_B) we grant team_A `use` role on inventory_B
* user_A then shows up with `User Roles [Admin]` in addition to the granted team role

2) Unintended removal of org-admin-status
* Login as superuser, go to inventory_B´s Access tab and remove user_A´s admin access role via [x] next to the User role.
![grafik](https://github.com/ansible/awx/assets/59733711/5f78f873-e41a-4429-a91e-b569f5400471)
* Confirm -> user_A not only loses admin access to inventory_B, but also his admin status within org_A.


### Expected results

1) Users of team_A show up on the Access tab of inventory_B only with `Team Roles [Use]`. Generally speaking, organization admin roles should not be inherited by resources outside that organization.
2) AWX users should be made aware, which kind of access roles are displayed on a resource´s access tab (they might be about to remove a user´s organization admin status). At least the GUI prompt on delete should inform about which role is actually to be deleted (for team role removal there already is a helpful message)

### Actual results

1) Users of team_A show up with `User Roles [Admin]` on the Access tab of inventory_B
2) Attempts to remove such an "unintended privileged access" to inventory_B leads to removal of org_A admin status of user_A

### Additional information

From an AWX-User perspective: In the process of granting team_A `use` role, for some reason, user_A´s admin role from org_A seems to be applied to inventory_B (and can therefore be removed from within the inventory´s Access tab by a superuser).

Problem 2) might be fixed by fixing problem 1), but there are still organization internal resources that rightfully inherit organization admin  roles. So it might be helpful showing a warning if a removal of access also removes access somewhere else.

The  API endoint for the access_list of inventory_B `/api/v2/inventories/12/access_list/` shows user_A´s admin role as `indirect_access`
```json
{
    "count": 6,
    "next": null,
    "previous": null,
    "results": [
        {
            "id": 12,
            "type": "user",
            "url": "/api/v2/users/12/",
            "related": { ... },
            "summary_fields": {
                "direct_access": [
                    {
                        "role": {
                            "id": 4602,
                            "name": "Use",
                            "description": "Can use the inventory in a job template",
                            "team_id": 13,
                            "team_name": "team_A",
                            "team_organization_name": "org_A",
                            "resource_name": "inventory_B",
                            "resource_type": "inventory",
                            "related": {
                                "inventory": "/api/v2/inventories/80/"
                            },
                            "user_capabilities": {
                                "unattach": true
                            }
                        },
                        "descendant_roles": [
                            "read_role",
                            "use_role"
                        ]
                    }
                ],
                "indirect_access": [
                    {
                        "role": {
                            "id": 4570,
                            "name": "Admin",
                            "description": "Can manage all aspects of the organization",
                            "resource_name": "org_A",
                            "resource_type": "organization",
                            "related": {
                                "organization": "/api/v2/organizations/190/"
                            },
                            "user_capabilities": {
                                "unattach": false
                            }
                        },
                        "descendant_roles": [
                            "read_role",
                            "use_role"
                        ]
                    }
                ]
            },
            "username": "user_A",
            "first_name": "",
            "last_name": "",
            "email": "",
            "is_superuser": false,
            "is_system_auditor": false,
            "ldap_dn": "",
            "external_account": null,
            ...
        }, ...
    ]
}
```
user: 2and3makes23
issue_14655: state: open
title: AWX doesn't send Twilio SMS Notification to multiple destinations
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

- Twilio Notification only sends an SMS notification to a first-line of phone numbers list of Destination SMS Number(s) configuration, it ignores other phone numbers written from the second lines.
- Twilio website mentions that their API is able to send list of numbers:
- https://support.twilio.com/hc/en-us/articles/223181548-Can-I-set-up-one-API-call-to-send-messages-to-a-list-of-people-
- AAP website mentions that we can set the phone numbers list in as a destination.
- https://docs.ansible.com/automation-controller/latest/html/userguide/notifications.html#twilio

### AWX version

all AWX version

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Configure Destination SMS Number(s) in Twilio Notification with multiple phone numbers and run a Test.
```
+818012345678
+819012345678
```

### Expected results

Twilio Notification sends SMS notifications to all phone numbers written in Destination SMS Number(s).

### Actual results

Twilio Notification only sends an SMS notification to a first line phone number written in Destination SMS Number(s).

### Additional information

_No response_
user: mahoutukaisali
issue_14652: state: open
title: OIDC Provider to Prove Attributes of Jobs to 3rd Parties
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

I would like a way for an ansible job created by AWX to prove to 3rd party platforms its attributes, such as its

- job name 
- the actor / cronjob that launched the job
- target hostname
- starting timestamp

If this were in place, I could set hashicorp vault to trust AWX without sharing app roles for every job and instead create those policies inside of vault. 

Github has something similar for github actions:
https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect


### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Building in an OIDC provider will allow jobs to be able to authenticate to 3rd parties without hardcoded secrets per job/role/workflow. 

### Current results

not implemented. secrets are hardcoded

### Sugested feature result

The result to an ansible workflow would be 
1) an environment variable in the running job who contents are a signed JWT which 
2) can be verified by AWX and
3) has useful attributes (issue time, job name, hostname, etc)



### Additional information

I think there are 3 components here: 

1. OIDC Provider (could be pulled in from https://django-oidc-provider.readthedocs.io/en/master/) 
2. At what step should the JWT be injected? It needs to be close to "run()" because it needs all the attributes. 
3. Configuration (how do we initialize the server secret? where does it go? how is it rolled? how should job specify that it wants a JWT?)
user: freddierice
issue_14645: state: open
title:  adhoc jobs block other jobs from being processed in the queue
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When you submit an adhoc job all other jobs (other adhoc, and job templates) are stuck in a pending state until the running adhoc job completes.

### AWX version

23.4.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Firefox

### Steps to reproduce

1. submit any adhoc job (I used a shell command sleep 30; whoami)
2. submit a job from "Templates"
3. observe the job queue

### Expected results

all jobs in the unified job queue should process according to capacity. I expect to see more than one job in a running state.

### Actual results

The adhoc job is in a running state. All other jobs are stuck in pending waiting for the adhoc command to finish.

### Additional information

I am using a container group to run jobs.
Capacity of the managed nodes have been visually verified to be < 25% cpu and mem usage.
I tried creating a duplicate container group for job templates, which still was stuck in pending, but now with a message waiting for adhoccommand-371 to finish
user: jchilcher-godaddy
issue_14643: state: open
title: ARM64 images built and Available on AWX repository
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

The feature I'm requesting is officially built ARM images. I note that support has been added to build the images yourself, however not an option for a lot of people out there.

Implementation of this proposal requires no additional infrastructure, just some minor changes to the build commands.

Currently docker has buildx. This tool enables cross-platform building of containers for countless architectures. best of all, this occurs within a single build command, `docker buildx build --platform=`. Using this command instead of the original `docker build`. cross-compiles for each of the platforms listed and places all images within the same manifest. In addition, you can prepend `--push` to push all built images and the manifest to the container registry.

I currently use this method to cross-compile all of my container images.

What requires changing

docker build command. 
``` diff
-docker build -t {{ awx_image }}:{{ awx_image_tag }} \
+docker buildx build -t {{ awx_image }}:{{ awx_image_tag }} \
        -f {{ dockerfile_name }} \
        --build-arg VERSION={{ awx_version }} \
        --build-arg SETUPTOOLS_SCM_PRETEND_VERSION={{ awx_version }} \
        --build-arg HEADLESS={{ headless }} \
+      --platforms=linux/amd64,linux/arm64
+      --push
        .
```
notes:
- _` --platforms=linux/amd64,linux/arm64` this will build both amd64 and arm64 together and place them in a single manifest_
- _`--push` this will push everything together to the container registry_

Every `FROM` declaration within dockerfiles
``` diff
+ARG TARGETPLATFORM=linux/amd64,linux/arm64

-FROM quay.io/centos/centos:stream9 as builder
+FROM --platform=$TARGETPLATFORM quay.io/centos/centos:stream9 as builder

```
notes:
- _`ARG TARGETPLATFORM=linux/amd64,linux/arm64` sets ` TARGETPLATFORM` variable to have a default value if not specified at runtime_
- _`FROM --platform=$TARGETPLATFORM` tells docker to use the specified architecture for the container. if this value is omitted from the `FROM` declaration, the build systems architecture is used._

For cross compilation to work packages binfmt-support and qemu-user-static (these are the debian package name). Both together allow the running of binaries of a different architecture. Or you can do the build from a docker container (the method I use), which contains everything required fro the cross-compilation to work. Prior to building you have to activate modules in the kernal for other binaries to run. `update-binfmts --enable`

I'm not familiar of how the github CI/CD pipelines work, however I am successfully doing cross-compilation within the gitlab ecosystem. their runners are all AMD64. You maybe able to convert this stripped down gitlab ci job. Original [here](https://gitlab.com/nofusscomputing/projects/gitlab-ci/-/blob/development/docker/build.gitlab-ci.yaml)


``` yaml
.build_docker_container:
  stage: build
  image: 
    name: nofusscomputing/docker-buildx-qemu:dev
    pull_policy: always
  services:
    - name: docker:23-dind
      entrypoint: ["env", "-u", "DOCKER_HOST"]
      command: ["dockerd-entrypoint.sh"]
  variables:
    DOCKER_HOST: tcp://docker:2375/
    DOCKER_DRIVER: overlay2
    DOCKER_DOCKERFILE: dockerfile
    # See https://github.com/docker-library/docker/pull/166
    DOCKER_TLS_CERTDIR: ""
  before_script:
    - git submodule foreach git submodule update --init
    - if [ "0$JOB_ROOT_DIR" == "0" ]; then ROOT_DIR=gitlab-ci; else ROOT_DIR=$JOB_ROOT_DIR ; fi
    - echo "[DEBUG] ROOT_DIR[$ROOT_DIR]"
    - docker info
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - pip3 install setuptools wheel
      # see: https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/1861 
      # on why this `docker run` is required. without it multiarch support doesnt work.
    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    - update-binfmts --display
    - update-binfmts --enable # Important: Ensures execution of other binary formats is enabled in the kernel
    - docker buildx create --driver=docker-container --driver-opt image=moby/buildkit:v0.11.6 --use
    - docker buildx inspect --bootstrap

  script: 
    - update-binfmts --display
    - |
        docker buildx build --platform=$DOCKER_IMAGE_BUILD_TARGET_PLATFORMS . \
          --label org.opencontainers.image.created="$(date '+%Y-%m-%d %H:%M:%S%:z')" \
          --label org.opencontainers.image.documentation="$CI_PROJECT_URL" \
          --label org.opencontainers.image.source="$CI_PROJECT_URL" \
          --label org.opencontainers.image.revision="$CI_COMMIT_SHA" \
        --push \
        --build-arg CI_JOB_TOKEN=$CI_JOB_TOKEN --build-arg CI_PROJECT_ID=$CI_PROJECT_ID --build-arg CI_API_V4_URL=$CI_API_V4_URL \
        --file $DOCKER_DOCKERFILE \
        --tag $DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG;

        docker buildx imagetools inspect $DOCKER_IMAGE_BUILD_REGISTRY/$DOCKER_IMAGE_BUILD_NAME:$DOCKER_IMAGE_BUILD_TAG;

```
summary:
- starts a docker container `nofusscomputing/docker-buildx-qemu:dev` where all commands are run from, including build
- as the container is dind, links to docker via socket
- for containers that use python packages, `setuptools` and `wheel` wheel are required if the package requires compilation
- `update-binfmts --enable` enable kernal modules
- `docker buildx create --driver=docker-container --driver-opt image=moby/buildkit:v0.11.6 --use` sets up buildx to use buildkit
- `docker buildx build {etc}...` all in one command to cross-compile build, manifest creation and push to a container registry .
- the final `inspect` shows the manifest and containing images.

I'm happy to assist or if ok, start a PR. However the latter I will require someone with Github action knowledge to walk me through adjusting.

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

.

### Current results

.

### Sugested feature result

That https://quay.io/repository/ansible/awx contains both amd64 and arm64 images. Yes, I know different repos, same same for the operator and ansible-ee images.

### Additional information

_No response_
user: jon-nfc
issue_14638: state: open
title: awx.awx.instance is not idempotent
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Running awx.awx.instance more than once, with ```node_state: installed```, generates an error




### AWX version

23.2.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.15.5

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

``` yaml
- name: create_instance | Manage the execution node instance
  delegate_to: localhost
  awx.awx.instance:
    controller_config_file: "{{ gv_awx_controller_config_file }}"
    hostname: "{{ ansible_host }}"
    managed_by_policy: true
    node_state: installed
    node_type: execution
    capacity_adjustment: "{{ _instance_capacity_adjustment }}"
    enabled: true
```
Run the task more than once

### Expected results

Expected it to just change the capacity adjustment

### Actual results

```FAILED! => {"changed": false, "msg": "Unable to update instance REDACTED see response", "response": {"json": {"node_state": ["Can only change instances to the 'deprovisioning' state."]}, "status_code": 400}}```

### Additional information

_No response_
user: alice-rc
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14634: state: open
title: Add Hetzner Cloud Inventory source
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->

This PR adds support for the dynamic inventory source "Hetzner Cloud" (`hetzner.hcloud.hcloud`).

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API
 - UI
 - Collection
 - CLI
 - Docs

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 23.3.2.dev19+g4a46f258c0
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

This PR requires https://github.com/ansible/awx-ee/pull/219 to be merged
user: tomsiewert
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14633: state: open
title: Copy of job template loses playbook setting when changing project
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When I copy a job template with the ![grafik](https://github.com/ansible/awx/assets/2835065/b7a59f73-6520-485a-8869-593ac64d7d5e) button and edit the copy, as soon as I changed the used project, the playbook field empties itself magically. This makes the copy a lesser copy, which I guess is not intended?


### AWX version

23.3.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.15.3

### Operating system

Ubuntu 22.04

### Web browser

_No response_

### Steps to reproduce

Firefox and Chrome are affected at least.

When I copy a job template with the ![grafik](https://github.com/ansible/awx/assets/2835065/b7a59f73-6520-485a-8869-593ac64d7d5e) button and edit the copy, as soon as I changed the used project, the playbook field empties itself magically.


### Expected results

The playbook should not be changed as in earlier AWX versions like 15.

### Actual results

The playbook should not be modified.

### Additional information

_No response_
user: HenriWahl
issue_14631: state: open
title: AWX install on redhat using k8s
body: I have stuck to install AWX on redhat 8.2 using plain kubernetes k8s not k3 or minikube, I am getting crash containers and all yml and pv code is ok, can you pls make package to install because instead of writing playbook I am spending time on install AWX for 80% of the day, we will soon decide to left AWX to ADO because once upgrade in AWX there are problems to upgrade and from scratch we have to install, need quick executable rpm package which will be auto upgrade else no point to go for it
user: himanshukgit
issue_14629: state: open
title: Add a system job template and schedule to cleanup old schedules
body: ##### SUMMARY
Add a system job template and schedule to cleanup "old" schedules

related #10307

There is another PR  #10689 but this looks abandoned to me, and the logic, that defines what schedules should be deleted, is a bit different to mine.


We are generating many schedules that run just once. So our main pain are the schedules with "next_run" == null. After the schedules are triggered they are still "enabled".

When a schedule is disabled next_run is also set to null.

I added "modified__lt=self.cutoff" because I think it is a good compromise for this two use cases.
- Enabled schedules with no 'next_run' will be removed after N days
- Disabled schedules will be removed N days after they were disabled


I'm not sure if this suites for everyone. 
I'm also not sure if the description of this system job, that occurs on multiple files in the repo is ok.
Please let me know if I should change something.




##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - CLI
 - Docs
 - Other

##### AWX VERSION
```
awx: 23.3.2.dev16+g86590ea820
```

user: no-12
issue_14628: state: open
title: Implement project pulling from Azure DevOps using Service Principals
body: ##### SUMMARY
This adds support for syncing a project from Azure DevOps using an Azure Service Principal.

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - API
 - UI
 - Other

##### ADDITIONAL INFORMATION
In order to use this feature, create an Azure Resource Manager type secret, and assign this to the project (this PR allows attaching either an scm or azure_rm secret to projects).
The associated service principal must have Basic level access to the DevOps organization, and at least Reader level access to the Project.

Note that the current implementation uses `ansible.builtin.uri` to retrieve an access token.
I have submitted https://github.com/ansible-collections/azure/pull/1318 to implement this as a separate Ansible module, after which this could be replaced by:

```
azure.azcollection.azure_rm_access_token:
  subscription_id: "{{ azure_subscription_id }}"
  client_id: "{{ azure_client_id }}"
  secret: "{{ azure_client_secret }}"
  tenant: "{{ azure_tenant }}"
  scopes:
    - 499b84ac-1321-427f-aa17-267ca6975798/.default
```
user: puiterwijk
issue_14627: state: open
title: awx.api.generics Login failed for user admin 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

setup awx via awx-operator at k8s, then could not login to console via admin and passwd(retrieve from secret)
![image](https://github.com/ansible/awx/assets/70371382/39d4f6f7-ae03-4190-a832-5c3846862570)

we could see the below error from awx-web container when login https://awx.domain.com/#/login :
2023-11-03 15:54:34,350 WARNING  [58c5784459c4409e90925405196e882a] awx.api.generics Login failed for user admin from 10.2.3.105
2023-11-03 15:54:34,545 WARNING  [58c5784459c4409e90925405196e882a] django.request Unauthorized: /api/login/
2023-11-03 15:54:34,545 WARNING  [58c5784459c4409e90925405196e882a] django.request Unauthorized: /api/login/

we could see the below error from awx-web container when login https://awx.domain.com/api/login/ 
![image](https://github.com/ansible/awx/assets/70371382/a2d7ccd1-2524-4cfc-8be7-54636e8af3f2)

2023-11-03 21:33:07,416 INFO     [1c61562b1cb9409788a545a27b170217] awx.api.generics status 401 received by user AnonymousUser attempting to access /api/v2/me/ from 10.2.1.233
2023-11-03 21:33:07,423 WARNING  [1c61562b1cb9409788a545a27b170217] django.request Unauthorized: /api/v2/me/
2023-11-03 21:33:07,423 WARNING  [1c61562b1cb9409788a545a27b170217] django.request Unauthorized: /api/v2/me/
[pid: 35|app: 0|req: 41/81] 10.2.1.233 () {72 vars in 1404 bytes} [Fri Nov  3 21:33:07 2023] GET /api/v2/me/ => generated 7493 bytes in 53 msecs (HTTP/1.1 401) 13 headers in 565 bytes (1 switches on core 0)
10.2.1.233 - - [03/Nov/2023:21:33:07 +0000] "GET /api/v2/me/ HTTP/1.1" 401 7493 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" "127.0.0.1"
2023-11-03 21:33:23,939 INFO     [dacf998a19354de6a09d1272a907e3da] awx.api.generics status 401 received by user AnonymousUser attempting to access /api/v2/me/ from 10.2.1.233
2023-11-03 21:33:23,947 WARNING  [dacf998a19354de6a09d1272a907e3da] django.request Unauthorized: /api/v2/me/

### AWX version

awx-operator:2.7.1

### Select the relevant components

- [X] UI
- [X] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

yes

### Ansible version

_No response_

### Operating system

Azure Kubernetes Cluster

### Web browser

Chrome, Safari, Edge

### Steps to reproduce

1. get password from secret
kubectl get secrets -n awx | grep -i admin-password
kubectl get secret -n awx wx01-admin-password -o go-template='{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}'
2. login https://awx.domain.com/#/login 
3. failed with error

### Expected results

login to console

### Actual results

could not login console and return error:
Invalid username or password. Please try again.

### Additional information

_No response_
user: suojun-hao
issue_14624: state: open
title: OIDC SCOPE
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

we configured OIDC with our IDP

When we try to log we have an error that scope is invalid. We don't found how to change the scope.

regards

### AWX version

23.3.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

openshift

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Firefox, Chrome

### Steps to reproduce

configure OIDC
try to login through OIDC

### Expected results

Login successful

### Actual results

Login unsuccessful.


end with error invalid scope

### Additional information

_No response_
user: anthonyglidic
issue_14617: state: open
title: Do not reference cache on init of db wrapper
body: ##### SUMMARY
We have a problem getting a signal 6 when uWSGI workers reach end of their life.

Found out that this doesn't happen if we don't use our custom database wrapper. I would love nothing more than to axe this thing and revert back to `"ENGINE": "django.db.backends.postgresql",`, but feel obligated to make a perfunctory effort to salvage this debugging tool, which is this PR.

We have a string definition of both the cache and database in Django settings. I have no idea what order Django resolves and initializes them in, but one cannot assume the other is initialized in order to work, so this is making the most obvious of obvious fixes to avoid referencing the _redis_ cache in order to create the _postgres_ cursor.

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API


user: AlanCoding
issue_14615: state: open
title: Limit overall job number (running and pending)
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Currently, there exists some ways to limit fork for a same job, but there is no way to limit overall job number (ie in the entire plateform).

High number of running or pending jobs may lead to an unstable plateform and high CPU consumption for web containers.

It could be useful if there exists a mechanism that permit to limit this in order to have a more stable plateform.

It may be values setted in /settings/jobs. When creating a new job, if job_running_limit is reach then job goes to pending and if job_pending_limit is reach, then job creation is rejected.

### Select the relevant components

- [X] UI
- [X] API
- [x] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Set a high number of jobs

### Current results

High CPU consumption for web containers

### Sugested feature result

When creating a new job, if job_running_limit is reach then job goes to pending and if job_pending_limit is reach, then job creation is rejected.

### Additional information

_No response_
user: dangoncalves
issue_14611: state: open
title: DELETE api/v2/projects/ 502
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

This issue occurs when I try to delete a specific project using the UI or the API.
This project is not linked to any other resource it's an empty project and also using the Default organisation.
Other projects doesn't give an issue however there are two projects that can't be removed.

Is there a workaround for this?
Is this something that you guys already are working on?

### AWX version

22.1.0 

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

openshift

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome, Edge

### Steps to reproduce

On the UI just select the delete button.
Curl command on the API.
Using the awx.awx ansible module.


### Expected results

Resource deleted

### Actual results

Issue: Failed to delete project.
DELETE api/v2/projects/484/ 502

### Additional information

_No response_
user: crzysan
issue_14610: state: open
title: Make awx.awx.role accept a list input like projects
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Looking at documentation, `role `is a single value.
We have the use case where we want to give users both read (to see error log in AWX) and execute privileges.

https://docs.ansible.com/ansible/latest/collections/awx/awx/role_module.html#parameter-role

I'd like to see it become able to handle multiple values like what happened with `project`, which got deprecated for `projects`.

Obviously I can loop, so there is a workaround, but it shouldn't be necessary to do 2 api calls and create 2 policies for something so simple.

### Select the relevant components

- [ ] UI
- [X] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Now:

```
- name: Give team Y read and execute access to X
 awx.awx.tower_role:
   team: "Y"
   tower_host: "{{ awx_server }}"
   validate_certs: false
   tower_oauthtoken: "{{ tower_token }}"
   role: execute
   job_templates: X
   state: present

- name: Give team Y read and execute access to X
 awx.awx.tower_role:
   team: "Y"
   tower_host: "{{ awx_server }}"
   validate_certs: false
   tower_oauthtoken: "{{ tower_token }}"
   role: read
   job_templates: X
   state: present
```

Desired:

```
- name: Give team Y read and execute access to X
 awx.awx.tower_role:
   team: "Y"
   tower_host: "{{ awx_server }}"
   validate_certs: false
   tower_oauthtoken: "{{ tower_token }}"
   roles: [ execute, read ]
   job_templates: X
   state: present
```

### Current results

If user is only assigned execute privilege, it cannot see why the task failed in AWX.

### Sugested feature result

Be able to assign 2 roles with one policy.

### Additional information

_No response_
user: cthenb
issue_14609: state: open
title: /api/v2/job_events/1234/ throws 500 error
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Fetching any single job_event from the API throws a 500 Internal Server Error. To be precise:
```json
{"detail":"A server error has occurred."}
```


### AWX version

23.3.1

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Fetch any single job_event from the API.

### Expected results

Be provided with a response as it is contained e.g. in the `/api/v2/jobs/1234/job_events/` endpoint (which actually contains a link to this very API URL for every single job event).

### Actual results

```json
{"detail":"A server error has occurred."}
```

### Additional information

Log from the awx-web container:
```
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/lib64/python3.9/contextlib.py", line 79, in inner
    return func(*args, **kwds)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/views/decorators/csrf.py", line 56, in wrapper_view
    return view_func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/views/generic/base.py", line 104, in view
    return self.dispatch(request, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/api/generics.py", line 332, in dispatch
    return super(APIView, self).dispatch(request, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
    raise exc
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/generics.py", line 208, in get
    return self.retrieve(request, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/mixins.py", line 54, in retrieve
    instance = self.get_object()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/generics.py", line 83, in get_object
    queryset = self.filter_queryset(self.get_queryset())
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/api/generics.py", line 365, in get_queryset
    qs = self.model._default_manager
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/api/views/__init__.py", line 3545, in model
    if self.is_partitioned:
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/api/views/__init__.py", line 3541, in is_partitioned
    return int(self.kwargs['pk']) > unpartitioned_event_horizon(models.JobEvent)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/api/views/__init__.py", line 133, in unpartitioned_event_horizon
    cursor.execute(f'SELECT MAX(id) FROM _unpartitioned_{cls._meta.db_table}')
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 87, in _execute
    return self.cursor.execute(sql)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/psycopg/cursor.py", line 723, in execute
    raise ex.with_traceback(None)
django.db.utils.InternalError: current transaction is aborted, commands ignored until end of transaction block
```

The Postgres log contains the real error:
```
LOG:  execute <unnamed>: BEGIN
LOG:  statement: SELECT MAX(id) FROM _unpartitioned_main_jobevent
ERROR:  relation "_unpartitioned_main_jobevent" does not exist at character 21
STATEMENT:  SELECT MAX(id) FROM _unpartitioned_main_jobevent
LOG:  statement: SELECT MAX(id) FROM _unpartitioned_main_jobevent
ERROR:  current transaction is aborted, commands ignored until end of transaction block
STATEMENT:  SELECT MAX(id) FROM _unpartitioned_main_jobevent
LOG:  execute <unnamed>: ROLLBACK
```
user: jplitza
issue_14606: state: open
title: KeyError querying 'Address' key out of the CyberArk object using CyberArk Central Credential Provider Lookup
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Using AWX 23.3.0 and trying to fetch a credential (account) 'Address' from CyberARK PAM using Central Credential Provider version 12.6 we encounter a KeyError.

Fetching object property '' ('Content') or 'UserName' works flawlessly and using PowerShell the same query works and Address field in the JSON response is there and has the proper value.

related #13411
related #13402
related #5743

### AWX version

23.3.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

core 2.12.5.post0

### Operating system

CentOS Stream release 8

### Web browser

Chrome

### Steps to reproduce

Reproduceable with a CyberARK PAM account that has the Address field populated and an AWX credential of Credential Type "VMware vCenter" passing through the lookup of the 'VCenter Host' details using AIM (External Secret Management System) to a self managed safe using this data:

```
{
  "reason": "no particular",
  "object_query": "Safe=XXXXXX_Self;Object=awx-vcenter-test",
  "object_property": "Address",
  "object_query_format": "Exact"
}
```





### Expected results

env var VMWARE_HOST set with the value in the Address field of the CyberArk credential

### Actual results

Test button in Credential Edit->External Secret Management System->Metadata page will show a KeyError pop up, and playbook in debug mode using this credential fails with these messages:

```
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 528, in run
    credential.credential_type.inject_credential(credential, env, self.safe_cred_env, args, private_data_dir)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/models/credential/__init__.py", line 455, in inject_credential
    getattr(builtin_injectors, credential.credential_type.namespace)(credential, injected_env, private_data_dir)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/models/credential/injectors.py", line 71, in vmware
    env['VMWARE_HOST'] = cred.get_input('host', default='')
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/models/credential/__init__.py", line 279, in get_input
    return self._get_dynamic_input(field_name)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/models/credential/__init__.py", line 313, in _get_dynamic_input
    return input_source.get_input_value()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/models/credential/__init__.py", line 1258, in get_input_value
    return backend(**backend_kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/credential_plugins/aim.py", line 115, in aim_backend
    raise KeyError('Property {} not found in object'.format(object_property))
KeyError: 'Property Address not found in object'
```

### Additional information

Using another instance (same versions AWX and CCP) we can reproduce this error.
user: nielskroon
issue_14602: state: open
title: awx.awx.execution_environment
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

If the execution environment was setup with an Organization there is no way to remove that and make it 'Globally Available'.

### AWX version

23.2.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

core 2.15.4

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Setup an execution environment using awx.awx.execution_environment and setting the organization to something.
Then try to remove that organization using awx.awx.execution_environment and setting the organization to:
organization: None
organization: ""
organization: "Globally Available" <-- this gets an error ```"msg": "Request to /api/v2/organizations/?name=Globally+Available returned 0 items, expected 1"```

### Expected results

organiztion would be removed and thus get set to "Globally Available"

### Actual results

``` yml
TASK [execution_environments : Before] ********************
ok: [awx20] => {
    "query_before": [
        {
            "created": "2023-10-20T16:36:26.094111Z",
            "credential": 1,
            "description": "Standard EE v260",
            "id": 3,
            "image": "<REDACTED>/ee-standard:260",
            "managed": false,
            "modified": "2023-10-25T16:43:19.720398Z",
            "name": "ee-standard-260",
            "organization": 2,
            "pull": "missing",
            "related": {
                "activity_stream": "/api/v2/execution_environments/3/activity_stream/",
                "copy": "/api/v2/execution_environments/3/copy/",
                "created_by": "/api/v2/users/1/",
                "credential": "/api/v2/credentials/1/",
                "modified_by": "/api/v2/users/1/",
                "organization": "/api/v2/organizations/2/",
                "unified_job_templates": "/api/v2/execution_environments/3/unified_job_templates/"
            },
            "summary_fields": {
                "created_by": {
                    "first_name": "",
                    "id": 1,
                    "last_name": "",
                    "username": "<REDACTED>"
                },
                "credential": {
                    "cloud": false,
                    "credential_type_id": 17,
                    "description": "",
                    "id": 1,
                    "kind": "registry",
                    "kubernetes": false,
                    "name": "Default Execution Environment Registry Credential"
                },
                "modified_by": {
                    "first_name": "",
                    "id": 1,
                    "last_name": "",
                    "username": "<REDACTED>"
                },
                "organization": {
                    "description": "<REDACTED>",
                    "id": 2,
                    "name": "Org1"
                },
                "user_capabilities": {
                    "copy": true,
                    "delete": true,
                    "edit": true
                }
            },
            "type": "execution_environment",
            "url": "/api/v2/execution_environments/3/"
        }
    ]
}

TASK [execution_environments : Manage AWX Execution Environments] ***
ok: [awx20 -> localhost] => (item=Managing execution environment ee-standard-260 = present) => {
    "_ee_info": {
        "credential": "Default Execution Environment Registry Credential",
        "desc": "Standard EE v260",
        "image": "<REDACTED>/ee-standard:260",
        "name": "ee-standard-260",
        "pull": "missing",
        "state": "present"
    },
    "ansible_loop_var": "_ee_info",
    "changed": false,				<------ Not changing
    "id": 3,
    "invocation": {
        "module_args": {
            "controller_config_file": "/tmp/awx20-controller_config_file",
            "controller_host": null,
            "controller_oauthtoken": null,
            "controller_password": null,
            "controller_username": null,
            "credential": "Default Execution Environment Registry Credential",
            "description": "Standard EE v260",
            "image": "<REDACTED>/ee-standard:260",
            "name": "ee-standard-260",
            "new_name": null,
            "organization": "",			<------ Note it should be setting it to an empty string
            "pull": "missing",
            "request_timeout": null,
            "state": "present",
            "validate_certs": null
        }
    }
}

TASK [execution_environments : After] *********************
ok: [awx20] => {
    "query_after": [
        {
            "created": "2023-10-20T16:36:26.094111Z",
            "credential": 1,
            "description": "Standard EE v260",
            "id": 3,
            "image": "<REDACTED>/ee-standard:260",
            "managed": false,
            "modified": "2023-10-25T16:43:19.720398Z",
            "name": "ee-standard-260",
            "organization": 2,
            "pull": "missing",
            "related": {
                "activity_stream": "/api/v2/execution_environments/3/activity_stream/",
                "copy": "/api/v2/execution_environments/3/copy/",
                "created_by": "/api/v2/users/1/",
                "credential": "/api/v2/credentials/1/",
                "modified_by": "/api/v2/users/1/",
                "organization": "/api/v2/organizations/2/",
                "unified_job_templates": "/api/v2/execution_environments/3/unified_job_templates/"
            },
            "summary_fields": {
                "created_by": {
                    "first_name": "",
                    "id": 1,
                    "last_name": "",
                    "username": "<REDACTED>"
                },
                "credential": {
                    "cloud": false,
                    "credential_type_id": 17,
                    "description": "",
                    "id": 1,
                    "kind": "registry",
                    "kubernetes": false,
                    "name": "Default Execution Environment Registry Credential"
                },
                "modified_by": {
                    "first_name": "",
                    "id": 1,
                    "last_name": "",
                    "username": "<REDACTED>"
                },
                "organization": {
                    "description": "<REDACTED>",
                    "id": 2,
                    "name": "Org1"
                },
                "user_capabilities": {
                    "copy": true,
                    "delete": true,
                    "edit": true
                }
            },
            "type": "execution_environment",
            "url": "/api/v2/execution_environments/3/"
        }
    ]
}
```

### Additional information

_No response_
user: alice-rc
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14597: state: open
title:  visualizer info field 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

the Info Field for ressource name and Type are to short... 
![image](https://github.com/ansible/awx/assets/112544292/cd96b092-e170-433d-94c0-35fd17881e2f)


### AWX version

23.0.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

openshift

### Modifications

no

### Ansible version

ansible 2.10.9

### Operating system

Red Hat Enterprise 8.1

### Web browser

Chrome

### Steps to reproduce

I open the Visualizer in a workflow and go over the job with the mouse. The Info Field is displayed too small.
![image](https://github.com/ansible/awx/assets/112544292/e10a4a7a-fc2d-46f7-85e4-4b989368e5f8)


### Expected results

I would like to have the whole name displayed

### Actual results

i can't see the hole name

### Additional information

_No response_
user: SvenS117711
issue_14590: state: open
title: PG size keeps growing even after continuously deleting job history
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

My setup is:

AWX: 21.6.0
PG: Azure instance v13 (storage: 256GB)
Installation on AKSv1.25.11

Current problem is - there are burst of jobs continuously running (e.g. 50 jobs that take 10-15 minutes to complete are being fired up every 10 minutes) causing the DB to fill faster. 

Since these are specific jobs being run for specific purpose - we are running another cronjob that deletes the jobs (using API) that ran before 8 hours - with an intention of keeping the DB storage under control. 

With this however, the DB size is continuously growing. From my understanding, if the auto-vacuum is enabled (which it is), then there shouldn't be significant increase in the DB if we are deleting data. 

I'm only trying to understand why the DB is increasing despite deleting job records. Few commands output:

![image](https://github.com/ansible/awx/assets/79655350/b82b9fdd-1e7a-45d2-a5b7-3ae34caa3ee5)

![image](https://github.com/ansible/awx/assets/79655350/fc306c53-06aa-40ff-85ce-62206d822a30)

![image](https://github.com/ansible/awx/assets/79655350/67391b2d-7983-4966-b3d8-d59aacb567f3)




### AWX version

21.6.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Don't know exact steps to reproduce. 
But - run 50-80 jobs every 10 minutes that take 10-15 minutes to complete. 
Delete job history of jobs ran more than 8 hours ago. 
DB size in our case is continuously increasing. 

### Expected results

From my understanding, if we are deleting at the right pace, DB shouldn't see an increase and rows marked for re-use should be used instead. 
No new templates are being created and other than these specific jobs, hardly 5-10 runs in a time period of 5 minutes.

### Actual results

DB increasing continuously

### Additional information

_No response_
user: deep7861
issue_14586: state: open
title: [DOCS] the left bar on readthedocs contains "latest" twice
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

https://ansible.readthedocs.io/projects/awx/en/latest/administration/index.html the left bar contains "latest" twice

![Screenshot from 2023-10-19 09-06-33](https://github.com/ansible/awx/assets/34477873/8786efe0-45b7-43b6-aed1-58f9596319dc)


### AWX version

latest

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

open https://ansible.readthedocs.io/projects/awx/en/latest/administration/index.html
take a look at the left bar

### Expected results

latest is written once

### Actual results

latest is written twice

### Additional information

_No response_
user: Andersson007
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_14583: state: open
title: Sequential Host Processing in Workflows
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

**Description**:

I would like to have the ability to run a workflow on hosts sequentially within AWX. Specifically, the workflow should complete all its nodes for one host before moving to the next host. 

**Use Case**:

Consider a two-node workflow where:
1. The first node is responsible for system patching.
2. The second node reboots the host.

For a given inventory of N hosts, the workflow should:
1. Patch the first host.
2. Reboot the first host.
3. Move on to the second host.
4. Patch the second host.
5. Reboot the second host.
6. Repeat for all hosts in the inventory.

Currently, I achieve this by having a job template that loops over each host and triggers the workflow per host, but this is more of a workaround rather than a native solution. 

**Motivation**:

1. **Safety**: In certain environments, especially production, it's crucial to ensure one host is completely processed (including tasks like patching and rebooting) before moving on to the next. This ensures that if something goes wrong, it impacts only one host at a time.
   
2. **Efficiency**: The current method of using a job template to loop over hosts and trigger workflows is an extra layer of complexity. Having this feature natively in AWX would streamline operations and reduce the need for workarounds.
   
3. **Visibility & Control**: Running the workflow sequentially for each host within AWX would provide better visibility into which host is being processed, the progress, and would allow for better error handling.

**Proposed Solution**:

Introduce a new workflow configuration option, say "Process hosts sequentially", which when enabled, ensures that the workflow completes all its nodes for one host before moving to the next. Maybe this could be achieved by creating a dynamic workflow of workflows per host. The default behavior can remain as it is (parallel processing of hosts), but users can opt-in to this sequential processing based on their needs.

**Benefits**:

1. **Robustness**: This feature would make patching, upgrading, or any other maintenance tasks more robust and safer in environments where sequential processing of hosts is a requirement.
   
2. **Flexibility**: While the parallel processing of hosts is optimal for many scenarios, having the ability to choose sequential processing gives users more flexibility to adapt to different operational requirements.

### Select the relevant components

- [X] UI
- [X] API
- [X] Docs
- [X] Collection
- [X] CLI
- [ ] Other

### Steps to reproduce

A workflow cannot be run on hosts sequentially within AWX

### Current results

One node in workflow processes all the hosts in inventory 

### Sugested feature result

Workflows can be more flexible and adapt to specific customer needs

### Additional information

_No response_
user: jangel97
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14582: state: open
title: Access issue for VYOS and network packages from Ansible Galaxy 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

From Oct 1, our AWX project sync failed with below error :

Error:
```
"HEAD is now at 66619173 Release 4.2.0.",
    "[WARNING]: Skipping Galaxy server https://galaxy.ansible.com/api/. Got an",
    "unexpected error when getting available versions of collection vyos.vyos: '/api",
    "/v3/plugin/ansible/content/published/collections/index/vyos/vyos/versions/'",
    "ERROR! Unexpected Exception, this is probably a bug: '/api/v3/plugin/ansible/content/published/collections/index/vyos/vyos/versions/'"
 The same error was reported while installing its dependencies as well.
```

Error:
```
HEAD is now at f7ff970 Update changelog for 4.1.0 (#327)
[WARNING]: Skipping Galaxy server https://galaxy.ansible.com/api/. Got an unexpected error when getting available versions of collection
ansible.netcommon: '/api/v3/plugin/ansible/content/published/collections/index/
ansible/netcommon/versions/'
ERROR! Unexpected Exception, this is probably a bug: '/api/v3/plugin/ansible/content/published/collections/index/ansible/netcommon/versions/'
```

While rest collections downloading was working fine  like community.general and Kubernetes.core was working fine
Starting collection install process
```
Downloading https://galaxy.ansible.com/api/v3/plugin/ansible/content/published/collections/artifacts/community-kubernetes-2.0.1.tar.gz to /var/lib/awx/projects/.__awx_cache/*****/community-kubernetes-2.0.1-lq6p_c62
Installing 'community.kubernetes:2.0.1' to '/var/lib/awx/projects/.__awx_cache/*****/stage/requirements_collections/ansible_collections/community/kubernetes'
community.kubernetes:2.0.1 was installed successfully
Installing 'community.general:3.6.0' to '/var/lib/awx/projects/.__awx_cache/*****/stage/requirements_collections/ansible_collections/community/general'
Created collection for community.general:3.6.0 at /var/lib/awx/projects/.__awx_cache/*****/stage/requirements_collections/ansible_collections/community/general
community.general:3.6.0 was installed successfully
Downloading https://galaxy.ansible.com/api/v3/plugin/ansible/content/published/collections/artifacts/kubernetes-core-2.4.0.tar.gz to /var/lib/awx/projects/.__awx_cache/*****/stage/tmp/ansible-local-179588mc6s_gme/tmpv995sca8/kubernetes-core-2.4.0-lg3e6zda
Installing 'kubernetes.core:2.4.0' to '/var/lib/awx/projects/.__awx_cache/*****/stage/requirements_collections/ansible_collections/kubernetes/core'
kubernetes.core:2.4.0 was installed successfully


### AWX version

AWX 22.1.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Edge

### Steps to reproduce

`ansible-galaxy collection install -r /var/lib/awx/projects/***/collections/requirements.yml --collections-path /var/lib/awx/projects/.__awx_cache/****/stage/requirements_collections`

In requirements collections -- mention vyos.vyos collection

### Expected results

Vyos.vyos and its dependent collection should be available

### Actual results

`ansible-galaxy collection install -r /var/lib/awx/projects/***/collections/requirements.yml --collections-path /var/lib/awx/projects/.__awx_cache/****/stage/requirements_collections  this should be successful

### Additional information

 ansible-galaxy collection list community.general
--> tried with 4.2.0 and 3.6.0
--> tried to check with vyos.vyos ansible collection community:
Ref issue no:
https://github.com/ansible-collections/vyos.vyos/issues/334

user: akritimishra21
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14581: state: open
title: AWXKIT 17.1.0 -- Export/Import -- Import not recognising "Project" already assigned to "Job_template"
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

The awxkit "import" process is not honoring the content of the populated _project_ field of a job_template and reports that job_templates must have a project assigned.

### AWX version

17.1.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

2.9.15

### Operating system

AIX 7.3.1.1

### Web browser

Firefox

### Steps to reproduce

Install awxkit

`pip3 install awxkit==17.1.0`

Run export

`awx --conf.host https://<server> --conf.token <token> -k export --job_templates >/home/templates.json`

Run the import

`awx --conf.host https://<server> --conf.token <token> -k import --job_templates < /home/templates.json`

### Expected results

13 Job_templates should have been successfully imported.

### Actual results

# awx --conf.host https://<server> --conf.token <token> -k import --job_templates < /home/templates.json
Object import failed: Bad Request (400) received - {'project': ['Job Templates must have a project assigned.']}.
Object import failed: Bad Request (400) received - {'project': ['Job Templates must have a project assigned.']}.
Object import failed: Bad Request (400) received - {'project': ['Job Templates must have a project assigned.']}.
Object import failed: Bad Request (400) received - {'project': ['Job Templates must have a project assigned.']}.
Object import failed: Bad Request (400) received - {'project': ['Job Templates must have a project assigned.']}.
Object import failed: Bad Request (400) received - {'project': ['Job Templates must have a project assigned.']}.
Object import failed: Bad Request (400) received - {'project': ['Job Templates must have a project assigned.']}.
Object import failed: Bad Request (400) received - {'project': ['Job Templates must have a project assigned.']}.
Object import failed: Bad Request (400) received - {'project': ['Job Templates must have a project assigned.']}.
Object import failed: Bad Request (400) received - {'project': ['Job Templates must have a project assigned.']}.
Object import failed: Bad Request (400) received - {'project': ['Job Templates must have a project assigned.']}.
Object import failed: Bad Request (400) received - {'project': ['Job Templates must have a project assigned.']}.
#


### Additional information

Extract from export file

`               "name": "Create CMDB CI (AIX | SLES)",
               "description": "Create .csv for CMDB consumption",
               "job_type": "run",
               "playbook": "Create_CMDB_CI.yml",
               "scm_branch": "",
               "forks": 0,
               "limit": "",
               "verbosity": 0,
               "extra_vars": "---",
               "job_tags": "",
               "force_handlers": false,
               "skip_tags": "",
               "start_at_task": "",
               "timeout": 0,
               "use_fact_cache": false,
               "host_config_key": "",
               "ask_scm_branch_on_launch": false,
               "ask_diff_mode_on_launch": false,
               "ask_variables_on_launch": false,
               "ask_limit_on_launch": false,
               "ask_tags_on_launch": false,
               "ask_skip_tags_on_launch": false,
               "ask_job_type_on_launch": false,
               "ask_verbosity_on_launch": false,
               "ask_inventory_on_launch": false,
               "ask_credential_on_launch": false,
               "survey_enabled": true,
               "become_enabled": false,
               "diff_mode": false,
               "allow_simultaneous": false,
               "custom_virtualenv": null,
               "job_slice_count": 1,
               "webhook_service": "",
               "webhook_credential": null,
               "inventory": {
                    "organization": {
                         "name": "DHS",
                         "type": "organization"
                    },
                    "name": "HMC_Inventory_github",
                    "type": "inventory"
               },
               "project": {
                    "organization": {
                         "name": "Default",
                         "type": "organization"
                    },
                    "name": "ibm / power_aix_github",
                    "type": "project"
               },
`

Extract from verbose import process, the very end of the data shows 'project': None even though, above, the name is "ibm / power_aix_github".

`ERROR:awxkit.api.pages.api:Object import failed: Bad Request (400) received - {'project': ['Job Templates must have a project assigned.']}.
DEBUG:awxkit.api.pages.api:post_data: {'name': 'awx_aixcommands', 'description': 'Generic Template for testing specific tasks', 'job_type': 'run', 'playbook': 'awx_aixcommands.yml', 'scm_branch': '', 'forks': 0, 'limit': '', 'verbosity': 0, 'extra_vars': '---\nansible_python_interpreter: /opt/freeware/bin/python3', 'job_tags': '', 'force_handlers': False, 'skip_tags': '', 'start_at_task': '', 'timeout': 0, 'use_fact_cache': False, 'host_config_key': '', 'ask_scm_branch_on_launch': False, 'ask_diff_mode_on_launch': False, 'ask_variables_on_launch': False, 'ask_limit_on_launch': False, 'ask_tags_on_launch': False, 'ask_skip_tags_on_launch': False, 'ask_job_type_on_launch': False, 'ask_verbosity_on_launch': False, 'ask_inventory_on_launch': False, 'ask_credential_on_launch': False, 'survey_enabled': False, 'become_enabled': True, 'diff_mode': False, 'allow_simultaneous': False, 'custom_virtualenv': None, 'job_slice_count': 1, 'webhook_service': '', 'webhook_credential': None, 'inventory': 2, 'project': None}
`
user: SteveMunday62
issue_14570: state: open
title: Can't create workflow template
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Getting 'You do not have permission to perform this action' when I try to create workflow template with user that belongs to group with required permissions.

<img width="571" alt="image" src="https://github.com/ansible/awx/assets/51116816/69944899-c06d-4189-ba38-b62a3e08f33c">


### AWX version

23.3.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

yes

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Safari

### Steps to reproduce

Attempt to create workflow template

### Expected results

Workflow created

### Actual results

You do not have permission to perform this action

### Additional information

_No response_
user: adpavlov
issue_14569: state: open
title: dynamically generate a calendar ICS file
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

The reason to do this is to make events easy to view for an organization to know when applications are being updated

a per organization calendar that gets dynamically created via the AWX Schedules.  
1. use the AWX schedule to generate a .ics file 
2. point your google calendar or outlook calendar. 

Generate a hosted file that gets dynamically updated when schedules change that services that use ICS (ICAL)

If you query awx you can get syntax that does this 
"rrule": "DTSTART:20220612T161100Z RRULE:INTERVAL=1;FREQ=WEEKLY;BYDAY=SU"

If formatted like this and publicly hosted on AWX per organization in a ICS file like such:

BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
SUMMARY:iCal Test from AWX RRULE
DTSTART:20220612T161100Z
DURATION:PT1H
RRULE:INTERVAL=1;FREQ=WEEKLY;BYDAY=MO
UID:5406c08e-d763-44e4-94e3-47953ab5fdfb@awx.ssvp.ositk8s.com
END:VEVENT
END:VCALENDAR

^ this format can be shared / pointed at from outlook or google calendar 

right click calendar > import calendar > from internet > put in the url to the .ics file  then you get a dynamically updating calendar everytime the calendar does a send/receive.

[Here is a resource for understanding Recurrences Rules ](https://devguide.calconnect.org/iCalendar-Topics/Recurrences/)



### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

got a webserver like nginx or apache and create a file.ics and import this text 

BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
SUMMARY:iCal Test from AWX RRULE
DTSTART:20220612T161100Z
DURATION:PT1H
RRULE:INTERVAL=1;FREQ=WEEKLY;BYDAY=MO
UID:5406c08e-d763-44e4-94e3-47953ab5fdfb@awx.ssvp.ositk8s.com
END:VEVENT
END:VCALENDAR

save the file

then go to outlook and add a calendar from the internet and point to the url of the path of the file. 


### Current results

Currently we only have awx schedules that get generated and not a ics file 

If our scheudles could dynamically re-create a ics file on the awx server under each organization and generate a url path to the file we could point our calendars to it to get a visual representation of the awx schedules. 

### Sugested feature result

This will allow teams to overlay automation changes on their current calendars updated dynamically so they will know when something is happening each day. They can also share that calendar with the organization that might have CAB Change Review Boards) to see what is taking place in an organization to better schedule Change approvals. 

### Additional information

The alternative right now is to manually create calendar events and try to keep that up to date. (not feasible)
user: leelightfoot25
issue_14567: state: open
title: Error while building release 23.3.0
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Error while building release from source

### AWX version

23.3.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

```
make requirements_awx
make sdist
```

### Expected results

Successful build

### Actual results

```
npm --prefix awx/ui --loglevel warn run build
> build
> INLINE_RUNTIME_CHUNK=false react-scripts build
Creating an optimized production build...
Treating warnings as errors because process.env.CI = true.
Most CI servers set it automatically.
Failed to compile.
src/screens/SubscriptionUsage/SubscriptionUsageChart.js
  Line 92:8:  React Hook useCallback has a missing dependency: 'calculateDateRange'. Either include it or remove the dependency array  react-hooks/exhaustive-deps
make: *** [Makefile:430: awx/ui/.ui-built] Error 1
```

### Additional information

_No response_
user: 0e39bf7b
issue_14565: state: open
title: Ability to restrict items to same organization only
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Permissions in AWX can be confusing because you can have related / associated items which exist in another organization. There are many examples, but for a few:

 - Workflow can have templates in it which belong in another organization
 - job templates directly link to projects and inventories which can be in another organization
 - miscellaneous related items like notification templates can be associated with something in another organization

This request is that we have a setting like `ENFORCE_SAME_ORGANIZATION`, which defaults to `false`, but if `true`, will not allow associating any item with another item in a different organization. Another possible name is organization "namespacing".

This is a fairly big ask. In a minimal implementation this could be done API-only, but there could be a lot of UI enhancements to add on top of this, to help filter to an organization, or set a persistent organization for the browsing session.

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Create a job template and use a project and inventory in different organizations.

### Current results

Currently this is always allowed provided that the user has `use_role` to those individual related items (project / inventory).

### Sugested feature result

With this feature turned on, this would restrict actions that result in associating two objects in different organizations. If a request would do this, it will return a 400 error with a message explaining the restriction.

### Additional information

_No response_
user: AlanCoding
issue_14564: state: open
title: Assign an organization to instance groups to help manage permissions
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Followup from https://github.com/ansible/awx/issues/4292 where roles were added to instance groups. Right now these roles only inherit permissions from system admin and system auditor.

Taken from comments in that issue - this issue proposes to add an `organization` field onto the `InstanceGroup` model so that the instance group roles can automatically inherit from organization roles, including `admin_role`, `auditor_role`, and optionally a new `instance_group_admin` role.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

N/A

### Current results

Right now instance group permissions can only be delegated by adding roles directly to users or teams.

### Sugested feature result

Assigning the `organization` field on instance groups will cause the instance group roles to inherit from org roles

 - admin_role will inherit from organization admin_role
 - read_role will inherit from organization auditor_role

### Additional information

_No response_
user: AlanCoding
issue_14563: state: open
title: Error on create_partition
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Hello everyone,

Since updating AWX to 23.3.0, I have this error each time a partition is created on the main_jobevent table:

`Traceback (most recent call last):
   File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 87, in _execute
     return self.cursor.execute(sql)
   File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/psycopg/cursor.py", line 723, in execute
     raise ex.with_traceback(None)
psycopg.errors.UniqueViolation: Duplicate key value violates unique constraint “pg_type_typname_nsp_index”
DETAIL: Key “(typname, typnamespace)=(main_jobevent_20231011_14, 2200)” already exists.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
   File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 491, in run
     self.pre_run_hook(self.instance, private_data_dir)
   File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 1058, in pre_run_hook
     super(RunJob, self).pre_run_hook(job, private_data_dir)
   File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 425, in pre_run_hook
     create_partition(instance.event_class._meta.db_table, start=instance.created)
   File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/utils/common.py", line 1175, in create_partition
     cursor.execute(
   File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 67, in execute
     return self._execute_with_wrappers(
   File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
     return executor(sql, params, many, context)
   File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 89, in _execute
     return self.cursor.execute(sql, params)
   File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/utils.py", line 91, in __exit__
     raise dj_exc_value.with_traceback(traceback) from exc_value
   File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 87, in _execute
     return self.cursor.execute(sql)
   File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/psycopg/cursor.py", line 723, in execute
     raise ex.with_traceback(None)
django.db.utils.IntegrityError: Duplicate key value violates unique constraint 'pg_type_typname_nsp_index'
DETAIL: Key “(typname, typnamespace)=(main_jobevent_20231011_14, 2200)” already exists. `

### AWX version

23.3.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Each hour an automated task failed.

### Expected results

I wish there would no longer be this error when a partition is created on the main_jobevent table.

### Actual results

The task failed with this error.

### Additional information

_No response_
user: remipcomaite
issue_14554: state: open
title: fix(sec): upgrade gitpython to 3.1.35
body: ### What happened？
There are 1 security vulnerabilities found in gitpython 3.1.32
- [CVE-2023-41040](https://www.oscs1024.com/hd/CVE-2023-41040)


### What did I do？
Upgrade gitpython from 3.1.32 to 3.1.35 for vulnerability fix

### What did you expect to happen？
Ideally, no insecure libs should be used.

### How can we automate the detection of these types of issues?
By using the [GitHub Actions](https://github.com/murphysecurity/actions) configurations provided by murphysec, we can conduct automatic code security checks in our CI pipeline.

### The specification of the pull request
[PR Specification](https://www.oscs1024.com/docs/pr-specification/) from OSCS
user: dack-su
labels: dependencies: Pull requests that update a dependency file
issue_14547: state: open
title: Allow middle clicks (open in new tab) in new UI just as it was allowed in the old one
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

In old UI I often needed to launch or open multiple jobs (to check logs etc.) I just middle clicked the link for all of them, opened them in 10 tabs and checked on each one.

New UI doesn't allow this - middle click is blocked by some JS and only shows a scrolling wheel, and right click on link shows context menu that doesn't contain standard anchor menu with "open link in new tab".

This drastically reduces user experience

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Open jobs or templates in new UI, right click link to any job or try to middle click it

### Current results

Doesn't allow opening in a new tab

### Sugested feature result

Allow opening in a new tab

### Additional information

I am on MacOS using Firefox
user: benapetr
issue_14536: state: open
title: Remove all ./setup.sh references from setup-playbook instructions
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

@AlanCoding brought this up in the product-docs repo and wanted to be able to keep this tracked here.

### AWX version

latest

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. Clone the AWX repo and create a new branch in your fork.
2. Navigate to the source files for the ``Common`` folder in GitHub at: https://github.com/ansible/awx/tree/devel/docs/docsite/rst/common (locally they should reside in ``/Users/you/awx/docs/docsite/rst/common``).
3. Open the setup-playbook.rst file to edit it.
4. Commit the changes, open a PR.

### Expected results

In the awx/docs/docsite/rst/common/setup-playbook.rst, these instructions should eliminate the use of ``./setup.sh`` and rewritten to be applicable to AWX.

### Actual results

In the awx/docs/docsite/rst/common/setup-playbook.rst, there are instructions that are not applicable to AWX.

### Additional information

_No response_
user: tvo318
issue_14533: state: open
title: Delete `UnpartitionedJobEvent` model after a sufficient time
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

This is a followup to https://github.com/ansible/awx/pull/14055

After sufficient time has passed (maybe 1 year or something), most users will no longer have the old unpartitioned event tables, so there will be no point in keeping the models and logic that go with them.

Expectation is that we will probably add a migration that runs SQL to DROP those tables

Consequence is that after this change, users upgrading from _really old versions_ will no longer be able to see output from before the migration. Users who upgraded more recently and have ran cleanup_jobs will see no effect.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

We need a timeline to sunset these old event tables

### Current results

Nothing yet

### Sugested feature result

Deleted the model `UnpartitionedJobEvent`, and delete `_handle_unpartitioned_events` from the cleanup jobs management job.

### Additional information

_No response_
user: AlanCoding
issue_14517: state: open
title: [DOCS] Add alt-text codeblock to Images for Userguide: security.rst
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

We need to add alt-text to images for accessibility purposes. See the syntax in the Expected Results below.

### AWX version

latest

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. Clone the AWX repo.
2. Navigate to the source files for the User Guide in GitHub at: https://github.com/ansible/awx/tree/devel/docs/docsite/rst/userguide (locally they should reside in ``/Users/you/awx/docs/docsite/rst/userguide``).
3. Open the  security.rst file to edit it. Search all image directives and place the `:alt:` code block beneath it. See syntax in Expected Results below.
4. Commit the changes, open a PR.

### Expected results

The following codeblock added to each image with its specific descriptors filled in: 
```
.. image:: ../common/images/image-filename.png
   :alt: Phrase that describes image

```
or

```   
|Resource - alt text describing image|

.. |Resource - alt text describing image| image:: ../common/images/image-filename.png
   :alt: Phrase that describes image

```
### Actual results
Some images don't have the alt text info in them.

### Additional information
Example from Credentials section of the User Guide:

```
Add Team Permissions
^^^^^^^^^^^^^^^^^^^^^^

To add permissions to a Team:

1. Click the **Add** button, which opens the Add Permissions Wizard.

.. image:: ../common/images/teams-users-add-permissions-form.png 
   :alt: Add Permissions Form

```
user: tvo318
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_14516: state: open
title: [DOCS] Add alt-text codeblock to Images for Userguide: scheduling.rst
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

We need to add alt-text to images for accessibility purposes. See the syntax in the Expected Results below.

### AWX version

latest

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. Clone the AWX repo.
2. Navigate to the source files for the User Guide in GitHub at: https://github.com/ansible/awx/tree/devel/docs/docsite/rst/userguide (locally they should reside in ``/Users/you/awx/docs/docsite/rst/userguide``).
3. Open the scheduling.rst file to edit it. Search all image directives and place the `:alt:` code block beneath it. See syntax in Expected Results below.
4. Commit the changes, open a PR.

### Expected results

The following codeblock added to each image with its specific descriptors filled in: 
```
.. image:: ../common/images/image-filename.png
   :alt: Phrase that describes image

```
or

```   
|Resource - alt text describing image|

.. |Resource - alt text describing image| image:: ../common/images/image-filename.png
   :alt: Phrase that describes image

```
### Actual results
Some images don't have the alt text info in them.

### Additional information
Example from Credentials section of the User Guide:

```
Add Team Permissions
^^^^^^^^^^^^^^^^^^^^^^

To add permissions to a Team:

1. Click the **Add** button, which opens the Add Permissions Wizard.

.. image:: ../common/images/teams-users-add-permissions-form.png 
   :alt: Add Permissions Form

```
user: tvo318
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_14505: state: open
title: [DOCS] Add alt-text codeblock to Images for Userguide: inventories.rst
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

We need to add alt-text to images for accessibility purposes. See the syntax in the Expected Results below.

### AWX version

latest

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. Clone the AWX repo.
2. Navigate to the source files for the User Guide in GitHub at: https://github.com/ansible/awx/tree/devel/docs/docsite/rst/userguide (locally they should reside in ``/Users/you/awx/docs/docsite/rst/userguide``).
3. Open the inventories.rst file to edit it. Search all image directives and place the `:alt:` code block beneath it. See syntax in Expected Results below.
4. Commit the changes, open a PR.

### Expected results

The following codeblock added to each image with its specific descriptors filled in: 
```
.. image:: ../common/images/image-filename.png
   :alt: Phrase that describes image

```
or

```   
|Resource - alt text describing image|

.. |Resource - alt text describing image| image:: ../common/images/image-filename.png
   :alt: Phrase that describes image

```
### Actual results
Some images don't have the alt text info in them.

### Additional information
Example from Credentials section of the User Guide:

```
Add Team Permissions
^^^^^^^^^^^^^^^^^^^^^^

To add permissions to a Team:

1. Click the **Add** button, which opens the Add Permissions Wizard.

.. image:: ../common/images/teams-users-add-permissions-form.png 
   :alt: Add Permissions Form

```
user: tvo318
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_14475: state: open
title: Add option to retry all or multiple failed sliced jobs
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Retrying sliced jobs can become really annoying as I have to click every failed job separately to relaunch it, especially when I have more than 3 slices.

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

- Trigger a job with e.g. 10 slices
- At least 5 or more have failed hosts

### Current results

I have to click through every failed job click on "relaunch failed hosts".

### Sugested feature result

Central button in the workflow job to relaunch either all or multiple failed job templates at once.

### Additional information

_No response_
user: tomsiewert
issue_14474: state: open
title: Ability to configure partition range of event tables
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

We partition event (job/project/etc.) tables hourly. This hourly time frame is hard-coded.

https://github.com/ansible/awx/blob/6d3c22e8010621dcd87845955b2042678fa0fadb/awx/main/utils/common.py#L1156-L1157

This issue asks that we allow this to be configurable, probably as an ordinary file-based setting. Doing this requires two main things be accomplished:
1. Basic code changes so that we don't use a hard-coded 1-hour partition range
2. Migration steps that users need to follow so that they can enact this change without bad things happening

Some research is needed to determine what hazards we may hit mixing partition ranges. There's also concern about _overlapping_ partitions for the currently active partition when the setting is changed. If a user changes from hourly to daily partitions, then the next job could create a partition for the day that overlaps with already-created partitions for the first few hours of that day.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Try to configure the partition range

### Current results

Code changes required

### Sugested feature result

new setting

### Additional information

_No response_
user: AlanCoding
issue_14458: state: open
title: awx.awx.schedule -  Specifying unified_job_template as ID doesn't work
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Per the [docs](https://docs.ansible.com/ansible/latest/collections/awx/awx/schedule_module.html#parameter-unified_job_template), the unified_job_template parameter can be specified as a Name, ID, or URL. However, specifying an ID thrown an exception in collection versions >19.2.2.

I believe the problem is caused by this change https://github.com/ansible/awx/pull/11135/files#diff-51b779436b7298bec9ef390eb72bb99b2d67c558757579c931908a1aa8d7662bL196 

### AWX version

21.14.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Try scheduling a job using the job template ID as such:

```
    - name: Test schedule job w/ ID
      vars:
        start_time: "2025-04-03 12:02:14"
      awx.awx.schedule:
        name: "Test w/ ID"
        unified_job_template: '30'
        rrule: "{{ query('awx.awx.schedule_rrule', 'minute', start_date=start_time, timezone='UTC', every='1', end_on='1') }}"
```

### Expected results

The job should be scheduled

### Actual results

  "exception": "Traceback (most recent call last):\n  File \"/home/runner/.ansible/tmp/ansible-tmp-1695053652.058952-44-236635489272730/AnsiballZ_schedule.py\", line 107, in <module>\n    _ansiballz_main()\n  File \"/home/runner/.ansible/tmp/ansible-tmp-1695053652.058952-44-236635489272730/AnsiballZ_schedule.py\", line 99, in _ansiballz_main\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n  File \"/home/runner/.ansible/tmp/ansible-tmp-1695053652.058952-44-236635489272730/AnsiballZ_schedule.py\", line 47, in invoke_module\n    runpy.run_module(mod_name='ansible_collections.awx.awx.plugins.modules.schedule', init_globals=dict(_module_fqn='ansible_collections.awx.awx.plugins.modules.schedule', _modlib_path=modlib_path),\n  File \"/usr/lib64/python3.9/runpy.py\", line 225, in run_module\n    return _run_module_code(code, init_globals, run_name, mod_spec)\n  File \"/usr/lib64/python3.9/runpy.py\", line 97, in _run_module_code\n    _run_code(code, mod_globals, init_globals,\n  File \"/usr/lib64/python3.9/runpy.py\", line 87, in _run_code\n    exec(code, run_globals)\n  File \"/tmp/ansible_awx.awx.schedule_payload_tnadnbuu/ansible_awx.awx.schedule_payload.zip/ansible_collections/awx/awx/plugins/modules/schedule.py\", line 362, in <module>\n  File \"/tmp/ansible_awx.awx.schedule_payload_tnadnbuu/ansible_awx.awx.schedule_payload.zip/ansible_collections/awx/awx/plugins/modules/schedule.py\", line 266, in main\nTypeError: 'NoneType' object is not subscriptable\n",


### Additional information

Tested with collection versions 19.4.0 and 23.1.0 with the same result (line number in exception differ though). 'Actual results' were from version 23.1.0 (ie latest)

Specifying the job template by name, rather than ID, works as expected.
user: pluto00987
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14445: state: open
title: Scheduled Job prompted extra_vars overwritten by JT extra_vars
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

I have a JT with extra_vars set to "Prompt on Launch", and some variable set in there by default.
I'm configuring a schedule for that JT, and in "Prompt" I remove said variable from the prompted extra_vars.
But when the scheduled Job runs, the variable is set (to the default value).

### AWX version

21.1.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

(see summary)

### Expected results

extra_vars should be present as prompted in the schedule

### Actual results

extra_vars are overwritten by the JT defaults

### Additional information

_No response_
user: azrdev
labels: needs_investigation: PRs or issues that need further investigation
issue_14440: state: open
title: Remove `@pytest.mark.django_db` from unit tests folder
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Tests under `awx/main/tests/unit` were never meant to use the test database. This is what distinguishes them from the tests under `awx/main/tests/functional` which _do_ use the test database, and are very slow as a result.

We now have several tests in the unit test folders which use the marker for the test database. For example:

https://github.com/ansible/awx/blob/8feeb5f1fae951332ea4b520e5618982109da570/awx/main/tests/unit/test_access.py#L199

I currently count 11 such occurances.

This issue requests that people do one of either two things for theses tests:
1. rewrite the tests so that whatever ORM things needed are mocked and remove the mark
2. if rewriting is not possible or easy, migrate the tests into the functional folder where it's expected to use the DB


### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Run unit tests

### Current results

Doesn't use the test database for any of the "unit" tests

### Sugested feature result

Over time, we have started to use the test database in the unit tests.

### Additional information

A couple of "bonus" items could be possible beyond what is asked here:
 - add a check that enforces that unit tests do not use the test database marker
 - create a custom configuration for the unit tests folder that gets us speedup by not enabling the test database
user: AlanCoding
issue_14438: state: open
title: Split AWX collections into its own repo from AWX
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Split AWX collection into its own repo under the ansible namespace. As a package maintainer for the [AWX collection rpm](https://src.fedoraproject.org/rpms/ansible-collection-awx-awx) we try to follow the release cycle of AWX, however in the latest release the only thing that was changed for the collection was the license.

> Fix collection metadata license to match intent by @AlanCoding in https://github.com/ansible/awx/pull/14404

I believe separating out the collection to its own repo will allow it to have its own lifecycle not tied to the AWX product release.

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Separate awx-collection to it's own repo under the ansible namespace.

### Current results

awx-collection is under the AWX namespace their for the RPM release it tied to the AWX release when nothing may have changed with the collection.

### Sugested feature result

A separate repo that houses the AWX collection that has its own release cycle and the RPM packaging aligns with rather then the AWX repo 

### Additional information

_No response_
user: aheath1992
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14437: state: open
title: Better permission control
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

In AWX's current state, someone with "execute" access also gets read access to other's jobs. Take the following as an example:

User "remote" only has execute access to Docker/Kubernetes Install/Update

![image](https://github.com/ansible/awx/assets/107994087/eda32a9b-361e-4ffa-af0c-e4deb54880d4)

However, that user can also view others' job:

![image](https://github.com/ansible/awx/assets/107994087/0cbee6c4-5bf3-4061-b7da-8de1084f950e)

In this case, the user can see the machine name which is not all that harmful (I'd argue still harmful but I digress). But what if one of the prompts is an nfs dir or an answer prompt that should only be seen by the requester and approver?

This problem exists in both workflows and templates. There should be an option in each workflow/template to enable isolated viewing such that the user can only view their own jobs, thereby reducing what the user can see to a need-to-know basis.

P.S. isolated viewing is just a placeholder name, just don't use [job isolation as the name which means something different in Ansible Tower](https://docs.ansible.com/ansible-tower/latest/html/userguide/security.html).

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Create a workflow or template, grant target user execute access, run said workflow/template as another user, view the job as target user.

### Current results

Information is exposed to target user even though he/she may not be involved in the particular job.

### Sugested feature result

Enable an option for isolated viewing.

### Additional information

Permission control has always been one of the weak points of AWX, I hope this gets focused on more rather than adding new features.
user: trevorl-dtl
issue_14432: state: open
title: The project update is triggered every time, when the job template changes the source control branch
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

### Context

We were struggling with this bug for a couple of weeks in our RND environment:
https://github.com/ansible/awx/issues/14395
The bug troubleshooting took much more time than expected because of the following bugs in UI (I've opened them accordingly):
https://github.com/ansible/awx/issues/14431
https://github.com/ansible/awx/issues/14430

### The root cause of the issue

We found a root cause of this issue and see that it is related to the project update mechanism that does not work as we expected.

We have many projects and a lot of workflows that are running simultaneously. We defined the **Source Control Branch/Tag/Commit** and **Cache Timeout** for each project and expect the project will not be updated too often because the whole git repo is cached.

But it doesn't work like that. **Each time some job triggers the project with another branch (the branch different from the branch it was triggered before), the project update is triggered**, ignoring the cache. Because of the UI bugs from above, it took us time to find these "invisible" project update jobs.

I'll illustrate this issue with an example. Let's say we have a project named **awx-project**; its **Source Control Branch/Tag/Commit** is set to **master**. We have three workflows: awx-workflow-A (**branch A)**, awx-workflow-B (**branch B**), and awx-workflow-C (**branch C**), that are based on this project. The **project cache** is configured to 20 minutes, so we expect the project update won't be triggered more often than once in 20 minutes. We can even see in UI that it works as expected (and the project update is "kind of" triggered only every 20 minutes), but it does not since there are some hidden project updates we don't see in UI, and we can find them only in logs. Looks like it works for real like that:

1. awx-workflow-A is triggered. The project update has started. The A branch was cached.
2. awx-workflow-A is triggered. The project update is not triggered since branch A is already cached
3. awx-workflow-B is triggered. The project update has started. The B branch was cached.
4. awx-workflow-B is triggered. The project update is not triggered since branch B is already cached
5. awx-workflow-C is triggered. The project update has started. The C branch was cached.
6. awx-workflow-C is triggered. The project update is not triggered since branch C is already cached, and so on...

That means we can trigger only the workflows from the project's default branch; otherwise, it will trigger additional project updates.

So, cache works on the branch level, not the project level. We have many running workflows from the same project but with different branches. It makes the cache configuration almost useless for us. It overloads our system and RDS, so our AWX stops functioning or does it too slowly because all our jobs are waiting for project updates (see the source issue above for all the details).

### AWX version

22.5

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Run workflows from the same project with different branches.

### Expected results

The whole project is cached according to the Cache configuration.

### Actual results

Only a specific branch is cached, and the cache is overridden for each branch. It makes the project updates triggered too often.

### Additional information

_No response_
user: elibogomolnyi
issue_14431: state: open
title: The Last Job Status of the Project update can lead to the update job of the different project
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Here is an example of a project in AWX
<img width="1348" alt="image" src="https://github.com/ansible/awx/assets/79839819/dcd845fb-da43-40e6-9bbd-adb08a86ef66">
**The Last Job Status** leads to the last successful project update of the current project.

But when this status is changed to Running...
<img width="1320" alt="image" src="https://github.com/ansible/awx/assets/79839819/d329f68b-0ef3-412b-ac0d-8053258395aa">

...the link starts leading to the **latest project update job from the whole AWX system** and not the running project update of this particular project.

This bug may be related to another bug:
https://github.com/ansible/awx/issues/14430



### AWX version

22.5

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Check the link in the Running **Last Job Status** status of the Project

### Expected results

The link leads to the latest running project of this particular project

### Actual results

The link leads to the latest running project update in AWX

### Additional information

_No response_
user: elibogomolnyi
issue_14430: state: open
title: Not all project updates (source control update jobs) appear in UI
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When we create a **project** in AWX, we define the **Source control branch** and also define if we can **Allow changing the Source Control branch or revision in a job template that uses this project**.

If the project update was triggered with the workflow, changing the default Source Control branch, this project update **can't be found in UI**. 

We can't find it by searching by **Job ID** and by seeking in the list of jobs when we filter by the **Job Type** = **Source Control Update**. So if the default project update branch name is set to **master**, only the master branch project updates are shown in UI.

The only way to get into the project updates from other branches is by trying to get the ID of the job and paste it to the url:

> https://myawx.com/#/jobs/project/{some_job_id}/output

This issue might be related to this bug:
https://github.com/ansible/awx/issues/14431


### AWX version

22.5

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Run project update from the non-default branch

### Expected results

All project updates are shown in UI

### Actual results

Only the project updates that are triggered from the default branch are shown.

### Additional information

_No response_
user: elibogomolnyi
issue_14428: state: open
title: Show related associations in OPTIONS for attach-detach
body: ##### SUMMARY
This is a supporting change that would be used in the following features:
 - https://github.com/ansible/awx/pull/13867
 - https://github.com/ansible/awx/pull/14128

Ping @sean-m-sullivan 

I mentioned this in the CLI change I had started on, but said there that I wasn't doing it the "right" way, since the metadata had to loop over all views... and this was pretty objectively bad. This PR is intended to off that "right" way.

The only drawback to doing it the right way, is that we have to restructure our serializers in order to give _ourselves_ something other than a kludge of "whatever" type of links. So the idea is that this _structures_ the related links.

Trying to limit the scope, this grouping _only_ includes _related_ lists which are the attach-detach kind, and which are _editable_.

Note that up-until-this, we also had related lists that were editable and ForeignKeys. These were bugs, and are fixed here. Disassociation in that case almost always created bad data (orphaned objects), and some times possibly worse. This is what one of the 2 new tests is enforcing.

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API


user: AlanCoding
issue_14427: state: open
title: Move inventory source sync into awx.awx.inventory_source object
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

When awx.awx.inventory_source objects are applied in a playbook, the underlying inventory source is not actually synced: changes to variables, for example, do not take effect unless I manually sync inventory sources or apply the separate awx.awx.inventory_source_update object.

This request is to add a new "sync_source" boolean (or similar name) to the awx.awx.inventory_source module.  ansible.builtin modules already do similar things, for example https://docs.ansible.com/ansible/latest/collections/ansible/builtin/apt_repository_module.html#parameter-update_cache , so this seems like a reasonable feature.  

To maintain current behavior, this behavior should probably default to false, though I wouldn't object to always syncing inventory sources.

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

`  - name: my_inventory_source
    awx.awx.inventory_source:
      name: "my_inventory_source"
      inventory: "my_inventory"
      state: present
      source: "scm"
      sync_source: true
`
should cause the inventory source to be synced.


### Current results

N/A

### Sugested feature result

This will streamline playbooks for managing AWX objects - having a separate "update object" object that syncs _another_ object is something of a workaround and goes against the "noun rather than verb" philosophy of Ansible.

### Additional information

_No response_
user: jorymil
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14426: state: open
title: Unable to disable instance (execution node), restriction on listener port?
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Tried to disable a running instance/exec. node, without any running jobs on it, and got the following UI error (same via /api):
<img width="548" alt="image" src="https://github.com/ansible/awx/assets/79761170/96256cf8-3a0c-4183-a53d-1f3f7827c199">

Investigating a bit it seems that the **listener port now has to be greater than 1024**!?

I got a similar error when trying to create a new instance with a low port:
![image](https://github.com/ansible/awx/assets/79761170/3442fcac-6dfc-4e81-a0fb-f63fb42a5834)


### AWX version

23

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

Try to disable an instance running with a port below 1024 (port 443 in my case).

Try to add an instance with low port.

### Expected results

All my current instances run on port 443 without issue, I need to be able to disable or add instance(s).

### Actual results

Not able to disable or add instance.

### Additional information

_No response_
user: lepicodon
issue_14425: state: open
title: [CI] Include a lint check for the Ansible tasks/roles/playbooks in AWX
body: ##### SUMMARY

This commit includes a GitHub actions lint check for the Ansible automation that resides in this repo.

The idea of this commit is to save some time in any e2e job that might fail because an issue that can be prevented with a lint check.

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - Other (Ansible playbooks/roles/tasks)

##### AWX VERSION
NA
user: ccamacho
issue_14424: state: open
title: [Solved?] Docker Compose for Development fails at step make docker-compose
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

The build will fail for issues with ansible code




### AWX version

23.0.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

docker development environment

### Modifications

yes

### Ansible version

2.4.12

### Operating system

Rocky 8 /  RHEL 8

### Web browser

_No response_

### Steps to reproduce

```
dnf install epel-release -y
dnf install -y git gcc gcc-c++ ansible nodejs gettext device-mapper-persistent-data lvm2 bzip2 python3-pip -y
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce-repo
dnf install docker-ce-<version>
systemctl start docker && systemctl enable docker
usermod -aG docker $USER
newgrp docker
pip3 install docker-compose
alternatives --set python /usr/bin/python3
git clone https://github.com/ansible/awx.git
```

#genrate encryption key
`openssl rand -base64 30`
#copy this key to clipboard

```
cd awx/tools/docker-compose
nano inventory
```
#paste in key from clipboard for secret_key

#now start the build process
`make docker-compose-build`
#build will complete and you can see the image is available
`docker images`
#now try to finish the build and you will get the error
`make docker-compose`

### Expected results

build should complete without errors

### Actual results

```

ERROR! We were unable to read either as JSON nor YAML, these are the errors we got from each:
JSON: Expecting value: line 1 column 1 (char 0)

Syntax Error while loading YAML.
  found unknown escape character

The error appears to be in '/opt/awx/tools/docker-compose/ansible/roles/sources/tasks/main.yml': line 51, column 46, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

      error_code: "{{ item | basename() | regex_replace('custom_(\\d+).html', '\\1') }}"
      web_path: "{{ item | regex_replace('^.*\/static', '/static') }}"
                                             ^ here
We could be wrong, but this one looks like it might be an issue with
missing quotes. Always quote template expression brackets when they
start a value. For instance:

    with_items:
      - {{ foo }}

Should be written as:

    with_items:
      - "{{ foo }}"
make:
*** [Makefile:518: docker-compose-sources] Error 4

### Additional information

issue was fixed by modifying
[awx](https://github.com/ansible/awx/tree/devel)/[tools](https://github.com/ansible/awx/tree/devel/tools)/[docker-compose](https://github.com/ansible/awx/tree/devel/tools/docker-compose)/[ansible](https://github.com/ansible/awx/tree/devel/tools/docker-compose/ansible)/[roles](https://github.com/ansible/awx/tree/devel/tools/docker-compose/ansible/roles)/[sources](https://github.com/ansible/awx/tree/devel/tools/docker-compose/ansible/roles/sources)/[tasks](https://github.com/ansible/awx/tree/devel/tools/docker-compose/ansible/roles/sources/tasks)

/main.yml line 51

from
`web_path: "{{ item | regex_replace('^.*\/static', '/static') }}"`

to
`web_path: "{{ item | regex_replace('^.*\''/static', '/static') }}"`
user: jeremyatourville
issue_14419: state: open
title: awx.awx.inventory deletion doesn't work
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Description

When i try to delete inventory in a playbook using this ansible task :

```
- name: "Delete inventory"
  awx.awx.inventory:
    controller_host: "{{ controller_url }}"
    controller_username: "{{ admin_user }}"
    controller_password: "{{ admin_pass }}"
    validate_certs: "no"
    name: "{{ inv_name }}"
    organization: "{{ org }}"
    state: "absent"
```
I am getting 

```
TASK [Delete inventory] ******************************
ok: [localhost] 
```
And the inventory is not deleted.


### AWX version

AWX X-API-Product-Version: 21.10.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.15.3

### Operating system

MacOS 13.5.1

### Web browser

Chrome

### Steps to reproduce


Run a playbook which:

- create an inventory
- delete the inventory

```
tasks:
  - name: "Create an inventory"
    awx.awx.inventory:
      controller_host: "{{ controller_url }}"
      controller_username: "{{ admin_user }}"
      controller_password: "{{ admin_pass }}"
      validate_certs: "no"
      name: "Testing Inventory"
      organization: "TestingOrg"
      state: "present"
    register: "inventory_result"
  
  - name: "Delete the inventory"
  awx.awx.inventory:
    controller_host: "{{ controller_url }}"
    controller_username: "{{ admin_user }}"
    controller_password: "{{ admin_pass }}"
    validate_certs: "no"
    name: "Testing Inventory"
    organization: "TestingOrg"
    state: "absent"
```

### Expected results

The inventory will create and delete

### Actual results

The inventory created and not deleted

### Additional information

_No response_
user: Avilir
issue_14411: state: open
title: Scheduled Last Day of Week feature in 30+ day months moves scheduled job to First Day of Week 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Preface that I looked at closed and opened issues prior to creating this in both AWX and AWX-OPERATOR Github projects. My current release version is AWX release version is 22.1.0  not 23.0.0 

To recreate this issue try to create a schedule that uses Last Wednesday or Last Thursday (as we tried at the end of August 2023) It automatically shifts the job **when you hit save**  it will say First Wednesday or First Thursday. This happened on multiple template schedules, and we tried re-creating the template all together and got the same response when you go to add teh schedule and configure it to always use the Last (Wednesday or Thursday) is how it was reproduced. My technician thinks he's only seen this behavior on months that have 31 days. I could not confirm this. 

My environment: 
I am running this from the awx-operator project from kubernetes platform. 

I'm certain the first thing someone is going to suggest is to try it from the most recent version of awx-operator i have a planned release to upgrade to that later this week, but i don't see this issue/bug documented anywhere in open or closed and I did fuzzy regex searches for 'schedule', 'Last DAY', 'First Day' and reviewed all of the results to see if i could see someone else talking about this issue. 




### AWX version

22.1.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

the operator and image is using Ansible 2.9

### Operating system

kubernetes is running on Fedora 38

### Web browser

Chrome

### Steps to reproduce

To recreate this issue try to create a schedule that uses Last Wednesday or Last Thursday (as we tried at the end of August 2023) It automatically shifts the job **when you hit save**  it will say First Wednesday or First Thursday. This happened on multiple template schedules, and we tried re-creating the template all together and got the same response when you go to add teh schedule and configure it to always use the Last (Wednesday or Thursday) is how it was reproduced. My technician thinks he's only seen this behavior on months that have 31 days. I could not confirm this. 

### Expected results

When you select Last Thursday of every month it should:
1. show last Thursday as the schedule in the Frequency Details
2. the next schedule event should also reflect the last Thursdays of every month. Here it does. 
![188f9191-6e2a-428d-969c-49b27fa3da6f](https://github.com/ansible/awx/assets/90870604/3455cd43-8126-4ac0-8421-a02db015bfec)




### Actual results

I think what's happening is the displayed value in Frequency details just doesn't match what the Schedule is set to and what the occurrences is reporting.  And that the job is being scheduled correctly and running at the correct time. But My technician was worried because it was showing that it was going to run at a different day and time then what his approved change was for. 


### Additional information

_No response_
user: leelightfoot25
labels: needs_investigation: PRs or issues that need further investigation
issue_14410: state: open
title: scm_revision on Started notification
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

When using a webhook notification with a custom "start  message body" the job.scm_revision field is empty.


### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

set: `"commit": "{{ job.scm_revision }}",`  
in the start message body and observe awx sending 
`commit: "",` 
in it´s webhook notification.

### Current results

`commit: "",` 

### Sugested feature result

`commit: "87c05830f0e045b55be00ff5e3649",` 

### Additional information

@fosterseth 
Would the feature mean that the notification would need to be delayed from **pre-run** to **preparing playbook** for the information to be available ?
https://youtu.be/RfQ_6gBHtBs?t=1963

Also -  should this feature not be feasable - is there a handy postgres listen query that would give me the commit hash once it is ready ? 
user: fkuep
issue_14402: state: open
title: Add a route to AA to get notifications
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
Adds a route that asks AA for notifications

Depends on https://gitlab.cee.redhat.com/automation-analytics/automation-analytics-backend/-/merge_requests/786
Fixes https://issues.redhat.com/browse/AA-1546

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 22.5.1.dev16+gf3969546ca
```

user: ZitaNemeckova
issue_14401: state: open
title: AWX to accept application credential created for Openstack
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

I have created an application credential in openstack, which I want to use it while creating a credential in AWX with Type "Openstack". Which I will use it for creating an inventory and syncing it all times. But in AWX I see the option to add username / password (or api key). Do we have a method for adding the application credentials from Openstack to AWX ?

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Create credential with Type Openstack and try to authenticate with application credential

### Current results

There is not such option

### Sugested feature result

Ability to accept application credential

### Additional information

_No response_
user: Iyappanj
issue_14400: state: open
title: leftover hybrid instance "awx" in Instances view after upgrade from ancient AWX version that can't be deleted
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Since I upgraded our ancient AWX (pre k8s version) and ran all migrations I can see "hybrid" instance in Instances view called just "awx" that lists all the jobs that were executed in old times.

This instance is marked as unavailable and can't be deleted from the view. It's also cluttering the topology map with some weird arrows

<img width="492" alt="image" src="https://github.com/ansible/awx/assets/1560121/026525ff-5650-45f7-8bac-f8415a869740">

How can we get rid of it?

### AWX version

23.0.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

minikube

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Upgrade from very old AWX (like 12.0.0)

### Expected results

No zombie instances

### Actual results

Zombie instance

### Additional information

_No response_
user: benapetr
issue_14395: state: open
title: Web replicas CPU consumption issue. Jobs start with delay
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

We are running AWX 22.5.0, deployed on Kubernetes using awx-operator 2.4.0.

We run 2 awx-task pods and 2 awx-web pods.

We recently upgraded to version 22.5.0 from 22.3.0.


Since the upgrade, when running jobs, some jobs take a while to start the actual run, as seen on the log below, we see the following message:

```
waited 252.4184970855713 to acquire lock for local source tree for path
``` 

The time of course changes from job to job, sometimes waiting 10 seconds and sometimes up to 15-20 minutes

Also since the upgrade, We started to notice that the AWX web pod is consuming high CPU, between 2-3 cores, while it's request is 1.5 cpus. the way we use AWX did not change, yet the CPU is now higher than ever (before the upgrade, we used no more than 0.5 cpus for each web pod).

The locking behavior used to happen to us in 22.3.0 as well, but not for longer than 70 seconds at peak hours. and now we reach as long as 15 minutes of lock time, not even during peak hours.

We are not sure the problems stated above are related, but we suspect they do, as when the CPU is higher, generally the lock wait times are higher.

```


Date	Host	Service	Message
2023-08-30T09:12:05.407Z			2023-08-30 09:12:04,194 INFO [0253207eebc648e9bffea0707239c9bd] awx.analytics.job_lifecycle job-8206451 notifications sent
2023-08-30T09:12:04.762Z			[pid: 3280|app: 0|req: 208/647118] REDACTED () {64 vars in 3450 bytes} [Wed Aug 30 09:12:03 2023] GET /api/v2/unified_jobs/?id__in=8206451&not__launch_type=sync&or__adhoccommand__inventory=48587&or__inventoryupdate__inventory_source__inventory=48587&or__job__inventory=48587&or__workflowjob__inventory=48587&order_by=-finished&page=1&page_size=20 => generated 52 bytes in 194 msecs (HTTP/1.1 200) 14 headers in 576 bytes (1 switches on core 0)
2023-08-30T09:12:04.762Z			REDACTED - - [30/Aug/2023:09:12:04 +0000] "GET /api/v2/unified_jobs/?id__in=8206451&not__launch_type=sync&or__adhoccommand__inventory=48587&or__inventoryupdate__inventory_source__inventory=48587&or__job__inventory=48587&or__workflowjob__inventory=48587&order_by=-finished&page=1&page_size=20 HTTP/1.1" 200 52 "https://REDACTED.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/REDACTED Safari/537.36" "REDACTED"
2023-08-30T09:12:04.762Z			[pid: 3285|app: 0|req: 341/647117] REDACTED () {64 vars in 3207 bytes} [Wed Aug 30 09:12:03 2023] GET /api/v2/unified_jobs/?id__in=8206451&name__icontains=REDACTEDe&not__launch_type=sync&order_by=-finished&page=1&page_size=20 => generated 52 bytes in 184 msecs (HTTP/1.1 200) 14 headers in 576 bytes (1 switches on core 0)
2023-08-30T09:12:04.762Z			REDACTED - - [30/Aug/2023:09:12:04 +0000] "GET /api/v2/unified_jobs/?id__in=8206451&name__icontains=REDACTEDe&not__launch_type=sync&order_by=-finished&page=1&page_size=20 HTTP/1.1" 200 52 "https://REDACTED.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/REDACTED Safari/537.36" "REDACTED"
2023-08-30T09:12:04.762Z			[pid: 3290|app: 0|req: 289/647116] REDACTED () {64 vars in 2466 bytes} [Wed Aug 30 09:12:03 2023] GET /api/v2/unified_jobs/?id__in=8206451&not__launch_type=sync&or__adhoccommand__inventory=50719&or__inventoryupdate__inventory_source__inventory=50719&or__job__inventory=50719&or__workflowjob__inventory=50719&order_by=-finished&page=1&page_size=20 => generated 52 bytes in 188 msecs (HTTP/1.1 200) 14 headers in 576 bytes (1 switches on core 0)
2023-08-30T09:12:04.762Z			REDACTED - - [30/Aug/2023:09:12:04 +0000] "GET /api/v2/unified_jobs/?id__in=8206451&not__launch_type=sync&or__adhoccommand__inventory=50719&or__inventoryupdate__inventory_source__inventory=50719&or__job__inventory=50719&or__workflowjob__inventory=50719&order_by=-finished&page=1&page_size=20 HTTP/1.1" 200 52 "https://REDACTED.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/REDACTED Safari/537.36" "REDACTED"
2023-08-30T09:12:04.487Z			[pid: 3281|app: 0|req: 338/647114] REDACTED () {64 vars in 2837 bytes} [Wed Aug 30 09:12:03 2023] GET /api/v2/unified_jobs/?id=8201333&id__in=8206451&not__launch_type=sync&order_by=-finished&page=1&page_size=20 => generated 52 bytes in 200 msecs (HTTP/1.1 200) 14 headers in 579 bytes (1 switches on core 0)
2023-08-30T09:12:04.487Z			REDACTED - - [30/Aug/2023:09:12:04 +0000] "GET /api/v2/unified_jobs/?id=8201333&id__in=8206451&not__launch_type=sync&order_by=-finished&page=1&page_size=20 HTTP/1.1" 200 52 "https://REDACTED.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/REDACTED Safari/537.36" "REDACTED"
2023-08-30T09:12:04.406Z			2023-08-30 09:12:03,778 INFO [0253207eebc648e9bffea0707239c9bd] awx.analytics.job_lifecycle job-8206451 finalize run
2023-08-30T09:12:04.406Z			2023-08-30 09:12:03,494 INFO [0253207eebc648e9bffea0707239c9bd] awx.analytics.job_lifecycle job-8206451 post run
2023-08-30T09:12:04.406Z			2023-08-30 09:12:03,484 INFO [0253207eebc648e9bffea0707239c9bd] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 8206451
2023-08-30T09:12:04.406Z			2023-08-30 09:12:03,433 INFO [-] awx.analytics.job_lifecycle job-8206451 stats wrapup finished
2023-08-30T09:12:04.397Z			ERROR 2023/08/30 09:12:03 [pV9H7SHu] Error reading from pod awx-workers/automation-job-8206451-zgf46: context canceled
2023-08-30T09:11:28.380Z			2023-08-30 09:11:27,141 INFO [0253207eebc648e9bffea0707239c9bd] awx.analytics.job_lifecycle job-8206451 work unit id assigned
2023-08-30T09:11:27.380Z			2023-08-30 09:11:27,097 INFO [0253207eebc648e9bffea0707239c9bd] awx.analytics.job_lifecycle job-8206451 work unit id received
2023-08-30T09:11:27.380Z			2023-08-30 09:11:26,873 INFO [0253207eebc648e9bffea0707239c9bd] awx.analytics.job_lifecycle job-8206451 running playbook
2023-08-30T09:11:27.380Z			2023-08-30 09:11:26,801 INFO [0253207eebc648e9bffea0707239c9bd] awx.analytics.job_lifecycle job-8206451 preparing playbook
2023-08-30T09:11:27.380Z			2023-08-30 09:11:26,666 INFO [0253207eebc648e9bffea0707239c9bd] awx.main.tasks.jobs Job 8206451 waited 252.4184970855713 to acquire lock for local source tree for path /var/lib/awx/projects/_36525__REDACTED.lock.
2023-08-30T09:07:15.310Z			[pid: 3286|app: 0|req: 68/646493] REDACTED () {64 vars in 3206 bytes} [Wed Aug 30 09:07:14 2023] GET /api/v2/unified_jobs/?id__in=8206451&name__icontains=REDACTEDe&not__launch_type=sync&order_by=-finished&page=1&page_size=20 => generated 52 bytes in 303 msecs (HTTP/1.1 200) 14 headers in 576 bytes (1 switches on core 0)
2023-08-30T09:07:15.310Z			REDACTED - - [30/Aug/2023:09:07:14 +0000] "GET /api/v2/unified_jobs/?id__in=8206451&name__icontains=REDACTEDe&not__launch_type=sync&order_by=-finished&page=1&page_size=20 HTTP/1.1" 200 52 "https://REDACTED.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/REDACTED Safari/537.36" "REDACTED"
2023-08-30T09:07:15.222Z			2023-08-30 09:07:14,745 INFO [0253207eebc648e9bffea0707239c9bd] awx.analytics.job_lifecycle job-8206451 notifications sent
2023-08-30T09:07:15.222Z			2023-08-30 09:07:14,241 INFO [0253207eebc648e9bffea0707239c9bd] awx.analytics.job_lifecycle job-8206451 pre run
2023-08-30T09:07:14.577Z			[pid: 3285|app: 0|req: 157/646482] REDACTED () {64 vars in 3227 bytes} [Wed Aug 30 09:07:14 2023] GET /api/v2/unified_jobs/?id__in=8206451%2C8206414&name__icontains=REDACTEDe&not__launch_type=sync&order_by=-finished&page=1&page_size=20 => generated 52 bytes in 204 msecs (HTTP/1.1 200) 14 headers in 576 bytes (1 switches on core 0)
2023-08-30T09:07:14.577Z			REDACTED - - [30/Aug/2023:09:07:14 +0000] "GET /api/v2/unified_jobs/?id__in=8206451%2C8206414&name__icontains=REDACTEDe&not__launch_type=sync&order_by=-finished&page=1&page_size=20 HTTP/1.1" 200 52 "https://REDACTED.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/REDACTED Safari/537.36" "REDACTED"
2023-08-30T09:07:14.577Z			[pid: 3210|app: 0|req: 420/646481] REDACTED () {64 vars in 3450 bytes} [Wed Aug 30 09:07:14 2023] GET /api/v2/unified_jobs/?id__in=8206451&not__launch_type=sync&or__adhoccommand__inventory=48587&or__inventoryupdate__inventory_source__inventory=48587&or__job__inventory=48587&or__workflowjob__inventory=48587&order_by=-finished&page=1&page_size=20 => generated 52 bytes in 234 msecs (HTTP/1.1 200) 14 headers in 576 bytes (1 switches on core 0)
2023-08-30T09:07:14.577Z			REDACTED - - [30/Aug/2023:09:07:14 +0000] "GET /api/v2/unified_jobs/?id__in=8206451&not__launch_type=sync&or__adhoccommand__inventory=48587&or__inventoryupdate__inventory_source__inventory=48587&or__job__inventory=48587&or__workflowjob__inventory=48587&order_by=-finished&page=1&page_size=20 HTTP/1.1" 200 52 "https://REDACTED.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/REDACTED Safari/537.36" "REDACTED"
2023-08-30T09:07:14.577Z			[pid: 3285|app: 0|req: 156/646477] REDACTED () {64 vars in 2838 bytes} [Wed Aug 30 09:07:14 2023] GET /api/v2/unified_jobs/?id=8201333&id__in=8206451&not__launch_type=sync&order_by=-finished&page=1&page_size=20 => generated 52 bytes in 208 msecs (HTTP/1.1 200) 14 headers in 579 bytes (1 switches on core 0)
2023-08-30T09:07:14.577Z			REDACTED - - [30/Aug/2023:09:07:14 +0000] "GET /api/v2/unified_jobs/?id=8201333&id__in=8206451&not__launch_type=sync&order_by=-finished&page=1&page_size=20 HTTP/1.1" 200 52 "https://REDACTED.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/REDACTED Safari/537.36" "REDACTED"
2023-08-30T09:07:14.091Z			2023-08-30 09:07:13,734 INFO [0253207eebc648e9bffea0707239c9bd] awx.analytics.job_lifecycle job-8206451 waiting
2023-08-30T09:07:13.090Z			2023-08-30 09:07:12,944 INFO [5f7742a679c14b728208ad5b6ace9f8b] awx.analytics.job_lifecycle job-8206451 blocked by projectupdate-8206410
2023-08-30T09:07:11.088Z			2023-08-30 09:07:10,114 INFO [77253084ad67431185bf6be7e13c1fb5] awx.analytics.job_lifecycle job-8206451 blocked by projectupdate-8206410
2023-08-30T09:06:58.207Z			2023-08-30 09:06:57,980 INFO [9a52ca1a2d004e099492068a170fd779] awx.analytics.job_lifecycle job-8206451 blocked by projectupdate-8206410
2023-08-30T09:06:54.081Z			2023-08-30 09:06:52,661 INFO [48d11e37e7f24fbf9c51f5517da7ee4c] awx.analytics.job_lifecycle job-8206451 blocked by projectupdate-8206410
2023-08-30T09:06:46.075Z			2023-08-30 09:06:45,548 INFO [15d85dc4273d40b3bd95a4126920ff58] awx.analytics.job_lifecycle job-8206451 blocked by projectupdate-8206410
2023-08-30T09:06:39.198Z			2023-08-30 09:06:37,780 INFO [27f4cc4b0e80479ba58e847eeaadb230] awx.analytics.job_lifecycle job-8206451 blocked by projectupdate-8206410
2023-08-30T09:06:39.071Z			2023-08-30 09:06:38,324 INFO [15d85dc4273d40b3bd95a4126920ff58] awx.analytics.job_lifecycle job-8206451 blocked by projectupdate-8206410
2023-08-30T09:06:34.068Z			2023-08-30 09:06:32,624 INFO [eadd7b7b13b24d6ab4c5dd0d0238b90f] awx.analytics.job_lifecycle job-8206451 blocked by projectupdate-8206410
2023-08-30T09:06:19.186Z			2023-08-30 09:06:17,761 INFO [1370871e537e45a3b368e2da0a4fd70a] awx.analytics.job_lifecycle job-8206451 blocked by projectupdate-8206410
2023-08-30T09:06:14.055Z			2023-08-30 09:06:12,747 INFO [d95ea34f91394953bf23d5cb84e603dd] awx.analytics.job_lifecycle job-8206451 blocked by projectupdate-8206410
2023-08-30T09:06:03.049Z			2023-08-30 09:06:01,882 INFO [230a326fbb584ad98df083be1b381de1] awx.analytics.job_lifecycle job-8206451 blocked by projectupdate-8206410
2023-08-30T09:06:02.049Z			2023-08-30 09:06:01,195 INFO [230a326fbb584ad98df083be1b381de1] awx.analytics.job_lifecycle job-8206451 blocked by projectupdate-8206410
2023-08-30T09:05:59.174Z			2023-08-30 09:05:57,827 INFO [d6938ca05b6a4e5dbfa3472e657d0557] awx.analytics.job_lifecycle job-8206451 blocked by projectupdate-8206410
2023-08-30T09:05:54.045Z			2023-08-30 09:05:52,591 INFO [e625cac429894d33a92e4fdb3b5ea7f0] awx.analytics.job_lifecycle job-8206451 blocked by projectupdate-8206410
2023-08-30T09:05:51.526Z			[pid: 3285|app: 0|req: 88/646360] REDACTED () {64 vars in 2838 bytes} [Wed Aug 30 09:05:50 2023] GET /api/v2/unified_jobs/?id=8201333&id__in=8206451&not__launch_type=sync&order_by=-finished&page=1&page_size=20 => generated 52 bytes in 168 msecs (HTTP/1.1 200) 14 headers in 579 bytes (1 switches on core 0)
2023-08-30T09:05:51.526Z			REDACTED - - [30/Aug/2023:09:05:50 +0000] "GET /api/v2/unified_jobs/?id=8201333&id__in=8206451&not__launch_type=sync&order_by=-finished&page=1&page_size=20 HTTP/1.1" 200 52 "https://REDACTED.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/REDACTED Safari/537.36" "REDACTED"
2023-08-30T09:05:51.262Z			[pid: 3286|app: 0|req: 1/646370] REDACTED () {64 vars in 3449 bytes} [Wed Aug 30 09:05:50 2023] GET /api/v2/unified_jobs/?id__in=8206451&not__launch_type=sync&or__adhoccommand__inventory=48587&or__inventoryupdate__inventory_source__inventory=48587&or__job__inventory=48587&or__workflowjob__inventory=48587&order_by=-finished&page=1&page_size=20 => generated 52 bytes in 485 msecs (HTTP/1.1 200) 14 headers in 576 bytes (1 switches on core 0)
2023-08-30T09:05:51.262Z			REDACTED - - [30/Aug/2023:09:05:50 +0000] "GET /api/v2/unified_jobs/?id__in=8206451&not__launch_type=sync&or__adhoccommand__inventory=48587&or__inventoryupdate__inventory_source__inventory=48587&or__job__inventory=48587&or__workflowjob__inventory=48587&order_by=-finished&page=1&page_size=20 HTTP/1.1" 200 52 "https://REDACTED.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/REDACTED Safari/537.36" "REDACTED"
2023-08-30T09:05:51.043Z			2023-08-30 09:05:50,841 INFO [230a326fbb584ad98df083be1b381de1] awx.analytics.job_lifecycle job-8206451 blocked by projectupdate-8206410
2023-08-30T09:05:51.043Z			2023-08-30 09:05:50,284 INFO [230a326fbb584ad98df083be1b381de1] awx.analytics.job_lifecycle job-8206451 acknowledged
2023-08-30T09:05:51.043Z			2023-08-30 09:05:50,163 INFO [230a326fbb584ad98df083be1b381de1] awx.analytics.job_lifecycle job-8206451 created



``` 

### AWX version

22.5.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Deploying AWX 22.5 on EKS 1.24 -> running jobs

### Expected results

The jobs should start running after a few seconds, or 2-3 minutes if a project update is performed.

### Actual results

The AWX web CPU is high and the jobs are waiting between 4-10 minutes to start running.

### Additional information

_No response_
user: lioramazor
issue_14390: state: open
title: Job state metrics: split into gauge and counter
body: Signed-off-by: onefourfive <>

##### SUMMARY
Closes #14369 

Prometheus `counter` metric types should be used for metrics that can only increase, eg terminal jobs states like `failed`, `canceled`, `error`, and `successful`.

##### ISSUE TYPE

 - New or Enhanced Feature

##### COMPONENT NAME
Metrics
 - API
 - Other

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 22.5.1.dev29+gbd7ad057c4
```


##### ADDITIONAL INFORMATION

Metrics Before
```
# HELP awx_status_total Status of Job launched
# TYPE awx_status_total gauge
awx_status_total{status="running"} 1.0
awx_status_total{status="canceled"} 33.0
awx_status_total{status="waiting"} 0.0
awx_status_total{status="successful"} 65753.0
awx_status_total{status="error"} 359.0
awx_status_total{status="failed"} 985.0
awx_status_total{status="pending"} 0.0
```

Metrics After
```
# HELP awx_status_started Status of Job started
# TYPE awx_status_started gauge
awx_status_started{status="waiting"} 0.0
awx_status_started{status="pending"} 0.0
awx_status_started{status="running"} 0.0
# HELP awx_status_completed_total Status of Jobs completed
# TYPE awx_status_completed_total counter
awx_status_completed_total{status="canceled"} 0.0
awx_status_completed_total{status="failed"} 0.0
awx_status_completed_total{status="error"} 0.0
awx_status_completed_total{status="successful"} 0.0
# TYPE awx_status_completed_created gauge
awx_status_completed_created{status="canceled"} 1.693263938630845e+09
awx_status_completed_created{status="failed"} 1.6932639386309366e+09
awx_status_completed_created{status="error"} 1.6932639386309566e+09
awx_status_completed_created{status="successful"} 1.6932639386309748e+09
```

Note the `_created` metrics are automatically exported by Prometheus for counters. This can be disabled with an environment variable `PROMETHEUS_DISABLE_CREATED_SERIES=True` (see [docs](https://github.com/prometheus/client_python#disabling-_created-metrics).
user: onefourfive
issue_14384: state: open
title: Cleanup Job Details. Configure days retention for the particular job entities. 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

For now, in the management job **Cleanup Job Schedule**, we can only define the number of days for all **job-related entities**, including ad-hoc commands, project-updates, inventory-updates, management-jobs, notifications, and workflow jobs.
<img width="1467" alt="image" src="https://github.com/ansible/awx/assets/79839819/a8e9e326-7522-424b-8ec6-9019ce9995be">

It would be very useful to make it configurable to define a different number of days for different entities.

For example, we need the job history for 90 days. Still, we don't need the notification history since we use notifications only for sending our logs to DataDog and don't use them anymore.

It can be done by using the awx-manage cli by command:
`awx-manage cleanup_jobs --notifications --days 0`

But we didn't find a way to do it from AWX UI by configuring the Management jobs, so we won't need to create an additional cronjob in K8s that will do it.

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Steps to reproduce

Run cleanup for jobs that are older than 90 days.

### Current results

All job-related entities were deleted.

### Sugested feature result

Only particular job-related entities are deleted; the number of days is configurable for each type of job.

### Additional information

_No response_
user: elibogomolnyi
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_14383: state: open
title: Unable to Send Email Notification in V21.3.0
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Dears,

I have installed AWX version 21.3.0 on microk8s in rhel8.

Created a Email Notification, when testing the Notification getting this error

Also, not receiving any emails when the mail sent through adhoc command, but mail received when sent in command line in AWX server.

Providing the following details for reference


Name		: 	Test Notification		
Description	:       Test
Organization   :	Test_Org (created this organization)
Type		: 	Email
User Name	:	Not entered
Password	        :       Not entered
Recipient list   : 	rn1@jcl.com
Host		: 	mail2.jcl.com
Sender e-mail :	root@lenltrain1d01.jcl.com
Port		       :  	25

Thank you in advance.

Regards,
Ramachandra


### AWX version

21.3.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

RHEL8.6

### Web browser

Chrome

### Steps to reproduce

If the steps provided in the installation procedure would be very helpful

### Expected results

Suppose to send an email notification when the template started, succeeded or failed

Also, have a playbook has the requirement to send an email with an attachment where mail agent is not installed in the awx-demo-task container to send an email with an attachment

### Actual results

Unable to send an email notification when template started or failed

Also, unable to send an email with an attachment as per our requirement where getting mail is not found

### Additional information

Danger alert:Test-Notification
[Errno 113] No route to host
user: ramachandra1234
issue_14381: state: open
title: Constructed inventory option should not appear in the inventory source creation menu
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

A new confusing option has appeared in the menu to create an inventory source - this corresponds to the "constructed" option but this type cannot be created in that menu, so it should be removed.

### AWX version

devel

### Select the relevant components

- [x] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Go to the demo inventory sources tab and click to add a new one

### Expected results

The constructed option should not be there

### Actual results

![constructed](https://github.com/ansible/awx/assets/1385596/4040f4ea-79dd-414c-8e3e-e73caae77615)

it's there with weird text

### Additional information

_No response_
user: AlanCoding
issue_14380: state: open
title: awx-manage: Add enable_instance command
body: Taken from:
https://github.com/ansible/awx/pull/13445

Adds the ability to enable an AWX instance via `awx-manage`.

##### SUMMARY
Gives `awx-manage` another command called `enable_instance` which allows an admin to use `awx-manage` to enable a given instance in addition to disabling an instance.

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - CLI
 - `awx-manage`

##### AWX VERSION
```
awx: 0.1.dev33458+gee1022b
```

##### ADDITIONAL INFORMATION
This feature completes the idea of being able to disable a queue (instance) within AWX via `awx-manage`, draining jobs, and re-enabling the queue when patching/maintenance/work is completed on a given instance node.

A benefit of using `awx-manage` vs the AWX API is it gives a way to run commands via automation service accounts to perform maintenance without having to be a user or admin of AWX.

For example:

```
# Docker environment
$ docker exec -ti awx_task awx-manage enable_instance --hostname <instance_node>

# K8s environment
$ kubectl -n awx exec -ti pod/awx-task-<hash>-<hash> -c awx-task -- awx-manage enable_instance --hostname awx-task-<hash>-<hash>
```

user: sirjaren
issue_14377: state: open
title: Conjur credential retrieval differs between Conjur OSS and Conjur Enterprise
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When attempting to retrieve credentials using Ansible AWX 22.7.x from Conjur Enterprise 13, I consistently encounter a 401 error. After thorough investigation, I've identified that the root of the issue lies within the `conjur_backend` function, which executes two requests to Conjur in order to fetch the necessary credential information:

1. Initial authentication is performed through the endpoint `api/authn/<account>/<username>/authenticate/`. The response from this request includes a signature.
2. The actual credential retrieval takes place using the endpoint `api/secrets/<account>/variable/<path_to_secret>/`, where users provide the relevant variable or secret.

Upon closer inspection, it becomes clear that the authentication response (as described in point 1) differs between Conjur OSS and Conjur Enterprise. To illustrate these differences, I wrote a test script, and the subsequent output from the console is documented in the provided images (Image 1: Test Code, Image 2: Console Output).

Image 1:
<img width="848" alt="Screenshot 2023-08-24 at 10 48 32" src="https://github.com/ansible/awx/assets/10104752/57a82fb0-c2fa-4a69-96b0-3fe755e8dc59">

Image 2:
<img width="784" alt="Screenshot 2023-08-24 at 10 46 50" src="https://github.com/ansible/awx/assets/10104752/d0eeea49-d21a-4bd5-bd44-4df9fef7ab1b">


The Conjur Enterprise API returns a response containing the keys `signature`, `payload`, and `protected`. In contrast, the Conjur OSS response presents the same keys, encoded in base64, though. The result is that the plain message from Conjur Enterprise should be encoded to base64 first, before added as a header to the second request (point 2).

~~An alternative approach involves including the header `{"Accept-Encoding": "base64"}` within the headers for the second request. This adjustment is performed within the `awx/main/credential_plugins/conjur.py` file, wherein the modification is as follows:~~

Original Code:
```python
    lookup_kwargs = {
        'headers': {'Authorization': 'Token token="{}"'.format(token)},
        'allow_redirects': False,
    }
```

Modified Code:
```python
    lookup_kwargs = {
        'headers': {'Authorization': 'Token token="{}"'.format(token), 'Accept-Encoding': 'base64'},
        'allow_redirects': False,
    }
```

~~By incorporating this change, we ensure compatibility with both Conjur OSS and Conjur Enterprise instances, enhancing the credential retrieval process from AWX.~~

---

**EDIT:** Following further investigation into this issue, it appears that my initial solution of adding headers may not be effective. I attempted to rectify this within my local AWX environment, but unfortunately, the issue persisted.

A more viable approach could involve checking whether the authentication response is already in base64 format. This can be accomplished using the following steps:

1. Begin by importing the necessary modules:
```python
import base64
import binascii
```

2. Integrate the following function into your codebase:
```python
def _is_base64(s: str) -> bool:
    try:
        return base64.b64encode(base64.b64decode(s.encode("utf-8"))) == s.encode("utf-8")
    except binascii.Error:
        return False
```

3. Adjust the declaration of the `lookup_kwargs` as shown below. This modification ensures that the authentication token is properly encoded if it's not already in base64 format:
```python
lookup_kwargs = {
    'headers': {'Authorization': 'Token token="{}"'.format(
        token if _is_base64(token) else base64.b64encode(token.encode('utf-8')).decode('utf-8')
    )},
    'allow_redirects': False,
}
```

@infamousjoeg can you help with this? And do you agree with this change?

### AWX version

22.7.1

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

docker development environment

### Modifications

yes

### Ansible version

_No response_

### Operating system

MacOS

### Web browser

Chrome

### Steps to reproduce

- Setup a Conjur Enterprise and a Conjur OSS environment
- Create 2 credentials (both for Conjur Enterprice and OSS)
- Create identical users and variables in both environments
- Test the credential retrieval in both environments

### Expected results

The retrieval of a secret from OSS will work, but the retrieval of a secret from Enterprise will result in a 401 error.

### Actual results

The retrieval of a secret from OSS works, and the retrieval of a secret from Enterprise results in a 401 error.

### Additional information

I tested the suggested code change. That was the only change I did in AWX.
user: Zektono
issue_14375: state: open
title: Collection hides actual error in many cases when HTTP response >=400
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

_No response_

### AWX version

devel

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Do something (like try to delete a project in the middle of an update) that causes the AWX API to return an HTTP code like a 403.

### Expected results

The error given by AWX, which is much more telling about what is happening, should be displayed as part of the error from the module.

### Actual results

```
TASK [project_update : Delete the test project 1] ******************************
fatal: [testhost]: FAILED! => {"changed": false, "msg": "You don't have permission to DELETE to /api/v2/projects/24/ (HTTP 403)."}
```

Whereas the API kindly tells us:

```json
{"detail":"Related job project_update 86 (successful) is still processing events."}
```

### Additional information

https://github.com/ansible/awx/blob/b55a0996201be5ab7727d7254932bcf483ba4e09/awx_collection/plugins/module_utils/controller_api.py#L520-L538
user: relrod
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14374: state: open
title: enable debug in troubleshoot setting breaks the UI
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Hello,

After enabling debug under troubleshoot settings I got the following: 
```
Server Error
A server error has occurred.
```
And the following error logs from awx-web container:
 `PermissionError: [Errno 13] Permission denied: '/var/log/tower'`

Thanks, 

### AWX version

22.7.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

enable debug under troubleshoot settings.

### Expected results

continue to use UI

### Actual results


[Untitled.pdf](https://github.com/ansible/awx/files/12421778/Untitled.pdf)


### Additional information

_No response_
user: Sam-su2060
labels: needs_developer: has had some work done but needs some ushering forward.
issue_14369: state: open
title: Prometheus metrics: use Counters for job metrics that should only increase
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Currently the job metrics exposed by AWX for prometheus use `gauge` type metrics:

```
# HELP awx_status_total Status of Job launched
# TYPE awx_status_total gauge
awx_status_total{status="running"} 0.0
awx_status_total{status="failed"} 21.0
awx_status_total{status="canceled"} 0.0
awx_status_total{status="successful"} 19.0
awx_status_total{status="waiting"} 0.0
awx_status_total{status="error"} 33.0
awx_status_total{status="pending"} 3.0
```

## Gauges

[Gauge metrics](https://prometheus.io/docs/concepts/metric_types/#gauge) make sense for transient states like 

* running
* waiting
* pending

Since jobs can enter and exit these states, they fit the definition of a prometheus gauge:

> A gauge is a metric that represents a single numerical value that can arbitrarily go up and down.

## Counters

However gauges do not make sense for the states that jobs can never exit, which might be called terminal states:

* failed
* error
* canceled
* successful

These metrics would be better captured in a [counter](https://prometheus.io/docs/concepts/metric_types/#counter):

> A counter is a cumulative metric that represents a single [monotonically increasing counter](https://en.wikipedia.org/wiki/Monotonic_function) whose value can only increase or be reset to zero on restart. For example, you can use a counter to represent the number of requests served, tasks completed, or errors.

# Benefits

Counter metrics are more useful in Prometheus for building better visualizations and alerts using query functions like [rate()](https://prometheus.io/docs/prometheus/latest/querying/functions/#rate) and [increase()](https://prometheus.io/docs/prometheus/latest/querying/functions/#increase), which in turn could be used to build SLOs based on AWX performance.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Scrape `/api/v2/metrics`

### Current results

`awx_status_total{}` gauge shows current values for jobs in all states.

```
# HELP awx_status_total Status of Job launched
# TYPE awx_status_total gauge
awx_status_total{status="running"} 0.0
awx_status_total{status="failed"} 21.0
awx_status_total{status="canceled"} 0.0
awx_status_total{status="successful"} 19.0
awx_status_total{status="waiting"} 0.0
awx_status_total{status="error"} 33.0
awx_status_total{status="pending"} 3.0
```

### Sugested feature result

A gauge is returned for transient job states and a counter is kept for terminal job states.

```
# HELP awx_status_launched Status of Jobs launched but not completed
# TYPE awx_status_total gauge
awx_status_launched{status="running"} 0.0
awx_status_launched{status="waiting"} 0.0
awx_status_launched{status="pending"} 3.0
# HELP awx_status_completed Status of Jobs completed
# TYPE awx_status_total counter
awx_status_completed{status="failed"} 21
awx_status_completed{status="successful} 19
awx_status_completed{status="error"} 33
```

### Additional information

_No response_
user: onefourfive
issue_14365: state: open
title: Relaunch jobs do not get queued when instances disabled
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When all AWX instances are disabled and a former job gets relaunched the following things happen
* internal server error
* the job appears in jobs as "New", but is stuck there indefinetly

### AWX version

22.5.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

openshift

### Modifications

no

### Ansible version

2.12.10

### Operating system

CentOS, RHEL

### Web browser

Firefox

### Steps to reproduce

* Disable all AWX instances
* Attempt to relaunch a foremerly successful job (or any job for that matter)


### Expected results

The relaunched job appears under jobs as pending and begins to start as soon as an AWX instance gets reenabled and picks it up

### Actual results

internal server error
![grafik](https://github.com/ansible/awx/assets/59733711/51237fac-aa47-4cae-979c-26eb9846eacc)

the job appears in jobs wit status "New" and is stuck there indefinetly
![grafik](https://github.com/ansible/awx/assets/59733711/19ca1431-164e-422c-a805-87c08cdec4e4)

Reenabling instances does not change the state of the relaunched job.


### Additional information

After reenabling AWX instances everything works fine again, including job relaunch.
Only the "New" job stays stuck.
user: 2and3makes23
issue_14364: state: open
title: Paths have changed in 22.7.  Possibly related to https://github.com/ansible/awx/pull/14079
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

We upgraded from 22.3.0 to 22.7.0 and noticed that playbooks with collections are failing with error message like:

EEROR! the role 'our_role_name' was not found in /runner/project/playbooks/blahblah/

So we searched release notes and came across [](https://github.com/ansible/awx/pull/14079)

And when I look at a job that worked before the upgrade we had

`ansible collection location = /runner/requirements_collections:/runner/project/collections:/usr/share/ansible/collections:/home/runner/.ansible/collections:/usr/share/ansible/collections`

Now its reports

`ansible collection location = /runner/requirements_collections:/home/runner/.ansible/collections:/usr/share/ansible/collections`

With this being where our collections are

`/runner/project/collections`

I dont see that in the new ansible collection location.

We have also tried adding a new line to our ansible.cfg, but nothing seems to have changed

Previous ansible.cfg line:
`collections_paths     = ./collections:/usr/share/ansible/collections`

Current ansible.cfg:
`collections_paths     = ./collections:/usr/share/ansible/collections
collection_paths     = ./collections:/usr/share/ansible/collections`

Any ideas?



### AWX version

22.7.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Upgrade 22.3 to 22.4 or higher

### Expected results

everything works as intended

### Actual results

playbooks with collections cant find the collections

### Additional information

_No response_
user: joeywashburn
issue_14355: state: open
title: Run Now button for schedules
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Schedules can be Added/Updated/Deleted. 
But it is currently not possible to easily run a selected schedule. Adding a Run Now button would be an easy but useful change

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

* Go to Templates
* click on one of the Templates that has schedules attached, 
* Select the Schedules tab
* Select a Schedule


### Current results

There is no option to immediatly launch a schedule.

### Sugested feature result

* Add a "Run Now" button when 1 or more schedules are selected.
* Add a "Run Now" button on the edit schedule screen as well

### Additional information

_No response_
user: dirkallaert
issue_14354: state: open
title: Improve user experience of copy pasting FQDNs from jobs
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Right now copy pasting FQDNs from job outputs is extremely annoying, when you want to click and select fqdn it usually opens some popup via JS which interrupts the copy operation. This popup again contains FQDN (but is useless in case you want to copy paste multiple fqdns) and even in this popup it's hard to copy paste the FQDN because it adds some garbage unicode symbols around it, so pasting into terminal wraps it with some invisible garbage.

Only workaround is to download job output as TXT then open in editor, find what you need (no highlighting so annoying) and copy it.

Perhaps make it possible to disable this popup or implement "copy" icons next to items that people might want to copy into clipboard, or make it so no invisible garbage gets into the text when copying

Here are screenshots describing my problem:

<img width="769" alt="image" src="https://github.com/ansible/awx/assets/1560121/9e723da3-0440-484f-84f8-5cd47360e021">

Selecting this ^ (or multiple hosts - even worse scenario) is interrupted with popup, see next screenshot

<img width="913" alt="image" src="https://github.com/ansible/awx/assets/1560121/988fa70d-be9f-4ff3-a559-8cf0907b6f8f">

In this popup selecting fqdn and doing cmd + c results in invisible garbage being added in front of FQDN

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Follow the steps outlined in previous comment

### Current results

Experience terrible

### Sugested feature result

Experience great

### Additional information

_No response_
user: benapetr
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_14353: state: open
title: Updating EC2 Inventory Source in yaml doesn't work
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Hello Friends,

When I am trying to edit the EC2 Source(Dynamic Inventory) in yaml mode, It doesn't switch from json. It remains in JSON format

JSON format enabled:
![image](https://github.com/ansible/awx/assets/498994/5c38e80c-2461-4650-a1b7-f1e537648549)

with YAML format enabled
![image](https://github.com/ansible/awx/assets/498994/b1a5770a-470c-4df4-9f6d-e56a13246319)

Thanks for your time and efforts to keep this project alive!

Do let me know in case any further information is required from my end


### AWX version

21.1

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

- Login to AWX
- Go to Inventories>EC2>Sources>EC2 Source
- Click on Edit Button
- Toggle between JSON/YAML format 
- Format of the dynamic inventory content is not impacted(stays in JSON format)

### Expected results

- Expected Result: We will get Inventory source content in YAML format

### Actual results

- It stays in JSON format

### Additional information

_No response_
user: Amrish-Sharma
issue_14352: state: open
title: Large cache size on pods
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Hello,

We have a large AWX instance, serving several hundred active customers. 

We noticed that some pods started to grow unpredictably for us.

What is causing the increase in space is the cache. We see it as the following path:

/var/lib/kubelet/pods/<container_Id>/volumes/kubernetes.io~empty-dir/awx-projects

Inside that folder are complete copies of client playbooks with all additional files. Looks like a mirror of client git repos.

Can the size of that cache be controlled? 

It is currently growing in a completely unpredictable way. Some customers have very large repositories, which causes an increase in demand for storage usage...

### AWX version

22.3.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

Amazon Linux

### Web browser

Chrome

### Steps to reproduce

Create a repo with a git source, check the /var/lib/kubelet/pods/<container_Id>/volumes/kubernetes.io~empty-dir/awx-projects path. 

### Expected results

Cache size has hard size limits, the oldest objects in the cache are removed, to not consume all available disk space.

### Actual results

A complete copy of the source repo is permanently stored there,

### Additional information

_No response_
user: BartekChojnacki
issue_14341: state: open
title: Non descriptive error when podman is missing
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

<!--

PLEASE DO NOT USE A BLANK TEMPLATE IN THE AWX REPO.
This is a legacy template used for internal testing ONLY.

Any issues opened will this template will be automatically closed.

Instead use the bug or feature request.

-->
##### SUMMARY
![image](https://github.com/ansible/awx/assets/8745776/f71cb8fe-5a53-4250-ba97-f7584b6b6a05)

This is the error message we get when running a job against a remote node that doesn't have podman installed

here is the stdout file of the receptor work unit in the awx-ee container

```
bash-5.1$ cat stdout
Unable to find process isolation executable: podman 
```

So receptor has the right error message, but this does not bubble up to awx

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change


##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API

<!-- Briefly describe the problem. -->

##### ENVIRONMENT
* AWX install method: operator
* AWX deployment target: kubernetes (kind)

##### STEPS TO REPRODUCE

<!-- For new features, show how the feature would be used. For bugs, please show
exactly how to reproduce the problem. Ideally, provide all steps and data needed
to recreate the bug from a new awx install. -->

setup a remote execution node on a k8s based awx deployment. Make sure podman is not installed on that node. The health check will still succeed because ansible-runner worker doesn't use podman.

Run a job against this execution node.

##### EXPECTED RESULTS

<!-- For bug reports, what did you expect to happen when running the steps
above? -->

hoping for an error message that points out missing podman


user: fosterseth
issue_14334: state: open
title: No meaningfull error message when  fs.inotify.max_user_watches are depleted.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When inotify file watches are depleted, jobs fail without STDOUT / or -ERR and I am left with an error level.
User regularly stumble upon the solution when trying to log-tail the awx containers after hours of investigation.
e.g.: https://github.com/ansible/awx/issues/10366#issuecomment-904627536 
I would need better feedback to awx´s health in these situations. It would be a fantastic thing to be alerted to the situation, 
since most of the modern log-pullers (e.g elastic) will probably be failing at the same time. 


### AWX version

22.5.0 

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [x] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

awx ee latest

### Operating system

linux

### Web browser

_No response_

### Steps to reproduce

echo 500 > /proc/sys/fs/inotify/max_user_watches
run a job template

### Expected results

Some notifiacation about a problem to watch files and directories or the depletion of inotify watches.

### Actual results

jobs fail with an errorlevel and not much else.

### Additional information

_No response_
user: fkuep
issue_14333: state: open
title: Improve log aggregator host/port validation
body: **Don't merge yet** - I want to add more tests.

##### SUMMARY

- Simplify validation functions for logging settings

- Abstract some host/port parsing logic out in utils.external_logging so the validation function can use it as settings are updated

- Never crash-loop if somehow http logging settings are invalid, just log errors (to the console!) and write a default /dev/null syslog config.

- Add a bunch of new test cases for various scenarios (most of them pass before the changes, but we throw some new errors now when validation fails).

Fixes #13823
Refs #13829

<!--- Describe the change, including rationale and design decisions -->

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->

 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API
user: relrod
issue_14331: state: open
title: Instance groups are not loading in 22.5.0
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

I have installed 22.5.0 and external postgres db

and then migrated the DB details from my existing awx 17.x backup data 

after that, unable to load instance group details -error is- something went wrong 

### AWX version

22.5.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

Default with awx 22.5.0

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

unable to load instance group details -error is- something went wrong 

### Expected results

load instance group details -error is- something went wrong 

### Actual results

load instance group details -error is- something went wrong 

### Additional information

_No response_
user: venkatasykam
issue_14329: state: open
title: [Doc Update][Collections] No use of organization parameter with inventory_source module
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

While creating the inventory source under created inventory using "inventory_soruce" module, we don't require to mention the organization as the organization field is not present while creating the inventory source.

Link: https://docs.ansible.com/ansible/latest/collections/awx/awx/inventory_source_module.html#ansible-collections-awx-awx-inventory-source-module

Examples
- name: Add an inventory source
  inventory_source:
    name: "source-inventory"
    description: Source for inventory
    inventory: previously-created-inventory
    credential: previously-created-credential
    overwrite: True
    update_on_launch: True
    organization: Default
    source_vars:
      private: false

### AWX version

4.4

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [X] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

We used the below playbooks to create an inventory source under created inventory.

Non-working:
~~~~~~~~~~~~
---
- hosts: localhost
   connection: local
   tasks:
     - name: Add an inventory source
        inventory_source:
          name: Inventory Sources Name
          description:
          organization: OrganizationName
          inventory: Inventory Plugin
          credential: Demo Credential
          source: scm
          source_project: Requirements Proyect
          source_path: inventory.yml
          state: present
          overwrite: true
          update_on_launch: true
          overwrite_vars: true
~~~~~~~~~~~~

Working:
~~~~~~~~~~~~
---
- hosts: localhost
   connection: local
   tasks:
     - name: Add an inventory source
        inventory_source:
          name: Inventory Sources Name
          description:
          inventory: Inventory Plugin
          credential: Demo Credential
          source: scm
          source_project: Requirements Proyect
          source_path: inventory.yml
          state: present
          overwrite: true
          update_on_launch: true
          overwrite_vars: true
~~~~~~~~~~~~

### Expected results

Playbook should be able to create the inventory source properly under existing inventory.

### Actual results

Playbook was unable to create the inventory source and gave us the below error.

```
fatal: [localhost]: FAILED! => {"changed": false, "msg": "The specified source project, {'organization': 6}, was not found."}
```

### Additional information

_No response_
user: nikhjain14
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14323: state: open
title: [python][awxkit] mutual TLS for https authentication via awxkit
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Currently, it is possible to access the AWX rest API over http and server-side https with the python awxkit package. I am using AWX behind an access proxy (i.e. teleport) which demands the mutual-TLS https protocol. I am able to access the rest API using curl (and specifying the client-side certificate options). Also, the requests library used by awxkit has a straightforward method of specifying a client-side certificate.

However, the awxkit does not appear to expose this option via its CLI tool. I would like this to be added.

I haven't checked whether the axwkit's python library interface exposes this or not. If not, it would be good to add this functionality here too.

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Steps to reproduce

awx --help

### Current results

No option to specify client-side certificates

### Sugested feature result

Option to specify client-side certificates should be exposed (both in the CLI and the python lib)

### Additional information

This could be a quick fix. I haven't looked at the code myself.
user: mysten-labs-charles-murphy
issue_14319: state: open
title: Dynatrace external logging
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Next to logstash, splunk and others, it would be nice to add Dynatrace to the list of supported logging aggregators.

The configuration is very similar to Splunk. The HTTP header value changes from `Splunk` to `Api-Token` .

This is a working config file:

```
[root@aap ~]# cat /var/lib/awx/rsyslog/rsyslog.conf
$WorkDirectory /var/lib/awx/rsyslog
$MaxMessageSize 700000
$IncludeConfig /var/lib/awx/rsyslog/conf.d/*.conf
main_queue(queue.spoolDirectory="/var/lib/awx" queue.maxdiskspace="1g" queue.type="Disk" queue.filename="awx-external-logger-backlog")
module(load="imuxsock" SysSock.Use="off")
input(type="imuxsock" Socket="/var/run/awx-rsyslog/rsyslog.sock" unlink="on" RateLimit.Burst="0")
template(name="awx" type="string" string="%rawmsg-after-pri%")
module(load="omhttp")
action(type="omhttp" server="fdgXXXXX.live.dynatrace.com" serverport="443" usehttps="on" allowunsignedcerts="off" skipverifyhost="off" action.resumeRetryCount="-1" template="awx" action.resumeInterval="6" errorfile="/var/log/tower/rsyslog.err" restpath="api/v2/logs/ingest" httpheaderkey="Authorization" httpheadervalue="Api-Token dt0c01.ABCDEFGH")
```

![image](https://github.com/ansible/awx/assets/2285094/2824f5dd-5264-4aa1-bbd5-a696c96e7e90)


### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

N/A

### Current results

N/A

### Sugested feature result

N/A

### Additional information

_No response_
user: sebw
issue_14308: state: open
title: Make it possible to adjust maximum pagination limits (in UI)
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

In old AWX you could display 100 items per page, in latest version maximum is 50 items per page. System administrators should be allowed to adjust this limit to whatever value they desire (for example 500 items per page, if their webserver is powerful enough).

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Now limit is max 50 items per page

### Current results

Now limit is max 50 items per page

### Sugested feature result

Make it possible for sysadmins to increase this limit in settings/ui/details

### Additional information

_No response_
user: benapetr
issue_14304: state: open
title: Pending job should display what is it waiting for
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Right now when you create a new job that is pending, it just shows "pending" and you have no clue which other job is blocking it. It would be nice if pending status also shown what it is waiting for (eg. waiting for inventory sync of awx_inventory, or waiting for project sync).

### Select the relevant components

- [X] UI
- [x] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Run a new job that has preconditions and you won't know what it is waiting for, unless digging into running jobs

### Current results

Not easy to figure out why job is pending

### Sugested feature result

See why job is pending

### Additional information

_No response_
user: benapetr
issue_14299: state: open
title: AWX is not processing the jobs
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

This is the error that I am getting after start a new job on awx
```
--- kubectl -n awx logs -f deployment/awx-task -c awx-task
2023-07-21 14:47:14,729 ERROR    [01683df8a8d740239e0f28d8a1be09f0] awx.main.dispatch Worker failed to run task awx.main.scheduler.tasks.task_manager(*[], **{}
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/task.py", line 103, in perform_work
    result = self.run_callable(body)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/task.py", line 78, in run_callable
    return _call(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/tasks.py", line 25, in task_manager
    run_manager(TaskManager, "task")
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/tasks.py", line 20, in run_manager
    manager().schedule()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/task_manager.py", line 136, in schedule
    self._schedule()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/task_manager.py", line 57, in inner
    result = func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/task_manager.py", line 741, in _schedule
    self.process_tasks()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/task_manager.py", line 710, in process_tasks
    self.process_pending_tasks(pending_tasks)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/task_manager.py", line 57, in inner
    result = func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/scheduler/task_manager.py", line 616, in process_pending_tasks
    task, instance_group_name=self.controlplane_ig.name, impact=control_impact, capacity_type='control'
AttributeError: 'NoneType' object has no attribute 'name'

```

On the awx-web container

```
sh-5.1$ awx-manage run_dispatcher
2023-07-26 19:13:48,217 WARNING  [-] awx.main.dispatch.periodic periodic beat started
2023-07-26 19:13:48,245 DEBUG    [-] awx.main.dispatch scaling up worker pid:613
2023-07-26 19:13:48,254 DEBUG    [-] awx.main.dispatch scaling up worker pid:614
2023-07-26 19:13:48,260 DEBUG    [-] awx.main.dispatch scaling up worker pid:615
2023-07-26 19:13:48,267 DEBUG    [-] awx.main.dispatch scaling up worker pid:616
2023-07-26 19:13:48,270 INFO     [-] awx.main.dispatch Running worker dispatcher listening to queues ['tower_broadcast_all', 'tower_settings_change', 'awx-task-6fbff4f477-rp5jm']
2023-07-26 19:13:48,280 ERROR    [-] awx.main.dispatch Encountered unhandled error in dispatcher main loop
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/base.py", line 181, in run
    self.worker.on_start()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/task.py", line 141, in on_start
    dispatch_startup()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/system.py", line 87, in dispatch_startup
    write_receptor_config()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/receptor.py", line 680, in write_receptor_config
    with lock:
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/filelock/_api.py", line 220, in __enter__
    self.acquire()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/filelock/_api.py", line 173, in acquire
    self._acquire()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/filelock/_unix.py", line 35, in _acquire
    fd = os.open(self._lock_file, open_mode)
PermissionError: [Errno 13] Permission denied: '/etc/receptor/receptor.conf.lock'
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 8, in <module>
    sys.exit(manage())
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/__init__.py", line 200, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/__init__.py", line 436, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/base.py", line 412, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/base.py", line 458, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/management/commands/run_dispatcher.py", line 81, in handle
    consumer.run()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/base.py", line 181, in run
    self.worker.on_start()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/task.py", line 141, in on_start
    dispatch_startup()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/system.py", line 87, in dispatch_startup
    write_receptor_config()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/receptor.py", line 680, in write_receptor_config
    with lock:
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/filelock/_api.py", line 220, in __enter__
    self.acquire()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/filelock/_api.py", line 173, in acquire
    self._acquire()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/filelock/_unix.py", line 35, in _acquire
    fd = os.open(self._lock_file, open_mode)
PermissionError: [Errno 13] Permission denied: '/etc/receptor/receptor.conf.lock'
```

For this issue above ^  I tried to set even 777 for that file on awx-ee and awx-task container, but it didnt fix it. 


### AWX version

22.3.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

All the pods are running and I can have access to AWX using the brower, I can see all my jobs/workflows/projects from my old instance(we migrate the db data from another instacen with AWX v15.0.0) but when I try to run a job it get stuck on "pending" status.No logs on the UI or job_explanation db column, however when I was looking the awx-task container I can see that there is an issue on task_manager.py (Check bug summary error)

### Expected results

Execution of the job on awx

### Actual results

It seems like its not even start to processing the job
![Screen Shot 2023-07-26 at 14 27 04](https://github.com/ansible/awx-operator/assets/56735755/58ce1665-b79d-4b30-b13b-e81accd5819b)

### Additional information

This is a almost fresh install for awx on k3s but we migrated our data from the previous AWX which  is on v15.0.0,  so I am aware that the psql migration could be causing this issue. The way we install that migration was 
* Go to postgres container 
* cd /var/lib/posgtgresql/data/ and pg_dump -U awx > backup.sql

Running a kubectl log for that container I can see several errors 
```
2023-06-07 22:18:52.325 UTC [172] ERROR:  column main_unifiedjob.execution_environment_id does not exist at character 234
2023-06-07 22:18:52.325 UTC [172] STATEMENT:  SELECT "main_unifiedjob"."id", "main_unifiedjob"."polymorphic_ctype_id", "main_unifiedjob"."modified", "main_unifiedjob"."description", "main_unifiedjob"."created_by_id", "main_unifiedjob"."modified_by_id", "main_unifiedjob"."name", "main_unifiedjob"."execution_environment_id", "main_unifiedjob"."old_pk", "main_unifiedjob"."emitted_events", "main_unifiedjob"."unified_job_template_id", "main_unifiedjob"."created", "main_unifiedjob"."launch_type", "main_unifiedjob"."schedule_id", "main_unifiedjob"."execution_node", "main_unifiedjob"."controller_node", "main_unifiedjob"."cancel_flag", "main_unifiedjob"."status", "main_unifiedjob"."failed", "main_unifiedjob"."started", "main_unifiedjob"."dependencies_processed", "main_unifiedjob"."finished", "main_unifiedjob"."canceled_on", "main_unifiedjob"."elapsed", "main_unifiedjob"."job_args", "main_unifiedjob"."job_cwd", "main_unifiedjob"."job_env", "main_unifiedjob"."job_explanation", "main_unifiedjob"."start_args", "main_unifiedjob"."result_traceback", "main_unifiedjob"."celery_task_id", "main_unifiedjob"."instance_group_id", "main_unifiedjob"."preferred_instance_groups_cache", "main_unifiedjob"."task_impact", "main_unifiedjob"."organization_id", "main_unifiedjob"."installed_collections", "main_unifiedjob"."ansible_version", "main_unifiedjob"."host_status_counts", "main_unifiedjob"."work_unit_id" FROM "main_unifiedjob" WHERE ("main_unifiedjob"."dependencies_processed" AND "main_unifiedjob"."status" IN ('pending', 'waiting', 'running') AND NOT ("main_unifiedjob"."launch_type" = 'sync') AND NOT ("main_unifiedjob"."polymorphic_ctype_id" = 69 AND "main_unifiedjob"."polymorphic_ctype_id" IS NOT NULL)) ORDER BY "main_unifiedjob"."created" ASC
2023-06-07 22:18:52.343 UTC [173] ERROR:  column main_unifiedjob.execution_environment_id does not exist at character 234
2023-06-07 22:18:52.343 UTC [173] STATEMENT:  SELECT "main_unifiedjob"."id", "main_unifiedjob"."polymorphic_ctype_id", "main_unifiedjob"."modified", "main_unifiedjob"."description", "main_unifiedjob"."created_by_id", "main_unifiedjob"."modified_by_id", "main_unifiedjob"."name", "main_unifiedjob"."execution_environment_id", "main_unifiedjob"."old_pk", "main_unifiedjob"."emitted_events", "main_unifiedjob"."unified_job_template_id", "main_unifiedjob"."created", "main_unifiedjob"."launch_type", "main_unifiedjob"."schedule_id", "main_unifiedjob"."execution_node", "main_unifiedjob"."controller_node", "main_unifiedjob"."cancel_flag", "main_unifiedjob"."status", "main_unifiedjob"."failed", "main_unifiedjob"."started", "main_unifiedjob"."dependencies_processed", "main_unifiedjob"."finished", "main_unifiedjob"."canceled_on", "main_unifiedjob"."elapsed", "main_unifiedjob"."job_args", "main_unifiedjob"."job_cwd", "main_unifiedjob"."job_env", "main_unifiedjob"."job_explanation", "main_unifiedjob"."start_args", "main_unifiedjob"."result_traceback", "main_unifiedjob"."celery_task_id", "main_unifiedjob"."instance_group_id", "main_unifiedjob"."preferred_instance_groups_cache", "main_unifiedjob"."task_impact", "main_unifiedjob"."organization_id", "main_unifiedjob"."installed_collections", "main_unifiedjob"."ansible_version", "main_unifiedjob"."host_status_counts", "main_unifiedjob"."work_unit_id" FROM "main_unifiedjob" WHERE (NOT "main_unifiedjob"."dependencies_processed" AND "main_unifiedjob"."status" IN ('pending') AND NOT ("main_unifiedjob"."launch_type" = 'sync') AND NOT ("main_unifiedjob"."polymorphic_ctype_id" = 69 AND "main_unifiedjob"."polymorphic_ctype_id" IS NOT NULL)) ORDER BY "main_unifiedjob"."created" ASC
2023-06-07 22:19:12.386 UTC [176] ERROR:  column main_schedule.execution_environment_id does not exist at character 313
2023-06-07 22:19:12.386 UTC [176] STATEMENT:  SELECT "main_schedule"."id", "main_schedule"."created", "main_schedule"."modified", "main_schedule"."description", "main_schedule"."created_by_id", "main_schedule"."modified_by_id", "main_schedule"."inventory_id", "main_schedule"."char_prompts", "main_schedule"."extra_data", "main_schedule"."survey_passwords", "main_schedule"."execution_environment_id", "main_schedule"."unified_job_template_id", "main_schedule"."name", "main_schedule"."enabled", "main_schedule"."dtstart", "main_schedule"."dtend", "main_schedule"."rrule", "main_schedule"."next_run" FROM "main_schedule" WHERE ("main_schedule"."enabled" AND "main_schedule"."next_run" < '2023-06-07T22:18:42.284075+00:00'::timestamptz) ORDER BY "main_schedule"."next_run" DESC NULLS LAST, "main_schedule"."id" ASC
2023-06-07 22:19:12.389 UTC [177] ERROR:  column main_unifiedjob.execution_environment_id does not exist at character 234
```

Is there maybe a better way to migrate data from an old version of awx (v15.0.0)?  is this data migration could be the root cause of the issue on awx-task container? 

### Operator Logs

Pods status: 
```
root@sl-tower:/home/sladmin# kubectl -n awx get pods
NAME                                               READY   STATUS    RESTARTS      AGE
awx-postgres-13-0                                  1/1     Running   1 (48d ago)   50d
awx-task-6fbff4f477-rp5jm                          4/4     Running   5 (48d ago)   49d
awx-web-5bd7f96b56-fmfqx                           3/3     Running   0             48d
awx-operator-controller-manager-74889d49c8-vc6b5   2/2     Running   0             48d
```
kustomization.yam file
```
resources:
- manager.yaml

generatorOptions:
  disableNameSuffixHash: true

configMapGenerator:
- files:
  - controller_manager_config.yaml
  name: awx-manager-config

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: controller
  newName: quay.io/ansible/awx-operator
  newTag: 2.2.1
```
user: klepiz
issue_14297: state: open
title: AWX ui-next - UI not displaying properly
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

```
docker exec tools_awx_1 make clean-ui ui-devel clean/ui-next ui-next

UI not displaying properly

```

### AWX version

22.5.0

### Select the relevant components

- [X] UI
- [X] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

docker exec tools_awx_1 make clean-ui ui-devel clean/ui-next ui-next

### Expected results

UI not displaying properly

### Actual results

N/A

### Additional information

N/A
user: fsbano
issue_14293: state: open
title: AWX jobs can't tolerate the EKS scale out
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

We have an environment for performance tests where we try to run more than 400 heavy workflows simultaneously. It causes the EKS control plane (master nodes) to scale out, and about half of our pods fail with errors. We've already opened an issue about it when we were reproducing the K8s master node termination in the kOps cluster (since we cannot do it with EKS) and it was fixed for the kOps clusters [here](https://github.com/ansible/awx/issues/13350), thanks to the community and especially to @TheRealHaoLiu. We also validated it with AWS support, asked them to terminate K8s nodes manually, and validated that the issue was resolved. The problem is that it is not fully applied to the scale-in or scale-out process of the EKS control plane.

In our case, it fails for EKS when the control plane scales out. For now, we are running the **control-plane-ee** with the following configuration:
```
  ee_extra_env: |-
    - name: RECEPTOR_KUBE_SUPPORT_RECONNECT
      value: enabled
    - name: RECEPTOR_LOG_LEVEL
      value: debug
```

After the [bugfix](https://github.com/ansible/receptor/pull/760) is merged, some pods can tolerate it and finish running successfully when the scale-out happens, and it can be considered an intermediate result. I see the following logs related to them (the second error happens occasionally and doesn't affect the AWX functionality)

**automation-job-141264-fxwvc (finished successfully)**

```
INFO 2023/07/27 20:17:38 [OqRdMEsY] Detected http2.GoAwayError for pod awx-workers/automation-job-141264-fxwvc. Will retry 5 more times. Error: http2: server sent GOAWAY and closed the connection; LastStreamID=6491, ErrCode=NO_ERROR, debug=""
ERROR 2023/07/27 20:26:47 [OqRdMEsY] Error reading from pod awx-workers/automation-job-141264-fxwvc: context canceled
```


But there are still many pods that fail with error. Here are variations of logs that we can see (we show all logs in **control-plane-ee** that are related to the particular job)

**automation-job-143331-7lggn (failed)**
`ERROR 2023/07/27 20:19:56 [JwdC5LdB] Error reading from pod awx-workers/automation-job-143331-7lggn: unexpected EOF`

**automation-job-140003-gq82x (failed)**
```
INFO 2023/07/27 20:17:04 [xJDCo0r6] Detected http2.GoAwayError for pod awx-workers/automation-job-140003-gq82x. Will retry 5 more times. Error: http2: server sent GOAWAY and closed the connection; LastStreamID=3639, ErrCode=NO_ERROR, debug=""
ERROR 2023/07/27 20:19:56 [xJDCo0r6] Error reading from pod awx-workers/automation-job-140003-gq82x: unexpected EOF
```

**automation-job-142724-mhdcm (failed)**
`ERROR 2023/07/27 20:17:04 [7Ewis9Pm] Error reading from pod awx-workers/automation-job-142724-mhdcm: read tcp 100.64.85.69:40134->172.27.2.235:443: read: connection reset by peer`

We still have our performance environment up and running and will gladly provide more logs if needed. Please tell us if changing the DEBUG log level to TRACE makes sense and can give us more info about the issue.





### AWX version

22.5.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Run more than 400 heavy workflows in EKS cluster that will cause the EKS control plane scale out

### Expected results

Jobs can tolerate the EKS control plane scale out

### Actual results

Half of the jobs fail with error

### Additional information

The EKS cluster version is 1.24
user: elibogomolnyi
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14291: state: open
title: Machine credentials wont work for ansible.posix.synchronize 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Hello,

I have been having this issue where ansible awx fails to synchronize from controller node (awx-ee) to remote host while using plain username password Machine Credentials. this functionality was working earlier and is currently broken. I was previously on AWX version 21.5.0 where it used to work fine. but when upgraded to the latest AWX 22.5.0 version this functionality no longer works. after going through the docs I see the following 

> Machine/SSH credentials do not use environment variables. Instead, they pass the username via the ansible -u flag, and interactively write the SSH password when the underlying SSH client prompts for it.

which says awx would interactively write ssh password when prompted. i feel the synchronize step is prompting for credentials and awx is not filling it in.


### AWX version

AWX 22.5.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [X] Collection
- [X] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

try to synchronize files from control node (AWX-EE) to remote host only using machine credentials (username/password)

### Expected results

sychronize module work fine on the older version.

### Actual results

Synchronize step hangs indefinitely 

### Additional information

_No response_
```[tasklist]
### Tasks
```

user: gannaramu
labels: component:awx_collection: issues related to the collection for controlling AWX
needs_investigation: PRs or issues that need further investigation
issue_14289: state: open
title: Allow image pruning with system job
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

I am breaking off my comment https://github.com/ansible/awx/issues/11997#issuecomment-1335496537 into another issue.

This proposes a new system job with parameters the user can toggle in order to have periodic cleanup of images happen. This would replace the dispatcher schedule for this misnamed task:

https://github.com/ansible/awx/blob/5a63533967a052a5727872cba878f8232d8e973a/awx/settings/defaults.py#L473

In spite of being named `cleanup_images`, it does not cleanup images.

For platform-wide clarity, this proposes a system job that simply runs the `ansible-runner worker cleanup` command across the cluster. The system job extra_vars should correspond exactly to the CLI options for that command.

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

If you run with a pull policy of "always" for an EE, then old layers from images with floating tags will be left lying around, eventually running out of disk space.

### Current results

There is no way within the app to clean those up.

### Sugested feature result

That you can use the system job to prune old images.

### Additional information

_No response_
user: AlanCoding
issue_14281: state: open
title: Provide a way to configure a custom stdout callback per job template
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

With the current version of awx the only way I found to provide a custom **stdout** callback is to add a global environment variable in the global JOB setting `ANSIBLE_STDOUT_CALLBACK`. But this callback will be use for all projects/jobs.

If we do not set this variable in global setting this variable will be defaulted to `awx_display`.  So even if we set up a stdout callback in the project in a `ansible.cfg` file the default value of `ANSIBLE_STDOUT_CALLBACK=awx_display` will take precedence.

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

N/A

### Current results

N/A

### Sugested feature result

Provide a way to overwrite `ANSIBLE_STDOUT_CALLBACK` in a JOB template. Maybe related to this request:

- https://github.com/ansible/awx/issues/5060

### Additional information

_No response_
user: jbyibm
issue_14280: state: open
title: Sync Construct Inventory don't await end of sync input inventories
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When Input inventories of construct inventory syncing, construct inventory may start sync process and recieve not full hosts list or hostvars from inventory.

### AWX version

22.3.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.15.0

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1) Create inventory
2) Add source to inventory
3) Create construct inventory on top of inventory creted in pt.1
4) Start syncing inventory
5) Start syncing construct inventory

### Expected results

Construct inventory await for input inventories to end sync

### Actual results

Construct inventory dont await for input inventories to end sync

### Additional information

_No response_
user: MrFoxTrot
issue_14279: state: open
title: Survey - Default values not showing up when a nested variable is referenced.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When you reference a nested variable, e.g. `some.var` as an survey answer variable and add a default answer, the answer field is empty when you start the playbook. 

### AWX version

22.5.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

Debian

### Web browser

Chrome

### Steps to reproduce

- Create a survey item
- enter a nested reference into the variable field
- enter a default answer
- start the playbook with the survey enabled

![image](https://github.com/ansible/awx/assets/112928769/9bf48919-fd9a-4c82-9ce8-47bd7fc66829)


### Expected results

The default answer showing up in the survey.

### Actual results

The default answer is not showing up in the survey. 



### Additional information

Here a brief example:
This works:
![image](https://github.com/ansible/awx/assets/112928769/b3fb78ee-0e2d-4153-8c07-67a4abc8c25d)

This works not:
![image](https://github.com/ansible/awx/assets/112928769/d2a994b6-0e00-497d-94b9-4824e22f40ef)

As you can see in the final survey:
![image](https://github.com/ansible/awx/assets/112928769/ae3fae56-3953-490e-8844-8cb2eb884079)

user: bhrbgk
issue_14278: state: open
title: Remove use_role requirement to existing JT.project to make changes to JT
body: ##### SUMMARY
This is an adjustment to https://github.com/ansible/awx/pull/13818

Unfortunately, I don't see any easy choices here. The "sensitive" change requirements are still suffocating.

This accomplishes the main stated goal of the prior PR and issue - which is to change the project while lacking `use_role` to the _existing_ project. This is accomplished by the subtle `obj=None` in the call to `check_related`. It might be apparent, but I'm _very_ opposed to the solution method in the PR 13818 because it adds more logic to an already out-of-control collection of business logic.

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - API


user: AlanCoding
issue_14277: state: open
title: Task was marked as running but was not present in the job queue, so it has been marked as failed.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

One of our jobs consistently fails with this error:
Task was marked as running but was not present in the job queue, so it has been marked as failed.

![image](https://github.com/ansible/awx/assets/79655350/aadda81f-fafe-4e11-b51f-1de223d47338)

We haven't been able to identify any resource crunch on k8s cluster, neither the AWX POD are running out of resources. 

### AWX version

21.3.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Our setup: 
AKS 1.23.8
AWX Operator: 0.24.0
AWX: 21.3.0

This job is connecting to ~30 linux VMs (inventory hosts) and from each VM, contacting ~100 network devices to get output of 3 commands. 
The output is being stored in a dictionary per inventory host. 

The job runs okay when there are lesser network devices (upto 90ish), with always fail with 100. 

As the error probably says, the issue should not be in the network or device access or anything else. 

### Expected results

Play runs smooth and job finishes as expected

### Actual results

Job fails with error message:
Task was marked as running but was not present in the job queue, so it has been marked as failed.


### Additional information

_No response_
user: deep7861
issue_14276: state: open
title: Unable to change number of days in management job - Cannot create property 'days' on string '{"days":"60"}'
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

In our prod environment, in the 'cleanup job schedule' management job, when trying to change the 'days of data to keep' from 60 to any other value, it gives following error:

![image](https://github.com/ansible/awx/assets/79655350/3b1506a9-3ca9-43f5-90da-61c37c9f47de)
Error: Cannot create property 'days' on string '{"days":"60"}'

Our Setup:
AKS 1.23
AWX 21.3.0
AWX Operator 0.24.0
Postgres - External, v12

The issue is not reproducible in similar setup in staging environment, so it should be something specific to this installation. 

### AWX version

21.3.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Not sure if the issue reproducible since we ourselves cannot do it in another environment. 
How to troubleshoot a specific setup in such scenario? 

p.s. - we are trying to upgrade to newer versions already and next minor version is planned in next 2 weeks. 

### Expected results

Number of days should change smoothly

### Actual results

Cannot create property 'days' on string '{"days":"60"}'

### Additional information

_No response_
user: deep7861
issue_14274: state: open
title: Feature request for EE override in templates
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

For job and workflow templates it would be nice to have az option make execution environment override/prompt on launch possible, like it is with branch override.

In a project where multiple releases can be accessed with branches or tags, the branch override could be a good choice.
But if newer release comes with a newer EE requirement, then there is no point to use branch override when EE version still need to match with the branch.

So it would be possible to create more dynamic workflows if in job and workflow templates we could override execution environment beside branch too.
Instead of creating a job template for every branch (because it has static EE), just use the same jobs and worklows and give in prompt the branch and EE when running the workflow.

### Select the relevant components

- [X] UI
- [X] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

For example in kubespray there are releases in branch/tag and every release have an ansible requirements (which could be the same python modules as last release but also could be different). So you create execution environtments for the releases, and you need to create a project for every branch you want to use (and select to correct EE for the branches).
And because you can't override EE you need to create branch specific job/workflow templates for every used branches and if you use those in a worklfow you need to also update workflow visualizer steps to point to the new version.

Or just simply create templates once, make it possible to override EE too and when you start worklow in the prompt select branch and EE.

### Current results

Currently not possible to override/make prompt on launch possible for execution environments.

### Sugested feature result

Make possible EE override too.

### Additional information

_No response_
user: blackluck
issue_14268: state: open
title: Split job-end host update into 2 queries to be slightly more efficient
body: ##### SUMMARY
What I want to do here is break up the existing query into 2 that are somewhat more scale-tolerant. Previously:

```sql
UPDATE "main_host"
SET "last_job_id" = (CASE
                         WHEN ("main_host"."id" = '13') THEN '36'
                         WHEN ("main_host"."id" = '14') THEN '36'
                         WHEN ("main_host"."id" = '15') THEN '36'
                         WHEN ("main_host"."id" = '16') THEN '36'
                         WHEN ("main_host"."id" = '12') THEN '36'
                         ELSE NULL
                     END)::integer,
    "last_job_host_summary_id" = (CASE
                                      WHEN ("main_host"."id" = '13') THEN '17'
                                      WHEN ("main_host"."id" = '14') THEN '16'
                                      WHEN ("main_host"."id" = '15') THEN '14'
                                      WHEN ("main_host"."id" = '16') THEN '15'
                                      WHEN ("main_host"."id" = '12') THEN '18'
                                      ELSE NULL
                                  END)::integer
WHERE "main_host"."id" IN ('13',
                           '14',
                           '15',
                           '16',
                           '12')
```

Now, for the same setup, instead of running that, it would run these two queries.

```sql
UPDATE "main_host"
SET "last_job_id" = '36'
WHERE "main_host"."id" IN ('13',
                           '14',
                           '15',
                           '16',
                           '12')
```

```sql
UPDATE "main_host"
SET "last_job_host_summary_id" = (CASE
                                      WHEN ("main_host"."id" = '13') THEN '17'
                                      WHEN ("main_host"."id" = '14') THEN '16'
                                      WHEN ("main_host"."id" = '15') THEN '14'
                                      WHEN ("main_host"."id" = '16') THEN '15'
                                      WHEN ("main_host"."id" = '12') THEN '18'
                                      ELSE NULL
                                  END)::integer
WHERE "main_host"."id" IN ('13',
                           '14',
                           '15',
                           '16',
                           '12')
```

So this is making use of the obvious redundancy in the first CASE logic, where it always set it to `'36'`. You obviously don't need a CASE there... it's always 36.

We may want some kind of deeper analysis to see how or if we could do a similar thing for the `last_job_host_summary` update... but it does not look good.

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API


user: AlanCoding
issue_14267: state: open
title: cannot save a file after executing playbook using tower templates
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Hi team,

I have been trying to save some files as a part of ansible playbook that I am executing using templates on tower. Template executes successfully but I cannot locate the files in the respective location. What can be wrong here? 

### AWX version

22.2.0

### Select the relevant components

- [X] UI
- [X] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

- create a playbook that is used to save config files
- create template on awx tower that uses above playbook
- launch the template, it should execute successfully.

### Expected results

tower successfully saves file inside task container in the provided path (var/lib/awx/projects in my case) in the ansible playbook.

### Actual results

cannot save the file and locate it

### Additional information
```
---
- name: Backup Cisco Router or Switch
  hosts: switches
  gather_facts: no
  connection: local

  vars:
    ansible_network_os: ios
    ansible_connection: network_cli
    ansible_become: yes
    ansible_become_method: enable
    dir_name: var/lib/awx/projects/{new_folder}

  tasks:
    - name: IOS CONFIG
      ios_command:
        commands: show run
      register: output_router

    - name: Create a directory if it does not exist
      ansible.builtin.file:
        path: "{{dir_name}}"
        state: directory
        mode: '0755'

    - name: SAVE IOS CONFIG
      copy:
        content: "{{ output_router.stdout[0] }}"
        dest: "{{dir_name}}/show_run_{{ inventory_hostname }}.txt"
```
user: vshete93
issue_14264: state: open
title: Workflow Editor - Editing links
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

You have a JT node A in a workflow, which is followed by two JT nodes B and C in parallel execution. If you want to change the execution of B and C to sequential, you add a link from B to C. Now it is no longer possible to delete thethe link from A to C. The menu is now hidden by the JT node B.

### AWX version

22.5.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

see above.

### Expected results

see above

### Actual results

see above

### Additional information

_No response_
user: ReinerNippes
issue_14253: state: open
title: Add Option to Disable Content Installation in Project Settings
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

### Desired Feature

I propose a new feature for AWX - an option in the project settings to disable the installation of Ansible roles and collections. 

### Use Case

The primary use case for this feature is for projects with a large number of roles and collections. Currently, AWX updates and installs these dependencies for each project update, which can be time-consuming and, in some cases, unnecessary.

This feature would allow users to choose when to update their project dependencies, offering more control and potentially reducing the time taken to update a project.

### Proposed Solution

Add a checkbox or similar control in the AWX project settings UI that sets whether or not to update roles and collections. This control should be set to 'enabled' by default to maintain the current behavior.

When disabled, AWX should not update or install roles and collections for that specific project.

This user control would need to be propagated to the project_update Ansible playbook (https://github.com/ansible/awx/blob/devel/awx/playbooks/project_update.yml), controlling the `roles_enabled` and `collections_enabled` variables as appropriate.

### Alternatives

The current alternative is to manually modify the `roles_enabled` and `collections_enabled` variables in the playbook, but this is less intuitive and accessible to users.

### Select the relevant components

- [X] UI
- [X] API
- [X] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Currently no way to control the installation of content in a project sync is provided out of the box

### Current results

Currently no way to control the installation of content in a project sync is provided out of the box

### Sugested feature result

A way to control the installation of content in a project sync is provided out of the box

### Additional information

_No response_
user: jangel97
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14252: state: open
title: Allow saving misc settings in UI if CSRF is set in spec
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

if you pass CSRF via AWX spec file, then a user cannot edit the misc setting UI page. We need to apply a similar treatment as this change https://github.com/ansible/awx/pull/14103/files to the CSRF input field

I believe this only affects K8S deployments.

### AWX version

22.3

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

deploy AWX on kubernetes with this extra_settings in the AWX spec

```yaml
extra_settings:
  - setting: CSRF_TRUSTED_ORIGINS
    value:
      - https://localhost:3001
```

### Expected results

Can edit and save misc setting in UI

### Actual results

Can open edit page but not save

### Additional information

_No response_
user: fosterseth
issue_14250: state: open
title: AWX - Plateform instability and project sync failure
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Our environment : 

- 1 awx master on k3s with 2 external workers (using receptor)
- projects are hosted on enterprise github
- SAML auth
- Upgraded from 21.10.0 to 22.1.0 (~mid june)
- Control node EE untouched (only custom workers EE for playbooks)
- No limit added to pods

We have recently issues on AWX. It seems random (maybe related with some sort of accumulation, or burst, or else).
The web interface isn't working correctly (slow, some errors) and any project sync fails.
Without the root cause, the only thing we can do is scale down web/task deployments so the operator restart them. Everything is ok after that.

We checked server's system (cpu/mem/disk/net/etc..) and logs without any luck.
No specific action on the plateform.
No high number of jobs running.


### AWX version

22.1.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.14

### Operating system

RHEL 8.6

### Web browser

_No response_

### Steps to reproduce

Didn't find a way to reproduce at will.

### Expected results

The interface is smooth.
Project sync works.

### Actual results

Interface is slow to show and all project sync fails (so no job with outdated project cache can be executed)

### Additional information

**• Example of project sync error**
```
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 604, in run
    res = receptor_job.run()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/receptor.py", line 317, in run
    res = self._run_internal(receptor_ctl)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/receptor.py", line 392, in _run_internal
    res = processor_future.result()
  File "/usr/lib64/python3.9/concurrent/futures/_base.py", line 446, in result
    return self.__get_result()
  File "/usr/lib64/python3.9/concurrent/futures/_base.py", line 391, in __get_result
    raise self._exception
  File "/usr/lib64/python3.9/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/utils/common.py", line 1188, in wrapper_cleanup_new_process
    return func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/receptor.py", line 460, in processor
    return ansible_runner.interface.run(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/ansible_runner/interface.py", line 211, in run
    r.run()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/ansible_runner/streaming.py", line 355, in run
    self.event_callback(data)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/ansible_runner/streaming.py", line 310, in event_callback
    should_write = self.event_handler(event_data)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/callback.py", line 222, in event_handler
    super_return_value = super(RunnerCallbackForProjectUpdate, self).event_handler(event_data)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/callback.py", line 166, in event_handler
    self.dispatcher.dispatch(event_data)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/queue.py", line 32, in dispatch
    self.connection.rpush(self.queue, json.dumps(obj, cls=AnsibleJSONEncoder))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/redis/commands/core.py", line 2695, in rpush
    return self.execute_command("RPUSH", name, *values)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/redis/client.py", line 1238, in execute_command
    return conn.retry.call_with_retry(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/redis/retry.py", line 49, in call_with_retry
    fail(error)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/redis/client.py", line 1242, in <lambda>
    lambda error: self._disconnect_raise(conn, error),
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/redis/client.py", line 1228, in _disconnect_raise
    raise error
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/redis/retry.py", line 46, in call_with_retry
    return do()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/redis/client.py", line 1239, in <lambda>
    lambda: self._send_command_parse_response(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/redis/client.py", line 1215, in _send_command_parse_response
    return self.parse_response(conn, command_name, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/redis/client.py", line 1254, in parse_response
    response = connection.read_response()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/redis/connection.py", line 824, in read_response
    response = self._parser.read_response(disable_decoding=disable_decoding)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/redis/connection.py", line 487, in read_response
    raise response
redis.exceptions.ConnectionError: max number of clients reached
```

Checked redis configuration (~20 clients connected for 10K limit).
With AWX metrics, I found some differences but I can't properly interpret them (I guess some kind of burst but I don't really know).

**• Metrics near platform issues**
```
# HELP awx_database_connections_total Number of connections to database
# TYPE awx_database_connections_total gauge
awx_database_connections_total 15.0
# HELP callback_receiver_events_queue_size_redis Current number of events in redis queue
# TYPE callback_receiver_events_queue_size_redis gauge
callback_receiver_events_queue_size_redis{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 0
# HELP callback_receiver_events_popped_redis Number of events popped from redis
# TYPE callback_receiver_events_popped_redis gauge
callback_receiver_events_popped_redis{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 241058
# HELP callback_receiver_events_in_memory Current number of events in memory (in transfer from redis to db)
# TYPE callback_receiver_events_in_memory gauge
callback_receiver_events_in_memory{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 0
# HELP callback_receiver_batch_events_errors Number of times batch insertion failed
# TYPE callback_receiver_batch_events_errors gauge
callback_receiver_batch_events_errors{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 0
# HELP callback_receiver_events_insert_db_seconds Total time spent saving events to database
# TYPE callback_receiver_events_insert_db_seconds gauge
callback_receiver_events_insert_db_seconds{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 6633.5608182273245
# HELP callback_receiver_events_insert_db Number of events batch inserted into database
# TYPE callback_receiver_events_insert_db gauge
callback_receiver_events_insert_db{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 236855
# HELP callback_receiver_events_broadcast Number of events broadcast to other control plane nodes
# TYPE callback_receiver_events_broadcast gauge
callback_receiver_events_broadcast{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 175081
# HELP callback_receiver_batch_events_insert_db Number of events batch inserted into database
# TYPE callback_receiver_batch_events_insert_db histogram
callback_receiver_batch_events_insert_db_bucket{le="10",node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 122780
callback_receiver_batch_events_insert_db_bucket{le="50",node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 124498
callback_receiver_batch_events_insert_db_bucket{le="150",node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 124528
callback_receiver_batch_events_insert_db_bucket{le="350",node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 124528
callback_receiver_batch_events_insert_db_bucket{le="650",node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 124528
callback_receiver_batch_events_insert_db_bucket{le="2000",node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 124528
callback_receiver_batch_events_insert_db_bucket{le="+Inf",node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 124528
callback_receiver_batch_events_insert_db_count{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 124528
callback_receiver_batch_events_insert_db_sum{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 236855
# HELP callback_receiver_event_processing_avg_seconds Average processing time per event per callback receiver batch
# TYPE callback_receiver_event_processing_avg_seconds gauge
callback_receiver_event_processing_avg_seconds{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 1.6913103333333332
# HELP subsystem_metrics_pipe_execute_seconds Time spent saving metrics to redis
# TYPE subsystem_metrics_pipe_execute_seconds gauge
subsystem_metrics_pipe_execute_seconds{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 118.10413664561273
# HELP subsystem_metrics_pipe_execute_calls Number of calls to pipe_execute
# TYPE subsystem_metrics_pipe_execute_calls gauge
subsystem_metrics_pipe_execute_calls{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 71599
# HELP subsystem_metrics_send_metrics_seconds Time spent sending metrics to other nodes
# TYPE subsystem_metrics_send_metrics_seconds gauge
subsystem_metrics_send_metrics_seconds{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 355.07566434563284
# HELP task_manager_get_tasks_seconds Time spent in loading tasks from db
# TYPE task_manager_get_tasks_seconds gauge
task_manager_get_tasks_seconds{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 0.005228978581726551
# HELP task_manager_start_task_seconds Time spent starting task
# TYPE task_manager_start_task_seconds gauge
task_manager_start_task_seconds{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 0.0
# HELP task_manager_process_running_tasks_seconds Time spent processing running tasks
# TYPE task_manager_process_running_tasks_seconds gauge
task_manager_process_running_tasks_seconds{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 0.0
# HELP task_manager_process_pending_tasks_seconds Time spent processing pending tasks
# TYPE task_manager_process_pending_tasks_seconds gauge
task_manager_process_pending_tasks_seconds{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 0.0
# HELP task_manager__schedule_seconds Time spent in running the entire _schedule
# TYPE task_manager__schedule_seconds gauge
task_manager__schedule_seconds{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 0.016287230886518955
# HELP task_manager__schedule_calls Number of calls to _schedule, after lock is acquired
# TYPE task_manager__schedule_calls gauge
task_manager__schedule_calls{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 254603
# HELP task_manager_recorded_timestamp Unix timestamp when metrics were last recorded
# TYPE task_manager_recorded_timestamp gauge
task_manager_recorded_timestamp{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 1688769903.3931773
# HELP task_manager_tasks_started Number of tasks started
# TYPE task_manager_tasks_started gauge
task_manager_tasks_started{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 0
# HELP task_manager_running_processed Number of running tasks processed
# TYPE task_manager_running_processed gauge
task_manager_running_processed{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 0
# HELP task_manager_pending_processed Number of pending tasks processed
# TYPE task_manager_pending_processed gauge
task_manager_pending_processed{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 0
# HELP task_manager_tasks_blocked Number of tasks blocked from running
# TYPE task_manager_tasks_blocked gauge
task_manager_tasks_blocked{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 0
# HELP task_manager_commit_seconds Time spent in db transaction, including on_commit calls
# TYPE task_manager_commit_seconds gauge
task_manager_commit_seconds{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 0.0002639293670654297
# HELP dependency_manager_get_tasks_seconds Time spent loading pending tasks from db
# TYPE dependency_manager_get_tasks_seconds gauge
dependency_manager_get_tasks_seconds{node="awx-fake-name-task-c7dcdcbcf-9gxzj"} 0.007382605224847794
```

**• Metrics with healthy platform**

```
# HELP awx_database_connections_total Number of connections to database
# TYPE awx_database_connections_total gauge
awx_database_connections_total 15.0
# HELP callback_receiver_events_queue_size_redis Current number of events in redis queue
# TYPE callback_receiver_events_queue_size_redis gauge
callback_receiver_events_queue_size_redis{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 0
# HELP callback_receiver_events_popped_redis Number of events popped from redis
# TYPE callback_receiver_events_popped_redis gauge
callback_receiver_events_popped_redis{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 4836
# HELP callback_receiver_events_in_memory Current number of events in memory (in transfer from redis to db)
# TYPE callback_receiver_events_in_memory gauge
callback_receiver_events_in_memory{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 0
# HELP callback_receiver_batch_events_errors Number of times batch insertion failed
# TYPE callback_receiver_batch_events_errors gauge
callback_receiver_batch_events_errors{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 0
# HELP callback_receiver_events_insert_db_seconds Total time spent saving events to database
# TYPE callback_receiver_events_insert_db_seconds gauge
callback_receiver_events_insert_db_seconds{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 107.60422206111252
# HELP callback_receiver_events_insert_db Number of events batch inserted into database
# TYPE callback_receiver_events_insert_db gauge
callback_receiver_events_insert_db{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 4779
# HELP callback_receiver_events_broadcast Number of events broadcast to other control plane nodes
# TYPE callback_receiver_events_broadcast gauge
callback_receiver_events_broadcast{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 3373
# HELP callback_receiver_batch_events_insert_db Number of events batch inserted into database
# TYPE callback_receiver_batch_events_insert_db histogram
callback_receiver_batch_events_insert_db_bucket{le="10",node="awx-fake-name-task-c7dcdcbcf-f54ls"} 2962
callback_receiver_batch_events_insert_db_bucket{le="50",node="awx-fake-name-task-c7dcdcbcf-f54ls"} 2990
callback_receiver_batch_events_insert_db_bucket{le="150",node="awx-fake-name-task-c7dcdcbcf-f54ls"} 2990
callback_receiver_batch_events_insert_db_bucket{le="350",node="awx-fake-name-task-c7dcdcbcf-f54ls"} 2990
callback_receiver_batch_events_insert_db_bucket{le="650",node="awx-fake-name-task-c7dcdcbcf-f54ls"} 2990
callback_receiver_batch_events_insert_db_bucket{le="2000",node="awx-fake-name-task-c7dcdcbcf-f54ls"} 2990
callback_receiver_batch_events_insert_db_bucket{le="+Inf",node="awx-fake-name-task-c7dcdcbcf-f54ls"} 2990
callback_receiver_batch_events_insert_db_count{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 2990
callback_receiver_batch_events_insert_db_sum{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 4779
# HELP callback_receiver_event_processing_avg_seconds Average processing time per event per callback receiver batch
# TYPE callback_receiver_event_processing_avg_seconds gauge
callback_receiver_event_processing_avg_seconds{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 1.7844824285714285
# HELP subsystem_metrics_pipe_execute_seconds Time spent saving metrics to redis
# TYPE subsystem_metrics_pipe_execute_seconds gauge
subsystem_metrics_pipe_execute_seconds{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 2.358793856576085
# HELP subsystem_metrics_pipe_execute_calls Number of calls to pipe_execute
# TYPE subsystem_metrics_pipe_execute_calls gauge
subsystem_metrics_pipe_execute_calls{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 1727
# HELP subsystem_metrics_send_metrics_seconds Time spent sending metrics to other nodes
# TYPE subsystem_metrics_send_metrics_seconds gauge
subsystem_metrics_send_metrics_seconds{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 5.858100923709571
# HELP task_manager_get_tasks_seconds Time spent in loading tasks from db
# TYPE task_manager_get_tasks_seconds gauge
task_manager_get_tasks_seconds{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 0.005362008698284626
# HELP task_manager_start_task_seconds Time spent starting task
# TYPE task_manager_start_task_seconds gauge
task_manager_start_task_seconds{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 0.0
# HELP task_manager_process_running_tasks_seconds Time spent processing running tasks
# TYPE task_manager_process_running_tasks_seconds gauge
task_manager_process_running_tasks_seconds{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 0.0
# HELP task_manager_process_pending_tasks_seconds Time spent processing pending tasks
# TYPE task_manager_process_pending_tasks_seconds gauge
task_manager_process_pending_tasks_seconds{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 0.0
# HELP task_manager__schedule_seconds Time spent in running the entire _schedule
# TYPE task_manager__schedule_seconds gauge
task_manager__schedule_seconds{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 0.019680513069033623
# HELP task_manager__schedule_calls Number of calls to _schedule, after lock is acquired
# TYPE task_manager__schedule_calls gauge
task_manager__schedule_calls{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 355
# HELP task_manager_recorded_timestamp Unix timestamp when metrics were last recorded
# TYPE task_manager_recorded_timestamp gauge
task_manager_recorded_timestamp{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 1689609843.2095385
# HELP task_manager_tasks_started Number of tasks started
# TYPE task_manager_tasks_started gauge
task_manager_tasks_started{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 0
# HELP task_manager_running_processed Number of running tasks processed
# TYPE task_manager_running_processed gauge
task_manager_running_processed{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 0
# HELP task_manager_pending_processed Number of pending tasks processed
# TYPE task_manager_pending_processed gauge
task_manager_pending_processed{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 0
# HELP task_manager_tasks_blocked Number of tasks blocked from running
# TYPE task_manager_tasks_blocked gauge
task_manager_tasks_blocked{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 0
# HELP task_manager_commit_seconds Time spent in db transaction, including on_commit calls
# TYPE task_manager_commit_seconds gauge
task_manager_commit_seconds{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 0.0001938343048095703
# HELP dependency_manager_get_tasks_seconds Time spent loading pending tasks from db
# TYPE dependency_manager_get_tasks_seconds gauge
dependency_manager_get_tasks_seconds{node="awx-fake-name-task-c7dcdcbcf-f54ls"} 0.011181914247572422
```


user: sylvain-de-fuster
labels: needs_investigation: PRs or issues that need further investigation
issue_14266: state: open
title: feature suggestion: ee from private AWS ECR registry
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx-operator/issues) for duplicates.
- [X] I understand that AWX Operator is open source software provided for free and that I might not receive a timely response.

### Feature Summary

It would be very useful to pull the execution environments images from a private AWS Elastic Container Registry.
The limitation here is due to the [12 hours authentication token validity](https://docs.aws.amazon.com/AmazonECR/latest/userguide/registry_auth.html#registry-auth-token) of the ECR service, that forces us to refresh it manually, which is not a sustainable workaround.
Is it possible to implement such feature natively in the Operator?

Thank you

user: LeoSpyke
issue_14247: state: open
title: update execution_nodes.md with receptor changes
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

per @kurokobo we need to update some documentation that changed due to receptor collection PR's changing. I am filing this on his behalf as he reported them in a PR. Below are direct comments on what needs to be updated. 


> Since the new receptor-collection will no longer use the Copr repository (it will just download and extract binary from release page), shouldn't [this line](https://github.com/ansible/awx/pull/14215/files#diff-8452cfe377325a4faecbb73613fa7ee70239e3ed1ef1a61353efb4bd069ec953R79) be removed?

>Note, the playbook will enable the [Copr ansible-awx/receptor repository](https://copr.fedorainfracloud.org/coprs/ansible-awx/receptor/) so that Receptor can be installed.


> And as follow-up for https://github.com/ansible/awx/issues/13287 and https://github.com/ansible/awx/pull/13362, can you add a note for RHEL8-based nodes that describes receptor_dependencies in group_vars/all.yml should be modified to python39-pip instead of python3-pip?
The default python3-pip (updated in https://github.com/ansible/awx/pull/14088) is applicable for only RHEL9, since python3-pip for RHEL8 is too old and causes error while install ansible-runner via pip.



### AWX version

devel

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

devel

### Operating system

n/a

### Web browser

Chrome

### Steps to reproduce

Review execution_nodes.md and attempt to install on rhel 8.

### Expected results

thinks work according to the doc

### Actual results

failures occur given the changes made to the receptor collection 

### Additional information

_No response_
user: thedoubl3j
issue_14238: state: open
title: Preemptively remove django-taggit relationships
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Task, do the following:

 - remove taggit use in `awx/main/models`, mainly in the form of `taggit.managers.TaggableManager`
 - run `awx-manage makemigrations`

Any existing tags will be deleted in this process.

Why? Because with https://github.com/jazzband/django-taggit/pull/862 there is a lot of uncertainty about whether this library will play nicely with future Django versions, and whether it will do so in the time frame that we need it. Django has made some opinionated changes that requires a degree of synchronicity, in that the old pattern of `index_together` will stop working at some point, but the new pattern isn't supported by 3.Y versions. The library may increase their minimum version, or it may introduce long-term versions for 3 vs 4 Django versions. Either way, I'm not counting on that happening.

----

For the future, when (or if) the Django upgrade forces us to remove the taggit library, this will leave the option open to declare the current AWX version as a checkpoint version, and then in the next version:
 - Manually delete the taggit tables at the start of the migration command or some other way, or do this as SQL in another numbered migration
 - Also manually as a separate step, run `awx-manage remove_stale_contenttypes`, or maybe do that in a numbered migration

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

N/A

### Current results

N/A

### Sugested feature result

N/A

### Additional information

_No response_
user: AlanCoding
issue_14236: state: open
title: Splunk Logging Aggregator doesnt allow Splunk to use Supplied Timestamps
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When configuring the logging aggregator to use Splunk, the log output is generated in a Splunk event format with the json log entry (including @timestamp field) being held within an event like: {"event": {<log detail>}
From a Splunk perspective this would usually be directed at the Splunk HEC which then processes is.  Being in the event format the appropriate url to receive the message would be https://splunk:8088/services/collector/event - however when using this url splunk doesnt look for timestamps in the event and will tag the message with the time it was received.  In order for Splunk to extract the message timestamp when using the event url it needs to have the auto_extract_timestamp=true parameter set for the url - so https://splunk/services/collector/event?auto_extract_timestamp=true 
When the LOG_AGGREGATOR_HOST is set to https://splunk/services/collector/event?auto_extract_timestamp=true  the parameter seems to have been url encoded (/services/collector/event?auto_extract_timestamp%3Dtrue) and is not parsed as a parameter by Splunk.
So either the LOG_AGGREGATOR_HOST needs to be able to accept the auto_extract_timestamp parameter to be passed to the Splunk url or take the json log entry out of the event wrapper and then the splunk /services/collector/raw url can be used which automatically scans for timestamps.

### AWX version

22.5.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Configure logging aggregator to send to Splunk using URL "https://splunk:8080/services/collector/event?auto_extract_timestamp=true"
Configure HEC event receiver on splunk

### Expected results

The timestamp on the splunk event should match the value in @timestamp field of the logged event

### Actual results

Splunk shows the received time as the event time not the time from @timestamp
![image](https://github.com/ansible/awx/assets/63948954/d7629d70-b68a-45ba-8629-dc4e095e0c27)


### Additional information

_No response_
user: digitalbadger-uk
issue_14230: state: open
title: Upgrade to postgres:15 [Holding for now]
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
Upgrade from using postgres 12 to postgres 15.

Postgres 15 is not able to load a postgres 12 database directly. So we have modified the docker volume name to help distinguish the two version. However, please note that docker-compose will attempt to use the old volume if the `tools_postgres_1` container already exists. If this happens you will see an error in the logs like:
```
tools_postgres_1 | 
tools_postgres_1 | PostgreSQL Database directory appears to contain a database; Skipping initialization
tools_postgres_1 | 
tools_redis_1 | 1:M 12 Jul 2023 13:53:13.739 * monotonic clock: POSIX clock_gettime
tools_postgres_1 | 2023-07-12 13:53:13.919 UTC [1] FATAL:  database files are incompatible with server
tools_postgres_1 | 2023-07-12 13:53:13.919 UTC [1] DETAIL:  The data directory was initialized by PostgreSQL version 12, which is not compatible with this version 15.3 (Debian 15.3-1.pgdg120+1).
```

First, remove the container with `docker container rm tools_postgres_1`. If you then start the containers again you will get a fresh install of AWX.

If you want to migrate your existing docker-compose development installation do the following:

1. Start with latest current version running via `make docker-compose`.
2. Run `docker exec -it -u postgres tools_postgres_1 pg_dumpall --database awx -U awx > awx_dump.sql`
3. Stop your existing containers.
4. Remove the existing tools_postgres_1 container by running `docker container rm tools_postgres_1`.
5. Checkout the new version of the code.
6. Run `make docker-compose-sources` to upgrade the docker-compose.yml file.
7. Run `docker-compose -f tools/docker-compose/_sources/docker-compose.yml up postgres` to start up the new version of the container.
8. Run `docker cp awx_dump.sql tools_postgres_1:/tmp` to copy the backup file into the new postgres container.
9. Run `docker exec -it tools_postgres_1 /usr/bin/psql -U awx -f /tmp/awx_dump.sql` to restore your old data into the new postgres 15 database.
10. Stop the container being run from `docker-compose up` and start the full environment with `make docker-compose`.

I did simple testing with the keycloak integration (which uses the postgres container) and it works fine. There did not seems to be a compatibility matrix for keycloak and postgres but I did find one doc indicating that it worked with pg 15 (but that was likely intended for the latest version 20 and we are on 15).

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Breaking Change 

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - Other

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```

```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: john-westcott-iv
issue_14219: state: open
title: AWX Credential Create: ssh_key_data fails to detect/sanitize newlines in keys and 500's with no useable output
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Hey all,

When creating a new `Source Control` credential in AWX, we were receiving a 500 error from AWX:

```
"msg": "The host sent back a server error (HTTP Error 500: Internal Server Error): /api/v2/credentials/. Please check the logs and try again later"
```

The AWX server logs showed a decoding error:
```
2023-07-10 14:59:30,131 ERROR    ..... django.request Internal Server Error: /api/v2/credentials/
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/lib64/python3.9/contextlib.py", line 79, in inner
    return func(*args, **kwds)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/views/generic/base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/api/generics.py", line 334, in dispatch
    return super(APIView, self).dispatch(request, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
    raise exc
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/generics.py", line 242, in post
    return self.create(request, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/mixins.py", line 18, in create
    serializer.is_valid(raise_exception=True)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/serializers.py", line 227, in is_valid
    self._validated_data = self.run_validation(self.initial_data)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/api/serializers.py", line 595, in run_validation
    return super(BaseSerializer, self).run_validation(data)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/serializers.py", line 429, in run_validation
    value = self.validate(value)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/api/serializers.py", line 2738, in validate
    return super(CredentialSerializerCreate, self).validate(attrs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/api/serializers.py", line 2645, in validate
    return super(CredentialSerializer, self).validate(attrs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/api/serializers.py", line 629, in validate
    obj.full_clean(exclude=exclusions)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/base.py", line 1229, in full_clean
    self.clean_fields(exclude=exclude)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/models/base.py", line 121, in clean_fields
    super(BaseModel, self).clean_fields(exclude)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/base.py", line 1271, in clean_fields
    setattr(self, f.attname, f.clean(raw_value, self))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/fields/__init__.py", line 670, in clean
    self.validate(value, model_instance)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/fields.py", line 594, in validate
    for error in Draft4Validator(self.schema(model_instance), format_checker=self.format_checker).iter_errors(decrypted_values):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/jsonschema/validators.py", line 288, in iter_errors
    for error in errors:
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/jsonschema/_validators.py", line 332, in properties
    yield from validator.descend(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/jsonschema/validators.py", line 305, in descend
    for error in self.evolve(schema=schema).iter_errors(instance):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/jsonschema/validators.py", line 288, in iter_errors
    for error in errors:
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/jsonschema/_validators.py", line 238, in format
    validator.format_checker.check(instance, format)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/jsonschema/_format.py", line 135, in check
    result = func(instance)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/fields.py", line 444, in format_ssh_private_key
    validate_ssh_private_key(value)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/validators.py", line 184, in validate_ssh_private_key
    return validate_pem(data, min_keys=1)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/validators.py", line 104, in validate_pem
    decoded_data = base64.b64decode(base64_data)
  File "/usr/lib64/python3.9/base64.py", line 87, in b64decode
    return binascii.a2b_base64(s)
binascii.Error: Incorrect padding
```

This was not very helpful and led me down multiple unrelated rabbit holes/issues/etc.

Ultimately, it turns out the user was supplying a VALID ssh_key, but there appear to have been newlines in it, causing us to continually get 500 errors as above every time (UI/API accepted the ssh_key_data as valid, but failed as above if there were newlines somewhere).

By trimming the ssh_key_data in our playbook and rerunning, things succeeded just fine.

It appears we have a bug either:
- not exposing to the user there is an unknown formatting issue (invisible/newline chars in our case)
- not sanitizing the user inputs to account for/trim out these invisible chars server-side when accepting/using the data

If someone can, please confirm the behavior as I've outlined and if it seems appropriate, add some capability to "sanitize" the ssh_key_data and/or message on detected issues with the content so end users can address that.

### AWX version

21.11.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

yes

### Ansible version

2.14.5

### Operating system

Linux/Ubuntu

### Web browser

Chrome

### Steps to reproduce

- Generate SSH key w/ passphrase
- Set ssh key to env var `GH_KEY_DATA`
- Set ssh passphrase to env var `GH_UNLOCK_DATA`
- Use the following playbook to try to deploy a cred using the generated key:
```
---
- hosts: localhost
  connection: local
  gather_facts: false

  tasks:
    - name: Deploy test SC credential
      awx.awx.credential:
        name: test SC credential
        description: Testing credential to highlight unexpected AWX 500 errors
        controller_host: "{{ lookup('ansible.builtin.env', 'TOWER_HOST') }}"
        controller_username: "{{ lookup('ansible.builtin.env', 'TOWER_USERNAME') }}"
        controller_password: "{{ lookup('ansible.builtin.env', 'TOWER_PASSWORD') }}"
        organization: test org
        credential_type: Source Control
        inputs:
          username: git
          ssh_key_data: "{{ lookup('ansible.builtin.env', 'GH_KEY_DATA') }}"
          ssh_key_unlock: "{{ lookup('ansible.builtin.env', 'GH_UNLOCK_DATA') }}"
```

### Expected results

A successfully created Source Control credential with the generated ssh_key data/passphrase.

### Actual results

We get a 500 error back from AWX. AWX server logs show a padding error/no clear reason for the actual failure here, which was the key data string had "hidden characters" in it.

### Additional information

_No response_
user: danxg87
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_14217: state: open
title: Job_type for workflows
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

The job templates have check_mode. However we can't enable a check_mode for workflows.

If we can have a UI feature for job_type and add check mode there it should automatically run all the job templates inside that workflow in check_mode job_type

### Select the relevant components

- [X] UI
- [X] API
- [X] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

None. As this is a request for new feature

### Current results

New feature. The workaround is to create a new workflow with dry run. 

### Sugested feature result

Will enable a workflow to be run as a check_mode. 

### Additional information

_No response_
user: Mithur-Niranjan
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14211: state: open
title: Allow using file logging with development settings
body: ##### SUMMARY
I had a headache running integration tests. I found that if you do this:

```
AWX_LOGGING_MODE=file awx-manage showmigrations
```

You get a traceback from the logging setup.

```
bash-5.1$ AWX_LOGGING_MODE=file awx-manage showmigrations
Traceback (most recent call last):
  File "/usr/lib64/python3.9/logging/config.py", line 564, in configure
    handler = self.configure_handler(handlers[name])
  File "/usr/lib64/python3.9/logging/config.py", line 745, in configure_handler
    result = factory(**kwargs)
  File "/usr/lib64/python3.9/logging/handlers.py", line 470, in __init__
    logging.FileHandler.__init__(self, filename, mode=mode,
  File "/usr/lib64/python3.9/logging/__init__.py", line 1146, in __init__
    StreamHandler.__init__(self, self._open())
  File "/usr/lib64/python3.9/logging/__init__.py", line 1175, in _open
    return open(self.baseFilename, self.mode, encoding=self.encoding,
FileNotFoundError: [Errno 2] No such file or directory: '/var/log/tower/cache_clear.log'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/bin/awx-manage", line 9, in <module>
    load_entry_point('awx', 'console_scripts', 'awx-manage')()
  File "/awx_devel/awx/__init__.py", line 200, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/__init__.py", line 416, in execute
    django.setup()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/utils/log.py", line 76, in configure_logging
    logging_config_func(logging_settings)
  File "/usr/lib64/python3.9/logging/config.py", line 809, in dictConfig
    dictConfigClass(config).configure()
  File "/usr/lib64/python3.9/logging/config.py", line 571, in configure
    raise ValueError('Unable to configure handler '
ValueError: Unable to configure handler 'cache_clear'
```

This is because `/var/log/tower` does not exist. The `Makefile` for this repo (templated) does not pre-create it and the awx user does not have permission to create it.

If you use Ansible to shell into the container and do something, like it's likely that `AWX_LOGGING_MODE` is unset, which gives the same behavior. So you can't run anything without additional hacks.

There's a good chance that whatever management command you run _doesn't write any logs anyway_. This is just something I want to increase resiliency and avoid the need for hacks sprinkled around in testing.

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API


user: AlanCoding
issue_14209: state: open
title: AWX Collection Credential Delete
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When deleting a credential from the awx.awx collection the credential_type is currently a required parameter but no error is thrown if its missing.

However, it should not be a requirement at all in some cases. For example, if we are passing in an ID or a named URL (once https://github.com/ansible/awx/pull/14205 merges) then the credential type would be irrelevant as we would find a unique credential. The module should be rewritten to be able to delete a credential from just the name field.

We should also update the unit test files to include a test of just deleting by name or named URL.

### AWX version

latest

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Write a playbook to create a credential and then attempt to delete the credential with just `name` set to either ID or named URL and `state: absent`. Run the playbook, it should fail to delete the credential.

### Expected results

Credential should be deleted.

### Actual results

Failed step from the playbook.

### Additional information

_No response_
user: john-westcott-iv
labels: component:awx_collection: issues related to the collection for controlling AWX
Hacktoberfest: Issues tagged for Hacktoberfest
issue_14199: state: open
title: Adding host facts API
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Hi team,

as discussed in Matrix, I will propose you to have an API endpoint dedicated to ALL hosts ansible_facts, where, with paginated api, we can access directly to list of hosts and related facts.

I know that facts can be very heavy but with pagination and "limit" of pagesize, we can have a single entrypoint where we can fetch all facts via API.

This can be very usefull if we want to have an integration beetween AWX and other source, like CMDB, without direct access to DB and query it.


I will propose a PR that address this new feature, feel free to chat me and we can discuss together.
Thanks

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

No direct access to paginated view of hosts facts

### Current results

Facts available only call `/api/v2/hosts/<id_host>/ansible_facts`

### Sugested feature result

Have an api endpoint like `/api/v2/host_facts/` and detailed view like `/api/v2/host_facts/<id_host>`

### Additional information

_No response_
user: tanganellilore
issue_14198: state: open
title: awx cli export is not exporting organizations for credentials in awxkit 22.4.0
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

when using awx export either the awx.awx.export or the awx cli commands the organization key is missing from the export information where it appeared before, when doing an all export, the natural key does export, but this is a breaking change for those using export to feed information to the modules.

If only exporting credentials it does give the organization key. 

I have tested this with the current devel branch, 22.4.0, and 22.3.0. I'm attching files with the data from the exports. 
I also tested this against the latest AAP and the devel AWX to make sure the issue isn't with the API itself.

### AWX version

22.4.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

awx export --conf.host https://controller.nas --conf.username admin --conf.password secret123 --conf.insecure -f yaml --credentials
vs
awx export --conf.host https://controller.nas --conf.username admin --conf.password secret123 --conf.insecure -f yaml --all

### Expected results

```
credentials:
- credential_type:
    kind: cloud
    name: Red Hat Virtualization
    type: credential_type
  description: ''
  inputs: {}
  name: admin@internal-RHVM-01
  natural_key:
    credential_type:
      kind: cloud
      name: Red Hat Virtualization
      type: credential_type
    name: admin@internal-RHVM-01
    organization:
      name: Satellite
      type: organization
    type: credential
  organization:
    name: Satellite
    type: organization
```    

### Actual results

```
  credentials:
    - credential_type:
        kind: cloud
        name: Red Hat Virtualization
        type: credential_type
      description: ""
      inputs: {}
      name: admin@internal-RHVM-01
      natural_key:
        credential_type:
          kind: cloud
          name: Red Hat Virtualization
          type: credential_type
        name: admin@internal-RHVM-01
        organization:
          name: Satellite
          type: organization
        type: credential
      related:
        object_roles:
          - content_object:
              credential_type:
                kind: cloud
                name: Red Hat Virtualization
                type: credential_type
              name: admin@internal-RHVM-01
              organization:
                name: Satellite
                type: organization
              type: credential
            name: Admin
            type: role
          - content_object:
              credential_type:
                kind: cloud
                name: Red Hat Virtualization
                type: credential_type
              name: admin@internal-RHVM-01
              organization:
                name: Satellite
                type: organization
              type: credential
            name: Use
            type: role
          - content_object:
              credential_type:
                kind: cloud
                name: Red Hat Virtualization
                type: credential_type
              name: admin@internal-RHVM-01
              organization:
                name: Satellite
                type: organization
              type: credential
            name: Read
            type: role
```            

### Additional information

Link to gists with full files of exports to compare. 
https://gist.github.com/sean-m-sullivan/6654dc603ea4e606b7c9831a9edf8055
user: sean-m-sullivan
issue_14193: state: open
title: Verify Sigstore signature on project sync
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->
Introduce Sigstore signature verification for projects on update as part of the roadmap for Sigstore integration in the Ansible ecosystem.

#### What is Sigstore?

_This section is a short introduction to project Sigstore. For more information, refer to the [project documentation](https://docs.sigstore.dev/)._

[Project Sigstore](https://www.sigstore.dev/) is a new standard for signing, verifying and protecting software that solves the following issues:

- **Key management**: Sigstore solves the issue of private key storage and revocation by providing “keyless” signatures for software artifacts, eliminating the need for the user to store private GPG keys which could eventually become compromised.

- **Identity-based signatures**: Sigstore generates free, short-lived signing certificates based on identities, delegating the authentication part to an OIDC provider (Google, GitHub, Microsoft…).

- An immutable **Transparency Log** (Rekor) for signature and provenance attestations is used to store signature entries and facilitate verification and audits in case of identity compromise.

The Sigstore signature verification workflow for projects would exist in parallel with the current implementation for GPG signature verification.

Sigstore provides “keyless” signing for software artifacts, where a signer can connect to an OIDC provider and Sigstore will produce an ephemeral signing certificate and store a signature entry in an immutable transparency log queried during signature verification.

#### Changes introduced by this PR

This change allows to verify a project Sigstore signature, generated with ansible-sign (change to be supported in the CLI can be seen [here](https://github.com/ansible/ansible-sign/pull/46)) during a sync.

A new type of Credential `sigstore` is introduced to define the parameters for verifying a project signature:

- **Rekor instance URL**: The URL of the Sigstore Rekor instance the signatures were logged to
- **TUF instance URL**: The URL of the TUF instance used to retrieve Rekor and Fulcio public keys
- **Rekor root public key**: The PEM public key for the Rekor instance
- **Fulcio certificate chain**: Chain of PEM CA certificates to verify the Fulcio signing certificate
- **Sigstore certificate identity**: The OIDC identity of the signer to look for in the certificate SAN (i.e. email address, GitHub Actions workflow)
- **Sigstore OIDC provider URL**: The URL of the OIDC provider that issued the signer identity
- **Sigstore GitHub Actions trigger**: The GitHub Actions event name that triggered the workflow
- **Sigstore git commit SHA**: The git commit SHA that the workflow run was invoked with
- **Sigstore GitHub workflow name**: The name of the workflow that was triggered
- **Sigstore GitHub repository**: The repository slug that the workflow was triggered under
- **Sigstore GitHub ref**: The git ref that the workflow was invoked with
- **Sigstore verify offline**: Verify signatures offline (default: False)

Here is an overview of the configuration options for this type of credential:

![sigstore_credential_awx](https://github.com/ansible/awx/assets/66788861/e96f2b6c-734c-4549-a0dd-25494b07525b)

When launching a project sync, if enabled, the job will look for a checksums manifest and for Sigstore signature materials under `.ansible-sign/`and will succeed only if the signature was successfully verified:

![sigstore_sync_ok](https://github.com/ansible/awx/assets/66788861/aacd433c-18eb-4650-be5a-d60dc0afa518)


##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API
 - UI
 - Collection
 - Docs

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 22.3.1.dev72+g693541633a
```

user: mayaCostantini
labels: component:awx_collection: issues related to the collection for controlling AWX
dependencies: Pull requests that update a dependency file
issue_14192: state: open
title: awx-uwsgi stderr
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

After upgrading docker-compose "installation" from 21.14.1 to any other 22.X.X (22.4.0 was the last version that i try) i got the message : 

awx-uwsgi stderr | [pid: 20252|app: 0|req: 683/38353] XXXXXXX () {34 vars in 434 bytes} [Sun Jul  2 00:05:51 2023] GET /api/v2/ping/?active_node_only=true => generated 472 bytes in 46 msecs (HTTP/1.1 200) 14 headers in 465 bytes (1 switches on core 0)
awx-uwsgi stderr |

I think this is a normal message and not an error message , the message is generated by our LoadBalancer. 

Furthermore, after the upgrade we get these messages once, I think it is also only information, not error messages. But also here I am not sure.

awx-dispatcher stderr | 2023-06-29 18:50:22,871 WARNING  [-] awx.main.dispatch.periodic periodic beat started
awx-dispatcher stderr |
awx-dispatcher stderr | 2023-06-29 18:50:22,898 INFO     [-] awx.main.dispatch Running worker dispatcher listening to queues ['tower_broadcast_all', 'tower_settings_change', 'awx_1']
awx-dispatcher stderr |
awx-receiver stderr | 2023-06-29 18:50:22,912 INFO     [-] awx.main.commands.run_callback_receiver Callback receiver started with pid=216
awx-receiver stderr |
awx-wsrelay stderr | 2023-06-29 18:50:23,037 INFO     [-] awx.main.wsrelay Active instance with hostname awx_1 is registered.
awx-wsrelay stderr |
2023-06-29 18:50:23,225 INFO waiting for awx-rsyslogd to stop
2023-06-29 18:50:23,227 INFO stopped: awx-rsyslogd (exit status 0)
2023-06-29 18:50:23,230 INFO spawned: 'awx-rsyslogd' with pid 405
awx-daphne stderr | 2023-06-29 18:50:23,246 INFO     [-] daphne.cli Starting server at tcp:port=8051:interface=127.0.0.1
awx-daphne stderr | 2023-06-29 18:50:23,246 INFO     Starting server at tcp:port=8051:interface=127.0.0.1
awx-daphne stderr |
awx-daphne stderr | 2023-06-29 18:50:23,248 INFO     [-] daphne.server HTTP/2 support not enabled (install the http2 and tls Twisted extras)
awx-daphne stderr | 2023-06-29 18:50:23,248 INFO     HTTP/2 support not enabled (install the http2 and tls Twisted extras)
awx-daphne stderr | 2023-06-29 18:50:23,248 INFO     [-] daphne.server Configuring endpoint tcp:port=8051:interface=127.0.0.1
awx-daphne stderr | 2023-06-29 18:50:23,248 INFO     Configuring endpoint tcp:port=8051:interface=127.0.0.1
awx-daphne stderr |
awx-daphne stderr | 2023-06-29 18:50:23,249 INFO     [-] daphne.server Listening on TCP address 127.0.0.1:8051
awx-daphne stderr | 2023-06-29 18:50:23,249 INFO     Listening on TCP address 127.0.0.1:8051
awx-daphne stderr |
awx-uwsgi stderr | [uWSGI] getting INI configuration from /etc/tower/uwsgi.ini
awx-uwsgi stderr |
awx-uwsgi stderr | *** Starting uWSGI 2.0.21 (64bit) on [Thu Jun 29 18:50:23 2023] ***
awx-uwsgi stderr | compiled with version: 11.4.1 20230605 (Red Hat 11.4.1-2) on 28 June 2023 15:54:37
awx-uwsgi stderr | os: Linux-5.4.0-153-generic #170-Ubuntu SMP Fri Jun 16 13:43:31 UTC 2023
awx-uwsgi stderr | nodename: awx_1
awx-uwsgi stderr | machine: x86_64
awx-uwsgi stderr | clock source: unix
awx-uwsgi stderr | detected number of CPU cores: 4
awx-uwsgi stderr | current working directory: /awx_devel
awx-uwsgi stderr | detected binary path: /var/lib/awx/venv/awx/bin/uwsgi
awx-uwsgi stderr | !!! no internal routing support, rebuild with pcre support !!!
awx-uwsgi stderr |
awx-uwsgi stderr | your memory page size is 4096 bytes
awx-uwsgi stderr | detected max file descriptor number: 1048576
awx-uwsgi stderr | lock engine: pthread robust mutexes
awx-uwsgi stderr | thunder lock: disabled (you can enable it with --thunder-lock)
awx-uwsgi stderr | uwsgi socket 0 bound to TCP address 127.0.0.1:8050 fd 3
awx-uwsgi stderr | Python version: 3.9.16 (main, Mar  7 2023, 00:00:00)  [GCC 11.3.1 20221121 (Red Hat 11.3.1-4)]
awx-uwsgi stderr |
awx-uwsgi stderr | *** Python threads support is disabled. You can enable it with --enable-threads ***
awx-uwsgi stderr | Python main interpreter initialized at 0x14494e0
awx-uwsgi stderr | your server socket listen backlog is limited to 100 connections
awx-uwsgi stderr | your mercy for graceful operations on workers is 60 seconds
awx-uwsgi stderr |
awx-uwsgi stderr | *** Python threads support is disabled. You can enable it with --enable-threads ***
awx-uwsgi stderr | Python main interpreter initialized at 0x14494e0
awx-uwsgi stderr | your server socket listen backlog is limited to 100 connections
awx-uwsgi stderr | your mercy for graceful operations on workers is 60 seconds
awx-uwsgi stderr |
awx-uwsgi stderr | mapped 609552 bytes (595 KB) for 5 cores
awx-uwsgi stderr | *** Operational MODE: preforking ***
awx-uwsgi stderr |
awx-uwsgi stderr | *** uWSGI is running in multiple interpreter mode ***
awx-uwsgi stderr | spawned uWSGI master process (pid: 407)
awx-uwsgi stderr | spawned uWSGI worker 1 (pid: 408, cores: 1)
awx-uwsgi stderr | spawned uWSGI worker 2 (pid: 409, cores: 1)
awx-uwsgi stderr | spawned uWSGI worker 3 (pid: 410, cores: 1)
awx-uwsgi stderr | spawned uWSGI worker 4 (pid: 411, cores: 1)
awx-uwsgi stderr | spawned uWSGI worker 5 (pid: 412, cores: 1)
awx-uwsgi stderr |
awx-uwsgi stderr | mounting awx.wsgi:application on /
awx-uwsgi stderr |
awx-uwsgi stderr | mounting awx.wsgi:application on /
awx-uwsgi stderr |
awx-uwsgi stderr | mounting awx.wsgi:application on /
awx-uwsgi stderr |
awx-uwsgi stderr | mounting awx.wsgi:application on /
awx-uwsgi stderr |
awx-uwsgi stderr | mounting awx.wsgi:application on /
awx-uwsgi stderr |
2023-06-29 18:50:24,978 INFO success: awx-rsyslogd entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
awx-uwsgi stderr | WSGI app 0 (mountpoint='/') ready in 2 seconds on interpreter 0x14494e0 pid: 410 (default app)
awx-uwsgi stderr |
awx-uwsgi stderr | WSGI app 0 (mountpoint='/') ready in 2 seconds on interpreter 0x14494e0 pid: 409 (default app)
awx-uwsgi stderr |
awx-uwsgi stderr | WSGI app 0 (mountpoint='/') ready in 2 seconds on interpreter 0x14494e0 pid: 408 (default app)
awx-uwsgi stderr |
awx-uwsgi stderr | WSGI app 0 (mountpoint='/') ready in 2 seconds on interpreter 0x14494e0 pid: 412 (default app)
awx-uwsgi stderr |
awx-uwsgi stderr | WSGI app 0 (mountpoint='/') ready in 2 seconds on interpreter 0x14494e0 pid: 411 (default app)
awx-uwsgi stderr |
awx-uwsgi stderr | [pid: 409|app: 0|req: 1/1] XXXXXXX () {34 vars in 434 bytes} [Thu Jun 29 18:50:34 2023] GET /api/v2/ping/?active_node_only=true => generated 472 bytes in 296 msecs (HTTP/1.1 200) 14 headers in 465 bytes (1 switches on core 0)
awx-uwsgi stderr |


### AWX version

22.4.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Edge

### Steps to reproduce

Upgrade from 21.14.1 to any 22.X.X Version

### Expected results

No Error messages on docker logs tools_awx_1

### Actual results

awx-uwsgi stderr | [pid: 20252|app: 0|req: 683/38353] XXXXXXX () {34 vars in 434 bytes} [Sun Jul  2 00:05:51 2023] GET /api/v2/ping/?active_node_only=true => generated 472 bytes in 46 msecs (HTTP/1.1 200) 14 headers in 465 bytes (1 switches on core 0)
awx-uwsgi stderr |

### Additional information

_No response_
user: vailenwallaces
issue_14190: state: open
title: Allow user customization of the git environment
body: ##### SUMMARY
Feature similar to `galaxy_task_env` but applied to the git task https://github.com/ansible/awx/pull/11865

Several issues we've had probably could have been resolved with this, but I don't have something specific to point to right now.

Pragmatically, this is done so that we can fix an integration test.

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - API

user: AlanCoding
issue_14188: state: open
title: [WIP] Overhaul of how sidecar containers work in development environment
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
Instead of using flags like `KEYCLOAK=True make docker-compose` this PR introduces a yaml variable file where you can turn options on and off and all pertinent variables for the containers are listed in the variable file. This also is going to adopt the initialize/plumb model we introduced with the vault container. 

TODO:
- [ ] Make docker_config.yml somehow git ignored (another file perhaps), maybe leverage the inventory file for the defaults?
- [ ] Lots of testing
- [ ] Make sure in SAML provider configuration the client ID is AWX and not {{ container_reference }}
- [x] Make sure in Keycloak initialization that we don't error out on creating the realm if its already created.

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - Other

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```

```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: john-westcott-iv
issue_14186: state: open
title: Unable to create a schedule even if the survey of the job template is not required
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

_No response_

### AWX version

21.10.2

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

yes

### Ansible version

2.6.1

### Operating system

quay.io/ansible/ansible-runner:latest

### Web browser

Firefox, Chrome, Safari, Edge

### Steps to reproduce

- Create a job template that has a survey with no required variables of type password.
- Set the minimum length of the survey variable to 12 and the maximum to 15
- Create a schedule for that job
- Save the schedule

### Expected results

- To be able to save the schedule without passing the password survey variable

### Actual results

- It prevents you from saving and gives an error that a value should be prompted for the survey variable

### Additional information

We are building on top of the `quay.io/ansible/ansible-runner:latest` runner image. We've just added some collections from ansible-galaxy with it
user: mervin-hemaraju-cko
issue_14183: state: open
title: DOC: awx_collection/README.md: link to current location of awx_collection source
body: - https://galaxy.ansible.com/awx/awx
  - DOC: links to old source up top?
  - [x] DOC: link to current location of awx_collection source

##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - Docs

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```

```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: westurner
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14180: state: open
title: Add an option to overwrite the job type at the Workflow level
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

In a Job Workflow it is possible to override the host limit, but it's not possible to override the job type.

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Having an option to switch between check and run job type would prevent the user from creating two similar Job Workflow Templates (one for run, the other for check).

### Current results

- create a Workflow Template
- add nodes to it with `Run` as a Job Type
- create another Workflow Template
- add nodes to it with `Check` as a Job Type
- run both Workflows

### Sugested feature result

- create a Workflow Template
- check `Prompt on Launch` for a Job Type for all nodes in the Workflow
- add nodes to it with `Run` as a Job Type
- launch the Workflow and on prompt, select a Job Type that will affect all nodes

### Additional information

_No response_
user: Sasa993
issue_14177: state: open
title: Restart a check job as a run job
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

It would be great if there is an option to change the Job Type from `check` to `run` on relaunching the job.

### Select the relevant components

- [x] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Chaning the Job Type from `check` to `run` requires to create a new job. That's especially annoying if the job has a lot of prompts.

### Current results

- create a Job Template
- check `Prompt on launch` for a Job Type
- save the Job Template and launch it
- on prompt, select `Check` as a Job Type
- complete the rest of prompts
- in order to restart the same job with a Job Type `Run`, I have to create a new job by editing the Job Template
- launch it again, but this time with `Run` as a Job Type
- complete the rest of prompts

### Sugested feature result

- create a Job Template
- check `Prompt on launch` for a Job Type
- save the Job Template and launch it
- on prompt, select `Check` a run the job
- complete the rest of prompts
- relaunch the same job -> modal appears which gives me an option to choose the Job Type for the relaunch (I don't have to complete every prompt again)

### Additional information

_No response_
user: Sasa993
issue_14174: state: open
title: Expand COLLECTIONS_PATHS for repos that are a valid collection
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

When a repo (referenced by an AWX project) *is* itself a collection, it should be possible to reference e.g. its contained playbooks by fqcn ([docs]) instead of (relative) path, in `import_playbook`, and also in the Job Template Add/Edit GUI.  The same is probably true for roles (and much more common).
This currently does not work, because the project directory is not added to the ansible config value COLLECTIONS_PATHS.


[docs]: https://docs.ansible.com/ansible/latest/dev_guide/developing_collections_structure.html#playbooks-directory

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

1. Create a collection `example.test`
2. Create two playbooks in a directory `playbooks/`:
    ~~~yml
    # one.yml
    - import_playbook: example.test.two
    ~~~
    and `two.yml`
3. Commit the (collection directory) to git, so that there is /path/to/ansible_collections/example/test/.git/
4. Add the repo as a Project in AWX
5. Try to create a JT from that Project with Playbook = example.test.one
6. Create & Launch a JT from that Project with Playbook = playbooks/one.yml


### Current results

6. Cannot create a JT with a FQCN, only a path
7. import_playbook cannot find two.yml by FQCN

### Sugested feature result


I propose to add the project directory to the ansible config value COLLECTIONS_PATHS
when a project is recognized to be a collection, e.g. when containing a galaxy.yml at the toplevel (with yaml keys matching the expected schema).

### Additional information

Maybe split the GUI issue about JT.playbook ?
user: azrdev
issue_14171: state: open
title: Improvements to deployments of remote instances via receptor hop when deployed with AWX operator
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

When deploying AWX using the operator in an environment where the remote instance (execution) is not reachable from the parent AWX application it is required to deploy a receptor hop instance for the remote instance to connect to. When deploying this we found this to be possibly be not fully supported/documented when using AWX Operator. (Previously this was deployed via docker compose not k8s/operator without any issue).

Example diagram of requirements
<img width="686" alt="image" src="https://github.com/ansible/awx/assets/26559188/6b209d67-fd10-4c3d-9293-4ebc5902f2f7">


### Select the relevant components

- [ ] UI
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

1. Deploy AWX via operator
2. Deploy receptor hop
3. Connect receptor hop to AWX
4. Deploy remote receptor execution
5. Connect receptor execution to AWX via the receptor hop
6. Trigger a restart of awx_task pod

### Current results

Receptor hop becomes unhealthy and must be reconnected. Appears the receptor control nodes lose the tcp-peer configuration for the receptor hop on restart.

### Sugested feature result

Update the templating of the receptor config to include receptor hop so all instances are able to become healthy without user internvention.

### Additional information

_No response_
user: whitej6
issue_14169: state: open
title: Cleanup Job failed: Value must be an integer.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Cleanup Job does not work, the error is:
Traceback (most recent call last):
```
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 87, in _execute
    return self.cursor.execute(sql)
psycopg2.errors.InvalidDatetimeFormat: invalid value "defa" for "YYYY"
DETAIL:  Value must be an integer.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 8, in <module>
    sys.exit(manage())
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/__init__.py", line 200, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
    utility.execute()
    return self.cleanup(Job)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/management/commands/cleanup_jobs.py", line 175, in cleanup
    skipped, deleted = delete_meta.delete()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/management/commands/cleanup_jobs.py", line 140, in delete
    self.find_partitions_to_drop()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/management/commands/cleanup_jobs.py", line 109, in find_partitions_to_drop
    cursor.execute(query)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/utils.py", line 91, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 87, in _execute
    return self.cursor.execute(sql)
django.db.utils.DataError: invalid value "defa" for "YYYY"
DETAIL:  Value must be an integer.
```

I've got AWX installed by awx-operator.

### AWX version

22.3.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. Run Cleanup Job
2. Get error

### Expected results

Cleanup Job executed successfully

### Actual results

Cleanup Job failed

### Additional information

_No response_
user: andy812
issue_14235: state: open
title: .git folder missing  under project workspace /running/project 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx-operator/issues) for duplicates.
- [X] I understand that the AWX Operator is open source software provided for free and that I might not receive a timely response.

### Bug Summary

After starting job, seen repository is being cloned under /runner/project is missing .git folder 

bash-4.4# pwd
/runner/project

bash-4.4# ls -a
.  ..  .DS_Store  .gitmodules  README.md  ansible  ansible-lint.yaml  ansible.cfg  docker  docs  jenkins  mkdocs.yml  scripts  src  yaml_lint.yaml
bash-4.4#


### AWX Operator version

2.2.1

### AWX version

22.3.0

### Kubernetes platform

kubernetes

### Kubernetes/Platform version

v1.22.6

### Modifications

no

### Steps to reproduce

Create a template > run job > login to running automation container >> cd /runner/project  

### Expected results

repository clone path should have .git folder 

bash-4.4# ls -a
.  ..  .git .DS_Store  .gitmodules  README.md  ansible  ansible-lint.yaml  ansible.cfg  docker  docs  jenkins  mkdocs.yml  scripts  src  yaml_lint.yaml

### Actual results

bash-4.4# ls -a
.  ..  .DS_Store  .gitmodules  README.md  ansible  ansible-lint.yaml  ansible.cfg  docker  docs  jenkins  mkdocs.yml  scripts  src  yaml_lint.yaml

### Additional information

also the additional roles get cloned from repos specified under file requirements.yml also missing .git folders  

### Operator Logs

_No response_
user: manojselukar
issue_14152: state: open
title: An "omit" ability for custom credential types
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Our custom credential type system:

https://github.com/ansible/awx/blob/devel/docs/credentials/credential_plugins.md

Allows you to inject things like environment variables with jinja2 templates. This allows use of a few jinja2 things out-of-the-box like simple filters like `| default("foo")`. I believe that non-required inputs can not be provided, and will be undefined in the template (possibly needs verification).

This proposes to allow `| default(omit)`. This is not native jinja2, but is used heavily in Ansible-core. There is no reason we could not copy this, and in some cases it really would be preferable to omit certain env vars. We actually already have several such cases in custom logic here:

https://github.com/ansible/awx/blob/devel/awx/main/models/credential/injectors.py

Right now we can't 100% convert the AWS credential injector into the template format because we lack this `omit` notion. We should introduce it, and convert these cases of custom logic to standard injectors.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Try to create a credential type that sometimes defines an env var, and sometimes doesn't (same for extra_vars).

### Current results

Not possible

### Sugested feature result

make it possible

### Additional information

_No response_
user: AlanCoding
issue_14149: state: open
title: Do not store frequently updated foreign key relation on model
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

On several models, we store information about a relationship to a foreign key that is frequently updated, and potentially risky for deadlocks. By saving this foreign key as a field on the model, we are optimizing read performance for information that is probably more frequently _written_ than it is read. 

e.g. we are optimizing for read performance when we probably ought to to be optimizing for _write_ performance.

To be specific:
https://github.com/ansible/awx/blob/fb8fadc7f9f3e357d6e5db54748ad65a9559c2c6/awx/main/models/inventory.py#L554-L562
https://github.com/ansible/awx/blob/fb8fadc7f9f3e357d6e5db54748ad65a9559c2c6/awx/main/models/unified_jobs.py#L126-L137
https://github.com/ansible/awx/blob/fb8fadc7f9f3e357d6e5db54748ad65a9559c2c6/awx/main/models/unified_jobs.py#L118-L125

There is also:
https://github.com/ansible/awx/blob/fb8fadc7f9f3e357d6e5db54748ad65a9559c2c6/awx/main/models/unified_jobs.py#L138-L151 But that starts to get into schedules and I think requires further thinking.

For `last_job_host_summary`, `last_job`, `current_job`, and `last_job_failed` I propose we are doing more harm than good by storing these on the model. This is because job templates can have many jobs launched from them, and hosts can have many jobs running against them. 

This causes us to run into potential deadlocks when multiple processes attempt to update same attribute on single hosts and job templates. I have personally observed this when testing with high volumes of small jobs against a few hosts. Increasing number of callback receivers increases possibility of running into this.

Problem areas:
https://github.com/ansible/awx/blob/fb8fadc7f9f3e357d6e5db54748ad65a9559c2c6/awx/main/models/events.py#L588-L601
https://github.com/ansible/awx/blob/fb8fadc7f9f3e357d6e5db54748ad65a9559c2c6/awx/main/signals.py#L286-L306
https://github.com/ansible/awx/blob/fb8fadc7f9f3e357d6e5db54748ad65a9559c2c6/awx/main/models/unified_jobs.py#L815-L826

Proposed alternative:
These values can be quickly calculated in the serializer or as a `property` on the job, the query would be quite cheap, something along lines of  (psuedocode)
```
@property
def last_job(self):
    return UnifiedJobs.objects.filter(job_template_id=self.id, status__in=['successful', 'failed', 'error', 'canceled']).latest()
```
This uses https://docs.djangoproject.com/en/dev/ref/models/querysets/#latest but there is equivalent ways to do it if thats not available in our version of django

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

One way to force this would be to run many (hundreds or thousands) of small jobs from 1 job template (allow concurrent jobs)  (have playbook have just 1 task) against 1 host. Increase the number of callback receiver workers to exacerbate.

### Current results

Deadlocks

### Sugested feature result

Calculate these values on read
Should not show in the list view as that would be expensive (only show in detail view)

### Additional information

_No response_
user: kdelee
issue_14148: state: open
title: Using Org aliases with SAML invalidates org membership
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

I am not 100% certain this is will work since I am horrible at kubernetes and have no idea how to test this.

It appears that when you configure the ORG MAP and the ORG SAML settings so that you end up with 
`has_role = None` on https://github.com/ansible/awx/blob/devel/awx/sso/saml_pipeline.py#L89
That if your SAML MAP was setting you to be member or admin you get wiped out by it being set to None. I think if there were a check for None before setting or even a check for existence of the setting it would allow for the SAML response to the priority here.

For Teams it seems that this is allow because of the None check: https://github.com/ansible/awx/blob/devel/awx/sso/saml_pipeline.py#L108

### AWX version

22.3.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome, Safari

### Steps to reproduce

SAML Org Map:
setting to false here allows overriding the default True https://github.com/ansible/awx/blob/devel/awx/sso/saml_pipeline.py#L88
So the call to  `_update_m2m_from_expression(user, is_member_expression, remove_members)`
is `_update_m2m_from_expression(user, None, False)` and will return None
```
{
  "horrible_org_name": {
    "organization_alias": "Pretty Org Name",
    "remove_admins": false,  #
    "remove_users": false
  }
}
```

SAML Org Attribute Map:
user saml response has them in `admin_groups=[horrible_org_name]`
```
{
   "saml_admin_attr": "admin_groups",
   "remove_admins": true,
   "saml_attr": "user_groups",
   "remove": true
}
```

### Expected results

If the user saml response has them in `horrible_org_name` converted to `Pretty Org Name` because of the ORG MAP, they should be a member/admin of the org.

### Actual results

User is not a part of the horrible_org_name at all since the ORG MAP is populated and overrides the SAML MAP since it is called to adjust membership after the SAML adjustment to membership is done: https://github.com/ansible/awx/blob/devel/awx/sso/saml_pipeline.py#L26

### Additional information

_No response_
user: mnestor
labels: component:authentication: For issues related to authentication
issue_14145: state: open
title: Restrict ability to create custom credential types with same name as standard one
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

As noted in https://github.com/ansible/awx/issues/7207#issuecomment-637545279 it is problematic to be able to create two credential types with the same name but of different kind. This can practically be done by creating a custom credential type of the same name as a standard one, as they'll have a different kind and hence will be considered unique.

Example: you can create a custom credential type `Machine` as it'll have the kind `cloud` where the standard `Machine` has the kind `ssh`.

Given that credential types are anyway system level objects, their name should be unique. This is especially dangerous as the Ansible modules don't support the full naming a la `Machine++ssh`.

### AWX version

2.3

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

2.14.6

### Operating system

Fedora / RHEL (not relevant)

### Web browser

Firefox

### Steps to reproduce

Create a custom credential type with name "Machine" either through the API or the UI.

### Expected results

It doesn't work

### Actual results

It works

### Additional information

I've discovered the issue while using the Ansible modules (on AAP/controller) but I don't think it's relevant.
user: ericzolf
issue_14137: state: open
title: awx-manage run_wsrelay Name or service not known
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

when set postgres servers as a list, awx-manage run_wsrelay make error
`2023-06-16 09:45:19,427 INFO     [-] awx.main.wsrelay Active instance with hostname awx-web-754d76b985-jdg7x is registered.
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 8, in <module>
    sys.exit(manage())
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/__init__.py", line 200, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/__init__.py", line 436, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/base.py", line 412, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/base.py", line 458, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/management/commands/run_wsrelay.py", line 168, in handle
    asyncio.run(websocket_relay_manager.run())
  File "/usr/lib64/python3.9/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/lib64/python3.9/asyncio/base_events.py", line 647, in run_until_complete
    return future.result()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/wsrelay.py", line 285, in run
    async_conn = await asyncpg.connect(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/asyncpg/connection.py", line 2092, in connect
    return await connect_utils._connect(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/asyncpg/connect_utils.py", line 895, in _connect
    raise last_error
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/asyncpg/connect_utils.py", line 881, in _connect
    return await _connect_addr(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/asyncpg/connect_utils.py", line 773, in _connect_addr
    return await __connect_addr(params, timeout, True, *args)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/asyncpg/connect_utils.py", line 825, in __connect_addr
    tr, pr = await compat.wait_for(connector, timeout=timeout)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/asyncpg/compat.py", line 56, in wait_for
    return await asyncio.wait_for(fut, timeout)
  File "/usr/lib64/python3.9/asyncio/tasks.py", line 479, in wait_for
    return fut.result()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/asyncpg/connect_utils.py", line 684, in _create_ssl_connection
    tr, pr = await loop.create_connection(
  File "/usr/lib64/python3.9/asyncio/base_events.py", line 1026, in create_connection
    infos = await self._ensure_resolved(
  File "/usr/lib64/python3.9/asyncio/base_events.py", line 1405, in _ensure_resolved
    return await loop.getaddrinfo(host, port, family=family, type=type,
  File "/usr/lib64/python3.9/asyncio/base_events.py", line 861, in getaddrinfo
    return await self.run_in_executor(
  File "/usr/lib64/python3.9/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/lib64/python3.9/socket.py", line 954, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known`

/etc/tower/conf.d/credentials.py
`DATABASES = {
    'default': {
        'ATOMIC_REQUESTS': True,
        'ENGINE': 'awx.main.db.profiled_pg',
        'NAME': "awx",
        'USER': "awx",
        'PASSWORD': "VeryH@rdP@$$,
        'HOST': 'server1.dev.local,server2.dev.local,server3.dev.local',
        'PORT': "5432",
        'OPTIONS': { 'sslmode': 'disable',
                     'keepalives': 1,
                     'keepalives_idle': 5,
                     'keepalives_interval': 5,
                     'keepalives_count': 5,
        },
    }
}

BROADCAST_WEBSOCKET_SECRET = "somesecret"`




### AWX version

22.3.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

set list of servers postgresql

### Expected results

working well

### Actual results

Pod awx-task crushing

### Additional information

_No response_
user: jollyekb
issue_14136: state: open
title: Add OIDC role mapping
body: ##### SUMMARY
Have the possibility to map user team and organization roles as well as system roles from oidc claims. This mapping has been done by creating new fields based on the one that exists for SAML authentication implementation. 

Keycloak has also been upgrade in order to ensure the capatibility with the latest version of it. This has also removed the need to start keycloak beforehand, `KEYCLOAK=true make docker-compose` is only needed now.

This change is related to this issue which directly asked for roles mapping with oidc related #13226. But also this issue (related #7362) because Azure AD Oauth2 with a single tenant is moslty the same as using oidc generic implementation with specific claims.

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - API
 - UI
 - Docs
user: Ekkisleif
labels: component:authentication: For issues related to authentication
issue_14130: state: open
title: Reconnect support doesn't appear in logs. "Error reading from pod ... context canceled" error in control-plane-ee logs
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

We've upgraded our dev environments to **22.3.0** on **EKS 1.24**. 
**RECEPTOR_KUBE_SUPPORT_RECONNECT** is enabled. These errors don't appear when **RECEPTOR_KUBE_SUPPORT_RECONNECT** is disabled.

Our performance tests run without problems, and everything seems to work as expected. But in this version, we started getting the following errors in logs frequently in the **control-plane-ee pods**:

> WARNING 2023/06/14 17:12:04 Could not read in control service: read unix /var/run/receptor/receptor.sock->@: use of closed network connection
> WARNING 2023/06/14 17:12:04 Could not close connection: close unix /var/run/receptor/receptor.sock->@: use of closed network connection
> WARNING 2023/06/14 17:12:30 Could not read in control service: read unix /var/run/receptor/receptor.sock->@: use of closed network connection
> WARNING 2023/06/14 17:12:30 Could not close connection: close unix /var/run/receptor/receptor.sock->@: use of closed network connection
> ERROR 2023/06/14 17:12:39 [uItraDCd] **Error reading from pod** awx-workers/automation-job-1498-dd8ck: **context canceled**
> ERROR 2023/06/14 17:12:42 **Exceeded retries for reading stdout** /tmp/receptor/awx-task-7594db4979-qf2nc/uItraDCd/stdout
> WARNING 2023/06/14 17:12:43 Could not read in control service: read unix /var/run/receptor/receptor.sock->@: use of closed network connection
> WARNING 2023/06/14 17:12:43 Could not close connection: close unix /var/run/receptor/receptor.sock->@: use of closed network connection
> WARNING 2023/06/15 09:23:01 Could not read in control service: read unix /var/run/receptor/receptor.sock->@: use of closed network connection
> WARNING 2023/06/15 09:23:01 Could not close connection: close unix /var/run/receptor/receptor.sock->@: use of closed network connection
> ERROR 2023/06/15 09:23:20 [meuOi8Bb] **Error reading from pod** awx-workers/automation-job-1504-zxwd4: **context canceled**
> ERROR 2023/06/15 09:23:20 [fugx4MT0] **Error reading from pod** awx-workers/automation-job-1501-h5hzj: **context canceled**

Our Prod environment runs on **21.10.2** and doesn't have these log errors.

To upgrade the Prod environments, we must ensure this error won't cause any issues when we have a larger workflow load. What causes this issue, can it be critical for production, and can it be fixed in future releases?

### AWX version

22.3.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

yes

### Web browser

Chrome

### Steps to reproduce

Run workflows on AWX **22.3.0** in **EKS 1.24**

### Expected results

No errors in the logs

### Actual results

There are errors in the logs

### Additional information

We use the awx-control-plane version 22.3.0 with the [reverted bug in the receptor](https://github.com/ansible/receptor/pull/787), so our version is closer to the latest.
user: elibogomolnyi
issue_14129: state: open
title: Constructed inventory sync does not trigger sync of source inventory
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When having a constructed inventory that is based on an inventory that includes inventory sources, the inventory sources do not get refreshed on sync, even when they are marked as "update on launch".



### AWX version

22.3.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

ansible [core 2.14.5]

### Operating system

RHEL8

### Web browser

Firefox

### Steps to reproduce

Example using an SCM Repository:

1) Have a project "scm_inventory" (Update Revision on Launch = True)
2) Have an inventory "normal_inventory" with source from project "scm_inventory" (Update on launch = True)
3) Haven a constructed inventory "constructed_inventory" that sources the inventory "normal_inventory"
4) Run a job on "constructed_inventory"

### Expected results

A sync on "constructed_inventory" triggers a sync on "scm_inventory" and afterwards on "normal_inventory" and then syncs "constructed_inventory" and then finally starts the job

### Actual results

Sync on "constructed_inventory" and starts job

### Additional information

Same is happening for manual syncs, I would expect a manual sync on the inventory to trigger sync on scm and normal inventory prior to running sync on the constructed inventory.
user: Klaas-
issue_14128: state: open
title:  In collection, Add an enforced state to the modules
body: ##### SUMMARY
Follow up PR from #13927, #13960

This enforces default values being submitted to the API, this PR is an overview of how that enforcement mechanism would be achieved across the collection, This PR is for feedback on how this was achieved so that I can go through and add it to the rest of the modules. The idea is to enforce a state to prevent drift when an option is not provided and option is enforced. This is compared to exists that makes no changes if the object exists, or present that only makes changes for the options given to the module.

However some are the same as the default value set in the get parameter, others are related fields that have no defaults in the options. The idea of this PR is to do two modules to show how it would be implemented, so it can be approved, before it is extrapolated to every module.

In addition while going through things
Credential types:
      Removed managed, it technically does nothing on post, unable to change it through API.

Applications:
      Fixed bug where Skip authorization was never sent to API. Tried to track down but this has been this way in the code for 3 years.

Added blocks to following tests and brought to the standard way we do the other tests with an always to cleanup after everything.
    groups 
    job templates
    organizations
    credentials
    hosts
    inventory sources
    teams

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - Collection

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
22.4.0
```


user: sean-m-sullivan
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14127: state: open
title: Extend collection description to note awx.awx vs ansible.controller 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Red Hat customers should be using ansible.controller, not awx.awx collection. Since many customers can only find  the collection based on docs.ansible.com, it would help redirect them to automation hub if you extend the collection description to specifically point out that Red Hat customers must install ansible.controller from AH, not awx.awx from galaxy or the Ansible package.

### AWX version

current

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Current collection description on docs.ansible.com (where customers are finding collections with google) - https://docs.ansible.com/ansible/latest/collections/awx/awx/index.html#plugins-in-awx-awx


### Expected results

See mention that awx.awx is ansible.controller as a certified collection which is what customers should install.

### Actual results

no indication that awx.awx has a certified equivalent or that customers need to install that version to get support.

### Additional information

user: samccann
issue_14126: state: open
title: TypeError: add() got an unexpected keyword argument 'through_defaults'
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

AWX's seemingly ancient `awx.main.fields.OrderedManyToManyDescriptor` homemade Django extension is incompatible with Django 2.2 and above. As explained in https://github.com/jazzband/django-taggit/issues/629, overloaded `add()` implementations now need to ferry around an [additional `through_defaults` kwarg](https://docs.djangoproject.com/en/2.2/ref/models/relations/#django.db.models.fields.related.RelatedManager.add).


### AWX version

22.3.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

openshift

### Modifications

yes

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

To exhibit the problem, type the following at the `awx-manage shell_plus` prompt:

```
j = JobTemplate(); j.save(); j.instance_groups.set([])
```


### Expected results

Laconic answer or lack thereof

### Actual results

```
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/fields/related_descriptors.py", line 1236, in set
    self.add(*new_objs, through_defaults=through_defaults)
TypeError: add() got an unexpected keyword argument 'through_defaults'
```

### Additional information

I have modified the deployment topology, but this is irrelevant as I did not modify the Django code in any way. I am trying to enforce postconditions in the AWX database by means of [`awx_script`](https://github.com/epfl-si/wp-ops/blob/master/ansible/roles/awx-instance/library/awx_script.py) Ansible tasks, which run `awx-manage shell_plus` scripts.
user: domq
issue_14124: state: open
title: Ability to run playbooks in an EE collection without associated project
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

There is a feature in Ansible-core to run a playbook that exists inside of a collection:

https://docs.ansible.com/ansible/latest/collections_guide/collections_using_playbooks.html#using-a-playbook-from-a-collection

This is an issue to gain feature-parity with this ability in AWX.

Specifying a playbook inside of a collection, inside of an execution environment, can be done by the FQCN name of the playbook, as explained in the linked docs.

This would _replace_ what is now provided by the job template fields `project` and `playbook` fields. Whether a new field may be introduced, or existing fields abused for this purpose is left as an issue for implementation.

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Run on Ansible CLI

```
ansible-playbook my_namespace.my_collection.playbook1 -i ./myinventory
```

Try to do same thing in AWX

### Current results

Can't do it.

### Sugested feature result

Ability to run playbook defined by FQCN `my_namespace.my_collection.playbook1`, as an example.

### Additional information

Implementation could go in many different directions:
 - allow null project, put FQCN in `playbook` field
 - Force creating a new project for this purpose, possibly via a new `scm_type` option to "defer to EE", this maybe a coherent way for us to perform an async operation to inspect the image and obtain a playbook list, and requiring no other changes to the existing UX around job templates
 - other possibilities that I have not thought of

This is related to the existing issues https://github.com/ansible/awx/issues/3780 and https://github.com/ansible/awx/issues/3776. While 3780 would provide something similar via a different content mechanism, and 3776 is old, vague, generally unclear, and doesn't necessarily ask for this RFE.
user: AlanCoding
issue_14118: state: open
title: adding CoP roles to awx.awx collection
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
adding the redhat_cop controller_configuration collection roles to the awx.awx collection.
<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - Collection

##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->
Looking to start this discussion to see what it will take to get this merged.

user: djdanielsson
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14114: state: open
title: awx.awx.credential examples for use of external storage systems
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

I want to write a playbook to setup our AWX and need to add a credential which is linked to another credential. Our setup looks like:

HashiCorp Vault: here we have all our credentials, secrets, keys,... 

AWX:
* a credential with type `HashiCorp Vault Secret Lookup`, let's call it `cred-hashicorp`
* many other credentials like a credential with type `Source Control` wich reads the used key from `cred-hashicorp`. Let's call it `cred-git`.

It works when I manually create these credentials. Setting up `cred-hashicorp` works with awx.awx.credential as well.

But there is no documentation nor example (that I found) that describes how I can use ansible awx.awx.credential (or maybe another module?) to create `cred-git`.

### Select the relevant components

- [ ] UI
- [X] API
- [X] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

```
    - name: Cred cred-hashicorp
      awx.awx.credential:
        credential_type: HashiCorp Vault Secret Lookup
        name: cred-hashicorp
        inputs:
          url: https://vault.company.at
          role_id: roleeee
          api_version: v2
          default_auth_path: approle
          secret_id: secretttttt
    - name: Cred cred-git
      awx.awx.credential_input_source:
        credential_type: Source Control
        name: cred-git
        inputs:
          tba: tba
```

### Current results

Not possible to use ansible to create a "linked" credential.

### Sugested feature result

A way to create a "linked" credential via ansible.

### Additional information

_No response_
user: samweisgamdschie
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14113: state: open
title: Facing issue while adding Roles for users and teams mapping
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

While adding role mapping to users and teams using configuration as code the output says mapping is successful however when I check in Ansible controller UI, I do not see any user being mapped to a team or any role.

roles.yml :
---

controller_roles_dev:
  - user: john
    target_team: team_storage_dev_devconf
    role: member
    
  - user: sita
    target_team: team_unix_dev_devconf
    role: member

  - user: hanuman
    target_team: team_storage_admin_devconf
    role: member

  - user: ram
    target_team: team_unix_admin_devconf
    role: member

  - team: team_unix_admin_devconf
    organization: org_unix
    role: execute

  - team: team_unix_dev_devconf
    organization: org_unix
    role: execute

  - team: team_unix_dev_devconf
    organization: org_unix
    role: job_template_admin

  - team: team_storage_admin_devconf
    organization: org_storage
    role: execute

  - team: team_storage_dev_devconf
    organization: org_storage
    role: execute

  - team: team_storage_dev_devconf
    job_templates:
      - jt_configure_webserver_rhel86
      - jt_configure_services_rhel86
    role: execute


...


Please find attached screenshots and the sample file I used.
<img width="1779" alt="Screenshot 2023-06-12 at 19 25 26" src="https://github.com/ansible/awx/assets/105802773/4ba6bfd7-f693-4967-822d-3a0ebd456f85">

<img width="1779" alt="Screenshot 2023-06-12 at 22 41 12" src="https://github.com/ansible/awx/assets/105802773/fb728244-d05c-4e23-94aa-38bc29aa3c01">


### AWX version

22.3.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

ansible [core 2.14.0]

### Operating system

RHEL-86

### Web browser

Chrome

### Steps to reproduce

- Clone this project : https://github.com/arnav3000/aap_configuration_template
- Run this command : ansible-playbook --vault-id vaults/opentlc.yml -i inventory_opentlc.yml -l dev playbooks/controller_config_opentlc.yml --ask-vault-pass -e "env=opentlc" -e "no_log=false"

In the output there is no error however in the controller UI there is no mapping to users to teams.

### Expected results

The users should be properly mapped to proper teams with roles.

### Actual results

The users should be properly mapped to the teams in controller UI.

### Additional information

Tested with @sean-m-sullivan together and issue is reproduced.
user: arnav3000
issue_14109: state: open
title: LDAP Settings not working
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

I cannot get LDAP authentication to work despite my settings working on previous AWX versions.

### AWX version

22.3.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

Ubuntu 22

### Web browser

Chrome

### Steps to reproduce

# LDAP Settings

**LDAP Group Type**: `ActiveDirectoryGroupType`

LDAP Bind DN and Password are set

**LDAP Require Group:**

```
CN=WWDC AWX Admins,CN=Users,DC=auslab,DC=cisco,DC=com
```

**LDAP User Search:**

```
[
  "CN=Users,DC=auslab,DC=cisco,DC=com",
  "SCOPE_SUBTREE",
  "(sAMAccountName=%(user)s)"
]
```

**LDAP Group Search:**

```
[
  "cn=Users,dc=auslab,dc=cisco,dc=com",
  "SCOPE_SUBTREE",
  "(objectClass=group)"
]
```

**LDAP User Attribute Map:**

```
{
  "first_name": "givenName",
  "last_name": "sn",
  "email": "mail"
}
```

**LDAP Group Type Parameters:**

```
{
  "name_attr": "cn"
}
```

**LDAP User Flags By Group:**

```
{
  "is_superuser": [
    "CN=WWDC AWX Admins,CN=Users,DC=auslab,DC=cisco,DC=com"
  ]
}
```

**LDAP Organization Map:**

```
{
  "WWDC": {
    "remove_users": false,
    "admins": "CN=WWDC AWX Admins,CN=Users,DC=auslab,DC=cisco,DC=com",
    "remove_admins": false
  }
}
```


### Expected results

Users in the `WWDC AWX Admins` AD group should be able to login with their samAccountName and password successfully.

### Actual results

Login attempt fails and i see this in the web container logs:

```sh
[pid: 154|app: 0|req: 838/2994] 10.42.12.196 () {74 vars in 5272 bytes} [Mon Jun 12 12:47:03 2023] GET /api/login/ => generated 5710 bytes in 49 msecs (HTTP/1.1 200) 10 headers in 460 bytes (1 switches on core 0)
2023-06-12 12:47:04,575 WARNING  [836330e1456645db903757d3560fb211] awx.api.generics Login failed for user robbeck from 10.42.12.196
2023-06-12 12:47:04,584 WARNING  [836330e1456645db903757d3560fb211] django.request Unauthorized: /api/login/
2023-06-12 12:47:04,584 WARNING  [836330e1456645db903757d3560fb211] django.request Unauthorized: /api/login/
10.42.12.196 - - [12/Jun/2023:12:47:04 +0000] "POST /api/login/ HTTP/1.1" 401 5918 "https://wwdc-awx.auslab.cisco.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36" "172.16.91.17"
```

### Additional information

_No response_
user: techBeck03
issue_14108: state: open
title: Ansible custom Inventory Plugin not able to pass variables in AWX
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

This inventory plugin takes the information from MySQL DB (which is a simple use case) and created a dynamic Inventory for the playbooks.
1. when we configure the plugin on an Ansible launcher VM and run it through CLI it works fine.
![image](https://github.com/ansible/awx/assets/10560377/463ff085-f144-41da-bd4e-b264bcab9fcb)
2. But when we use it with AWX (as explained in https://github.com/ansible/awx/issues/3113) we get the groups, and hosts populated in AWX, also the hostvars get all the variables from the ansible-runner env, but the variables from the DB are not listed/accessible. (i.e: booter, nameserver, search_domains) as shown in the screenshot above.

`ansible-inventory -i /etc/ansible/mysql_plugin.yml --list --yaml`

mysql_plugin.yml
---
plugin: mysql_plugin            # Name of the plugin
query_string: |
  SELECT hostname,hostgroup FROM inventory
become: yes


### AWX version

21.0.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Firefox, Chrome

### Steps to reproduce

playbooks, inventory plugin code, and the inventory.yml file to be put in SCM.
created a project in the awx for and used this project as a source for the inventory.

### Expected results

Populate all the group_vars and host_vars in awx from DB by using the inventory plugin. 

### Actual results

not getting any variables from DB into the awx by using the inventory plugin.

### Additional information

_No response_
user: omnachiketa
issue_14101: state: open
title: Perform project updates and inventory updates on correct branch
body: ##### SUMMARY

Ensure that job template's branch is taken into account when performing inventory and source updates

Without this change, scm branch isn't passed to the update jobs and it ends up using HEAD, which is only ever accidentally what is wanted.

This has no effect on the actual job being run, which does run against the correct branch (but potentially with an incorrect inventory).

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 22.1.1.dev136+gb310f4fd56.d20230609
```


##### ADDITIONAL INFORMATION
Reproduction

* Create a project with an inventory source and job template based on an SCM repository. Project and job template should have a default branch.
* Update HEAD of the SCM repository to something different to the default branch
* Run the project - the project will run against the correct branch but the Source Control Update and Inventory Sync will run against HEAD. 
user: willthames
labels: dependencies: Pull requests that update a dependency file
issue_14100: state: open
title: Adding a constructed inventory duplicates hosts in the organisation.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

A constructed inventory in AWX will create hosts and duplicate them in the organisation.

### AWX version

22.2.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

awx-ee:21.11.0

### Operating system

Linux

### Web browser

Chrome, Edge

### Steps to reproduce

I have three inventory:
Azure -> sourced with Azure credentials
VHost -> sourced with VCenter credentials
VCenter -> sourced with VCenter credentials
All into one organisation.
I created a constructed inventory with these three inventories as source.

### Expected results

I expect to hosts not be created, but a similar behaviour like smart inventories.

### Actual results

The hosts are now added with the same name to the organisation again.
I can see duplicate hostnames under Resources -> Hosts
The hosts count on the Dashboard is increased by the number in the constructed inventory.

### Additional information

![duplicate_hosts](https://github.com/ansible/awx/assets/877046/41d43e02-f2bc-40f3-a157-36d47b3cda4b)
![hosts_count](https://github.com/ansible/awx/assets/877046/f885e41e-26f2-4134-8530-374f67e15595)

user: disi
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14099: state: open
title: Make it possible to modify the UI so that it is possible to identify Production/Test servers
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

If you have more than one AWX installation (e.g. Production & Test), it is impossible to determine which server you are connected to by looking at the UI.
It would be really useful if it was possible to modify the UI so that it is obvious to the user.
For example, since the AWX logo is always visible, you could create two AWX logos, one saying 'AWX' and the other saying 'AWX Production' and then have an option in Settings to allow you to choose one or the other. 

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

No steps needed.

### Current results

Nothing.

### Sugested feature result

The ability to easily identify a specific AWX UI.

### Additional information

_No response_
user: mjksohonet
issue_14095: state: open
title: Make rrule plugins return a list with 1 element
body: ##### SUMMARY
Connect https://github.com/ansible/awx/issues/13417

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API


user: AlanCoding
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14090: state: open
title: Add reorder and sort by functionality for survey options
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Allow survey options to be sorted by alphabetical order, lowest to highest, etc.

Alternatively, allowing reordering or creating new entries anywhere within the list would be helpful as well.

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

For example, you have a list of apt packages like so:
![image](https://github.com/ansible/awx/assets/107994087/6ac4f2eb-c438-4994-8378-d3384c7ff234)

### Current results

You can't reorder the lib apt packages to be together (for easier viewing) or sort them alphabetically especially when the list of options is really long.

### Sugested feature result

Similar to how you can reorder survey questions, you can also reorder survey options.

### Additional information

_No response_
user: trevorl-dtl
issue_14060: state: open
title: Add workflow approval job url or apporval job id
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

![image](https://github.com/ansible/awx/assets/1433297/9258a1bc-184f-40cf-8435-256209602337)
Can't get an actual approval url or approval job.id (not workflow job.id)  for "Workflow pending message".
Variable {{ url }} empty. 
{{ job.id }} - doesn't work.

 How i can get a url to approval job/task in notification like https://TOWER_BASE_URL/#/workflow_approvals/1150/details 
 |
![image](https://github.com/ansible/awx/assets/1433297/ccff3e46-1769-491e-a597-681932f2c345)

 

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

create a Workflow pending message like {{ job.id }} - {{ url }}
![image](https://github.com/ansible/awx/assets/1433297/fe735371-0921-41ae-b3f3-7a93463b103e)


### Current results

none, notification doesn't work

### Sugested feature result

notification with approval job id and url to approval

### Additional information

_No response_
user: lutskevich
issue_14059: state: open
title: When copying inventory, how do client know when sub-objects async deep copying finish?
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

When copying inventory, client has no way to check whether sub-objects(eg. groups) async deep copying finished.

By now i have to loop checking whether the new inventory object has expected groups. But occasionally async tasks delays, I don't how much time should i wait for.

Or do we have an option to do synchronously copying?

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

1. Create an inventory, with some groups
2. Copy it

### Current results

1. After copy, check new copied inventory object immediately, group list may be empty in sevel seconds/minutes

### Sugested feature result

I know two options:
1. Async deep copy. When coping, return the async deep copy task id and allow user to check task status.
2. Sync deep copy

### Additional information

_No response_
user: fengyehong
issue_14058: state: open
title: "Workflow pending message body" in  Email type Notification cannot handle customized message body and languages other than English.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

- "Workflow pending message body" in  Email type Notification only handles  {{ job_metadata }}, it will be blank with customized message body. Also, this doesn't convert other languages properly in  {{ job_metadata }} other than English while other message bodies are able to convert.

Cannot `Approval ` refer to `job.*` because it"s not a Job?

### AWX version

AWX version: 22.3.0

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Allowing with [this workaround, ](https://github.com/ansible/awx/issues/10054) because of a language conversion problem, I have replaced  `{{ job_metadata }}` in `Workflow pending message body` as below.

```
The approval node "{{ approval_node_name }}" needs review. This approval node can be viewed at: {{ workflow_url }}

{{ job.name }}
```

However, email notifications are sent with a blank body.

Also, here are the steps to reproduce the language conversion problem.

`Workflow pending message body`
```
The approval node "{{ approval_node_name }}" has timed out. {{ workflow_url }}

{{ job_metadata }}
```
The above will be sent emails body as below:
`The approval node "テスト copy" needs review. This approval node can be viewed at: https://controller23/#/jobs/workflow/549

{
  "id": 551,
  "name": "\u30c6\u30b9\u30c8 copy",  #<--- This part should be "テスト copy"
  "url": "https://controller23/#/jobs/workflow/549",
  "created_by": "admin",
  "started": "2023-05-29T06:37:13.272462+00:00",
  "finished": null,
  "status": "pending",
  "traceback": "",
  "extra_vars": "{}"
}`


### Expected results

- Customized messages in `Workflow pending message body` are appropriately handled and should be written in sent emails notification.
- Other than English languages should be handled in  `Workflow pending message body` as the same other message bodies.

### Actual results

- Customized messages in `Workflow pending message body` are blank in sent emails notification.
- garbled characters in sent emails notification.

### Additional information

_No response_
user: mahoutukaisali
issue_14054: state: open
title: Add Global/Per-Inventory Checkbox for Notifications in Templates
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

I'd like to suggest an enhancement for the AWX notifications feature. Currently, the notifications section for job templates is a great feature that allows us to get notified when certain events occur. However, I noticed that there's no way to easily specify whether these notifications are applied globally or only to a specific inventory. 

I propose adding a new checkbox in the notifications settings of each job template that allows users to specify whether the notifications should be considered as global or specific to each inventory.

My use case for this is that I have many dev environments where I don't need notifications, however, prod deployments are worthy of notifications and I'd like to be able to affiliate my notifications with a specific inventory or have it be global.  I think having this flag at the template level would be useful.



### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

1.     Navigate to the AWX dashboard and select a Job Template.
2. In the Job Template, click on the 'Notifications' tab.
3. Configure a notification for the template by selecting a notification type and setting the necessary parameters.
4. Save the notification.

At this point, the notification is set for the template, but it's applied globally across all inventories. There's no way to specify that the notification should only apply to certain inventories.

### Current results

Currently, when a notification is set up in a Job Template, it applies to all events for that template across all inventories. There's no option to limit or designate these notifications to specific inventories. This means that notifications are being sent out globally regardless of the context or the user's specific needs. The only way to manage this currently is to create different job templates for different inventories which can be cumbersome and inefficient, especially when working with a large number of inventories.

### Sugested feature result

With the proposed feature, users will have the ability to control the scope of notifications in AWX at a much granular level. A new checkbox would be introduced in the notifications setup section of each Job Template, allowing users to designate notifications as either 'global' or 'per inventory'.

When a user selects 'global', the notification will be sent out for all events related to that Job Template across all inventories, just like it is currently. However, when a user selects 'per inventory' with a dropdown of the existing inventories which can be selected resulting in the notification being sent out for events that are specifically related to certain inventories.

This feature will allow users to have a more targeted and efficient notification system in AWX. It would save time and resources by avoiding unnecessary notifications and allowing users to focus on the events that are most relevant to them. It also enhances the flexibility and customizability of the AWX system, making it easier to tailor to individual needs and workflows.

In summary, this feature brings improved notification management, efficiency, and user control in AWX, significantly enhancing user experience and system usability.

### Additional information

_No response_
user: inbinder
issue_14053: state: open
title: Use patch to update users in awx cli
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->

Related to #14047

When exporting users, they have roles exported as well. When importing back, users are updated with `put` which fails and roles are skipped and not assigned.

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - CLI

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
N/A
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->

Before the fix, if a user exists, awx cli tries to update it with `put` but it fails and role assignment is skipped
```
/api/v2/users/ "user@com": Bad Request (400) received - {'password': ['This password is too short. It must contain at least 15 characters.', 'This password is too common.']}.
```

After the fix, the user is patched and after that all roles are assigned.
user: ArtsiomMusin
issue_14052: state: open
title: awxfifo creation fails when write access to container is prohibited.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

**awxfifo** file specified in **uwsgi.ini** might not be created in Kubernetes environment where writing to file system is forbidden/prohibited. 

https://github.com/ansible/awx/blob/22.3.0/tools/ansible/roles/dockerfile/files/uwsgi.ini#L9


### AWX version

22.3.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

- Apply security policy with "readOnlyRootFilesystem" context to Kubernetes cluster.
- Start AWX installation with AWX Operator. 

### Expected results

If the file was located in different directory or subdirectory of /var/lib/awx, then with help of awx-operator emptyDir can be mounted to such location. Thus allowing awxfifo file to be created.
```
---
spec:
...
  extra_volumes:
    - name: awx-fifo
       emptyDir: {}

task_extra_volume_mounts: |
   - name: awx-fifo
     mountPath: /var/lib/awx/fifo
```

master-fifo = /var/lib/awx/**fifo**/awxfifo

### Actual results

uwsgi will prevent startup of web container due to inability of writing to /var/lib/awx directory.

### Additional information

_No response_
user: marekzebro
issue_14049: state: open
title: [WIP] [feature] Specify a jobs' name from its template
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
Adds a `job name template` field to Job Templates and Workflow Job Templates. This defaults to the templates name but can be customized via Jinja2 to include other attributes of the job. For example maybe you want a job name template of:
```
{{ job.name }} - for environment {{ extra_vars.environment }}
```
If you had a job template with a name of `Patch Servers` and survey or extra var that defined an `environment` variable with a value of `PRODUCTION` a job launched with this would be named `Patch Servers - for environment PRODUCTION`. Other fields from the job template can be added.

The use of undefined variables an empty string. In the above example, if extra_vars did not contain an environment variable the name would be `Patch Servers - for environment  ('dict object' has no attribute 'environment')`.

TODO:
- [ ] Add unit/functional tests of API
- [ ] Add integration tests for collection modules
- [X] Do we want to change the UI to not add the `{{ job.id }} - ` in the jobs screen/bread crumb trail and instead set the default value to be `{{ job.id }} - {{ job.name }}` to maintain that behavior? No, in the Next UI it is a separate column that can be added/removed. 
- [x] See if we can alter the Jinja templating to put a value of `undefined` instead of empty string for a variable that can not be found.
- [ ] Add "global" default
- [ ] Workflow template IDs
- [ ] Change field name to be more descriptive
- [ ] What happens with job slicing
- [ ] What happens if a rendered template is larger than a TextField
- [ ] Can we perform a second template on job completion to allow for additional fields/variables to be included?

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API
 - UI
 - Collection

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```

```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: john-westcott-iv
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14048: state: open
title: Improvement: A default value should be passed to bulk job launch via API if not providing value to a parameter
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

During the testathon an issue with the controller UX API was found:
A default value should be passed to bulk job launch via api if not providing value to a parameter.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Try to launch a bulk job on /api/v2/bulk/job_launch/ with the default and doing changes on the name, job and organization:
![image](https://github.com/ansible/awx/assets/70719005/fe38c771-6db8-4be8-9564-0e5eeec69cef)



### Current results

It gives a error message of missing fields which inclused “descrition as well ”
![image](https://github.com/ansible/awx/assets/70719005/39c76dd7-428e-4e3a-918f-f0b318f83477)


### Sugested feature result

It should launch the jobs with the default values if that parameter provided is empty. 

### Additional information

Improvement opportunity found during testathon. 

@kdelee Suggestion: It's a UX issue, we could not include them in the default payload and only include the required fields

Workaround:
Provide only the variables you wanted to pass parameter in the API ( name, job and organization) and it will work: 
![image](https://github.com/ansible/awx/assets/70719005/a6b68da7-340b-4ba0-ac4d-b2e0d0496f9c)

Job launch can be done by simply passing the above parameters and removing all the other parameters:
![image](https://github.com/ansible/awx/assets/70719005/41e9d258-eddd-410f-8688-208e930b481a)


user: jay-steurer
issue_14047: state: open
title: Import for existing users not adding all permissions with awx cli
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

When a list of users is exported, all users are exported with permissions. However, when users are imported back, no permissions are added.

### AWX version

AAP

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Installation method

openshift

### Modifications

no

### Ansible version

n/a

### Operating system

n/a

### Web browser

_No response_

### Steps to reproduce

1. Create a user and add some permissions for this user to some objects or orgs
2. Export the user
3. Remove permissions given on step 1
4. Import the user



### Expected results

All permissions are restored

### Actual results

No permissions are restored

### Additional information

_No response_
user: ArtsiomMusin
issue_14045: state: open
title: Getting error while building awx image
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

awx image Build is failling 

### AWX version

21.14.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

yes

### Ansible version

2.14

### Operating system

ubuntu

### Web browser

Chrome

### Steps to reproduce

We are running awx build throw azure pipeline 
AWX version code 21.14.0
while executing the build we are getting error in make file to get the awx_version.

### Expected results

it should executed

### Actual results

TASK [Get version from SCM if not explicitly provided] *************************
2023-05-25T08:58:22.0530167Z task path: /home/vsts/work/1/s/tools/ansible/build.yml:6
2023-05-25T08:58:22.4243923Z <127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: vsts
2023-05-25T08:58:22.4247054Z <127.0.0.1> EXEC /bin/sh -c 'echo ~vsts && sleep 0'
2023-05-25T08:58:22.4248038Z <127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/vsts/.ansible/tmp `"&& mkdir "` echo /home/vsts/.ansible/tmp/ansible-tmp-1685005102.0894158-3182-114991148777293 `" && echo ansible-tmp-1685005102.0894158-3182-114991148777293="` echo /home/vsts/.ansible/tmp/ansible-tmp-1685005102.0894158-3182-114991148777293 `" ) && sleep 0'
2023-05-25T08:58:22.4248763Z Using module file /opt/pipx/venvs/ansible-core/lib/python3.10/site-packages/ansible/modules/command.py
2023-05-25T08:58:22.4249634Z <127.0.0.1> PUT /home/vsts/.ansible/tmp/ansible-local-3097ta_otokb/tmpz8l67hz4 TO /home/vsts/.ansible/tmp/ansible-tmp-1685005102.0894158-3182-114991148777293/AnsiballZ_command.py
2023-05-25T08:58:22.4250364Z <127.0.0.1> EXEC /bin/sh -c 'chmod u+x /home/vsts/.ansible/tmp/ansible-tmp-1685005102.0894158-3182-114991148777293/ /home/vsts/.ansible/tmp/ansible-tmp-1685005102.0894158-3182-114991148777293/AnsiballZ_command.py && sleep 0'
2023-05-25T08:58:22.4251049Z <127.0.0.1> EXEC /bin/sh -c '/opt/pipx/venvs/ansible-core/bin/python /home/vsts/.ansible/tmp/ansible-tmp-1685005102.0894158-3182-114991148777293/AnsiballZ_command.py && sleep 0'
2023-05-25T08:58:22.4251619Z <127.0.0.1> EXEC /bin/sh -c 'rm -f -r /home/vsts/.ansible/tmp/ansible-tmp-1685005102.0894158-3182-114991148777293/ > /dev/null 2>&1 && sleep 0'
2023-05-25T08:58:22.4252246Z fatal: [localhost]: FAILED! => {
2023-05-25T08:58:22.4252428Z     "changed": true,
2023-05-25T08:58:22.4252647Z     "cmd": [
2023-05-25T08:58:22.4252822Z         "make",
2023-05-25T08:58:22.4253019Z         "version-for-buildyml"
2023-05-25T08:58:22.4253161Z     ],
2023-05-25T08:58:22.4253322Z     "delta": "0:00:00.012205",
2023-05-25T08:58:22.4253543Z     "end": "2023-05-25 08:58:22.396234",
2023-05-25T08:58:22.4253713Z     "failed_when_result": true,
2023-05-25T08:58:22.4253841Z     "invocation": {
2023-05-25T08:58:22.4253978Z         "module_args": {
2023-05-25T08:58:22.4254199Z             "_raw_params": "make version-for-buildyml",
2023-05-25T08:58:22.4254365Z             "_uses_shell": false,
2023-05-25T08:58:22.4254505Z             "argv": null,
2023-05-25T08:58:22.4254625Z             "chdir": "../../",
2023-05-25T08:58:22.4254760Z             "creates": null,
2023-05-25T08:58:22.4254885Z             "executable": null,
2023-05-25T08:58:22.4255028Z             "removes": null,
2023-05-25T08:58:22.4255149Z             "stdin": null,
2023-05-25T08:58:22.4255291Z             "stdin_add_newline": true,
2023-05-25T08:58:22.4255427Z             "strip_empty_ends": true
2023-05-25T08:58:22.4255707Z         }
2023-05-25T08:58:22.4255852Z     },
2023-05-25T08:58:22.4256054Z     "msg": "non-zero return code",
2023-05-25T08:58:22.4256293Z     "rc": 2,
2023-05-25T08:58:22.4256532Z     "start": "2023-05-25 08:58:22.384029",
2023-05-25T08:58:22.4257005Z     "stderr": "make: python3.9: No such file or directory\nmake: *** No rule to make target 'version-for-buildyml'.  Stop.",
2023-05-25T08:58:22.4257324Z     "stderr_lines": [
2023-05-25T08:58:22.4257494Z         "make: python3.9: No such file or directory",
2023-05-25T08:58:22.4257870Z         "make: *** No rule to make target 'version-for-buildyml'.  Stop."
2023-05-25T08:58:22.4258128Z     ],
2023-05-25T08:58:22.4258259Z     "stdout": "",
2023-05-25T08:58:22.4258414Z     "stdout_lines": []
2023-05-25T08:58:22.4258548Z }

### Additional information

Before this build we are using awx builder version: 1.2.0 
and awx runner version 3
user: pradeep-git23
issue_14043: state: open
title: Add some type of validation for prompt on launch
body:  ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

Have had several reports of users trying to add extra vars and having template execution fail. Having some kind of validation or error trigger if prompt on launch isn't set could be helpful in preventing this frustration.

### AWX version

22.3

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs

user: djyasin
issue_14042: state: open
title: Source Vars are marked as required on Constructed Inventory UI
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

On the Constructed Inventories UI there is an asterisk on the source_vars implying that it is required to build the inventory even though this is not correct.

![image](https://github.com/ansible/awx/assets/9306551/971bafae-cfa3-44b7-b3e9-c17d04abcf6c)

This was not tested on the Tech Preview UI as the Constructed Inventory page is not available at the time.

### AWX version

4.4

### Select the relevant components

- [X] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.4

### Operating system

fedora

### Web browser

Firefox, Chrome

### Steps to reproduce
Go to Inventories>Add>Add constructed inventory
On the bottom of the page there's the Source vars field


### Expected results

Source vars is not required to create the constructed inventory so the asterisk shouldn't be there



### Actual results

The asterisk is there, implying that the source var is required


### Additional information

Bug found during testathon
Jira Issue: https://issues.redhat.com/browse/AAP-12581
user: Jaapis
issue_14039: state: open
title:  Add CodeSpell and SpellCheck to CI Checks
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Add CodeSpell and ShellCheck to CI Checks. 

It should probably get added to https://github.com/ansible/awx/blob/devel/.github/workflows/ci.yml.

See more info here: 

https://github.com/ansible/awx/pull/13221#issuecomment-1560068359

### Select the relevant components

- [ ] UI
- [X] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

N/a

### Current results

N/a

### Sugested feature result

N/a

### Additional information

N/a
user: djyasin
issue_14036: state: open
title: [cleanup] Move websockets emit function to utils
body: ##### SUMMARY

This cleans up consumers.py and removes several utility functions from it. The main one being `emit_channel_notification` which here has been renamed to `emit_websocket_payload` to be more descriptive, and moved into the module `awx.main.utils.websockets`.


<!--- Describe the change, including rationale and design decisions -->

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API

user: relrod
issue_14033: state: open
title: Jobs occasionally get stuck and can't complete even when all steps in playbook were actually done
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

This seems to be happening to multiple job templates in our AWX instance. I haven't figured out a pattern yet but the jobs occasionally get stuck in `Running` status and can't complete as expected, and it could keep running even when all steps in the playbook were actually already done, and I have to cancel such jobs manually. 
I was able to confirm it was actually stuck (not an UI status update issue) as the ephemeral automation job pod for the target job was still running there in k8s. Sometimes the jobs might be terminated by AWX itself in 6 hours, sometimes in 8 hours or even longer. For the jobs with a shorter timeout settings in the template (e.g. 1 hour based on the business logic it has) it will just timeout.

Most of our jobs are invoking python scripts and I was able to tell that the actual steps had been done according to the logs in our logging system produced by the python scripts.

And the issue could also happen to jobs which don't invoke any python or shell script but only execute some k8s modules in playbook to create resources in k8s cluster, i.e. only some simple tasks in the playbook. And in one case the job got stuck when the job output had already printed the PLAY RECAP summary info like following:
```
PLAY RECAP *********************************************************************
localhost                  : ok=16   changed=11   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
```

### AWX version

21.9.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

We don't have modifications to AWX image itself, but we do use our customized Execution Environment image:
* Base image: quay.io/ansible/ansible-runner:stable-2.12-devel
* Python version: 3.8.13

### Ansible version

2.12.5

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Just run jobs as usual and the issue could happen occasionally, recently it almost happens everyday, maybe roughly 1% to 3% chance of happening. It happens more often to long running jobs (the ones run for longer than 10-15 minutes or so).

### Expected results

Jobs can complete (either succeed or fail) when all steps in playbook are done.

### Actual results

Some jobs get stuck in Running status and the ephemeral automation job pod will keep running in k8s until it gets timeout or terminated by AWX in 6-12 hours or so, or cancelled manually.

### Additional information

I couldn't find any helpful log in any of the AWX web/task/ee containers or the automation job pod itself. Below is an example of the logs regarding a problematic job from `mro-awx-task` container in `mro-awx` pod:
```
2023-05-21 22:45:59,902 INFO     [34e9f318d1374a0fbd4becf3dfdee5e4] awx.analytics.job_lifecycle job-283032 created
2023-05-21 22:46:00,165 INFO     [34e9f318d1374a0fbd4becf3dfdee5e4] awx.analytics.job_lifecycle job-283032 acknowledged
2023-05-21 22:46:00,599 INFO     [34e9f318d1374a0fbd4becf3dfdee5e4] awx.analytics.job_lifecycle job-283032 blocked by projectupdate-283033
2023-05-21 22:46:02,647 INFO     [5e7d0e67d63e49bd8db81aecef8da319] awx.analytics.job_lifecycle job-283032 blocked by projectupdate-283033
2023-05-21 22:46:06,295 INFO     [34e9f318d1374a0fbd4becf3dfdee5e4] awx.analytics.job_lifecycle job-283032 waiting
2023-05-21 22:46:06,657 INFO     [34e9f318d1374a0fbd4becf3dfdee5e4] awx.analytics.job_lifecycle job-283032 pre run
2023-05-21 22:46:06,917 INFO     [34e9f318d1374a0fbd4becf3dfdee5e4] awx.analytics.job_lifecycle job-283032 preparing playbook
2023-05-21 22:46:07,113 INFO     [34e9f318d1374a0fbd4becf3dfdee5e4] awx.analytics.job_lifecycle job-283032 running playbook
2023-05-21 22:46:11,662 INFO     [34e9f318d1374a0fbd4becf3dfdee5e4] awx.analytics.job_lifecycle job-283032 work unit id received
2023-05-21 22:46:11,752 INFO     [34e9f318d1374a0fbd4becf3dfdee5e4] awx.analytics.job_lifecycle job-283032 work unit id assigned
2023-05-22 00:01:20,834 INFO     [34e9f318d1374a0fbd4becf3dfdee5e4] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 283032
2023-05-22 00:01:20,868 INFO     [34e9f318d1374a0fbd4becf3dfdee5e4] awx.analytics.job_lifecycle job-283032 post run
2023-05-22 00:01:26,570 INFO     [34e9f318d1374a0fbd4becf3dfdee5e4] awx.analytics.job_lifecycle job-283032 finalize run
2023-05-22 00:01:26,618 WARNING  [34e9f318d1374a0fbd4becf3dfdee5e4] awx.main.dispatch job 283032 (error) encountered an error (rc=None), please see task stdout for details.
2023-05-22 00:01:27,000 INFO     [34e9f318d1374a0fbd4becf3dfdee5e4] awx.analytics.job_lifecycle job-283032 notifications sent
```

The log entry `2023-05-22 00:01:20,834 INFO     [34e9f318d1374a0fbd4becf3dfdee5e4] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 283032` happened when I cancelled that job manually.

Below is another example of the similar logs for a job which succeeded as expected, just for a comparison with above logs:
```
2023-05-21 23:00:05,278 INFO     [3b04b25f62c842c7bc80cc6b495a2757] awx.analytics.job_lifecycle job-283039 created
2023-05-21 23:00:05,470 INFO     [3b04b25f62c842c7bc80cc6b495a2757] awx.analytics.job_lifecycle job-283039 acknowledged
2023-05-21 23:00:05,913 INFO     [3b04b25f62c842c7bc80cc6b495a2757] awx.analytics.job_lifecycle job-283039 blocked by projectupdate-283040
2023-05-21 23:00:06,280 INFO     [3b04b25f62c842c7bc80cc6b495a2757] awx.analytics.job_lifecycle job-283039 blocked by projectupdate-283040
2023-05-21 23:00:06,873 INFO     [3b04b25f62c842c7bc80cc6b495a2757] awx.analytics.job_lifecycle job-283039 blocked by projectupdate-283040
2023-05-21 23:00:10,951 INFO     [3b04b25f62c842c7bc80cc6b495a2757] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 283040
2023-05-21 23:00:10,954 INFO     [3b04b25f62c842c7bc80cc6b495a2757] awx.analytics.job_lifecycle projectupdate-283040 post run
2023-05-21 23:00:11,324 INFO     [-] awx.analytics.job_lifecycle projectupdate-283040 stats wrapup finished
2023-05-21 23:00:11,457 INFO     [3b04b25f62c842c7bc80cc6b495a2757] awx.analytics.job_lifecycle projectupdate-283040 finalize run
2023-05-21 23:00:11,791 INFO     [3b04b25f62c842c7bc80cc6b495a2757] awx.analytics.job_lifecycle job-283039 waiting
2023-05-21 23:00:12,183 INFO     [3b04b25f62c842c7bc80cc6b495a2757] awx.analytics.job_lifecycle job-283039 pre run
2023-05-21 23:00:12,640 INFO     [3b04b25f62c842c7bc80cc6b495a2757] awx.analytics.job_lifecycle job-283039 preparing playbook
2023-05-21 23:00:12,840 INFO     [3b04b25f62c842c7bc80cc6b495a2757] awx.analytics.job_lifecycle job-283039 running playbook
2023-05-21 23:00:17,824 INFO     [3b04b25f62c842c7bc80cc6b495a2757] awx.analytics.job_lifecycle job-283039 work unit id received
2023-05-21 23:00:17,904 INFO     [3b04b25f62c842c7bc80cc6b495a2757] awx.analytics.job_lifecycle job-283039 work unit id assigned
2023-05-21 23:20:41,863 INFO     [3b04b25f62c842c7bc80cc6b495a2757] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 283039
2023-05-21 23:20:41,868 INFO     [3b04b25f62c842c7bc80cc6b495a2757] awx.analytics.job_lifecycle job-283039 post run
2023-05-21 23:20:42,074 INFO     [3b04b25f62c842c7bc80cc6b495a2757] awx.analytics.job_lifecycle job-283039 finalize run
2023-05-21 23:20:42,156 INFO     [-] awx.analytics.job_lifecycle job-283039 stats wrapup finished
```
user: seaman25
issue_14029: state: open
title: Collection awx, module awx.awx.role - Team "member" role on a target team
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Hello,
in AWX collection 22.1.0 (and in the new awxkit==22.2.0) is supported adding on a (source) Team the "member" role on another (target) Team..
This is supported by the API since lots of version ago (as already mentioned in Issue #10894 and as you can manually test).

This feature is strangely broken in the **AWX collection 22.2.0**

@sean-m-sullivan 
Are you able to check what are changes in AWX collection 22.2.0 that break this feature?

> The RBAC model of "team member of another target team" is really useful to grant permissions to a group of teams or a group of users (member of a team)

Thank you

Kind Regards,
Claudio

### AWX version

22.2.0

### Select the relevant components

- [ ] UI
- [ ] UI (tech preview)
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.11

### Operating system

CentOS 8 + k3s

### Web browser

Chrome

### Steps to reproduce

```yaml
- name: "Assign 'member' role to team on a Target Team"
  awx.awx.role:
    teams:
    - "TeamA"
    role: member
    target_teams:
    - "TeamB"
    validate_certs: no
```

### Expected results

Team **has** `Member` role on the target team (and awx.awx.role task returns [changed] state first time, then [ok] next times)

### Actual results

Team **_has no_** `Member` role on the target team (and awx.awx.role task returns always [ok] state)

### Additional information

_No response_
user: kladiv
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_14027: state: open
title: AWX does not support verbosity as high as Ansible-core
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

In updating our help text, comparing against `ansible-playbook --help`, I made a startling discovery.

```
  -v, --verbose         Causes Ansible to print more debug messages. Adding
                        multiple -v will increase the verbosity, the builtin
                        plugins currently evaluate up to -vvvvvv. A reasonable
                        level to start is -vvv, connection debugging might
                        require -vvvv.
```

That's 6 vs! Our code only supports 5

https://github.com/ansible/awx/blob/5afdfb11351dca986d62c7ebbfc7438c55274449/awx/main/tasks/jobs.py#L999

https://github.com/ansible/awx/blob/5afdfb11351dca986d62c7ebbfc7438c55274449/awx/main/models/base.py#L67-L74

This was changed not too long ago in https://github.com/ansible/ansible/pull/76887



### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Use a lot of `-v`s on the CLI

### Current results

Can't do that many in AWX

### Sugested feature result

AWX can do however many CLI can do.

### Additional information

_No response_
user: AlanCoding
issue_14026: state: open
title: Move pid files and sockets to /tmp
body: Fixes #13951

Users without root access didn't have permission to `/var/run` and `/var/lib/awx`

##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
`/var/lib/awx/rsyslog`, `/var/run/supervisor`,  and `/var/run/awx-rsyslog` are owned by `root:root` and aren't world writable, so we can't create the sockets and temp files there unless we're the root user or in the root group. While `/tmp` isn't necessarily a conventional place to put these things (except `tempfile.TemporaryDirectory(...)` which probably should've always been there), we need a world writable place to create these files if we want to support non-root access.

An alternative could be to `chmod` `/var/lib/awx/rsyslog`, `/var/run/supervisor`, and `/var/run/awx-rsyslog` to be world writable.

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - Other

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 22.2.1.dev22+gfa05f55512.d20230519
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

To reproduce you just need to set the security context to a non-root user and group. For example:

```
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx
  namespace: awx
spec:
  security_context_settings:
    runAsUser: 1000
    runAsGroup: 1000
```

As a side note I noticed that the awx-web pod doesn't get the security context applied, this seems to be a separate bug that I'll file an issue for separately. 


user: ToxicGLaDOS
issue_14025: state: open
title: Add `help_text` for all* fields and add enforcement check
body: ##### SUMMARY
This adds a test that loops over all views, and then for every view that has a model in our app, it loops over the model fields, subtracts exceptions, and then will fail if any field has blank help text. So that explains the asterisk about the definition of "all" here.

I wrote the help text for everything here, applying knowledge from my own memory but I had to search the code to understand the behavior in a good handful of cases.

This is used in API OPTIONS, so we get stuff like this:

```json
            "job_explanation": {
                "type": "string",
                "label": "Job explanation",
                "help_text": "A status field to indicate the state of the job if it wasn't able to run and capture stdout",
                "filterable": true
            },
            "execution_node": {
                "type": "string",
                "label": "Execution node",
                "help_text": "The node the job executed on.",
                "filterable": true
            },
            "controller_node": {
                "type": "string",
                "label": "Controller node",
                "help_text": "The instance that managed the execution of this job.",
                "filterable": true
            },
            "launched_by": {
                "type": "field",
                "label": "Launched by",
                "filterable": false
            },
            "work_unit_id": {
                "type": "string",
                "label": "Work unit id",
                "help_text": "The Receptor work unit ID associated with this job.",
                "filterable": true
```

You can see here that `launched_by` still has no help_text. This is because it is a serializer field and the method here fails to capture that. Someone could delete my test and do it better if they want, but I believe just filling in the help text will have lasting value, and this will prevent new fields with no help text in the future.

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - Docs



user: AlanCoding
issue_14024: state: open
title: CORS errors after upgrading to AWX 22.3.0
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx-operator/issues) for duplicates.
- [X] I understand that the AWX Operator is open source software provided for free and that I might not receive a timely response.

### Bug Summary

We have an external load balancer in from of our kubernetes based install that terminates SSL, and passes it to the host.
URL configured for ingress on external load balancer: https://vip.example.com
backend server load balancer sends traffic to (the kubernetes node): http://awx.example.com:30080
After upgrading from version 21.x, we are now seeing the following error:
POST api/v2/job_templates/31/launch/ 403
CSRF Failed: Origin checking failed - https://vip.example.com does not match any trusted origins.
As a work-around we are using http://awx.example.com:30080 URL to login.

### AWX Operator version

2.2.1

### AWX version

22.3.0

### Kubernetes platform

kubernetes

### Kubernetes/Platform version

Major:"1", Minor:"25"

### Modifications

no

### Steps to reproduce

awx.yaml file I deployed with:
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx-kubernetes
spec:
  service_type: nodeport


### Expected results

Expect to allow CORS headers

### Actual results

giving error.  Even tried updating the awx.yaml with:
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx-kubernetes
spec:
  service_type: nodeport
  hostname: vip.example.com
  extra_settings:
    - setting: MIDDLEWARE
      value: "['corsheaders.middleware.CorsMiddleware'] + MIDDLEWARE"
    - setting: CORS_ORIGIN_ALLOW_ALL
      value: "True"


### Additional information

_No response_

### Operator Logs

_No response_
user: multco-troy
issue_14019: state: open
title: cannot access '/var/log/tower/profile/': Permission denied
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

bash-4.4$ ls /var/log/tower/profile/
ls: cannot access '/var/log/tower/profile/': Permission denied

unable to access profile for debugging

### AWX version

devel

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

exec into container and do `ls /var/log/tower/profile/`

### Expected results

able to access '/var/log/tower/profile/'

### Actual results

unable to access '/var/log/tower/profile/'

### Additional information

_No response_
user: TheRealHaoLiu
issue_14018: state: open
title: [troubleshooting] Configurable filtering of high-volume logs
body: ##### SUMMARY
The pitch here is to make DEBUG level logging useful.

Before this, if you switched log level to debug, you got swamped with periodic messages. After this, the default behavior will be relatively quiet, and then you will have to enable certain things with the new setting to get the unusually noisy logs again.

This still needs some UI work to show the setting in the UI and allow for editing it there.

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - API


user: AlanCoding
issue_14012: state: open
title: Deleting resources associated with labels does not delete the labels
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

If you delete an inventory or a job template that has unique labels associated with them, the labels are not automatically deleted. This is not ideal because the `/api/v2/labels/N/` view does not even allow a DELETE method, making that label mostly impossible to delete after that.

### AWX version

devel

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Follow these steps to demonstrate the inventory case:

1. Create an inventory in the UI, and give it 1 label
2. Ok, now delete that inventory
3. Check `/api/v2/labels/`

Is that 1 label you created in step (1) still there?

### Expected results

These are steps to establish expectations:

1. Create an inventory in the UI, and give it 1 label (implied that you save it)
2. now edit the inventory again and remove that 1 label
3. Check the `/api/v2/labels/` list

The label is no longer there - disassociation automatically deletes the label. This is the justification for the very-annoying API restriction that you can't delete a label directly in the API.

### Actual results

Deleting the inventory (from steps-to-reproduce) should delete the label. This is fairly trivial to code up because the inventory deletion happens in a task:

```diff
diff --git a/awx/main/tasks/system.py b/awx/main/tasks/system.py
index 12b1981a85..9766c988f7 100644
--- a/awx/main/tasks/system.py
+++ b/awx/main/tasks/system.py
@@ -837,9 +837,11 @@ def delete_inventory(inventory_id, user_id, retries=5):
             user = User.objects.get(id=user_id)
         except Exception:
             user = None
+    labels = []
     with ignore_inventory_computed_fields(), ignore_inventory_group_removal(), impersonate(user):
         try:
             i = Inventory.objects.get(id=inventory_id)
+            labels = list(i.labels.all())
             for host in i.hosts.iterator():
                 host.job_events_as_primary_host.update(host=None)
             i.delete()
@@ -853,6 +855,9 @@ def delete_inventory(inventory_id, user_id, retries=5):
             if retries > 0:
                 time.sleep(10)
                 delete_inventory(inventory_id, user_id, retries=retries - 1)
+    for label in labels:
+        if label.is_detached():
+            label.delete()
 
 
 def with_path_cleanup(f):
```

However, doing this by itself would not solve the case of deleting a UnifiedJobTemplate (job template, project, etc). So something like that would need to be repeated for that case as well... although I don't like the performance implications of it.

Beyond that, however, we need to worry about "launch configs" such as schedules. At that point, it becomes unclear what "detached" should even mean, and maybe a completely different approach is needed.

### Additional information

https://github.com/ansible/awx/pull/14010 is working around the problem such that awx CLI import / export doesn't break in these cases of re-applying a detached label.
user: AlanCoding
issue_14009: state: open
title: AWX Workflow converged node runs despite previous node exiting with 'Error'
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

In AWX Workflows, when a workflow node is converged from previous nodes, and the nodes are marked to run the converged node on success only, the converged node will run despite a previous node exiting in 'Error' state.

For example, taking this schema:

```
head-node:
  head: true
  success: [node1, node2, node3]

node1:
  success: [node4]

node2:
  success: [node4]

node3:
  success: [node4]

node4:
  converge: all
```

In this schema, if node2 exists in 'Error' (For various reasons, for example for failing to perform project update) and node1 and node3 finish successfully, node4 will still run regardless of node2 not finishing successfully. 

This scenario still works as expected if node2 enters 'Failed' state. If node1/node2/node3 finish exit with 'Failed', node4 will not run, but if they exit with 'Error', node4 will run regardless.

I would expect that if node2 fails both by the ansible job itself failing marking it as 'Failed', or by an awx issue marking it as 'Error', it would not run node4.

<img width="379" alt="Screenshot 2023-05-16 at 10 49 17" src="https://github.com/ansible/awx/assets/13949521/a83fe03d-2bdf-48ae-a984-0edc3571abfa">



### AWX version

21.10.2

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.12.10

### Operating system

CentOS Stream release 8 on execution environments. awx deployed with awx-oprator and awx official image

### Web browser

_No response_

### Steps to reproduce

Create a schema as detailed above and make one of the nodes enter 'Error' state

### Expected results

in the detailed schema, if one node fails with 'Error', i would expect the converged node to not run

### Actual results

in the detailed schema, if one node fails with 'Error', the converged node will run 

### Additional information

_No response_
user: Katnopic
issue_14001: state: open
title: Importing job_templates throws error {'inventory': ['Must either set a default value or ask to prompt on launch.']}
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

While trying to import job templates using awx import command and passing the job template information if json format as attached: 
[bugTemplate.json.zip](https://github.com/ansible/awx/files/11478781/bugTemplate.json.zip)

Command to import : `awx import --conf.host http://awx.xyz.com/ --conf.username admin --conf.password my_password < bugTemplate.json`

Throws error : `{'inventory': ['Must either set a default value or ask to prompt on launch.']}`

The same thing use to work properly with AWX version 19.5 but we recently migrated to latest version after which it started throwing this error.

### AWX version

22.2.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

yes

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

Setup using following versions:
AWX 22.1.0
AWX Operator 2.0.1

Create a json file job_template data containing inventory information within template. This inventory is already created manually in AWX tower.

### Expected results

It should import job template along with inventory information

### Actual results

Bad Request (400) received - {'inventory': ['Must either set a default value or ask to prompt on launch.']}.

### Additional information

_No response_
user: syncthreads-ankit
issue_13997: state: open
title: API: schedule updates do not check if limit/forks/timeout are overwriteable in job template
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

References https://github.com/redhat-cop/controller_configuration/pull/602

During testing I discovered that during creation limit, forks and timeout arguments are checked if they are "prompt on launch". This does not seem to happen during update of a schedule.

### AWX version

22.2.0

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

ansible [core 2.13.3]

### Operating system

RHEL8

### Web browser

Firefox

### Steps to reproduce

This assumes you have a test_jobtemplate where forks, timeout and limit are not "prompt on launch"

```
- name: Make sure schedule is not there when starting
  awx.awx.schedule:
    controller_host: "{{ controller_hostname }}"
    controller_oauthtoken: "{{ controller_oauthtoken }}"
    name: "test_schedule"
    state: absent


- name: add schedule and fail
  awx.awx.schedule:
    controller_host: "{{ controller_hostname }}"
    controller_oauthtoken: "{{ controller_oauthtoken }}"
    name: "test_schedule"
    unified_job_template: "test_jobtemplate"
    rrule: "DTSTART:20230101T220000Z RRULE:FREQ=DAILY;INTERVAL=1"
    limit: ''
    forks: 0
    timeout: 0
  ignore_errors: true

- name: add schedule without limit, forks and timeout
  awx.awx.schedule:
    controller_host: "{{ controller_hostname }}"
    controller_oauthtoken: "{{ controller_oauthtoken }}"
    name: "test_schedule"
    unified_job_template: "test_jobtemplate"
    rrule: "DTSTART:20230101T220000Z RRULE:FREQ=DAILY;INTERVAL=1"


- name: modify schedule and succeed
  awx.awx.schedule:
    controller_host: "{{ controller_hostname }}"
    controller_oauthtoken: "{{ controller_oauthtoken }}"
    name: "test_schedule"
    unified_job_template: "test_jobtemplate"
    rrule: "DTSTART:20230101T220000Z RRULE:FREQ=DAILY;INTERVAL=1"
    limit: ''
    forks: 0
    timeout: 0
```

### Expected results

Task "name: modify schedule and succeed" should fail

### Actual results

Task "name: modify schedule and succeed" succeeds



### Additional information

I also checked the API, the schedule is actually changed.

from

```
"limit": null,
"forks": null,
"timeout": null,
```

to

```
"limit": "",
"forks": 0,
"timeout": 0,
```

user: Klaas-
issue_13996: state: open
title: awx.awx.import / awx import issue with inventories:
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

I have an inventory called "empty" without source, very basic, only "localhost" is defined:

```
inventory:
- description: 'empty inv'
  host_filter: null
  kind: ''
  name: empty
  natural_key:
    name: empty
    organization:
      name: Default
      type: organization
    type: inventory
  organization:
    name: Default
    type: organization
  prevent_instance_group_fallback: false
  related:
    groups: []
    hosts:
    - description: ''
      enabled: true
      instance_id: ''
      inventory:
        name: empty
        organization:
          name: Default
          type: organization
        type: inventory
      name: localhost
      natural_key:
        inventory:
          name: empty
          organization:
            name: Default
            type: organization
          type: inventory
        name: localhost
        type: host
      related:
        groups: []
      variables: '---'
    labels: []
  variables: '---'
```

Running following command does not raise an error but also does not import the inventory:

```
awx import -k -f yaml < empty.yml
```
Same behavior with awx.awx.import:
```
- name: "create empty inventory"
  awx.awx.import:
    assets: "{{ empty_inventory }}"
  environment:
    CONTROLLER_VERIFY_SSL: "{{ awx_cli_verify_ssl }}"
    CONTROLLER_HOST: "{{ awx_hostname | default(inventory_hostname) }}"
    CONTROLLER_USERNAME: "{{ awx_username | default(awx_admin_username) }}"
    CONTROLLER_PASSWORD: "{{ awx_password | default(awx_admin_password) }}"
```

This worked on a previous version, dont know which, but it was a recent version 21.x or so.

If i have a clean installation of AWX, only containing Organizations i have to create a dummy project and a dummy inventory before issuing the command, otherwise i get an error:

```
awx import -k -f yaml < empty.yml
Insufficient privileges on /api/v2/inventory_sources/, inferring POST fields from description.
Insufficient privileges on /api/v2/job_templates/, inferring POST fields from description.
```

I think this is also an error but i can work around it, so i can live with it.

May the behavior is intended since newer versions of awx, but cannot imagine.

### AWX version

22.2.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

Debian 11.4

### Web browser

_No response_

### Steps to reproduce

Run the commands above.

### Expected results

Inventory should be created

### Actual results

Inventoy is not created, no error occurs, in case of playbook "OK" is returned by the awx.awx.import task.

### Additional information

awxkit: 22.2.0
awx.awx collection: 22.2.0
user: pombaer
issue_13995: state: open
title: Add Instance Group functionality to Inventory Source Scripts
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Under the current architecture of Inventory Source scripts, there is no way to assign an Instance Group to the inventory source script.

The scenario I have is that I have associated an inventory to a particular instance group, which is in a segregated network. This is because I want all template jobs associated with this Inventory to execute on that Instance Group by default (avoids having to train people to manually set the Instance Group on their templates).
When I try and sync the inventory sources, the sync job also attempts to execute on that Instance Group. This would be fine, except the Inventory Source web service is not available from the segregated network, so I would like to be able to tell it to execute on another instance group that does have access.

Is it possible to enhance the Inventory Sources to also allow associating of an Instance Group to them directly? That way for each Inventory Source I can define the correct Instance Group, which may, or may not (in this case not) be the same as that which I have set for the Inventory? I would propose this follows the same precedence rules governing Instance Groups as for Templates (1. Template, 2. Inventory, 3. Organisation), so it would end up as:
1. Inventory Source job
2. Inventory
3. Organisation

I have searched as best I could through the open issues to see if this was already there, but couldn't see it.

My environment:
AWX 22.1.0 on K3s, deployed via Operator.

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

To reproduce the issue, create a new instance group, with an Execution Instance that has no connectivity to the web service you wish to use as your inventory source

Create an inventory source script to pull data from a web service that is only accessible from the controller node (default instance)

Create the inventory and associate it to the new Instance Group, and assign the inventory source script etc.

Execute, and you should see the inventory script fail, as it cannot connect back to the Inventory Web Service.

### Current results

Currently works as designed, executes on Inventory associated Execution Node

### Sugested feature result

Allow users to set the Instance Group where the job will run.

### Additional information

_No response_
user: bar0n36
issue_13993: state: open
title: Reduce queue checks needed for task assignment
body: ##### SUMMARY
Another patch to offer to use https://github.com/ansible/awx/pull/13989 to test with.

We have to check the finished queue to evaluate a worker's idle/busy state this is triggered
 - for _all_ workers when `should_grow` is called
 - for each worker as we are searching for an idle worker

the argument here is that we are checking the finished queue two times before dispatching a task. So we just don't check the first time.

This is presented as something which should increase the `dispatcher_availability`, but this should be most acute in the scenario that we are under very high loads, because in this case we will have the largest number of finished queues to check.

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API

user: AlanCoding
issue_13988: state: open
title: Add a UI confirmation when clicking on the renew webhook key button for a job template
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Hello,

It is a very small feature request, but can a confirmation be added when you click on the renew webhook key button on the edit view of a job template, as I have multiple time clicked on it when trying to copy it ?
Also, is it possible to add a "Copy" button on the details view of a job template to quickly copy the webhook url/key ?

Thank you !

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Create a job template, enable webhook, click on the renew button next to the webhook key field

### Current results

A new webhook key is instantly generate, deactivating the old one

### Sugested feature result

A pop-up appear and ask if we are really sure to renew the webhook key, as the renew will imply to change the webhook key everywhere it's currently used.

### Additional information

_No response_
user: maximerobine
issue_13986: state: open
title: Set SCM branch for project update via API
body: ##### ISSUE TYPE
 - New or Enhanced Feature


##### COMPONENT NAME
 - API


##### SUMMARY
Set SCM branch for project update via REST API

##### ENVIRONMENT
* AWX version: 4.2.1
* Operating System: Red Hat Enterprise Linux 8.6

##### STEPS TO REPRODUCE

POST to API /api/v2/projects/{id}/update/ with additional scm_branch parameter.

##### EXPECTED RESULTS

Override scm-branch for project update

##### ACTUAL RESULTS

scm-update of specific scm-branch in project XYZ

user: brotaxt
issue_13984: state: open
title: Try to applied credential_admin to team
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Hello,

I tried to apply `credential_admin` to a specific team for a credential, but it doesn't apply and I don't get an error running the playbook (also not changed).

thanks for your help

### AWX version

22.1.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

minikube

### Modifications

no

### Ansible version

ansible [core 2.14.5]

### Operating system

Ubuntu

### Web browser

Chrome

### Steps to reproduce

Execute playbook with this vars and tasks:

```
  vars:
    user: user1
    team: myteam
    organization: myorg
    credentials:
      credential_vault:
        name: "my vault credential"
        credential_type: Vault

  tasks:
    - name: Create organization
      awx.awx.organization:
        name: "{{ organization }}"
        description: "My org test"

    - name: Create teams
      awx.awx.team:
        name: "{{ team }}"
        description: "team"
        organization: "{{ organization }}"

    - name: Create users
      awx.awx.user:
        username: "{{ user }}"
        password: "password"
        update_secrets: false

    - name: Create credentials
      awx.awx.credential:
        name: "{{ item.value.name }}"
        organization: "{{ organization }}"
        description: "{{ item.value.description | default(omit) }}"
        credential_type: "{{ item.value.credential_type | mandatory }}"
        inputs: "{{ item.value.inputs | default(omit) }}"
        state: "{{ item.value.state | default('present') }}"
      loop: "{{ credentials | dict2items }}"
      no_log: true

    - name: Allow team to edit credentials
      awx.awx.role:
        role: credential_admin
        organizations: "{{ organization  }}"
        credentials: "{{ credentials.values() | map(attribute='name') | list }}"
        target_teams: "{{ team }}"

### Expected results

The user in the team: "myteam" can view and modifiy the credential "my vault credential", but it's not.


### Actual results

In the playbook execution no error and no change:
```
ok: [localhost] => {
    "changed": false,
    "invocation": {
        "module_args": {
            "controller_config_file": null,
            "controller_host": "http://x.x.x.x",
            "controller_oauthtoken": null,
            "controller_password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "controller_username": "admin",
            "credential": null,
            "credentials": [
                "my vault credential"
            ],
            "instance_groups": null,
            "inventories": null,
            "inventory": null,
            "job_template": null,
            "job_templates": null,
            "lookup_organization": null,
            "organization": null,
            "organizations": [
                "myorg"
            ],
            "project": null,
            "projects": null,
            "target_team": null,
            "target_teams": [
                "myteam"
            ],
            "team": null,
            "user": null,
            "validate_certs": false,
            "workflow": null,
            "workflows": null
        }
    },
    "role": "credential_admin"
}
```


### Additional information

_No response_
user: nicolaspn
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_13983: state: open
title: Email with custom notifications not working
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

Inputting valid attributes into custom notifications results in email being blank.

### AWX version

22.1.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

![image](https://github.com/ansible/awx/assets/107994087/3fc0b618-d704-46cc-b6d3-02888c8c363b)

![image](https://github.com/ansible/awx/assets/107994087/a6562d06-9549-4ac6-9c92-ed67ed85283c)

### Expected results

The user who ran the job should appear with the job name.

### Actual results

Email is sent blank.

### Additional information

_No response_
user: trevorl-dtl
issue_13979: state: open
title: [troubleshooting] Add dispatcher --history option
body: ##### SUMMARY
Demo:

```
bash-5.1$ awx-manage run_dispatcher --history
2023-05-10 19:50:02,740 WARNING  [-] awx.main.dispatch checking dispatcher history for awx_1
listening on ['tower_broadcast_all', 'tower_settings_change', 'awx_1']
Dispatcher started at: 2023-05-10 19:48:03 UTC 
Recorded at: 2023-05-10 19:50:02 UTC 
awx_1[pid:2334] workers total=6 min=4 max=314 
.  worker[pid:2435] sent=5 finished=5 qsize=0 rss=129.227MB [IDLE]
     - finished cb49c32b-4eb7-43af-a1ca-ac4941e1d7bc send_subsystem_metrics(*[]) pub=19:48:23 UTC ack=0.0482s run=0.0745s
     - finished 6df6a3c1-176e-43e6-8ea5-193e66f76737 awx_periodic_scheduler(*[]) pub=19:48:33 UTC ack=0.0202s run=0.1036s
     - finished c8c02ef5-f0e2-449f-8138-cc1d62794b94 dependency_manager(*[]) pub=19:48:43 UTC ack=0.0126s run=0.0209s
     - finished 32eaa977-96f0-4dac-ab53-20133e90f630 cluster_node_heartbeat(*[]) pub=19:49:03 UTC ack=0.0195s run=0.0612s
     - finished d10d98cb-a0a6-4807-8ede-668c3c970257 send_subsystem_metrics(*[]) pub=19:49:44 UTC ack=0.0308s run=0.0090s
.  worker[pid:2436] sent=4 finished=4 qsize=0 rss=125.988MB [IDLE]
     - finished 361d75fa-ea1f-4d0b-9548-688c59a2a5f3 dependency_manager(*[]) pub=19:48:23 UTC ack=0.0496s run=0.0725s
     - finished 498a4264-5636-4e7e-85df-213a7bd9a112 task_manager(*[]) pub=19:48:43 UTC ack=0.0109s run=0.0338s
     - finished bbe32ea6-8d2b-4b1f-be4c-f6653439cf3c awx_periodic_scheduler(*[]) pub=19:49:03 UTC ack=0.0336s run=0.0573s
     - finished 3a66b327-c271-44b1-b471-101af7684742 task_manager(*[]) pub=19:49:24 UTC ack=0.0203s run=0.0481s
.  worker[pid:2437] sent=6 finished=6 qsize=0 rss=129.625MB [IDLE]
     - finished 26a98fe6-c484-4666-a802-86be4fafa23b task_manager(*[]) pub=19:48:23 UTC ack=0.0280s run=0.1184s
     - finished a51efb78-55d5-4f4a-8fd1-0d32f227a380 send_subsystem_metrics(*[]) pub=19:48:43 UTC ack=0.0121s run=0.0287s
     - finished b467991b-fdef-4068-8c3f-c45b56f11f5b awx_k8s_reaper(*[]) pub=19:49:03 UTC ack=0.0352s run=0.0096s
     - finished 04540fe7-7488-4381-9eda-cd55fbab592d task_manager(*[]) pub=19:49:03 UTC ack=0.0440s run=0.0289s
     - finished 6b8591b0-85a3-4d99-b561-6731ce8712e6 awx_periodic_scheduler(*[]) pub=19:49:34 UTC ack=0.0192s run=0.1430s
     - finished 51bf6483-6270-4847-b7ab-8f1e91818d94 task_manager(*[]) pub=19:49:44 UTC ack=0.0183s run=0.0441s
.  worker[pid:2438] sent=2 finished=2 qsize=0 rss=128.629MB [IDLE]
     - finished f0857a1d-ca11-45a1-9066-18847f34f20d awx_receptor_workunit_reaper(*[]) pub=19:49:03 UTC ack=0.0346s run=0.0302s
     - finished bf1460e4-d4f8-4258-839d-aaeb570b33c3 send_subsystem_metrics(*[]) pub=19:49:24 UTC ack=0.0352s run=0.0261s
.  worker[pid:2464] sent=3 finished=3 qsize=0 rss=126.910MB [IDLE]
     - finished 86311f22-48cf-4f2c-8c5c-abfb9e8d443c dependency_manager(*[]) pub=19:49:03 UTC ack=0.0435s run=0.0216s
     - finished 8cfa6b5e-83aa-4e0f-9760-3de25c26839a dependency_manager(*[]) pub=19:49:24 UTC ack=0.0367s run=0.0163s
     - finished 59903ac6-a778-4e87-b52c-84950f39aaad dependency_manager(*[]) pub=19:49:44 UTC ack=0.0319s run=0.0160s
.  worker[pid:2466] sent=1 finished=1 qsize=0 rss=128.559MB [IDLE]
     - finished d9950847-9030-42ac-8270-3777387fe19a send_subsystem_metrics(*[]) pub=19:49:03 UTC ack=0.0493s run=0.0265s
```

Brainstorming, as I discover that https://github.com/ansible/awx/pull/13975 kind of cripples the command from a practical standpoint - people run it expecting to see _something_. This will make it clear the ratio of periodic tasks compared to user-triggered tasks.

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API


user: AlanCoding
issue_13975: state: open
title: [troubleshooting] Make dispatcher --status accurate real-time
body: ##### SUMMARY
With this change:

```
bash-5.1$ awx-manage run_dispatcher --status
2023-05-10 13:29:07,138 WARNING  [-] awx.main.dispatch checking dispatcher status for awx_1
listening on ['tower_broadcast_all', 'tower_settings_change', 'awx_1']
Recorded at: 2023-05-10 13:29:07 UTC 
awx_1[pid:78909] workers total=4 min=4 max=314 
.  worker[pid:79000] sent=1 finished=1 qsize=0 rss=125.996MB [IDLE]
.  worker[pid:79001] sent=2 finished=2 qsize=0 rss=129.141MB [IDLE]
.  worker[pid:79002] sent=1 finished=1 qsize=0 rss=127.152MB [IDLE]
.  worker[pid:79003] sent=3 finished=3 qsize=0 rss=126.535MB [IDLE]
```

You can run this _over and over_ again and it almost never shows a scheduled task running. These tasks take on the order of `0.02` seconds, which the task manager being the longest at around `0.1` seconds on a quiet system. Given that these run on periods of 20 seconds to 60 seconds, we actually _expect_ to (almost) never see such tasks. We're looking at a 1 in 200 chance.

But right now, the dispatcher regularly shows workers with active tasks. This is because those workers are not actually active. They are only shown in-memory to be active because their finished queue has not been checked.

This _does_ make it more likely that the `--status` command will hang, and while we might want some kind of balancing fix for that, I would like to look elsewhere instead of what this is removing.

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API


user: AlanCoding
issue_13974: state: open
title: Update collection docs
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Add the `state:exists` to the collection docs. [here](https://docs.ansible.com/ansible/latest/collections/community/general/proxmox_kvm_module.html#parameter-state)
PR that added the new state: https://github.com/ansible/awx/pull/13890

Version: 4.5

### Select the relevant components

- [ ] UI
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

.

### Current results

.

### Sugested feature result

.

### Additional information

_No response_
user: jay-steurer
issue_13973: state: open
title: workflow_job_template import fails when schema inventory is null
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.
- [X] I am **NOT** reporting a (potential) security vulnerability. (These should be emailed to `security@ansible.com` instead.)

### Bug Summary

I am using the workflow_job_template module to import several (often older) exported workflow json files, which often have the line 'inventory: null' listed under individual job template nodes. In these cases, due to changes in #13595, the module throws python errors due to the 'inventory' objects not being iterable. 

Because we are using the workflow json files directly, it would be preferable to have this module ignore null values for node inventories, like it did previously.

As a note, there might be a similar issue for the 'execution_environment' field, but we haven't confirmed.

### AWX version

21.14.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

2.13.6

### Operating system

RHEL 8.6 (Automation Controller)

### Web browser

Chrome

### Steps to reproduce

Using an instance of Ansible Automation Controller, create a playbook using the 'workflow_job_template' module. It should draw field information (specifically the 'inventory' field) from a json file, which provides '"inventory": null' for the inventory value. Preferably this should use an existing import playbook, and simply use an updated workflow json source file.

### Expected results

Workflow is able to import successfully.

### Actual results

When executing the playbook, it should fail at the python interpreter. The thrown error indicates that an object of type 'NoneType' is not iterable.

### Additional information

_No response_
user: amattson98
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_13970: state: open
title: vault passwords are exposed to all commands run by the playbook
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

We're looking again at jinja-controlled vault decryption (instead of relying on the yaml parser invoking decrypt):
- ansible/ansible#79298

We noticed that even though the `unvault` filter cannot use them, vault passwords are in fact exposed to processes spawned by ansible, i.e. `command` and `shell` modules and presumably every command called by any other module.

I understand this is a different attack surface than exposing vault pw as ansible variable to python plugins, I'm still wondering if that's intentional and consistent.

### AWX version

22.1.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Put a vaulted file (`echo "foo: bar">vaulted.yml && ansible-vault encrypt vaulted.yml`) and the following playbook in a project:

~~~yaml
# playbook
---
- hosts: localhost
  gather_facts: false
  tasks:
    - command:
        cmd: ansible-vault view vaulted.yml
~~~

Run without vault credential:
~~~
No config file found; using defaults
PLAY [localhost] ***************************************************************
TASK [command] *****************************************************************
Vault password: 
fatal: [localhost]: FAILED! => {"changed": true, "cmd": ["ansible-vault", "view", "vaulted.yml"], "delta": "0:00:00.549177", "end": "2023-05-09 12:40:58.076811", "msg": "non-zero return code", "rc": 1, "start": "2023-05-09 12:40:57.527634", "stderr": "\u001b[1;35m[WARNING]: Error in vault password prompt (default): Invalid vault password was\u001b[0m\n\u001b[1;35mprovided\u001b[0m\n\u001b[0;31mERROR! Invalid vault password was provided\u001b[0m", "stderr_lines": ["\u001b[1;35m[WARNING]: Error in vault password prompt (default): Invalid vault password was\u001b[0m", "\u001b[1;35mprovided\u001b[0m", "\u001b[0;31mERROR! Invalid vault password was provided\u001b[0m"], "stdout": "", "stdout_lines": []}
PLAY RECAP *********************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   
~~~

Run with vault credential:

### Expected results

the same as without credential

### Actual results

~~~
No config file found; using defaults
Vault password: 
PLAY [localhost] ***************************************************************
TASK [command] *****************************************************************
Vault password: 
changed: [localhost] => {"changed": true, "cmd": ["ansible-vault", "view", "vaulted.yml"], "delta": "0:00:00.581329", "end": "2023-05-09 12:41:45.513627", "msg": "", "rc": 0, "start": "2023-05-09 12:41:44.932298", "stderr": "", "stderr_lines": [], "stdout": "foo: bar", "stdout_lines": ["foo: bar"]}
PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
~~~

### Additional information

_No response_
user: azrdev
issue_13969: state: open
title: Tech preview | Filter does not work properly when using more than 1 filtering entry
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

In UI technical preview when applying filter with more than 1 filtering entry results are not properly presenting output data (not applying logical AND)

### AWX version

22.2.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Edge

### Steps to reproduce

- select ui technical preview
- go to any sections that contains filtering option
- use at least 2 filters

output is not containing proper results based on applied filter


### Expected results

results should represent logical AND of all filtering options

### Actual results

results should represent logical AND of all filtering options, but actually only only first filter is being applied

### Additional information

_No response_
user: f22l2
issue_13968: state: open
title: /etc/profile.d/lang.sh: line 19: warning: setlocale: LC_CTYPE: cannot change locale (C.UTF-8)
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Trying to execute simple raw module against CentOS 7.x hosts, there is always additional stdout_lines added which breaks my automation.

        "stdout": "/etc/profile.d/lang.sh: line 19: warning: setlocale: LC_CTYPE: cannot change locale (C.UTF-8)\r\n\r\nmlocate-0.26-8.el7.x86_64\r\n",
        "stdout_lines": [
            "/etc/profile.d/lang.sh: line 19: warning: setlocale: LC_CTYPE: cannot change locale (C.UTF-8)",
            "",
            "mlocate-0.26-8.el7.x86_64"

### AWX version

21.9.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

ansible [core 2.14.4]

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Test Playbook

---
- name: Test for RPM
  hosts: '{{ host }}'

  tasks:
  - name: Check if rpm is installed
    raw: "rpm -qa | grep -i mlocate"
    register: rpm_out
  - debug: var=rpm_out

### Expected results

        "stdout": "\n\r\nmlocate-0.26-8.el7.x86_64\r\n",
        "stdout_lines": [
            "mlocate-0.26-8.el7.x86_64"

### Actual results

        "stdout": "/etc/profile.d/lang.sh: line 19: warning: setlocale: LC_CTYPE: cannot change locale (C.UTF-8)\r\n\r\nmlocate-0.26-8.el7.x86_64\r\n",
        "stdout_lines": [
            "/etc/profile.d/lang.sh: line 19: warning: setlocale: LC_CTYPE: cannot change locale (C.UTF-8)",
            "",
            "mlocate-0.26-8.el7.x86_64"

### Additional information

Looks similar to this issue : https://github.com/ansible/awx/issues/13100
However setlocale warning is not addressed there. 
Is there any way we can suppress the SSH transfer the locale settings ?
user: nameya
issue_13967: state: open
title: awx.awx.import module issue importing inventory_sources
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

I am using "awx.awx.import" like:

```
- name: "AWX | create inventory sources"
  awx.awx.import:
    assets: "{{ awx_inventory_sources.assets | to_json }}"
  environment:
    CONTROLLER_VERIFY_SSL: "{{ awx_cli_verify_ssl }}"
    CONTROLLER_HOST: "{{ awx_hostname }}"
    CONTROLLER_USERNAME: "{{ awx_username }}"
    CONTROLLER_PASSWORD: "{{ awx_password }}"
```
To import the following yaml:
```
assets:
  inventory_sources:
  - credential: null
    description: ''
    enabled_value: ''
    enabled_var: ''
    execution_environment:
      name: Custom AWX EE
      type: execution_environment
    host_filter: ''
    inventory:
      name: 'inv: ansible-staging'
      organization:
        name: Default
        type: organization
      type: inventory
    limit: ''
    name: "source inv: ansible-staging"
    natural_key:
      inventory:
        name: 'inv: ansible-staging'
        organization:
          name: Default
          type: organization
        type: inventory
      name: "source inv: ansible-staging"
      type: inventory_source
    overwrite: true
    overwrite_vars: true
    related:
      notification_templates_error: []
      notification_templates_started: []
      notification_templates_success: []
      schedules: []
    scm_branch: ''
    source: scm
    source_path: hosts.yml
    source_project:
      name: "git: inventory-staging"
      organization:
        name: Default
        type: organization
      type: project
    source_vars: '---'
    timeout: 0
    update_cache_timeout: 0
    update_on_launch: true
    verbosity: 1
```
The code workd if there is already an "Source" definition on the inventory, if the inventory does not contain an "Source" definition yet the following error occurs:

```
  msg: |-
    /api/v2/inventory_sources/ "source inv: ansible-staging": Bad Request (400) received - {'inventory': ['This field cannot be blank.']}.
```



### AWX version

22.1.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

ansible [core 2.14.5]

### Operating system

Debian 11.4

### Web browser

_No response_

### Steps to reproduce

Create a Inventory without a Source definition and try to import a inventory_source definition using "awx.awx.import", this should end in an error, after that manually create a Source definition for the inventory and try to import the same inventory_source definition , this time it should work.

The Object can be exported with "awx.awx.export".


### Expected results

The inventory_source definition should be created and synchronized.

### Actual results

Error is :

  msg: |-
    /api/v2/inventory_sources/ "source inv: ansible-staging": Bad Request (400) received - {'inventory': ['This field cannot be blank.']}.

### Additional information

_No response_
user: pombaer
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_13951: state: open
title: Launch scripts don't work as non-root
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

In each of the launch scripts ([launch_awx_rsyslog.sh](https://github.com/ansible/awx/blob/devel/tools/ansible/roles/dockerfile/files/launch_awx_rsyslog.sh), [launch_awx_task.sh](https://github.com/ansible/awx/blob/devel/tools/ansible/roles/dockerfile/files/launch_awx_task.sh), [launch_awx_web.sh](https://github.com/ansible/awx/blob/devel/tools/ansible/roles/dockerfile/files/launch_awx_web.sh)), there's this block:

```bash
if [ `id -u` -ge 500 ]; then
    echo "awx:x:`id -u`:`id -g`:,,,:/var/lib/awx:/bin/bash" >> /tmp/passwd
    cat /tmp/passwd > /etc/passwd
    rm /tmp/passwd
fi
```

But the logic doesn't make sense to me. If our UID is greater than 500 then we don't have root privileges so we can't edit `/etc/passwd`. For us this presents as `/usr/bin/launch_awx_task.sh: line 4: /etc/passwd: Permission denied` in the container logs when running as UID = 1000. @rooftopcellist  Could you explain what this block is there to accomplish? It looks like it was added by you in #9289.

### AWX version

22.0.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Deploy AWX with a security context that defines `runAsUser` and `runAsGroup`. Here's a script that deploys awx fresh and shows the issue.

```
#!/usr/bin/env bash

cat << EOF > kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - github.com/ansible/awx-operator/config/default?ref=2.0.1

images:
  - name: quay.io/ansible/awx-operator
    newTag: 2.0.1

namespace: awx
EOF

kubectl apply -k .

cat << EOF > awx.yaml
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx
  namespace: awx
spec:
  image_pull_policy: Always
  service_type: nodeport
  security_context_settings:
    runAsGroup: 1000
    runAsUser: 1000
EOF

kubectl apply -f awx.yaml
```

After the awx-task pod comes up you can see the error in the awx-task, awx-rsyslog and awx-ee containers
```
> k logs -n awx awx-task-5c6d49b7fb-lglgx -c awx-task
/usr/bin/launch_awx_rsyslog.sh: line 4: /etc/passwd: Permission denied
[wait-for-migrations] Waiting for database migrations...
[wait-for-migrations] Attempt 1 of 30
[wait-for-migrations] Waiting 0.5 seconds before next attempt
[wait-for-migrations] Attempt 2 of 30
...
```

### Expected results

AWX runs properly as a non-root user

### Actual results

3 (awx-ee, awx-task, awx-rsyslog) of the 4 containers in the pod fail to start with similar errors `/usr/bin/launch_awx_task.sh: line 4: /etc/passwd: Permission denied`. The redis container starts up normally.

### Additional information

_No response_
user: ToxicGLaDOS
issue_13950: state: open
title: Get rid of custom `OrderedManyToManyDescriptor` and replace with library
body: ##### SUMMARY
Our custom field `OrderedManyToManyDescriptor` did several questionable things. Instead of attempting to fix this, this deletes the field and replaces it with https://github.com/jazzband/django-sortedm2m

I've been making a few PRs to that library, touching up the status of its checks, and feel confident enough in it to use it.

The migration approach is kind of wacky. The ideal would be a simple use of [AlterSortedManyToManyField](https://github.com/jazzband/django-sortedm2m/blob/ddf321fc9736b9a9477d496c60250270111cf2ce/sortedm2m_tests/test_migrations.py#L46-L77), but no existing example shows migrating from a m2m field to a sorted-m2m field where the former had a `through` model, much less one that contains the sort position field. So that would take us well outside of charted territory. The approach here is well-understood and reliable, even if a little clunky - this adjusts the current models to match what the table/column names of the new (automatic) through model will be. Then it does a state-only operation to remove the old through model & field, and add the new field. The new model never added to the db schema, but it will instead, just pick up and start using the existing schema. This should be performant and avoid data migrations.

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API


user: AlanCoding
issue_13949: state: open
title: Add API Authorization through External (AzureAD) OAuth Token
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Current approach of Authorization of API calls supports users to generate local AWX/Tower tokens within the tool.

Application user should be able to generate authorization token through Azure AD and use that to authenticate their API calls instead of generating token locally and storing it for later use within AWX/Tower. This is an important feature from Security perspective where users should avoid storing or using auth tokens stored in the tool to avoid damage done in case of unauthorized access to the stored token.

### Select the relevant components

- [x] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Steps to reproduce

Currently this option is not available in the tool.

### Current results

Users can execute API calls using locally created tokens or using basic auth.

### Sugested feature result

Users should have a way to authorize themselves and generate auth token in Azure AD; later use that token to authorize and execute API calls instead of using locally created tokens or basic auth.

### Additional information

_No response_
user: anksvault
issue_13948: state: open
title: Normal user Can't choose project for adding inventory source to inventory
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Normal user with inventory admin/use and project admin/use permissions Can't choose project for inventory source 
![image](https://user-images.githubusercontent.com/1433297/236201339-63dd06b2-45f8-41f1-aae4-c8fc6fd93cff.png)
![image](https://user-images.githubusercontent.com/1433297/236201362-649dfcf9-1ffa-473b-9d01-b23e25e7bf09.png)



### AWX version

22.1.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Go to inventories, choose or create inventory
Next going to Sources - Add 
Source - Source from a Project
Project - *field blocked*

### Expected results

Pick a project with inventory file 

### Actual results

Project Field is blocked

### Additional information

_No response_
user: lutskevich
issue_13943: state: open
title: Failed to connect to the host via ssh sign_and_send_pubkey: no mutual signature supported
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

I have been using the same key pair for nearly 4 years now. The key pair worked fine all this time and something changed all of a sudden and I am getting the below error message for few servers I try to connect via ansible awx to perform tasks.

"Failed to connect to the host via ssh: Warning: Permanently added 'x.x.x.x' (ED25519) to the list of known hosts.\r\nsign_and_send_pubkey: no mutual signature supported\r\n**myuser**@x.x.x.x: Permission denied (publickey).",

I am using the same key pair in one of my jumpbox to connect servers and tried creating a new machine credential in AWX by copying the openssh format private key from /home/user/.ssh/id_rsa but still it gave same result. From the jumpbox, the private key authentication is working fine but the same key pair is not working from Ansible AWX. 

**Info on target machines:**
Most of them are debian jessie machines and I was able to connect to those servers a couple weeks ago. I am able to authenticate with Ubuntu 18.04.4 which is very odd behavior all of a sudden.

### AWX version

21.3.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

Core 2.14.4

### Operating system

Host Machine is Ubuntu

### Web browser

Chrome

### Steps to reproduce

Trying to do an adhoc ping or job template that performs any tasks on the target from the inventory

### Expected results

It should perform the task as per the job template I defined

### Actual results

"Failed to connect to the host via ssh: Warning: Permanently added 'x.x.x.x' (ED25519) to the list of known hosts.\r\nsign_and_send_pubkey: no mutual signature supported\r\nmyuser@x.x.x.x: Permission denied (publickey).",

### Additional information

_No response_
user: leosimony
issue_13942: state: open
title: Automatic Bundle Installation
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

For now when I add an instance, I see install bundle is available for download. I download the same and install manually on the target instance. Why is this not automated yet ?

I would suggest, AWX connects to the instance automatically and tries to install the bundle (receptor, certificates, etc... on its own). I am surprised to know why this option is not available yet ?

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

1. Add an instance to AWX, this is not automating the bundle installation

### Current results

1. have to do the bundle installation manually

### Sugested feature result

AWX should take of the required packages installation on the target instance by itself

### Additional information

_No response_
user: Iyappanj
issue_13929: state: open
title: Allow API Endpoints with & without trailing slashes `/`
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Allow endpoints to accept with and without the trailing slash `/`

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

There is always a redirect when missing the trailing slash which is less of an issue if the api client can handle `follow-redirects`.

```
GET foo.dev/api/v2/jobs #=> 301 redirect to GET foo.dev/api/v2/jobs/
```

When following redirects with the API client all `POST` request don't respond with the expected `201 created` but redirect to a GET request of the same url which results in a `200 ok`

```
POST foo.dev/api/v2/jobs/123/launch => 301 redirect to GET foo.dev/api/v2/jobs/123/launch/
```

### Sugested feature result

This seems to be error prone and already had a couple of issues popped up as posted below. Plus I spent 2 days debugging this until I realized the slash `/`. Bit of reading into the API defaults of REST it seems that there is no definition of rule for it.

My suggestion would be to accept both approaches which also respects current implementations that utilize the api. Make the trailing slash optional:

```
r'^(?P<pk>[0-9]+)  /?  $'
```

I would be happy to contribute this PR and tbh in my 10ish years of working with APIs that was a first for me :)

### Additional information

Couple of issues which popped up and got no real feature follow-up.

https://github.com/ansible/awx/issues/8233
https://github.com/ansible/awx/issues/10091
https://github.com/ansible/awx/issues/2215
user: dennym
issue_13927: state: open
title: Add an enforced state to the collection modules
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Right now when using the modules with the idea of config as code, If the user does not provide the field, it is skipped, and not acted on.

The proposal is to allow a user to set the modules to enforce the default values. The goal of this is to prevent any drift from changes in the GUI, or if someone wants to reset an option back to default. The end goal to allow for complete configuration as code for the Controller/AWX.

In addition some fields if provided as blank or empty lists they come back as an error as it searches for all credentials or execution environments, or gets skipped due to some logic.

An example of this is
awx.awx.schedules
When empty returns multiple objects: credentials , labels, instance_groups
Not allowed to be empty, but not required: unified_job_template
Setting "" does not enforce empty: description, job_slice_count, diff_mode, job_type, verbosity

awx.awx.organizations
Not allowed to be empty, but not required: custom_virtualenv, default_environment
Setting "" does not enforce empty: max_hosts

awx.awx.exeuction_environments
Setting "" does not enforce empty: description, credential

Sometimes this can be worked around using something like the following code to turn it on/off:
galaxy_credentials: "{{ (__controller_organizations_item.galaxy_credentials | default(( [] if controller_configuration_organizations_enforce_defaults else omit), true)) }}"

However a better solution is to enforce it at the module level.

I've made code changes and tested the organization and schedule modules of how this would work. This is based on a branch of the exists state, so its hard to do an actual fork compare.
schedule
https://editor.mergely.com/8rAVJRNB
organization
https://editor.mergely.com/z2LLlBeO





### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

    - name: Create organization
      awx.awx.schedule:
        name: sched1
        state: present
        unified_job_template: Demo Job Template
        rrule: "{{ query('awx.awx.schedule_rrule', 'none', start_date='1979-09-13 03:45:07') }}"

    - name: Create organization
      awx.awx.organization:
        name: Default
        state: present



### Current results

Things don't change in the gui. 

### Sugested feature result

Anything not submitted to the module when state: enforced is active will be reset to default.

### Additional information

_No response_
user: sean-m-sullivan
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_13920: state: open
title: Update docs for new Credential type AWS Secrets manager
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

I am creating this issue in order to update our AAP docs on credential types.  

Feature request: https://github.com/ansible/awx/issues/10806
PR: https://github.com/ansible/awx/pull/13778


### Select the relevant components

- [ ] UI
- [X] API
- [x] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

.

### Current results

New credential type AWS Secrets manager

### Sugested feature result

.

### Additional information

_No response_
user: jay-steurer
issue_13919: state: open
title: [hop node] need way to identify if receptor config is out of date
body: Adding a new hop node to the mesh that _receives_ incoming connections can make other instances have stale receptor configs.

For example going from

Ex1 <--- control

to

Ex1  ---> hop <--- control

Ex1 needs a new "tcp-peer" added to it's configuration. The user needs to know that re-running the install bundle for ex1 is required.
user: fosterseth
issue_13902: state: open
title: WIP Add native python code to gen version
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
Add native python code to gen version

Design Decisions:
Originally, I was doing this in shell the way that the git project itself does it, but I believe we should use the first class language of the project and the language developers are most familiar with even for build, test and infra.

In hacking legacy software or writing tests, we often want to find a seam--the seam is the `scm_version.py`, and we can preserve existing behavior perfectly by catching `CalledProcessError` if/when we can't run pip and then use our own code to generate the version string.

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Dev test and build

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - Other

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
0.1.dev1
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
Without change and without being in the venv, without setuptools-scm available:
```
Your branch is up to date with 'origin/devel'.
jwatt@wisdom-like-silence:~/git/github.com/jjwatt/awx/ > make VERSION
Unable to import setuptools-scm, attempting to install now...
  WARNING: The scripts pip3 and pip3.11 are installed in '/home/jwatt/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Traceback (most recent call last):
  File "/home/jwatt/git/github.com/jjwatt/awx/tools/scripts/scm_version.py", line 7, in <module>
    from setuptools_scm import get_version
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named 'setuptools_scm'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/jwatt/git/github.com/jjwatt/awx/tools/scripts/scm_version.py", line 15, in <module>
    from setuptools_scm import get_version
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named 'setuptools_scm'
awx:
```
After change:
```
jwatt@wisdom-like-silence:~/git/github.com/jjwatt/awx/ > git checkout jjwatt-version
Switched to branch 'jjwatt-version'
Your branch is up to date with 'origin/jjwatt-version'.
jwatt@wisdom-like-silence:~/git/github.com/jjwatt/awx/ > make VERSION
awx: 22.1.1.dev37+gb140bb9e9e
```
user: jjwatt
issue_13900: state: open
title: RFE - Adding selinux level to default options
body: ##### SUMMARY
Adding the selinux level s0 to avoid issues due to MLS
MLS results in failures for multiple executions for the same playbook or workflows handling the same files created by a previous playbook

Changes: Enforcing s0 level as a default podman option in defaults.py

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - Other

##### ADDITIONAL INFORMATION
[Multi Level Security](https://www.redhat.com/en/blog/how-selinux-separates-containers-using-multi-level-security)

user: lucas-benedito
issue_13897: state: open
title: GitHub Actions CI awx-operator test/playbook gets wrong version
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

The GH Actions pre-submit CI test for awx-operator gets the wrong version of awx because it tries to use `setuptools_scm` on a shallow git clone:

```
TASK [Get version from SCM if not explicitly provided] *************************
changed: [localhost] => {"changed": true, "cmd": ["make", "version-for-buildyml"], "delta": "0:00:04.363824", "end": "2023-04-21 13:12:43.939300", "failed_when_result": false, "msg": "", "rc": 0, "start": "2023-04-21 13:12:39.575476", "stderr": "Unable to import setuptools-scm, attempting to install now...\n/opt/hostedtoolcache/Python/3.11.3/x64/lib/python3.11/site-packages/setuptools_scm/git.py:135: UserWarning: \"/home/runner/work/awx/awx/awx\" is shallow and may cause errors\n  warnings.warn(f'\"{wd.path}\" is shallow and may cause errors')", "stderr_lines": ["Unable to import setuptools-scm, attempting to install now...", "/opt/hostedtoolcache/Python/3.11.3/x64/lib/python3.11/site-packages/setuptools_scm/git.py:135: UserWarning: \"/home/runner/work/awx/awx/awx\" is shallow and may cause errors", "  warnings.warn(f'\"{wd.path}\" is shallow and may cause errors')"], "stdout": "0.1.dev1", "stdout_lines": ["0.1.dev1"]}
```


### AWX version

0.1.dev1

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.13.3

### Operating system

RHEL8

### Web browser

_No response_

### Steps to reproduce

1. Push a fork/branch
2. Open a PR against devel
3. Look at CI logs for awx-operator
4. See:
```
TASK [Get version from SCM if not explicitly provided] *************************
changed: [localhost] => {"changed": true, "cmd": ["make", "version-for-buildyml"], "delta": "0:00:04.363824", "end": "2023-04-21 13:12:43.939300", "failed_when_result": false, "msg": "", "rc": 0, "start": "2023-04-21 13:12:39.575476", "stderr": "Unable to import setuptools-scm, attempting to install now...\n/opt/hostedtoolcache/Python/3.11.3/x64/lib/python3.11/site-packages/setuptools_scm/git.py:135: UserWarning: \"/home/runner/work/awx/awx/awx\" is shallow and may cause errors\n  warnings.warn(f'\"{wd.path}\" is shallow and may cause errors')", "stderr_lines": ["Unable to import setuptools-scm, attempting to install now...", "/opt/hostedtoolcache/Python/3.11.3/x64/lib/python3.11/site-packages/setuptools_scm/git.py:135: UserWarning: \"/home/runner/work/awx/awx/awx\" is shallow and may cause errors", "  warnings.warn(f'\"{wd.path}\" is shallow and may cause errors')"], "stdout": "0.1.dev1", "stdout_lines": ["0.1.dev1"]}
```

### Expected results

We expect to see:
22.1.1.dev42

### Actual results

We see:
0.1.dev1

### Additional information

Not all tags are annotated tags, and this CI job does not pull tags from remotes. Could probably be solved by a

`git fetch --tags --all`

somewhere in the CI setup before running that pb.
user: jjwatt
issue_13891: state: open
title: Allowing job template provisioning callback customization
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Hello,

It seems we can only supply `job_tags`, `skip_tags` on launch API `/api/v2/job_templates/N/launch/`
We can't do that on callback API `/api/v2/job_templates/N/callback/`, only `host_config_key` and `extra_vars` are available.
This is necessary for provisioning a new host where we want to run only a few tasks with specific `tags`

### Select the relevant components

- [X] UI
- [X] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

```
curl -k -f -i -H 'Content-Type:application/json' -POST -d '{"host_config_key": "host_string", "job_tags": "provisioning", "skip_tags": "none" }' "https://awx/api/v2/job_templates/1/callback/"`
```

### Current results

we got `curl: (22) The requested URL returned error: 400`

### Sugested feature result

API should allow `job_tags` and `skip_tags`

### Additional information

_No response_
user: hungpr0
issue_13885: state: open
title: Project Remote Archive Azure Blob Support
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

It seems when using blob storage in Azure we need a Shared Access Token which gets appended to the URL, however, adding this seems to cause issues with the AWX Remote Archive URL format and wraps the url between double and single quotes instead of job double quotes.


### AWX version

21.14.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

Add Azure Blob Storage URL to Project Remote Archive with a Shared Access Token

### Expected results

Pull the .tar.gz file from the storage.

### Actual results

Removed most of the URL since it is secrets. 

`TASK [Get archive from url] ****************************************************
fatal: [localhost]: FAILED! => {"changed": false, "dest": "/var/lib/awx/projects/_9__xxx_tar/.archive/", "elapsed": 0, "gid": 0, "group": "root", "mode": "0755", "msg": "Request failed: <urlopen error unknown url type: 'https>", "owner": "1000", "size": 4096, "state": "directory", "uid": 1000, "url": "'https://STORAGE_ACCOUNT.file.core.windows.net/CONTAINER/GZ_FILEz?sv=2021-12-02&.....'"}`

As you can see the url is wrapped between double and then single quotes.


### Additional information

Here is a link with a screenshot that has the full format of the URL for Azure Blob Storage with the Token. https://adamtheautomator.com/azure-sas-token/
user: chinochao
issue_13884: state: open
title: Show related dependent_jobs list in the API
body: ##### SUMMARY
This is populated by the `DependencyManager` but users cannot see it. I feel that the UI should surface this in some way.

For now, this is just a discussion piece.

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - API


user: AlanCoding
issue_13880: state: open
title: fix: traduction french
body: ##### SUMMARY
Fix translate french


##### ISSUE TYPE
- Translate

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - UI

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```

```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: jbarbey
labels: community pull request: Applied to community based pull requests for filtering
issue_13878: state: open
title: [ui-next] Health Check Button Not Functioning Properly
body: When a user enables the tech preview feature, and navigates to Instances, the heart shaped button located inside the line item of an instance does not work properly. A user can run a health check by checking the check box and clicking the Run Health Check button.
If the user clicks the heart shaped button, they see the following pop-up:
![image](https://user-images.githubusercontent.com/63685497/232873149-1948b994-b00a-4848-9ae7-da2eddbc5e1d.png)

To recreate:

On the Dashboard view, click the link to enable the tech preview.
On the left hand toolbar, click the Instances link.
In the line item showing, find this button and click it:
![image](https://user-images.githubusercontent.com/63685497/232873544-fdbe294e-f759-4c20-8a45-e40be7af877e.png)

You will notice that the health check doesn't run.



user: akus062381
issue_13868: state: open
title: Expanded awx cli export feature request
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

According to `awx export  --help`
The export supports the following options:
   - applications
   - credentials
   - credential_types
   - execution_environments
   - inventory
   - inventory_sources
   - job_templates
   - notification_templates
   - organizations
   - projects
   - schedules
   - teams
   - users
   - workflow_job_templates
 
 I propose expanding this list to:
   - credential_input_source
   - group
   - host
   - instance_group
   - instance
   - label
   - role
   - settings

In addition improved the existing output but adding the following

Project export:
 - related signature_validation_credential is exported as a credential # not an object.

Workflow export related items:
 - related instanced groups for workflow nodes prompt on launch for job templates
 - related labels for workflow nodes prompt on launch for job templates

Improve extra vars output from the following
 - inventory_source
 - inventory
 - job_template
 - workflow_job_templates
 
 Currently it outputs as:
 yaml with ---
 ```
 "        variables: '---

            test: 123

            stuff: foo'"
```
or
yaml without ---
```
"        variables: 'test: 123

            stuff: foo'"
```
or
json
```
"""{\n  \""test\"": 123,\n  \""stuff\"":
            \""foo\"",\n  \""asdf\"": \""asdf\""\n}"""
```

Right now workflow job templates export extra data for workflow nodes as
```
extra_data:
    ee_builder_dir_clean: true
    ee_registry_dest: hub.nas
```

With more people adopting configuration as code, I hope this makes things easier on them. 

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Steps to reproduce

awx export --conf.host https://controller.nas --conf.username admin --conf.password secret123 --conf.insecure --job_templates

### Current results

See above

### Sugested feature result

See above

### Additional information

_No response_
user: sean-m-sullivan
issue_13867: state: open
title: OPTIONS-based CLI associations
body: ##### SUMMARY
This is a fairly raw Proof of Concept, but I can demo the basic elements of functionality here.

What issue would this resolve? Several. I had this filter I've been using to demonstrate the problem.

https://github.com/ansible/awx/issues?q=is%3Aissue+is%3Aopen+label%3Acomponent%3Acli+associate

There are 3 issues hit by that filter that say "Unable to ____" in some sense. In response to those issues, this provides the association command as follows:

```
$ awx group associate
usage: awx groups associate [-h] (--children  | --hosts ) id

positional arguments:
  id           Primary object for the association, obtained from groups endpoint

options:
  -h, --help   show this help message and exit
  --children   The ID (or name) of the children to associate
  --hosts      The ID (or name) of the hosts to associate
```

Now you can not only associate hosts to groups, but _fully_ build inventories

```
$ awx job_template associate
usage: awx job_templates associate [-h]
                                   (--credentials  | --notification_templates_started  | --notification_templates_error  | --notification_templates_success  | --instance_groups  | --labels )
                                   id

positional arguments:
  id                    Primary object for the association, obtained from job_templates endpoint

options:
  -h, --help            show this help message and exit
  --credentials         The ID (or name) of the credentials to associate
  --notification_templates_started 
                        The ID (or name) of the notification_templates_started to associate
  --notification_templates_error 
                        The ID (or name) of the notification_templates_error to associate
  --notification_templates_success 
                        The ID (or name) of the notification_templates_success to associate
  --instance_groups     The ID (or name) of the instance_groups to associate
  --labels              The ID (or name) of the labels to associate
```

Not only can you associate _labels_ as the issue asked for, but you can associate other things you haven't thought of yet.

```
$ awx organization associate
usage: awx organizations associate [-h]
                                   (--users  | --admins  | --execution_environments  | --teams  | --notification_templates  | --notification_templates_started  | --notification_templates_error  | --notification_templates_success  | --notification_templates_approvals  | --instance_groups  | --galaxy_credentials )
                                   id

positional arguments:
  id                    Primary object for the association, obtained from organizations endpoint

options:
  -h, --help            show this help message and exit
  --users               The ID (or name) of the users to associate
  --admins              The ID (or name) of the admins to associate
  --execution_environments 
                        The ID (or name) of the execution_environments to associate
  --teams               The ID (or name) of the teams to associate
  --notification_templates 
                        The ID (or name) of the notification_templates to associate
  --notification_templates_started 
                        The ID (or name) of the notification_templates_started to associate
  --notification_templates_error 
                        The ID (or name) of the notification_templates_error to associate
  --notification_templates_success 
                        The ID (or name) of the notification_templates_success to associate
  --notification_templates_approvals 
                        The ID (or name) of the notification_templates_approvals to associate
  --instance_groups     The ID (or name) of the instance_groups to associate
  --galaxy_credentials 
                        The ID (or name) of the galaxy_credentials to associate
```

Holy cow, I am not going to list all of those association types.

Now, onto the real motivation of this issue. If we have an inventory...

```
$ awx inventory associate
usage: awx inventory associate [-h]
                               (--hosts  | --groups  | --root_groups  | --input_inventories  | --instance_groups  | --labels )
                               id

positional arguments:
  id                    Primary object for the association, obtained from inventory endpoint

options:
  -h, --help            show this help message and exit
  --hosts               The ID (or name) of the hosts to associate
  --groups              The ID (or name) of the groups to associate
  --root_groups         The ID (or name) of the root_groups to associate
  --input_inventories   The ID (or name) of the input_inventories to associate
  --instance_groups     The ID (or name) of the instance_groups to associate
  --labels              The ID (or name) of the labels to associate
```

We will not automatically pick up functionality from new features, not just `--input_inventories`, but yes, including that from constructed inventory.

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - API
 - CLI



##### ADDITIONAL INFORMATION
Let's go back to the "why" of this. Out of those things I mentioned, in `devel`

 - :x: no inventory group associations of _any_ kind
 - :x: no ability to associate instance groups anywhere, because _no one ever added it_
 - :x: no job template label associations
 - :x: like groups, associating to inventory model isn't a thing

This gets us to feature parity (or it would, provided someone finishes it, it is at demo phase), and stop pasting API schema in code, which was... at the very beginning... the core design principal of this CLI.
user: AlanCoding
issue_13864: state: open
title: awxkit: creating a credential requires user, team or org
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Per the docs: https://docs.ansible.com/ansible-tower/latest/html/towercli/reference.html#awx-credentials-create

`user`, `team`, and `organization` are not listed as required. This matches the AWX UI behavior-- a resource without user/team/organization is available globally.

However running `credentials create` without these specified throws an error:

```
awx credentials create --name 'Vault SSH Sign DE' --credential_type 24
{"detail": ["Missing 'user', 'team', or 'organization'."]}
```

### AWX version

21.9.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. Use the CLI to create a credential without specifying user, team or organization.

### Expected results

A globally-available credential is created.

### Actual results

An error is returned requiring a user, team, or organization.

### Additional information

_No response_
user: onefourfive
issue_13863: state: open
title: No facts cached when job slicing is greater than 1
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

While running a job template that has slicing set to 5 and enables fact storage against an inventory that has a total of 10 hosts, the job runs successfully, however, facts are not cached.  If I then set slicing back to 1 and re-run the same job, facts are then properly cached.

### AWX version

22.0.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.14.4

### Operating system

Tested with alpine and stream-8 against Windows hosts

### Web browser

_No response_

### Steps to reproduce

- Create a simple playbook that has the following content:
   `---
- name: 'Re: Your Bases'
  hosts: all
  gather_facts: true
  tasks:
    - name: 'All your base...'
      ansible.builtin.debug:
        msg: 'Are belong to us!'`
- Import said playbook as project in AWX
- Create an inventory with 10 windows hosts
  - Set the necessary inventory variables to allow WinRM connectivity
    - ansible_connection: winrm
    - ansible_winrm_server_cert_validation: ignore
    - ansible_port: 5985
    - ansible_winrm_transport: ntlm
- Create machine credential that has admin perms on the windows hosts
- Create job template with the following settings:
  - fact_storage: enabled
  - job slicing: 5
  - Point to inventory previously created
  - Use the credential previously created
- Run job template

### Expected results

Standard facts from the playbook should be cached at the host level.

### Actual results

Facts were not cached, leaving the default {} in the host facts

### Additional information

This is based on conversation found here: https://groups.google.com/g/awx-project/c/Cd_SgiYEfVk.  

Also, I'd just like to say thank you for all the hard work you folks have put into this.  It's very much appreciated. :)
user: krutaw
issue_13859: state: open
title: Source control authentication with GitHub App instead of PAT
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Currently the authentication against a GitHub repository is done through a personal access token (PAT). This token is always associated to a specific user account which is not that great in an enterpise environment.

For server to server communication GitHub recommends GItHub App which uses token exchange for short lived tokens. It would be great to have this as an alternative to PAT.

https://docs.github.com/en/get-started/quickstart/github-glossary#server-to-server-request
https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app-installation

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Add a GitHub repro credential. There's only the option for a PAT.

### Current results

a PAT is used which is associated to a specific user

### Sugested feature result

Decouple GitHub access from a user account. This allows also to change permission on GitHub to different repos without generating a new PAT for every change.

### Additional information

_No response_
user: OneCyrus
issue_13848: state: open
title: Recovery of running job after its control process is lost
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Scenario:

 - A job that sleeps for several minutes is launched on an execution node, so `controller_node` != `execution_node`
 - The job successfully starts and starts producing events
 - Mid-run, services are restarted on the job's controller node

Right now, this job will be reaped. We _hate_ it when jobs get reaped.

Details of proposed solution, subject to change:

 - replace the `reap` method called from `cluster_node_heatbeat` with a different reconciliation method called from `awx_receptor_workunit_reaper`. This method has access to `receptorctl status`.
   - in addition, this method will be given access to the process list, `worker_tasks`
   - in addition, this method may pull the list of running jobs from the database, as needed
 - In the event that the database status is "running" but the process is missing (timing issues assumed to be worked out), it will send a message back to the dispatcher main process if the _receptor_ status is still active.
 - When the dispatcher gets a message that an active job is orphaned, it will launch `RunJob` or its equivalent.
 - Instead of starting the job, it will pick up `process`ing from the last line processed, which can be ascertained from the saved events or some other means of tracking.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

See feature summary

### Current results

Reaper message, job canceled

### Sugested feature result

Jobs should never be reaped - just have processing resumed.

Receptor becomes source of ultimate truth.

### Additional information

_No response_
user: AlanCoding
issue_13847: state: open
title: Duplicate Team name mapping via ldap picks last loaded, does not create team in differing orgs.
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->
If you have 2 teams named the same but in different orgs using ldap, only the last team with the name is created and the others are ignored.

##### ENVIRONMENT
* AWX install method: setup.sh
* Ansible version:  2.9.20
* Operating System: RHEL7/8
* Web Browser: N/A

##### STEPS TO REPRODUCE
1. create an ldap team mapping with the following structure:

```
{
   "Team Name": {
        "organization": "Org 1",
        "users": []
    }
    "Team Name": {
        "organization": "Org 2",
        "users": []
    }
}
```
2. log in with a user which belongs to both 'users' groups
3. note the lack of 2 orgs and 2 teams.
<!-- Please describe exactly how to reproduce the problem. -->

##### EXPECTED RESULTS
Two organizations with the same team are created.

<!-- What did you expect to happen when running the steps above? -->

##### ACTUAL RESULTS
only 'Team Name' in org 2 is created. 

<!-- What actually happened? -->

user: mabashian
issue_13845: state: open
title: Git fast-forward issue - properly use `+` in refspec
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Background in:

https://github.com/ansible/awx/issues/9371#issuecomment-888002348

The proposal is to add a `+` in the case where the app produces a refspec on its own, as in https://github.com/ansible/awx/pull/11797

This needs:
1. a reproducer for the bug it fixes
2. confidence this doesn't break other things

For the background on git refspec syntax:

https://git-scm.com/book/en/v2/Git-Internals-The-Refspec

> The `+` tells Git to update the reference even if it isn’t a fast-forward.

How can a non-fast-forward state occur within the project folders in AWX? I don't know, someone needs to answer this.

### AWX version

devel

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

(needs info)

### Expected results

Corruption in the project folder should not render the project unusable.

### Actual results

Maybe this still happens.

### Additional information

_No response_
user: AlanCoding
issue_13842: state: open
title: Misconfigured Container Groups result in missing UI events for jobs
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
If you have a misconfigured container group linked to an inventory, and then try to launch `ping.yml` with this inventory:
1) the Job Details UI never updates to show that it started -- it just says that it is waiting until refresh. 
2) Launching this misconfigured job from the jobs list never redirects to the job details page as it never launches (I think it should? Correct me if I'm wrong here). But also, it sits in Pending until you manually visit the job page, at which point it corrects. 

##### ENVIRONMENT
* Tower 3.6.0
* Web Browser: Chrome

##### STEPS TO REPRODUCE

1. Create a dummy Openshift/Kube credential, details don't matter. Use a bad url like http://1.2.3.4 and turn off SSL verification just to be safe.
2. Create a container group using this credential.
3. Create an inventory with just localhost, and under the Instance Groups option, add the container group you've created.
4. Launch a job template with ping.yml using the inventory.

##### EXPECTED RESULTS
The job starts and fails.

##### ACTUAL RESULTS
The job sits in pending forever until refresh.
user: mabashian
issue_13835: state: open
title: Job status change events should only be emitted for permissive resources
body: ### Summary
All job status changes are emitted to any user subscribed to the jobs channel, even when the affiliated resources are not available to the user for general rbac reasons. Though not a direct security concern, this behavior doesn't follow the permission-based resource filtering of the general api.

### Steps To Reproduce:
As a user without any permissions, subscribe to job status changes.
As another user, launch various inventory and project updates, jobs, and workflows.

### Expected Results:
No status change events.

### Actual Results:
Status change events for all jobs launched by other user.
user: mabashian
issue_13834: state: open
title: Added a new logger configuration for activity_stream
body: ##### SUMMARY
- Added a new handler for activity_stream with formatter type json
- Added the new handler at the awx.analytics logger

The activity stream is a critical security log that can only be used from UI or when using an external logging aggregation.
Creating an activity_stream.log allows for easier and more effective analysis without relying only on the API endpoint.

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - Other

user: lucas-benedito
issue_13828: state: open
title: Django-radius w/ python future.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

In PR https://github.com/ansible/awx/pull/13827 we unpinned the python-future library which had a hard pinning because of django-radius.

There is an opened PR against django-radius itself which would remove the future dependency: https://github.com/robgolding/django-radius/pull/27.

If that PR gets merged we should back out #13827 and update `ansible/django-radius`. Additionally, if that PR gets released, we should remove django-radius from `requirements_git.txt` all together and go back to a released version. If that PR will not be merged/released we should maybe consider merging it into `ansible/django-radius`, add some testing and offer that up as an alternative to `django-radius`?

### AWX version

N/A

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

N/A

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

N/A

### Expected results

N/A

### Actual results

N/A

### Additional information

_No response_
user: john-westcott-iv
labels: dependencies: Pull requests that update a dependency file
component:authentication: For issues related to authentication
issue_13824: state: open
title: Fix Mesh.js to work at non-root path
body: https://github.com/ansible/awx/blob/c0491a7b102f0dedc9ee8db4318854dc43ad7032/awx/ui/src/api/models/Mesh.js#L6
user: adpavlov
issue_13823: state: open
title: Misconfigured LOG_AGGREGATOR_URL can cause dispatcher to go into a crash loop. 
body: ### ISSUE TYPE
Bug Report
SUMMARY
Misconfiguration of the logging url can cause dispatcher to go into a crash loop.

### ENVIRONMENT
AWX version: devel
AWX install method: setup.sh
Ansible version: 2.9
Operating System:
Web Browser:

### STEPS TO REPRODUCE
misconfigure logging url with something like http:s//test.com
enable logging
restart awx
launch jobs

### EXPECTED RESULTS
Misconfigured logger should not cause a crash loop.

### ACTUAL RESULTS
Traceback is in awx-dispatcher.log


Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/utils/external_logging.py", line 57, in construct_rsyslog_conf_template
    if parsed.port:
  File "/usr/lib64/python3.6/urllib/parse.py", line 169, in port
    port = int(port, 10)
ValueError: invalid literal for int() with base 10: 's'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==3.8.2', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 154, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 66, in handle
    consumer.run()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/worker/base.py", line 153, in run
    self.worker.on_start()

### ADDITIONAL INFORMATION
Looks like this try except block is written in a way which doesn't account for no LOGGING_AGGREGATOR_PORT being configured:

https://github.com/ansible/awx/blob/devel/awx/main/utils/external_logging.py#L61
user: mabashian
issue_13822: state: open
title: Login via github when the user is not part of org/team not showing any error message
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary
No error message is displayed when a user try to access via github org/team SSO but is not part of the org or the team.

### AWX version

latest

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Setup github org or team auth configuration
Try to login using a github user that is not part of this org/team


### Expected results

Any error message to be displayed (bad credentials or something)

### Actual results

302 redirect to /sso/error/

### Additional information

_No response_
user: mabashian
issue_13821: state: open
title: Allow for running AWX at non-root path (URL prefixing)
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

It's a followup to #11342
While some things still not fixed like #12127, #12097 or #12241 new features are also not honoring non-root path installations like #13660 or #13423

### AWX version

22.0.0

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

yes

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

deploy latest awx 22.0.0 with /awx ingress_path

### Expected results

all working

### Actual results

websocket, some links and api not working

### Additional information

_No response_
user: adpavlov
issue_13819: state: open
title: Make credential type, labels typeahed filter results from API 
body: Per Tiago

In essence, if controller has a large number of credential types registered, say +5000, the UI is making many requests to /api/v2/credential_types/?page=<pagenumber>&page_size=200 to fetch all results, and the typeahead component is performing poorly while filtering the results on type.

This ticket is to change it so that the component can show # number of credential types and filter the results from API while typing on the field (similar to what we have in lookup fields)

##### ISSUE TYPE
 - New or Enhanced Feature


##### COMPONENT NAME
 - UI

user: mabashian
issue_13817: state: open
title: Job Template admin cannot edit project without use on existing project
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

When attempting to switch to a new project and update the playbook dropdown, the playbook dropdown is greyed and not selectable. This only occurs when the template admin does not have read permissions to the project being changed from. It is  expected that the template admin be able to switch to their project and select their playbook without requiring read access to the old project.



### AWX version

devel

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.14.0

### Operating system

centos9

### Web browser

_No response_

### Steps to reproduce

1. create a normal user with job template admin to an org or template admin
2. create a job template or use template to which user was granted admin
3. ensure job template has inventory and project specified which the created user does not have at least `use`
4. create project and/or inventory and grant user `use`
5. log in as user and attempt to edit project or inventory

### Expected results

Able to change project or inventory to one which the user has access.

### Actual results

403 error after allowing selection of the project

### Additional information

_No response_
user: gamuniz
issue_13815: state: open
title: Update approval node options on workflow visualizer
body: Per @AlexSCorey 

The options should be On Approve, On Deny, Always with updated descriptions.

See mock up
https://tower-mockups.testing.ansible.com/patternfly/workflows/workflows-pause-step1b/

##### ISSUE TYPE
 - New or Enhanced Feature


##### COMPONENT NAME
 - UI


user: mabashian
issue_13814: state: open
title: Add action tab to workflow job output approval nodes
body: Per @AlexSCorey 

We should enhance the workflow visualizer to help the user see the action taken on an approval node.
See mock up https://tower-mockups.testing.ansible.com/patternfly/jobs/jobs-workflow-run/

##### ISSUE TYPE
 - New or Enhanced Feature


##### COMPONENT NAME
 - UI
user: mabashian
issue_13806: state: open
title: Add an example of using multiple credentials
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

A user requested an example of how to use the `credentials` parameter with multiple credentials listed.


### AWX version

unknown

### Select the relevant components

- [ ] UI
- [ ] API
- [X] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

credential: "{{ some.item.credential_name }}" is incorrect
credentials: "{{ some.item.credential_name }}" is correct


### Expected results

Document should include examples of using multuple credentials.



### Actual results

"msg": "Request to /api/v2/credentials/?name=%5B%27svc_ansible_dns%27%2C+%27ss%27%5D returned 0 items, expected 1"

### Additional information

This request was copied over from a JIRA issue. Apologies if the details are sparse. 
user: samccann
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_13801: state: open
title: Export objects with `all` option not working
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

The option `all` in the `export` module is not working anymore. @ArtsiomMusin already answered to the corresponding code comment in https://github.com/ansible/awx/commit/c39172f516fdcc28318203e9327fa7758647dfbc and confirmed the bug.

### AWX version

22.0.0

### Select the relevant components

- [ ] UI
- [X] API
- [X] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

As an example, export the workflow templates as follows:
```
- name: Export all workflows
  awx.awx.export:
    workflow_job_templates: 'all'
```

### Expected results

Complete export of all workflow templates

### Actual results

The string `all` is converted to a list and the assets are empty:
```
  assets:
    workflow_job_templates: []
  invocation:
    module_args:
      all: false
      applications: null
      controller_config_file: null
      controller_host: xyz
      controller_oauthtoken: null
      controller_password: VALUE_SPECIFIED_IN_NO_LOG_PARAMETER
      controller_username: xyz
      credential_types: null
      credentials: null
      execution_environments: null
      inventory: null
      inventory_sources: null
      job_templates: null
      notification_templates: null
      organizations: null
      projects: null
      schedules: null
      teams: null
      users: null
      validate_certs: null
      workflow_job_templates:
      - all
```

### Additional information

_No response_
user: phildri
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_13794: state: open
title: Add IT lang on UI
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
Adding Italian lang to AWX UI.


##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - UI

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
21.14.0
```


##### ADDITIONAL INFORMATION
N/A
user: tanganellilore
labels: community pull request: Applied to community based pull requests for filtering
issue_13793: state: open
title: Add remote work unit id to api and logging to make debug easier
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Currently it isn't easily possible to compare the work unit id from a control node to the execution node which was assigned the job. This feature would expose the remote work unit id in both api and code to allow easier cross referencing of remote side issues.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

1. Launch job
2. navigate to the api
3. observe no remote work unit id

### Current results

There is no remote work unit id for execution node.

### Sugested feature result

Remote work unit id is exposed.

### Additional information

_No response_
user: gamuniz
issue_13787: state: open
title: [Web/task Split]Documentation needed for database connection limit 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Docs are needed to specify the database connection limit. There are 100 possible connections with each replica taking approximately 4 connections. 

### Select the relevant components

- [ ] UI
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

...

### Current results

...

### Sugested feature result

...

### Additional information

...
user: djyasin
issue_13785: state: open
title: Support for  HashiCorp Terraform Cloud / HashiCorp Terraform Enterprise Run Tasks
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

HashiCorp's Enterprise Terraform Platforms (Terraform Cloud and Terraform Enterprise) support the creation of [Run Tasks](https://developer.hashicorp.com/terraform/cloud-docs/integrations/run-tasks). Run Tasks are a mechanism by which 3rd party tools and services can be integrated into the Enterprise Terraform run lifecycle, outside of relying on codified triggers.

Many organisations will utilise an Enterprise Terraform platform in conjunction with AWX / Ansible Automation Platform as part of an end-to-end provisioning and configuration management workflow. Having the ability to drive AWX / Ansible Automation Platform workflows and jobs in response to events within the Enterprise Terraform Platform would ease the current burden of integration between the two Enterprise Products by moving the integration point out of code (i.e. out of playbooks or terraform configurations), and allow for more complex workflow patterns to be created in a simple, scalable fashion.

### Select the relevant components

- [x] UI
- [X] API
- [x] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

N/A - Feature doesn't currently exist. 

### Current results

Integration must currently be done either within Ansible Playbooks to trigger Terraform Cloud / Terraform Enterprise APIs, or using the recently released Ansible Provider for Terraform as a means to run Ansible Plays within the scope of a Terraform Configuration.

### Sugested feature result

A Platform-level integration between AWX/AAP and Terraform Cloud / Terraform Enterprise would enable:

- no-code integration between the two enterprise platforms
- improves the security posture - responsibility for securing the integration becomes the responsibility of the platforms, rather than the developer. No credential handling required at the Terraform Configuration / Ansible Playbook level to enable the integration
- DRY: Doing this at the platform removes the need to constantly repeat the integration in code for every developer team who requires it
- seamless hand-off from infrastructure provisioning to configuration management during e2e workflows
- supports the 'better together' narrative currently being touted across Red Hat blogs 😄 

### Additional information

This Feature Request is being raised on the AWX project as the Feature Request would involve the AWX development team providing an endpoint and allowing the generation of an HMAC key that Terraform Cloud / Terraform Enterprise could then [send a request to](https://developer.hashicorp.com/terraform/cloud-docs/api-docs/run-tasks/run-tasks-integration#sample-payload) in order to trigger an AWX/AAP Job or Workflow. When the Workflow or Job completes, AWX/AAP would [callback](https://developer.hashicorp.com/terraform/cloud-docs/api-docs/run-tasks/run-tasks-integration#run-task-callback) to Terraform Cloud / Terraform Enterprise with the status of the Workflow or Job.
user: benemon
issue_13780: state: open
title: Show Changes (--diff) prompt on launch ignored
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

It is not possible to override the “Show Changes” (--diff) option via “Prompt on launch” for a job template. AWX uses the defined option in the job templated. A change (enable/disable) has no effect on the PromtDetail view.



### AWX version

21.13.0

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.14

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

1. Create a job template and enable `Prompt on launch ` for `Show Changes`
2. Launch the template and enable `Show Changes` on the prompt detail view
3. `Show Changes` / diff mode still not used on the playbook run
4. Edit template and enable `Show Changes`
5. Try to disable `Show Changes` on the prompt detail

### Expected results

Able to override the `Show Changes` via `Prompt on launch`

### Actual results

AWX will always use the option set in the template

### Additional information

![grafik](https://user-images.githubusercontent.com/11299733/228808150-7eeb74ef-88ed-4b86-82f8-da53f6d1117b.png)
![grafik](https://user-images.githubusercontent.com/11299733/228808880-270a5c67-aef6-4b9c-a102-0dc8869aea83.png)

user: CWollinger
issue_13765: state: open
title: awxkit : variable can't begin with @ caractere
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

actually with the CLI of awxkit ( tested via the version 21.14.0 ) , it's impossible to use a variable begin the the special caractere `@`

awxkit is interpreting it as a file:
```
echo "oldPass: '@ddd'" > /tmp/file.yaml ; awx --conf.host "${awx_url}" --conf.token "${awx_token}" job_template launch 'SSP Sync User' --extra_vars @/tmp/file.yaml
[Errno 2] No such file or directory: 'ddd'
```
If used in any other position, it's working as expected : 
```
echo "oldPass: 'd@dd'" > /tmp/file.yaml ; awx --conf.host "${awx_url}" --conf.token "${awx_token}" job_template launch 'SSP Sync User' --extra_vars @/tmp/file.yaml
{"variables_needed_to_start": ["' ...
...
It's asking other variable as i have simplified it to reproduce the issue more easily....

```
It's a issue on awx CLI, the actual workarround is to use a curl command instead : (but it's ugly and not so easy to use as need to use the job_templates id ) 
```
curl \
       --header "Authorization: ${awx_token}" \
       --data "{ \"extra_vars\": { \"oldPass\": \"${oldPass}\" } }" \
       --header 'Content-type: application/json' \
       ${awx_url}/api/v2/job_templates/11/launch/
```

### AWX version

21.14.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.14.1

### Operating system

Debian11

### Web browser

_No response_

### Steps to reproduce

* Install the awxkit like with this playbook : 
```
- name: Deploy webapps
  hosts: test_server
  pre_tasks:
    - name: Install pre-requisite
      ansible.builtin.apt:
        name: python3-pip
    - name: Install awxkit
      ansible.builtin.pip:
        name: awxkit
```
* Run a playbook on a existing awx via awx-cli command line from thhe test_server :
```
echo "oldPass: '@ddd'" > /tmp/file.yaml ; awx --conf.host "${awx_url}" --conf.token "${awx_token}" job_template launch 'SSP Sync User' --extra_vars @/tmp/file.yaml
[Errno 2] No such file or directory: 'ddd'
```


### Expected results

variable like `oldPass: '@ddd'` should not be interprete as file but as string directly


### Actual results

[Errno 2] No such file or directory: 'ddd'

### Additional information

ansible-playbook also work as excepted with this kind of special variable : 
```
ansible-playbook test.yml --extra-vars="test=@dd"
```
So, the issue is only in awxkit
user: roumano
issue_13760: state: open
title: [constructed-inventory] Introduce a toggle to exclude empty groups
body: In the current implementation, constructed inventory will get _all_ the groups from the input inventories.

For large input inventory content, it would be nice to have an option that results in excluding all empty groups from the constructed inventory content.

Right now, I do not have any reason to believe this would have a functional effect because empty groups don't affect anything in playbooks. So this proposal is strictly for aesthetics, storage size, and ease of management.
user: AlanCoding
issue_13759: state: open
title: New GUI Preview Displays Vault Credential Type as "Unknown"
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Credential type is being incorrectly displayed in the new UI technical preview as unknown for Vault type credentials in AWX 21.14.0

### AWX version

21.14.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Edge

### Steps to reproduce

Create a Vault Credential of any kind in AWX, navigate to the credentials list at ansibleURL.com/ui_next/credentials
The credential type will be listed as unknown.

Navigate to ansibleURL.com/#/credentials
The credential type will be listed as Vault.

### Expected results

Create a Vault Credential of any kind in AWX, navigate to the credentials list at ansibleURL.com/ui_next/credentials
The credential type will be listed as Vault.

Navigate to ansibleURL.com/#/credentials
The credential type will be listed as Vault.

### Actual results

The credential type was listed as unknown, rather than Vault.

### Additional information

_No response_
user: ZachHoiberg
issue_13757: state: open
title: Job launch not honored default instance groups defined in template Job
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Hi.

We've deployed AWX defining two different "Instance Group" one with Max Concurrent Jobs of 4 and second one with Max Concurrent Job of 1.

All of our templates has defined as default "Instance Group" the first one, but when launch a new Job if the second "Instance Group" is free and the first one is full then the jobs are sent to second "Instance Group".

We want this scenario in order to have the change to run jobs immediately, like update the inventory in a free "Instance Group".

**Definition of Template Job**
![image](https://user-images.githubusercontent.com/107195014/228242507-3d295ced-57d2-4912-8cc5-1995c1819e33.png)

**Instance Groups defined**
![image](https://user-images.githubusercontent.com/107195014/228242994-4b38b6eb-4d1a-4fb6-9334-a7af8c79509d.png)

**Jobs executed in second Instance Group**
![image](https://user-images.githubusercontent.com/107195014/228243538-4651db2c-ab7d-4fa4-9b12-a4edfd7b08b4.png)

I've checked when launch is executed this request GET https://HOST/api/v2/job_templates/440/launch/, the response received
is this 
`{
    "can_start_without_user_input": false,
    "passwords_needed_to_start": [],
    "ask_scm_branch_on_launch": false,
    "ask_variables_on_launch": true,
    "ask_tags_on_launch": true,
    "ask_diff_mode_on_launch": false,
    "ask_skip_tags_on_launch": true,
    "ask_job_type_on_launch": true,
    "ask_limit_on_launch": true,
    "ask_verbosity_on_launch": true,
    "ask_inventory_on_launch": false,
    "ask_credential_on_launch": false,
    "ask_execution_environment_on_launch": false,
    "ask_labels_on_launch": false,
    "ask_forks_on_launch": false,
    "ask_job_slice_count_on_launch": false,
    "ask_timeout_on_launch": false,
    "ask_instance_groups_on_launch": true,
    "survey_enabled": false,
    "variables_needed_to_start": [],
    "credential_needed_to_start": false,
    "inventory_needed_to_start": false,
    "job_template_data": {
        "name": "Common - Playbook @ 01:25:02:252 PM",
        "id": 440,
        "description": "Ejecuta el PlayBook Common"
    },
    "defaults": {
        "inventory": {
            "name": "My Inventory",
            "id": 2
        },
        "limit": "",
        "scm_branch": "",
        "job_tags": "",
        "skip_tags": "",
        "extra_vars": "---",
        "diff_mode": true,
        "job_type": "run",
        "verbosity": 0,
        "credentials": [
            {
                "id": 3,
                "name": "Ansible Host",
                "credential_type": 1,
                "passwords_needed": []
            },
            {
                "id": 5,
                "name": "My Vault",
                "credential_type": 3,
                "passwords_needed": [],
                "vault_id": ""
            }
        ],
        "execution_environment": {
            "id": 4,
            "name": "My Execution Environment"
        },
        "forks": 0,
        "job_slice_count": 1,
        "timeout": 0,
        "instance_groups": []
    }
}`

You can see `"default"."instance_groups"` an empty array but the template has assigned one Instance Group.




### AWX version

21.12.0

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

minikube

### Modifications

yes

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. Create two Instance Group (Container group) restricting the number of max jobs on both.
2. Create a playbook and define as default "Instance group" only one of them.
3. Launch more Jobs that the max number of jobs of both container groups.
4. Check if job is executed in the instance group that has not been assigned to the template.

### Expected results

Jobs must be executed only in the assigned in the Instance Group assigned in the template.

### Actual results

Jobs are executed in both Instance Group

### Additional information

Our modification, was to assign a custom image in the container and system execution environment to meet our requirements following this instructions https://docs.ansible.com/automation-controller/latest/html/userguide/execution_environments.html#building-an-execution-environment

The file execution-environment.yml is
---
version: 1

build_arg_defaults:
  EE_BASE_IMAGE: quay.io/ansible/ansible-runner:stable-2.12-latest

dependencies:
  galaxy: requirements.yml

additional_build_steps:
  append:
    - COPY my-ca-root.pem /etc/pki/ca-trust/source/anchors/my-ca-root.pem
    - COPY my-ca-intermediate.pem /etc/pki/ca-trust/source/anchors/my-ca-intermediate.pem
    - RUN update-ca-trust extract

And the file requirements.yml is
---
collections:
  - amazon.aws
  - ansible.posix
  - ansible.netcommon
  - ansible.utils
  - community.general
  - community.grafana
  - community.mongodb
  - community.mysql
  - community.postgresql
  - community.rabbitmq



user: toni-sysok
issue_13747: state: open
title: instance groups prompt-on-launch on workflow
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Today, job templates can be configured with instance groups prompt-on-launch. Therefore, jobs can be launched with the parameter on which instance group they'll be run.
Please add a instance groups prompt-on-launch option at the workflow level. With such feature, all job templates configured in the workflow having instance groups prompt-on-launch enabled will inherit the instance groups setting configured for launching the workflow.

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Steps to reproduce

none

### Current results

none

### Sugested feature result

When launching a workflow job configured with instance groups prompt-on-launch with the parameter --instance-group XYZ, all job templates in the workflow which are configured with instance groups prompt-on-launch will run on the instance group XYZ.

### Additional information

At this time, the workaround is to create multiple inventories (same config except the instance group), select inventory prompt-on-launch for the workflow / templates and launch the workflow job with the appropriate inventory.
user: amolari
issue_13746: state: open
title: AWX EE 21.11.0 - Values not passed correctly between jobs using set_stats and aggregate: no
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

We have recently updated to AWX EE 21.11.0 (previously using AWX EE 0.6.0). This update, values passed between jobs using set_stats and aggregate:no are not correct.
One example:
- name: pass list to other jobs
  ansible.builtin.set_stats:
    data:
      test: "{{ mylist.host_out }}"
    aggregate: no

Job1 runs fine and write values in test variable. test is then passed to job2.
Under variables, we see test from job1. Job2 write values in test variable too (we see the change in artifacts).
Then we start a third job (job3) and it displays test value from job1 and not from job2 :-(. With "Aggregate: no" it should overwrite variable, but it didn't overwrite it. In previous versions (AWX EE 0.6.0), test variable was overwriten.
Is this a bug? How to solve this behaviour?

If I set to start with AWX EE 0.6.0 for that Job template, it fails with error "Pod Running".

### AWX version

AWX EE 21.11.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

- name: pass list to other jobs
  ansible.builtin.set_stats:
    data:
      test: "{{ mylist.host_out }}"
    aggregate: no

Create 3 jobs to change variable test. It won't be overwrite test variable as expected.

### Expected results

test variable is changed after every job correctly.

### Actual results

test variable is changed every N-1 run (job2 has job1 value, job3 has job1 value, job4 has job2 value, ...)

### Additional information

_No response_
user: HermannGaetan
issue_13737: state: open
title: Improvements to the AWX development experience
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Let's use this GitHub Issue to brain-dump problems we've seen.
Including:
* docker-compose
* Makefile targets

### AWX version

devel

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

n/a

### Expected results

Easier to develop.

### Actual results

Not as easy as it could be

### Additional information

_No response_
user: gundalow
issue_13733: state: open
title: [constructed-inventory] show constructed inventory-level variables in the UI as read-only
body: Broken out from https://github.com/ansible/awx/issues/13714
user: AlanCoding
issue_13732: state: open
title: [constructed-inventory] Add validation in the API to prevent editing constructed inventory variables
body: Broken out from https://github.com/ansible/awx/issues/13714
user: AlanCoding
issue_13722: state: open
title: Update of machine credential fails if both ssh key and passphrase are in key vaults
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

when using a ssh key with a passphrase saving them both in vault only works on creation, it won't allow saving the credential after it's initial creation.

For simplicity this bug is shown here via UI, but I am also getting an error on the API when I use awx.awx.credential



### AWX version

21.13.0

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

core 2.13.3

### Operating system

RHEL8

### Web browser

Firefox

### Steps to reproduce

1) Create a machine credential using a ssh key with a passphrase, both coming from a key vault (in my case azure key vault, but I don't think that makes a difference).
2) Edit the newly created machine credential
3) Try to save (no need to change anything, just hit save)

Creation will work, subsequent edits and saves via UI will not be possible

### Expected results

Save works

### Actual results

Save is not permitted with error message "must be set when SSH key is encrypted." beneath the Private Key Passphrase field

### Additional information

I am guessing
https://github.com/ansible/awx/blob/7deddabea60166ca8808509756a080d63cffa97e/awx/main/fields.py#L640

`value.get('ssh_key_unlock')` only works for strings set in awx directly.

I can use the created credential fine, so it's just a problem with the credential editing/saving part.
user: Klaas-
issue_13720: state: open
title: Option to filter organization as superuser
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Hi,
So as a superuser I am able to see all organizations/users/templates/jobs and what not

since im also a user, it would really be a cool option to view only one organization, because when i create a job template, i can select an inventory/credential of another organization, or even project for that matter

What i wish would be is there would be a drop down list on lets say top left corner (like in openshift namespaces) where i can select what kind of organization i want to view things, and also an option for all organization (like in openshift namespaces)

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

As super user you are allowed to view all organizations without filtering

### Current results

As super user you are allowed to view all organizations without filtering

### Sugested feature result

have way like in openshift namespaces to select the organization you want to view/edit

![image](https://user-images.githubusercontent.com/16644770/226116987-175c7b60-8e0c-4582-ae9a-f747e42a096b.png)


### Additional information

_No response_
user: erezo9
issue_13714: state: open
title: [constructed inventory] edit constructed inventory variables in UI?
body: Currently the UI doesn't seem to let me edit inventory variables on constructed inventories. But the API will gladly accept `variables` as a parameter.

Questions:

- Does it make sense to have constructed-inventory-global inventory variables?
- If so, does the UI need to add the field for them so they can be set?

cc @AlanCoding 

user: relrod
issue_13711: state: open
title: [Project_update] Git depth
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

I am suggesting adding ``depth`` attribute with value 1 in task down there. 

https://github.com/ansible/awx/blob/ededc61a71f92f399438136ce70a8665869a246d/awx/playbooks/project_update.yml#L41-L50

Using depth attirbute will create a shallow clone with a history truncated. Cloning the project will be a lot faster and it won't hurt current setup, because we are deleting the project folder before and there is no need for walking down the history line in git repository. User only wants to checkout to a specific commit/branch and that is it.  Ansible documentation also states this: ``Needs git>=1.9.1 to work correctly.`` but if git version is lower than the requested one, Ansible will print a warning that depth attribute will not be used so I also won't break older instances. 

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Add ``depth: 1`` in the task down there. 

https://github.com/ansible/awx/blob/ededc61a71f92f399438136ce70a8665869a246d/awx/playbooks/project_update.yml#L41-L50

### Current results

Project is being cloned with it's entire history. 

### Sugested feature result

Project is being cloned with truncated history. (It depends on a project size but in my case I got 4-5 speed up, so almost I doesn't even notice this job, so my main job is spending less time in pending state).

### Additional information

_No response_
user: dariodsa
issue_13710: state: open
title: Inventory Drop Down Empty for Project Sourced Inventory
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

When sourcing inventory from a Git based Project the inventory file drop down menu is empty. Typing in a known inventory yaml file path works. Other places that use project files like the Job Template page correctly show all the available files in the drop down including inventory files.

### AWX version

21.13.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

Rocky 8

### Web browser

Firefox

### Steps to reproduce

1. Create project from a Git repository containing an `inventory/` folder and multiple inventory files with `.yml` extension.
2. Verify that project created in step 1 syncs successfully.
3. Create Inventory from Source and reference the Project created in Step 1 and notice that the drop down menu for inventory files just shows the root directory and no files.

### Expected results

Inventory file list should show the files from the project.

### Actual results

Inventory list just shows `/ (project root)`

### Additional information

This is a basic install using the AWX Operator on a single node K3s installation with all defaults and no configuration changes inside of AWX.
user: shawnweeks
issue_13709: state: open
title: [constructed-inventory] Link to original host from constructed inventory hosts
body: Look at any constructed inventory host:

https://localhost:8043/api/v2/hosts/?inventory__kind==constructed

And then in the UI you get the constructed-host-details at a URL like this

https://ec2-3-82-222-79.compute-1.amazonaws.com/#/inventories/constructed_inventory/119/hosts/178/details

The API details has a "related" link to `original_host`

```json
{
    "id": 178,
    "type": "host",
    "url": "[/api/v2/hosts/178/](https://ec2-3-82-222-79.compute-1.amazonaws.com/api/v2/hosts/178/)",
    "related": {
...
        "original_host": "[/api/v2/hosts/177/](https://ec2-3-82-222-79.compute-1.amazonaws.com/api/v2/hosts/177/)",
...
    },
```

The UI is relatively minimal



![Image](https://user-images.githubusercontent.com/1385596/225726972-8f68f417-8471-430f-9638-9f89ca1cdea4.png)

This issue asks that we add a link to follow to the original host, using the API related link above. The original host UI page is like this:

https://ec2-3-82-222-79.compute-1.amazonaws.com/#/inventories/inventory/118/hosts/177/details

So the UI URL is formatted differently.
user: AlanCoding
issue_13699: state: open
title: AWX automatically launching unscheduled project syncs
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Our AWX launches an SCM project sync three times every 15 minutes, even if it is not scheduled and there are no associated job templates that could be updating it on launch:

![image](https://user-images.githubusercontent.com/57350196/225387790-9da0d477-18f7-423b-a52f-b25eada53bb5.png)



### AWX version

21.13.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Install AWX 21.13.0 and configure an SCM project. Activate a schedule and later deactivate it.


### Expected results

When the schedule is active, the sync job launches on the scheduled times. When the schedule is deactivated, the sync job only starts when it is manually launched.

### Actual results

With or without an active schedule, the sync job is automatically launched three times every 15 minutes.

### Additional information

There used to be an associated schedule, but it was scheduled to be launched every 2 hours. Now it is deactivated:

![image](https://user-images.githubusercontent.com/57350196/225388353-971e89e1-fb6d-4362-b731-bab431fceb24.png)

The sync was launched by AWX every 15 minutes when it was scheduled to be launched every 2 hours, and it continues to be launched every 15 minutes now the schedule is deactivated.
user: anasaizg
issue_13695: state: open
title: Bad translation of "On" in French
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

The string "On" (as in enabled, for example in the schedules page) is translated in French by "Le"

I suspect that there is a mistranslation between "On" as in enabled and "On" as "On Monday"

"On" (as in enabled) should probably be translated as "Activé" ("Off" is translated as "Désactivé")

https://github.com/ansible/awx/blob/7f1750324fb4144298f70aba3ca763ef6ac615e0/awx/ui/src/locales/fr/messages.po#L5982

### AWX version

HEAD

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Firefox

### Steps to reproduce

With the AWX page displayed in French, go the "Schedules" page

### Expected results

"On" is translated as "Activé"

### Actual results

"On" is translated as "Le"

### Additional information

_No response_
user: bigon
issue_13684: state: open
title: Job_list module does not work with until keyword.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

When running this task:

```- name: Waiting for ALL Controller Instance that have been disabled to finish jobs
      awx.awx.job_list:
        controller_host: "{{ lookup('env', 'CONTROLLER_HOST') }}"
        controller_username: "{{ lookup('env', 'CONTROLLER_USERNAME') }}"
        controller_password: "{{ lookup('env', 'CONTROLLER_PASSWORD') }}"
        validate_certs: false
        status: running
        query: {"controller_node": "{{ automation_controller_pod_names }}"}
      register: controller_instance_jobs
      until: controller_instance_jobs['count'] == "0"
      delay: 60
      retries: 60 ```

```fatal: [localhost]: FAILED! => {"msg": "The conditional check 'controller_instance_jobs.results[0]['count'] == 0' failed. The error was: error while evaluating conditional (controller_instance_jobs.results[0]['count'] == 0): list object has no element 0. list object has no element 0"}```

If I debug the register it works correctly.

TASK [Debug controller_instance_jobs] *******************************************************************************************
ok: [localhost] => {
    "controller_instance_jobs.results[0].count": "0"
}


### AWX version

devel

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. run task provided:

- name: Waiting for ALL Controller Instance that have been disabled to finish jobs
      awx.awx.job_list:
        controller_host: "{{ lookup('env', 'CONTROLLER_HOST') }}"
        controller_username: "{{ lookup('env', 'CONTROLLER_USERNAME') }}"
        controller_password: "{{ lookup('env', 'CONTROLLER_PASSWORD') }}"
        validate_certs: false
        status: running
        query: {"controller_node": "{{ automation_controller_pod_names }}"}
      register: controller_instance_jobs
      until: controller_instance_jobs['count'] == "0"
      delay: 60
      retries: 60 

### Expected results

expectation is that the task runs until all jobs have finished or the timeout is exceeded.

### Actual results

fatal: [localhost]: FAILED! => {"msg": "The conditional check 'controller_instance_jobs.results[0]['count'] == 0' failed. The error was: error while evaluating conditional (controller_instance_jobs.results[0]['count'] == 0): list object has no element 0. list object has no element 0"}

### Additional information

_No response_
user: gamuniz
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_13683: state: open
title: custom image of quay.io/ansible/awx doesn't not create "awx" superuser
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Hello,

As I needed the "aws-task" container in k8s to include other OS command, I created a Dockerfile like this:

FROM quay.io/ansible/awx
USER root
RUN dnf install -y gcc python-devel openssl-devel jq wget
RUN python3 -m pip install pysocks
RUN python3 -m pip install pywinrm
RUN update-crypto-policies --set DEFAULT:SHA1
RUN dnf -y clean all

Then publish the image in https://quay.io/

Crate a CRD .yml to include that image

---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx-kyndryl
spec:
  image: quay.io/osorio/awx:21.13.0
  service_type: nodeport
  projects_persistence: true
  projects_storage_access_mode: ReadWriteOnce
  web_extra_volume_mounts: |
    - name: static-data
      mountPath: /var/lib/projects
  extra_volumes: |
    - name: static-data
      persistentVolumeClaim:
        claimName: public-static-data-pvc
  admin_user: spider
  nodeport_port: 30080
  task_privileged: true

I seems to worked well but when login to the container "awx-task" I noticed the awx superuser is not created.

regards

### AWX version

21.13.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

yes

### Ansible version

21.13.0

### Operating system

RHEL8

### Web browser

Chrome

### Steps to reproduce

Step 01:

create a Dockerfile

`FROM quay.io/ansible/awx
USER root
RUN dnf install -y gcc python-devel openssl-devel jq wget
RUN python3 -m pip install pysocks
RUN python3 -m pip install pywinrm
RUN update-crypto-policies --set DEFAULT:SHA1
RUN dnf -y clean all`

step 02:

Then publish the image in https://quay.io/

step 03

Crate a CRD .yml to include that image

`---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx-kyndryl
spec:
  image: quay.io/osorio/awx:21.13.0
  service_type: nodeport
  projects_persistence: true
  projects_storage_access_mode: ReadWriteOnce
  web_extra_volume_mounts: |
    - name: static-data
      mountPath: /var/lib/projects
  extra_volumes: |
    - name: static-data
      persistentVolumeClaim:
        claimName: public-static-data-pvc
  admin_user: spider
  nodeport_port: 30080
  task_privileged: true`

step 04

deploy the CRD yaml in k8s.

step 05

login to the "awx-task" container and check if the awx superuser is created


### Expected results

awx superuser is created and have the right permissions....

### Actual results

only root user exist in the awx-task container

### Additional information

_No response_
user: doommot01
issue_13682: state: open
title: Allow modifiable _sources (output) dir for builds
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
This dir, `_sources` is an output/target directory used by make rules and playbooks for storing generated files and for mounting some things into containers. Before this patchset, `_sources` is sometimes hard-coded, and it is at other times in a `sources_dest` var. This patchset makes it possible to set/change this sources dir. Some simplifications along the way.
<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->
###### Use
```shell
$ make SOURCES=out docker-compose
```

###### Why?
This patch cleans things up a little, and it may fix some hidden bugs, but the main force behind it is a weird incompatibility with podman:
Docker-compose will automatically name a network after the name of the directory it's started from, but `podman`, using docker-compose yml through the socket API, *but* podman rejects the network name because it starts with an `_`. Strangely, I couldn't find where that is specified in OCI or anything, but I did find the code in podman that tests against a regexp (iirc, it uses a `hostname` or dns name regexp), so this may be a spec miss/bug in podman. But, being able to change the name makes it work as a workaround, so I set things up to change the name so that I can continue use podman for testing on RHEL 8/9.

 There are still more patches needed to make podman work. I have it working in a branch, and I'm pulling those on top of HEAD one at a time and fixing them up for PRs.

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
- Other

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 0.1.dev32930+g3088eba.d20230314
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

- Add override for '_sources' dir in Makefile SOURCES var
- Change docker-compose rules to use $(SOURCES)
- Add $SOURCES sh var to docker-compose container's sh scripts
- Add a SOURCES make variable that defaults to `_sources` to replace hard-coded `_sources`
- Add new SOURCES env var to docker-compose template
- Change plumb* ymls to use sources_dest or _sources
- Change pre_translation.sh to enable custom SOURCES
  - Use $SOURCES if it's in the env, otherwise original behavior (use '_sources' string for the dir)
- Change migrate-from-local-docker to use var sources_dest
- Change playbook to copy over all config files used by docker-compose
  - Add copy grafana dir rule
  - Copy `supervisor.conf` and `redis.conf` to roles/sources/templates dir
  - Add `superviosr.conf` and `redis.conf` to what's copied from the playbook
- Add awx_root to sources/defaults/main.yml
  - Discover awx_root by discovering the git root
  - Default to `../../../../` like the old behavior
- Change sources/tasks/main.yml to use awx_root in playbook
  - Introduce `awx_root` var because docker-compose yml kept trying to guess directory names using a scary anchored relative path, and it would fail if `_sources` moved
- Change docker-compose template
  - Remove use of relative path with anchor (`../docker-compose/../`)
- Change plumb playbooks to use sources_dest/default
- Change `$DIR/sources_dest` references to be just `sources_dest`

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: jjwatt
issue_13681: state: open
title: Deprecate "is_sliced_job" and "is_bulk_job" in favor of using a launch_type
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

With https://github.com/ansible/awx/pull/13462 we introduced a new boolean field on WorkflowJob objects -- "is_bulk_job". This pattern was borrowed from the "is_sliced_job"

But perhaps it is a bad pattern.
@AlanCoding proposed that instead of a potentially growing list of mutually exclusive boolean fields on the WorkflowJob model, we have "bulk" and "sliced' as `launch_type` choices.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Sliced jobs and bulk jobs distiguish the resulting workflows with use of a boolean field on the model

### Current results

boolean field is used to distiguish the jobs

### Sugested feature result

Add 'sliced' an 'bulk' as launch types and filter on this wherever we currently use `is_bulk_job` or `is_sliced_job`
Example:
https://github.com/ansible/awx/blob/0de75514776462c70c8591979b2ae90588ff99bb/awx/main/analytics/collectors.py#L166

### Additional information

_No response_
user: kdelee
issue_13680: state: open
title: Job failed due to log size limit was reached and can't retrieve the failed job output.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Started a job on the container group on Openshift cluster and ended as failed when log size limit was reached and 
it takes for ages or fails to retrieve the failed job output
and viewing the job template gets error 'Something went wrong' and this error is cleared by deleting the failed job.

### Behaviour observed:

Started a job on the container group in Openshift cluster against inventory with some hosts or local host.
The playbook printed out many lines of debug message until the log size limit is reached.
The job got stuck for minutes and ended as failed.
I tried with all options of RECEPTOR_KUBE_SUPPORT_RECONNECT, the results were same.
 
Retrieving the job output  took ages or ended up as 'Something went wrong'
When trying to view the job template, I often get 'Something went wrong' error.
The Jobs view often gets 'Something went wrong'
After deleting the failed job, I could view the job template details and Jobs view works ok.  

### AWX version

21.5.1

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

core 2.13.8

### Operating system

Red Hat Enterprise Linux release 9.1 (Plow) UBI 

### Web browser

Chrome

### Steps to reproduce

create a job template with playbook which prints out tens of thousand debug message.
create an inventory with some remote hosts or local host.
start the job on the container group in remote cluster against the above inventory

### Expected results

The job ends successfully

### Actual results

job failed. can't view job output. failed job blocks access to the job template.

### Additional information

_No response_
user: Lee-Kwang
issue_13672: state: open
title: [21.3.x] No Job logs for Container Groups other than default
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

No logs showing for container groups other than default.



Similar issue reported in https://github.com/ansible/awx/issues/13469 - however we are not using the "default" container group.

Authentication type used: Kubernetes Bearer Token including CA certificate created in target namespace for service account following steps from https://docs.ansible.com/automation-controller/4.3/html/userguide/credentials.html#openshift-or-kubernetes-api-bearer-token 


Behaviour observed:
- jobs are starting in desired target namespace
- no stdout in AWX UI
- no output in pod logs
- stdout only shows ""Finished"
- final job status: Job terminated due to error
- runner pod directory /runner has the default folders created, but no files get populated
```
bash-5.1$ find . -type f -ls
bash-5.1$ ls -la
total 48
drwxrwxr-x. 6 root root 4096 Mar 10 12:12 .
drwxr-xr-x. 1 root root 4096 Mar 10 13:26 ..
drwxrwxr-x. 2 root root 4096 Mar 10 12:12 artifacts
drwxrwxr-x. 2 root root 4096 Mar 10 12:12 env
drwxrwxr-x. 2 root root 4096 Mar 10 12:12 inventory
drwxrwxr-x. 2 root root 4096 Mar 10 12:12 project
bash-5.1$ pwd
/runner
```
in awx-task:
```
bash-5.1$ /var/lib/awx/venv/awx/bin/receptorctl --socket /var/run/receptor/receptor.sock work list
Warning: receptorctl and receptor are different versions, they may not be compatible
{
    "hkrbBlUW": {
        "Detail": "Sending stdin to pod",
        "ExtraData": {
            "Command": "",
            "Image": "",
            "KubeConfig": "",
            "KubeNamespace": "ansible",
            "KubePod": "",
            "Params": "",
            "PodName": "automation-job-217-rd5kj"
        },
        "State": 0,
        "StateName": "Pending",
        "StdoutSize": 0,
        "WorkType": "kubernetes-runtime-auth"
    }
}
bash-5.1$ 
```

### AWX version

21.3.0

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

yes

### Ansible version

core 2.12.5.post0

### Operating system

Garden Linux

### Web browser

Chrome

### Steps to reproduce

- Install AWX
- Create target namespace for container groups
- Create Service Account including containergroup-sa.yaml mappings for target container group namespace
- get CA cert and token details from service account
- Create Bearer Token for target container group including CA.crt and token
- Create Container Group
- Run any job --> no log output

### Expected results

stdout of job logs

### Actual results

no outoput of stdout, job goes into error after 25 minutes

### Additional information

_No response_
user: hurdigurdi
issue_13668: state: open
title: Support ansible_check_mode for workflows
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Just like AWX jobs can be launched in check_mode,  AWX WF jobs could as well

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

Hello and thank you for your work on AWX
Ansible and AWX "normal" jobs (non-WF type job) support the check_mode, be it using the --check CLI option, AWX job model configuration form, API, etc., which allows a "dry-run" which should not modify anything on local or remote nodes. The check mode is implemented by each module independently.
I think this feature is great, although some people prefer to use their own custom variable for better control, but at the cost of more work, lines, tasks and logic. Playbook logic is bad in ansible IMHO.
One drawback of the check_mode is that AWX WF jobs do NOT support it, meaning that you CANNOT launch a workflow in chec_mode.

What I am requesting for is pretty simple to formulate: just mimic the AWX job configuration and launching option for AWX WF jobs. For the sake of explicity, I will describe it nonetheless:

From the UI :
1. Create a new WF job or modify an existing one
2. A list box appears, allowing (like a standard, non-WF job) to choose if the job is run-type or check-type, as well as a checkbox to "ask the run type on each run"

From the API :
Add a job_type field to WF jobs just like normal jobs.

### Current results

There is currently no way, by UI or API, to configure or launch a WF job in check mode.

### Sugested feature result

A WF job ran in check_mode should apply the check_mode to each and every job mode launched, REGARDLESS of:
- the nodes' launch type configuration in the WF (run mode or check mode)
- the nodes' own default launch type configuration (in themselves)

**If a WF launches another WF, the check_mode should be propagated recursively.**

A WF job ran in run mode (check_mode = false) should behave as usual, i.e. launching job nodes in run or check mode depending on the nodes' configurations.

Of course, the usual playbook/block/task level "check_mode: false" (which means: always run this task in run mode) should be respected, just like normal AWX jobs.

### Additional information

If one wants to implement a WF in pseudo-check_mode today, one could:
- duplicate an existing WF, and then modifying each job node in the WF to be run as check_mode (note: if this WF run other WFs, these other WFs should be duplicated as well...). When one would want to run the WF as check_mode, one would then run the duplicated WF ==> huge amount of manual and tedious work with a high probability of error, also making things more difficult to change
- (best, probably) use a custom variable indicating the pseudo-check_mode and rewrite the full playbook taking into account the value of this variable ==> greatly complexifying playbooks and not taking advantage of a native ansible feature
- create a dedicated normal AWX job and playbook, launching by API the AWX job? I am not even sure this would work in every scenario, probably not...

None of these solutions is satisfying in my opinion.
user: dylanbob
issue_13665: state: open
title: Check latest revision in remote before syncing project
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Hi,

When I set following option on a project:
<img width="547" alt="image" src="https://user-images.githubusercontent.com/38217290/223813437-81899a60-c74a-4cf6-a897-9fd9974220cd.png">
I have the impression that this is running whole project update right before spawning the job.

It would be cool that when this option is checked, instead of running whole project update, it just compares latest commit hash in remote and latest commit in local repo in controller and then goes ahead and runs project update playbook if both hashes are different. This way we would speed up job spawn. Of course, this only applies to git projects (not svn, manual or insights).

Actually this would be interesting, because for example, in my case we are using gitlab-ci to hold our playbooks, when something gets merged into the master branch a pipeline is triggered and a project update runs. If this option would be more efficient, I would not need to run a pipeline every time something is merged to master, instead I could just check this one and whole project update would only run once.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Check "Update revision on launch" on a project and it probably runs whole project update playbook instead of just comparing hashes and skipping if latest revision is already in controller.

### Current results

Check "Update revision on launch" on a project and it probably runs whole project update playbook instead of just comparing hashes and skipping if latest revision is already in controller.

### Sugested feature result

If we compare hashes for git projects instead of just running project update playbook, we can bring some efficiency, and folks don't need to setup pipelines to make sure that everything is on latest revision

### Additional information

_No response_
user: jangel97
issue_13662: state: open
title: External users still have a password if created with one before being transfered to social auth
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

This is a follow-up to #13491 

Tested with Azure AD only, don't have other social auth handy

I think you failed to account for a scenario where a user already has a password an is then being transformed into a social account. I pre-create a few users with a random password via awx.awx.user so I can give them superuser rights during install. Those are then transformed to social auth on the users first login via social_core.pipeline.social_auth.associate_by_email in SOCIAL_AUTH_PIPELINE
However I still see in DB that the password is set (pbkdf2_....) and I can still login with that password. I can however not change it anymore via UI or API (thats the change in #13491)

I am guessing the password should be invalidated during associate_by_email or something like that

### AWX version

21.13.0

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

core 2.13.3

### Operating system

rhel8

### Web browser

Firefox

### Steps to reproduce

Create a user on a system that has social auth enabled with a mail that is same as a social auth user that is not already added.

Login via social auth with that user

See that you can still log in with the password you created the user with in addition to social auth.

### Expected results

only way to login is via social auth

### Actual results

login is possible via password and social auth

### Additional information

_No response_
user: Klaas-
issue_13657: state: open
title: Unable to run 200 concurrent jobs in AWX with HA enabled. Observing one AWX instance crashes.
body: ##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - Other - AWX Task container

##### SUMMARY
<!-- Briefly describe the problem. -->
We installed AWX system version 21.4.0 in our AKS clusters. We have underlying 14 VMs AKS nodes. We are currently running with AWX replicas. We want to scale our system to run 200 concurrent jobs in AWX system. When we tried running 200 concurrent jobs, we observe that one of the AWX instance is crashing, and that instance is never coming back up(unless we delete that AWX pod). 


##### ENVIRONMENT
* AWX version: 21.4.0
* AWX install method: operator
* AWX deployment target: Kubernetes
* Operating System: Ubuntu

##### STEPS TO REPRODUCE
Spin up 3 AWX replicas with the below settings:
1. AWX task - request/limit - 7 CPUs/ 24GBs, AWX web - 2 CPUs. Guaranteed effort for AWX task pod; 3 AWX control pod replicas.
2. Start the AWX with the below settings:
SYSTEM_TASK_ABS_MEM = 16Gi, SYSTEM_TASK_ABS_CPU = 4000m, START_TASK_LIMIT = 70, JOB_WAITING_GRACE_PERIOD = 60
3. Send 200 concurrent jobs to AWX system.

We observed that it is working while sending 150 concurrent slightly big jobs(with 5 mins sleeps); however we are not able to send 200 concurrent jobs; on that note, we are seeing erroneous condition while sending even 100 concurrent small jobs(1 min sleeps).

##### EXPECTED RESULTS
Since we have a lot of underlying VMs, we expected it to load balance and reach 200 concurrent jobs (for both small and big jobs).

##### ACTUAL RESULTS
We observed that it is working while sending 150 concurrent slightly big jobs(with 5 mins sleeps); however we are not able to send 200 concurrent jobs; on that note, we are seeing erroneous condition while sending even 100 concurrent small jobs(1 min sleeps).

##### ADDITIONAL INFORMATION
While looking at awx_manage graph_jobs via awx task container, we observed that the AWX load balancer was picking a large number of jobs from its internal queue, but in every cycle, it was giving the load only to 1 AWX instance, thus overwhelming the instance. So to correct this scenario, I adjusted the start_task_limit setting to 70 jobs; sometimes when this happened even with lesser start_task_limit, I saw that when all the jobs get assigned to one replica, it was crashing, so I changed awx task container to guaranteed effort. By this setting, I was able to scale to a certain degree, after which it started failing. With more CPUs and replicas given, it was crashing faster. This was the case when we tried with 2 instances and high CPUs as well.
![image](https://user-images.githubusercontent.com/86810607/223587495-1985d187-c4fe-49bc-b1ec-7b9c75d9091c.png)

From the awx task log, it seems like the awx system does not crash immediately. I see that at first the jobs failing((Log: failed) is no longer running; reaping) and then after sometime the awx task pod crashes and doesn't recover after that. The jobs go from Pending to Waiting and get assigned a AWX node, but it does not go from waiting to running. From Prometheus/Grafana it seems like the awx task/web pods only has 20% CPU/Memory utilized, yet the jobs are not moving from waiting to running.
user: mani3887
issue_13655: state: open
title: Job Slicing depending on inventory size
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Hello,

Job slicing is a nice idea, and the fact that it is possible to prompt on launch is a good enhancement, but still not the perfect one in my use cases because inventory size can change quickly and one schedule with a specific slice can be deprecated quickly.

It could be very nice to integrate another kind of slicing, based on number of host.

Best Regards,

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Create a job template.

### Current results

You can slice the job by choosing by yourself a number of slice

### Sugested feature result

You set for exemple a "host slicing" to 10 hosts, such as when you use an inventory with 5 hosts you have only one slice with the 5 hosts, and with an inventory with 25 hosts you have 3 slices (10/10/5 or 9/8/8, it's not that important)

### Additional information

_No response_
user: Budd59
issue_13654: state: open
title: Enhance ordered associations
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

With an associations we have ordered and unordered types. If an association is ordered we currently have to remove all associations and then add them again in order. It would be nice if we could do one of two things:
1) Have a flag in the API that would say if an association was ordered or not (if not we could at least do set differences to determine what to add/remove)
2) Have an option for specifying ordering of an existing association. That way if you wanted to add an item in the middle of an existing association you could add one thing and reset the order.

See some conversation in https://github.com/ansible/awx/pull/13626 about how this was affecting the collection and some consequences of having to remove and add everything back.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Find an ordered association. Attempt to add one item in the middle of the association. All associations are removed and added back in. 

### Current results

We have to remove everything and add it all back in which is extra steps. 

### Sugested feature result

We should be able to edit the existing association and order with less calls.

### Additional information

_No response_
user: john-westcott-iv
issue_13649: state: open
title: Consider using true/false for all booleans in docs
body: 
Based on the [community decision](https://github.com/ansible-community/community-topics/discussions/120) to use `true/false` for boolean values in documentation and examples, we ask that you evaluate booleans in this collection and consider changing any that do not use `true/false` (lowercase).

See [documentation block format](https://docs.ansible.com/ansible/devel/dev_guide/developing_modules_documenting.html#documentation-block) for more info (specifically, option defaults).

If you have already implemented this or decide not to, feel free to close this issue.

---

P.S. This is auto-generated issue, please raise any concerns [here](https://github.com/ansible-community/community-team/issues/60)

user: kristianheljas
issue_13647: state: open
title: Error: awx.main.dispatch Worker failed to run task awx.main.tasks.jobs.RunJob
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

We have been running ansible jobs and there are intermittent issues where the job fails without any output. On looking into the error in the awx dashboard we see the issue (Task was maked as running but was not present in the job queue, so it has been marked as failed. ) On debugging this further we realise that the kubernetes pod is not created but we do find the following error in the awx logs:

awx.main.dispatch Worker failed to run task awx.main.tasks.jobs.RunJob

All of these jobs are running as scheduled jobs and they fail restart resulting into poor confidence on the success of these jobs.

### AWX version

21.6.0

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

Amazon Linux 2

### Web browser

Chrome

### Steps to reproduce

This is intermittent issue, It happens on any of the job. We have been running multiple jobs multiple times. Next run of the same job succeeds wihout any error

### Expected results

All jobs should succed.

### Actual results

Failed with the error((Task was maked as running but was not present in the job queue, so it has been marked as failed.)  without any output.

### Additional information

_No response_
user: nimeshjain1
issue_13646: state: open
title: Get job context in custom credential plugin
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

In order to do proper checks from our own SSH Credential API towards AWX, we need to send the job id. 
Guessing which job it could be is not an option, as it's possible that multiple jobs are running simultaneously.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

Following scenario (for my case):
- I've my own (proprietary) credential system 
- The credential system needs to know which AWX job is requesting the SSH certificate
- If the job exists and the User is verified, it will return a custom signed SSH certificate based on the permissions the user has

### Current results

The documentation for custom credential plugins is rather bad than good and looking into the code, it seems like it's currently not possible anyway.

### Suggested feature result

It should be possible to only generate certificates or share secrets from a KV store where the user is privileged to w/o a generic permission (if the backend supports that).

### Additional information

_No response_
user: tomsiewert
issue_13643: state: open
title: Job source control branch tooltip mentions workflow
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->



<!--

PLEASE DO NOT USE A BLANK TEMPLATE IN THE AWX REPO.
This is a legacy template used for internal testing ONLY.

Any issues opened will this template will be automatically closed.

Instead use the bug or feature request.

-->

##### SUMMARY
<!-- Briefly describe the problem. -->

a regular job that uses branch override mentions "workflows" in the tooltip

```
Select a branch for the workflow. This branch is applied to all job template nodes that prompt for a branch.
```

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change


##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI


##### STEPS TO REPRODUCE

<!-- For new features, show how the feature would be used. For bugs, please show
exactly how to reproduce the problem. Ideally, provide all steps and data needed
to recreate the bug from a new awx install. -->

1. create a project and enable branch override
2. create a job template with this project and specify a branch
3. run job and look at detail page

![image](https://user-images.githubusercontent.com/8745776/222547261-e3a22c68-5442-4476-a9b9-920babd2b277.png)

tool tip mentions workflow but no workflow was used

##### ENVIRONMENT
* AWX version: 21.12.0
user: fosterseth
issue_13640: state: open
title: Multiple choice default not set when undefined
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

You can't view or edit multiple choice surveys via UI when they have a undefined default (only possible if created via API). 

Multiple choice surveys can be created via API without setting a "default", which leads to them not being able to be edited or viewed via UI.


### AWX version

21.11.0

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

openshift

### Modifications

yes

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Firefox, Chrome

### Steps to reproduce

1. Create a new job template.
2. Get the ID and add a multiple choice survey without default via **API**.

```
{ "name": "Testname",
  "description": "Testdescription",
    "spec": [
        {
            "choices": "choice1\nchoice2\nchoice3",
            "question_name": "Testdefault",
            "required": true,
            "variable": "FOO_BAR",
            "type": "multiplechoice"
        }
    ]
}
```

3. Try to edit/view the survey via UI.

### Expected results

Able to edit and view the survey.

### Actual results

You can't edit or view the survey.

<img width="579" alt="error" src="https://user-images.githubusercontent.com/109966648/222108519-a66f6818-d3fe-4a7b-932f-05db15995ded.png">


### Additional information

When you create a new survey via UI it automatically sets the default to "" when nothing is selected, 
**so the problem only appears for already existing surveys and surveys created via API.**

Cause is that https://github.com/ansible/awx/blob/2dcda04a9ef214623a90d9c3e13df8d31c9cca98/awx/ui/src/screens/Template/Survey/SurveyQuestionForm.js#L126
is not caught when no default is set. That's why it gets terminated with TypeError: n.default is undefined.

An if (typeof question.default !== 'undefined') or similar before (and possibly in other places that also rely on defaults) should solve the problem.

Also the following only sets to '' if the reference is null, but not for undefined.
https://github.com/ansible/awx/blob/2dcda04a9ef214623a90d9c3e13df8d31c9cca98/awx/ui/src/screens/Template/Survey/SurveyQuestionForm.js#L117  

This also appears for multi select and sinlgle select multiple choice.
user: PurpEE
issue_13631: state: open
title: add handling for job call back status 'idle_timeout'
body: ##### SUMMARY
help distinguish between different type of timeouts

won't have any effect until 
https://github.com/ansible/ansible-runner/pull/1200
is merged

but can be merged without the PR with no harm

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - API

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 21.12.1.dev37+gb74b9ca2ea
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: TheRealHaoLiu
issue_13630: state: open
title: Projects should not update-on-launch if job gives scm_branch
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

This is a request for a nuanced performance & simplification tweak to the task manager (dependency manager) logic.

When you create a project with `scm_update_on_launch` set to `True` and launch a job that (validly) specifies `scm_branch`, it doesn't need to create an update for the update-on-launch criteria. So it shouldn't. It does now.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Here is a relevant script to reproduce:

```python
        project = factories.project(allow_override=True, scm_update_on_launch=True)
        initial_updates = project.get_related('project_updates', not__launch_type='sync').count

        job = factories.job_template(project=project, scm_branch='empty_branch').launch()
        job.wait_until_completed().assert_status('failed')

        # there should be no need to sync, because that would just update the main branch
        assert initial_updates == project.get_related('project_updates', not__launch_type='sync').count
```

Going over the setup:

 - Create a project
   - Allows jobs using this project to override the branch
   - Will update on launch of a job
 - Create a job template and launch it
   - scm_branch is specified

At issue is the final count of updates for the project. The given `assert` fails, as the update-on-launch behavior creates a new update. 


### Current results

Consider those above steps in relation to the project _sync_ behavior here:

https://github.com/ansible/awx/blob/ccaace8b30df1f4e26125ceceb5a236dcadaa1f7/awx/main/tasks/jobs.py#L664

the `if` logic after that is hard to follow, but it will _always_ hit this:

https://github.com/ansible/awx/blob/ccaace8b30df1f4e26125ceceb5a236dcadaa1f7/awx/main/tasks/jobs.py#L686-L687

As a result, it will _always_ spawn a project update

https://github.com/ansible/awx/blob/ccaace8b30df1f4e26125ceceb5a236dcadaa1f7/awx/main/tasks/jobs.py#L721-L724

And that project update will _always_ use the `scm_branch` for the _job_.

https://github.com/ansible/awx/blob/ccaace8b30df1f4e26125ceceb5a236dcadaa1f7/awx/main/tasks/jobs.py#L710-L711

The job of a project update is to update the last-known revision of the project. But as you can follow here, it _doesn't matter_ what the saved last-known revision of the project is, because this type of job will always do a _project sync_ to obtain whatever value its own branch value gives.


### Sugested feature result

The Dependency Manager just shouldn't create any more updates for this case.

### Additional information

This is tied into tech debt I want paid off in relation to 
https://github.com/ansible/awx/pull/13587, as much of that is concerned with the `scm_branch` override case, and what gets updated by the dependency manager. However, we are creating vastly more updates than what we actually need in these cases, so I want to add more exception cases to skip spawning updates.
user: AlanCoding
issue_13628: state: open
title: [code health] Breaking serializer.py into more manageable files
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
The serializer file is 5.3k lines long. Breaking it up in to separate modules will make it more manageable and maintainable.

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
21.12.1
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: jessicamack
issue_13622: state: open
title: Template execution shows as error with out errors
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

I have a simple gather facts template that does nothing other than gather facts and then cache the resulting facts.
When I run the template it finished and reports that all hosts are OK, but the template job finishes in error.

---
- hosts: all
  gather_facts: True
  tasks:
    - name: Facts have been gathered
      debug:
        msg: "Facts are now gathered"
    - name: uptime
      shell: uptime
      register: out
    - debug: var=out.stdout_lines
...

Why does the template finish in error?
Where is the actual error message?

### AWX version

AWX 21.9.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

ansible [core 2.12.5.post0]

### Operating system

AWS Linux 2

### Web browser

Chrome

### Steps to reproduce

run play

### Expected results

ok == successful

### Actual results

ok == error

### Additional information

_No response_
user: r1200gsdave
issue_13613: state: open
title: Job outputs are not respecting the verbosity, even after setting verbosity to Normal (0). it is showing all env variables and secrets in the JOB STDOUT output.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Executing job template with verbosity set to Normal results in verbose output with env variabels and secrets being exposed

Job outputs are not respecting the verbosity, even after setting verbosity to Normal (0). it is showing all env variables and secrets in the JOB STDOUT output.

Job Details:
Started 2/20/2023, 7:05:39 AM
Finished 2/20/2023, 7:06:40 AM
Job Template configure cfg project
Job Type Playbook Run
Inventory local_inventory
Revision 76xxxxx38
Playbook customer_cfg_repo.yml
Verbosity 0 (Normal)

JOB OUTPUT:
time="2023-02-20T06:06:31-06:00" level=warning msg="Failed to decode the keys ["storage.options.override_kernel_check"] from "/etc/containers/storage.conf"."
{"status": "starting", "runner_ident": "227", "command": ["ansible-playbook", "-u", "root", "--ask-vault-pass", "-e", "@/runner/env/tmp08p7vj5u", "-i", "/runner/inventory/hosts", "-e", "@/runner/env/extravars", "customer_cfg_repo.yml"], "env": {"KUBERNETES_SERVICE_PORT_HTTPS": "443", "KUBERNETES_SERVICE_PORT": "443", "AWX_NP_SERVICE_PORT_80_TCP": "tcp://172.21.84.78:80", "AWX_OPERATOR_CONTROLLER_MANAGER_METRICS_SERVICE_SERVICE_HOST": "172.21.34.213", "HOSTNAME": "automation-job-227-2km82", "PWD": "/runner", "AWX_OPERATOR_CONTROLLER_MANAGER_METRICS_SERVICE_PORT_8443_TCP_PORT": "8443", "AWX_NP_SERVICE_PORT_80_TCP_PORT": "80", "AWX_NP_SERVICE_SERVICE_PORT": "80", "AWX_OPERATOR_CONTROLLER_MANAGER_METRICS_SERVICE_PORT_8443_TCP_PROTO": "tcp", "HOME": "/home/runner", "KUBERNETES_PORT_443_TCP": "tcp://172.21.0.1:443", "AWX_NP_SERVICE_SERVICE_PORT_HTTP": "80", "AWX_OPERATOR_CONTROLLER_MANAGER_METRICS_SERVICE_PORT": "tcp://172.21.34.213:8443", "TERM": "xterm", "AWX_NP_SERVICE_PORT": "tcp://172.21.84.78:80", "AWX_OPERATOR_CONTROLLER_MANAGER_METRICS_SERVICE_SERVICE_PORT_HTTPS": "8443", "AWX_NP_SERVICE_SERVICE_HOST": "172.21.84.78", "AWX_OPERATOR_CONTROLLER_MANAGER_METRICS_SERVICE_SERVICE_PORT": "8443", "SHLVL": "0", "KUBERNETES_PORT_443_TCP_PROTO": "tcp", "KUBERNETES_PORT_443_TCP_ADDR": "172.21.0.1", "AWX_NP_SERVICE_PORT_80_TCP_ADDR": "172.21.84.78", "AWX_OPERATOR_CONTROLLER_MANAGER_METRICS_SERVICE_PORT_8443_TCP": "tcp://172.21.34.213:8443", "KUBERNETES_SERVICE_HOST": "172.21.0.1", "KUBERNETES_PORT": "tcp://172.21.0.1:443", "KUBERNETES_PORT_443_TCP_PORT": "443", "AWX_NP_SERVICE_PORT_80_TCP_PROTO": "tcp", "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "AWX_OPERATOR_CONTROLLER_MANAGER_METRICS_SERVICE_PORT_8443_TCP_ADDR": "172.21.34.213", "LC_CTYPE": "C.UTF-8", "ANSIBLE_FORCE_COLOR": "True", "ANSIBLE_HOST_KEY_CHECKING": "False", "ANSIBLE_INVENTORY_UNPARSED_FAILED": "True", "ANSIBLE_PARAMIKO_RECORD_HOST_KEYS": "False", "AWX_PRIVATE_DATA_DIR": "/tmp/awx_227_5w6ficbc", "JOB_ID": "227", "INVENTORY_ID": "35", "PROJECT_REVISION": "76xxxxx38", "ANSIBLE_RETRY_FILES_ENABLED": "False", "MAX_EVENT_RES": "700000", "AWX_HOST": "https://awx-XXXXXXXXXXXXXX.cloud", "ANSIBLE_SSH_CONTROL_PATH_DIR": "/runner/cp", "ANSIBLE_COLLECTIONS_PATHS": "/runner/requirements_collections:/.ansible/collections:/usr/share/ansible/collections", "ANSIBLE_ROLES_PATH": "/runner/requirements_roles:/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles", "AV_TOKEN": "D4xxxxx99", "LOGDNA_KEY": "4axxxxxab", "AV_TENANT_ID": "85xxxxx25", "AWX_AUTH_KEY": "bDxxxxxME", "GITHUB_TOKEN": "0fxxxxxd3", "FLASK_API_KEY": "eyxxxxxX0.


### AWX version

21.5.0

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.12.5

### Operating system

Linux

### Web browser

Firefox

### Steps to reproduce

Executing any job template with verbosity set to Normal results in the output with env variabels as well as all extra variables and secrets being exposed on the job stdout output.

### Expected results

Executing any job template with verbosity set to Normal should result in Anisble playbook output with any env variiables and secrets being exposed in the job output

### Actual results

Executing any job template with verbosity set to Normal results in the output with env variabels as well as all extra variables and secrets being exposed on the job stdout output.

### Additional information

_No response_
user: rupadhy3
issue_13610: state: open
title: Ad-hoc jobs are not listed in jobs summary for single host
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

I noticed that ad-hoc jobs that you can run from inventory using "run command" button isn't later visible in job history for single host. In the scenario I select one host and run shell command. It is listed correctly under: `#/jobs` and `#/inventories/inventory/1/jobs`, but it's missing from `#/inventories/inventory/1/hosts/49/jobs`, where `49` is the host that command was executed on.

### AWX version

21.11.0

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

ubuntu 22.04

### Web browser

Firefox

### Steps to reproduce

Run ad-hoc command and visit jobs history for single host (that ad-hoc command was executed on). The ad-hoc job is missing, while being present in other jobs listings.

### Expected results

Ad-hoc job present in single host job history.

### Actual results

The ad-hoc job is missing in single host job history, while being present in other jobs listings.

### Additional information

_No response_
user: mbuczkowski-gm
issue_13579: state: open
title: [Schedules] Run every {interval, plural, one ...
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Scheduling shows interval placeholders instead of final values

### AWX version

21.12.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

minikube

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Firefox

### Steps to reproduce

Create new schedule (Daily) with specific start time, Save:

![grafik](https://user-images.githubusercontent.com/87267/219276821-892567d2-c503-464b-a197-b56c29ac452d.png)


### Expected results

Correct values

### Actual results

Placheolder `{interval, plural, one {{interval} day} other {{interval} days}}` appear

### Additional information

_No response_
user: Commifreak
issue_13570: state: open
title: Add fields to logs sent to logstash
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

When a job is launched and AWX sends logs to logstash (I don't know if this happens with other log aggregators), I think it would be useful to have some fields added. For instance:

- A field that shows the organization the job template belongs to
- A field that shows the organization and/or team the user who launches them belongs to

The second one might be more tricky, but the first one is something that appears in the JSON from the API under summary_fields.organization.name (I don't know if this is somehow related, please forgive my ignorance on this)

Besides that, I have found the following happens:

- When a job is launched, an event is sent notifying the job is "pending". But no event is received when the job ends. If we filter by field summary_fields.job.status:*, all results are either "pending" or "new", but never a "finished".
- When a job is launched directly from a job template, it includes information about the user that launched it. However, if a job template is launched from a workflow job, this information isn't included. In the following images you can see the difference between some of the information received in elastic from two jobs launched either ways:

When launched from workflow job:

![image](https://user-images.githubusercontent.com/57350196/218777927-1c876c9f-02b3-4213-9bfd-a0d76816dfca.png)

When launched from job template:

![image](https://user-images.githubusercontent.com/57350196/218777763-b3e460f1-52e2-4dd0-8c06-e30d3be0c79a.png)

- When a job is launched from a schedule, it doesn't include user information either, that could be coherent with what JSON in API shows, but it could be useful if, as that JSON, it at least showed that the job is scheduled.




### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

Launch jobs from AWX either directly from job template or through a workflow job

### Current results

Some information does not appear in logstash logs that can be useful

### Sugested feature result

Some more information appears in logstash logs

### Additional information

_No response_
user: anasaizg
issue_13568: state: open
title: Survey Inheritance button between workflow and template
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Hello,

It could be nice to have the choice between filling the survey in the node or choose to inherit the survey in the workflow.

Best Regards,

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Create a template with a survey enabled and at least one required field to fill.

Create a workflow, adding the template as a node.

### Current results

When adding the node, you have to fill the field as it is required.

### Sugested feature result

When adding the node, you have to fill the field as it is required OR choose to inherit the node survey into the workflow survey.

### Additional information

_No response_
user: Budd59
issue_13567: state: open
title: Adding Project tab in Credential view
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

When you go in a credential, you can't see project linked to this credential (especially for Source Control credential)

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

You load one Source Control credential (ex Git)

### Current results

You only have a tab for linked Job Templates

### Sugested feature result

It could be nice to have a tab for Project too (especially for Source Control credential)

### Additional information

_No response_
user: Budd59
issue_13566: state: open
title: Organization Filter
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Hello,

That could be very helpful if it was possible to use a main filter on Organizations on loaded page.

For example, I have access to 5 organizations but today I work only on two of them, so instead of setting a filter each time I load my page (jobs, inventories, templates, projects), I could use a main filter on the top of the page (with a dropdown list with checkbox near notification pending button).

Moreover, this main filter could be saved as a favorite too.

Is it possible to deploy this feature ?

Thank you in advance for your answer.

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

You load a page, like templates (possible with other objects, such as jobs, organizations, inventories, credentials)

### Current results

You see all templates that you can access, without predefined filter.

### Sugested feature result

You see filtered templates that you can access, with predefined filter set earlier on the top of your page.

### Additional information

_No response_
user: Budd59
issue_13565: state: open
title: Deleting EE in use via UI results in Error: TypeError: e.data is undefined
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Removing an execution environment that is used by a resource results in the following error:

```
Error: TypeError: e.data is undefined
i$/t/<@https://awx.example.com/static/js/main.f71c4091.js:2:1827355
u@https://awx.example.com/static/js/main.f71c4091.js:2:923537
9727/c/a._invoke@https://awx.example.com/static/js/main.f71c4091.js:2:923326
9727/k/</<@https://awx.example.com/static/js/main.f71c4091.js:2:923966
fr@https://awx.example.com/static/js/main.f71c4091.js:2:1042669
o@https://awx.example.com/static/js/main.f71c4091.js:2:1042875
```
![grafik](https://user-images.githubusercontent.com/51952982/218702143-c6d27356-e203-474a-9934-7b6bdd100cf0.png)


### AWX version

21.10.2

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.12.2

### Operating system

Debian 11

### Web browser

Firefox

### Steps to reproduce

I couldn't reproduce it in another environment. If someone could explain what the error means, it might give a hint what's wrong here.

### Expected results

An overlay window that shows where and how often the EE is used.
![grafik](https://user-images.githubusercontent.com/51952982/218704402-fd9348d2-881c-4c75-91cd-d0bd4e435992.png)


### Actual results

```
Error: TypeError: e.data is undefined
```

### Additional information

_No response_
user: anxstj
issue_13561: state: open
title: Editing Schedules will delete PROMPT initial values
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

If job template contains survey and user tries to edit existing schedule it will reset initial prompt values

### AWX version

21.10.2

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce


https://user-images.githubusercontent.com/6725070/218504560-7eba087d-6891-4e0a-aa2b-6c03165e8efc.mov



### Expected results

Preserve initial values

### Actual results

Initial values are deleted

### Additional information

_No response_
user: yuliym
issue_13558: state: open
title: Adding sonarcloud integration
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
This PR enables our pull requests and merge to kick off a sonarcloud analysis. This has been combined with the api-test check. We now run the tests with `make test_coverage` which will generate a coverage report in addition to running the tests. If the PR or Merge is happening in the ansible/awx repo we will also kick off a sonarcloud analysis. 

The results can be seen in our public sonarcloud repo: https://sonarcloud.io/project/pull_requests_list?id=ansible_awx

At this time, the sonarcloud analysis will not block any PR merging, its more of a reference for us. In the future we would like to include notification from sonarcloud into the PR and potentially also gate the code merge based on the analysis.

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
- Other

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```

```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: john-westcott-iv
issue_13557: state: open
title: Workflow_template to return a subset list of job templates that were part of it
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Can you please return more fields with the `workflow_jobs get` - job ids of subset job templates ids that were part of this workflow template?
Currently I get these fields:
```
{
     "id": 766725,
     "type": "workflow_job",
     "url": "/api/v2/workflow_jobs/766725/",
     "summary_fields": {
          "organization": {
               "id": 4,
               "name": "Networking",
               "description": ""
          },
          "inventory": {
               "id": 4,
               "name": "prod",
               "description": "Production Devices",
               "has_active_failures": false,
               "total_hosts": 334,
               "hosts_with_active_failures": 0,
               "total_groups": 16,
               "has_inventory_sources": true,
               "total_inventory_sources": 1,
               "inventory_sources_with_failures": 0,
               "organization_id": 4,
               "kind": ""
          },
          "workflow_job_template": {
               "id": 438,
               "name": "Failed hosts workflow",
               "description": ""
          },
          "unified_job_template": {
               "id": 438,
               "name": "Failed hosts workflow",
               "description": "",
               "unified_job_type": "workflow_job"
          },
          "created_by": {
               "id": 7,
               "username": "foo",
               "first_name": "Indira",
               "last_name": "K"
          },
          "modified_by": {
               "id": 7,
               "username": "foo",
               "first_name": "Indira",
               "last_name": "K"
          },
          "user_capabilities": {
               "delete": true,
               "start": true
          },
          "labels": {
               "count": 0,
               "results": []
          }
     },
     "created": "2023-02-10T22:10:18.850343Z",
     "modified": "2023-02-10T22:10:19.305410Z",
     "name": "Failed hosts workflow",
     "description": "",
     "unified_job_template": 438,
     "launch_type": "manual",
     "status": "successful",
     "failed": false,
     "started": "2023-02-10T22:10:19.301606Z",
     "finished": "2023-02-10T22:10:36.209895Z",
     "canceled_on": null,
     "elapsed": 16.908,
     "job_args": "",
     "job_cwd": "",
     "job_env": {},
     "job_explanation": "",
     "result_traceback": "",
     "workflow_job_template": 438,
     "extra_vars": "{\"commit_message\": \"test\"}",
     "allow_simultaneous": false,
     "job_template": null,
     "is_sliced_job": false,
     "inventory": 4,
     "limit": "albq-cr6",
     "scm_branch": null,
     "webhook_service": "",
     "webhook_credential": null,
     "webhook_guid": ""
}
```

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

awx --conf.host https://tower.es.net --conf.username foo --conf.password "bar" workflow_jobs get 766725

### Current results

{
     "id": 766725,
     "type": "workflow_job",
     "url": "/api/v2/workflow_jobs/766725/",
     "summary_fields": {
          "organization": {
               "id": 4,
               "name": "Networking",
               "description": ""
          },
          "inventory": {
               "id": 4,
               "name": "prod",
               "description": "Production Devices",
               "has_active_failures": false,
               "total_hosts": 334,
               "hosts_with_active_failures": 0,
               "total_groups": 16,
               "has_inventory_sources": true,
               "total_inventory_sources": 1,
               "inventory_sources_with_failures": 0,
               "organization_id": 4,
               "kind": ""
          },
          "workflow_job_template": {
               "id": 438,
               "name": "Failed hosts workflow",
               "description": ""
          },
          "unified_job_template": {
               "id": 438,
               "name": "Failed hosts workflow",
               "description": "",
               "unified_job_type": "workflow_job"
          },
          "created_by": {
               "id": 7,
               "username": "foo",
               "first_name": "Indira",
               "last_name": "K"
          },
          "modified_by": {
               "id": 7,
               "username": "foo",
               "first_name": "Indira",
               "last_name": "K"
          },
          "user_capabilities": {
               "delete": true,
               "start": true
          },
          "labels": {
               "count": 0,
               "results": []
          }
     },
     "created": "2023-02-10T22:10:18.850343Z",
     "modified": "2023-02-10T22:10:19.305410Z",
     "name": "Failed hosts workflow",
     "description": "",
     "unified_job_template": 438,
     "launch_type": "manual",
     "status": "successful",
     "failed": false,
     "started": "2023-02-10T22:10:19.301606Z",
     "finished": "2023-02-10T22:10:36.209895Z",
     "canceled_on": null,
     "elapsed": 16.908,
     "job_args": "",
     "job_cwd": "",
     "job_env": {},
     "job_explanation": "",
     "result_traceback": "",
     "workflow_job_template": 438,
     "extra_vars": "{\"commit_message\": \"test\"}",
     "allow_simultaneous": false,
     "job_template": null,
     "is_sliced_job": false,
     "inventory": 4,
     "limit": "albq-cr6",
     "scm_branch": null,
     "webhook_service": "",
     "webhook_credential": null,
     "webhook_guid": ""
}

### Sugested feature result

Something like this to be reported back:
```
     "visualizer": [
          "job_template": {
               "id": 766726,
               "name": "Failed-hosts",
               "type": job,
               "status": "failed",
               "created": "2023-02-10T22:10:19.4578",
               "elapsed": "4.371"
          },
          "job_template": {
               "id": 766729,
               "name": "Failed-hosts-part2 ",
               "type": job,
               "status": "successful",
               "created": "2023-02-10T22:10:28.1055",
               "elapsed": "4.141"
          }
     ]
```

The workflow 766725 consisted of these 2 job templates: 766726 and 766729.

### Additional information

_No response_
user: indirakas
issue_13554: state: open
title: Add option to textarea survey input to automatically convert to list
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

A common use case with textarea is free form list input. This requires the extra step of calling .splitlines() or .split('/n') on the resulting variable in the playbook which is easy enough but extra steps. There should be a check box when configuring the survey question to automatically split the lines into a list potentially also to trim the lines.

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [x] Other

### Steps to reproduce

Provide multiple lines of text to a textarea question in a survey.

### Current results

Currently there is no configuration options and if the input is being utilized as a list extra steps are required to split the values within the playbook.

### Sugested feature result

Two configuration check boxes when adding a textarea question to a survey.
1) Convert to List. This sets the variable to be a list of the split lines not a string with new line characters.
2) Trim lines. Remove whitespace around lines.

### Additional information

_No response_
user: MKletz
issue_13553: state: open
title: [tech-debt][performance] Avoid contextually inappropriate references to UJT.last_job
body: ##### SUMMARY
Related to https://github.com/ansible/awx/issues/13512

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API



user: AlanCoding
issue_13551: state: open
title: Project update, updates against a single controller instance
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Hi,

When I click project update, project update runs for a given controller. Then, when I click on launch button for a job, another controller instance gets selected (not 100% of the times), and a "hidden" project update runs for my job, delaying the time the job takes and sometimes "hidden" project update fails and customers complain.

My team and me are wondering why it could not be the other way around. If I run a project update, I would expect that same revision to be present in all electable controller instances. Is there any specific reason for this?

Thanks, 

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

run a job and it will trigger a project update on the "background"

### Current results

run a job and it will trigger a project update on the "background"

### Sugested feature result

only update revision when click on project update

### Additional information

_No response_
user: jangel97
issue_13549: state: open
title: SAML Mapping slows down our automation
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Hello,

We are managing the access to our AAP instance via LDAP and SAML. We have around 200 organisations and every organisation is related to an LDAP group. 

Every time we do a change in a given organisation, we run our SAML update playbook. The issue is that this playbook is slow because we have to build a giant JSON with all the mapping for organisations and users. (More than 200 LDAP queries, iterating per all organisations to build the mapping, and all that).

My team and me are wondering if product could handle SAML access differently, for example, instead of pushing a giant JSON to update the SAML mapping for all organisations. Could this be reworked in a way we do not have to push the giant JSON?

For example, instead of pushing whole JSON, it would be cool if we pushed just a small object, updating the access for only a given group. 

What do you think?

### Select the relevant components

- [X] UI
- [X] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

curl -X PATCH https://<aap instance>/api/v2/settings/saml/ --data-raw <json with whole organisation or team mapping>

### Current results

This way makes it very slow for us to update saml mapping for a given organisation

### Sugested feature result

instead of pushing whole json, by pushin a smaller object it would be faster just to update chunks of saml mapping

### Additional information

_No response_
user: jangel97
labels: component:authentication: For issues related to authentication
issue_13546: state: open
title: awx collection: allow select credential_type of a credential for JT and WFJT
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

In AWX you can have N credentials with the same name and you can differentiate through its credential_type when you want to choose it in a JT or WFJT.

However, you can do that through the collection because you can only send it the credential name. It should have the possibility to choose the credential type as well as the credential name-

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Create two credentials with the same name but different types. You try to create a JT through the collection with this credential name.

### Current results

The collection task will fail.

### Sugested feature result

It should be able to choose the credential type with the collection and then, it won't fail.

### Additional information

_No response_
user: adonisgarciac
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_13544: state: open
title: publish awx tower logs on splunk
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

i am working on eks cluster, deployed AWX 21.11.0

configured splunk:
![image](https://user-images.githubusercontent.com/122636857/217825543-4e1f9c78-21e3-462b-96e7-cea088a16deb.png)
there are 4 containers:
![image](https://user-images.githubusercontent.com/122636857/217825617-23fde57d-39a0-4a58-8b58-645383571dd5.png)

checked manually for /var/log/tower and /var/log/supervisor directories, but they do Not exist.

my understanding is: at least the above directories should exist even though there are no any sample events 

### AWX version

AWX 21.11.0

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

ansible-core==2.14.2 ansible-runner==2.3.1

### Operating system

Linux awx-5f7478f89b-qxwsk 5.4.209-116.367.amzn2.x86_64 #1 SMP Wed Aug 31 00:09:52 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

### Web browser

Chrome

### Steps to reproduce

here is my settings:
![image](https://user-images.githubusercontent.com/122636857/217826734-cdc6f8d0-3bf3-452d-a886-70b01ec4d60c.png)


### Expected results

to see any kind of events on splunk 
for now , have not created any index for aws in splunk.
my understanding here is, default index should be able to capture any events of awx

### Actual results

No results

### Additional information

_No response_
user: khushi5969
issue_13536: state: open
title: Missing doc for how to run unit test 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

There's no documentation for how to run the unit test

### AWX version

awx: 21.11.1.dev65+g33c1968210

### Select the relevant components

- [ ] UI
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

scan through docs dir no mention of how to run unit test and how to contribute to unit test for awx

### Expected results

have doc

### Actual results

not have doc

### Additional information

_No response_
user: TheRealHaoLiu
issue_13529: state: open
title: Config and monitoring
body: ### This PR is meant to demonstrate utilization of monitoring and query statistics collection directly in PostgreSQL. This PR also demonstrates a much more efficient means of finding and updating data in a partitioned table.

##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->

This change adds database changes to enable monitoring of query performance via `pg_stat_statements` and is designed to work with a new database user named `db_monitor`. 

This change also adds an enhancement to `JobEvent.save()` that will truncate the `job_created` field (table partitioning key; datetime.datetime type) to the hour. The `save()` method will call `update_or_create()` instead of `super().save()`

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->

 - New or Enhanced Feature

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - PostgreSQL

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 21.11.1.dev6+g8574bf1594
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

###### PostgreSQL

This change will create a new config file for the engine instance. This config file will first tell PostgreSQL to load and consume the original config file, then apply all configurations from a mounted directory. These configs will be applied in lexicographic order of the file name. Also, initialization scripts are mounted in the DB container that will be executed only on creating a new database. For existing databases, a Django migration file has been added.

The result of these changes is:
* A new database role (user) named `db_monitor` is created that can only utilize public.pg_stat_statements and should not be able to perform any CRUD action against an application table.
* The `pg_stat_statements` shared library will be preloaded for docker container PostgreSQL
* The `pg_stat_statements` extension will be installed in the `public` schema.

###### Grafana

A development-only (ie: must not visible to support or other outside entities) dashboard will be created that will live-query the docker PostgreSQL database. The datasource for this database will also be created.

This dashboard includes as its top panel, a table rendered view of live-query of the pg_stat_statements data from the configured datasource. This is a tool that could be helpful to not only clients, but we could also simply select that data to have it exported to support for triage. This panel in the dashboard will show the mean execution time and max execution time (in milliseconds) of a statement, the number of times that statement has been executed and the parameterized form of that statement. This should not leak any customer data as the parameters are not supplied. Only the placeholders for those parameters are listed.


<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: Red-HAP
issue_13523: state: open
title: Inventory plugin for OCP Virtualization
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Hi,

I did not find a way to use dyamic inventory on AAP for OCP Virt.

I tried to create an Inventory Source using the community.okd.openshift inventory plugin, in order to do so, I created added an inventory sync from a project.

```
---
plugin: community.okd.openshift
connections:
  - namespaces:
      - jmorenas-dev
    verify_ssl: false
```

This plugin requires a kubeconfig or a token, but, since I can only use project inventory sync, i can't land token or kubeconfig for this inventory sync.

It would be cool if there was an inventory sync the type of which is OpenShift Virtualization.

### Select the relevant components

- [X] UI
- [X] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Try setting this in AAP and get VMs from OCP Virt https://docs.ansible.com/ansible/latest/collections/community/okd/openshift_inventory.html#ansible-collections-community-okd-openshift-inventory

### Current results

Not possible to use dynamic inventory for ocp virt / kubevirt on AAP/AWX

### Sugested feature result

Not possible to use dynamic inventory for ocp virt / kubevirt on AAP/AWX

### Additional information

_No response_
user: jangel97
issue_13508: state: open
title: Execution Node not listening
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Setting up a Execution node to work with AWX deployed using the AWX-operator It will not setup following the procedure outlined in the docs (https://github.com/ansible/awx/blob/devel/docs/execution_nodes.md#create-instance-in-awx).  

I believe the issue is that its not listening on the tcp port it is only listening on the tcp6 port of 27199. 

```text
[rocky@ip-10-0-33-92 34.200.239.151_install_bundle]$ sudo netstat -plunt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1089/sshd: /usr/sbi
tcp6       0      0 :::27199                :::*                    LISTEN      17767/receptor
tcp6       0      0 :::22                   :::*                    LISTEN      1089/sshd: /usr/sbi
udp        0      0 127.0.0.1:323           0.0.0.0:*                           688/chronyd
udp6       0      0 ::1:323                 :::*                                688/chronyd
```

### AWX version

21.11.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

latest

### Operating system

rocky

### Web browser

_No response_

### Steps to reproduce

Setup execution node using IP address.  Following docs found here https://github.com/ansible/awx/blob/devel/docs/execution_nodes.md#create-instance-in-awx

(hosted in AWS)
For testing allow 0.0.0.0/0 to 27199 in the Security Group.

Host has no Firewall install so no modifications needed. 

### Expected results

The AWX controller should be able to communicate with instance as soon as setup playbook is complete.

### Actual results

Node is unavailable in controller.  Also when I try to netcat to the port to validate it times out.

```text
nc -v 34.200.239.151 27199                                   
nc: connectx to 34.200.239.151 port 27199 (tcp) failed: Operation timed out
```

### Additional information

_No response_
user: satellite-no
issue_13504: state: open
title: [constructed-inventory] propagating inventory source update to source inventory for constructed inventory
user: TheRealHaoLiu
issue_13488: state: open
title: Make GH Release workflows more robust to failure
body: ##### SUMMARY
<!-- Briefly describe the problem. -->
some pain points

- Scenario: Stage.yml passes fine, but promote.yml fails. We have no good way to quickly fix promote.yml and run JUST promote.yml. Rather need to run full stage process again (after manually deleting artifacts from stage.yml)
- If promote publishes the awx collection, but hits error on later step, then re-running workflow again fails because the awx collection was already published.
- Developing on workflows and testing on own fork is not trivial (credentials and hard coded repos) 


##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature


##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API

user: fosterseth
issue_13486: state: open
title: Provide infrastructure diagram
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Hello!

Per IRC conversation with @TheRealHaoLiu , I am requesting that the AWX project create and maintain a high-level diagram of the AWX infrastructure, similar to [this diagram](https://www.wizardx.guru/wp-content/uploads/2020/07/awx_architecture.png) but more up-to-date ;)



### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

N/A

### Current results

To the best of my knowledge, there is no definitive high-level diagram of the AWX current infrastructure.

### Sugested feature result

High-level diagram of the AWX infrastructure created and maintained by AWX project.

### Additional information

_No response_
user: inflatador
issue_13485: state: open
title: AWX Results via API contain ANSI color codes
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

When ansible is set to produce colored output the API also returns ANSI-Color codes in stdout/stderr properties. To be able to automatically parse API results those should never contain ANIS-Color codes.

There are no ansi-colors returned when a job is started to not have ansible colors but UI will then also show no colors, which is not desireable.

### AWX version

21.7

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.11.

### Operating system

linux

### Web browser

Chrome

### Steps to reproduce

1. Start an ansible template in AWX with colored output using API
2. Fetch the event info for your job using https://<awx-base-url>/api/v2/project_updates/<your job id>/events/?failed=true&order_by=counter
3. see stdout / stderr properties in json


### Expected results

 stdout": "failed: [localhost]......."

### Actual results

stdout": "**\u001b[0;31m**failed: [localhost]......."


### Additional information

_No response_
user: MaxBidlingmaier
issue_13481: state: open
title: Set CONN_MAX_AGE to better integrate with databases that time out idle connections
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

I've had a few questions posed to me lately about how long we keep database connections open. I am still learning about the motivations behind the questions, but I think they stem from the fact that some managed postgres services on cloud providers set timeouts in postgres such as https://www.postgresql.org/docs/14/runtime-config-client.html#GUC-IDLE-SESSION-TIMEOUT or people who use services like PGBouncer have settings that sever idle connections.

We addressed a huge source of idle database connections thanks to https://github.com/ansible/awx/pull/11745 
However, we still have a few other sources of persistent connections that can sit idle for indefinite periods of time.

These are:
- the callback receiver has persistent database connections that it may recover if they get broken, but  in general never closes them.
- dispatch workers doing tasks other than running jobs leave connections open, @AlanCoding mentioned "dispatcher tasks close connections when they start, not when they finish. This seemed wrong to me, but I have not fixed it."

We may consider setting  CONN_MAX_AGE https://docs.djangoproject.com/en/4.0/ref/databases/#persistent-connections to take advantage of Django's own logic for killing/restablishing database connections. 

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

We can examine how long we are keeping database connections open:

```
 SELECT 
    pidplication_name
    ,datnamehostname
    ,usenameport
    ,application_name
    ,client_hostname
    ,client_port
    ,backend_startity
    ,query_start
    ,query  e = 'awx' ORDER BY backend_start;
FROM pg_stat_activity
WHERE usename = 'awx' ORDER BY backend_start;
```

### Current results

right now you would see connnections from the callback receivers hanging out for basically forever, and a dispatcher with idle workers would also keep database connections open after doing work, but if they never pick up anything new they just keep the old connection.

### Sugested feature result

Recycle connections after a configurable amount of time by setting CONN_MAX_AGE

this relates to other work that could happen to in general make controller more reselient to losing a connection and re-establishing it.

### Additional information

_No response_
user: kdelee
issue_13480: state: open
title: Wrong IP logged at login
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

The logger gets wrong IP, when there is a proxy server (it ignores the HTTP_X_FORWARDED_FOR header).

### AWX version

21.11.0

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

- K8s
Configured with Generic Ingress Controller.

- AWX
1. Configure the logger
2. Add HTTP_X_FORWARDED_FOR to REMOTE_HOST_HEADER (Miscellaneous System)
3. Try to login

### Expected results

The logger says: `User XXX logged in from [REAL IP]`

### Actual results

The logger says: `User XXX logged in from [PROXY IP]`

### Additional information

I tried to fix it with this PR (https://github.com/ansible/awx/pull/13382), but I don't know if it's the best solution.
user: jordicasas1987
issue_13472: state: open
title: Ansible automation platform, proxy and environment variables
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

`project_update` should receive proxy settings from the job template. So for instance, using a controller node without modifying global job settings one should be able to set the following environment variables:

{
  "HTTP_PROXY": "http://proxy.here:3128/",
  "HTTPS_PROXY": "http://proxy.here:3128/"
}

In the template and the [project_update](https://github.com/ansible/awx/blob/devel/awx/playbooks/project_update.yml) playbook should respect those proxy values so scm's downstream can pull source artifacts from where ever required.

### AWX version

4.1.0

### Select the relevant components

- [ ] UI
- [X] API
- [X] Docs
- [ ] Collection
- [X] CLI
- [X] Other

### Installation method

N/A

### Modifications

no

### Ansible version

2.13.3

### Operating system

rhel8

### Web browser

_No response_

### Steps to reproduce

Setup a proxy and then spin an automation platform remote node. Set the proxy variables via global job settings and things work. Then set the proxy settings via the actual job template and it fails. Specifically at project_update

### Expected results

When the remote environment variables for proxy support are set in the template variables they should be apart of project_update's run BEFORE attempting to pull down the code.

### Actual results

We get a failure because the node in question isn't able to route traffic through the proxy.

### Additional information

This is not container group related and is related to actual private data center instances. 
user: cwarner-mdsol
issue_13469: state: open
title: Job failed with just error and without log output
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Clean deployment and I use "Demo Job Template". Job failing and no output except "Finished":
![Screenshot 2023-01-24 at 4 39 47 PM](https://user-images.githubusercontent.com/4974260/214453907-bdff6c0f-5c6a-46ee-8316-7b9e307e6f49.png)
![Screenshot 2023-01-24 at 4 40 03 PM](https://user-images.githubusercontent.com/4974260/214453935-986c6be5-26fe-4e7a-b069-1b78f90a3f00.png)

In "**awx-ee**" container logs I see:
```
DEBUG 2023/01/24 23:27:28 Client connected to control service @
DEBUG 2023/01/24 23:27:28 Control service closed
DEBUG 2023/01/24 23:27:28 Client disconnected from control service @
DEBUG 2023/01/24 23:27:28 Client connected to control service @
DEBUG 2023/01/24 23:27:29 Kubernetes version v1.23.15 is at least v1.23.14, using reconnect support
DEBUG 2023/01/24 23:27:29 [4Pmqfss9] streaming stdout with reconnect support
DEBUG 2023/01/24 23:27:29 [4Pmqfss9] Detected EOF for pod my-ns/automation-job-6-njfz8. Will retry 5 more times.
DEBUG 2023/01/24 23:27:29 [4Pmqfss9] Detected EOF for pod my-ns/automation-job-6-njfz8. Will retry 4 more times.
DEBUG 2023/01/24 23:27:29 [4Pmqfss9] Detected EOF for pod my-ns/automation-job-6-njfz8. Will retry 3 more times.
DEBUG 2023/01/24 23:27:29 [4Pmqfss9] Detected EOF for pod my-ns/automation-job-6-njfz8. Will retry 2 more times.
DEBUG 2023/01/24 23:27:29 [4Pmqfss9] Detected EOF for pod my-ns/automation-job-6-njfz8. Will retry 1 more times.
DEBUG 2023/01/24 23:27:30 Sending service advertisement: &{awx-69c867d6c6-vjqc4 control 2023-01-24 23:27:30.066549844 +0000 UTC m=+6185.772568701 1 map[type:Control Service] [{local false} {kubernetes-runtime-auth false} {kubernetes-incluster-auth false}]}
DEBUG 2023/01/24 23:27:30 Stdout complete - closing channel for: 4Pmqfss9
WARNING 2023/01/24 23:27:30 Could not read in control service: read unix /var/run/receptor/receptor.sock->@: use of closed network connection
DEBUG 2023/01/24 23:27:30 Client disconnected from control service @
WARNING 2023/01/24 23:27:30 Could not close connection: close unix /var/run/receptor/receptor.sock->@: use of closed network connection
DEBUG 2023/01/24 23:27:30 Client connected to control service @
DEBUG 2023/01/24 23:27:30 Control service closed
DEBUG 2023/01/24 23:27:30 Client disconnected from control service @
DEBUG 2023/01/24 23:27:36 Client connected to control service @
DEBUG 2023/01/24 23:27:36 Control service closed
DEBUG 2023/01/24 23:27:36 Client disconnected from control service @
DEBUG 2023/01/24 23:27:49 Client connected to control service @
DEBUG 2023/01/24 23:27:49 Control service closed
DEBUG 2023/01/24 23:27:49 Client disconnected from control service @
```

"**awx-task**" log:
```
2023-01-24 23:27:28,072 INFO     [5d337ea185d3432397012a6188cd4d12] awx.analytics.job_lifecycle job-6 waiting
2023-01-24 23:27:28,248 INFO     [5d337ea185d3432397012a6188cd4d12] awx.analytics.job_lifecycle job-6 pre run
2023-01-24 23:27:28,320 INFO     [5d337ea185d3432397012a6188cd4d12] awx.analytics.job_lifecycle job-6 preparing playbook
2023-01-24 23:27:28,421 INFO     [5d337ea185d3432397012a6188cd4d12] awx.analytics.job_lifecycle job-6 running playbook
2023-01-24 23:27:28,442 INFO     [5d337ea185d3432397012a6188cd4d12] awx.analytics.job_lifecycle job-6 work unit id received
2023-01-24 23:27:28,482 INFO     [5d337ea185d3432397012a6188cd4d12] awx.analytics.job_lifecycle job-6 work unit id assigned
2023-01-24 23:27:30,238 INFO     [5d337ea185d3432397012a6188cd4d12] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 6
2023-01-24 23:27:30,238 INFO     [5d337ea185d3432397012a6188cd4d12] awx.analytics.job_lifecycle job-6 post run
2023-01-24 23:27:30,386 INFO     [5d337ea185d3432397012a6188cd4d12] awx.analytics.job_lifecycle job-6 finalize run
2023-01-24 23:27:30,391 WARNING  [5d337ea185d3432397012a6188cd4d12] awx.main.dispatch job 6 (error) encountered an error (rc=None), please see task stdout for details.
```

"_/var/lib/awx/venv/awx/bin/receptorctl --socket /var/run/receptor/receptor.sock work list_" output:
```
Warning: receptorctl and receptor are different versions, they may not be compatible
{
    "4Pmqfss9": {
        "Detail": "Finished",
        "ExtraData": {
            "Command": "",
            "Image": "",
            "KubeConfig": "",
            "KubeNamespace": "",
            "KubePod": "",
            "Params": "",
            "PodName": "automation-job-6-njfz8"
        },
        "State": 2,
        "StateName": "Succeeded",
        "StdoutSize": 0,
        "WorkType": "kubernetes-incluster-auth"
    }
}
```

"_/var/lib/awx/venv/awx/bin/receptorctl --socket /var/run/receptor/receptor.sock work results 4Pmqfss9_" (empty output):
```
Warning: receptorctl and receptor are different versions, they may not be compatible
```

"_/var/lib/awx/venv/awx/bin/receptorctl --socket /var/run/receptor/receptor.sock status_":
```
Warning: receptorctl and receptor are different versions, they may not be compatible
Node ID: awx-69c867d6c6-vjqc4
Version: 1.3.0+g8f8481c
System CPU Count: 36
System Memory MiB: 70231

Node         Service   Type       Last Seen             Tags
awx-69c867d6c6-vjqc4 control   Stream     2023-01-25 00:47:30   {'type': 'Control Service'}

Node         Work Types
awx-69c867d6c6-vjqc4 local, kubernetes-runtime-auth, kubernetes-incluster-auth
```

Part of logs from "automation-job-6-njfz8":
```
{"status": "starting", "runner_ident": "6", "command": ["ansible-playbook", "-u", "admin", "-i", "/runner/inventory/hosts", "-e", "@/runner/env/extravars", "hello_world.yml"],
...
{"uuid": "b6a38639-6dd2-4016-b9bf-8760e3feaf5b", "counter": 9, "stdout": "\r\nPLAY RECAP *********************************************************************\r\n\u001b[0;32mlocalhost\u001b[0m                  : \u001b[0;32mok=2   \u001b[0m changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   ", "start_line": 10, "end_line": 14, "runner_ident": "6", "event": "playbook_on_stats", "job_id": 6, "pid": 19, "created": "2023-01-24T23:27:31.692476", "parent_uuid": "6cd6a954-f087-44e1-ac2e-1629dc2d8d99", "event_data": {"playbook": "hello_world.yml", "playbook_uuid": "6cd6a954-f087-44e1-ac2e-1629dc2d8d99", "changed": {}, "dark": {}, "failures": {}, "ignored": {}, "ok": {"localhost": 2}, "processed": {"localhost": 1}, "rescued": {}, "skipped": {}, "artifact_data": {}, "uuid": "b6a38639-6dd2-4016-b9bf-8760e3feaf5b"}}
{"status": "successful", "runner_ident": "6"}
{"zipfile": 1412}
UEsDBBQAAAAIA...cBAAAAAA={"eof": true}
```

"_api/v2/jobs/6/_":
```
HTTP 200 OK
Allow: GET, DELETE, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
X-API-Node: awx-69c867d6c6-vjqc4
X-API-Product-Name: AWX
X-API-Product-Version: 21.11.0
X-API-Time: 0.055s

{
    "id": 6,
    "type": "job",
...
    },
    "summary_fields": {
        "organization": {
            "id": 1,
            "name": "Default",
            "description": ""
        },
        "inventory": {
            "id": 1,
            "name": "Demo Inventory",
            "description": "",
            "has_active_failures": false,
            "total_hosts": 1,
            "hosts_with_active_failures": 0,
            "total_groups": 0,
            "has_inventory_sources": false,
            "total_inventory_sources": 0,
            "inventory_sources_with_failures": 0,
            "organization_id": 1,
            "kind": ""
        },
        "execution_environment": {
            "id": 2,
            "name": "Control Plane Execution Environment",
            "description": "",
            "image": "[private-registry/ansible/awx-ee:21.11.0](private-registry/ansible/awx-ee:21.11.0)"
        },
        "project": {
            "id": 6,
            "name": "Demo Project",
            "description": "",
            "status": "ok",
            "scm_type": "",
            "allow_override": false
        },
        "job_template": {
            "id": 7,
            "name": "Demo Job Template",
            "description": ""
        },
        "unified_job_template": {
            "id": 7,
            "name": "Demo Job Template",
            "description": "",
            "unified_job_type": "job"
        },
        "instance_group": {
            "id": 2,
            "name": "default",
            "is_container_group": true
        },
        "created_by": {
            "id": 1,
            "username": "admin",
            "first_name": "",
            "last_name": ""
        },
        "user_capabilities": {
            "delete": true,
            "start": true
        },
        "labels": {
            "count": 0,
            "results": []
        },
        "credentials": [
            {
                "id": 1,
                "name": "Demo Credential",
                "description": "",
                "kind": "ssh",
                "cloud": false
            }
        ]
    },
    "created": "2023-01-24T23:27:27.788821Z",
    "modified": "2023-01-24T23:27:28.019288Z",
    "name": "Demo Job Template",
    "description": "",
    "job_type": "run",
    "inventory": 1,
    "project": 6,
    "playbook": "hello_world.yml",
    "scm_branch": "",
    "forks": 0,
    "limit": "",
    "verbosity": 0,
    "extra_vars": "{}",
    "job_tags": "",
    "force_handlers": false,
    "skip_tags": "",
    "start_at_task": "",
    "timeout": 0,
    "use_fact_cache": false,
    "organization": 1,
    "unified_job_template": 7,
    "launch_type": "manual",
    "status": "error",
    "execution_environment": 2,
    "failed": true,
    "started": "2023-01-24T23:27:28.113893Z",
    "finished": "2023-01-24T23:27:30.271883Z",
    "canceled_on": null,
    "elapsed": 2.158,
    "job_args": "",
    "job_cwd": "",
    "job_env": {},
    "job_explanation": "Job terminated due to error",
    "execution_node": "",
    "controller_node": "awx-69c867d6c6-vjqc4",
    "result_traceback": "Finished",
    "event_processing_finished": true,
    "launched_by": {
        "id": 1,
        "name": "admin",
        "type": "user",
        "url": "/api/v2/users/1/"
    },
    "work_unit_id": "4Pmqfss9",
    "job_template": 7,
    "passwords_needed_to_start": [],
    "allow_simultaneous": false,
    "artifacts": {},
    "scm_revision": "347e44fea036c94d5f60e544de006453ee5c71ad",
    "instance_group": 2,
    "diff_mode": false,
    "job_slice_number": 0,
    "job_slice_count": 1,
    "webhook_service": "",
    "webhook_credential": null,
    "webhook_guid": "",
    "host_status_counts": null,
    "playbook_counts": {
        "play_count": 0,
        "task_count": 0
    },
    "custom_virtualenv": null
}
```

It's like job running without errors but it doesn't return successful status and "marked" as failed.

P.S. I saw the similar reports, but they mostly related to job running >4h. In my case it happens within seconds.

Is any way to debug that for find the issue?

### AWX version

21.11.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Issue (with logs) described above.

### Expected results

No errors, see output for job.

### Actual results

Job failed without output (except "Finished").

### Additional information

_No response_
user: Halytskyi
issue_13465: state: open
title: Timed-out workflow approvals continue to allow Approve/Deny actions 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Workflow approvals that are in "timed out" state continue to allow the user to trigger approval/denial via the row action buttons. Even though the action buttons are still enabled, they have a tooltip that says "This has already been acted on". Also, clicking on these actions results in an error. 

### AWX version

21.11.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

1. Create  a workflow template that contains a node of type "Workflow Approval" with a timeout (eg. 1 min).
2. Launch the template
3. Let the approval time out
4. In the Workflow Approvals list UI, see the workflow approval with "Timed out" status.

### Expected results

Since the workflow approval has timed out, the "approve" (thumbs up icon) and "deny" (thumb down icon) in the row actions should be disabled with a tooltip. 

### Actual results

The approve and deny row actions continue to be enabled and clicking on them leads to an error.

![image](https://user-images.githubusercontent.com/43621546/214357833-b38fef7f-9580-4a52-b647-4fa077023fb8.png)

![image](https://user-images.githubusercontent.com/43621546/214357882-47da0f65-9986-49a2-8411-07a3d6a7f314.png)


### Additional information

_No response_
user: vidyanambiar
issue_13452: state: open
title: publish devel and feature_* branch images to quay or ghcr
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

currently we only publish release images 

it would be nice if we also publish devel and feature_ branch images 

it would make development workflow much simpler 

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

N/A

### Current results

N/A

### Sugested feature result

N/A

### Additional information

_No response_
user: TheRealHaoLiu
issue_13426: state: open
title: /api/v2/metrics reports data from old instances
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->
the metrics endpoint aggregates subsystem metrics across instances. However, whenever those instances go away (deprovisioned), the data remains.

subsystem metrics data is stored in Redis at a top level key for each unique instance, e.g. `awx_metrics_instance_awx1`

The metrics api View has code to load data from each of those keys, _regardless if that instance is in the database_.

One solution would be cross reference the database and look for active instances. Maybe skip or even clean up any redis keys belonging to old instances.

The other solution, if we don't want to involve the database, is to timestamp the last time data was received from that instance, and skip or delete any redis data that is X minutes ago (maybe 10 or so)



<!--

PLEASE DO NOT USE A BLANK TEMPLATE IN THE AWX REPO.
This is a legacy template used for internal testing ONLY.

Any issues opened will this template will be automatically closed.

Instead use the bug or feature request.

-->



##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Breaking Change
 - New or Enhanced Feature
 - Bug, Docs Fix or other nominal change


##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
user: fosterseth
issue_13417: state: open
title: Incorrect deprecation warning for awx.awx.schedule_rrule
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

When using the schedule_rrule lookup plugin in the awx collection, I get the following deprecation warning:

```
[DEPRECATION WARNING]: The lookup plugin 'awx.awx.schedule_rrule' was expected to return a list, got '<class 'str'>'
instead. The lookup plugin 'awx.awx.schedule_rrule' needs to be changed to return a list. This will be an error in Ansible
2.18. This feature will be removed in version 2.18. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
```

This seems wrong because that plugin does intend to return a string and not a list. 

Ansible version:
```
$ ansible --version
ansible [core 2.14.1]
  config file = /Users/jmighion/.ansible.cfg
  configured module search path = ['/Users/jmighion/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Users/jmighion/.pyenv/versions/3.10.0/envs/3.10.0_dev/lib/python3.10/site-packages/ansible
  ansible collection location = /Users/jmighion/.ansible/collections:/usr/share/ansible/collections
  executable location = /Users/jmighion/.pyenv/versions/3.10.0_dev/bin/ansible
  python version = 3.10.0 (default, Dec  6 2021, 14:41:16) [Clang 12.0.0 (clang-1200.0.32.2)] (/Users/jmighion/.pyenv/versions/3.10.0/envs/3.10.0_dev/bin/python3.10)
  jinja version = 3.1.2
  libyaml = True
```

awx.awx version 21.10.0

Sample playbook:
```
- name: Test
  hosts: localhost
  gather_facts: false
  tasks:
    - name: Debug
      ansible.builtin.debug:
        msg: "{{ query('awx.awx.schedule_rrule', 'hour', start_date='2022-01-01', timezone='GMT') }}"
```

### AWX version

21.10.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

2.14.1

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Run the sample playbook.

### Expected results

No deprecation warning.

### Actual results

Seemingly incorrect deprecation warning.

### Additional information

_No response_
user: jmighion
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_13413: state: open
title:  Add to the hashicorp plugin a retry logic that increase a max retries
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

The following error shows up while using Credentials of type HashiCorp Vault Secret Lookup. This behavior sometimes it works and sometimes it fails with the following exception:
~~~
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 412 Client Error: Precondition Failed for url: https://vaultcluster.hashicorp.cloud:8200/v1/platform/general/data/bitbucket.org
~~~

HashiCorp has suggested the following:

_Ensure that your clients can retry for the best experience (This is why retrying the call is enough to make it work like you stated). Starting with Go api version 1.1.0, the Go client library enables automatic retries for 412 errors. By default, retries=2, or use client method SetMaxRetries.
You can use the Vault environment variable VAULT_MAX_RETRIES to achieve the same result. If you use a client library other than Go, you may still need to ensure that your client can handle 412 retries in order to achieve consistency, client mitigations._
 
It was tested by adding the VAULT_MAX_RETRIES as environment variable in AAP,as well as environment variable in the /etc/supervisord.conf file in the customer environment without success.



### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Not able to reproduce it so far.

### Current results

A customer is getting this error in their environment.

### Sugested feature result

To increase the amount of retries to look up the credentials.

### Additional information

_No response_
user: tuxonfire
issue_13412: state: open
title: awx-rsyslogd start failed
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

After running the script 'make docker-compose', the error appears as below:

_docker-compose -f tools/docker-compose/_sources/docker-compose.yml  up  --remove-orphans
Attaching to tools_postgres_1, tools_redis_1, tools_awx_1
[36mpostgres_1  |[0m 
[36mpostgres_1  |[0m PostgreSQL Database directory appears to contain a database; Skipping initialization
[36mpostgres_1  |[0m 
[36mpostgres_1  |[0m 2023-01-07 12:44:56.232 UTC [1] LOG:  starting PostgreSQL 12.13 (Debian 12.13-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
[36mpostgres_1  |[0m 2023-01-07 12:44:56.233 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
[36mpostgres_1  |[0m 2023-01-07 12:44:56.233 UTC [1] LOG:  listening on IPv6 address "::", port 5432
[33mredis_1_1   |[0m 1:C 07 Jan 2023 12:44:56.256 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
[33mredis_1_1   |[0m 1:C 07 Jan 2023 12:44:56.256 # Redis version=7.0.7, bits=64, commit=00000000, modified=0, pid=1, just started
[33mredis_1_1   |[0m 1:C 07 Jan 2023 12:44:56.256 # Configuration loaded
[33mredis_1_1   |[0m 1:M 07 Jan 2023 12:44:56.256 * monotonic clock: POSIX clock_gettime
[36mpostgres_1  |[0m 2023-01-07 12:44:56.238 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
[33mredis_1_1   |[0m 1:M 07 Jan 2023 12:44:56.257 * Running mode=standalone, port=0.
[36mpostgres_1  |[0m 2023-01-07 12:44:56.296 UTC [27] LOG:  database system was shut down at 2023-01-07 12:44:19 UTC
[33mredis_1_1   |[0m 1:M 07 Jan 2023 12:44:56.257 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
[33mredis_1_1   |[0m 1:M 07 Jan 2023 12:44:56.257 # Server initialized
[33mredis_1_1   |[0m 1:M 07 Jan 2023 12:44:56.257 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
[33mredis_1_1   |[0m 1:M 07 Jan 2023 12:44:56.258 * Loading RDB produced by version 7.0.7
[33mredis_1_1   |[0m 1:M 07 Jan 2023 12:44:56.258 * RDB age 37 seconds
[33mredis_1_1   |[0m 1:M 07 Jan 2023 12:44:56.258 * RDB memory usage when created 1.14 Mb
[36mpostgres_1  |[0m 2023-01-07 12:44:56.301 UTC [1] LOG:  database system is ready to accept connections
[33mredis_1_1   |[0m 1:M 07 Jan 2023 12:44:56.258 * Done loading RDB, keys loaded: 28, keys expired: 0.
[33mredis_1_1   |[0m 1:M 07 Jan 2023 12:44:56.258 * DB loaded from disk: 0.000 seconds
[33mredis_1_1   |[0m 1:M 07 Jan 2023 12:44:56.258 * The server is now ready to accept connections at /var/run/redis/redis.sock
[32mawx_1_1     |[0m [ -d "/awx_devel/awx.egg-info" ] || python3.9 /awx_devel/tools/scripts/egg_info_dev
[32mawx_1_1     |[0m cp -f /tmp/awx.egg-link /var/lib/awx/venv/awx/lib/python3.9/site-packages/awx.egg-link
[32mawx_1_1     |[0m mkdir -p /var/lib/awx/; \
[32mawx_1_1     |[0m if [ "/var/lib/awx/venv" ]; then \
[32mawx_1_1     |[0m 	. /var/lib/awx/venv/awx/bin/activate; \
[32mawx_1_1     |[0m fi; \
[32mawx_1_1     |[0m python3.9 -c "import awx; print(awx.__version__)" > /var/lib/awx/.awx_version; \
[32mawx_1_1     |[0m 
[32mawx_1_1     |[0m if [ "/var/lib/awx/venv" ]; then \
[32mawx_1_1     |[0m 	. /var/lib/awx/venv/awx/bin/activate; \
[32mawx_1_1     |[0m fi; \
[32mawx_1_1     |[0m awx-manage migrate --noinput
[32mawx_1_1     |[0m [36;1mOperations to perform:[0m
[32mawx_1_1     |[0m [1m  Apply all migrations: [0mauth, conf, contenttypes, main, oauth2_provider, sessions, sites, social_django, sso, taggit
[32mawx_1_1     |[0m [36;1mRunning migrations:[0m
[32mawx_1_1     |[0m   No migrations to apply.
[32mawx_1_1     |[0m [0mAdmin password: aMNWCdBUAhdbQHSIeiFc
[32mawx_1_1     |[0m (changed: False)
[32mawx_1_1     |[0m [0m(changed: False)
[32mawx_1_1     |[0m [0mSuccessfully registered instance awx_1
[32mawx_1_1     |[0m (changed: True)
[32mawx_1_1     |[0m [0mInstance Group already registered controlplane
[32mawx_1_1     |[0m [0mInstance Group already registered default
[32mawx_1_1     |[0m [0m/usr/local/lib/python3.9/site-packages/supervisor/options.py:474: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
[32mawx_1_1     |[0m   self.warnings.warn(
[32mawx_1_1     |[0m 2023-01-07 12:45:13,761 CRIT Supervisor is running as root.  Privileges were not dropped because no user is specified in the config file.  If you intend to run as root, you can set user=root in the config file to avoid this message.
[32mawx_1_1     |[0m 2023-01-07 12:45:13,765 INFO RPC interface 'supervisor' initialized
[32mawx_1_1     |[0m 2023-01-07 12:45:13,765 CRIT Server 'unix_http_server' running without any HTTP authentication checking
[32mawx_1_1     |[0m 2023-01-07 12:45:13,765 INFO supervisord started with pid 126
[32mawx_1_1     |[0m 2023-01-07 12:45:14,767 INFO spawned: 'stdout' with pid 127
[32mawx_1_1     |[0m 2023-01-07 12:45:14,768 INFO spawned: 'superwatcher' with pid 128
[32mawx_1_1     |[0m 2023-01-07 12:45:14,770 INFO spawned: 'awx-dispatcher' with pid 129
[32mawx_1_1     |[0m 2023-01-07 12:45:14,771 INFO spawned: 'awx-receiver' with pid 130
[32mawx_1_1     |[0m 2023-01-07 12:45:14,772 INFO spawned: 'awx-uwsgi' with pid 131
[32mawx_1_1     |[0m 2023-01-07 12:45:14,773 INFO spawned: 'awx-daphne' with pid 132
[32mawx_1_1     |[0m 2023-01-07 12:45:14,774 INFO spawned: 'awx-nginx' with pid 133
[32mawx_1_1     |[0m 2023-01-07 12:45:14,776 INFO spawned: 'awx-wsbroadcast' with pid 134
[32mawx_1_1     |[0m 2023-01-07 12:45:14,777 INFO spawned: 'awx-rsyslogd' with pid 135
[32mawx_1_1     |[0m 2023-01-07 12:45:14,779 INFO spawned: 'awx-autoreload' with pid 138
[32mawx_1_1     |[0m 2023-01-07 12:45:14,781 INFO spawned: 'awx-receptor' with pid 140
[32mawx_1_1     |[0m READY
[32mawx_1_1     |[0m make[1]: Entering directory '/awx_devel'
[32mawx_1_1     |[0m make[1]: Entering directory '/awx_devel'
[32mawx_1_1     |[0m make[1]: Entering directory '/awx_devel'
[32mawx_1_1     |[0m make[1]: Entering directory '/awx_devel'
[32mawx_1_1     |[0m make[1]: Entering directory '/awx_devel'
[32mawx_1_1     |[0m make[1]: Entering directory '/awx_devel'
[32mawx_1_1     |[0m 2023-01-07 12:45:14,785 WARN exited: **awx-rsyslogd (exit status 255; not expected)**
[32mawx_1_1     |[0m make[1]: Entering directory '/awx_devel'
[32mawx_1_1     |[0m INFO 2023/01/07 12:45:14 Running control service control
[32mawx_1_1     |[0m INFO 2023/01/07 12:45:14 Initialization complete
[32mawx_1_1     |[0m nginx -g "daemon off;"
[32mawx_1_1     |[0m 2023-01-07 12:45:16,040 INFO success: stdout entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
[32mawx_1_1     |[0m 2023-01-07 12:45:16,040 INFO success: superwatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
[32mawx_1_1     |[0m 2023-01-07 12:45:16,040 INFO success: awx-dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
[32mawx_1_1     |[0m 2023-01-07 12:45:16,040 INFO success: awx-receiver entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
[32mawx_1_1     |[0m 2023-01-07 12:45:16,040 INFO success: awx-uwsgi entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
[32mawx_1_1     |[0m 2023-01-07 12:45:16,040 INFO success: awx-daphne entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
[32mawx_1_1     |[0m 2023-01-07 12:45:16,040 INFO success: awx-nginx entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
[32mawx_1_1     |[0m 2023-01-07 12:45:16,040 INFO success: awx-wsbroadcast entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
[32mawx_1_1     |[0m 2023-01-07 12:45:16,042 INFO spawned: 'awx-rsyslogd' with pid 259
[32mawx_1_1     |[0m 2023-01-07 12:45:16,042 INFO success: awx-autoreload entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
[32mawx_1_1     |[0m 2023-01-07 12:45:16,042 INFO success: awx-receptor entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
[32mawx_1_1     |[0m awx-rsyslogd stdout | rsyslog internal message (3,-2455): could not update the internal posix capabilities settings based on the options passed to it, capng_updatev=-1
[32mawx_1_1     |[0m awx-rsyslogd stdout |  [v8.2102.0-107.el9 try https://www.rsyslog.com/e/2455 ]
[32mawx_1_1     |[0m awx-rsyslogd stdout | 
[32mawx_1_1     |[0m awx-autoreload stdout | make[1]: Entering directory '/awx_devel'
[32mawx_1_1     |[0m awx-autoreload stdout | 
[32mawx_1_1     |[0m 2023-01-07 12:45:16,050 WARN exited: awx-rsyslogd (exit status 255; not expected)
[32mawx_1_1     |[0m awx-rsyslogd stdout | rsyslog internal message (3,-2455): could not update the internal posix capabilities settings based on the options passed to it, capng_updatev=-1
[32mawx_1_1     |[0m awx-rsyslogd stdout |  [v8.2102.0-107.el9 try https://www.rsyslog.com/e/2455 ]
[32mawx_1_1     |[0m awx-rsyslogd stdout | 
[32mawx_1_1     |[0m 2023-01-07 12:45:16,548 INFO     [-] daphne.cli Starting server at tcp:port=8051:interface=127.0.0.1
[32mawx_1_1     |[0m 2023-01-07 12:45:16,548 INFO     Starting server at tcp:port=8051:interface=127.0.0.1
[32mawx_1_1     |[0m 2023-01-07 12:45:16,549 INFO     [-] daphne.server HTTP/2 support not enabled (install the http2 and tls Twisted extras)
[32mawx_1_1     |[0m 2023-01-07 12:45:16,549 INFO     HTTP/2 support not enabled (install the http2 and tls Twisted extras)
[32mawx_1_1     |[0m 2023-01-07 12:45:16,549 INFO     [-] daphne.server Configuring endpoint tcp:port=8051:interface=127.0.0.1
[32mawx_1_1     |[0m 2023-01-07 12:45:16,549 INFO     Configuring endpoint tcp:port=8051:interface=127.0.0.1
[32mawx_1_1     |[0m 2023-01-07 12:45:16,550 INFO     [-] daphne.server Listening on TCP address 127.0.0.1:8051
[32mawx_1_1     |[0m 2023-01-07 12:45:16,550 INFO     Listening on TCP address 127.0.0.1:8051
[32mawx_1_1     |[0m *** Starting uWSGI 2.0.21 (64bit) on [Sat Jan  7 12:45:16 2023] ***
[32mawx_1_1     |[0m compiled with version: 11.3.1 20221121 (Red Hat 11.3.1-4) on 07 January 2023 02:14:24
[32mawx_1_1     |[0m os: Linux-3.10.0-1160.81.1.el7.x86_64 #1 SMP Fri Dec 16 17:29:43 UTC 2022
[32mawx_1_1     |[0m nodename: awx_1
[32mawx_1_1     |[0m machine: x86_64
[32mawx_1_1     |[0m clock source: unix
[32mawx_1_1     |[0m detected number of CPU cores: 16
[32mawx_1_1     |[0m current working directory: /awx_devel
[32mawx_1_1     |[0m detected binary path: /var/lib/awx/venv/awx/bin/uwsgi
[32mawx_1_1     |[0m !!! no internal routing support, rebuild with pcre support !!!
[32mawx_1_1     |[0m uWSGI running as root, you can use --uid/--gid/--chroot options
[32mawx_1_1     |[0m *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** 
[32mawx_1_1     |[0m chdir() to /awx_devel/
[32mawx_1_1     |[0m your memory page size is 4096 bytes
[32mawx_1_1     |[0m  *** WARNING: you have enabled harakiri without post buffering. Slow upload could be rejected on post-unbuffered webservers *** 
[32mawx_1_1     |[0m detected max file descriptor number: 1048576
[32mawx_1_1     |[0m lock engine: pthread robust mutexes
[32mawx_1_1     |[0m thunder lock: disabled (you can enable it with --thunder-lock)
[32mawx_1_1     |[0m uwsgi socket 0 bound to TCP address 127.0.0.1:8050 fd 3
[32mawx_1_1     |[0m uWSGI running as root, you can use --uid/--gid/--chroot options
[32mawx_1_1     |[0m *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** 
[32mawx_1_1     |[0m Python version: 3.9.16 (main, Dec  8 2022, 00:00:00)  [GCC 11.3.1 20221121 (Red Hat 11.3.1-4)]
[32mawx_1_1     |[0m PEP 405 virtualenv detected: /var/lib/awx/venv/awx
[32mawx_1_1     |[0m Set PythonHome to /var/lib/awx/venv/awx
[32mawx_1_1     |[0m *** Python threads support is disabled. You can enable it with --enable-threads ***
[32mawx_1_1     |[0m Python main interpreter initialized at 0x1c04dd0
[32mawx_1_1     |[0m uWSGI running as root, you can use --uid/--gid/--chroot options
[32mawx_1_1     |[0m *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** 
[32mawx_1_1     |[0m your server socket listen backlog is limited to 100 connections
[32mawx_1_1     |[0m your mercy for graceful operations on workers is 60 seconds
[32mawx_1_1     |[0m mapped 609552 bytes (595 KB) for 5 cores
[32mawx_1_1     |[0m *** Operational MODE: preforking ***
[32mawx_1_1     |[0m uWSGI running as root, you can use --uid/--gid/--chroot options
[32mawx_1_1     |[0m *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** 
[32mawx_1_1     |[0m *** uWSGI is running in multiple interpreter mode ***
[32mawx_1_1     |[0m spawned uWSGI master process (pid: 270)
[32mawx_1_1     |[0m spawned uWSGI worker 1 (pid: 271, cores: 1)
[32mawx_1_1     |[0m spawned uWSGI worker 2 (pid: 272, cores: 1)
[32mawx_1_1     |[0m spawned uWSGI worker 3 (pid: 273, cores: 1)
[32mawx_1_1     |[0m spawned uWSGI worker 4 (pid: 274, cores: 1)
[32mawx_1_1     |[0m spawned uWSGI worker 5 (pid: 275, cores: 1)
[32mawx_1_1     |[0m *** Stats server enabled on /tmp/stats.socket fd: 17 ***
[32mawx_1_1     |[0m 2023-01-07 12:45:16,733 WARNING  [-] awx.main.dispatch.periodic periodic beat started
[32mawx_1_1     |[0m 2023-01-07 12:45:16,752 INFO     [-] awx.main.dispatch Running worker dispatcher listening to queues ['tower_broadcast_all', 'awx_1']
[32mawx_1_1     |[0m 2023-01-07 12:45:16,787 WARNING  [-] awx.main.tasks.system Rejoining the cluster as instance awx_1. Prior last_seen 2023-01-07 12:42:51.545328+00:00
[32mawx_1_1     |[0m 2023-01-07 12:45:16,786 INFO     [-] awx.main.wsbroadcast Active instance with hostname awx_1 is registered.
[32mawx_1_1     |[0m 2023-01-07 12:45:16,925 INFO spawned: 'awx-rsyslogd' with pid 287
[32mawx_1_1     |[0m 2023-01-07 12:45:16,933 WARN exited: awx-rsyslogd (exit status 255; not expected)
[32mawx_1_1     |[0m awx-rsyslogd stdout | rsyslog internal message (3,-2455): could not update the internal posix capabilities settings based on the options passed to it, capng_updatev=-1
[32mawx_1_1     |[0m awx-rsyslogd stdout |  [v8.2102.0-107.el9 try https://www.rsyslog.com/e/2455 ]
[32mawx_1_1     |[0m awx-rsyslogd stdout | 
[32mawx_1_1     |[0m WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x1c04dd0 pid: 274 (default app)
[32mawx_1_1     |[0m 2023-01-07 12:45:17,885 ERROR    [-] awx.main.utils.reload supervisorctl restart awx-rsyslogd errored with exit code `7`, stdout:
[32mawx_1_1     |[0m b'tower-processes:awx-rsyslogd: stopped\ntower-processes:awx-rsyslogd: ERROR (spawn error)'stderr:
[32mawx_1_1     |[0m b''
[32mawx_1_1     |[0m WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x1c04dd0 pid: 273 (default app)
[32mawx_1_1     |[0m WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x1c04dd0 pid: 271 (default app)
[32mawx_1_1     |[0m WSGI app 0 (mountpoint='') ready in 2 seconds on interpreter 0x1c04dd0 pid: 272 (default app)
[32mawx_1_1     |[0m WSGI app 0 (mountpoint='') ready in 2 seconds on interpreter 0x1c04dd0 pid: 275 (default app)
[32mawx_1_1     |[0m 2023-01-07 12:45:20,026 INFO spawned: 'awx-rsyslogd' with pid 298
[32mawx_1_1     |[0m 2023-01-07 12:45:20,034 WARN exited: awx-rsyslogd (exit status 255; not expected)
[32mawx_1_1     |[0m awx-rsyslogd stdout | rsyslog internal message (3,-2455): could not update the internal posix capabilities settings based on the options passed to it, capng_updatev=-1
[32mawx_1_1     |[0m awx-rsyslogd stdout |  [v8.2102.0-107.el9 try https://www.rsyslog.com/e/2455 ]
[32mawx_1_1     |[0m awx-rsyslogd stdout | 
[32mawx_1_1     |[0m 2023-01-07 12:45:20,034 INFO gave up: awx-rsyslogd entered FATAL state, too many start retries too quickly
[32mawx_1_1     |[0m Processing Event: ver:3.0 server:supervisor serial:5 pool:superwatcher poolserial:0 eventname:PROCESS_STATE_FATAL len:69
[32mawx_1_1     |[0m 2023-01-07 12:45:21,036 WARN received SIGQUIT indicating exit request
[32mawx_1_1     |[0m 2023-01-07 12:45:21,036 INFO waiting for stdout, superwatcher, awx-dispatcher, awx-receiver, awx-uwsgi, awx-daphne, awx-nginx, awx-wsbroadcast, awx-autoreload, awx-receptor to die
[32mawx_1_1     |[0m 2023-01-07 12:45:21,037 WARN stopped: awx-receptor (terminated by SIGTERM)
[32mawx_1_1     |[0m make[1]: *** [Makefile:210: awx-autoreload] Terminated
[32mawx_1_1     |[0m 2023-01-07 12:45:21,037 WARN stopped: awx-autoreload (terminated by SIGTERM)
[32mawx_1_1     |[0m awx-autoreload stderr | make[1]: *** [Makefile:210: awx-autoreload] Terminated
[32mawx_1_1     |[0m awx-autoreload stderr | 
[32mawx_1_1     |[0m 2023-01-07 12:45:21,038 WARN stopped: awx-uwsgi (terminated by SIGKILL)
[32mawx_1_1     |[0m 2023-01-07 12:45:21,038 WARNING  [-] awx.main.dispatch received SIGTERM, stopping
[32mawx_1_1     |[0m 2023-01-07 12:45:21,038 INFO     [-] daphne.server Killed 0 pending application instances
[32mawx_1_1     |[0m 2023-01-07 12:45:21,038 INFO     Killed 0 pending application instances
[32mawx_1_1     |[0m 2023-01-07 12:45:21,041 WARNING  [-] awx.main.commands.run_callback_receiver received SIGTERM, stopping
[32mawx_1_1     |[0m 2023-01-07 12:45:21,043 WARNING  [-] awx.main.commands.run_callback_receiver received SIGTERM, stopping
[32mawx_1_1     |[0m make[1]: *** [Makefile:219: wsbroadcast] Terminated
[32mawx_1_1     |[0m 2023-01-07 12:45:21,055 WARN stopped: awx-wsbroadcast (terminated by SIGTERM)
[32mawx_1_1     |[0m 2023-01-07 12:45:21,059 WARNING  [-] awx.main.tasks.system Normal shutdown signal for instance awx_1, removed self from capacity pool.
[32mawx_1_1     |[0m 2023-01-07 12:45:21,061 WARN stopped: awx-nginx (terminated by SIGTERM)
[32mawx_1_1     |[0m 2023-01-07 12:45:21,424 WARN stopped: awx-daphne (terminated by SIGTERM)
[32mawx_1_1     |[0m 2023-01-07 12:45:21,474 WARN stopped: awx-receiver (terminated by SIGTERM)
[32mawx_1_1     |[0m 2023-01-07 12:45:21,494 WARN stopped: awx-dispatcher (terminated by SIGTERM)
[32mawx_1_1     |[0m 2023-01-07 12:45:21,495 WARN stopped: superwatcher (terminated by SIGTERM)
[32mawx_1_1     |[0m 2023-01-07 12:45:21,495 WARN stopped: stdout (terminated by SIGTERM)
[32mtools_awx_1 exited with code 0_

### AWX version

21.10.2

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.9.27

### Operating system

CentOS Linux release 7.9.2009 (Core)

### Web browser

_No response_

### Steps to reproduce

After running 'make docker-compose-build', excuting script 'make docker-compose' with the latest version of aws.

### Expected results

The awx container can work normally.

### Actual results

tools_awx_1 exited with code 0

### Additional information

_No response_
user: Duanmupang
issue_13406: state: open
title: Operator issue existing in 1.1.3 with awx 21.10.2 release /etc/receptor/tls/receptor.crt not found error
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Please refer https://github.com/ansible/awx-operator/issues/1055,
I had to use 0.28.0 for the operator to avoid above issue.
when I try to upgrade from 0.28.0 to 1.1.3, the operator upgrade successful however the awx version upgrade to 21.10.2 is failed with same error. /etc/receptor/tls/receptor.crt not found error.  


### AWX version

21.5.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

rhel 8

### Web browser

Chrome

### Steps to reproduce

Please upgrade from 0.28.0 to 1.1.3 operator
Please upgrade from 21.5.0 to 21.10.2 awx version.
check the pod using kubectl describe to check the container.  The EE container will faile with /etc/receptor/tls/receptor.crt not found error.  

### Expected results

The upgrade should work as expected

### Actual results

/etc/receptor/tls/receptor.crt not found error.   and 1 pod i.e. awx-ee is not coming up and keep on crashing with above error

### Additional information

_No response_
user: eselvam
issue_13401: state: open
title: Permission Denied when trying to source inventory script from archive project type. 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

/tmp/awx_581862_cglob78k/project/inventory/db-query.py --list ([Errno 13] Permission denied
The exe bit on files within archive projects is not being maintained during the unarchive process used in project_update. 
This bit is maintained when using get_url and unarchive modules on the same tar package and also no issue with GIT. 
GIT Project:
/var/lib/awx/projects/_4093__ap_sample_pipeline_demo_git/inventory
bash-4.4# ls -l
total 8
-rwxr-xr-x. 1 root root 1946 Jan  3 23:54 db-query.py
-rw-r--r--. 1 root root   34 Jan  3 20:22 hostlist

Archive Project:
/var/lib/awx/projects/_1106__ap_sample_pipeline_demo/inventory
bash-4.4# ls -l
total 8
-rw-r--r--. 1 root root 1946 Jan  3 23:48 db-query.py
-rw-r--r--. 1 root root   34 Jan  3 23:48 hostlist
bash-4.4# 

We have two environments, our legacy 16.0.0 and newer 21.4.0 and see the same behavior. 

### AWX version

16.0.0 and 21.4.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.9.15 and 2.13.5

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Create a tar archive of project containing executable script
Create project of type=archive and set url to that archive


### Expected results

I expect the permissions set on files to remain intact when archive is unpackaged during project update.

### Actual results

Permissions are not intact.

### Additional information

_No response_
user: stewardb
issue_13393: state: open
title: Can't delete the notification templates
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary
We have 2 notification templates, that we can't delete.

When we try to delete these notification templates, we get the following error for the first template:

> DELETE api/v2/notification_templates/1/ 405
> Delete not allowed while there are pending notifications

We checked the number of pending queries by this command:
> SELECT *
> FROM public.main_notification WHERE status='pending';

And we saw, that there are about 300 notifications that are stuck in the "pending" state.

We tried to delete the pending notifications from the database by the following query:

> DELETE
> FROM public.main_notification
> WHERE status='pending';

But we get this error:

> SQL Error [23503]: ERROR: update or delete on table "main_notification" violates foreign key constraint "main_activitystream__notification_id_bbfaa8ac_fk_main_noti" on table "main_activitystream_notification"
>   Detail: Key (id)=(11259541) is still referenced from table "main_activitystream_notification".

### AWX version

21.2.0

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

Unknown

### Expected results

The notification templates are deleted

### Actual results

The notification templates are not deleted

### Additional information

_No response_
user: elibogomolnyi
issue_13388: state: open
title: foreman inventory source missing subscription_facet_attributes
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

We've been using foreman as an inventory source, and we need to know with which host it is registered. Having upgraded to AWX 21.10.2, this data is no longer included in the collected host variables. The data is still present in the json request at api/v2/hosts/{host_id} and some of the data returned there is collected, but the `foreman` dictionary is missing a lot of data.

We're also seeing this when we do an inventory sync on all hosts:

```WARNING  Host "host_xyz" has no "foreman_id" variable(s)```

### AWX version

21.10.2

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.12

### Operating system

Red Hat 8.7

### Web browser

Firefox, Chrome, Safari, Edge

### Steps to reproduce

Install AWX 21.10.2 via kubernetes, use the "Red Hat Satellite 6" inventory source, synchronize, check the 'foreman' section of the host variables. This should contain the information provided by the Red Hat Satellite 6 API endpoint `api/v2/hosts/{host_id}` which includes the subscription_facet_attributes when navigating to the page manually, and in earlier version of AWX.

### Expected results

{
 "foreman": {
  "architecture_id": 1,
  "architecture_name": "x86_64",
  "bmc_available": false,
  "build": false,
  "build_status": 0,
  "build_status_label": "Installed",
  "capabilities": [
   "build"
  ],
  "certname": "redacted",
  "cockpit_url": "redacted",
  "comment": null,
  "compute_profile_id": null,
  "compute_profile_name": null,
  "compute_resource_id": null,
  "compute_resource_name": null,
  "content_facet_attributes": {
   "applicable_deb_count": 0,
   "applicable_module_stream_count": 0,
   "applicable_package_count": 35,
   "content_source": null,
   "content_source_id": null,
   "content_source_name": null,
   "content_view": {
    "composite": true,
    "id": 110,
    "name": "redacted"
   },
   "content_view_id": 110,
   "content_view_name": "redacted",
   "errata_counts": {
    "bugfix": 0,
    "enhancement": 0,
    "security": 0,
    "total": 0
   },
   "id": 1721,
   "kickstart_repository": null,
   "kickstart_repository_id": null,
   "kickstart_repository_name": null,
   "lifecycle_environment": {
    "id": 5,
    "name": "Prod"
   },
   "lifecycle_environment_id": 5,
   "lifecycle_environment_name": "Prod",
   "upgradable_deb_count": 0,
   "upgradable_module_stream_count": 0,
   "upgradable_package_count": 0,
   "uuid": "aoeu-aoeu-aoeu-aoeu"
  },
  "created_at": "2022-12-30 08:58:03 -0500",
  "disk": null,
  "domain_id": 1,
  "domain_name": "redacted.com",
  "enabled": true,
  "errata_status": 3,
  "errata_status_label": "Security errata applicable",
  "global_status": 2,
  "global_status_label": "Error",
  "hostgroup_id": null,
  "hostgroup_name": null,
  "hostgroup_title": null,
  "id": 1740,
  "image_file": "",
  "image_id": null,
  "image_name": null,
  "installed_at": null,
  "ip": "10.248.1.93",
  "ip6": null,
  "last_compile": "2022-12-30 10:15:05 -0500",
  "last_report": null,
  "location_id": 2,
  "location_name": "redacted",
  "mac": "00:00:00:00:00:00",
  "managed": false,
  "medium_id": null,
  "medium_name": null,
  "model_id": 2,
  "model_name": "VMware7,1",
  "name": "redacted.com",
  "openscap_proxy": null,
  "openscap_proxy_id": null,
  "openscap_proxy_name": null,
  "operatingsystem_id": 13,
  "operatingsystem_name": "RHEL Server 7.9",
  "organization_id": 1,
  "organization_name": "REDACTED",
  "owner_id": 1,
  "owner_name": "Anonymous Admin",
  "owner_type": "User",
  "provision_method": "build",
  "ptable_id": null,
  "ptable_name": null,
  "puppet_ca_proxy": null,
  "puppet_ca_proxy_id": null,
  "puppet_ca_proxy_name": null,
  "puppet_proxy": null,
  "puppet_proxy_id": null,
  "puppet_proxy_name": null,
  "puppet_status": 0,
  "purpose_addons_status": 0,
  "purpose_addons_status_label": "Unknown",
  "purpose_role_status": 0,
  "purpose_role_status_label": "Unknown",
  "purpose_sla_status": 0,
  "purpose_sla_status_label": "Unknown",
  "purpose_status": 0,
  "purpose_status_label": "Unknown",
  "purpose_usage_status": 0,
  "purpose_usage_status_label": "Unknown",
  "pxe_loader": null,
  "realm_id": null,
  "realm_name": null,
  "reported_data": {
   "boot_time": "2022-12-30 09:06:08 -0500",
   "cores": 1,
   "disks_total": null,
   "sockets": 8
  },
  "sp_ip": null,
  "sp_mac": null,
  "sp_name": null,
  "sp_subnet_id": null,
  "subnet6_id": null,
  "subnet6_name": null,
  "subnet_id": null,
  "subnet_name": null,
  "subscription_facet_attributes": {
   "autoheal": true,
   "hypervisor": false,
   "id": 3532,
   "last_checkin": "2022-12-30 14:15:09 -0500",
   "purpose_addons": [],
   "purpose_role": "",
   "purpose_usage": "",
   "registered_at": "2022-12-30 08:58:03 -0500",
   "registered_through": "redacted.com",
   "release_version": "7Server",
   "service_level": "",
   "user": null,
   "uuid": "656636f6-0ef5-40fd-8bdb-03ad12c2fc88"
  },
  "subscription_global_status": 0,
  "subscription_status": 5,
  "subscription_status_label": "Simple Content Access",
  "updated_at": "2022-12-30 10:15:05 -0500",
  "uptime_seconds": 24808,
  "use_image": null,
  "uuid": null
 },


### Actual results

  "foreman": {
    "content_attributes": {
      "applicable_module_stream_count": 0,
      "applicable_package_count": 35,
      "content_source": null,
      "content_source_id": null,
      "content_source_name": null,
      "content_view": {
        "id": 110,
        "name": "redacted"
      },
      "content_view_id": 110,
      "content_view_name": "REDACTED",
      "errata_counts": {
        "bugfix": 0,
        "enhancement": 0,
        "security": 0,
        "total": 0
      },
      "id": 1721,
      "kickstart_repository": null,
      "kickstart_repository_id": null,
      "kickstart_repository_name": null,
      "lifecycle_environment": {
        "id": 5,
        "name": "Prod"
      },
      "lifecycle_environment_id": 5,
      "lifecycle_environment_name": "Prod",
      "upgradable_module_stream_count": 0,
      "upgradable_package_count": 0,
      "uuid": "656636f6-0ef5-40fd-8bdb-03ad12c2fc88"
    },
    "host_collections": [
      "RHEL7",
      "redacted"
    ],
    "host_group": null,
    "id": 1740,
    "ipv4": "10.248.1.93",
    "ipv6": null,
    "location": "redacted",
    "name": "redacted.com",
    "organization": "SEDC",
    "smart_proxies": [],
    "subnet": null,
    "subnet6": null
  },


### Additional information

Our old install where this is working properly is using Red Hat's "Ansible Tower" which makes it difficult to ascertain the exact version. The version of Ansible Tower we're on is 3.8.4  running ansible 2.9
user: Nogal
issue_13384: state: open
title: Thycotic Secret Server SSH key + passphrase does not work
body: ##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change


##### COMPONENT NAME
 - API
 - UI
 - CLI
 - Other


##### SUMMARY
We use Thycotic Secret Server as an external secret management platform. SSH Keys stored in Secret Server are rotated every X days. When we try to use those SSH keys with Job Templates, it causes errors in the Ansible Automation Platform and the playbook does not run.

##### ENVIRONMENT
* AWX version: Ansible Automation Platform Controller 4.2.0
* AWX install method: operator, developer environment
* AWX deployment target: N/A
* Operating System: RHEL 8
* Web Browser: N/A

##### STEPS TO REPRODUCE

1. On an Ubuntu server, create a sudo user with an SSH key (no password).
2. Create a secret in the Thycotic Secret server using the **Unix Account (SSH Key Rotation - No Password)** template.
3. Wait for the heartbeat to report as being successful, confirming that the original SSH key provided is valid.
4. Use Secret Server to rotate the SSH key and generate a new one.
5. Go to Ansible Automation Platform, add a new credential, mapping the **SSH Private Key** (private-key) and **Private Key Passphrase** (private-key-passphrase) to the Thycotic Secret and Field names.
6. Try to run a Job Template using those credentials.

##### EXPECTED RESULTS

Ansible should connect to the Host specified on the Job Template. 

##### ACTUAL RESULTS

A python error is thrown with the following output:
```
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 539, in run
    res = receptor_job.run()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/receptor.py", line 271, in run
    res = self._run_internal(receptor_ctl)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/receptor.py", line 326, in _run_internal
    transmitter_future.result()
  File "/usr/lib64/python3.9/concurrent/futures/_base.py", line 439, in result
    return self.__get_result()
  File "/usr/lib64/python3.9/concurrent/futures/_base.py", line 391, in __get_result
    raise self._exception
  File "/usr/lib64/python3.9/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/utils/common.py", line 1153, in wrapper_cleanup_new_process
    return func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/receptor.py", line 398, in transmit
    ansible_runner.interface.run(streamer='transmit', _output=_socket.makefile('wb'), **self.runner_params)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/ansible_runner/interface.py", line 210, in run
    r.run()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/ansible_runner/streaming.py", line 48, in run
    json.dumps({'kwargs': self.kwargs}, cls=UUIDEncoder).encode('utf-8')
  File "/usr/lib64/python3.9/json/__init__.py", line 234, in dumps
    return cls(
  File "/usr/lib64/python3.9/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib64/python3.9/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/ansible_runner/streaming.py", line 26, in default
    return json.JSONEncoder.default(self, obj)
  File "/usr/lib64/python3.9/json/encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type Response is not JSON serializable
```

##### ADDITIONAL INFORMATION

While troubleshooting we noticed that if we download the encrypted private SSH key from the Secret Server, upload that encrypted SSH key and passphrase into Ansible Automation Platform, the connect WILL work. As such, the problem appears to be related to Ansible's ability to download and decrypt the SSH key before attempting to connect to the Linux host.

user: timothydilbert
issue_13382: state: open
title: set the real ip to logs  (login)
body: ##### SUMMARY
The value of (settings.REMOTE_HOST_HEADERS) is used to replace the REMOTE_ADDR.

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - API
 - Settings
 - Middleware
 
##### AWX VERSION
```
awx: 21.10.3.dev9+g132158586e
```
user: jordicasas1987
labels: community pull request: Applied to community based pull requests for filtering
issue_13380: state: open
title: Jobs error at random in UI (with stripped log output)
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Since some days some builds don't echo the log properly in the UI and error with `Job terminated due to error`.
Restarting sometimes works at random, sometimes not. It's like flipping a dice.

Other jobs which produce a lot of output (e.g. output from the `uri` module) can only be run with `no_log: true` as they face the same "output freeze" otherwise.

The job in the screenshot though already errors during "Gathering facts".

**Important:** I am aware of the log rotation issues on k8s like #13376 and others.
The cluster already runs with `containerLogMaxSize: "100Mi"` and hence I assume this not be the issue. Also this would not explain the errors already during the "Gathering facts" step. Furthermore AFAIK the log rotation issues should have been addressed on the AWX in the version we are using (besides the required log size increase in the kubelet).

**Important - 2**: Jobs continue to run on the cluster and finish "normally" there, yet they are marked as "error" in AWX.

We've recently updated the cluster from 1.23 to 1.24 though I can't fully confirm that the issues started after this upgrade. What I can say is that we didn't have any issues when we were on k8s 1.23 + AWX 21.8.0.

Overall this is a really big issue for us as the deployments only succeed at random and a lot manual time is needed. This is especially problematic for jobs within a workflow.

![image](https://user-images.githubusercontent.com/8430564/209807404-705707b9-a2a9-4a12-9b98-e92c9be0d3ca.png)


### AWX version

21.10.2

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

I can't provide a simple way to reproduce this.

### Expected results

The job does not error and mirrors the output from the pod.

### Actual results

The job is stuck during job output and reports a false-positive error.

### Additional information

- EKS 1.24
- EE: Based on `quay.io/ansible/ansible-runner:latest`, ~ 2 weeks old

Happy to provide additional information that would help solving this issue.
user: pat-s
issue_13375: state: open
title: Get "job_host_summaries" from awx.awx.tower_job_list 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [x] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Hello,
I'm using the awx.awx.tower_job_list module in Ansible to report data.

I try to query on sub url : /api/v2/jobs/111111/job_host_summaries/

Unfortunetly, after reading the doc, it's seem this module allow ansible to query only on /api/v2/jobs/111111/



### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Not possible to reproduce

### Current results

No result

### Sugested feature result

Same result like /api/v2/jobs/111111/ but with job_host_summaries datas

### Additional information

_No response_
user: Iwios
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_13370: state: open
title: AWX Operator upgrade from 0.25 to 0.26 fails
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Upgrade of AWX-Operator 0.25 to 0.26 fails, looping forever on all of the tasks, beginning with:
--------------------------- Ansible Task StdOut -------------------------------
TASK [installer : Stream backup from pg_dump to the new postgresql container] ***
task path: /opt/ansible/roles/installer/tasks/upgrade_postgres.yml:89
I have also tried to upgrade from 0.25 to higher versions, e.g. 0.28, or even 1.1.2 and 1.1.3 with no luck. As I am running on a virtual machine, I was able to revert to a snapshot with the 0.25 to try the different versions.


### AWX version

21.3.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

AWX Operator 0.25; AWX 21.3.0

### Operating system

Ubuntu 20.04.4 LTS

### Web browser

Chrome

### Steps to reproduce
```
sudo mkdir -p /data/postgres-13
sudo chmod 755 /data/postgres-13

# Recreate PV for new PSQL 13
cat <<EOF > pv-postgres-13.yaml
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: awx-postgres-13-volume
spec:
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  capacity:
    storage: 8Gi
  storageClassName: awx-postgres-volume
  hostPath:
    path: /data/postgres-13
EOF
kubectl apply -f pv-postgres-13.yaml

# Deploy new AWX Operator
git clone https://github.com/ansible/awx-operator.git -b 0.26.0
cd awx-operator
NAMESPACE=awx
make deploy
```

### Expected results

Upgrade completed succesfully

### Actual results

Infinite loop between the upgrade tasks, errors starting here:
```
task path: /opt/ansible/roles/installer/tasks/upgrade_postgres.yml:65\nok: [localhost] => {"censored": "the output has been hidden due to the fact that 'no_log: true' was specified for this result", "changed": false}\n\r\nTASK [installer : Set pg_dump command] *****************************************\r\ntask path: /opt/ansible/roles/installer/tasks/upgrade_postgres.yml:70\nok: [localhost] => {"censored": "the output has been hidden due to the fact that 'no_log: true' was specified for this result", "changed": false}\n\r\nTASK [installer : Set pg_restore command] **************************************\r\ntask path: /opt/ansible/roles/installer/tasks/upgrade_postgres.yml:81\nok: [localhost] => {"censored": "the output has been hidden due to the fact that 'no_log: true' was specified for this result", "changed": false}\n\r\nTASK [installer : Stream backup from pg_dump to the new postgresql container] ***\r\ntask path: /opt/ansible/roles/installer/tasks/upgrade_postgres.yml:89\nfatal: [localhost]: FAILED! => {"censored": "the output has been hidden due to the fact that 'no_log: true' was specified for this result", "changed": true}\n\r\nPLAY RECAP *********************************************************************\r\nlocalhost : ok=52 changed=3 unreachable=0 failed=1 skipped=17 rescued=0 ignored=0 \r\n\n","job":"5742676780418950479","name":"awx","namespace":"awx","error":"exit status 2"}

----- Ansible Task Status Event StdOut (awx.ansible.com/v1beta1, Kind=AWX, awx/awx) -----

PLAY RECAP *********************************************************************
localhost : ok=52 changed=3 unreachable=0 failed=1 skipped=17 rescued=0 ignored=0

{"level":"error","ts":1671699581.824264,"logger":"controller-runtime.manager.controller.awx-controller","msg":"Reconciler error","name":"awx","namespace":"awx","error":"event runner on failed","stacktrace":"sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.9.2/pkg/internal/controller/controller.go:253\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.9.2/pkg/internal/controller/controller.go:214"}
{"level":"info","ts":1671699586.604346,"logger":"logging_event_handler","msg":"[playbook task start]","name":"awx","namespace":"awx","gvk":"awx.ansible.com/v1beta1, Kind=AWX","event_type":"playbook_on_task_start","job":"1574724159804951253","EventData.Name":"installer : Check for presence of Deployment"}
```

Here is an example from the logs from the postgres-13 container (although in the beginning, there were duplicate key errors):
2022-12-22 08:59:36.366 UTC [271] ERROR: role "tos_monitoring" does not exist
2022-12-22 08:59:36.366 UTC [271] STATEMENT: GRANT SELECT ON TABLE public.social_auth_partial TO tos_monitoring;
2022-12-22 08:59:36.366 UTC [271] ERROR: role "tos_monitoring" does not exist
2022-12-22 08:59:36.366 UTC [271] STATEMENT: GRANT SELECT ON TABLE public.social_auth_usersocialauth TO tos_monitoring;
2022-12-22 08:59:36.366 UTC [271] ERROR: role "tos_monitoring" does not exist
2022-12-22 08:59:36.366 UTC [271] STATEMENT: GRANT SELECT ON TABLE public.sso_userenterpriseauth TO tos_monitoring;
2022-12-22 08:59:36.366 UTC [271] ERROR: role "tos_monitoring" does not exist
2022-12-22 08:59:36.366 UTC [271] STATEMENT: GRANT SELECT ON TABLE public.taggit_tag TO tos_monitoring;
2022-12-22 08:59:36.366 UTC [271] ERROR: role "tos_monitoring" does not exist
2022-12-22 08:59:36.366 UTC [271] STATEMENT: GRANT SELECT ON TABLE public.taggit_taggeditem TO tos_monitoring;

### Additional information

k3s version v1.21.3+k3s1 (1d1f220f)
go version go1.16.6
AWX Operator: 0.25
user: kuchynkap
issue_13368: state: open
title: In some circumstances Events never get cleared from callback_receiver buffer.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Events of a certain type can cause issues with the callback's bulk create. In those cases, some events can make it into the database and will later cause duplicate key errors:

```
Database Error Saving individual Job Event, error A string literal cannot contain NUL (0x00) characters.
```

The above exception breaks the initial bulk create that then causes the other issue:

```
Database Error Flushing Job Events
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "main_inventoryupdateevent_20221220_14_pkey"
DETAIL:  Key (id, job_created)=(974510, 2022-12-20 14:54:09.658252+00) already exists.
```

Those events never get cleared from the buffer and are later attempted again:

```
Error in events bulk_create, will try indiviually up to 5 errors, error duplicate key value violates unique constraint "main_inventoryupdateevent_20221221_04_pkey"
DETAIL:  Key (id, job_created)=(979979, 2022-12-21 04:25:23.812477+00) already exists.
```

### AWX version

devel

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.14.0

### Operating system

RHEL

### Web browser

_No response_

### Steps to reproduce

1. create a job template which would send null character as result data
2. tail logs 

### Expected results

All event data is saved to the database

### Actual results

some events never make it to the database and are not cleared from the callback receiver's buffer.

### Additional information

This issue seems to be caused initially by bad result data from an event, which causes a bulk create to fail after inserting X number of events, those events are then reprocessed and raise a duplicate key error repeatedly.


user: gamuniz
issue_13349: state: open
title: awx-ee container returns false when sending service advertisement
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Hi,
in freshly deployed AWX instance awx-ee container returns following Debug log

DEBUG 2022/12/19 09:25:59 Client connected to control service @
DEBUG 2022/12/19 09:25:59 Control service closed
DEBUG 2022/12/19 09:25:59 Client disconnected from control service @
DEBUG 2022/12/19 09:26:14 Sending service advertisement: &{awx-fsdf34s3a-fns26 control 2022-12-19 09:26:14.60991136 +0000 UTC m=+1085.122714070 1 map[type:Control Service] [{local false} {kubernetes-runtime-auth false} {kubernetes-incluster-auth false}] 

Do you have any idea what is the reason of false status?

### AWX version

21.9.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

awx instance is deployed with helm
helm repo add awx-operator https://ansible.github.io/awx-operator/
helm upgrade --install test-awx-operator operator /awx-operator -n awx --create-namespace -f helm/values-prod.yaml
values file contains only postgres_storage_class and ingress configuration

### Expected results

Execution Environments is working correctly and accepts projects to be run on it

### Actual results

No Execution Environments in AWX. 
EE containers returns false when sending service advertisement

### Additional information
_No response_
user: ktomaszx
issue_13339: state: open
title: Periodically run execution node health checks with a system job
body: ##### SUMMARY
We have this gap in the heartbeat logic, which @kdelee has complained about.

Basically, if we don't have any reason to believe that an execution node is broken, we won't ever discover this automatically. If an execution node is in an error state, then we periodically re-check it. However, if it fits these two conditions we _don't_ check it

 - its last known health check status was successful
 - its receptor daemon is connected to the mesh, and we see it from the receptor health check in the `receptor status` command

This somewhat intentionally will not capture the case where the remote node's receptor is working, but has its `ansible-runner` install messed up somehow. Just imagine that someone re-installs it incorrectly. We will never mark that node as offline unless someone runs a health check against it manually.

The problem is, it's poor form for the system to have full control over this kind of check. Users will have their own particular reasons that an execution node might get disrupted, and _they_ should be in control of how often this (completely periodic) fallback check should happen, or if it should happen. The best tool for that is a system job.

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - API


user: AlanCoding
issue_13337: state: open
title: Experimental podman integration for devel environment
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
I've switched to using podman exclusively on my development VM, so I've been unable to use the documented development installation. 

These changes (though messy and in need of much improvement) make it possible for me to follow the documented installation with minor changes to spin up AWX in a podman pod.

<ins>**NOTE:** this is really not intended to be merged, it's just to provide a PoC for determined users.</ins>
<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - Other

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 21.9.1.dev70+gfdb2d14157.d20221214
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->
On my Ubuntu 22.04.1 LTS VM, the following works for me to stand up the development environment:

<!--- Paste verbatim command output below, e.g. before and after your change -->
###### Pre-clean
I had to use sudo for this, as podman changes the uid on the files it generates, so the make clean targets fail for those cases.
```sh
$ PYTHON=python3 sudo -E make clean clean-venv clean-schema clean-languages
```
###### Spin it up
Use the new `IMAGE_BUILDER=podman` variable to switch from docker to podman for the targets that are run in common.
```sh
$ PYTHON=python3 IMAGE_BUILDER=podman make docker-compose-build
# ... renders the Dockerfile and supervisor configs as usual...
# ... runs podman build with lots of output...
$ PYTHON=python3 IMAGE_BUILDER=podman make podman-kube-play
# ... renders _sources files and secrets via docker-compose-sources target
# ... docker-compose-sources target renders an additional file for podman kube play!
podman play kube tools/docker-compose/_sources/podman_kube.yml
Volumes:
redis_socket_1
awx_db
Pod:
c48f62c69f1e2824442f8769df8e760555f1d43d23ee5acd2c0c933e1224bfe0
Containers:
e773908787f3048881e6a1a1f2758b92c3fce7a7ed9d9dbe6f25851ebb631279
758575f91362488b5b429f857740f8bdd5a3d86fdd31b60c17245ba7639d71a0
eeacc331150cbc378de47a5ffc7381abe8940155efffb9959d2d302997983368

# Then we check the logs...
$ podman logs -f awx-tools_awx_1
# and see that the migrations are being applied; so far so good. Once is reaches running state,  we check out https://localhost:8043/, but alas there's no UI! So we build that next:
$ podman exec awx-tools_awx_1 make clean-ui ui-devel
# But we get rm: cannot remove 'awx/ui/build/static': Permission denied 
# I should probably figure out why this happens, but for now, just fix it and try again.
$ sudo chown -R philipsd6:philipsd6 awx/ui/build
$ podman exec awx-tools_awx_1 make clean-ui ui-devel

# And now we have a UI! Time to finish up
$ podman exec awx-tools_awx_1 awx-manage create_preload_data
$ podman exec -ti awx-tools_awx_1 awx-manage changepassword admin
```
And finally we can log in successfully as admin, and run the demo playbook!
user: philipsd6
issue_13336: state: open
title: Testing controller hostname DNS resolution is preventing awx_collection to work with http[s]_proxy
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

ControllerApi code check for host resolution via `getaddrinfo` (see https://github.com/ansible/awx/blob/devel/awx_collection/plugins/module_utils/controller_api.py#L146).

This prevent any module to work behind http[s]_proxy.

eg:
```
- name: Ensure organizations are configured
  ansible.controller.organization:
    controller_host: "{{ aap_controller_host }}"
    controller_username: "{{ aap_controller_username | default(omit) }}"
    controller_password: "{{ aap_controller_password | default(omit) }}"
    validate_certs: "{{ aap_controller_validate_certs | default(omit) }}"
    default_environment: "{{ organization.default_environment | default(omit) }}"
    description: "{{ organization.description | default(omit) }}"
    galaxy_credentials: "{{ organization.galaxy_credentials | default(omit) }}"
    instance_groups: "{{ organization.instance_groups | default(omit) }}"
    max_hosts: "{{ organization.max_hosts | default(omit) }}"
    name: "{{ organization.name }}"
    state: "{{ organization.state | default(omit) }}"
  environment:
    https_proxy: http://<http_proxy_host>:3128
```
Fails with `"msg": "Unable to resolve controller_host ([Errno -2] Name or service not known)`

Removing the `try/except` block for `getaddrinfo` make the module works with http proxy

As this modules talks on http(s), it should work with http proxies.

### AWX version

ansible.controller 4.3.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

2.13

### Operating system

RHEL 8

### Web browser

_No response_

### Steps to reproduce

* Install awx.awx or downstream ansible.controller collection
* try to use collection modules via an http[s] proxy (see sumary for task example)

### Expected results

Collection's modules works

### Actual results

Fails with `"msg": "Unable to resolve controller_host ([Errno -2] Name or service not known)`

### Additional information

_No response_
user: bagasse
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_13323: state: open
title: Galaxy named servers
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Unable to use named galaxy servers in awx.

Now, if you have more than one galaxy servers in awx, when project sync job is running it gets the following environment variables:
ANSIBLE_GALAXY_SERVER_LIST="server0,server1"
ANSIBLE_GALAXY_SERVER_SERVER0_URL="url"
ANSIBLE_GALAXY_SERVER_SERVER0_TOEKN="token"
ANSIBLE_GALAXY_SERVER_SERVER1_URL="url2"
ANSIBLE_GALAXY_SERVER_SERVER2_TOKEN-"token2"

We need to support named galaxy servers in awx. It means that awx should set the following environment variables
ANSIBLE_GALAXY_SERVER_LIST="MyLocalCoolServer,Global_server"
ANSIBLE_GALAXY_SERVER_MYLOCALCOOLSERVER_URL="..."
ANSIBLE_GALAXY_SERVER_GLOCAL_SERVER_URL="..."



### AWX version

19.5.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

ansible.cfg
```
[galaxy]
server_list = local, global

[galaxy_server.local]
url=https://local.galaxy-ng.example.net/api/galaxy/
token = "myToken"

[galaxy_server.global]
url=https://proxy.galaxy.example.net/repository/galaxy/
```
requirements.yml
```
---

collections:
  - name: "community.general"
    version: "*"
    source: "global"
  - name: "community.hashi_vault"
    version: "*"
    source: "global"
  - name: "my.authomatization"
    version: "1.8.0"
    source: "local"
```

When you manual run `ansible-galaxy collections install -r requirements.yml` everything works fine.

Setup this galaxy servers in awx as global and local, add galaxy servers to organization, then sync project. 



### Expected results

In project sync job we have envs:
ANSIBLE_GALAXY_SERVER_LIST="local,global"
ANSIBLE_GALAXY_SERVER_LOCAL_URL="..."
ANSIBLE_GALAXY_SERVER_GLOBAL_URL="..."

### Actual results

ANSIBLE_GALAXY_SERVER_LIST="server0,server1"
ANSIBLE_GALAXY_SERVER_SERVER0_URL="url"
ANSIBLE_GALAXY_SERVER_SERVER0_TOEKN="token"
ANSIBLE_GALAXY_SERVER_SERVER1_URL="url2"
ANSIBLE_GALAXY_SERVER_SERVER2_TOKEN-"token2"

### Additional information

Problem in this code https://github.com/ansible/awx/blob/devel/awx/main/tasks/jobs.py#L1154
```
        galaxy_server_list = []
        if project_update.project.organization:
            for i, cred in enumerate(project_update.project.organization.galaxy_credentials.all()):
                env[f'ANSIBLE_GALAXY_SERVER_SERVER{i}_URL'] = cred.get_input('url')
                auth_url = cred.get_input('auth_url', default=None)
                token = cred.get_input('token', default=None)
                if token:
                    env[f'ANSIBLE_GALAXY_SERVER_SERVER{i}_TOKEN'] = token
                if auth_url:
                    env[f'ANSIBLE_GALAXY_SERVER_SERVER{i}_AUTH_URL'] = auth_url
                galaxy_server_list.append(f'server{i}')
```
when we build env variables for galaxy, we do not use name of galaxy credentials.
I thing we could use credentials name. It looks like easy to fix
user: SJay3
issue_13317: state: open
title: AWX cannot send logs to Loki and Grafana
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

We configure AWX according to Loki url and port, slelect logstash as logtype but Loki does not receive the logs.

### AWX version

AWX 21.1.0 

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

adding this API settings `/api/v2/settings/logging/`
`{
    "LOG_AGGREGATOR_HOST": "172.20.1.120",
    "LOG_AGGREGATOR_PORT": 3100,
    "LOG_AGGREGATOR_TYPE": "logstash",
    "LOG_AGGREGATOR_USERNAME": "",
    "LOG_AGGREGATOR_PASSWORD": "",
    "LOG_AGGREGATOR_LOGGERS": [
        "awx",
        "activity_stream",
        "job_events",
        "system_tracking"
    ],
    "LOG_AGGREGATOR_INDIVIDUAL_FACTS": false,
    "LOG_AGGREGATOR_ENABLED": true,
    "LOG_AGGREGATOR_TOWER_UUID": "",
    "LOG_AGGREGATOR_PROTOCOL": "tcp",
    "LOG_AGGREGATOR_TCP_TIMEOUT": 5,
    "LOG_AGGREGATOR_VERIFY_CERT": false,
    "LOG_AGGREGATOR_LEVEL": "INFO",
    "LOG_AGGREGATOR_MAX_DISK_USAGE_GB": 1,
    "LOG_AGGREGATOR_MAX_DISK_USAGE_PATH": "/var/lib/awx",
    "LOG_AGGREGATOR_RSYSLOGD_DEBUG": false,
    "API_400_ERROR_LOG_FORMAT": "status {status_code} received by user {user_name} attempting to access {url_path} from {remote_addr}"
}
`

### Expected results

Logs are sent to Loki

### Actual results

No logs are sebt to Loki

### Additional information

_No response_
user: mihai-satmarean
issue_13310: state: open
title: Auditor team role has no access to notification_templates_error
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

I have a user (user A) that is a member of team A, this team has Auditor permissions on org B. 

Trying to call API endpoint `/api/v2/job_templates/<job_id>/notification_templates_error/` where `job_id` is a job belonging to org B renders an empty result:
```
{
  "count": 0,
  "next": null,
  "previous": null,
  "results": []
}
```
The same request to the `notification_templates_success` endpoint succeeds. 

If a grant Auditor permission for user A on the user level, the call to `notification_templates_error` endpoint succeeds. So the team role does not work for this endpoint while the user role does.  




### AWX version

21.6.0 

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.12

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Create a user which is member of a team with Auditor permissions on an organization (org B)  
Send API get to error notification templates for a job belonging to org B (`/api/v2/job_templates/<job_id>/notification_templates_error/`)  



### Expected results

Get list of error notification templates for job

### Actual results

Getting an empty result set:
```
{
  "count": 0,
  "next": null,
  "previous": null,
  "results": []
}
``` 

### Additional information

_No response_
user: wiad
issue_13298: state: open
title: Allow to use Hashicorp Vault Auth in AWX with AWS
body: ##### SUMMARY
I don't want to store AWS credentials in AWX, because I want to use short lived credentials through Vault for each run.Currently this is not possible with AWX. This is a draft implementation of a custom Vault Auth managed credential type, along with a managed credential. 

This will allow us to use Vault Auth backend with the Vault/AWS credential type.

Comments regarding implementation are welcome.  Current implementation works with AWS, and it is in use for some time.

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - API

##### AWX VERSION
21.10.0

##### ADDITIONAL INFORMATION

* AWS Inventory
```yaml
plugin: aws_ec2
regions:
  - eu-west-1

filters:
  instance-state-name: running

hostnames:
  - tag:Name

compose:
  ansible_host: instance_id
  ansible_aws_ssm_region: placement.region

keyed_groups:
  - prefix: tag
    key: tags | lower
  - key: placement.region
    prefix: aws_region
```                                                                                                                                                                                                              
* Playbook
```yaml
- hosts: all
  gather_facts: yes
  tasks:
    - name: Display all variables/facts known for a host
      ansible.builtin.debug:
        var: hostvars
    - name: Display some secrets that need to be passed
      ansible.builtin.debug:
        msg: "{{ lookup('env', item) }}"
      with_items:
        - AWS_ACCESS_KEY_ID
        - AWS_SECRET_ACCESS_KEY
        - AWS_SESSION_TOKEN
```
* Terraform 

```hcl
terraform {
  required_providers {
    awx = {
      source = "registry.terraform.io/ilijamt/awx"
    }
  }
}

provider "awx" {
  insecure_skip_verify = true
}

data "awx_credential_type" "hashivault_auth" {
  name = "HashiCorp Vault Auth"
}

data "awx_credential_type" "vault_aws" {
  name = "Vault/AWS"
}

data "awx_organization" "default" {
  name = "Default"
}

resource "awx_credential" "hashivault_auth" {
  name            = "hashivault-auth"
  credential_type = data.awx_credential_type.hashivault_auth.id
  organization    = data.awx_organization.default.id
  description     = "We can use this to auth against Vault"
  inputs = jsonencode({
    "url"   = "https://vault.example.com"
    "token" = "token"
  })
}

resource "awx_credential" "hashivault_auth_ansible_ssm" {
  name            = "ansible-ssm"
  credential_type = data.awx_credential_type.vault_aws.id
  organization    = data.awx_organization.default.id
}

resource "awx_credential_input_source" "hashivault_auth_input_ansible_ssm" {
  input_field_name = "auth_full_path"
  metadata = jsonencode({
    "auth_full_path" : "aws/creds/ansible-ssm"
  })
  target_credential = awx_credential.hashivault_auth_ansible_ssm.id
  source_credential = awx_credential.hashivault_auth.id
}
```
user: ilijamt
labels: community pull request: Applied to community based pull requests for filtering
issue_13292: state: open
title: Hostnames in dev environment fail validator, makes no-op PATCH error
body: ##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change


##### COMPONENT NAME
 - API


##### SUMMARY

A new Instance hostname validator fails with the basic docker development environment.

Also, we seem to validate the field even when it's not changing, which makes it hard to do other things in the API.


##### ENVIRONMENT
* AWX install method:  developer environment

##### STEPS TO REPRODUCE

Start the docker-compose development environment with 1 hybrid instance.

PATCH with default data

https://localhost:8043/api/v2/instances/1/

##### EXPECTED RESULTS

A 200 response code.

##### ACTUAL RESULTS

A 400 response code with

```json
{
    "hostname": [
        "illegal characters detected in hostname=awx_1. Please verify."
    ]
}
```

##### ADDITIONAL INFORMATION

It seems questionable that we allow registration with a hostname that would fail validation?

Provided that we don't want to fix that, then we must assume that we have invalid hostnames in all cases, and it would be nice to only validate when it is changing.

user: AlanCoding
issue_13287: state: open
title: Running install_receptor.yml fails when adding execution node(Rocky Linux 9.0).
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

I prepared a Rocky Linux 9.0 machine for the execution node of the AWX.  
And I ran install_receptor.yml according to [execution_nodes.md](https://github.com/ansible/awx/blob/e6497be200d3311288237859a351483f769c0fe7/docs/execution_nodes.md) but it fails at the job "Install dependencies specific to the node type"

The workaround for this problem is to modify [install_bundle/group_vars/all.yml](https://github.com/ansible/awx/blob/devel/awx/api/templates/instance_install_bundle/group_vars/all.yml) like following.

```yaml
receptor_dependencies:
  # - python39-pip
  - python3-pip
```


### AWX version

21.7

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

Rocky Linux 9.0

### Web browser

_No response_

### Steps to reproduce

1. Setup a Rocky Linux 9.0 machine for the execution node of the AWX.
1. According to [execution_nodes.md](https://github.com/ansible/awx/blob/e6497be200d3311288237859a351483f769c0fe7/docs/execution_nodes.md) overview, perform steps 1 to 3.
1. At the step 4,
    1. Run `ansible-galaxy collection install -r requirements.yml`
    1. Modify inventory.yml correctly.
    1. Run `ansible-playbook -i inventory.yml install_receptor.yml`


### Expected results

Running playbook ends successfully.


### Actual results

Failed at the job "Install dependencies specific to the node type" with following error msg.

```json
fatal: [remote-execution]: FAILED! => {
     "changed": false,
     "failures": [
         "No package python39-pip available."
     ],
     "invocation": {
         "module_args": {
             "allow_downgrade": false,
             "allowerasing": false,
             "autoremove": false,
             "bugfix": false,
             "cacheonly": false,
             "conf_file": null,
             "disable_excludes": null,
             "disable_gpg_check": false,
             "disable_plugin": [],
             "disablerepo": [],
             "download_dir": null,
             "download_only": false,
             "enable_plugin": [],
             "enablerepo": [],
             "exclude": [],
             "install_repoquery": true,
             "install_weak_deps": true,
             "installroot": "/",
             "list": null,
             "lock_timeout": 30,
             "name": [
                 "python39-pip"
             ],
             "nobest": false,
             "releasever": null,
             "security": false,
             "skip_broken": false,
             "state": "present",
             "update_cache": false,
             "update_only": false,
             "validate_certs": true
         }
     },
     "msg": "Failed to install some of the specified packages",
     "rc": 1,
     "results": []
}
```


### Additional information

[install_receptor.yml](https://github.com/ansible/awx/blob/devel/awx/api/templates/instance_install_bundle/install_receptor.yml) calls [setup-RedHat.yml](https://github.com/ansible/receptor-collection/blob/main/roles/setup/tasks/setup-RedHat.yml) via the role of [ansible.receptor.setup](https://github.com/ansible/receptor-collection/blob/main/roles/setup/tasks/main.yml)  
And it fails at the job "Install dependencies specific to the node type"

```yaml
setup-RedHat.yml
---
- name: Install receptor packages
   ansible.builtin.dnf:
     name: "{{ receptor_packages }}"
     state: present

- name: Install dependencies specific to the node type  # <=this
   ansible.builtin.dnf:
     name: "{{ receptor_dependencies | default([]) }}"
     state: present
```

The variable `receptor_dependencies` is defined at install_bundle/group_vars/all.yml downloaded form the AWX and it comes from this template [all.yaml](https://github.com/ansible/awx/blob/devel/awx/api/templates/instance_install_bundle/group_vars/all.yml)

```yaml
all.yml

receptor_user: awx
receptor_group: awx
...snip
receptor_dependencies:  # <=this
  - python39-pip

podman_user: "{{ receptor_user }}"
podman_group: "{{ receptor_group }}"
```

Actually, on Rocky 9.0(and may be Rhel 9 and its clones) `dnf install python39-pip` doesn't work but `dnf install python3-pip` works (and default Python version is 3.9)

So, the workaround is to modify all.yml like following.

```yaml
receptor_dependencies:
  # - python39-pip
  - python3-pip
```

I understand this issue dependents specific environment, so I don't mind if this report is regarded not as a bug report, but as an introduction to workaround.  
I hope this report helps my fellow not spending time to struggle with this problem.
user: shihou-ono
issue_13278: state: open
title: Find and replace the use of distutils awx_collection
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

The distutils package is being deprecated from the standard library in python. We get a warning message from the import sanity test outlining the timeline as well as where we can look for replacements. 
```
ERROR: plugins/modules/workflow_launch.py:93:0: traceback: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives (at plugins/module_utils/controller_api.py:14:0)
```
We have a few options to move to but wanted to open an issue to start the discussion. These errors will be suppressed going forward for the time being by the ignore file entries added in #13238 once that is merged.  

### AWX version

awx: 21.5.1.dev437+g99e0e06cc3

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

ansible [core 2.14.0]

### Operating system

Fedora 36

### Web browser

_No response_

### Steps to reproduce

run the ansible-test sanity suite over top of the collection via `make test_collection_santiy` or via being in the `~/.ansible/collection/ansible_collections/awx/awx` dir and running `ansible-test sanity --docker`.

### Expected results

Import tests pass successfully without warning. 

### Actual results

```
Running sanity test "import" on Python 3.10
ERROR: Found 45 import issue(s) on python 3.10 which need to be resolved:
ERROR: plugins/inventory/controller.py:76:0: traceback: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives (at plugins/module_utils/controller_api.py:14:0)
```

### Additional information

This error will show up on all relevant python version import tests starting at version 3.9. 
user: thedoubl3j
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_13272: state: open
title: Issue label for incompliance with Ansible
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Existing incompliances of AWX with Ansible, make AWX quite difficult to use.
Developing Ansible Playbooks, Roles and Collections following the Ansible Documentation to find out, they are not working in AWX.

Maybe there should be a list of incompliances documented somewhere?
What about an issue label, which indicates incompliance issues?

Perhaps it should be explicitly specified in the [AWX/Tower Docs](https://docs.ansible.com/ansible-tower/latest/html/userguide/projects.html#ansible-galaxy-support), that the behaviour differs from Ansible.

#### Examples
#5926
#12364

### Select the relevant components

- [ ] UI
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

1. Search the [AWX Issue Labels](https://github.com/ansible/awx/labels) for `compliance`, `compliant`, `compatibility` aso.
2. Search the [AWX/Tower Documentation](https://docs.ansible.com/ansible-tower/latest/html/userguide/projects.html#ansible-galaxy-support) for hints on differenciating behaviour to Ansible.

### Current results

1. The result list is empty
2. None are found.

### Sugested feature result

1. An issue label, which clearly identifies known incompliances/incompatibilities of AWX with Ansible
2. Find a hint, explicitly explaining, that behaviour differs from Ansible.

### Additional information

_No response_
user: ng-bsy
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_13265: state: open
title: Persistent filter for lists is being messed with by API requests
body: When a user sets a filter and then visits that resource individually, when they click the 'Back to xxx' button, the filter should persist. But if the list of resources is long, the API call for the list overrides the API call for the persistent filter results. 

To reproduce:

Using the Templates list:

Populate the list with 18-20 templates.
Perform a basic search for one specific template.
Click the template to visit the detail screen.
Click 'Back to Templates'.
You'll notice that the whole list populates, but in the URL bar, the search is still showing.

![image](https://user-images.githubusercontent.com/63685497/205137871-01888ab9-6a03-432f-b28c-d4b44a2c9a92.png)

user: akus062381
issue_13261: state: open
title: Update python-tss-sdk dependency
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

We pin python-tss-sdk to 1.0.0 but the latest (as of opening this issue) is 1.2.0. This library is for Thytoic secret server. In the latest 1.2.0 Thytoic was renamed to Delinea and the namespace of the package was changed but the functionality seems to be intact. We need to update references like `from thycotic.secrets.server ...` to `from delinea.secrets.server ...` and test functionality.

### AWX version

21.9.0

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

N/A

### Operating system

N/A

### Web browser

_No response_

### Steps to reproduce

Upgrade python-tss-sdk to latest version and test.

### Expected results

Tests should pass.

### Actual results

Import errors.

### Additional information

_No response_
user: john-westcott-iv
issue_13260: state: open
title: Update azure-keyvault dependency
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

The azure-keyvault dependency is pinned in requirements.in to version 1.1.0. The latest version (as of opening this issue) is 4.2.0. In version 4.0.0 the moved the code out of this package into 3 sub packages and this package now just installs the sub packages. Because of this our code throws an error if you attempt to upgrade the package (see README.md in requirements). It appears this only affects the azure credential in one file. We need to review the documentation for the sub packages and change our code to use the appropriate package.

### AWX version

21.9.0

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

N/A

### Operating system

N/A

### Web browser

_No response_

### Steps to reproduce

Upgrade azure-key vault to 4.x, run integration/functional tests.

### Expected results

Integration/functional tests should pass.

### Actual results

``` 
File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/credential_plugins/azure_kv.py", line 4, in <module>
  from azure.keyvault import KeyVaultClient, KeyVaultAuthentication
ImportError: cannot import name 'KeyVaultClient'
```

### Additional information

_No response_
user: john-westcott-iv
labels: dependencies: Pull requests that update a dependency file
issue_13242: state: open
title: AWX YouTube Channel Content Request
body: With the recent creation of the AWX YouTube Channel https://www.youtube.com/@ansible-awx 

We are looking for feedback on what kind of videos the community would like to see. 

Create a comment to suggest the video and topics that you would like to see and 👍 if anything interest you.

If you would like to help us create content and receive a angry spuds plushy please contact us on Matrix: [#awx:ansible.com](https://matrix.to/#/#awx:ansible.com)
user: TheRealHaoLiu
issue_13239: state: open
title: RRule field exrule has been deprecated
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

The UI uses an icalendar, the library that rrule uses to generate repeated schedules has deprecate their `exrule` field.  We use that field in the UI to allows to users to declare when they do not want their schedule to kick off a template.  Since it is deprecated we need to figure out what to do about it.  

### AWX version

latest

### Select the relevant components

- [X] UI
- [X] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

See above

### Expected results

Schedules work as expected

### Actual results

Schedules don't work

### Additional information

See https://github.com/ansible/awx/issues/13237
user: AlexSCorey
issue_13237: state: open
title: Add support for RRule string to be entered in schedule form in UI.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Allow users to enter rrule string into ui instead of using all the fields on the form.  

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Go to schedule form inside Job template.  Currently there are many use cases of schedules that the UI does not support.  based on user feedback we considered adding more complexity to the form to allow users to enter more complex schedules. We decided that the best first step would be to allow users to generate their own rrule string and to copy and paste that string into the schedule form, as an _advanced_ feature of the form.

### Current results

The form is limiting

### Sugested feature result

Allow users to generate their own rrule string and copy/paste it into the UI

### Additional information

_No response_
user: AlexSCorey
issue_13233: state: open
title: awx-cli bulk delete jobs
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Currently the awx-cli supports only deleting  one job per ID like:
```
awx job delete ID1
```

Is there the possibility or plan to support more than one job ID or a bulk action (delete all jobs)?
The  frontend is capable of deleting all selected jobs, but for CLI usage this feature would be awesome. Maybe also combine that with filter usage.

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Steps to reproduce

awx job delete ID1 ID2

### Current results

only ID1 is deleted

### Sugested feature result

adding a bulk feature
* all jobs
* jobs using filter
* multiple jobs 

### Additional information

_No response_
user: r0b1ndot
issue_13232: state: open
title: Print inventory host details and play recap on notification mail
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Print inventory's host details on mail notification.

Print PLAY RECAP of job on mail notification.

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

trigger a job 

### Current results

Job #419134 had status successful, view details at https://awx/#/jobs/playbook/419134

Patching completed successfully on 19 servers.


### Sugested feature result

Job #419134 had status successful, view details at https://awx/#/jobs/playbook/419134

Patching completed successfully on 19 servers.

inventory host details,
host1
host2
host3
...
host19

PLAY RECAP *********************************************************************
host1 : ok=57   changed=17   unreachable=0    failed=0    skipped=32   rescued=1    ignored=0   
host2 : ok=57   changed=17   unreachable=0    failed=0    skipped=32   rescued=1    ignored=0   
host3 : ok=57   changed=17   unreachable=0    failed=0    skipped=32   rescued=1    ignored=0
....
host19 : ok=57   changed=17   unreachable=0    failed=0    skipped=32   rescued=1    ignored=0  

### Additional information

_No response_
user: BlassArun
issue_13229: state: open
title: AWX does not check SSH host keys
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Since AWX runs jobs in throw-away containers, the ~/.ssh/known_hosts file has to be persisted outside the container to be of use.
Currently, the ssh option `-o StrictHostKeyChecking` doesn't matter because old hostkeys are not known, so AWX happily accepts any host keys.

### AWX version

21.9.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.12.5.post0

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. Add a host in AWX that is accessed over SSH
2. run a job on that host
3. login to that host otherwise and force recreation of host keys. e.g. on centos 8:
       sudo rm /etc/ssh/ssh_host_*
       sudo systemctl start sshd-keygen@ed25519
       sudo systemctl restart sshd
4. run another AWX job on that host

### Expected results

the new job to fail because of changed hostkeys

### Actual results

job is ok

### Additional information

#2282 and #452 read similar, but were before EEs
user: azrdev
issue_13228: state: open
title: RFE: GUI for debugging failing notifications / output log
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

When configuring a notification template, the only way to see all notifications that are sent is via the api, the GUI only has a marker if the last run of a notification template failed or succeeded.
In case notifications fail to get delivered this makes it hard to debug:
- what notification was sent at all
- what was the content/body, and the return code: in case the receiver is picky, and/or the "Customize Message" template is wrong (e.g. references an undefined variable)
- what was the response -- for webhooks currently the API only has the HTTP return code, no further details

The "test message" doesn't help if the receiver expects a certain format, see #8798

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

1. Create a notification template of type webhook
2. modify its custom notifications to generate a format rejected by the receiver
3. trigger the notification (e.g. attach it to a JT and run that)
4. try to see the error details:
  - HTTP status code 
  - HTTP return body
  - sent body

### Current results

This is not visible in the GUI.

`/api/v2/notifications/?order_by=-modified` (only) has 
- HTTP status code
- sent body


### Sugested feature result

See all the details which help debugging notifications
- when the backend fails to accept what is sent
- when the backend is unreachable (network or sth like HTTP 500)
- when awx failed to render the message (e.g. I see some empty `body`s here)
- when awx failed to send the message for some other reason (compare #2982)

Maybe reusing the normal playbook run GUIs could save some work here, similar to #9969

### Additional information

_No response_
user: azrdev
issue_13226: state: open
title: oidc soical login does not support group mapping
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

oidc login fails with python exception when oidc auth flow response returns groups attribute.

### AWX version

21.8.0

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

n/a

### Operating system

n/a

### Web browser

Firefox, Chrome, Edge

### Steps to reproduce

configure oidc to use keylcoak sso. enable groups to be returned in the oidc response. awx will throw the following error when creating new users via the oidc login flow:


`
TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use groups.set() instead.
2022-11-22 20:51:57,430 ERROR    [cba2cb8d] django.request Internal Server Error: /sso/complete/oidc/
`

full stack trace:

`2022-11-22 20:51:57,430 ERROR    [cba2cb8d] django.request Internal Server Error: /sso/complete/oidc/
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/lib64/python3.9/contextlib.py", line 79, in inner
    return func(*args, **kwds)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_django/utils.py", line 46, in wrapper
    return func(request, backend, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_django/views.py", line 31, in complete
    return do_complete(request.backend, _do_login, user=request.user,
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/actions.py", line 45, in do_complete
    user = backend.complete(user=user, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/backends/base.py", line 40, in complete
    return self.auth_complete(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/utils.py", line 247, in wrapper
    return func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/backends/oauth.py", line 401, in auth_complete
    return self.do_auth(response['access_token'], response=response,
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/utils.py", line 247, in wrapper
    return func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/backends/oauth.py", line 413, in do_auth
    return self.strategy.authenticate(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_django/strategy.py", line 105, in authenticate
    return authenticate(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/views/decorators/debug.py", line 42, in sensitive_variables_wrapper
    return func(*func_args, **func_kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/contrib/auth/__init__.py", line 76, in authenticate
    user = backend.authenticate(request, **credentials)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/backends/base.py", line 80, in authenticate
    return self.pipeline(pipeline, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/backends/base.py", line 83, in pipeline
    out = self.run_pipeline(pipeline, pipeline_index, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/backends/base.py", line 113, in run_pipeline
    result = func(*args, **out) or {}
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/pipeline/user.py", line 119, in user_details
    setattr(user, name, value)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/fields/related_descriptors.py", line 545, in __set__
    raise TypeError(
TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use groups.set() instead.
2022-11-22 20:51:57,430 ERROR    [cba2cb8d] django.request Internal Server Error: /sso/complete/oidc/
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/lib64/python3.9/contextlib.py", line 79, in inner
    return func(*args, **kwds)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_django/utils.py", line 46, in wrapper
    return func(request, backend, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_django/views.py", line 31, in complete
    return do_complete(request.backend, _do_login, user=request.user,
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/actions.py", line 45, in do_complete
    user = backend.complete(user=user, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/backends/base.py", line 40, in complete
    return self.auth_complete(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/utils.py", line 247, in wrapper
    return func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/backends/oauth.py", line 401, in auth_complete
    return self.do_auth(response['access_token'], response=response,
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/utils.py", line 247, in wrapper
    return func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/backends/oauth.py", line 413, in do_auth
    return self.strategy.authenticate(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_django/strategy.py", line 105, in authenticate
    return authenticate(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/views/decorators/debug.py", line 42, in sensitive_variables_wrapper
    return func(*func_args, **func_kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/contrib/auth/__init__.py", line 76, in authenticate
    user = backend.authenticate(request, **credentials)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/backends/base.py", line 80, in authenticate
    return self.pipeline(pipeline, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/backends/base.py", line 83, in pipeline
    out = self.run_pipeline(pipeline, pipeline_index, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/backends/base.py", line 113, in run_pipeline
    result = func(*args, **out) or {}
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/social_core/pipeline/user.py", line 119, in user_details
    setattr(user, name, value)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/fields/related_descriptors.py", line 545, in __set__
    raise TypeError(
TypeError: Direct assignment to the forward side of a many-to-many set is prohibited. Use groups.set() instead.
2022-11-22 20:51:57,433 DEBUG    [cba2cb8d] awx.analytics.performance request: <WSGIRequest: GET '/sso/complete/oidc/?state=Qw0PHaBDDAfxMjprnNpAvU7nQSB6ewex&session_state=c5ce4638-ffb9-4e1e-b11e-922588481534&code=52158dbc-4d16-469a-9bdf-f65b6e294507.c5ce4638-ffb9-4e1e-b11e-922588481534.de394b3f-9c5f-43b8-99a9-84b43254e08f'>, response_time: 0.763s
172.18.0.1 GET /sso/complete/oidc/?state=Qw0PHaBDDAfxMjprnNpAvU7nQSB6ewex&session_state=c5ce4638-ffb9-4e1e-b11e-9`


### Expected results

login succeeds and user is able to login with oidc groups mapped to awx groups/teams

### Actual results

login fails

### Additional information

_No response_
user: etfeet
labels: component:authentication: For issues related to authentication
issue_13219: state: open
title: Survey API: allow putting/patching individual questions
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

AIUI the API endpoint JT/WFJT survey_spec only supports GET and POST of the *complete* survey including all questions (as a json array).
Modifying a single question is rather cumbersome, requiring to get and pass back all other question details.
Having an individual api endpoint for each question, or at least a possibility to HTTP PATCH a survey (with a payload of only some questions) would be much more convenient when modifying questions through API (or tooling that uses it, like the collection).

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

```
# something like updating only the fourth questions' choices:
curl https://awx.example.com/api/v2/job_templates/1/survey_spec --header "Content-Type: application/json" -X PATCH --data '{"spec": {3: {"choices": "A\nB\nC"}}}'

### Current results

The API docs say "POST requests to this resource should include the full specification for a Job Template's Survey"

### Sugested feature result

Individual modification of survey questions.

### Additional information

The tricky question is how to index questions, and how (if) to allow for question reordering without POSTing the whole survey again:
- by integer index in the question list -- that changes quickly upon reordering
- by variable name
user: azrdev
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_13211: state: open
title: Update capacity.md
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
Updated the documentation with  SYSTEM_TASK_ABS_CPU and  SYSTEM_TASK_ABS_MEM as this is one of the variables for the capacity calculation.

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
Docs Fix

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - Docs

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
This is the configuration setting as part of version 21.4
```
user: mani3887
issue_13207: state: open
title: Source Control Branch as drop down list
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

It would be nice to have the option to get the Source Control Branch prepopulated with all available branches of the related git repository, selectable as drop down list.

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Mark "Source Control Branch" for "Prompt on launch" and when launching the template, get all available branches populated as drop down list (so no more manual typing needed).

### Current results

Currently branch names have to be entered manually, typos possible and are not checked automatically.

### Sugested feature result

Better customer experience by using this feature.

### Additional information

_No response_
user: DE110283
issue_13204: state: open
title: Auto-pull libary source and licenses
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

We add licenses to docs/licenses for all libraries we use and add the source if its a copy left license type. We should modify the updater.sh script to auto-pull sources and then extract the licenses for them to make this an automated process. If we did this in an automated fashion we could also remove the license_checker unit test (or leave it as a double check). 

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

Add a new library to requirements/requirements.txt and run the unit test:
```
py.test /awx_devel/awx/main/tests/functional/test_licenses.py
```


### Current results

This will fail because the license for the library is missing.

### Sugested feature result

Running updater.sh to get the library and version into requirementst.txt should automatically add/remove files in docs/licenses. 

### Additional information

_No response_
user: john-westcott-iv
issue_13203: state: open
title: `make clean` docs and maybe refactor
body: ##### SUMMARY

I'm confused about the `make-clean` command. It does not actually clean everything in the environment.

This is my attempt to understand what's happening and how to make it obvious how to properly clean the environment.

So, at the end of this PR, I want to be able to:
- [ ] Understand what each clean command actually clean
- [ ] Update comments/descriptions for the clean commands
- [ ] Create a single command that actually cleans up everything
- [ ] Update the `CONTRIBUTING.md` with all the necessary info about that

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - Other (development environment)

##### ADDITIONAL INFORMATION

I don't want to necessarily move all the clean commands to a single section. Maybe the refactoring of one or two make targets would be enough. Maybe additional comments would also be great.

user: thenets
issue_13202: state: open
title: Failed Form Validation Should Ensure Field is in View
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Sometimes when a user submits a form in the UI it fails validation.  We should ensure that the responsible field on the form is in view.  Sometimes it can be unclear why a form did not submit if the field is field is not in view.  IE.  Project field on the Job Template form.

### AWX version

latest

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Go to Job Template form and complete all the required fields except for Project.  Scroll down as far as possible, until the project field is no longer on the screen.  Submit the form.

### Expected results

The fail should fail to submit and the Project field should be in view.

### Actual results

The form fails to submit, with no visible feedback to the user.

### Additional information

_No response_
user: AlexSCorey
issue_13169: state: open
title: AWX Collections / credentials  - do not override existing value when updating just one value in the inputs field
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

the awx.awx collections is used to extensively for self-service onboarding and we create the stubs objects ahead of time, and we let our users fill in the secrets inside the AWX GUI. 

For the credential object, we would create vault secrets with a vault_id and our users would go into the AWX GUI and put in their vault password. Once we run the automation again, the user inputs would be wiped out. Would like it the collections to not delete the fields that are not specified in the  'inputs' and let it alone.

`- name: Onboarding | create stub credentials for team
   credential:  
   type: 'Vault'  
   name:  Vault_team
   inputs:
    vault_id: vault_for_database
`



### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

1, Use  awx collections and specify the vault_id via input

`- name: Onboarding | create stub credentials for team
   credential:
   type: 'Vault'
   name:  Vault_team
   inputs:
    vault_id: vault_for_database
`
2.  update the password for the Vault_team cred object
3. re-run the awx collections in step #1. the password will be wiped out

### Current results

password fields is wiped out

### Sugested feature result

password fields should be left alone

### Additional information

_No response_
user: dnguyen9
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_13161: state: open
title: Sleep 650 job throwing error within 5 minutes of its launch
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

With default job timeout of 0 and job idle timeout of 0, putting a task with 'sleep 650' is making the job fail with no much explanation.
Idle timeout 0 should mean 600 seconds timeout, but this job is failing within 5 or so minutes. Here is the stdout:


PLAY [Play to test sleep function] *********************************************

TASK [date] ********************************************************************
changed: [localhost]

TASK [debug] *******************************************************************
ok: [localhost] => {
    "date_before.stdout": "Sun Nov  6 17:50:11 UTC 2022"
}

TASK [sleep] *******************************************************************


![image](https://user-images.githubusercontent.com/79655350/200187924-9ebb6abd-0a90-4209-8265-d7abec991660.png)

API showing this error reason:

![image](https://user-images.githubusercontent.com/79655350/200187941-44c43afc-b3bf-4f47-9311-9f1ff9be7e86.png)



### AWX version

21.2.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.12

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

Simple playbook with single task of 'command: sleep 650'. 
Launch and see it erroring out within 300-350 seconds. Error reason in API: Job terminated due to error.
Stdout getting stuck at sleep task, meaning, not showing the playbook summary results. 

### Expected results

Task and playbook should run smooth and fail with idle timeout error, showing all logs meaningfully

### Actual results

Playbook erroring out with no logs

### Additional information

_No response_
user: deep7861
issue_13157: state: open
title: Allow surveys to have boolean questions
body: ##### SUMMARY

A go at boolean survey questions.

Refs #553
Refs #1782
Refs #1053

Signed-off-by: Rick Elrod <rick@elrod.me>

<!--- Describe the change, including rationale and design decisions -->

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API
 - UI

user: relrod
issue_13149: state: open
title: JWT Supported Authentication
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

It would be nice to see AWX support JWT alongside the other mechanisms for access. Specifically we're looking at using single providers (like [Teleport](https://goteleport.com/docs/application-access/jwt/introduction/)) as a potential mechanism for unifying access in a secure fashion.

Is this something that could be added to the roadmap?


### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Steps to reproduce

N/A

### Current results

N/A

### Sugested feature result

Able to login to an Authn and Authz system that provides JWT support, and AWX able to verify this token/grants for its own purposes.

### Additional information

_No response_
user: thg-adamdean
labels: component:authentication: For issues related to authentication
issue_13140: state: open
title: Job with closed tunnel give error
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Hello 

i have 3 job terminating with error in same time, the job is cuted in output 

<img width="1000" alt="image" src="https://user-images.githubusercontent.com/27526373/199147351-9cf9dcc5-90aa-4cd9-9246-bd9ab05d3ff1.png">

<img width="453" alt="image" src="https://user-images.githubusercontent.com/27526373/199148413-d5975a89-49c0-438e-be9e-d93c1efc74dc.png">


a don't see a specific error to explain why the job termine with error , and we can see is canceled 

```

Nov 1, 2022 @ 02:01:38.518 | cfg08-node-awx | XXXXXX{"eof": true} | worker
-- | -- | -- | --

  | Nov 1, 2022 @ 02:01:38.514 | cfg08-node-awx | {"zipfile": 3316} | worker

  | Nov 1, 2022 @ 02:01:38.512 | cfg08-node-awx | {"status": "canceled", "runner_ident": "676120"} | worker

  | Nov 1, 2022 @ 02:01:38.384 | cfg07-node-awx | 2022-11-01 01:01:38,384 DEBUG    [-] awx.main.commands.run_callback_receiver 30 is alive | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:38.384 | cfg07-node-awx | 2022-11-01 01:01:38,384 DEBUG    [-] awx.main.commands.run_callback_receiver 30 is alive | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:37.952 | cfg04-node-awx | XXXXX{"eof": true} | worker

  | Nov 1, 2022 @ 02:01:37.952 | cfg04-node-awx | XXXXX{"eof": true} | worker

  | Nov 1, 2022 @ 02:01:37.948 | cfg04-node-awx | {"zipfile": 3117} | worker

  | Nov 1, 2022 @ 02:01:37.948 | cfg04-node-awx | {"zipfile": 3117} | worker

  | Nov 1, 2022 @ 02:01:37.945 | cfg04-node-awx | {"status": "canceled", "runner_ident": "676095"} | worker

  | Nov 1, 2022 @ 02:01:37.945 | cfg04-node-awx | {"status": "canceled", "runner_ident": "676095"} | worker

  | Nov 1, 2022 @ 02:01:37.654 | cfg08-node-awx | {"zipfile": 3409} | worker

  | Nov 1, 2022 @ 02:01:37.654 | cfg08-node-awx | XXXXX{"eof": true} | worker

  | Nov 1, 2022 @ 02:01:37.650 | cfg08-node-awx | {"status": "canceled", "runner_ident": "676116"} | worker

  | Nov 1, 2022 @ 02:01:35.814 | cfg05-node-awx | 2022-11-01 01:01:35,813 DEBUG    [e19d1050366647769f5ce7ae0c82f52b] awx.main.scheduler recording task_manager metrics, last recorded 20.171624422073364 seconds ago | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:35.814 | cfg05-node-awx | 2022-11-01 01:01:35,814 DEBUG    [e19d1050366647769f5ce7ae0c82f52b] awx.main.scheduler Finishing task_manager Scheduler | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:35.777 | cfg05-node-awx | 2022-11-01 01:01:35,776 DEBUG    [e19d1050366647769f5ce7ae0c82f52b] awx.main.scheduler recording dependency_manager metrics, last recorded 20.17445182800293 seconds ago | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:35.777 | cfg05-node-awx | 2022-11-01 01:01:35,777 DEBUG    [e19d1050366647769f5ce7ae0c82f52b] awx.main.scheduler Finishing dependency_manager Scheduler | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:35.766 | cfg05-node-awx | 2022-11-01 01:01:35,766 DEBUG    [e19d1050366647769f5ce7ae0c82f52b] awx.main.scheduler Starting dependency_manager Scheduler | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:35.765 | cfg05-node-awx | 2022-11-01 01:01:35,765 DEBUG    [e19d1050366647769f5ce7ae0c82f52b] awx.main.scheduler Starting task_manager Scheduler | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:35.662 | cfg05-node-awx | 2022-11-01 01:01:35,661 DEBUG    [e19d1050366647769f5ce7ae0c82f52b] awx.main.dispatch task 4c23c6b6-631b-4798-a298-10e2ac1d19e2 starting awx.main.scheduler.tasks.dependency_manager(*[]) | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:35.662 | cfg05-node-awx | 2022-11-01 01:01:35,662 DEBUG    [e19d1050366647769f5ce7ae0c82f52b] awx.main.dispatch task 72d3c4d3-157d-498e-a1e3-e202d8d32852 starting awx.main.analytics.analytics_tasks.send_subsystem_metrics(*[]) | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:35.657 | cfg05-node-awx | 2022-11-01 01:01:35,656 DEBUG    [e19d1050366647769f5ce7ae0c82f52b] awx.main.dispatch task 2b4ca92e-8255-48ae-ad1e-50898211b821 starting awx.main.scheduler.tasks.task_manager(*[]) | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:34.625 | cfg07-node-awx | 2022-11-01 01:01:34,625 INFO     [44234efc25134bb78673d178a24523d9] awx.analytics.job_lifecycle job-676095 post run | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:34.625 | cfg07-node-awx | 2022-11-01 01:01:34,624 INFO     [7b73a7894a1f4b049ddcd716c71c04b4] awx.analytics.job_lifecycle job-676120 post run | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:34.625 | cfg07-node-awx | 2022-11-01 01:01:34,625 INFO     [44234efc25134bb78673d178a24523d9] awx.analytics.job_lifecycle job-676095 post run | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:34.625 | cfg07-node-awx | 2022-11-01 01:01:34,624 INFO     [7b73a7894a1f4b049ddcd716c71c04b4] awx.analytics.job_lifecycle job-676120 post run | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:34.625 | cfg07-node-awx | 2022-11-01 01:01:34,625 INFO     [44234efc25134bb78673d178a24523d9] awx.analytics.job_lifecycle job-676095 post run | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:34.623 | cfg07-node-awx | 2022-11-01 01:01:34,622 DEBUG    [44234efc25134bb78673d178a24523d9] awx.main.tasks.jobs job 676095 (running) finished running, producing 189 events. | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:34.623 | cfg07-node-awx | 2022-11-01 01:01:34,623 DEBUG    [7b73a7894a1f4b049ddcd716c71c04b4] awx.main.tasks.jobs job 676120 (running) finished running, producing 90 events. | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:34.623 | cfg07-node-awx | DEBUG 2022/11/01 01:01:34 Control service closed | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:34.623 | cfg07-node-awx | DEBUG 2022/11/01 01:01:34 Client disconnected from control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:34.623 | cfg07-node-awx | 2022-11-01 01:01:34,622 DEBUG    [44234efc25134bb78673d178a24523d9] awx.main.tasks.jobs job 676095 (running) finished running, producing 189 events. | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:34.623 | cfg07-node-awx | 2022-11-01 01:01:34,623 DEBUG    [7b73a7894a1f4b049ddcd716c71c04b4] awx.main.tasks.jobs job 676120 (running) finished running, producing 90 events. | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:34.623 | cfg07-node-awx | DEBUG 2022/11/01 01:01:34 Control service closed | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:34.623 | cfg07-node-awx | DEBUG 2022/11/01 01:01:34 Client disconnected from control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:34.623 | cfg07-node-awx | 2022-11-01 01:01:34,622 DEBUG    [44234efc25134bb78673d178a24523d9] awx.main.tasks.jobs job 676095 (running) finished running, producing 189 events. | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:34.622 | cfg07-node-awx | DEBUG 2022/11/01 01:01:34 Control service closed | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:34.622 | cfg07-node-awx | DEBUG 2022/11/01 01:01:34 Client disconnected from control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:34.622 | cfg07-node-awx | DEBUG 2022/11/01 01:01:34 Control service closed | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:34.622 | cfg07-node-awx | DEBUG 2022/11/01 01:01:34 Client disconnected from control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:34.601 | cfg06-node-awx | 2022-11-01 01:01:34,601 INFO     [d1aad01ea70846bb9e0a6e177a999fb1] awx.analytics.job_lifecycle job-676116 post run | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:34.599 | cfg06-node-awx | 2022-11-01 01:01:34,599 DEBUG    [d1aad01ea70846bb9e0a6e177a999fb1] awx.main.tasks.jobs job 676116 (running) finished running, producing 102 events. | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:34.599 | cfg06-node-awx | DEBUG 2022/11/01 01:01:34 Control service closed | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:34.599 | cfg06-node-awx | DEBUG 2022/11/01 01:01:34 Client disconnected from control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.855 | cfg06-node-awx | 2022-11-01 01:01:33,855 DEBUG    [0ab5e7fe472244b08f569c502e3e1be2] awx.main.tasks.system Last scheduler run was: 2022-11-01 01:01:33.826529+00:00 | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.852 | cfg06-node-awx | 2022-11-01 01:01:33,851 DEBUG    [0ab5e7fe472244b08f569c502e3e1be2] awx.main.tasks.system Starting periodic scheduler | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.844 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Client connected to control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.844 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Client connected to control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.842 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Stdout complete - closing channel for: nlfXQbyu | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.842 | cfg07-node-awx | WARNING 2022/11/01 01:01:33 Could not read in control service: read unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.842 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Client disconnected from control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.842 | cfg07-node-awx | WARNING 2022/11/01 01:01:33 Could not close connection: close unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.842 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Stdout complete - closing channel for: nlfXQbyu | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.842 | cfg07-node-awx | WARNING 2022/11/01 01:01:33 Could not read in control service: read unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.842 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Client disconnected from control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.842 | cfg07-node-awx | WARNING 2022/11/01 01:01:33 Could not close connection: close unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.830 | cfg07-node-awx | 2022-11-01 01:01:33,829 DEBUG    [d59d0f4702f54984ba859720abfac05b] awx.main.tasks.system Last scheduler run was: 2022-11-01 01:01:25.652703+00:00 | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.830 | cfg07-node-awx | 2022-11-01 01:01:33,829 DEBUG    [d59d0f4702f54984ba859720abfac05b] awx.main.tasks.system Last scheduler run was: 2022-11-01 01:01:25.652703+00:00 | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.826 | cfg07-node-awx | 2022-11-01 01:01:33,826 DEBUG    [d59d0f4702f54984ba859720abfac05b] awx.main.tasks.system Starting periodic scheduler | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.826 | cfg07-node-awx | 2022-11-01 01:01:33,826 DEBUG    [d59d0f4702f54984ba859720abfac05b] awx.main.tasks.system Starting periodic scheduler | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.786 | cfg07-node-awx | WARNING 2022/11/01 01:01:33 Could not read in control service: read unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.786 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Client disconnected from control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.786 | cfg07-node-awx | WARNING 2022/11/01 01:01:33 Could not close connection: close unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.786 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Client connected to control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.786 | cfg07-node-awx | WARNING 2022/11/01 01:01:33 Could not read in control service: read unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.786 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Client disconnected from control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.786 | cfg07-node-awx | WARNING 2022/11/01 01:01:33 Could not close connection: close unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.786 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Client connected to control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.784 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Stdout complete - closing channel for: UgEYoOa2 | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.784 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Stdout complete - closing channel for: UgEYoOa2 | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.752 | cfg06-node-awx | 2022-11-01 01:01:33,750 DEBUG    [0ab5e7fe472244b08f569c502e3e1be2] awx.main.dispatch task 5ab21169-7d2f-4e9e-b0d4-0c2bab4e7d04 starting awx.main.tasks.system.awx_periodic_scheduler(*[]) | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.730 | cfg06-node-awx | DEBUG 2022/11/01 01:01:33 Client connected to control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.728 | cfg06-node-awx | DEBUG 2022/11/01 01:01:33 Stdout complete - closing channel for: RUPbp9wZ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.728 | cfg06-node-awx | WARNING 2022/11/01 01:01:33 Could not read in control service: read unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.728 | cfg06-node-awx | DEBUG 2022/11/01 01:01:33 Client disconnected from control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.728 | cfg06-node-awx | WARNING 2022/11/01 01:01:33 Could not close connection: close unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.722 | cfg07-node-awx | 2022-11-01 01:01:33,722 DEBUG    [d59d0f4702f54984ba859720abfac05b] awx.main.dispatch task 4cc2014f-26cf-41f8-8fc7-4f27fbe30f9d starting awx.main.tasks.system.awx_periodic_scheduler(*[]) | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.722 | cfg07-node-awx | 2022-11-01 01:01:33,722 DEBUG    [d59d0f4702f54984ba859720abfac05b] awx.main.dispatch task 4cc2014f-26cf-41f8-8fc7-4f27fbe30f9d starting awx.main.tasks.system.awx_periodic_scheduler(*[]) | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.591 | cfg07-node-awx | 2022-11-01 01:01:33,591 INFO     [44234efc25134bb78673d178a24523d9] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 676095 | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.591 | cfg07-node-awx | 2022-11-01 01:01:33,591 INFO     [44234efc25134bb78673d178a24523d9] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 676095 | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.591 | cfg07-node-awx | 2022-11-01 01:01:33,591 INFO     [44234efc25134bb78673d178a24523d9] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 676095 | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.591 | cfg07-node-awx | 2022-11-01 01:01:33,591 INFO     [44234efc25134bb78673d178a24523d9] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 676095 | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.591 | cfg07-node-awx | 2022-11-01 01:01:33,591 INFO     [44234efc25134bb78673d178a24523d9] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 676095 | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.591 | cfg07-node-awx | 2022-11-01 01:01:33,591 INFO     [44234efc25134bb78673d178a24523d9] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 676095 | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.590 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Client connected to control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.590 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Client connected to control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.589 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Stdout complete - closing channel for: nlfXQbyu | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.589 | cfg07-node-awx | WARNING 2022/11/01 01:01:33 Could not read in control service: read unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.589 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Client disconnected from control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.589 | cfg07-node-awx | WARNING 2022/11/01 01:01:33 Could not close connection: close unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.589 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Stdout complete - closing channel for: nlfXQbyu | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.589 | cfg07-node-awx | WARNING 2022/11/01 01:01:33 Could not read in control service: read unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.589 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Client disconnected from control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.589 | cfg07-node-awx | WARNING 2022/11/01 01:01:33 Could not close connection: close unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.542 | cfg07-node-awx | 2022-11-01 01:01:33,541 INFO     [7b73a7894a1f4b049ddcd716c71c04b4] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 676120 | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.542 | cfg07-node-awx | 2022-11-01 01:01:33,541 INFO     [7b73a7894a1f4b049ddcd716c71c04b4] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 676120 | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.542 | cfg07-node-awx | 2022-11-01 01:01:33,541 INFO     [7b73a7894a1f4b049ddcd716c71c04b4] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 676120 | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.542 | cfg07-node-awx | 2022-11-01 01:01:33,541 INFO     [7b73a7894a1f4b049ddcd716c71c04b4] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 676120 | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.532 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Client connected to control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.532 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Client connected to control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.531 | cfg07-node-awx | WARNING 2022/11/01 01:01:33 Could not close connection: close unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.531 | cfg07-node-awx | WARNING 2022/11/01 01:01:33 Could not close connection: close unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.530 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Stdout complete - closing channel for: UgEYoOa2 | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.530 | cfg07-node-awx | WARNING 2022/11/01 01:01:33 Could not read in control service: read unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.530 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Client disconnected from control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.530 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Stdout complete - closing channel for: UgEYoOa2 | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.530 | cfg07-node-awx | WARNING 2022/11/01 01:01:33 Could not read in control service: read unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.530 | cfg07-node-awx | DEBUG 2022/11/01 01:01:33 Client disconnected from control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.482 | cfg06-node-awx | 2022-11-01 01:01:33,481 INFO     [d1aad01ea70846bb9e0a6e177a999fb1] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 676116 | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.482 | cfg06-node-awx | 2022-11-01 01:01:33,481 INFO     [d1aad01ea70846bb9e0a6e177a999fb1] awx.main.commands.run_callback_receiver Starting EOF event processing for Job 676116 | awx-cfg-awx-task

  | Nov 1, 2022 @ 02:01:33.475 | cfg06-node-awx | DEBUG 2022/11/01 01:01:33 Client disconnected from control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.475 | cfg06-node-awx | WARNING 2022/11/01 01:01:33 Could not close connection: close unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.475 | cfg06-node-awx | DEBUG 2022/11/01 01:01:33 Client connected to control service @ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.474 | cfg06-node-awx | DEBUG 2022/11/01 01:01:33 Stdout complete - closing channel for: RUPbp9wZ | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.474 | cfg06-node-awx | WARNING 2022/11/01 01:01:33 Could not read in control service: read unix /var/run/receptor/receptor.sock->@: use of closed network connection | awx-cfg-awx-ee

  | Nov 1, 2022 @ 02:01:33.389 | cfg04-node-awx | 2022-11-01 01:01:33,388 INFO: no action. I am (awx-cfg-awx-postgres-instance1-kcvw-0), the leader with the lock | database

  | Nov 1, 2022 @ 02:01:33.389 | cfg04-node-awx | 2022-11-01 01:01:33,388 INFO: no action. I am (awx-cfg-awx-postgres-instance1-kcvw-0), the leader with the lock | database

  | Nov 1, 2022 @ 02:01:30.743 | cfg07-node-awx | 2022-11-01 01:01:30,741 DEBUG    [40dd710def6e41c8a8e9cd084398b99e] awx.main.scheduler recording task_manager metrics, last recorded 20.054621696472168 seconds ago | awx-cfg-awx-task



```

But in logs of k3s i can see at the time of finished job the LB is updated and proxy tunnel is restarted

```
Nov  1 02:01:33 cfg04-node-awx k3s: time="2022-11-01T02:01:33+01:00" level=info msg="Updating load balancer server addresses -> [x.x.6.72:6443 x.x.6.79:6443]"
Nov  1 02:01:33 cfg04-node-awx k3s: time="2022-11-01T02:01:33+01:00" level=info msg="Stopped tunnel to x.x.6.87:6443"
Nov  1 02:01:33 cfg04-node-awx k3s: time="2022-11-01T02:01:33+01:00" level=info msg="Proxy done" err="context canceled" url="wss://x.x.6.87:6443/v1-k3s/connect"
Nov  1 02:01:33 cfg04-node-awx k3s: I1101 02:01:33.458431   44517 log.go:184] http: superfluous response.WriteHeader call from github.com/emicklei/go-restful.(*Response).WriteHeader (response.go:220)
Nov  1 02:01:34 cfg04-node-awx k3s: time="2022-11-01T02:01:34+01:00" level=info msg="Updating load balancer server addresses -> [x.x.6.87:6443 x.x.6.79:6443 x.x.6.72:6443]"
Nov  1 02:01:34 cfg04-node-awx k3s: time="2022-11-01T02:01:34+01:00" level=info msg="Connecting to proxy" url="wss://x.x.6.87:6443/v1-k3s/connect"
```

This can create perturbation for awx or receptor ?


4 awx controller
3 master and 8 nodes k8s cluster, 3 jobs error executed not on same node of awx controller

### AWX version

21.6

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.12

### Operating system

redhat 7.9

### Web browser

Chrome

### Steps to reproduce

restart k3s master with jobs running

### Expected results

no error job

### Actual results

job error

### Additional information

Nobody has canceled theses jobs
restart the job work correctly
log-max-size is set to 500mb and log of this job is <500

they are other jobs in same interval with no error and same node

maybe same as https://github.com/ansible/awx/issues/12297 https://github.com/ansible/awx/issues/12677

in api job_explanation has empty
```
    "job_explanation": "Job terminated due to error",
    "execution_node": "",
    "controller_node": "awx-cfg-awx-b576ff56c-8tntv",
    "result_traceback": "XXXXXXX",
    "event_processing_finished": true,
``` 
user: chris93111
issue_13138: state: open
title: can't run jobs on hosts with hostnames > 63 characters
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

We can register instances with hostnames so long, they don't work when we try and send work to them via pg_notify.

max pg_notify channel name length is 63, less than max hostname length of 250

### AWX version

any

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Register an instance with a hostname with more than 63 characters. I saw this with an instance with 65 characters in the hostname.

### Expected results

If I can register the instance, I can run jobs on it.

### Actual results

```
packages/awx/main/dispatch/publish.py", line 88, in apply_async
    conn.notify(queue, json.dumps(obj))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/__init__.py", line 31, in notify
    cur.execute('SELECT pg_notify(%s, %s);', (channel, payload))
psycopg2.errors.InvalidParameterValue: channel name too long
```


### Additional information

See https://www.postgresql.org/docs/current/limits.html "identifier" length -- a channel name is an identifier.

We set queuename here:
https://github.com/ansible/awx/blob/6b315f39de04b685f8f96dda0a47805b9fad1aba/awx/main/models/unified_jobs.py#L1570-L1571

or for jobs w/o control node or execution node fall back to:
https://github.com/ansible/awx/blob/6b315f39de04b685f8f96dda0a47805b9fad1aba/awx/main/dispatch/__init__.py#L13-L14
user: kdelee
issue_13137: state: open
title: Inventory for schedules in inventory sources/job templates causes import to fail
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

This is related to export/import PR I opened here #13090
![image](https://user-images.githubusercontent.com/6213508/199061255-68891ae3-bac8-4b3a-a097-e0505adcd811.png)

As discussed with @jbradberry in this comment(https://github.com/ansible/awx/pull/13132#issuecomment-1297150532), it might be a real bug related to the launch option or something. This is mainly affecting export/import functionality for awx cli.


### AWX version

Tower 3.8.6, AAP 4.2.1

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [X] Collection
- [X] CLI
- [ ] Other

### Installation method

openshift

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Two scenarios where this issue occurs

### Steps to reproduce via API:
1. Create a new schedule for inventory source/job template
2. Try to PATCH it via API call with some inventory id

Result:
![image](https://user-images.githubusercontent.com/6213508/199062179-1671c9f4-82c0-4243-ba9b-8afb724e7076.png)

### Steps to reproduce via awx cli:
1. Create a new schedule for inventory source/job template
2. Export this schedule via awx cli
3. Remove the schedule
4. Patch your awxkit with changes in #13132 
5. Import the schedule 

Result:
Failed with this error:
> /api/v2/schedules/ "abc1_schedule_inv_source": Bad Request (400) received - {'inventory': ['Field is not allowed on launch.']}.

### Expected results

Import for schedules created for inventory sources/job templates is working fine

### Actual results

Above in the steps to reproduce

### Additional information

_No response_
user: ArtsiomMusin
issue_13134: state: open
title: Adding get_next_release_version script and updating release documentation
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - Docs

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 21.7.1.dev90+g72c50a5dea
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: john-westcott-iv
issue_13133: state: open
title: Automate translation of AWX Documentation
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

People in the AWX community speak many different languages.  It would be great if we were able to translate our documentation to be more inclusive of those that do not speak English.

### Select the relevant components

- [ ] UI
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Docs are not localized

### Current results

Docs are in English only

### Sugested feature result

Translate the docs.

### Additional information

Please
user: AlexSCorey
labels: component:l10n: localization, translation, japanese, french
issue_13127: state: open
title: SCM Projects: keep latest pulled version of code if sync fails
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Add an option that allows project admins to select if they would like to use the previously pulled code if a SCM sync fails. 

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Currently, if a SCM project fails synchronization for any reason (e.g., SCM is unavailable) it seems to lose the previously pulled code, so the job templates that use the playbooks in that repository fail.

If you have selected to synchronize the project before every job launch or you have it scheduled, there are jobs scheduled for the weekend, for example, and then the sync fails, all scheduled jobs are lost.

### Current results

If the SCM sync fails, all launched job templates with playbooks in that project will fail.

### Sugested feature result

If option is selected, job templates will use the latest pulled playbooks. It might not be the latest code pushed to SCM, but at least the jobs would not fail if SCM is not available.

### Additional information

_No response_
user: anasaizg
issue_13117: state: open
title: New credentials type to provide VAULT_ADDR and VAULT_TOKEN env vars
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

We have two credentials types that can use hashicorp vault to retrieve a value from a secret or sign an SSH key certificate, that can be used to connect automatically to a host.

What we lack is a credentials type to allow connection to a hashicorp vault server for use by the playbook. If we could use the current hashicorp vault plugin to provide the VAULT_ADDR and VAULT_TOKEN env vars, the playbook could then use the ansible lookup `hashi_vault` seamlessly.

I know I can just define a new credential type to manually provide these vars. But I wish to be able to use some vault authentication methods such as `approle` which is implemented in the secret lookup and SSH signing credentials types.

### Select the relevant components

- [X] UI
- [X] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

- use `hashi_vault` ansible lookup module in a playbook without having to initialize vault token in it.
- configure a new credentials type `Hashicorp Vault token` that would expose `VAULT_ADDR` and `VAULT_TOKEN` env vars to  the playbook, after authenticating to the vault server

### Current results

Just not possible, AFAICT.

### Sugested feature result

`hashi_vault` lookup module seamless use.

### Additional information

I'm not sure a credentials type can be used to expose env vars, though.
user: dr4Ke
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_13115: state: open
title: Activity stream- filter dropdown messes with CSS
body: When a user visits the activity stream and clicks on the filterable dropdown in the top right, the CSS of the list itself is buggy- it becomes partially hidden.

To reproduce:

1. Visit activity stream.
2. In the top right of the UI, you'll notice a dropdown that says 'Dashboard (All activity)'. Click on this dropdown and change the filter to anything you choose. 
3. Click on that dropdown again, and you will notice that the menu is partially hidden.
user: akus062381
issue_13113: state: open
title: Activity stream- for advanced search, lookup type doesn't immediately change when key changes
body: When a user is implementing the advanced search feature on the activity stream page, and they choose a key, the lookup type list automatically populates. If the user then changes the key and clicks on lookup type again, it hasn't changed to the new list of lookup types for that key. The user has to click click elsewhere on the screen and then click the lookup type dropdown a second time to see the newly populated list for that key.

To reproduce:

1. Navigate to the activity stream of an AWX build.
2. Choose advanced search, set type 'and', key 'id', and lookup type 'exact'.
3. Go back to the key field and change 'id' to 'object1'.
4. Click on the lookup type field, and you'll notice that the lookup types for 'id' are still listed.
5. Click off that list, anywhere on the blank part of the UI. Now click the lookup type menu again. Now you'll see that the proper lookup types have loaded for 'object1'.


user: akus062381
issue_13091: state: open
title: [tech debt] Remove the `survey_passwords` field
body: ##### SUMMARY
To explain why we have this in the first place:
1. On introduction of survey feature, answers to survey questions where hidden by the API based on the job template survey spec
2. Logically, it was found that changing the job template survey spec could then expose passwords (stored in plain text) in old jobs, so a band-aid was quickly put on to save a "list" of survey passwords (as a JSON field) and use that to remember which variables are password answers 17ac2cee42542a3bfdbc95dc6ad0565003347ec5
3. This, being obviously insufficient for security, was found to have exploits via query string filtering and such. Reacting to this, filtering on extra_vars was prohibited, and the values themselves were encrypted, with the value starting with "$encrypted$" followed by the encrypted content

It was self-apparent on implementing (3) that with that change, (2) was no longer needed at all.

By itself, this wouldn't be a big problem, but we have continued to use that field for purposes of redaction (so we don't accidentally expose the encrypted content, which wouldn't be as bad as the plain-text value, but still bad). Thus, the value of the field still needed to be accurate. To do this, it passes through a complex data passing chain alongside other prompts provided by the user. Thus, `survey_passwords` is passed _with_ prompts, but is not itself a user-provided prompt.

This PR attempts to purge the models and the logic of any remnant of this vestigial `survey_passwords` field in active (non-migration) code so that we simplify the prompts system for the future.

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API



##### ADDITIONAL INFORMATION
So far integration tests are looking good, but I need to check unit tests, as well as think of any addition coverage we might need. Since redaction already flowed through `display_extra_vars` (and that's not changing), I don't think it's hugely risky that we wind up showing something we shouldn't, but I don't ever trust myself.

user: AlanCoding
issue_13089: state: open
title: AWX schedules not running as scheduled
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

I've created a schedule to run only on every hour on weekdays. But the job gets triggered on every hour entire week.

I believe this is a bug hence thought to report it. 

![image](https://user-images.githubusercontent.com/46528234/197194273-7e6ad84e-b2bc-4e97-a983-a30f4a98c945.png)




### AWX version

21.5.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

core 2.13.4

### Operating system

RHEL 7

### Web browser

Chrome

### Steps to reproduce

Create a schedule to run every hour only on weekdays or a weekday.

### Expected results

Jobs are triggered based on the schedule.

### Actual results

Jobs are triggered not based on the schedule, it runs every hour entire week.

### Additional information

_No response_
user: vibinm
issue_13078: state: open
title: stdout shows as double everything
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

<img width="938" alt="image" src="https://user-images.githubusercontent.com/57507315/196647990-4b2ceb8c-d6b1-4deb-bbe3-3fca1d483a03.png">


### AWX version

21.7.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.12.5

### Operating system

RHEL 8.6

### Web browser

Firefox, Chrome

### Steps to reproduce

Run a task and follow

### Expected results

show only one time the task

### Actual results

showing 2 times same task in output

### Additional information

_No response_
user: bitsky6
issue_13077: state: open
title:  Choice of organization for lighter display
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Hello, 

Is it possible to create an option to choose an organization and only display the objects of this one ?
The principle would be to restrict visibility to a single organization when you are an admin or when you are part of several organizations

Regards, 

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Log in when you are in admin group or login when you are in many organization

### Current results

All organizations objects are displaying ... no restriction possibility ?

### Sugested feature result

Ability to restrict object visibility to a single organization


### Additional information

_No response_
user: JSGUYOT
issue_13076: state: open
title: German translation
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Provide German translation.

Issue for tracking the need of new .po localization files

Referring to: https://github.com/ansible/awx/blob/devel/CONTRIBUTING.md#translations

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

1. Configure German as main language in your browser
2. Open AWX

### Current results

English is used 

### Sugested feature result

New .po files located: https://github.com/ansible/awx/tree/devel/awx/ui/src/locales

### Additional information

_No response_
user: CWollinger
labels: component:l10n: localization, translation, japanese, french
issue_13070: state: open
title: Enable abstract Credential Types 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

If I have a playbook that needs to talk to 5 different APIs, each requiring separate credentials I must provide 5 different Credential Types, and 5 instances of those Credential Types -- even if all of these APIs are essentially identical:

    host: https:example1.com
    username: joe
    password: s3krit

This is difficult to manage, as Credential Types must be created by an Admin. If the configuration for the Credential Type could be configured to inject dynamic variables instead of hard coded ones, we could have a single "Generic API" credential type with a "prefix" field that could then be used to generate multiple credentials with differently prefixed variables. 

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

For example, if we could do this with the Input for a generic API host:

```yaml
fields:
  - id: host
    label: API Host
  - id: username
    label: Username
  - id: password
    label: Password
    secret: true
  - id: prefix
    label: Prefix for the credential variables
required:
  - host
  - username
  - password
  - prefix
```
And use the prefix like this in the Injector:
```yaml
extravars:
  "{{ prefix }}_host: "{{ host }}"
  "{{ prefix }}_username: "{{ username }}"  
  "{{ prefix }}_password: "{{ password }}"
```

Then we could create credentials for different environments (dev/test/prod) or scopes (internal/external) using the same Credential Type.

### Current results

Currently it is an error to use Jinja2 templating in the key side of an Injector configuration.

### Sugested feature result

With the ability to use Jinja2 templating in the key side of injectors, we can create an abstract/generic Credential Type that can be used for multiple credentials in the same Job Template.

### Additional information

_No response_
user: philipsd6
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_13067: state: open
title: Noisy receptor logs
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Users are noting messages like
`WARNING 2022/10/12 15:49:35 Received unreachable message from [hybrid01.example.com](http://hybrid01.example.com/)` from their remote nodes.

I've seen the same messages in AAP deployments. 

I'd like to investigate the reason for these messages, and maybe make the receptor.logs less noisy in this regard.

### AWX version

devel

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

deployment with at least one execution node

check on receptor logs after some time and you'll see a ton of "unreachable" messages

### Expected results

less noise

### Actual results

loud noise

### Additional information

_No response_
user: fosterseth
issue_13066: state: open
title: building docker-compose fails when using podman
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Tried to set up an awx development environment using docker compose as described in https://github.com/ansible/awx/blob/devel/tools/docker-compose/README.md. But instead of docker I am using **podman**.

When I try to build the docker compose with `make docker-compose`  I get the following error.

```
TASK [sources : Get OS info for sdb] ******************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "cmd": "docker info | grep 'Operating System'\n", "delta": "0:00:00.269389", "end": "2022-10-14 19:21:47.785039", "msg": "non-zero return code", "rc": 1, "start": "2022-10-14 19:21:47.515650", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
```

The problems seems to be that the build script tries to find the string "Operating System" in the output of **docker info**. however `podman info` which is called instead does not contain such a line:

```
[grafra1969area51-rnd awx]$ podman info
host:
  arch: amd64
  buildahVersion: 1.26.2
  cgroupControllers: []
  cgroupManager: cgroupfs
  cgroupVersion: v1
  conmon:
    package: conmon-2.1.2-2.module+el8.6.0+997+05c9d812.x86_64
    path: /usr/bin/conmon
    version: 'conmon version 2.1.2, commit: 98e028a5804809ccb49bc099c0d53adc43ef8cc4'
  cpuUtilization:
    idlePercent: 93.33
    systemPercent: 3.29
    userPercent: 3.37
  cpus: 4
  distribution:
    distribution: '"rocky"'
    version: "8.6"
  eventLogger: file
  hostname: abmrndtlap006.pass-consulting.com
  idMappings:
    gidmap:
    - container_id: 0
      host_id: 1020
      size: 1
    - container_id: 1
      host_id: 100000
      size: 65536
    uidmap:
    - container_id: 0
      host_id: 1020
      size: 1
    - container_id: 1
      host_id: 100000
      size: 65536
  kernel: 4.18.0-372.26.1.el8_6.x86_64
  linkmode: dynamic
  logDriver: k8s-file
  memFree: 3423006720
  memTotal: 8140427264
  networkBackend: cni
  ociRuntime:
    name: runc
    package: runc-1.1.3-2.module+el8.6.0+997+05c9d812.x86_64
    path: /usr/bin/runc
    version: |-
      runc version 1.1.3
      spec: 1.0.2-dev
      go: go1.17.12
      libseccomp: 2.5.2
  os: linux
  remoteSocket:
    path: /run/user/1020/podman/podman.sock
  security:
    apparmorEnabled: false
    capabilities: CAP_NET_RAW,CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNER,CAP_FSETID,CAP_KILL,CAP_NET_BIND_SERVICE,CAP_SETFCAP,CAP_SETGID,CAP_SETPCAP,CAP_SETUID,CAP_SYS_CHROOT
    rootless: true
    seccompEnabled: true
    seccompProfilePath: /usr/share/containers/seccomp.json
    selinuxEnabled: false
  serviceIsRemote: false
  slirp4netns:
    executable: /usr/bin/slirp4netns
    package: slirp4netns-1.2.0-2.module+el8.6.0+997+05c9d812.x86_64
    version: |-
      slirp4netns version 1.2.0
      commit: 656041d45cfca7a4176f6b7eed9e4fe6c11e8383
      libslirp: 4.4.0
      SLIRP_CONFIG_VERSION_MAX: 3
      libseccomp: 2.5.2
  swapFree: 1051271168
  swapTotal: 1073737728
  uptime: 2h 0m 50.81s (Approximately 0.08 days)
plugins:
  log:
  - k8s-file
  - none
  - passthrough
  - journald
  network:
  - bridge
  - macvlan
  - ipvlan
  volume:
  - local
registries:
  search:
  - registry.access.redhat.com
  - registry.redhat.io
  - docker.io
store:
  configFile: /home/grafra1969/.config/containers/storage.conf
  containerStore:
    number: 0
    paused: 0
    running: 0
    stopped: 0
  graphDriverName: overlay
  graphOptions: {}
  graphRoot: /home/grafra1969/.local/share/containers/storage
  graphRootAllocated: 62258151424
  graphRootUsed: 20026880000
  graphStatus:
    Backing Filesystem: xfs
    Native Overlay Diff: "false"
    Supports d_type: "true"
    Using metacopy: "false"
  imageCopyTmpDir: /var/tmp
  imageStore:
    number: 60
  runRoot: /run/user/1020/containers
  volumePath: /home/grafra1969/.local/share/containers/storage/volumes
version:
  APIVersion: 4.1.1
  Built: 1659426794
  BuiltTime: Tue Aug  2 09:53:14 2022
  GitCommit: ""
  GoVersion: go1.17.12
  Os: linux
  OsArch: linux/amd64
  Version: 4.1.1
```


### AWX version

21.7.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.13.3

### Operating system

Rocky Linux 8

### Web browser

_No response_

### Steps to reproduce

Try to build awx development on host with rocky linux 8 using podman instead of docker

### Expected results

make docker-compose will create the compose file

### Actual results

make failed creating the compose file because it could not extract the Operation System 

### Additional information

_No response_
user: grafra
issue_13058: state: open
title: In template survey, dotted variables are badly parsed
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Hi,

I tried to use dotted variables in template survey and found that there was a strange behavior.

1. If the dotted variable has a default value and **no** value is provided in the survey then the generated variable is inline ( `values.value1` give `values.value1` with the default value)
2. If the dotted variable has a default value and a value is provided then the generated variable data has 2 entries, one *inline* (like before) with the default value plus a splitted value 
  ```yaml
  ---
  values.value1: 5
  values:
    value1: 10
  ```
Note that the survey is red with an error for `values.value2` with `This field must not be blank`

### AWX version

21.5.0 to 21.7.1

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

2.12.5,2.12.7,2.13.4

### Operating system

_No response_

### Web browser

Firefox, Chrome

### Steps to reproduce

1. Create a template survey with 2 dotted variables
   * One `values.value1` with default value `5`
     ![image](https://user-images.githubusercontent.com/11207495/195617889-03e0504c-9107-4eda-a725-b4033a3a098c.png)
   * One `values.value2` with no default value
2. Launch template 
   * set `values.value1` to `10`
   * set `values.value1` to `123`
3. Click `Next` and you've got in`Prompted values`
   * 2 values for `values.value1`
   * 1 splitted value for `values.value2` plus an error on survey with message `This field must not be blank`
![image](https://user-images.githubusercontent.com/11207495/195624363-704c410b-314b-4367-9517-520d1d1a77cf.png)



### Expected results

We can expect 2 splitted values with provided values or default values when not present.
In our example:

```yaml
values:
  value1: 10
  value2: 123
``` 

### Actual results

```yaml
values.value1: 5
values.value2: 123
values:
  value1: 10
  value2: 50
``` 


### Additional information

_No response_
user: fobrice
issue_13054: state: open
title: RFE: Implement the phone call webhook notification by Twillio 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

Currently, AWX is able to send SMS messages via Twillio. However, the phone call notification is better than SMS to recognize especially if the notification is sent at midnight. 


### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

None

### Current results

Cannot choose the phone call notification on AWX.

### Sugested feature result

In addition to defining a “Messaging Service”, enable to choose such as “Phone Call Service” on Notification.

### Additional information

_No response_
user: mahoutukaisali
issue_13052: state: open
title: Display Ansible and Ansible collection version
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

It would be very nice if it could be possible to have a way to display the Ansible and Ansible collections versions installed when using AWX. Actually, it's not possible.

Moreover, it would be very nice to be able to list all the Ansible collections already installed by default

### Select the relevant components

- [X] UI
- [X] API
- [X] Docs
- [X] Collection
- [X] CLI
- [X] Other

### Steps to reproduce

n.a

### Current results

Not available for now.

### Sugested feature result

In the UI it could be nice to have a place to find Ansible and Ansible collections versions and the list of all the collections already installed.

### Additional information

_No response_
user: craph
issue_13036: state: open
title: Collection awx.awx.tower_import is slow
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

tower_import takes 6 minutes to import any object. Since there might be a lot of dependencies to import at one run, the entire job execution time may take hours to complete just for one organizations.

Attaching the screenshot below where it's seen one task takes 6 mins to complete: 
![image](https://user-images.githubusercontent.com/6213508/195107931-2eb2cea8-e1ee-4268-9f6f-b3c3904d68dc.png)
 

### AWX version

ansible tower 3.8.6

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

openshift

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

Just simple tower_import for organization or any other object

### Expected results

Some time as tower_export

### Actual results

6 mins for one tower_import

### Additional information

_No response_
user: ArtsiomMusin
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_13029: state: open
title: all cluster nodes in development environment have the same UUID
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

All the cluster nodes when you use https://github.com/ansible/awx/blob/882d2fdbe859d475b1fd9fb47e71a22f68fe4fd8/Makefile#L453 have the same UUID:
https://github.com/ansible/awx/blob/41e3a69001508836f3b19c10f15d6df0812006da/tools/docker-compose/ansible/roles/sources/files/local_settings.py#L22

This causes issues with some metrics, because they use the UUID:
https://github.com/ansible/awx/blob/882d2fdbe859d475b1fd9fb47e71a22f68fe4fd8/awx/main/analytics/collectors.py#L257

So for those metrics in the dev environment, we don't get one per instance when we don't have unique UUIDs.

### AWX version

devel

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

run with multiple cluster nodes

### Expected results

different UUIDs for each node

### Actual results

same UUID

### Additional information

_No response_
user: kdelee
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_13026: state: open
title: Install receptorctl in instance install playbook
body: Signed-off-by: Hao Liu <haoli@redhat.com>

##### SUMMARY
install receptorctl when installing receptor on remote execution node 

use for receptor reload and debugging

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 21.7.1.dev31+g074612f9e5
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: TheRealHaoLiu
issue_13011: state: open
title: CI Enablement for Power Platform.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Since the PR(https://github.com/ansible/awx/pull/12736) for providing ppc64le support parameters is merged and AWX builds on Power, can the CI be enabled to build and push awx image for Power platform to ghcr.io an quay.io?

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

I had implemented a cross-platform buildx approach for ansible/receptor image.(https://github.com/ansible/receptor/pull/638). We can follow a similar approach here as well and I can contribute for the same.
Please share your thoughts about this.

### Current results

AWX builds on Power, but  CI is not enabled to build and push awx image for Power platform.

### Sugested feature result

AWX builds on Power, CI enabled to build and push awx image for Power platform.

### Additional information

_No response_
user: Sunidhi-Gaonkar1
issue_13004: state: open
title: RFE: Make the value of a variable in a survey available in YAML in the inventory source
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

I would like to be able to reflect the values of additional variables (including surveys) in job templates and workflow job templates in the inventory source yaml.

The netbox.nebox.nb_inventory inventory plugin will be available in the next release with several filter options for extra vars. The purpose is to improve performance.

More info: https://github.com/netbox-community/ansible_modules/pull/834

In ansible-playbook command, the value of a variable given by the -e option can be used in the netbox.nebox.nb_inventory inventory plugin.

However, in AWX, the value of the variable does not seem to be passed on because the -e option is missing from the ansible-inventory command when retrieving the inventory.
https://github.com/ansible/awx/blob/21.7.0/awx/main/tasks/jobs.py#L1506-L1539

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

1. Prepare YAML for the inventory source as follows
    ```yaml
    plugin: netbox.netbox.nb_inventory
    api_endpoint: https://demo.netbox.dev
    query_filters:
      - site: "{{ site }}"
    ```
1. In a job template or workflow job template, enter `site` variable value via Survey
1. Launch job

### Current results

The following error message appears on Inventory Sync.

```
[WARNING]:  * Failed to parse /runner/project/nb_inventory.yml with auto
plugin: 'site' is undefined
```

### Sugested feature result

1. The site variable in the inventory source's YAML reflects the value specified in the survey.
1. Only the hosts corresponding to the filter will be retrieved.
1. Job is executed for target host retrieved.


### Additional information

n/a
user: akira6592
issue_13003: state: open
title: Documentation/Example for adding Isolated Node
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

When working with awx in docker-compose (version 18), its not too bad piecing together what is needed to add an isolated node. With the latest awx, adding an isolated node is much harder and there is little documentation, and no examples. 

As I am working through this, I'd be happy to make the documentation.

### Select the relevant components

- [ ] UI
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Become a new user of AWX, and attempt to add an isolated node just by reading the docs. 

### Current results

The documentation:
* https://docs.ansible.com/ansible-tower/latest/html/administration/external_execution_envs.html#isolated-instance-groups
* https://docs.ansible.com/automation-controller/latest/html/upgrade-migration-guide/upgrade_to_ees.html#migrate-isolated-instances-to-execution-nodes

could use more examples and file paths explaining where configuration files should go. 

### Sugested feature result

Multiple examples, file paths showing configurations and their contents, potential pitfalls, requirements needed to perform execution node setup

### Additional information

If someone has a good pointer to where I could get more information, please drop a link or a few, and I would love to get awx up and running with 2 different execution environments, and verify that the documentation matches the real process followed.
user: timmay54
issue_13000: state: open
title: controller_api support for 3Scale user_key in headers (or any custom headers)
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

We have situation where we have a 3Scale instance between runner of the awx_collection and Ansible Controller instance.
Currently the `ControllerAPIModule` does support only `oauth_token` that is passed to API call header as Bearer token.
For this to make it work through 3Scale instance, we need to add custom header `user_key` that contains token for authentication on 3Scale.

I would like to start discussion here if that is something others might find as useful and it is something to follow and if so, what could be the approach. It does not have to be specific solution for my case (3Scale), but generic feature to be able to pass custom HTTP headers to the calls.

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Currently, the `ControllerAPIModule` function `make_request` works only with `oauth_token` passed into `headers['Authorization']`. When 3Scale is in the way, the API call is not possible as custom header is missing (`user_key`).

### Current results

Authentication fails in this case as 3Scale is in the way and `user_key` cannot be passed to `ControllerAPIModule`.

### Sugested feature result

One option might be to add a check and pass for an environment variable or there might be option to work with any custom headers passed to the API call `make_request`, but that would require modification of other modules using `ControllerAPIModule` in module_utils.

### Additional information

_No response_
user: jedla01
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_12994: state: open
title: Fix missing job summary after watching job run
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Follow up to #12868.

When WS events are received by the browser, they are batched before being added to the page. Upon job completion, the final batch is not getting flushed, leading to a missing job summary until the user reloads events. Something with the way we process these events isn't working properly with the React lifecycle to allow the final batch to flush.

### AWX version

devel

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Run a job and watch output.

### Expected results

All output, including job summary should appear

### Actual results

Summary event is often missing

### Additional information

_No response_
user: keithjgrant
issue_12991: state: open
title: Workflow limit does not limit on AWX 21.6.0
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Hi, I'm not really sure if this is a bug or if it's the normal behavior, but I can't really find what is the expected behavior in the documentation.

I'm creating a Workflow Job Template with a limit set on a specific host, calling a job template which has a limit set on a group.
The job template is then applied to the all group (which is very surprising as you have defined a more restricted set just before when launching the workflow).

This behavior does not occur when the job template has the checkbox “prompt on launch” checked. I guess it's the same problem as #11967 which was closed as being marked as a duplicate of #11284 . I guess the explanation which is the best according to my case is the one on this comment : https://github.com/ansible/awx/issues/11284#issuecomment-961913484 .


### AWX version

21.6.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

minikube

### Modifications

no

### Ansible version

2.15.5

### Operating system

Debian 11

### Web browser

_No response_

### Steps to reproduce

In case it's not the same, I will explain the steps I did to face this issue :

1.  Create a group in an inventory with various hosts
![image](https://user-images.githubusercontent.com/20048264/193584715-13142497-7003-4aff-834b-59d23e40bd44.png)

2.  Create a job template with a limit on the group with the **prompt on launch checkbox unchecked**
![image](https://user-images.githubusercontent.com/20048264/193585078-47181808-fb4c-4cfb-938a-3157ddee6d42.png)

3. Launch the job template
![image](https://user-images.githubusercontent.com/20048264/193585835-0ad35d4c-675a-45dc-9253-0a75996ce9cf.png)

4. Create a workflow job template with a limit set to whichever host you want
![image](https://user-images.githubusercontent.com/20048264/193586657-7eb7e0eb-31df-418e-b477-010637bdc916.png)

5. Set a node calling the job template
![image](https://user-images.githubusercontent.com/20048264/193587263-2967fb23-e5ae-4e71-bf57-0e38b2d17985.png)

### Actual results

Looks like it's limited to localhost
![image](https://user-images.githubusercontent.com/20048264/193587646-dc973de1-0844-4ca6-a9e4-7e5dcb0afd78.png)

6. This is where it's beginning to be strange to me and does not really make sense : the job template was applied to the limit defined in the job template, and not the one in the workflow template
![image](https://user-images.githubusercontent.com/20048264/193587865-03530c2f-b8ba-45ea-b1e7-a5f34fcc2ade.png)

### Expected results

Whereas if on step 2 **I check the prompt on launch checkbox** and follow step 3/4/5 the workflow was launched on the limit defined on the workflow template job (which is what I want).
![image](https://user-images.githubusercontent.com/20048264/193594039-ab832da1-791a-42f1-b386-66f08e698205.png)

![image](https://user-images.githubusercontent.com/20048264/193588582-3288dffb-009a-44ca-a21b-b65b76b131a8.png)

I except to have this result whether the checkbox is checked or not, or at least a warning telling me it will not limit to what I wrote in the limit text.

### Additional information

I have found the [following comment ](https://github.com/ansible/awx/issues/9377)on another issue which says 
> As noted in the docs, the workflow limit "provide[s] a host pattern to further constrain the list of hosts that will be managed or affected by the workflow. This limit is applied to all job template nodes that prompt for a limit."

I've read the documentation on https://docs.ansible.com/ansible-tower/3.8.0/html/userguide/workflow_templates.html and I can't find this information. Where is it located?

This strange behavior lead us to delete half of our application instance when we wanted to delete only one (which was defined in limit text on workflob template job). Maybe a clear part on the documentation, or a warning (or something else?  I have no idea what) telling when creating the workflow job template that the limit will not be applied would be best.

I'm not really sure this is really clear, let me know if you need some more information.
user: Quiwy
issue_12984: state: open
title: Allow Granular Configuration Of Generic OIDC SSO Provider
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Currently implemented Generic OIDC SSO provider only supports auth configuration via well-known configuration endpoint. This works 100% of the time with the IDP living outside of the Kubernetes cluster hosting AWX. However IF the IDP lives inside of Kubernetes you may experience issues with hair pinning traffic for the internal communications in the OIDC auth flow. This feature would allow each supported endpoint to be manually set with different base FQDN endpoints. Default behavior would be to inherit from well-known configuration but if configured can set different endpoints for items like userInfo Token auth etc. 

[Relevant endpoints for OIDC](https://github.com/python-social-auth/social-core/blob/4.3.0/social_core/backends/open_id_connect.py#L63-L85)
[Update SSL Verify to support (Path to CA, No Verify, & Default Verify True)](https://github.com/python-social-auth/social-core/blob/4.3.0/social_core/backends/base.py#L222) relevant documentation [here](https://requests.readthedocs.io/en/latest/user/advanced/#ssl-cert-verification)

### Select the relevant components

- [X] UI
- [X] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

1. Deploy AWX to multi-node K8S cluster with external load balancer 
    * https://awx.foo.com 
2. Deploy IDP in same cluster
    * External URL https://idp.foo.com
    * Service URL https://idp.idp.svc
3. Attempt to login

### Current results

AWX attempts to call the external URL for well-known configuration and does not consistently succeed. IF it does succeed user is redirected to https://idp.foo.com/auth to authenticate. Upon authentication is redirected back to https://awx.foo.com/sso/complete/oidc/. Once AWX receives the HTTP request from the user against the complete endpoint the web server attempts to verify token against the external token endpoint and gather user information via the external userInfo endpoint. Each time AWX attempts to hit the external URL from inside the same cluster hosting the IDP it may fail and will result in the SSO auth sequence to begin again.

### Sugested feature result

User facing HTTP calls use external URL and AWX to IDP calls use internal service URL.

### Additional information

This is something I have solved locally and can be assigned the owner of this development. (I was also the original contributor of the Generic OIDC feature)

See attached diagram for relevant comms for ODIC authentication flows.
![image](https://user-images.githubusercontent.com/26559188/193374366-b7308b32-93a9-4026-bebc-d0bb47725c37.png)

user: whitej6
labels: component:authentication: For issues related to authentication
issue_12983: state: open
title: The jobs stuck on running and awx.main.commands.run_callback_receiver not called
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

The jobs stuck on running and awx.main.commands.run_callback_receiver not called

in normal case, awx.main.commands.run_callback_receiver is called after playbook is running.
```
2022-09-29 18:25:08,067 WARNING  [3fef147caa354940acfb52398cbc93f4] awx.main.dispatch scaling down worker pid:7278
2022-09-29 18:25:08,068 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.dispatch task ce7dd362-da4a-4ccd-8074-acda24774b6e starting awx.main.tasks.awx_periodic_scheduler(*[])
2022-09-29 18:25:08,071 WARNING  [9c6fb21f27814a7f9e8bfcf58a0d5599] awx.main.dispatch worker exiting gracefully pid:7278
2022-09-29 18:25:08,104 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.tasks Starting periodic scheduler
2022-09-29 18:25:08,111 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.tasks Last scheduler run was: 2022-09-29 18:24:37.988622+00:00
Instance Group already registered controlplane
Instance Group already registered default
(changed: True)
2022-09-29 18:25:08,239 WARNING  [3fef147caa354940acfb52398cbc93f4] awx.main.dispatch scaling up worker pid:7281
2022-09-29 18:25:08,267 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.dispatch task 8c0b4360-e872-4e90-89be-ff6b99eaed18 starting awx.main.scheduler.tasks.run_task_manager(*[])
2022-09-29 18:25:08,273 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.scheduler Running task manager.
2022-09-29 18:25:08,276 WARNING  [3fef147caa354940acfb52398cbc93f4] awx.main.dispatch scaling up worker pid:7283
2022-09-29 18:25:08,294 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.dispatch task 99970f4d-94dc-4059-a8cb-c28028ec2793 starting awx.main.analytics.analytics_tasks.send_subsystem_metrics(*[])
2022-09-29 18:25:08,319 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.scheduler Starting Scheduler
2022-09-29 18:25:08,452 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.scheduler Finishing Scheduler
2022-09-29 18:25:08,742 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.dispatch task a2114b89-12b4-44f3-ae56-f44e476b6bda starting awx.main.tasks.update_inventory_computed_fields(*[30])
2022-09-29 18:25:08,798 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.models.inventory Going to update inventory computed fields, pk=30
2022-09-29 18:25:08,879 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.models.inventory Finished updating inventory computed fields, pk=30, in 0.079 seconds
2022-09-29 18:25:09,312 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.analytics.job_lifecycle job-15332 created
2022-09-29 18:25:09,314 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.tasks Spawned job 15332 (new) from schedule sch-oradb-archivelog-backup-6.
2022-09-29 18:25:09,545 WARNING  [3fef147caa354940acfb52398cbc93f4] awx.main.dispatch scaling down worker pid:7283
2022-09-29 18:25:09,545 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.dispatch task 4e9c2af2-831c-4b47-bdd9-f85acca51dbb starting awx.main.scheduler.tasks.run_task_manager(*[])
2022-09-29 18:25:09,549 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.scheduler Running task manager.
2022-09-29 18:25:09,550 WARNING  [3fef147caa354940acfb52398cbc93f4] awx.main.dispatch worker exiting gracefully pid:7283
2022-09-29 18:25:09,581 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.scheduler Starting Scheduler
2022-09-29 18:25:09,838 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.analytics.job_lifecycle job-15332 acknowledged
2022-09-29 18:25:10,135 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.analytics.job_lifecycle job-15332 waiting
2022-09-29 18:25:10,136 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.scheduler job 15332 (waiting) consumed 6 capacity units from ig-auto1 with prior total of 0
2022-09-29 18:25:10,138 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.scheduler Finishing Scheduler
2022-09-29 18:25:10,453 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.dispatch task e7c4e4c8-6d07-469b-8c50-9291977605ba starting awx.main.tasks.RunJob(*[15332])
2022-09-29 18:25:10,983 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.analytics.job_lifecycle job-15332 pre run
2022-09-29 18:25:11,082 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.main.tasks Skipping project sync for job 15332 (running) because commit is locally available
2022-09-29 18:25:11,572 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.analytics.job_lifecycle job-15332 preparing playbook
2022-09-29 18:25:11,973 DEBUG    [3fef147caa354940acfb52398cbc93f4] awx.analytics.job_lifecycle job-15332 running playbook
2022-09-29 18:25:15,781 DEBUG    [-] awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(1)
2022-09-29 18:25:15,781 DEBUG    [-] awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(1)
2022-09-29 18:25:16,756 DEBUG    [-] awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(1)
2022-09-29 18:25:16,756 DEBUG    [-] awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(1)
2022-09-29 18:25:17,269 DEBUG    [-] awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(1)
2022-09-29 18:25:17,269 DEBUG    [-] awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(1)
2022-09-29 18:25:17,271 DEBUG    [-] awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(1)
2022-09-29 18:25:17,271 DEBUG    [-] awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(1)
2022-09-29 18:25:17,510 DEBUG    [-] awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(1)
2022-09-29 18:25:17,510 DEBUG    [-] awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(1)
2022-09-29 18:25:17,512 DEBUG    [-] awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(1)
2022-09-29 18:25:17,512 DEBUG    [-] awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(1)
2022-09-29 18:25:17,518 DEBUG    [-] awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(1)
```

but when jobs stuck, there is no awx.main.commands.run_callback_receiver being called.
```
2022-09-29 18:45:16,329 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.dispatch task b9c9ef8f-3077-41cb-9948-36c873cac30e starting awx.main.tasks.awx_periodic_scheduler(*[])
2022-09-29 18:45:16,329 WARNING  [4fd91270ac2d49a8949c55b170989a16] awx.main.dispatch scaling down worker pid:7659
2022-09-29 18:45:16,336 WARNING  [23748c354d8c4f7c9fbe6ccb22f22bd3] awx.main.dispatch worker exiting gracefully pid:7659
2022-09-29 18:45:16,366 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.tasks Starting periodic scheduler
2022-09-29 18:45:16,375 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.tasks Last scheduler run was: 2022-09-29 18:44:46.239172+00:00
Instance Group already registered controlplane
Instance Group already registered default
(changed: True)
2022-09-29 18:45:16,521 WARNING  [4fd91270ac2d49a8949c55b170989a16] awx.main.dispatch scaling up worker pid:7662
2022-09-29 18:45:16,543 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.dispatch task e1dbde9c-0f10-47e9-ac26-eb72788c336c starting awx.main.scheduler.tasks.run_task_manager(*[])
2022-09-29 18:45:16,551 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.scheduler Running task manager.
2022-09-29 18:45:16,552 WARNING  [4fd91270ac2d49a8949c55b170989a16] awx.main.dispatch scaling up worker pid:7664
2022-09-29 18:45:16,570 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.dispatch task 0d5d5e2e-dd91-43a8-982b-22a964569550 starting awx.main.analytics.analytics_tasks.send_subsystem_metrics(*[])
2022-09-29 18:45:16,600 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.scheduler Starting Scheduler
2022-09-29 18:45:16,841 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.scheduler Finishing Scheduler
2022-09-29 18:45:16,956 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.dispatch task de1e92dd-93d3-4ebd-a8fe-bead29883850 starting awx.main.tasks.update_inventory_computed_fields(*[30])
2022-09-29 18:45:17,017 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.models.inventory Going to update inventory computed fields, pk=30
2022-09-29 18:45:17,104 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.models.inventory Finished updating inventory computed fields, pk=30, in 0.085 seconds
2022-09-29 18:45:17,581 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.analytics.job_lifecycle job-15333 created
2022-09-29 18:45:17,582 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.tasks Spawned job 15333 (new) from schedule sch-oradb-archivelog-backup-6.
2022-09-29 18:45:17,821 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.dispatch task 91dbc438-e6c1-40ce-934b-e79ad8a1fb55 starting awx.main.scheduler.tasks.run_task_manager(*[])
2022-09-29 18:45:17,824 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.scheduler Running task manager.
2022-09-29 18:45:17,821 WARNING  [4fd91270ac2d49a8949c55b170989a16] awx.main.dispatch scaling down worker pid:7662
2022-09-29 18:45:17,826 WARNING  [4fd91270ac2d49a8949c55b170989a16] awx.main.dispatch worker exiting gracefully pid:7662
2022-09-29 18:45:17,870 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.scheduler Starting Scheduler
2022-09-29 18:45:18,211 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.analytics.job_lifecycle job-15333 acknowledged
2022-09-29 18:45:18,490 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.analytics.job_lifecycle job-15333 waiting
2022-09-29 18:45:18,491 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.scheduler job 15333 (waiting) consumed 6 capacity units from ig-auto1 with prior total of 0
2022-09-29 18:45:18,493 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.scheduler Finishing Scheduler
2022-09-29 18:45:18,553 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.dispatch task 3178ef82-a8a5-409d-90bc-0fe2348d4c11 starting awx.main.tasks.RunJob(*[15333])
2022-09-29 18:45:19,136 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.analytics.job_lifecycle job-15333 pre run
2022-09-29 18:45:19,203 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.main.tasks Skipping project sync for job 15333 (running) because commit is locally available
2022-09-29 18:45:19,904 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.analytics.job_lifecycle job-15333 preparing playbook
2022-09-29 18:45:20,329 DEBUG    [4fd91270ac2d49a8949c55b170989a16] awx.analytics.job_lifecycle job-15333 running playbook
2022-09-29 18:45:36,444 WARNING  [787c6952b14c4543a2c0bbb7e30e8873] awx.main.dispatch scaling down worker pid:7664
2022-09-29 18:45:36,658 WARNING  [4fd91270ac2d49a8949c55b170989a16] awx.main.dispatch worker exiting gracefully pid:7664
```

### AWX version

19.4.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

It's random.

### Expected results

Job complete normally.

### Actual results

Job stuck.

### Additional information

_No response_
user: shenxg13
issue_12977: state: open
title: provide option to cancel all jobs for a external execution instance when removing a instance from AWX
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

currently when attempting to remove (deprovision) a remote execution instance 
the controller will wait for all job to successfully complete before removing the instance from database

we want to provide an option to also "cancel" all of the scheduled job to an instance when we deprovision a instance

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Remove instance from the instance tab

### Current results

the controller will wait for all job to successfully complete before removing the instance from database

### Sugested feature result

we want to provide an option to also "cancel" all of the scheduled job to an instance when we deprovision a instance

### Additional information

_No response_
user: TheRealHaoLiu
issue_12951: state: open
title: Adding make option to enable sql debugging
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
Turns on SQL query logging and SQL headers if enabled.

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - Other

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 21.6.1.dev52+g05e3c29fe8
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: john-westcott-iv
issue_12946: state: open
title: improve waiting behavior for de-provisioning external remote execution node
body: currently in our implementation, de-provisioning a node starts a task that will wait indefinitely for all of the jobs to drain from the node 

we dont fully understand the negative path impact of this (if the job that's running is stuck)

this may potentially trigger some "timeout" causing the de-provisioning task to be reaped.

we might also want to introduce a mechanism for FORCE de-provisioning that bypass the checks
user: TheRealHaoLiu
issue_12944: state: open
title: [tech debt] Cleanup cruft from job slicing made possible by prompts model changes
body: ##### SUMMARY
This is a technical debt patch that hinges on a workaround that is no longer needed:

When sliced jobs were introduced, there was an in-congruence between what prompts could be provided on launch, and the WFJT / WJ models. Because sliced jobs go (JT)->(workflow job)->(job), anything that the job needs to inherit from the original JT prompts needs to pass through the workflow job (not the JT properties itself, only prompts, because prompts are re-combined with the JT properties at the time of job spawn). But at the time, the workflow models didn't have all the fields it needed for this purpose. The workaround was that we saved prompts to the related launch config model, relative to the workflow job. Those were re-applied to the jobs that the workflow spawned.

This workaround wasn't good, because that's not otherwise the purpose or interpretation of the launch config. It should only come into play if the job is relaunched or something like that. The workaround also left the system over-determined, because the role of the properties on the workflow job, itself, for sliced jobs, was left _completely unclear_.

This change here moves the _sliced job prompts_ from the launch config onto the _workflow job_. This is re-affirming the identity of WFJT / WJ models _as a container of prompts_, even though those are more often not-provided than cases like nodes or schedules. This makes the sliced job workflow jobs a lot more like ordinary workflow jobs, mechanically. The remaining custom logic is more feature-specific to slicing.

When ready, this is intended to address https://github.com/ansible/awx/issues/12932

For now, this will be tabled as higher priority work gets in.

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API

user: AlanCoding
issue_12939: state: open
title: Alter capacity data for instance groups based on state.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

From scaling the mesh we now have additional states of instances groups like installing. If you have an IG in a state like this it reports a capacity of 0:
![image](https://user-images.githubusercontent.com/32551173/191734235-78ec6ce4-2a82-480f-964a-0d1f4198b3af.png)

But the slider bar can still be dragged around.

Would it make more sense to either grey our or hide some of the information on instances based on their state?

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Add a new instance group through the UI. Go to the mesh visualizer or the instance group edit page. Notice the active slider bars with 0's.

### Current results

UI is "active" allowing sliding of the bar.

### Sugested feature result

Either disable the slides/grey out the fields, have a string in place like "capacity information will be available after installation" or just hide these field until they are known.

### Additional information

_No response_
user: john-westcott-iv
issue_12934: state: open
title: Project signing: Validate that GPG pubkey credential is valid pubkey and can be imported
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

Right now with the new project signing work, we don't actually validate that the stored pubkey credential is in fact a valid GPG pubkey.

At edit/save time, we should do some kind of validation (maybe just import it into a temporary keyring and make sure it imports successfully) to save users frustration from copypaste errors and such.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Create a new GPG pubkey credential but format the key incorrectly somehow.

### Current results

Currently AWX will accept the key and not give any error when it is saved. At validation time, validation will fail due to the key not importing correctly.

### Sugested feature result

We should try to validate the key before we actually save it.

### Additional information

_No response_
user: relrod
issue_12932: state: open
title: Cannot relaunch a job with the prompted job_slice_count value
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

When the job_slice_count is configured to be prompted on launch and user tries relaunch this job template job, it will receive the 

```
 Bad Request (400) received - {'detail': 'Cannot relaunch sliced workflow job after slice count has changed.'}
```


### AWX version

4.3.0

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. Create Job Template. make sure the Job Slices is marked as "Prompt on launch". 
2. Launch job template with job_slic_count > 2 value
3. Wait unit job completion. 
4. Select the resulting workflow job and click Relaunch. 



### Expected results

Api returned 400: 

```
 Bad Request (400) received - {'detail': 'Cannot relaunch sliced workflow job after slice count has changed.'}
```

### Actual results

Job should be relaunched with the initially prompted number for slices. 

### Additional information

_No response_
user: obaranov
issue_12922: state: open
title: job failed with binascii.Error: Incorrect padding error from time to time
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

From time to time some jobs failed with the following error : 

![image](https://user-images.githubusercontent.com/36628449/191280943-075fefd8-30ba-4898-af02-a15b68453b26.png)



### AWX version

21.5.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

yes

### Ansible version

2.12

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

A job template has a schedule in AWX, from time to time it failed with  binascii.Error: Incorrect padding  error

### Expected results

Job launch correctly

### Actual results

job failed with binascii.Error: Incorrect padding error

### Additional information

EE custom
user: mick1627
issue_12918: state: open
title: Allow manual selection of inventory hosts and inventory groups at launch time
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

It would be a very useful feature to add template survey answer type "inventory hosts" and "inventory groups" as a multiple choice both single select and multiple select.

Adding survey multiple choice by manually adding hosts is counter productive and bad practice. 



### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

see feature summary

### Current results

see feature summary

### Sugested feature result

Selection of inventory hosts in the survey removes possible error points by manually adding survey multiple choice with hosts. Also if many hosts exist, only option is to add text answer and manually enter the host name existing in the inventory.

### Additional information

_No response_
user: nicolaibaralmueller
issue_12905: state: open
title: Display SAML login icon for /api/login page
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

When requesting an authorization-code at `/api/o/authorize`, users can't use SAML to login.

![image](https://user-images.githubusercontent.com/43611141/191057188-bae67b7d-5c23-429e-a873-461e4c40ac73.png)

I see 2 possible feature enhancement to correct that :

1. Display an SAML login button on that page
2. Redirect to web UI login page, then redirect to `/api/o/authorize` 

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

- Add an SAML provider in AWX settings.
- Make sure to logout from AWX.
- Go to `/api/o/authorize` route, it redirects you to `/api/login/?next=/api/o/authorize/`


### Current results

Users are only able to login with username + password.

### Sugested feature result

Users should be able to login via SAML.

### Additional information

_No response_
user: ETN-Tech
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_12892: state: open
title: POSTing schedule with no occurrences causes timeout
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

When POSTing a schedule that has no occurrences due to EXRULE(s), the API is unresponsive and the request eventually fails with a 504 code.

example rrule: `DTSTART:20220707T233000Z RRULE:INTERVAL=1;FREQ=HOURLY EXRULE:INTERVAL=1;FREQ=HOURLY`


In the UI, we mitigated this by adding form validation against it, but the API should probably shield against this as well.

Additionally, if this can be done in a way that is more performant than the UI currently does (it can be a little slow), we might want to remove the front-end validation and rely on an error message from the API instead.

### AWX version

devel

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

POST an rrule with no occurrences to a schedule

e.g. ``DTSTART:20220707T233000Z RRULE:INTERVAL=1;FREQ=HOURLY EXRULE:INTERVAL=1;FREQ=HOURLY``

### Expected results

response (preferably with an error message)

### Actual results

server timeout

### Additional information

_No response_
user: keithjgrant
issue_12883: state: open
title: SCM branch override doesn't shown in sync job and revision shown is not the correct one
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

My project is set to allow branch override
![image](https://user-images.githubusercontent.com/14820052/190144759-197fe8ee-df84-4ac9-be22-c16011c0811c.png)
![image](https://user-images.githubusercontent.com/14820052/190144653-08ce379c-d76b-460d-9fd5-da501f1c0d7d.png)

In a template that use the project I set to an alternative branch
![image](https://user-images.githubusercontent.com/14820052/190145175-1ccfb205-0361-4d11-bbf9-43b5ad19334e.png)

The project sync job is triggered by starting a job from the template and in the log I always see this : 
![image](https://user-images.githubusercontent.com/14820052/190145798-b843d0d5-6d6e-4c8a-9bc8-3913b625582d.png)

I can't see the name of my branch inside the project sync job or during the execution of the template job.

Moreover, the revision displayed in the job details is the latest from master branch not the one from the SCM Branch override. But the running code from my playbook is the correct one from my SCN Branch override.

Is it normal ?

### AWX version

19.2.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

centos 7

### Web browser

Chrome

### Steps to reproduce

Define project to be able to override the branch name.
Create a template with the project and override the branch name
run the template job
Check the project sync job

### Expected results

I should be able to see my overriden branch name somewhere in the log of the project sync job or in the template job

### Actual results

I always see : 
![image](https://user-images.githubusercontent.com/14820052/190146648-ae1399b9-2a07-4b1a-9f22-9bb3d07020b1.png)

Moreover, the revision visible in the job detail is not the latest from my SCM Branch override. It's the latest revision from master.

But in fact when I run my playbook, the code that is running is the one from my SCM Branch override.

### Additional information

_No response_
user: craph
issue_12854: state: open
title: Inventory File Import Code Bugy
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

in https://github.com/ansible/awx/blob/devel/awx/main/utils/ansible.py#L61
the part 
if filename in ['inventory', 'hosts']:   is wrong, how is implemented, now is not needed because the files without extension also listed due to 
 elif '.' in suspected_ext:
        # If not using those extensions, inventory must have _no_ extension
        return None
------
Inventory Files would also use yml json or yaml extensions. At least, files hosts.yml hosts.yaml hosts.json, inventory.yml inventory.yaml inventory.json should be found. Or all files with host.* or inventory.*

I think if filename in ['inventory', 'hosts']: should be 
if filename in ['inventory', 'hosts', 'hosts.yml', 'hosts.yaml' .......... ]:
or  
if filenamewithoutextension in  ['inventory', 'hosts'] 
would solve the problem.

### AWX version

latest

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

in tower get a inventory source configured to git repo and look for the inventory files listed 

### Expected results

all inventory files listed oder at least hosts.yml hosts.yaml hosts.json, inventory.yml inventory.yaml inventory.json files

### Actual results

no hosts.yml hosts.yaml hosts.json, inventory.yml inventory.yaml inventory.json listed

### Additional information

_No response_
user: udosoftschwarz
issue_12850: state: open
title: [collection] `awx.awx.project` spams `/api/v2/project_updates/<id>/ endpoint` when `wait: True`
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

When creating a new project using the API with `wait: true` (the default), we end up spamming `/api/v2/project_updates/<id>/` way more than is ideal, with no delay at all.


Reproducer playbook is below.


Looking into the module code, I see this:

```python
            if module.is_job_done(result['status']):
                time.sleep(1)
                running = False
```

I'm guessing that really that `sleep()` should be in an `else`, i.e. if the job is *not* done, sleep 1 second and try again, rather than sleeping (for no reason?) when the project *is* done updating.

### AWX version

devel

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

```yaml
- hosts: localhost
  tasks:
    - awx.awx.project:
        controller_username: awx
        controller_password: awx
        controller_host: "https://localhost:8043"
        validate_certs: false
        name: test-project
        scm_branch: testinfra
        scm_url: https://github.com/relrod/ansible-sign-demo/
        scm_type: git
```


### Expected results

Not spamming the heck out of AWX :)

### Actual results

![image](https://user-images.githubusercontent.com/43930/189101161-c146f4f5-9c6d-4c04-9e97-8591c92b6af2.png)

### Additional information

_No response_
user: relrod
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_12841: state: open
title: awxkit: awx cli inventory_sources create --credential accepts a unique string
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

The `awx inventory_sources` create requires an integer ID for the `--credential` field. In order to get this ID, we need to check via the API/UI. The enhancement proposes to pass a unique string in the `--credential` field, similar to the `awx job_templates associate` command.

```
awx --conf.host ${ANSIBLE_CTRL_URL} \
    --conf.username ${ANSIBLE_CTRL_USER} --conf.password "${ANSIBLE_CTRL_PASSWORD}" \
    --conf.insecure \
    inventory_sources create --name 'acm-dynamic-inventory' --organization 'Default' \
                             --inventory 'hub-acm-inventory' --update_on_launch true --credential 3 \   # <- this is proposal to change
                             --source scm --source_project 'aap-for-ran-ztp-project' --source_path 'inventories/[cluster-inventory-example.yml](https://github.com/leo8a/acm-ansible-collection-demo/blob/main/inventories/cluster-inventory-example.yml)'
```

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Steps to reproduce

1. Send similar command
```
awx --conf.host "${ANSIBLE_CTRL_URL}" \
    --conf.username "${ANSIBLE_CTRL_USER}" --conf.password "${ANSIBLE_CTRL_PASSWORD}" \
    --conf.insecure \
    inventory_sources create --name 'acm-dynamic-inventory' --organization 'Default' \
                             --inventory 'hub-acm-inventory' --update_on_launch true --credential 'cred-1' \
                             --source scm --source_project 'aap-for-ran-ztp-project' --source_path 'inventories/cluster-inventory-example.yml'
```


### Current results

```
awx inventory_sources create: argument --credential: invalid int value: 'cred-1'
```

### Sugested feature result

Finish successfully the above command. 

### Additional information

_No response_
user: leo8a
issue_12840: state: open
title: Creating a new label that matches a subset of an existing label is not possible in UI
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

I'm looking specifically at workflow node prompting but this exists everywhere we let the user input labels (including all launch, schedule and workflow prompts along with JT and WFJT form fields).

There's no way to create a label in the UI if the label you're trying to create matches a substring of a label that already exists.

Here's an example - I'm trying to create a label called `1` but there's already a label `label1` on the system:

![label_subset](https://user-images.githubusercontent.com/9889020/188880962-8914feff-63ce-4fbc-923d-e4e4e4a29ac4.gif)


### AWX version

Head of devel after 21.5.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. Create a label `foobar` on an existing job template
2. Save the job template
3. Edit the same job template and try to create a called `foo`

### Expected results

Able to create `foo`

### Actual results

If you hit enter, `foobar` is selected/deselected

### Additional information

_No response_
user: mabashian
issue_12829: state: open
title: Allow disabling var plugins during inventory sync
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

I'd like to see an option to disable var plugins during inventory syncing. For some users (like me) there is no need that the AWX inventory sync process copies variables from group & hostvars into the AWX datamodel to be supplied back to job during execution.

When a job is run it has access to those variables anyways and storing them in the first place causes issues like #4089 and #10200. I would image a checkbox ala "Disable var syncing from plugins" which in turn would set `ANSIBLE_VARS_ENABLED=''` when executing `ansible-inventory` and would result in only inventory (ie from inventory.ini) variables to get synced. If wanted the checkbox could be named `Disable var syncing` and it would then also ignore inventory variables.

If AWX is runable without syncing variables (I think it should be) then this feature request would site nicely between the current way of doing things and the additional complexity #4089 would have to introduce.

I am volunteering to write the code for this feature if accepted.

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

* Create and inventory
* Add an inventory source from a project inventory
* Sync the inventory

### Current results

All variables are synced into AWX

### Sugested feature result

No or only inventory variables are synced into AWX

### Additional information

_No response_
user: apollo13
issue_12828: state: open
title: project update fails because gitlab performs maintenance
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

the project git refresh could be avoided if the url is not available. Most of the time it renders the AWX unusable.
This time Giltab is performing a maintenance. It can be easily detected:

`Failed to download remote objects and refs:  fatal: unable to access 'https://gitlab.com/systems/inventory/01/': The requested URL returned error: 503\n",`



### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Steps to reproduce

refresh an AWX git based project

### Current results

project refreshes ok, when git repository is available but it fails and nothing that is based on this repository cannot work anymore

### Sugested feature result

it could detect various repo messages and avoid failure if EG maintenance, and keep the last working copy.

### Additional information

_No response_
user: mihai-satmarean
issue_12821: state: open
title: Allow running `awx-manage run_dispatcher` utility methods against other nodes
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

We are seeing extremely common use of commands like `awx-manage run_dispatcher --status`, but this only works for the current node. Yet the mechanism of control-and-reply should allow this to work fine for any node, ran _from_ any other control or hybrid node. The options this should apply for are

 - `--status`
 - `--running`
 - `--cancel` as of https://github.com/ansible/awx/pull/11745

So my proposal here is that we add something like `--hostname`, and then that will get the data for that particular host.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

Check the status command in a cluster?

### Current results

Just get the data for the local node.

### Sugested feature result

I can get data for other nodes.

The expectation is certainly that this will be leveraged to get the status data across the entire cluster quickly.

### Additional information

_No response_
user: AlanCoding
issue_12811: state: open
title: Browser console error when navigating to schedule for some management jobs
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Some management jobs have a schedule that I can edit in the UI. For example "Cleanup Activity Stream" has the schedule "Cleanup Activity Schedule", and based on my preferences, I can change its frequency in the UI.

This is not working for the schedules for some management jobs, instead getting a console error in the UI.

### AWX version

devel

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

N/A

### Operating system

N/A

### Web browser

Chrome

### Steps to reproduce

Go to the management jobs

![Screenshot from 2022-09-01 09-43-08](https://user-images.githubusercontent.com/1385596/187929828-f64887c7-c769-4ca9-aea1-44cc9fec91da.png)

Now navigate to the "Cleanup Expired OAuth 2 Tokens" job

![Screenshot from 2022-09-01 09-43-15](https://user-images.githubusercontent.com/1385596/187930158-516ab028-faa7-454b-8a60-0d56e27d75a0.png)

Now click on the schedule.

![Screenshot from 2022-09-01 09-43-28](https://user-images.githubusercontent.com/1385596/187929935-2391b2bb-f47a-4a11-8c4f-c36222e70cc1.png)


### Expected results

I expect to be able to modify this the same as the cleanup activity stream schedule.

### Actual results

Cannot do this in the UI.

### Additional information

This also affects "Cleanup Expired Sessions"

Console error:

```
index.js:9 I18nProvider did not render. A call to i18n.activate still needs to happen or forceRenderOnLocaleChange must be set to false.
react-dom.production.min.js:216 TypeError: Cannot read properties of undefined (reading 'sort')
    at W6 (FrequencyDetails.js:89:16)
    at oo (react-dom.production.min.js:157:137)
    at Ks (react-dom.production.min.js:267:460)
    at Al (react-dom.production.min.js:250:347)
    at Tl (react-dom.production.min.js:250:278)
    at El (react-dom.production.min.js:250:138)
    at yl (react-dom.production.min.js:243:163)
    at react-dom.production.min.js:123:115
    at t.unstable_runWithPriority (scheduler.production.min.js:18:343)
    at Vi (react-dom.production.min.js:122:325)
us @ react-dom.production.min.js:216
n.payload @ react-dom.production.min.js:217
pa @ react-dom.production.min.js:130
Go @ react-dom.production.min.js:184
Ks @ react-dom.production.min.js:269
Al @ react-dom.production.min.js:250
Tl @ react-dom.production.min.js:250
El @ react-dom.production.min.js:250
yl @ react-dom.production.min.js:243
(anonymous) @ react-dom.production.min.js:123
t.unstable_runWithPriority @ scheduler.production.min.js:18
Vi @ react-dom.production.min.js:122
Yi @ react-dom.production.min.js:123
Ki @ react-dom.production.min.js:122
fl @ react-dom.production.min.js:237
Io @ react-dom.production.min.js:170
(anonymous) @ useRequest.js:44
u @ runtime.js:63
(anonymous) @ runtime.js:294
(anonymous) @ runtime.js:119
An @ asyncToGenerator.js:3
o @ asyncToGenerator.js:25
Promise.then (async)
An @ asyncToGenerator.js:13
o @ asyncToGenerator.js:25
(anonymous) @ asyncToGenerator.js:32
(anonymous) @ asyncToGenerator.js:21
(anonymous) @ Schedule.js:50
Fl @ react-dom.production.min.js:262
t.unstable_runWithPriority @ scheduler.production.min.js:18
Vi @ react-dom.production.min.js:122
Dl @ react-dom.production.min.js:261
(anonymous) @ react-dom.production.min.js:261
M @ scheduler.production.min.js:16
_.port1.onmessage @ scheduler.production.min.js:12
```
user: AlanCoding
issue_12777: state: open
title: Reduce the number of dispatcher scale up/down events
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

The task dispatcher will scale workers down at up at a rate much higher than necessary.

Expectation is that if we have a constant number of jobs running, scale ups and downs should not be necessary _at all_. Meaning, if we have 0 jobs running, we should always be fine at the minimum number of workers. But if we have 10 jobs running, we should also have no need to scale up or down, if that number has held constant for more than ~30 seconds.

Right now this is not the case. We know of cases when we may actually scale a worker _down and then up_ right before starting a new task.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

launch a constant number of sleep tasks, observe number of workers.

this will be easier to do when https://github.com/ansible/awx/issues/12776 is completed.

### Current results

We know from the logs that workers are always scaling up and down, even when there is no need to.

### Sugested feature result

Smarter worker scaling logic.

### Additional information

I attempted this in https://github.com/ansible/awx/pull/12584 and reverted that in https://github.com/ansible/awx/pull/12766

In the end, that approach left _too many_ idle workers in reserve. We need a solution that keeps _just enough_ idle workers free. In practice, this probably means keeping as many workers as the number of scheduled tasks that might run at the same time. So, I suggest that the best solution would be to add a timeout to scheduled tasks, then compute the max number of simultaneous scheduled tasks, and then keep this number of workers available _beyond the current workers running non-scheduled tasks_. This is a much more complex heuristic than my prior attempt, but it would give a much more satisfactory result. I'm unhappy with both the increased memory use of my prior attempt, and the impact of database connection usage.
user: AlanCoding
issue_12776: state: open
title: [Metrics&Observability] Track dispatcher metrics
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

We have already implemented a set of metrics for the task manager (and related dependency/workflow managers) in https://github.com/ansible/awx/issues/12225

This is a request that we track similar metrics for the process that listens to pg_notify for tasks and user automation to run (the dispatcher parent process). To articulate some specifics, we could track:

 - the total number of messages processed (either on a cumulative or differential basis)
   - a subdivision of that number for user automation versus periodic system tasks versus special trigger tasks
 - the time taken in `process_task`
 - the time taken for `cleanup`, `record_metrics`, or any others that may run related to that
 - number of workers at any given time
   - maybe also the number of scale-up and scale-down events, which may not directly follow from the active number

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

N/A

We have some logs for certain threshold events, but no metrics right now.

### Current results

N/A

### Sugested feature result

These should go in `/api/v2/metrics/` and we can make graphs for them.

### Additional information

_No response_
user: AlanCoding
issue_12767: state: open
title: Cant remove scm credential in project
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Hi,

If I set an SCM credential on a project 
<img width="1127" alt="image" src="https://user-images.githubusercontent.com/38217290/187225871-c625aa9d-5a04-44ec-9da4-a32b66b0cfe5.png">

And then when try to remove the SCM credential from the project it does not get removed.

I can see that when clicking on the Save button, no credential is passed on to the PATCH API call in the browser.
{
  "allow_override": false,
  "base_dir": "/var/lib/awx/projects/",
  "description": "",
  "local_path": "_6__demo_project",
  "name": "Demo Project",
  "organization": 1,
  "scm_branch": "",
  "scm_clean": false,
  "scm_delete_on_update": false,
  "scm_track_submodules": false,
  "scm_refspec": "",
  "scm_type": "git",
  "scm_update_cache_timeout": 0,
  "scm_update_on_launch": false,
  "scm_url": "https://github.com/ansible/ansible-tower-samples",
  "default_environment": null
}

Therefore, SCM credential never gets updated.

I have also seen this on AAP.

### AWX version

21.5.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. Add SCM credential to project.
2. Open the Network tab on the browser console.
3. Remove the SCM credential by updating the project.
4. See how the credential is still there and the UI does not set credential to null when calling the PATCH endpoint.

### Expected results

I would expect the SCM credential to be removed.

### Actual results

SCM credential is not removed.

### Additional information

_No response_
user: jangel97
issue_12764: state: open
title: Launch Job: take previous Job-ID argument, pre-fill questions (esp. Survey) from previous Job
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

Enhancement to Existing Feature

### Feature Summary

I request passing a previously run Job ID to the launching of a new Job, which would be used to pre-populate all "Prompt on Launch" questions with answers, especially the Survey.

Mostly this would benefit *Relaunch*ing jobs after having changed the JT definition (e.g. added extra questions to the survey), but it would also be handy for interactive use. For the first implementation, I'd suggest not adding a UI for passing such a previous job id, but only API, then use that API from the retry facilites.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

1. Create a template with a long survey
2. Launch the template, get a Job
3. Relaunch the job: you have to fill in all the answers again


### Current results

you have to fill in all the answers again


### Sugested feature result

All answers have a default set to the value from the previous Job.

### Additional information

_No response_
user: azrdev
issue_12748: state: open
title: "scm_type" field missing in exported projects
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

So I have to migrate assets from an AWX testing instance to a production instance. I used awxkit and it worked flawlessly for resources like inventories, credentials, credential types and execution environments. But when it comes to projects, awxkit I get errors like the following, for every projects :
```
awx import --conf.host https://awx-dest.net:8043 --conf.token fakeToken123 -k < projects.json
/api/v2/projects/ "project name": Bad Request (400) received - {'scm_update_on_launch': ['Update options must be set to false for manual projects.']}.
```

### AWX version

Ansible AWX 21.5.1.dev0+gff49cc5636.d20220825

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

ansible [core 2.12.7]

### Operating system

Ubuntu server 22.04

### Web browser

_No response_

### Steps to reproduce

1. Export asset
```
awx export projects --conf.host https://awx-source.fr:8043 --conf.token fakeToken123 -k > projects.json
```
Result:
```
{                                      
     "projects": [                                
          {                                                                                               
               "name": "Project name",                                  
               "description": "Playbook description",
               "scm_url": "https://git.private.fr/di/ansible/playbooks/",
               "scm_branch": "main",                                                                                                                                                                                 
               "scm_refspec": "",         
               "scm_clean": false,
               "scm_track_submodules": false,
               "scm_delete_on_update": true,                                                             
               "scm_update_on_launch": true,                                                                                                                                                                        
               "scm_update_cache_timeout": 0,                                                             
               "allow_override": false,
               "default_environment": null,                                                               
               "credential": {       
                    "organization": {        
                         "name": "org_name",  
                         "type": "organization"
                    },                       
                    "name": "credential_name",                                                                                                                                                                         
                    "credential_type": {
                         "name": "Source Control",
                         "kind": "scm",
                         "type": "credential_type"
                    },
                    "type": "credential"
               },
               "organization": {
                    "name": "org_name",
                    "type": "organization"
               },
               "natural_key": {
                    "organization": {
                         "name": "org_name",
                         "type": "organization"
                    },
                    "name": "Project name",
                    "type": "project"
               }
          }
     ]
}
```

2. Import asset
```
awx import --conf.host https://awx-dest.net:8043 --conf.token fakeToken123 -k < projects.json
```

3. "fix"  scm_update_on_launch issue
Since the error message state that the field `scm_update_on_launch` must be set to false, I set it to false (as well as `scm_delete_on_update`, which would cause the same issue).

### Expected results

Projects to be imported correctly, with scm settings.

### Actual results

1. /api/v2/projects/ "manage-ad-groupe": Bad Request (400) received - {'scm_update_on_launch': ['Update options must be set to false for manual projects.']}.                                                           

2. After "fixing" this issue, projects are imported by tagged as "manual" projects, without scm, even though there is a non-empty `scm_url` field in the import file `projects.json`.

### Additional information

_No response_
user: avalou
issue_12742: state: open
title: Research: Evaluate PF Code Editor component
body: ##### ISSUE TYPE
 - New or Enhanced Feature


##### COMPONENT NAME
 - UI


##### SUMMARY

Patternfly has a new Code Editor component. Evaluate whether it meets all our needs and can be used in place of the current Ace Editor components.
user: keithjgrant
issue_12723: state: open
title: Translate Strings OIDC Provider
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

We have implemented Generic OIDC Provider on this PR https://github.com/ansible/awx/pull/12552
Now we need to translate the Strings for the 'question mark pop-up' as seen on this image
![image](https://user-images.githubusercontent.com/70719005/186238889-e4219b39-705e-4456-84fa-92a735597f9c.png)
Also, we need to translate the Generic OIDC link:
Settings > Generic OIDC 
![image](https://user-images.githubusercontent.com/70719005/186240683-00242317-c1fb-41d0-8e39-45b4c196ec59.png)


### AWX version

9.0.2.dev8705+gb26a515497

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

1 - Establish the connection with generic OIDC SSO provider 
2 - Login into Controller. 
3 - Go to Settings
4 - Click Generic OIDC 
5 - Click on the question marks
![image](https://user-images.githubusercontent.com/70719005/186241695-2c3270ef-532c-440d-b84b-e5b93ac5ed50.png)
6 - Check the translation for other languages 

### Expected results

 'question mark pop-up' strings should be translate to other languages. 

### Actual results

 'question mark pop-up' strings are in English.

### Additional information

_No response_
user: jay-steurer
labels: component:l10n: localization, translation, japanese, french
issue_12715: state: open
title: Update PF to bring in new styling on dropdown
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

See https://github.com/ansible/awx/pull/12705.  The dropdown items should have a `secondary styling`

### AWX version

devel

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

FIx it

### Expected results

Should look like https://www.patternfly.org/v4/components/dropdown#split-button-secondary-action

### Actual results

secondary styling on the dropdown items

### Additional information

_No response_
user: AlexSCorey
issue_12714: state: open
title: Analytics module: Insights Analytics Collector
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->

We want to unify the collecting data to Automation Analytics across AAP products. 
This feature uses [Insights Analytics Collector](https://github.com/RedHatInsights/insights-analytics-collector) which was designed with respect to the [analytics module](https://github.com/ansible/awx/tree/8c86092bf5cb92a9641bdf386da7dfb43e75c74a/awx/main/analytics) 
This feature:
- replaces [analytics/core.py](https://github.com/ansible/awx/blob/8c86092bf5cb92a9641bdf386da7dfb43e75c74a/awx/main/analytics/core.py)
- keeps definitions of [collectors.py](https://github.com/ansible/awx/blob/8c86092bf5cb92a9641bdf386da7dfb43e75c74a/awx/main/analytics/collectors.py) with small changes to the `@register` method:
  - renames `expensive` to `fnc_slicing`
  - adds `config=<bool>`
  - slicing functions uses key-value args (`**kwargs`)
- adds mandatory file "data_collection_status.csv" to each payload to better support analytics
- puts more collections to one tarball if possible (collections without `fnc_slicing`) than original
- fixes a bug in the `FileSplitter` with counting headers to the file size, by implementation of `CsvFileSplitter`

##### ISSUE 

https://issues.redhat.com/browse/AA-1265

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature


##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - Analytics

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->

```
awx: 22.3.1.dev33+gfe28e95cbb
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

TODO: description of howto run, where are changes

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: slemrmartin
labels: dependencies: Pull requests that update a dependency file
issue_12698: state: open
title: Gracefully handle receptor and redis errors
body: ##### SUMMARY
This is intended to address two painful logging issues that occur in normal or semi-normal operation.

 - When following the _regular install path_ the dispatcher begins life in a restart loop due to missing the receptor config file
 - If the user restarts the redis service (again, not crazy), we get tracebacks that are 0.01 seconds apart. Having this run for just 17 seconds will consume a large fraction of log files.

##### ISSUE TYPE
 - Bug, Docs Fix or other nominal change

##### COMPONENT NAME
 - API

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```

```


##### ADDITIONAL INFORMATION
We set a new series of expectations with this.

![Screenshot from 2022-08-19 11-41-04](https://user-images.githubusercontent.com/1385596/185660124-11549b5c-3d1c-478a-9712-e991edaa73f3.png)

I hope this is pretty self-obvious, and if this is how a cluster starts off life, then that's cool with me. Respond to requests, run system tasks, but let me know you're not all the way set up.

user: AlanCoding
issue_12686: state: open
title: Ignore events in callback receiver for which uuid already exists in database
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature type

New Feature

### Feature Summary

If the callback receiver gets an event that has already been saved, then it should not count it as an error.

This will probably surface as this type of error:

> django.db.utils.IntegrityError: duplicate key value violates unique constraint

Right now we don't catch this, so we should.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Steps to reproduce

We will hit this in the future if we do event replays.

### Current results

These are counted as errors, which will trigger retries and slow down the system, eventually leading to event loss.

### Sugested feature result

Somewhat minimally efficient handling of duplicate events submitted to redis.

### Additional information

_No response_
user: AlanCoding
issue_12685: state: open
title: Jobs with a lot of output/hosts stops with status "Error"
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Hi there,

I have two different playbooks:
- one with a few tasks (5-10 tasks) but on a lot of hosts (> 500 hosts)
- one with a lot of tasks which produce a lot of output (due to a lot of big loops) on one host

Both jobs end with status "Error". After some research and investigating (I really don't have any experience with Kubernetes) I found out, that the worker container in the automation-pod (automation-job-xxxx-yyyyy) stops producing logs (so the output in AWX GUI will also freeze).
The job then still runs some time after the freezing output, but after a few minutes the job failed in status "Error".

It seems to be, that it has nothing to do with the rotating log size (10 MB) I read here on existing issues, because the current logfile has only 6 MB.
```
deansible01-t:/var/log/pods/awx_awx-7ffd96b58b-9xrmt_2e587bd5-d91a-4c8e-96bc-19ae9d1ca4b9/awx-task # ls -lah 1.log
-rw-r----- 1 root root 6.1M Aug 18 15:14 1.log
```

The logfile of awx_task said:
`2022-08-18T14:59:40.239996397+02:00 stderr F 2022-08-18 12:59:40,239 WARNING  [008db9d212c94a569aabe6fac548d42d] awx.main.dispatch job 1018 (error) encountered an error (rc=None), please see task stdout for details.`

Our settings in AWX are:
![Bildschirmfoto zu 2022-08-18 15-18-25](https://user-images.githubusercontent.com/14914839/185404738-3af3510e-b50f-4539-bea8-ae5498923c6d.png)

I really don't have a clue what is causing this error. But we really need those playbooks working :-(

### AWX version

21.4.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Firefox

### Steps to reproduce

Create a playbook with 4-5 tasks and start them on over 500 hosts. For example:

```
- name: clean up files
  ansible.builtin.file:
    path: /tmp/ansible_os_infos
    state: absent
  delegate_to: somehost.blafoo.com
  run_once: True

- name: add headers to file
  ansible.builtin.lineinfile:
    path: /tmp/ansible_os_infos
    regexp: "^System"
    line: "System;Distribution;OSMajor;OSRelease"
    create: yes
  delegate_to: somehost.blafoo.com
  run_once: True

# SLES
- set_fact:
    os_information_string: "SUSE Linux Enterprise;{{ ansible_distribution_major_version }} SP{{ ansible_distribution_release }};"
  when: ansible_distribution == "SLES" or ansible_distribution == "SLES_SAP"

# Oracle Linux
- set_fact:
    os_information_string: "Oracle Linux;{{ ansible_distribution_major_version }};{{ ansible_distribution_version }}"
  when: ansible_distribution == "OracleLinux"

- name: save information about system
  ansible.builtin.lineinfile:
    path: /tmp/ansible_os_infos
    regexp: "^{{ inventory_hostname }}"
    line: "{{ inventory_hostname }};{{ os_information_string }}"
  delegate_to: somehost.blafoo.com
```

### Expected results

Get the facts of all hosts and put the OS information in one csv file on somehost

### Actual results

Job failed with status "Error"

### Additional information

_No response_
user: DaDenniX
issue_12682: state: open
title: Grafana Notification => ValueError: invalid literal for int() with base 10: ''
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Administration => Notification - Type Grafana.

Test failed when "ID of the dashboard (optional)" or/and "ID of the panel (optional)" is empty. 

`2022-08-18 10:11:57,916 ERROR    [9170e756] awx.main.tasks.system Send Notification Failed invalid literal for int() with base 10: ''
Traceback (most recent call last):
  File "/awx_devel/awx/main/tasks/system.py", line 290, in send_notifications
    sent = notification.notification_template.send(notification.subject, notification.body)
  File "/awx_devel/awx/main/models/notifications.py", line 182, in send
    backend_obj = self.notification_class(**notification_configuration)
  File "/awx_devel/awx/main/notifications/grafana_backend.py", line 58, in __init__
    self.panelId = int(panelId) if panelId is not None else None
ValueError: invalid literal for int() with base 10: ''`

and

`2022-08-18 10:09:46,302 ERROR    [c7de9089] awx.main.tasks.system Send Notification Failed invalid literal for int() with base 10: ''
Traceback (most recent call last):
  File "/awx_devel/awx/main/tasks/system.py", line 290, in send_notifications
    sent = notification.notification_template.send(notification.subject, notification.body)
  File "/awx_devel/awx/main/models/notifications.py", line 182, in send
    backend_obj = self.notification_class(**notification_configuration)
  File "/awx_devel/awx/main/notifications/grafana_backend.py", line 57, in __init__
    self.dashboardId = int(dashboardId) if dashboardId is not None else None
ValueError: invalid literal for int() with base 10: ''`

The reason i think is that '' is not None so '' is passed to int() and triggers the Error


AWX Version: Ansible AWX 21.4.0
Grafana Version: v9.0.7


### AWX version

21.4.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.10.8

### Operating system

Ubuntu 22.04.1 LTS

### Web browser

Firefox, Chrome

### Steps to reproduce

Under Notification, add a Grafana Notification and leave the Fields ID of (dashboard, panel) empty. Hit the Test Button. 

### Expected results

Notification in Grafana

### Actual results

The State changed to Failed. The log contains the Error above. 

### Additional information

_No response_
user: manuel-held
issue_12673: state: open
title: `make jupyter` broken for docker-compose development environment
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

`make jupyter` broken for docker-compose development environment

we should evaluate if this make target is useful/needed and if we should fix or remove it

### AWX version

awx: 21.4.1.dev61+gd2217bc61d.d20220817

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

MacOS

### Web browser

Firefox, Chrome

### Steps to reproduce

- standup docker-compose development environment using `make docker-compose`
- validate that development environment come up cleanly by visiting `https://localhost:8043/api/v2` and login
- exec into docker container `docker exec -it tools_awx_1 bash`
- run make target `make jupyter` in `/awx_devel` directory
- encounter the following error
```
bash-5.1$ make jupyter
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/traitlets/traitlets.py", line 645, in get
    value = obj._trait_values[self.name]
KeyError: 'runtime_dir'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/awx-manage", line 9, in <module>
    load_entry_point('awx', 'console_scripts', 'awx-manage')()
  File "/awx_devel/awx/__init__.py", line 201, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/__init__.py", line 413, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django_extensions/management/commands/shell_plus.py", line 125, in run_from_argv
    return super(Command, self).run_from_argv(argv)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/base.py", line 354, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/core/management/base.py", line 398, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django_extensions/management/utils.py", line 62, in inner
    ret = func(self, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django_extensions/management/commands/shell_plus.py", line 517, in handle
    shell()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django_extensions/management/commands/shell_plus.py", line 253, in run_notebook
    app.initialize(notebook_arguments)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/traitlets/config/application.py", line 110, in inner
    return method(app, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/notebook/notebookapp.py", line 2146, in initialize
    self.init_configurables()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/notebook/notebookapp.py", line 1648, in init_configurables
    connection_dir=self.runtime_dir,
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/traitlets/traitlets.py", line 686, in __get__
    return self.get(obj, cls)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/traitlets/traitlets.py", line 648, in get
    default = obj.trait_defaults(self.name)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/traitlets/traitlets.py", line 1752, in trait_defaults
    return self._get_trait_default_generator(names[0])(self)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/jupyter_core/application.py", line 106, in _runtime_dir_default
    ensure_dir_exists(rd, mode=0o700)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/jupyter_core/utils/__init__.py", line 12, in ensure_dir_exists
    os.makedirs(path, mode=mode)
  File "/usr/lib64/python3.9/os.py", line 215, in makedirs
    makedirs(head, exist_ok=exist_ok)
  File "/usr/lib64/python3.9/os.py", line 225, in makedirs
    mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/var/lib/awx/.local/share/jupyter'
```

### Expected results

jupyter notebook service start

### Actual results

```
PermissionError: [Errno 13] Permission denied: '/var/lib/awx/.local/share/jupyter'
```

### Additional information

_No response_
user: TheRealHaoLiu
issue_12672: state: open
title: `make bulk-data` broken in docker-compose development environment
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

`make bulk-data` broken in docker-compose development environment

we should take some time to see if this is being used anywhere and if its still relevant 

we should either fix or delete this make target and its related files

### AWX version

awx: 21.4.1.dev61+gd2217bc61d.d20220817

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

MacOS

### Web browser

Firefox

### Steps to reproduce

- standup docker-compose development environment using `make docker-compose`
- validate that development environment come up cleanly by visiting `https://localhost:8043/api/v2` and login 
- exec into docker container `docker exec -it tools_awx_1 bash`
- run make target `make bulk_data` in `/awx_devel`
- encounter the following error 
```
# Creating 500 job events
   Creating 152 job events for job 1, subgroup: 1Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.CheckViolation: no partition of relation "main_jobevent" found for row
DETAIL:  Partition key of the failing row contains (job_created) = (null).


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/awx_devel/tools/data_generators/rbac_dummy_data_generator.py", line 732, in <module>
    make_the_data()
  File "/awx_devel/tools/data_generators/rbac_dummy_data_generator.py", line 716, in make_the_data
    JobEvent.objects.bulk_create([JobEvent(created=now(), modified=now(), job=job, event='runner_on_ok') for i in range(n_subgroup)])
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/query.py", line 514, in bulk_create
    returned_columns = self._batched_insert(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/query.py", line 1287, in _batched_insert
    inserted_rows.extend(self._insert(
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/query.py", line 1270, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/sql/compiler.py", line 1416, in execute_sql
    cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 98, in execute
    return super().execute(sql, params)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
django.db.utils.IntegrityError: no partition of relation "main_jobevent" found for row
DETAIL:  Partition key of the failing row contains (job_created) = (null).

make: *** [tools/Makefile:308: bulk_data] Error 1
```

### Expected results

it works as design (although the actual design is unclear)

### Actual results

failed

### Additional information

_No response_
user: TheRealHaoLiu
issue_12670: state: open
title: [WIP] gathering all tools related make targets
body: ##### SUMMARY
Give a makeover to the Makfile while maintaining backward compatibility

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - Other

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 21.4.1.dev61+gd2217bc61d
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: TheRealHaoLiu
issue_12667: state: open
title: Add the team name when showing team roles for a user on a resource
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

<img width="1674" alt="Screen Shot 2022-08-16 at 1 53 08 PM" src="https://user-images.githubusercontent.com/9889020/184946433-69423129-7c15-4d33-ac92-b68215ebc9cb.png">

In this example, the user `foo` is a member of 3 teams (team 1, team 2, team 3) and each team has an `Execute` role on a job template.  We show `Execute` three times but give no inidication of which team that role actually belongs to.  Perhaps we could put the team name (which is provided in the response) inside the chip _or_ we could add a tooltip to the chip that includes the team name.

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other
user: mabashian
issue_12666: state: open
title: workflow approval- details screen cancel button not working properly
body: To reproduce:

Create a workflow job template with an approval node.
Launch the job.
Visit the workflow approval tabs. Find the approval from your template and click on it to visit the details tab.
Click Cancel Workflow, and then click Confirm Cancellation.
Notice that the Cancel Workflow button remains enabled, and the user has to repeat the cancellation steps to disable it.
user: akus062381
labels: needs_refinement: Apply to items in 'Backlog' that need refinement.
issue_12663: state: open
title: workflow approval- line item checkbox behavior isn't working correctly
body: To reproduce:

Create a workflow job template with an approval node.
Click on the workflow approvals tab.
Locate the approval line item that corresponds to your template and check the box for that line item.
Note that the Delete button stays grayed out because you haven't approved/denied/cancelled the approval.
With that box still checked, deny the workflow using the thumbs down button.
The checkbox should still have a check mark in it, but the Delete button is still disabled. It should have been enabled when the job status changed from Pending to Denied.
The user has to uncheck and recheck the check box to Delete that line item.

![image](https://user-images.githubusercontent.com/63685497/184924634-ade663be-2e64-4b74-9c24-954906cf84fd.png)

user: akus062381
labels: needs_refinement: Apply to items in 'Backlog' that need refinement.
issue_12661: state: open
title: Jobs leaving artifacts in /tmp directory
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Jobs are leaving artifacts in the /tmp directory when some jobs finish. This is causing the root disk for systems to fill up and crash. Would like a job or automation that could check and remove stale artifacts that won't crash the service.

### AWX version

 Ansible Automation Platform Controller 4.2.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

N/A

### Modifications

no

### Ansible version

2.13

### Operating system

RHEL 8

### Web browser

Firefox

### Steps to reproduce

When certain jobs run, they leave folders in the /tmp directory. AWX sometimes does not clean up these files and they fill up the root disk, causing the system to crash.

### Expected results

Jobs to be cleaned out or some background automation that will search the /tmp directory can clean up files older than a certain time frame that match the AWX folder naming.

### Actual results

Folder artifacts accumulate in the /tmp directory and the /tmp cleanup daemon does not acknowledge the folders to be cleaned up, so folders build up and fill up the root disk 

### Additional information

I previously tried adding the AWX naming for folders to the /tmp clean up daemon, but when I did that, it crashed the platform. So unsure what I messed up or if there is a better process hidden in documentation somewhere, I missed 
user: aheath1992
issue_12639: state: open
title: Ability to search Survey fields and have fields in Alphabetical order
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

Requesting the ability to search survey fields as we were able to do in Tower, as wells as have Survey results In Alphabetical order. When we have large survey fields, customers would like the ability to search and have the results in alphabetical order rather than having to scroll an unorganized list

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other
user: aheath1992
issue_12634: state: open
title: credential admins are not able to manage access
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Users who have the Credential Admin role are not able to grant other users access to already existing credentials or credentials they have created on their own.

### AWX version

21.2.0

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.12.2

### Operating system

Debian 11

### Web browser

Firefox

### Steps to reproduce

- Create a new user in an organization
- Goto to the Organizations section, choose the organization and add the Credential Admin role via Access tab
- Login as the new user
- Create a new credential
- Got to the Access tab and recognize the "Add" button to grant access to the newly created credential is not present.

### Expected results

* A user with the credential Admin role should be able to grant access to a credential.
* The user should have an "Add" button in the access tab of a credential to grant permissions

That behavior would be similar to project, job_template, and inventory admins which have the capability to grant permissions on projects/job_templates/inventories.

### Actual results

Credential Admins are not able to grant permissions on credentials to other users.

### Additional information

_No response_
user: anxstj
issue_12615: state: open
title: Cannot Delete Workflow Approval List item if workflow is still running
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

See title

### AWX version

latest

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

Create and then launch a workflow that has at least 1 approval node.  On the workflow approval list, approve, or deny the workflow approval item.  Then delete the workflow approval item

### Expected results

I should be able to delete the workflow approval item if I have approved, denied, or cancelled it.

### Actual results

I get a 403

### Additional information

![deletebug](https://user-images.githubusercontent.com/39280967/182459666-d59a984a-85f6-4e2f-8bd4-735cba338f79.gif)

user: AlexSCorey
labels: needs_refinement: Apply to items in 'Backlog' that need refinement.
issue_12613: state: open
title: list servers from smart inventory using awx cli
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

It would be nice to have feature in awx cli to list servers from smart inventory.
Right now it is possible to list if we have custom made inventory but same cannot if inventory type is smart. Then same thing we can see using api and from gui as well.

for example here :
$ awx inventory list -f human --all |grep -i custom
65 custom_inventory

$ awx hosts list --inventory 65 -f human
id     name
====== ============
381712 srvxxx
381713 srvyyy

$ awx inventory list --kind smart -f human
id name
== ===========================================
24 Linux RH6/7/8 Acceptance Servers

$ awx hosts list --inventory 24 -f human
id name
== ====

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other
user: dipanjanmukherjee83
issue_12607: state: open
title: Revert to old survey search mechanism
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

On older AWX versions you could search multiple choice variables without knowing the exact name just by starting to type something. Currently, as of AWX 21.2.0 you need to type the exact name to find a match.


Reproducing:

Create survey variable "testsearch" with multiple choice options:
- "a_apple"
- "b_banana"

Searching for "apple" returns nothing. On our very old AWX 11 instance searching for apple returns the "a_apple" option because it contains the word apple.

Regex works if you search for .*apple but imo that's not a nice way. Could this be switched to old behaviour?

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other
user: om22
issue_12596: state: open
title: Workflow nodes with same unified job template names but different types should be allowed
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

If there is a project and inventory source with the same name, the node lookup should use the type to differentiate between the two. for example:
```
- identifier: Inventory Update
  unified_job_template:
    name: Azure
    inventory:
      organization:
        name: Default
    type: inventory_source
- identifier: Project Update
  unified_job_template:
    name: Azure
    type: project
    organization:
      name: Default
```

### AWX version

21.3.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

minikube

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Run the updated main.yml and it will fail 

### Expected results

It uses the type to find the correct unified job template, as that is a required field in the model

### Actual results

Returns error as multiple objects with the same name

### Additional information

_No response_
user: sean-m-sullivan
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_12585: state: open
title: Extra vars from disabled survey prevents schedule editing
body: ##### ISSUE TYPE
 - Bug 


##### COMPONENT NAME
 - UI (?)


##### SUMMARY

If you create and turn on a survey and create and turn on a schedule, then return to the survey to turn it off, and then return to edit the schedule you cannot edit the schedule without clicking on prompt. This is a problem, because the survey is off and should not impede the ability to save/edit a schedule
user: keithjgrant
labels: needs_refinement: Apply to items in 'Backlog' that need refinement.
issue_12583: state: open
title: Do not allow selecting control-only InstanceGroup on Job Template (k8s deployments)
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

It is a little confusing for users in the k8s/openshift domain because for operator deployments of AWX, they can select an Instance Group containing control_plane nodes to run a JT against.  But if you do that, the resulting job just sits in the pending state.

### AWX version

devel

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

openshift

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

1. Edit the Demo Job Template to run on the `controlplane` InstanceGroup.
2. Run the Demo Job Template
3. Observe the job being stuck in the pending state perpetually

### Expected results

Not to be able to add InstanceGroups in the first place on k8s deployments.  

### Actual results

The user should not be able to select an Instance Group that contains only control_plane type nodes in Operator deployments.  The concept of a hybrid node doesn't exist in the k8s deployment.

Once we add the ability to run jobs on Remote execution VM's from a cluster deployment, we could allow running against InstanceGroups (selected on the Job Template), but for right now, I think we should add logic that doesn't allow the user to select the `controlplane` IG, or any IG for that matter if the deployment is on k8s/openshift.  

### Additional information

We can leverage the `settings.IS_K8S` setting to accomplish this - https://github.com/ansible/awx/blob/30c060cb2738d6623497681b267a1e10e9e7c18e/awx/settings/defaults.py#L67
user: rooftopcellist
issue_12581: state: open
title: Unable to create organization admin using SAML based SSO Authn and Authz
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Requirement:  Integrate AWX with SAML SSO and enable RBAC (SSO user and AWX org/team mapping) 

We need multiple organizations and multiple teams in AWX. We have groups(DL) in Azure AD. A user is part of more than one AD group ex. I am part of 50+ AD groups. A certain group in AD wants to use our AWX instance. For Authn and Authz we have decided to use SAML-based SSO. We have to not use LDAP-based SSO for security reasons. We can't use the Azure AD option as it does not allow group/dl mapping in the team_org map.

So I followed [this guide](https://docs.ansible.com/ansible-tower/latest/html/administration/ent_auth.html#id4) to configure the SAML in AWX which involves creating the Enterprise application in Azure AD, creating attributes and claims in AD, configuring the URLs and Certificates, etc. All done. We are able to log in to AWX. Authentication is working perfectly fine. No issue. 

The problem we facing in Authorization. 

SAML TEAM ATTRIBUTE MAPPING:
```sh{
 "saml_attr": "User.groups",
 "team_org_map": [
  {
   "team_alias": "team1",
   "team": "group1-id", # 
   "organization": "myOrg"
  }
 ],
 "remove": true
}
```

`User.groups` returns the list of group ids the user is part of so I am using the team_alias to give the friendly name to the team. This mapping creates the user under a team and it does not have any permission to create/execute resources in the respective organization after logging in. I want to create that user as admin of the organization so that he can do anything in `myOrg` or he has permission to do anything in resp `myOrg`.

Can someone assist on this issue, please?





### AWX version

12.0.0

### Select the relevant components

- [X] UI
- [ ] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.9.9

### Operating system

Ubuntu

### Web browser

Chrome

### Steps to reproduce

Follow the doc: https://docs.ansible.com/ansible-tower/latest/html/administration/ent_auth.html#id4

### Expected results

After signing in user should be an admin of the org or he has permission to do anything in the org. All this should be driven from team_org mapping or any other configuration that can be used in SAML config. 

### Actual results

The user is getting created as a normal user under a team who does not have permission to do anything.User

### Additional information

_No response_
user: hari-hud
labels: component:authentication: For issues related to authentication
issue_12580: state: open
title: uWSGI listen queue of socket "127.0.0.1:8050" full / Database deadlock
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

In the last couple of days, we experienced an unreachable (504 gateway error) AWX. The container logs showed us:

```
uWSGI listen queue of socket "127.0.0.1:8050" (fd: 3) full !!! (101/100)
```
Looking at the database we see a PostgreSQL process fully consuming a CPU core:
```
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                              
2314769 postgres  20   0 3870908   1.5g  44840 R  97.6  20.0 125:14.77 postgres
```
Which was caused by the following query:
```
psql awx -c "SELECT pid, age(clock_timestamp(), query_start), usename, query FROM pg_stat_activity 
WHERE query != '<IDLE>' AND state != 'idle' AND query NOT ILIKE '%pg_stat_activity%' ORDER BY query_start desc;"

2314769 | 00:00:08.193428 | sql_awx | UPDATE "main_jobevent" SET "host_id" = NULL WHERE "main_jobevent"."id" IN (277290805, 277290806,  ...
```
The following advisory locks were held at that moment:
```
> psql awx -c "SELECT * FROM pg_locks where locktype = 'advisory';

 locktype | database |  classid   |   objid    | objsubid | virtualtransaction |   pid   |     mode      | granted | fastpath         
----------+----------+------------+------------+----------+--------------------+---------+---------------+---------+----------
 advisory |    16402 | 4294967295 | 2479945980 |        1 | 46/36422           | 2355613 | ExclusiveLock | f       | f
 advisory |    16402 |          0 | 1226251610 |        1 | 38/146232          | 2355820 | ExclusiveLock | t       | f
 advisory |    16402 | 4294967295 | 2479945980 |        1 | 27/1068360         | 2314789 | ExclusiveLock | f       | f
 advisory |    16402 | 4294967295 | 2479945980 |        1 | 24/1428056         | 2355617 | ExclusiveLock | f       | f
 advisory |    16402 | 4294967295 | 2479945980 |        1 | 13/1129470         | 2352302 | ExclusiveLock | f       | f
 advisory |    16402 | 4294967295 | 2479945980 |        1 | 19/1688253         | 2314769 | ExclusiveLock | t       | f
(6 rows)
```
What struck me here is the other advisory lock that is granted:
```
 2355820 | 01:02:05.922299 | sql_awx | CREATE TABLE IF NOT EXISTS main_jobevent_20220726_12  PARTITION OF main_jobevent FOR VALUES FROM ('2022-07-26 12:00:00+00:00') to ('2022-07-26 13:00:00+00:00');
 ```
That's a simple query and still it's running for more than an hour.

Now I tried to find out which job was causing the UPDATE query (pid  2314769):
```
$ ps faux | grep 2314769
postgres 2314769 98.0 20.0 3879100 1627452 ?     Rs   11:20 132:42  \_ postgres: 12/main: sql_awx awx 10.61.35.14(37840) UPDATE
```
This shows the IP and source port. Going to the AWX node and searching for that open port reveals:
```
$  ss -ntp | grep 37840
ESTAB 0      0         172.18.0.3:37840     10.61.35.42:5432  users:(("awx-manage",pid=1574305,fd=45))
$ ps -fp 1574305
UID          PID    PPID  C STIME TTY          TIME CMD
awx      1574305      87  0 11:18 ?        00:00:40 /var/lib/awx/venv/awx/bin/python3.9 /usr/bin/awx-manage run_dispatcher
$ awx-manage run_dispatcher --status | grep -A1 1574305
.  worker[pid:1574305] sent=9 finished=8 qsize=1 rss=1531.555MB
     - running cb54f0ce-948e-4464-84e0-55756d1a92d1 RunInventoryUpdate(*[1010791])
```
The Job with ID 1010791 is an inventory synchronization job with source "VMware Center". And that job was running for more than an hour, despite that older jobs took only a couple of seconds.
Killing that process solved the deadlock and the listen queue was freed up.

I'm wondering if the UPDATE query caused by the inventory update job and the CREATE TABLE query are blocking each other? Both are trying to access the same partition of the *main_jobevent* table.

Another explanation would be that the inventory update job got stuck for some reason (e.g. broken network connection) and the advisory lock wasn't removed because the SQL connection was still open. And the CREATE TABLE query was waiting on the other lock but holding the advisory lock for the new partition. On the other side, the UPDATE query was still burning CPU cycles that don't really look like a deadlock.

We experienced this situation at least three times. It was always:
* an inventory sync job with an external source
* an UPDATE query that was burning CPU cycles
* a CREATE TABLE query that stuck for at least a couple of minutes
* the uwsgi queue is filling up and makes the UI inaccessible

### AWX version

21.2.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

yes

### Ansible version

2.12.2

### Operating system

Debian 11

### Web browser

Firefox

### Steps to reproduce

I don't know yet.

### Expected results

listen queue doesn't pile up.

### Actual results

listen queue is piling up.

### Additional information

The development environment uses an external database.
user: anxstj
issue_12579: state: open
title: Socket path does not exist or cannot be found
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Gathering facts from NXOS switches using the nxos_facts module will occasionally result in a fatal error: "socket path /home/runner/.ansible/pc/<socket-id> does not exist or cannot be found."

This error is annoyingly sporadic and it'll start working properly with no remedial steps taken to fix it. Job execution could be successful on one job run, and then it'll throw this error on the next job on exactly the same switch. Switch model doesn't seem to be causing it - I can run the same job on two Nexus 93180, one will fail with socket path and the other will succeed.

Using other modules like nxos_config or nxos_command with gather_facts set to false don't suffer the same error.

### AWX version

21.0.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.12.4

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Run a simple playbook to gather facts using the nxos_facts module

### Expected results

Successful gathering of facts from NXOS switch

### Actual results

fatal error: "socket path /home/runner/.ansible/pc/<socket-id> does not exist or cannot be found."

### Additional information

_No response_
user: Zeek3000
issue_12578: state: open
title: Execution Environment ignores ansible_ssh_common_args
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Dear team.,

I'm facing the issue so that I cannot connect to legacy network equipment from AWX with the following error message:
```
ssh connection failed: ssh connect failed: kex error : no match for method kex algos: server [diffie-hellman-group1-sha1], client [curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1]
```

I can connect from the execution environment using ssh args like this:
```
ssh redacted@192.168.86.240 -o KexAlgorithms=diffie-hellman-group1-sha1 -o HostKeyAlgorithms=ssh-rsa -o Ciphers=aes256-cbc
```

I've added the key `ansible_ssh_common_args` to the inventory of the device in AWX:
```
---
ansible_host: 192.168.86.240
ansible_network_os: cisco.ios.ios
ansible_become_method: enable
ansible_ssh_common_args: '-o KexAlgorithms=+diffie-hellman-group1-sha1 -o HostKeyAlgorithms=+ssh-rsa -o Ciphers=+aes256-cbc'
...
```

I added a step in playbook to print the content of the var and it seems ok:
```
    "ansible_ssh_common_args": "-o KexAlgorithms=+diffie-hellman-group1-sha1 -o HostKeyAlgorithms=+ssh-rsa -o Ciphers=+aes256-cbc"
}
```

The full execution log looks like this [job_474.txt](https://github.com/ansible/awx/files/9193562/job_474.txt)



Best

### AWX version

21.2.0

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [X] Collection
- [ ] CLI
- [ ] Other

### Installation method

minikube

### Modifications

yes

### Ansible version

2.12.5.post0

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. [Pull the EE](https://hub.docker.com/layers/berkutcloud/awx-ee-cisco/latest/images/sha256-a6d0f8ce25b065e203f0b5d613027411311228e977bf2c9ca9a140cfbb73f726?context=repo)
2. Try to connect to any device, which doesn't support modern KeyExchange algorithms (I used Cisco IOS running 15T release)

### Expected results

$ ansible-playbook catalyst_upgrade.yml -K
BECOME password: 

PLAY [SW UPGRADE] *******************************************************************************************************************

TASK [infra : CREATING TEMP FOLDER] *************************************************************************************************
ok: [VTA-3560-PRD-SW-MDF-003 -> localhost]

TASK [infra : ansible.builtin.debug] ************************************************************************************************
ok: [VTA-3560-PRD-SW-MDF-003] => {
    "ansible_ssh_common_args": "VARIABLE IS NOT DEFINED!"
}

TASK [cisco.ios.ios_device_check : COLLECTING SW VERSION AND PLATFORM TYPE] *********************************************************
ok: [VTA-3560-PRD-SW-MDF-003]

TASK [cisco.ios.ios_device_check : EXTRACTING VARS] *********************************************************************************
ok: [VTA-3560-PRD-SW-MDF-003]

TASK [cisco.ios.ios_device_check : REFORMATTING VARS] *******************************************************************************
ok: [VTA-3560-PRD-SW-MDF-003]

TASK [cisco.ios.ios_device_check : IMPORTING PER PLATFORM VARIABLES] ****************************************************************
ok: [VTA-3560-PRD-SW-MDF-003]

TASK [cisco.ios.ios_device_check : COLLECTING INFO TO SAVE] *************************************************************************
ok: [VTA-3560-PRD-SW-MDF-003]


### Actual results

SSH password: 
BECOME password[defaults to SSH password]: 

PLAY [SW UPGRADE] **************************************************************

TASK [infra : CREATING TEMP FOLDER] ********************************************
changed: [VTA-3560-PRD-SW-MDF-003] -> localhost]

TASK [cisco.ios.ios_device_check : COLLECTING SW VERSION AND PLATFORM TYPE] ****
fatal: [VTA-3560-PRD-SW-MDF-003]]: FAILED! => {"changed": false, "msg": "ssh connection failed: ssh connect failed: kex error : no match for method kex algos: server [diffie-hellman-group1-sha1], client [curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1]"}

PLAY RECAP *********************************************************************
VTA-3560-PRD-SW-MDF-003]   : ok=1    changed=1    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   


### Additional information

[Execution Environment](https://hub.docker.com/layers/berkutcloud/awx-ee-cisco/latest/images/sha256-a6d0f8ce25b065e203f0b5d613027411311228e977bf2c9ca9a140cfbb73f726?context=repo)
user: berkutcloud
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_12571: state: open
title: project updates due to scm_branch do not show in UI list under Jobs
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

When project allows to override branch, and job template is started with a particular scm_branch, this triggers few things:
1. project update with project default branch (if project set with update revision on launch) - this seems to be obsole because of following point
2. an additional project update is started (new ID) against the given scm_branch
3. at this moment the playbook is executed

The problem is, that in UI under Jobs Source Control Update for point 1 is visible with example ID of 100, but the project update from point 2, though it got registered under ID 101 is not displayed regardless of filter settings. Displaying Source Control Update with ID 100 and then changing URL to ID 101 shows the project update resulting from scm_branch.

First of all, project update with generic branch does not make much sense if scm_branch is given, as it just wastes time and will be anyway overwritten.
Second of all - source control updates resulting from custom scm_branch are not shown in the UI at all. In API this works allright, when asking via UI for a given ID this also works. It just does not get listed.

### AWX version

21.1.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.12.5.post0

### Operating system

CensOS Stream 8 (awx-operator default)

### Web browser

Chrome

### Steps to reproduce

1. create a project with a simple playbook as git repository.
2. In this repository create 2 branches - `main` and `other`, both should include site.yml.
3. set project to branch main, select following options:
   - delete
   - update revision on launch
   - allow branch override
4. create job template for this project with site.yml and `other` as Source Control Branch
5. execute this job template

### Expected results

Under Jobs in UI should show up ideally only 2 entries:
ID:n - playbook run (waiting for following 1 to complete)
ID:n+1 - Source Control Update (against branch `other`)

Optionally (but not performant) all currently present IDs should show up, which is:
ID:n - playbook run (waiting for following 2 to complete)
ID:n+1 - Source Control Update (against branch `main`)
ID:n+2 - Source Control Update (against branch `other`)

### Actual results

Currently under jobs following shows up:
ID:n - playbook run (waiting for following 2 to complete)
ID:n+1 - Source Control Update (against branch `main`)


ID:n+2 - Source Control Update (against branch `other`) altough present is not being shown in the list. If the branch has some errornous requirements.yml which causes this task to fail, you need to manually alter URL to show it (/#/jobs/project/(n+2)/output)

### Additional information

This is not a major problem, but just a bit annoying when debuggin problems with requirements.yml on branch. IT also takes double the time as it twice downloads the repository and all roles/collections from all requirement.yml files...
user: bartowl
issue_12564: state: open
title: Refine job explanation logic on output details panel
body: Currently, the UI will only show the job explanation within the output portion of the details panel.  I think the assumption here was that there would never be any lines of output so we could reuse this space.  There are scenarios where there actually is output though:

<img width="1509" alt="image (3)" src="https://user-images.githubusercontent.com/9889020/180813918-a7931540-2a55-40b9-9ae9-d99ed24827f4.png">

<img width="1509" alt="image (4)" src="https://user-images.githubusercontent.com/9889020/180813913-fe1d22aa-98c5-46f0-87da-b77e5ec903bb.png">

We should re-think where we show the job explanation as a result.  Here's an updated proposal where we use a banner just above the output:

![image (5)](https://user-images.githubusercontent.com/9889020/180813910-5b6dc822-9979-48d0-a839-0484aa921cee.png)

Taking this approach should allow us to show the explanation in addition to the output when needed.

user: mabashian
issue_12557: state: open
title: AWX CLI with --monitor set should return a different status code than 0 for a cancelled job
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

Hello,

At this time, looking at the code https://github.com/ansible/awx/blob/1ce82401923b573868a4aa8f58fef8615d30527b/awxkit/awxkit/cli/custom.py#L71-L74
only the failed/error returned status are taken into account for an exit status code != 0
Cancelling a job/workflow job on AWX returns a status "canceled", which should set an exit status code != 0, but probably not 1, to differenciate it from error/failed.

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other
user: amolari
issue_12532: state: open
title: Callback receiver worker processes are not restarted if they are killed
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

To demonstrate with the development environment, running `ps aux --forest`:

```
awx          191  0.0  0.0   6044  2692 pts/0    S    14:01   0:00  \_ make receiver
awx          421  1.4  0.4 159236 136004 pts/0   S    14:02   0:03  |   \_ python3.9 manage.py run_callback_receiver
awx          915  0.0  0.3 158788 122820 pts/0   S    14:02   0:00  |       \_ python3.9 manage.py run_callback_receiver
awx          918  0.0  0.3 158800 122716 pts/0   S    14:02   0:00  |       \_ python3.9 manage.py run_callback_receiver
awx          921  0.0  0.3 163316 127912 pts/0   S    14:02   0:00  |       \_ python3.9 manage.py run_callback_receiver
awx          924  0.0  0.3 158824 122524 pts/0   S    14:02   0:00  |       \_ python3.9 manage.py run_callback_receiver
```

If you kill the process `421`, then supervisor will restart it, as you would expect. However, if you kill any of the subprocesses like `915`, then they will never restart, and the system will continue on forever with fewer workers (including none).

You can observe this if you log `[w.alive for w in self.pool.workers]` in the main loop for the parent process.

As @jainnikhil30 made a config change (that will affect some systems, eventually, maybe all systems) to give more callback receiver workers, that somewhat elevates the priority of this, since with more workers, I can imagine more potential problems.

Normally, workers will never exit, and everything should be captured fully in a try-except loop. You can see this by manually doing a kill command to the process, but I only know of this being a thing in that contrived situation.

This issue proposes that the parent process should recognize when a worker is dead, and restart it.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other
user: AlanCoding
issue_12526: state: open
title: UI logger
body: ##### ISSUE TYPE
 - New or Enhanced Feature


##### COMPONENT NAME
 - UI


##### SUMMARY

It might be worth building a simple debug log for the UI that users can turn on to help with troubleshooting bugs. This could be as simple as logging to localStorage, with noop behavior until the user enables logging.
user: keithjgrant
issue_12524: state: open
title: Add hostname for failure notifications
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

Currently we are receiving notifications like:

Job #69971 'Deploy: SDS TASK' failed: https://awx.my.domain/#/jobs/playbook/69971

it's good to add hostnames where the failure has been occured

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other
user: AlekseiSaff
issue_12520: state: open
title: Alter LDAP adapter to not remove system admin and system auditor flags
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

In the awx setting AUTH_LDAP*_USER_ATTR_MAP add a property like remove_superuser which would behave like the remove_admins in the team mapping; preventing users granted the superuser role through the UI from having that flag removed from their user. A smilier option for remove_auditors would also be present.

### Select the relevant components

- [ ] UI
- [X] API
- [X] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other
user: john-westcott-iv
labels: component:authentication: For issues related to authentication
issue_12517: state: open
title: expose api token in job context, to allow simple API usage from playbooks
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

I'm using the API of my AWX instance from within a playbook running on that instance. To authenticate (w/o hardcoding credentials), I have to create a custom credential type and store some extra api users' name+password in there, and use these explicitly.

1. this is unnecessary complexity
2. i must manage the permissions of that extra user manually.

It would be much more elegant to pass an api token of the user running the AWX job as environment variable. This way, e.g. the awx.awx-collection could get its authorization without needing to add any code, plus the permission would be simply those of the user running the job in the first place.

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other
user: azrdev
issue_12496: state: open
title: Handle character limit for input fields
body: Currently, there is no maxlength property for the input fields in the forms of the Controller UI. This issue is being opened as a result of a unit test consultation meeting between UI devs and UI QE. 
Assigned dev: please add the maxlength property to all form input fields that currently have a maximum length of characters. This will eliminate the need to have unit tests to test that the character limit of the input field is working properly.
user: akus062381
issue_12491: state: open
title: AWS EC2 inventory ends in failure
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

AWS EC2 inventory end in failure after some weeks/days using it.
Job status: Failed

The job used to run correctly for some time and then at some point ends in failures.

Recreating the the same inventory source with the exact same options, credentials, etc makes it ends in Successful status.

Failed job log last entries:
   22.907 DEBUG    Adding child group zones to parent all
   22.909 INFO     Loaded 815 groups, 240 hosts
13k output lines (debug)

Successfull job last entries:
   47.597 INFO     Inventory import completed for <source> in 34.0s
24k output lines (debug)

This seems to not be happening with: AWX 19.5.0.

### AWX version

21.1.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Creat AWS EC2 inventory source, use it for some time.

### Expected results

Inventory source ends in failure.

### Actual results

Failed job log last entries:
   22.907 DEBUG    Adding child group zones to parent all
   22.909 INFO     Loaded 815 groups, 240 hosts
13k output lines (debug)


### Additional information

Recreating the the same inventory source with the exact same options, credentials, etc makes it ends in success status.

user: nasjomach
issue_12478: state: open
title: Change Inventory "Status" column header to "Sync Status"
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

<img width="596" alt="inv_status_column" src="https://user-images.githubusercontent.com/9889020/177794220-f918c615-e362-44eb-a168-ee73035df4a9.png">

`Status` could be misconstrued as On/Off when it really correlates to the status of the most recent Sync Job.  `Sync Status` would probably be a better representation.

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other
user: mabashian
issue_12477: state: open
title: It is not possible to select playbooks from the collection
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

The problem is that I would like to use a playbook from the collection. As it stands, the collection is on a different path than the example project:
The collection is installed here:
/var/lib/awx/projects/.__awx_cache/_42__project_name/stage

And the project is:
/ var / lib / awx / projects / _42__project_name /
  What makes it impossible to create a job template because I can choose from playbooks from the path
/ var / lib / awx / projects / _42__project_name /
not /var/lib/awx/projects/.__awx_cache/_42__project_name/


### AWX version

15.0.1

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

docker development environment

### Modifications

no

### Ansible version

2.9.14

### Operating system

RHEL 7.5

### Web browser

_No response_

### Steps to reproduce

1.	Find or create repro  who include file requirements.yml
          a.	requirements.yml
              i.  collection  must include playbooks
2.	Create project
          a.	SCM Type: GIT
3.	Update project
4.	create job_template
        a.	Project  from point 2 
        b.	Try find playbooks from collection  


### Expected results

You can choose playbooks form the collection

### Actual results

You can't choose playbooks form the collection

### Additional information

_No response_
user: Sebastiannnnn
issue_12464: state: open
title: awxkit - success_nodes argument is missing
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Hi, I am automating  Workflow Job Template creation with awxkit and I hit a blocker. For command `awx workflow_job_template_nodes create` seems to be missing options to add `success_nodes, failure_nodes and always_nodes`. I am not sure if I just can't find the correct command for it or if the arguments are not implemented. Basically I can't figure out how to make template workflow composed of template jobs. 

When I list some of the existing workflows(I prepared in AWX GUI workflow builder) ```awx workflow_job_template_nodes list``` there are objects like 
```              
"success_nodes": [
86
],
"failure_nodes": [],
"always_nodes": [],
```
which are defining the next node in the workflow graph.
However, I can't find the way how to set these via awxkit. I am not sure if it is bug or awxkit just not implementing such a feature.

thanks

### AWX version

21.2.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce
```
pip3 install awxkit==21.2.0
```
```
TOWER_HOST=https://<> TOWER_USERNAME=<>  TOWER_PASSWORD=<> awx workflow_job_template_nodes create
```

```
usage: awx workflow_job_template_nodes create [-h] [--extra_data JSON/YAML] [--inventory ID] [--scm_branch TEXT] [--job_type {None,,run,check}] [--job_tags TEXT]
                                              [--skip_tags TEXT] [--limit TEXT] [--diff_mode BOOLEAN] [--verbosity {None,0,1,2,3,4,5}] --workflow_job_template ID
                                              [--unified_job_template ID] [--all_parents_must_converge BOOLEAN] [--identifier TEXT]

required arguments:
  --workflow_job_template ID
                        the ID of the associated workflow_job_template

optional arguments:
  -h, --help            show this help message and exit
  --extra_data JSON/YAML
                        a JSON or YAML string. You can optionally specify a file path e.g., @path/to/file.yml
  --inventory ID        Inventory applied as a prompt, assuming job template prompts for inventory
  --scm_branch TEXT
  --job_type {None,,run,check}
  --job_tags TEXT
  --skip_tags TEXT
  --limit TEXT
  --diff_mode BOOLEAN
  --verbosity {None,0,1,2,3,4,5}
  --unified_job_template ID
                        the ID of the associated unified_job_template
  --all_parents_must_converge BOOLEAN
                        If enabled then the node will only run if all of the parent nodes have met the criteria to reach this node
  --identifier TEXT     An identifier for this node that is unique within its workflow. It is copied to workflow job nodes corresponding to this node.
```

### Expected results

```awx workflow_job_template_nodes create``` command has `success_nodes, failure_nodes and always_nodes` arguments which allows compose workflow graph.

### Actual results

success_nodes, failure_nodes and always_nodes` arguments are not available. There is not known way how to compose workflow of template_jobs using awxkit cli. 

### Additional information

_No response_
user: krejcmat
labels: needs_refinement: Apply to items in 'Backlog' that need refinement.
issue_12460: state: open
title: RFE: Add support in advanced search/filter in Jobs page by "limit" field with regexp
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

Hello,
it should be really useful to add support in Jobs page to search/filter jobs by `limit` field with regexp.

Scenario: Users can run a Job Template with `limit` field filled by a long list of multiple hosts (comma-separated) and want to retrieve a Job by searching only with a subset/substring of that.

Kind Regards,
Claudio

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other
user: kladiv
issue_12458: state: open
title: [TaskManager] WorkflowManager research/refactor
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

In the WorkflowManager we have some specific research and refactor items

- [x] Only build WorkflowDAG once for and loop once over the workflows
- [x] remove transistion of pending workflows to running workflows from TaskManager, do in WorkflowManager
- [x] Research ways to bail out if we are nearing our 5 min time limit
- [x] Research why/if we need to track allow_simultaneous blocking in both the dependency graph and in WorkflowManager. Seems like we should be able to drop one.
- [ ] Trigger workflowmanager schedule after a workflow job node completes
   - [ ] final_run_hook
     - [ ] at the end of task manager, only schedule workflowmanager if there are currently running workflow jobs without workflow job nodes in running, to handle cases where workflow job nodes were reaped, and thus final run hook didn't run.
     - [ ] get_workflow_job() and pass this id to .schedule
   - [ ] modify schedule to pass specific workflow job id to get_tasks to only consider that task
   - [ ] modify global lock to be specific to that workflow job
   - [x] get rid of the scheduled workflow manager task
   - [x] move timing out approval nodes out of workflow manager and only collect expired nodes https://github.com/ansible/awx/pull/12502/files

   - [ ] in task manager, when changing from pending to running for workflow job, start workflowmanager for that workflow job
     - [ ] to prevent specific workflowmanagers from conflicting with generalized workflowmanager, can use DB lock specific to that workflow job. So general WF manager should just skip if it cannot get the specific lock. The specific workflowmanager just bails if it cannot grab the lock. 
- [ ] Research if in WorkflowDAG if its better to do 3 queries to the workflow nodes or 1 query and filter in python using the django toolbar

### crazy idea section
- [ ] in final_run_hook, don't schedule workflow manager, instead just get a lock specific to that workflow job, and then execute the spawn_workflow_jobs() method in the same process that would normally run in a separate process
   -  the prevents situation where many workflowmanager are spawned at once
   - `WorkflowManager.spawn_workflow_graph_jobs(instance.get_workflow_job())`

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other
user: kdelee
issue_12455: state: open
title: Expose a new special variable awx_instance_group
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

Expose a new special variable `awx_instance_group`. Its value is the name of the Instance Group used to run the play.

Use-case: we need to set different environment variables (http_proxy) for the same play, depending on the Instance Group.

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other
user: amolari
issue_12449: state: open
title: Be able to set Extra Environment Variables at Instance Groups level
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

We started to use Instance Groups to run job in different region (aws EU, Alicloud china).
We set http proxy setting as environnement variable in setting / Jobs settings. Environnement variable set as this level is for all Jobs, inventory update.
We have different proxy per region, so each instance group will need specific proxy.
Today, user needs to unset or overwrite this environnement variable in their playbook running on instance group other then the default one.
Should be a good idea to be able to set environment variable at instance group level for this kind of purpose.


### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other
user: mick1627
issue_12444: state: open
title: Role and collection cache not working right after cleanup jobs
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

We had a behavior change recently due to cleanup_jobs system job performance enhancements. This management job will delete the last update ran for a project, whereas it didn't before.

This unexpectedly messes up with our system for caching roles from `requirements.yml` inside of a project. We key off the `last_job_id` which can now become `None`. The string "None" will then become the key for the cache.

The undesired effects are that (1) it won't use the prior (perfectly valid) cache from before running cleanup_jobs, and actually writes a lot to this effect, and (2) this can create a situation where it compares cache keys None-to-None and uses a stale cache which it shouldn't.

### AWX version

devel

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

N/A

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

Create a project with Ansible role requirements.

Run the cleanup job management job with 0 days.

Update the project again.

### Expected results

Subsequent updates use cache.

### Actual results

Valid cache is not used because project forgets the last update details.

### Additional information

You can see the cache id definition here.

https://github.com/ansible/awx/blob/78d3d6dc944b5213a0cf8013f2f9b67fceb628de/awx/main/models/projects.py#L438-L439

Since `last_job` is a ForeignKey, this is nulled with the records are deleted by the cleanup_jobs.

Ping @fosterseth 
user: AlanCoding
issue_12439: state: open
title: add the possibility to relaunch a failed job on the failed task
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

When a job failed we want to relaunch  the job at the failed task on the host failed

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other
user: blaisemichel
issue_12438: state: open
title: Add "nodes" to "Relaunch on" when relaunching jobs after failure - users think it relates to failed tasks and not nodes
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

When a job has run and failed, you sometimes want to click the little rocket to relaunch your job. Having taught many, many classes on ansible and introduced the tool to many, many clients they *always* assume 'all' and 'failed' refers to _failed tasks_ and not _failed nodes_. 

It might be totally obvious to those of us who have used the tool that ansible works on the idempotence principle on each _host_ the play applies to. In my experience, _every_ new user I have shown this to assumes this refers to tasks!

It would be a quite a simple GUI change to have the drop down when you click the relaunch rocket say 'all nodes' and 'failed nodes' instead, I think, and quite helpful for newbies.

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other
user: AndreasDavour
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_12433: state: open
title: disable no_log globally during job creation and make the template filterable for that no_log setting
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

When disabling no_log for debugging reason, it is difficult to ensure that there are no job-logs with sensitive information.
It would make more sense if (with available permission) a user can set "disable no_log" globally while creating a job (launching a template)
That job should be marked as "with disabled no_log" so it can be easily found and deleted and it is only readable by users with the specific permission. even a color highlight of that job would be possible.

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other
user: marcoatenway
issue_12430: state: open
title: ansible_python_interpreter issue since upgrading to 21.2.0
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Using version 19.4.0 and setting ansible_python_interpreter in the Inventory to "{{ ansible_playbook_python }}".

`ansible_python_interpreter : "{{ ansible_playbook_python }}"`

Since upgrading ansible_python_interpreter module errors occur. 

### AWX version

21.2.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

quay.io/ansible/awx-ee:latest

### Operating system

Centos

### Web browser

_No response_

### Steps to reproduce

```
- name: "get virtual machine facts by tag {{ tag }}"
  azure.azcollection.azure_rm_virtualmachine_info:
    tenant: '{{ tenant }}'
    client_id: '{{ client_id }}'
    secret: '{{ secret }}'
    subscription_id: '{{ subscription_id }}'
    resource_group: "{{ resource_group }}"
    tags:
      - type:{{ tag }}
  register: virtualmachine_facts
  delegate_to: localhost
```

### Expected results

No errors

### Actual results

```
"Failed to import the required Python library (ansible[azure] (azure >= 2.0.0)) on automation-job-3489-5bgrl's Python /usr/bin/python3. Please read the module documentation and install it in the appropriate location. If the required library is installed, but Ansible is using the wrong Python interpreter, please consult the documentation on ansible_python_interpreter"
```

### Additional information

Attempting to use execution environment quay.io/ansible/awx-ee:0.6.0 also results in an error: 

`This can be caused if the version of ansible-runner in your execution environment is out of date.`
user: nicolaibaralmueller
issue_12416: state: open
title: jobs are poorly distributed between controllers
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Hi 
With a large number of jobs, we can see here that the jobs are badly distributed
Its causes degraded performance because the node which contains half of the jobs saturates
jobs controlled by this node flow slowly

we also notice that the number of jobs exceeds the number of authorized forks

<img width="1175" alt="image" src="https://user-images.githubusercontent.com/27526373/175280560-590f343a-868d-441b-9881-c6f1e0b04a31.png">


### AWX version

20.1.0

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.9

### Operating system

redhat

### Web browser

Chrome

### Steps to reproduce

send 100 job with override scm branch

### Expected results

good distributed job

### Actual results

bad distributed job

### Additional information

_No response_
user: chris93111
issue_12409: state: open
title: Tags are not being assigned to the hosts in the inventories
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx-operator/issues) for duplicates.
- [X] I understand that the AWX Operator is open source software provided for free and that I might not receive a timely response.

### Bug Summary

We have upgraded the AWX operator to the latest version, when we try to sync our inventory same as the old ones, the inventory nodes are getting succeeded but the respective tags are not being assigned to those nodes.

Those tags are required for segregation of our nodes to perform various activities such as patching only on those nodes with specific tags and these tags are mandatory. Can someone help on this?

### AWX Operator version

0.22.0

### AWX version

21.1.0

### Kubernetes platform

openshift

### Kubernetes/Platform version

4.8.41

### Modifications

no

### Steps to reproduce

To deploy the operator:
1. Create the PVC
2. create the routes
3. Update the YAML files with the respective namespaces and configurations as per the environment

Create inventory
Create required credential for Synching the inventory from Vcentre
Then source in the inventory & run sync

### Expected results

Inventory is populated from VMWare virtual center and grouped according to tags assigned to vm’s within virtual center.

### Actual results

Inventory sync completes but populates vm’s based of OS version and flavor

### Additional information

In our existing Docker AWX instance we had to modify a plugin file to get ‘tags’ working

### Operator Logs

_No response_
user: kerukulla
labels: needs_refinement: Apply to items in 'Backlog' that need refinement.
issue_12405: state: open
title: Add a awx  --conf.custom_ca_cert  option to specify the ca cert
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary

When using the CLI, add to awx --conf.custom_ca_cert  option to specify the ca cert.

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [X] CLI
- [ ] Other
user: tuxonfire
issue_12401: state: open
title: tower in tower setting for start_task_limit
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Feature Summary
Make a new start_task_limit tower in tower setting

We can build QA testing around this if it is a tower in tower setting, and we need QA testing because this feature could have serious downsides if not implemented correctly

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other
user: fosterseth
issue_12400: state: open
title: awx intermittently reports non-complete playbook as failed and stops outputing log
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Shortly after starting a playbook using the AWX UI it is marked as failed. log output is incomplete and the job is still running in the background.

### AWX version

21.0.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

This has been happening randomly for the last few versions of AWX.

### Expected results

Playbook should be marked as successful and have full log output in AWX.

### Actual results

Log output incomplete or empty and playbook is marked as failed.

### Additional information

2022-06-09 17:55:18,024 ERROR    [7fffc6e497e7415c90df446bd2ff7720] awx.main.dispatch Worker failed to run task awx.main.tasks.jobs.RunJob(*[21317], **{}
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 587, in run
    self.final_run_hook(self.instance, status, private_data_dir, fact_modification_times)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 962, in final_run_hook
    super(RunJob, self).final_run_hook(job, status, private_data_dir, fact_modification_times)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 376, in final_run_hook
    instance.log_lifecycle("finalize_run")
AttributeError: 'NoneType' object has no attribute 'log_lifecycle'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/task.py", line 90, in perform_work
    result = self.run_callable(body)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/task.py", line 65, in run_callable
    return _call(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 93, in _wrapped
    return f(self, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 589, in run
    logger.exception('{} Final run hook errored.'.format(self.instance.log_format))
AttributeError: 'NoneType' object has no attribute 'log_format'
2022-06-09 17:55:18,028 DEBUG    [7fffc6e497e7415c90df446bd2ff7720] awx.main.dispatch task 93552643-cd13-40d3-a0d6-688f6b4e06c1 starting awx.main.tasks.system.handle_work_error(*['93552643-cd13-40d3-a0d6-688f6b4e06c1'])
2022-06-09 17:55:18,029 DEBUG    [7fffc6e497e7415c90df446bd2ff7720] awx.main.tasks.system Executing error task id 93552643-cd13-40d3-a0d6-688f6b4e06c1, subtasks: [{'type': 'job', 'id': 21317}]
2022-06-09 17:55:18,031 ERROR    [7fffc6e497e7415c90df446bd2ff7720] awx.main.dispatch Worker failed to run task awx.main.tasks.system.handle_work_error(*['93552643-cd13-40d3-a0d6-688f6b4e06c1'], **{'subtasks': [{'type': 'job', 'id': 21317}]}
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 587, in run
    self.final_run_hook(self.instance, status, private_data_dir, fact_modification_times)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 962, in final_run_hook
    super(RunJob, self).final_run_hook(job, status, private_data_dir, fact_modification_times)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 376, in final_run_hook
    instance.log_lifecycle("finalize_run")
AttributeError: 'NoneType' object has no attribute 'log_lifecycle'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/task.py", line 90, in perform_work
    result = self.run_callable(body)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/task.py", line 65, in run_callable
    return _call(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 93, in _wrapped
    return f(self, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 589, in run
    logger.exception('{} Final run hook errored.'.format(self.instance.log_format))
AttributeError: 'NoneType' object has no attribute 'log_format'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/base/base.py", line 237, in _cursor
    return self._prepare_cursor(self.create_cursor(name))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner
    return func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/postgresql/base.py", line 236, in create_cursor
    cursor = self.connection.cursor()
psycopg2.InterfaceError: connection already closed
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/task.py", line 90, in perform_work
    result = self.run_callable(body)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/task.py", line 65, in run_callable
    return _call(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/system.py", line 685, in handle_work_error
    instance = UnifiedJob.get_instance_by_type(each_task['type'], each_task['id'])
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/models/unified_jobs.py", line 495, in get_instance_by_type
    return model.objects.get(id=job_id)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/query.py", line 431, in get
    num = len(clone)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/query.py", line 262, in __len__
    self._fetch_all()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/query.py", line 1324, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/polymorphic/query.py", line 58, in _polymorphic_iterator
    o = next(base_iter)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/query.py", line 51, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/sql/compiler.py", line 1173, in execute_sql
    cursor = self.connection.cursor()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner
    return func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/base/base.py", line 259, in cursor
    return self._cursor()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/base/base.py", line 237, in _cursor
    return self._prepare_cursor(self.create_cursor(name))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/base/base.py", line 237, in _cursor
    return self._prepare_cursor(self.create_cursor(name))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner
    return func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/postgresql/base.py", line 236, in create_cursor
    cursor = self.connection.cursor()
django.db.utils.InterfaceError: connection already closed
2022-06-09 17:55:18,034 DEBUG    [7fffc6e497e7415c90df446bd2ff7720] awx.main.dispatch task 93552643-cd13-40d3-a0d6-688f6b4e06c1 starting awx.main.tasks.system.handle_work_success(*[])
2022-06-09 17:55:18,037 ERROR    [7fffc6e497e7415c90df446bd2ff7720] awx.main.dispatch Worker failed to run task awx.main.tasks.system.handle_work_success(*[], **{'task_actual': {'type': 'job', 'id': 21317}}
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/base/base.py", line 237, in _cursor
    return self._prepare_cursor(self.create_cursor(name))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner
    return func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/postgresql/base.py", line 236, in create_cursor
    cursor = self.connection.cursor()
psycopg2.InterfaceError: connection already closed
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/task.py", line 90, in perform_work
    result = self.run_callable(body)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/task.py", line 65, in run_callable
    return _call(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/system.py", line 666, in handle_work_success
    instance = UnifiedJob.get_instance_by_type(task_actual['type'], task_actual['id'])
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/models/unified_jobs.py", line 495, in get_instance_by_type
    return model.objects.get(id=job_id)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/query.py", line 431, in get
    num = len(clone)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/query.py", line 262, in __len__
    self._fetch_all()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/query.py", line 1324, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/polymorphic/query.py", line 58, in _polymorphic_iterator
    o = next(base_iter)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/query.py", line 51, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/models/sql/compiler.py", line 1173, in execute_sql
    cursor = self.connection.cursor()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner
    return func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/base/base.py", line 259, in cursor
    return self._cursor()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/base/base.py", line 237, in _cursor
    return self._prepare_cursor(self.create_cursor(name))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/base/base.py", line 237, in _cursor
    return self._prepare_cursor(self.create_cursor(name))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner
    return func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/postgresql/base.py", line 236, in create_cursor
    cursor = self.connection.cursor()
django.db.utils.InterfaceError: connection already closed
2022-06-09 17:55:18,075 DEBUG    [42e499902d394546855280338c664d6d] awx.main.dispatch task 9ee34e0c-b973-457a-870e-0664ef46542d starting awx.main.scheduler.tasks.run_task_manager(*[])
2022-06-09 17:55:18,077 DEBUG    [42e499902d394546855280338c664d6d] awx.main.scheduler Running task manager.
2022-06-09 17:55:18,105 DEBUG    [42e499902d394546855280338c664d6d] awx.main.scheduler Starting Scheduler
2022-06-09 17:55:18,485 DEBUG    [42e499902d394546855280338c664d6d] awx.main.scheduler Finishing Scheduler
2022-06-09 17:55:19,065 DEBUG    [-] awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(6)
2022-06-09 17:55:19,065 DEBUG    [-] awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(2)
2022-06-09 17:55:19,065 DEBUG    [-] awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(6)
2022-06-09 17:55:19,065 DEBUG    [-] awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(2)
2022-06-09 17:55:28,058 DEBUG    [abc4094c5fe74a9b9adfe1e5d3f8f819] awx.main.dispatch task fbd882e9-126b-4aeb-a874-23035b40ebb4 starting awx.main.tasks.system.awx_periodic_scheduler(*[])
2022-06-09 17:55:28,057 DEBUG    [abc4094c5fe74a9b9adfe1e5d3f8f819] awx.main.dispatch scaling down worker pid:101979
2022-06-09 17:55:28,061 DEBUG    [7fffc6e497e7415c90df446bd2ff7720] awx.main.dispatch worker exiting gracefully pid:101979
2022-06-09 17:55:28,090 DEBUG    [abc4094c5fe74a9b9adfe1e5d3f8f819] awx.main.tasks.system Starting periodic scheduler
2022-06-09 17:55:28,097 DEBUG    [abc4094c5fe74a9b9adfe1e5d3f8f819] awx.main.tasks.system Last scheduler run was: 2022-06-09 17:54:58.081189+00:00
2022-06-09 17:55:28,570 ERROR    [abc4094c5fe74a9b9adfe1e5d3f8f819] awx.main.dispatch job 21317 (failed) is no longer running; reaping
user: tree4125
issue_12396: state: open
title: Job gets stuck randomly on a random task.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

I did a clean install of awx (21.1.0) 2 weeks ago via operator on a digital ocean VM 4cpu, 8g ram.

Install went fine, created the templates, inventories manually from an awx install that is still in production (13). Sync project files via git and I'm able to run jobs. I'm hitting this particular problem that happens all the time, so much so I don't trust it can complete the job and may require multiple attempts.

I have many templates, but three of them are on a daily schedule and the issue doesn't happen on just these and it certainly happens if the job runs from schedule or manually. The jobs seem to randomly get stuck, might be on the same task, maybe on a different task. Maybe the job completes or maybe it gets stuck on a pass on the inventory. These jobs run 3 machines at a time, when I could have say 20 in the inventory. It's common that the first few passes there are no issues but it can get stuck on a machine on a task. It seems random but there is a good chance the job will get stuck.

If I let the job run, it's in a waiting state for several hours and eventually cancels itself. The task doesn't seem to be anything interesting. It seems the job might take longer to complete compared to the existing awx deployment. So I'm not sure if there is a timeout problem or if awx is waiting for a response but never comes. All of these machines are remote yet I've not had this problem on the v13 deployment.

I'm not sure what to look for so I'm just raising the issue to get direction.

### AWX version

21.1.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

Ubuntu 22.04

### Web browser

_No response_

### Steps to reproduce

N/A

### Expected results

Job completes without pausing.

### Actual results

Job gets stuck on a random task but it's not consistent. Could be another task in the job or it may complete the job just fine.

### Additional information

_No response_
user: d3al
issue_12394: state: open
title: aws_ec2 plugin in AWX Unable to assume IAM role
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

While using the aws_ec2 plugin with AWX the assume role does not work as expected, but it works from a control machine command line with minimal configuration

### AWX version

21.0.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

core 2.12.5.post0

### Operating system

rocky 8

### Web browser

Safari

### Steps to reproduce

the AWX is configured automatically by means of passing a variable file to an Ansible playbook that calls the API of AWX.

the inventory section of code looks like this:

```
    source_vars:
      compose:
        ansible_host: private_ip_address
        ec2_account_id: owner_id
        ec2_ami_launch_index: ami_launch_index | string
        ec2_architecture: architecture
        ec2_block_devices: dict(block_device_mappings | map(attribute='device_name') | list
          | zip(block_device_mappings | map(attribute='ebs.volume_id') | list))
        ec2_client_token: client_token
        ec2_dns_name: public_dns_name
        ec2_ebs_optimized: ebs_optimized
        ec2_eventsSet: events | default("")
        ec2_group_name: placement.group_name
        ec2_hypervisor: hypervisor
        ec2_id: instance_id
        ec2_image_id: image_id
        ec2_instance_profile: iam_instance_profile | default("")
        ec2_instance_type: instance_type
        ec2_ip_address: public_ip_address
        ec2_kernel: kernel_id | default("")
        ec2_key_name: key_name
        ec2_launch_time: launch_time | regex_replace(" ", "T") | regex_replace("(\+)(\d\d):(\d)(\d)$",
          ".\g<2>\g<3>Z")
        ec2_monitored: monitoring.state in ['enabled', 'pending']
        ec2_monitoring_state: monitoring.state
        ec2_persistent: persistent | default(false)
        ec2_placement: placement.availability_zone
        ec2_platform: platform | default("")
        ec2_private_dns_name: private_dns_name
        ec2_private_ip_address: private_ip_address
        ec2_public_dns_name: public_dns_name
        ec2_ramdisk: ramdisk_id | default("")
        ec2_reason: state_transition_reason
        ec2_region: placement.region
        ec2_requester_id: requester_id | default("")
        ec2_root_device_name: root_device_name
        ec2_root_device_type: root_device_type
        ec2_security_group_ids: security_groups | map(attribute='group_id') | list |  join(',')
        ec2_security_group_names: security_groups | map(attribute='group_name') | list |  join(',')
        ec2_sourceDestCheck: source_dest_check | default(false) | lower | string
        ec2_spot_instance_request_id: spot_instance_request_id | default("")
        ec2_state: state.name
        ec2_state_code: state.code
        ec2_state_reason: state_reason.message if state_reason is defined else ""
        ec2_subnet_id: subnet_id | default("")
        ec2_tag_Name: tags.Name
        ec2_virtualization_type: virtualization_type
        ec2_vpc_id: vpc_id | default("")
      filters: {}
      groups:
        ec2: true
      hostnames:
      - network-interface.addresses.private-ip-address
      - network-interface.addresses.association.public-ip
      - dns-name
      - private-dns-name
      keyed_groups:
      - key: dict(tags.keys() | map("regex_replace", "[^A-Za-z0-9\_]", "_") | list | zip(tags.values()
          | map("regex_replace", "[^A-Za-z0-9\_]", "_") | list))
        parent_group: tags
        prefix: tag
      - key: tags.keys() | map("regex_replace", "[^A-Za-z0-9\_]", "_") | list
        parent_group: tags
        prefix: tag
      plugin: amazon.aws.aws_ec2
      iam_role_arn: arn:aws:iam::<someid>:role/OrganizationAccountAccessRole
      use_contrib_script_compatible_sanitization: true
```

### Expected results

the inventory of the assumed account is retrieved

### Actual results

```
No config file found; using defaults
redirecting (type: inventory) ansible.builtin.aws_ec2 to amazon.aws.aws_ec2
[WARNING]:  * Failed to parse /runner/inventory/aws_ec2.yml with auto plugin:
Unable to assume IAM role: An error occurred (AccessDenied) when calling the
AssumeRole operation: User: arn:aws:iam::<someid>:user/someuser is
not authorized to perform: sts:AssumeRole on resource:
arn:aws:iam::<someid<:role/OrganizationAccountAccessRole
````

### Additional information

the same block of code when used in an inventory file and called like this:

````
ansible-inventory -i inventory.aws_ec2.yml --list
````

produces the listing of the hosts on the assumed account inventory.

Any hint appreciated.
user: mihai-satmarean
issue_12374: state: open
title: AWX_TASK_ENV in settings.py causes "Something went wrong" on the "Edit" page in "Job settings"
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

After adding `AWX_TASK_ENV` to `/etc/tower/settings.py` using `extra_settings` via AWX Operator, the error "Something went wrong"  appears when clicking `Edit` button in `Job settings` page.

I understand that [the `AWX_TASK_ENV` setting in `/etc/tower/settings.py` and the settings in the UI and API seem to be exclusive](https://access.redhat.com/solutions/4008711), so I'm not able to make changes using the UI once I've added `AWX_TASK_ENV` to `/etc/tower/settings.py`. 

However, since the `Edit` page also contains settings other than `AWX_TASK_ENV`, it seems unnatural that the presence of `AWX_TASK_ENV` in `settings.py` would disable editing of all other items in `Job settings`.

If I deploy AWX without `extra_settings` by AWX Operator, the `Edit` page will work fine and I can change the settings.

### AWX version

21.1.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

N/A

### Operating system

CentOS Stream 8

### Web browser

Chrome

### Steps to reproduce

Deploy AWX by AWX Operator using following YAML file including `AWX_TASK_ENV` under `extra_settings`.

```yaml
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx-demo
spec:
  service_type: nodeport
  extra_settings:
    - setting: AWX_TASK_ENV['HTTP_PROXY']
      value: "'http://proxy.example.com:3128'"
    - setting: AWX_TASK_ENV['HTTPS_PROXY']
      value: "'http://proxy.example.com:3128'"
    - setting: AWX_TASK_ENV['NO_PROXY']
      value: "'127.0.0.1,localhost,.example.com'"
```

Ensure `AWX_TASK_ENV` has been added to `/etc/tower/settings.py` correctly.

```bash
$ kubectl -n awx get cm awx-demo-awx-configmap -o jsonpath='{.data.settings}' | grep AWX_TASK_ENV
AWX_TASK_ENV['HTTP_PROXY'] = 'http://proxy.example.com:3128'
AWX_TASK_ENV['HTTPS_PROXY'] = 'http://proxy.example.com:3128'
AWX_TASK_ENV['NO_PROXY'] = '127.0.0.1,localhost,.example.com'

$ kubectl -n awx exec -it deployment/awx-demo -c awx-demo-web -- cat /etc/tower/settings.py | grep AWX_TASK_ENV
AWX_TASK_ENV['HTTP_PROXY'] = 'http://proxy.example.com:3128'
AWX_TASK_ENV['HTTPS_PROXY'] = 'http://proxy.example.com:3128'
AWX_TASK_ENV['NO_PROXY'] = '127.0.0.1,localhost,.example.com'
```

Ensure the `AWX_TASK_ENV` is activated in AWX UI on `Job settings` page.

![image](https://user-images.githubusercontent.com/2920259/173620785-a68f752a-55f5-4a98-9ed3-73a5572f3071.png)

Press the `Edit` button and ensure we can't edit any settings since we got the `Something went wrong` error.

![image](https://user-images.githubusercontent.com/2920259/173620941-743f227c-e23e-4b78-888e-9c99998cbc42.png)

The error includes followng details.

```text
TypeError: Cannot read properties of undefined (reading 'default')
    at l2 (http://awx.example.com:30080/static/js/main.c9f2a36c.js:2:2999625)
    at oo (http://awx.example.com:30080/static/js/main.c9f2a36c.js:2:1196117)
    at Ks (http://awx.example.com:30080/static/js/main.c9f2a36c.js:2:1248417)
    at Ol (http://awx.example.com:30080/static/js/main.c9f2a36c.js:2:1235658)
    at Tl (http://awx.example.com:30080/static/js/main.c9f2a36c.js:2:1235586)
    at El (http://awx.example.com:30080/static/js/main.c9f2a36c.js:2:1235449)
    at yl (http://awx.example.com:30080/static/js/main.c9f2a36c.js:2:1232415)
    at http://awx.example.com:30080/static/js/main.c9f2a36c.js:2:1181909
    at t.unstable_runWithPriority (http://awx.example.com:30080/static/js/main.c9f2a36c.js:2:1407964)
    at Gi (http://awx.example.com:30080/static/js/main.c9f2a36c.js:2:1181686)
```

### Expected results

The error `Something went wrong` errors do not appear, and at least everything except `Extra Environment Variables` can be modified as expected.

### Actual results

As shown in above, we got error `Something went wrong` on the `Edit` page.

### Additional information

It seems that this issue is very similar with #11891 and #11896 and I guess that `AWX_TASK_ENV` is being treated as read-only due to the order in which settings are read from the file by some reason.

Frankly, it seems difficult to guarantee that all settings that can be technically added to `settings.py` using AWX Operator will work perfectly without any side effects.
user: kurokobo
issue_12372: state: open
title: pg_dump causes AWX to loose jobs
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Our AWX instance uses an external database with approx. 200 GB of size. The backup is done via pg_dump. Each run takes between 1,5 and 2 hours.

While pg_dump is running, the jobs pile up in the pending state and once the pg_dump process has finished AWX starts to process the jobs. But some jobs seem to get lost. Here's an example:

```
https://awx.example.com/api/v2/jobs/923725/
{
    "id": 923725,
    "type": "job",
    ...
    "job_explanation": "Previous Task Failed: {\"job_type\": \"project_update\", \"job_name\": \"a8n/plays/a8n\", \"job_id\": \"923948\"}",
    "result_traceback": "Traceback (most recent call last):\n  File \"/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py\", line 426, in run\n    self.pre_run_hook(self.instance, private_data_dir)\n  File \"/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py\", line 922, in pre_run_hook\n    sync_task.run(local_project_sync.id)\n  File \"/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py\", line 92, in _wrapped\n    return f(self, *args, **kwargs)\n  File \"/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py\", line 588, in run\n    raise AwxTaskError.TaskError(self.instance, rc)\nException: project_update 923948 (error) encountered an error (rc=None), please see task stdout for details.\n",
    ...
}
```
But the previous task doesn't even exist:
```
https://awx.example.com/api/v2/jobs/923948/
{
    "detail": "Not found."
}
```

Another project update job is marked as canceled in the UI, but the job id does also not exist.

All these jobs were started by schedules while pg_dump was doing the backup.

The AWX log shows the following:
```
# 2022-06-13 22:59:40 pg_dump starts backup
# between 01:00 and 01:09 approx. 118 project and inventory update are started
2022-06-14 01:05:18,083 INFO     [5129f6614e1f432eb672713d97beec4b] awx.main.tasks.jobs project_update 923938 (running) spent 23.130964756011963 waiting to 
acquire lock for local source tree for path /var/lib/awx/projects/_166__a8nawxinventory_scripts.lock.
2022-06-14 01:05:18,086 DEBUG    [5129f6614e1f432eb672713d97beec4b] awx.analytics.job_lifecycle projectupdate-923938 preparing playbook
2022-06-14 01:05:18,111 DEBUG    [5129f6614e1f432eb672713d97beec4b] awx.analytics.job_lifecycle projectupdate-923938 running playbook
2022-06-14 01:05:18,173 DEBUG    [5129f6614e1f432eb672713d97beec4b] awx.analytics.job_lifecycle projectupdate-923938 work unit id received
2022-06-14 01:05:18,195 DEBUG    [5129f6614e1f432eb672713d97beec4b] awx.analytics.job_lifecycle projectupdate-923938 work unit id assigned
2022-06-14 01:05:18,211 DEBUG    [-] awx.main.tasks.utils Database error updating ProjectUpdate, retrying in 5 seconds (retry #1): FATAL:  remaining connection slots are reserved for non-replication superuser connections

2022-06-14 01:05:18,274 DEBUG    [-] awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(7)
2022-06-14 01:05:18,274 DEBUG    [-] awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(5)
2022-06-14 01:05:18,274 DEBUG    [-] awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(7)
2022-06-14 01:05:18,274 DEBUG    [-] awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(5)
2022-06-14 01:05:18,293 ERROR    [-] awx.main.commands.run_callback_receiver Database Error Saving Job Event
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/base/base.py", line 219, in ensure_connection
    self.connect()
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner
    return func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/base/base.py", line 200, in connect
    self.connection = self.get_new_connection(conn_params)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/utils/asyncio.py", line 33, in inner
    return func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/django/db/backends/postgresql/base.py", line 187, in get_new_connection
    connection = Database.connect(**conn_params)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/psycopg2/__init__.py", line 126, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: FATAL:  remaining connection slots are reserved for non-replication superuser connections
# 2022-06-14 02:14:59 pg_dump finished
```
 
So questions here are:
* Has something changed in the AWX code that requires an exclusive lock on the database? (As far as I know, does pg_dump use a shared lock that conflicts only with an exclusive lock.) Or have we just reached a tipping point.
* How can I calculate the needed connection slots based on the capacity of a node to work around this issue?
* Is there another recommendation on how to backup the database?

### AWX version

21.1.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [X] Other

### Installation method

docker development environment

### Modifications

yes

### Ansible version

2.11.7

### Operating system

Debian 11

### Web browser

Firefox

### Steps to reproduce

* Setup AWX with an external database
* Execute pg_dump to create a database dump
* Launch jobs while pg_dump is running

### Expected results

Jobs will not be canceled and jobs don't get lost.

### Actual results

Jobs will be canceled or jobs get lost.

### Additional information

_No response_
user: anxstj
issue_12371: state: open
title: lookup hashivault return test error when user is not admin 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Bug Summary

Hello 

When admin organization create credential with lookup hashivault, test is always fail with Something went wrong with the request to test this credential and metadata, set the admin role global to user fix the issue 

### AWX version

20.1.0

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs
- [ ] Collection
- [ ] CLI
- [ ] Other

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.9.9

### Operating system

redhat

### Web browser

Chrome

### Steps to reproduce

create credential with role admin organization, test lookup

### Expected results

test working

### Actual results

test fail 

### Additional information

_No response_
user: chris93111
issue_12357: state: open
title: Indicate when job output is not collapsible
body: Indicate to the user when a job output is not collapsible. This happens under several different circumstances, but we don't want it to appear collapsing is "broken" when it is intentionally disabled

##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

user: keithjgrant
issue_12343: state: open
title: job failed with zipfile.BadZipFile: File is not a zip file error from time to time
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

From time to time some jobs failed with the following error :

![image](https://user-images.githubusercontent.com/36628449/172598906-16f54530-92f3-4aa9-a46d-caf32e820c84.png)

The job has the ID 818890, here the logs os awx_task pod

```logs
2022-06-08 08:59:57,895 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.analytics.job_lifecycle job-818890 acknowledged
2022-06-08 08:59:57,998 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.main.scheduler Spawned project_update 818891 (pending) as dependency of job 818890 (pending)
2022-06-08 08:59:58,099 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.main.scheduler Spawned inventory_update 818892 (pending) as dependency of job 818890 (pending)
2022-06-08 08:59:58,252 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.analytics.job_lifecycle job-818890 blocked by projectupdate-818891
2022-06-08 09:00:02,114 DEBUG    [51e06205750f454dbfe891f2d1d42b36] awx.analytics.job_lifecycle job-818890 blocked by projectupdate-818891
2022-06-08 09:00:06,457 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.analytics.job_lifecycle job-818890 blocked by inventoryupdate-818892
2022-06-08 09:00:17,519 DEBUG    [caed80d3bec34e74a35bbf8ad76835e6] awx.analytics.job_lifecycle job-818890 blocked by inventoryupdate-818892
2022-06-08 09:00:20,532 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.analytics.job_lifecycle job-818890 controller node chosen
2022-06-08 09:00:20,542 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.analytics.job_lifecycle job-818890 waiting
2022-06-08 09:00:20,543 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.main.scheduler job 818890 (waiting) consumed 6 capacity units from default with prior total of 6
2022-06-08 09:00:20,658 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.main.dispatch task 83173b34-9278-46e2-83cf-f6bac77638c5 starting awx.main.tasks.RunJob(*[818890])
2022-06-08 09:00:20,944 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.analytics.job_lifecycle job-818890 pre run
2022-06-08 09:00:20,967 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.main.tasks Skipping project sync for job 818890 (running) because commit is locally available
2022-06-08 09:00:26,243 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.analytics.job_lifecycle job-818890 preparing playbook
2022-06-08 09:00:26,465 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.analytics.job_lifecycle job-818890 running playbook
2022-06-08 09:01:01,616 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.analytics.job_lifecycle job-818890 work unit id received
2022-06-08 09:01:01,729 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.analytics.job_lifecycle job-818890 work unit id assigned
2022-06-08 09:01:04,360 INFO     [bd8cd35bcf2346ab948cf830785023cc] awx.main.commands.run_callback_receiver Event processing is finished for Job 818890, sending notifications
2022-06-08 09:01:04,360 INFO     [bd8cd35bcf2346ab948cf830785023cc] awx.main.commands.run_callback_receiver Event processing is finished for Job 818890, sending notifications
2022-06-08 09:01:07,887 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.main.tasks job 818890 (running) finished running, producing 0 events.
2022-06-08 09:01:07,895 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.analytics.job_lifecycle job-818890 post run
2022-06-08 09:01:08,212 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.analytics.job_lifecycle job-818890 finalize run
2022-06-08 09:01:08,443 WARNING  [bd8cd35bcf2346ab948cf830785023cc] awx.main.dispatch job 818890 (error) encountered an error (rc=None), please see task stdout for details.
2022-06-08 09:01:08,446 DEBUG    [bd8cd35bcf2346ab948cf830785023cc] awx.main.tasks Executing error task id 83173b34-9278-46e2-83cf-f6bac77638c5, subtasks: [{'type': 'job', 'id': 818890}]
```


In the UI the last modified is 11:00:20 AM  (CET) or 9:00:20 UTC 
![image](https://user-images.githubusercontent.com/36628449/172599282-e4e11858-30aa-46d0-9314-0fb63a58bba2.png)

but we can see in the logs of awx_task that the job finished at 09:01:07. 

### AWX version

19.5.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs

### Installation method

kubernetes

### Modifications

yes

### Ansible version

2.12

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Launch job template in AWX, from time to time it failed with this zipfile.BadZipFile: File is not a zip file error

### Expected results

Job launch correctly

### Actual results

job failed with zipfile.BadZipFile error

### Additional information

WE use custom awx EE. 
user: mick1627
issue_12339: state: open
title: Command podman-run options customisable from job_template view
body: Hi,

At this very moment it is only possible to customize the podman-run command parameters via few global settings. It would be cool to be able to modify it via job template view. Some parameters like Environment vars, volumes mounted into the EEs (and others), would be cool if they could be set at the job template level. 

For example, in Kubernetes, the workloads (pods) that run across the execution plane depend on some sort of definition (in AAP the workloads are EEs running Ansible playbooks). Let's say for example a Kubernetes Deployment object, which is the state definition of a given workload (it has .spec.volumeMounts, .spec.securityContext, .spec,nodeSelector, and countless options). The definition stated in the Deployment object is translated into the workloads (pods), which is why, some pods may mount some volumes whereas others will not need to mount anything. This means that pods living in the same namespace can have different volume mounts, security contexts and so on, because they are managed by different Deployment objects.

In the case of the AAP, I think that the definition of the workloads are the Job Templates, and it would be cool if you could specify the behaviour of podman-run command from the Job Template view. 

An interesting use-case for this feature request:
In my case, for me to authenticate against the RHV hypervisor we do it via Kerberos (setting the `KRB5CCNAME=FILE:/tmp/file-tgt` as an env var for the ovirt_auth module). For me to make this work in AAP I need to make available the `file-tgt` file inside my execution environment (and can't do it other way because of some security requirements, my playbooks need to authenticate using this tgt file which expires every X hours).

Then my only option is to have this file in all of the execution nodes so I can mount it into the EEs:
![image](https://user-images.githubusercontent.com/38217290/172393218-52dd9a98-a1c5-44b3-8425-b835be72d638.png)

Honestly, I do not like to mount this file for all of my workloads (EEs) running across the execution plane, it does not make sense that this file needs to be mounted inside all the EEs for all of the job templates. As I see it, it would be really cool if you could specify podman-run options from the job_template view, so the file only gets mounted when I run my RHV job template. 

Let me know if this feature request makes sense. 

Kind regards and thank you!
user: jangel97
issue_12324: state: open
title: awx.awx collection: webhook_credential for workflows does not properly work
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

When using `awx.awx.workflow_job_template` module, the option `webhook_credential` causes the module to fail with the following error message:

```
The requested object could not be found at /api/v2/webhook_credential
```
which is not a valid endpoint.

I have found the offending line [here](https://github.com/ansible/awx/blob/d9f26a411ecd893725372b93b9698b017a40b739/awx_collection/plugins/modules/workflow_job_template.py#L739)



### AWX version

21.0.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs

### Installation method

docker on linux

### Modifications

no

### Ansible version

2.12.1

### Operating system

RHEL 8

### Web browser

_No response_

### Steps to reproduce

```
- hosts: controller
  connection: local
  tasks:
    - awx.awx.workflow_job_template:
        name: mywfjt
        webhook_service: gitlab
        webhook_credential: glpat
        state: present
```

### Expected results

Blank workflow with webhook cred created

### Actual results

```
"msg": "The requested object could not be found at /api/v2/webhook_credential/."
```

### Additional information

_No response_
user: Tompage1994
issue_12316: state: open
title: LDAPS with CA self signed not working
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

Like already seen on #12042 this bug is still present.
I've try also to add
spec:
  ...
  ldap_cacert_secret: <resourcename>-custom-certs
  bundle_cacert_secret: <resourcename>-custom-certs

but i've still that error :
`
2022-06-03 09:37:34,938 WARNING  [97f6a1627f5940128119dcef6ded0e92] django_auth_ldap Caught LDAPError while authenticating francesco.ferraro: SERVER_DOWN({'result': -1, 'desc': "Can't contact LDAP server", 'errno': 107, 'ctrls': [], 'info': 'Transport endpoint is not connected'})
`

### AWX version

21.1.0

### Select the relevant components

- [X] UI
- [x] API
- [ ] Docs

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

You can use LDAPS with a self signed certificate and try to login 

### Expected results

Login to awx and connect to ldaps

### Actual results

2022-06-03 09:37:34,938 WARNING  [97f6a1627f5940128119dcef6ded0e92] django_auth_ldap Caught LDAPError while authenticating francesco.ferraro: SERVER_DOWN({'result': -1, 'desc': "Can't contact LDAP server", 'errno': 107, 'ctrls': [], 'info': 'Transport endpoint is not connected'})

### Additional information

_No response_
user: fferraro87
labels: component:authentication: For issues related to authentication
issue_12297: state: open
title: Job error without log
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

Job finishs with status error without all complete log

### AWX version

21.0.0

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs

### Installation method

kubernetes

### Modifications

yes

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Run job

### Expected results

Finish job with error or success with complete log

### Actual results

Job with error status without complete log

### Additional information

Job Output

https://gist.github.com/ybucci/6db652089175de2feb8e1c28492d018f

Failed with error

![image](https://user-images.githubusercontent.com/52977138/171173318-2c356cbe-eb8e-4dcf-a172-f86e9355f370.png)
user: ybucci
labels: needs_refinement: Apply to items in 'Backlog' that need refinement.
issue_12296: state: open
title: The API should translate `job_explanation` field
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

There was an attempt to translate the `job_explanation` field:

https://github.com/ansible/awx/blob/d36befd9ce944a1dbb02c3067b4bf27554fcf351/awx/api/serializers.py#L873

However, we have reports that this is not working, ping @nixocio 

This issue is a followup from https://github.com/ansible/awx/issues/12129

This field is too complex to have the translation handled on the front-end. I know we do templating in various circumstances, so the API should translate it.

### AWX version

devel

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs

### Installation method

docker on linux

### Modifications

no

### Ansible version

devel

### Operating system

N/A

### Web browser

Chrome

### Steps to reproduce

Follow instructions for translations, we could use more info here.

### Expected results

When a job fails, the `job_explanation` field is translated

### Actual results

It is never translated.

### Additional information

_No response_
user: AlanCoding
labels: component:l10n: localization, translation, japanese, french
issue_12290: state: open
title: Missing timestamps in awx job log download
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

When I download job logs as a txt file from an AWX "Output" window the resulting file does not contain the timestamps for each task, as displayed in the UI.


### AWX version

17.1.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs

### Installation method

docker on linux

### Modifications

no

### Ansible version

2.9.18

### Operating system

RHEL 7.9

### Web browser

_No response_

### Steps to reproduce

Run any job
Click "Output" for the job
Observe timestamps in output
Click "Download Output"
Observe timestamps missing from file

### Expected results

Timestamps are present in the downloaded file, as shown in the user interface.

### Actual results

No timestamps are present.

### Additional information

_No response_
user: jmhbnz
labels: needs_refinement: Apply to items in 'Backlog' that need refinement.
issue_12286: state: open
title: community.vmware.vmware_guest_instant_clone module is not able to create a VM clone
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug Report


##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - Collection

##### SUMMARY
<!-- Briefly describe the problem. -->

community.vmware.vmware_guest_instant_clone module is not able to create a VM clone on vcenter.

##### ENVIRONMENT
* AWX version: 3.8.5.1
* Ansible Tower: 3.8.5.1
* Ansible Version:  2.9.27
* Python version = 3.6.8
* AWX install method: production environment
* AWX deployment target: physical vm
* Operating System: Red Hat Enterprise Linux release 8.2
* Web Browser: Google Chrome

##### STEPS TO REPRODUCE

<!-- For new features, show how the feature would be used. For bugs, please show
exactly how to reproduce the problem. Ideally, provide all steps and data needed
to recreate the bug from a new awx install. -->

- name: Instant Clone a VM
  community.vmware.vmware_guest_instant_clone:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: False
    folder: "{{ f0 }}"
    datastore: "{{ rw_datastore }}"
    datacenter: "{{ dc1 }}"
    host: "{{ esxi1 }}"
    name: "{{ Clone_vm }}"
    parent_vm: "{{ testvm_1 }}"
    resource_pool: "{{ test_resource_001 }}"
  register: vm_clone
  delegate_to: localhost

Used this above ansible playbook to clone a vm from a Vcenter, but it fails with the error  "msg": "Datacenter not found.", I have verified that the datacenter name is correct and I do have a Vmware snapshot playbook that works fine with the same datacenter name.

##### EXPECTED RESULTS

<!-- For bug reports, what did you expect to happen when running the steps
above? -->

For the playbook to run successfully and clone a vm

##### ACTUAL RESULTS

<!-- For bug reports, what actually happened? -->

The playbook above keeps failing whenever I execute it with the below error message:
"msg": "Datacenter not found.",

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: yashvanthkumar94
issue_12273: state: open
title: Control of free space on the hard disk on the AWX server
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

Hi everyone 
I used AWX for about 5 months, everything went well until an error popped up:
Error creating pod: container failed to start, ImagePullBackOff

For some reason, I immediately thought that for some reason the disk space had run out and I was not mistaken. After analyzing what was happening, I calculated that most of the data was in the folder
/var/lib/docker/volumes/minikube/_data/lib/docker/overlay2

I had to clean quay.io/ansible/awx-ee images in gcr.io/k8s-minikube/kicbase:v0.0.29 container.

Please tell me what kind of images they are, why they accumulate there and is it possible to automate the cleaning process using regular means?

### AWX version

19.5.1 

### Select the relevant components

- [ ] UI
- [x] API
- [x] Docs

### Installation method

minikube

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Firefox

### Steps to reproduce

You can try to fill the disk space up to 99% and try to execute any playbook

### Expected results

I did not know that the disk space was running out, I could not think that the AWX did not clear the cache with images

### Actual results

While running the playbook, it gave me an error:
Error creating pod: container failed to start, ImagePullBackOff

Then I realized that something was wrong and began to try to figure it out

### Additional information

_No response_
user: so121183gak
issue_12272: state: open
title: main_instance table not updating
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

Hello, I am running awx AWX 19.3.0 on EKS installed with the operator (awx-operator:0.13.0). When the awx pods die and the kubernetes cluster deploys another one, it doesn't update the `main_instance ` table with the new hostname despite having `CLUSTER_HOST_ID = socket.gethostname()`  in the settings file. Is there a config I can enable to allow the updating of the table? Is this resolved in a later release?

### AWX version

19.3.0

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

EKS kubernetes

### Web browser

_No response_

### Steps to reproduce

Uncertain on how to reproduce. It happens everytime the awx pods restart with a new name.

### Expected results

pod restarts and updates the main_instance table with the current name of the pod.

### Actual results

pod restarts and doesn't update main_instance table leaving jobs to remain in pending state.

### Additional information

_No response_
user: oompanic
issue_12266: state: open
title: Communication with receptor fails: could not load signing key file: unknown block type PRIVATE KEY
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

I've installed AWX in a test server using the instructions from https://github.com/ansible/awx/blob/devel/tools/docker-compose/README.md, and the application fails to communicate with the receptor instances — messages like these show up in the log and in the instance status page: `Remote error: ERROR: could not load signing key file: unknown block type PRIVATE KEY`.

### AWX version

21.0.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs

### Installation method

docker on linux

### Modifications

no

### Ansible version

2.12.5 (ansible-core) 5.8.0 (ansible)

### Operating system

Ubuntu 22.04

### Web browser

_No response_

### Steps to reproduce

What I did for the setup:
* Installed Docker (official installation steps for Ubuntu), Docker Compose and Ansible (`sudo pip install docker-compose ansible`)
* `git clone -b 21.0.0 https://github.com/ansible/awx.git; cd awx`
* `make docker-compose-build`
* `make docker-compose COMPOSE_UP_OPTS=-d`
* build the UI with `docker exec tools_awx_1 make clean-ui ui-devel`
* configured the user with `docker exec -ti tools_awx_1 awx-manage createsuperuser`

### Expected results

All instances should be healthy.

### Actual results

Both `receptor-1` and `receptor-2` have an error state in the Instances page: https://localhost:8043/#/instances

![image](https://user-images.githubusercontent.com/4432091/169754409-a0821764-d015-419b-add9-e80b56123d8f.png)


### Additional information

Log output from `docker logs tools_awx_1`:

```
2022-05-23 05:10:45,397 WARNING  [f6876450] awx.main.tasks.system Hop node receptor-hop, has rejoined the receptor mesh
2022-05-23 05:10:45,439 WARNING  [f6876450] awx.main.tasks.system Execution node attempting to rejoin as instance receptor-1.
2022-05-23 05:10:45,499 WARNING  [f6876450] awx.main.tasks.system Execution node attempting to rejoin as instance receptor-2.
ERROR 2022/05/23 05:10:45 could not load signing key file: unknown block type PRIVATE KEY
2022-05-23 05:10:45,633 INFO     [f6876450] awx.main.tasks.system Failed to find capacity of new or lost execution node receptor-1, errors:
Remote error: ERROR: could not load signing key file: unknown block type PRIVATE KEY
ERROR 2022/05/23 05:10:45 could not load signing key file: unknown block type PRIVATE KEY
2022-05-23 05:10:45,663 INFO     [f6876450] awx.main.tasks.system Failed to find capacity of new or lost execution node receptor-2, errors:
Remote error: ERROR: could not load signing key file: unknown block type PRIVATE KEY
```

user: edudobay
labels: needs_refinement: Apply to items in 'Backlog' that need refinement.
issue_12262: state: open
title: instance_group module is trying to change values without user setting them.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

awx.awx.instance_group module fails by trying to make "any" changes when AWX resides in Kubernetes cluster with AWX Operator. AWX API responds with message "default instance group policy_instance_percentage may not be changed from the initial value set by the installer." This happens because defaults for **policy_instance_percentage**  & **policy_instance_minimum** are set to "0" instead of None in this file: [instance_group.py](https://github.com/ansible/awx/blob/devel/awx_collection/plugins/modules/instance_group.py#L96..L97)


### AWX version

20.1.0

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Create a playbook by using instance_group module and try modify any configuration option, without using policy_instance_percentage or policy_instance_minimum.

Versions used:
AWX: 20.1.0
AWX Operator: 0.21.0
AWX.AWX collection: 20.1.0


### Expected results

Making changes to instance_group without changes or setting any value to **policy_instance_percentage** or **policy_instance_minimum** should work correctly. 

### Actual results

`"msg": "Unable to update instance_group default, see response", "response": {"json": {"policy_instance_percentage": ["default instance group policy_instance_percentage may not be changed from the initial value set by the installer."]}, "status_code": 400}}`

### Additional information

_No response_
user: marekzebro
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_12259: state: open
title: Animate in new jobs in jobs list
body: When a new job is added to the jobs list based on websocket activity, it would be nice to animate/expand the row into place rather than jump the rest of the list downward in an instant. This could prevent potential mis-clicks.
user: keithjgrant
issue_12256: state: open
title: Filter workflow job templates to avoid recursive call
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
When adding a workflow job template to a workflow - we are listing the current workflow itself - what leads to a recursive call error.

<img width="1792" alt="image" src="https://user-images.githubusercontent.com/9053044/169310352-419bcd35-b5c2-4e80-accf-f613d530d238.png">

<img width="1790" alt="image" src="https://user-images.githubusercontent.com/9053044/169310491-a81cea62-2871-43ba-aa91-606c6ceba916.png">

<img width="1487" alt="image" src="https://user-images.githubusercontent.com/9053044/169311359-b5a38fcf-e3d3-4912-9279-847bcecac803.png">

We could filter the workflow job templates listed on that Add Node modal to remove the current workflow from that list.

user: nixocio
issue_12254: state: open
title: Cannot set LDAP Group Type
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

Attempting to update LDAPGroupType via API (UI) fails. 

AWX is installed via the Operator install using Minikube. 
Upon installation all settings are correct in the UI when logged in via admin except the AUTH_LDAP_GROUP_TYPE is always set to 'MemberDNGroupType'. Upon trying to modify it in the UI, a number of errors are thrown in the awx-web container. 



### AWX version

21.0.0

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs

### Installation method

minikube

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. Install AWX 21.0.0 via awx-operator version 0.21.0 using the "Kustomize" method
2. Use the following (or similar) ldap config 
```
    - setting: AUTH_LDAP_SERVER_URI
      value: >-
        "ldap://dc.example.com:389"
    - setting: AUTH_LDAP_BIND_DN
      value: >-
        "CN=Administrator,CN=Users,DC=EXAMPLE,DC=COM"
    - setting: AUTH_LDAP_BIND_PASSWORD
      value: >-
        "supersecretpassword"
    - setting: AUTH_LDAP_USER_SEARCH
      value: 'LDAPSearch("OU=Users,DC=example,DC=com",ldap.SCOPE_SUBTREE,"(sAMAccountName=%(user)s)",)'
    - setting: AUTH_LDAP_GROUP_SEARCH
      value: 'LDAPSearch("DC=example,DC=com",ldap.SCOPE_SUBTREE,"(objectClass=group)",)'
    - setting: AUTH_LDAP_USER_ATTR_MAP
      value: {"first_name": "givenName","last_name": "sn","email": "mail"}
    - setting: AUTH_LDAP_REQUIRE_GROUP
      value: >-
        "CN=AWX,OU=Users,DC=EXAMPLE,DC=COM"
    - setting: AUTH_LDAP_GROUP_TYPE
      value: "ActiveDirectoryGroupType"
    - setting: AUTH_LDAP_GROUP_TYPE_PARAMS
      value: { "name_attr": "cn" }
```
3. Login Using Admin credentials
4. Go to `/api/v2/settings/ldap/` and attempt to use a PATCH request to update "AUTH_LDAP_GROUP_TYPE" to "ActiveDirectoryGroupType"



### Expected results

Setting changes, no errors in log output.

### Actual results

Setting doesn't change. Get following errors in log output. 
Should see errors in the logs similar to these:
```
2022-05-18 22:02:52,081 WARNING  [1b70c48eb19d4ec79ef1300c1e340105] awx.conf.registry Unable to retrieve default value for setting "AUTH_LDAP_GROUP_TYPE".
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/conf/registry.py", line 153, in get_setting_field
    field_instance.default = original_field_instance.to_representation(self.settings._awx_conf_settings._get_default(setting))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/sso/fields.py", line 440, in to_representation
    self.fail('type_error', input_type=type(value))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/fields.py", line 641, in fail
    raise ValidationError(message_string, code=key)
rest_framework.exceptions.ValidationError: [ErrorDetail(string="Expected an instance of LDAPGroupType but got <class 'str'> instead.", code='type_error')]
2022-05-18 22:02:52,083 WARNING  [1b70c48eb19d4ec79ef1300c1e340105] awx.conf.registry Unable to retrieve default value for setting "AUTH_LDAP_GROUP_TYPE".
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/conf/registry.py", line 153, in get_setting_field
    field_instance.default = original_field_instance.to_representation(self.settings._awx_conf_settings._get_default(setting))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/sso/fields.py", line 440, in to_representation
    self.fail('type_error', input_type=type(value))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/fields.py", line 641, in fail
    raise ValidationError(message_string, code=key)
rest_framework.exceptions.ValidationError: [ErrorDetail(string="Expected an instance of LDAPGroupType but got <class 'str'> instead.", code='type_error')]
2022-05-18 22:02:52,097 WARNING  [1b70c48eb19d4ec79ef1300c1e340105] awx.conf.registry Unable to retrieve default value for setting "AUTH_LDAP_GROUP_TYPE".
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/conf/registry.py", line 153, in get_setting_field
    field_instance.default = original_field_instance.to_representation(self.settings._awx_conf_settings._get_default(setting))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/sso/fields.py", line 440, in to_representation
    self.fail('type_error', input_type=type(value))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/fields.py", line 641, in fail
    raise ValidationError(message_string, code=key)
rest_framework.exceptions.ValidationError: [ErrorDetail(string="Expected an instance of LDAPGroupType but got <class 'str'> instead.", code='type_error')]
2022-05-18 22:02:52,109 WARNING  [1b70c48eb19d4ec79ef1300c1e340105] awx.conf.registry Unable to retrieve default value for setting "AUTH_LDAP_GROUP_TYPE".
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/conf/registry.py", line 153, in get_setting_field
    field_instance.default = original_field_instance.to_representation(self.settings._awx_conf_settings._get_default(setting))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/sso/fields.py", line 440, in to_representation
    self.fail('type_error', input_type=type(value))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/fields.py", line 641, in fail
    raise ValidationError(message_string, code=key)
rest_framework.exceptions.ValidationError: [ErrorDetail(string="Expected an instance of LDAPGroupType but got <class 'str'> instead.", code='type_error')]
2022-05-18 22:02:52,123 WARNING  [1b70c48eb19d4ec79ef1300c1e340105] awx.conf.registry Unable to retrieve default value for setting "AUTH_LDAP_GROUP_TYPE".
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/conf/registry.py", line 153, in get_setting_field
    field_instance.default = original_field_instance.to_representation(self.settings._awx_conf_settings._get_default(setting))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/sso/fields.py", line 440, in to_representation
    self.fail('type_error', input_type=type(value))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/fields.py", line 641, in fail
    raise ValidationError(message_string, code=key)
rest_framework.exceptions.ValidationError: [ErrorDetail(string="Expected an instance of LDAPGroupType but got <class 'str'> instead.", code='type_error')]
2022-05-18 22:02:52,374 WARNING  [1b70c48eb19d4ec79ef1300c1e340105] awx.conf.registry Unable to retrieve default value for setting "AUTH_LDAP_GROUP_TYPE".
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/conf/registry.py", line 153, in get_setting_field
    field_instance.default = original_field_instance.to_representation(self.settings._awx_conf_settings._get_default(setting))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/sso/fields.py", line 440, in to_representation
    self.fail('type_error', input_type=type(value))
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/rest_framework/fields.py", line 641, in fail
    raise ValidationError(message_string, code=key)
rest_framework.exceptions.ValidationError: [ErrorDetail(string="Expected an instance of LDAPGroupType but got <class 'str'> instead.", code='type_error')]
2022-05-18 22:02:52,395 DEBUG    [1b70c48eb19d4ec79ef1300c1e340105] awx.analytics.performance request: <WSGIRequest: PATCH '/api/v2/settings/ldap/'>, response_time: 0.379s
172.17.0.3 - - [18/May/2022:22:02:52 +0000] "PATCH /api/v2/settings/ldap/ HTTP/1.1" 200 78725 "https://awx.metrolist.net/api/v2/settings/ldap/" "Mozilla/5.0 (X11; Linux x86_64; rv:100.0) Gecko/20100101 Firefox/100.0" "192.168.49.1"
[pid: 130|app: 0|req: 9/64] 172.17.0.3 () {78 vars in 2800 bytes} [Wed May 18 22:02:52 2022] PATCH /api/v2/settings/ldap/ => generated 78725 bytes in 381 msecs (HTTP/1.1 200) 15 headers in 731 bytes (1 switches on core 0)
```

### Additional information

Box in question is running CentOS 8 Stream. All installations are according to the awx-operator documentation. 

I am assuming that the issue is an awx issue, and not part of the operator process. But I could be wrong in my assumption. Seems like the error in the API is the same thing causing the setting not to be set properly during the install process. But that's just a hunch. Couldn't find any errors in the install process, but this threw some that seemed to bare some fruit. 
user: djohnson1865
issue_12253: state: open
title: UI does not hadle error on notification save
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

If the content of a slack notification message contains a new line and you attempt to save. The screen "refreshes", the save fails but the user not notified in any way. In the networking console you can see that the API returned a 400 bad request:
![image](https://user-images.githubusercontent.com/32551173/169126952-2e3010fc-eb77-4aef-8dbc-4224b140ec27.png)

In the preview tab you can see it complaining about new lines in the message:
![image](https://user-images.githubusercontent.com/32551173/169127536-7c3d710b-6625-4309-a018-e5e64a92e726.png)

But the UI nothing is displayed to the user indicating an error (other than the screen not changing when save is clicked).

### AWX version

devel

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs

### Installation method

docker on linux

### Modifications

no

### Ansible version

N/A

### Operating system

N/A

### Web browser

Chrome

### Steps to reproduce

Load a slack notification that saves.
Edit the notification.
Enable custom messages.
Add a new line with some additional text to a message.
Click the save button.

### Expected results

Somewhere in the UI the user should be notified of the error condition. I'm not sure if this should be at the top of the page, under the bad message or down by the save button (since this page can be pretty large).

### Actual results

Page looks like it "reloads" but nothing is displayed about the error.

### Additional information

_No response_
user: john-westcott-iv
labels: needs_refinement: Apply to items in 'Backlog' that need refinement.
issue_12241: state: open
title: Websocket not working at non-root path
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

Changes from #11342 and #652 are not full

### AWX version

21.0.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Deploy AWX with custom `ingress_path: /awx`

### Expected results

websocket should work

### Actual results

`2022-05-17 08:46:41,031 ERROR    [-] daphne.ws_protocol [Failure instance: Traceback: <class 'ValueError'>: No route found for path 'awx/websocket/'.
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/autobahn/websocket/protocol.py:2841:processHandshake
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/txaio/tx.py:366:as_future
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/twisted/internet/defer.py:151:maybeDeferred
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/daphne/ws_protocol.py:72:onConnect
--- <exception caught here> ---
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/twisted/internet/defer.py:151:maybeDeferred
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/daphne/server.py:201:create_application
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/channels/routing.py:54:__call__
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/channels/sessions.py:47:__call__
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/channels/sessions.py:145:__call__
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/channels/sessions.py:169:__init__
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/channels/middleware.py:31:__call__
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/channels/routing.py:150:__call__
]
2022-05-17 08:46:41,031 ERROR    [Failure instance: Traceback: <class 'ValueError'>: No route found for path 'awx/websocket/'.
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/autobahn/websocket/protocol.py:2841:processHandshake
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/txaio/tx.py:366:as_future
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/twisted/internet/defer.py:151:maybeDeferred
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/daphne/ws_protocol.py:72:onConnect
--- <exception caught here> ---
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/twisted/internet/defer.py:151:maybeDeferred
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/daphne/server.py:201:create_application
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/channels/routing.py:54:__call__
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/channels/sessions.py:47:__call__
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/channels/sessions.py:145:__call__
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/channels/sessions.py:169:__init__
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/channels/middleware.py:31:__call__
/var/lib/awx/venv/awx/lib64/python3.9/site-packages/channels/routing.py:150:__call__`

### Additional information

It seems that issue is in  https://github.com/ansible/awx/blob/48b016802c517ff04d1cff4c43e64f17bb77a7a8/awx/main/routing.py

```
websocket_urlpatterns = [
    re_path(r'websocket/$', consumers.EventConsumer),
    re_path(r'websocket/broadcast/$', consumers.BroadcastConsumer),
]
```
From https://docs.djangoproject.com/en/4.0/ref/urls/:

When a route ends with $ the whole requested URL, matching against path_info, must match the regular expression pattern (re.fullmatch() is used).

Replacing with

```
websocket_urlpatterns = [
    re_path(r'websocket/', consumers.EventConsumer),
    re_path(r'websocket/broadcast/', consumers.BroadcastConsumer),
]
```

solves the issue
user: adpavlov
issue_12238: state: open
title: Failing to configure SAML Based Authentication
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

When trying to configure SAML authentication in "SAML Settings" Web UI, `SAML Service Provider Metadata URL` returns the below error:

```
 curl https://example.com/sso/metadata/saml/
Missing backend "saml" entry%
```

Attempt to force SSO backend to use "awx.sso.backends.SAMLAuth" did not fix the issue.
```
bash-5.1$ cat /etc/tower/settings.py | grep AUTHENTICATION_BACKENDS
AUTHENTICATION_BACKENDS = ['awx.sso.backends.SAMLAuth', 'awx.main.backends.AWXModelBackend', 'awx.sso.backends.TACACSPlusBackend']
```

The resulting config page returns the same two backends:

```
...
"AUTHENTICATION_BACKENDS": [
        "awx.main.backends.AWXModelBackend",
        "awx.sso.backends.TACACSPlusBackend"
    ],
```

Installed with `awx-operator`: 0.21.0


### AWX version

21.0.0

### Select the relevant components

- [X] UI
- [X] API
- [ ] Docs

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

Clean installation with the following awx.yaml:

```yaml
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx
spec:
  service_type: nodeport
  extra_settings:
    - setting: TOWER_URL_BASE
      value: '"https://example.com"'
    - setting: AUTHENTICATION_BACKENDS
      value:
        - awx.sso.backends.SAMLAuth
        - awx.main.backends.AWXModelBackend
        - awx.sso.backends.TACACSPlusBackend
```

### Expected results

Get metadata to configure IDP

### Actual results

`Missing backend "saml"` error message

### Additional information

_No response_
user: GR360RY
labels: component:authentication: For issues related to authentication
issue_12230: state: open
title: Add logging to hosts
body: 
##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
An administrator should be able to look at host logs and find out what has been executed by Ansible on a server without having to go to Tower or other logging services. I think the best solution would be to log the module name and any variables used in it (even if they are defaults).

user: jbird2021
issue_12233: state: open
title: Error in job log output
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Some outputs don't load

##### ENVIRONMENT
* AWX version: 21.0.0
* Operator version: 0.21.0
* Kubernetes version: 1.21.10
* AWX install method: Kubernetes

##### STEPS TO REPRODUCE

Run job

##### EXPECTED RESULTS

Correctly show the output log

##### ACTUAL RESULTS

Can't se logs without download them

##### ADDITIONAL INFORMATION

![image](https://user-images.githubusercontent.com/52977138/168065673-259049c9-28e8-4af2-9051-9d84016e3a38.png)

user: ybucci
issue_12221: state: open
title: RuntimeError: The project could not sync because there is no Execution Environment.
body: Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 456, in run
    env = self.build_env(self.instance, private_data_dir, private_data_files=private_data_files)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 1031, in build_env
    env = super(RunProjectUpdate, self).build_env(project_update, private_data_dir, private_data_files=private_data_files)
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/jobs.py", line 310, in build_env
    raise RuntimeError('The project could not sync because there is no Execution Environment.')
RuntimeError: The project could not sync because there is no Execution Environment.

I was able to create a custom image and add the execution environment to AWX tower. I selected the built image as execution environment while creating the project.. The error still pops up. 

Suggest a way out please.



user: aishwaryakulkarni31
issue_12217: state: open
title: [Tech Debt] Django ORM update_fields non-interference
body: ##### SUMMARY
This app makes heavy use of `update_fields` when using the Django ORM, but we do not reap its full benefit mainly because of overly-broad logic in `save` methods. We have plenty of specific examples documented in the issue tracker. This issue asks that we clarify expectations generally.

**Demo Proposal for Best Practice**

Consider a model `FeatureModel` which ultimately derives from `django.db.models.Model`, and a particular saved object `obj`.

If a model is saved with `obj.save(update_fields=["field_A"])`, then 
1. If `field_A` does not directly affect any other fields, then no additional queries should be made and `django.db.models.Model.save` should be called with the single update field, plus any contextual fields, like `["field_A", "modified_by"]`
2. The `update_fields` list may be expanded to include another model field, like `["field_A", "field_B"]` if the `field_B` is directly affected by the value of `field_A`
3. If any contextual fields or dependent fields _do not change from the prior value_ where the prior value is assessed by what's currently on `obj`, then those fields should not be appended to `update_fields`. So if `field_A` affects `field_B`, but `obj.field_B` is already equal to the field's computed value, then `django.db.models.Model.save` should see `["field_A"]` only
4. We should make use of `update_fields` to the maximum extent possible, particularly in non-web services like the dispatcher

For an example of (2), consider when we set `obj.status = "failed"` and `obj.save(update_fields=["status"])`, this may trigger `obj.failed` to be set to `True`. This is ok.

However, if we save something unrelated like `obj.save(update_fields=["artifacts"])`, this _should never_ update any status-related fields.

I have `UnifiedJobTemplate` and `UnifiedJob` models in mind specifically here.

This issue is meant to encompass several other issues

https://github.com/ansible/awx/issues/11698

https://github.com/ansible/awx/pull/11838

https://github.com/ansible/awx/pull/11833
user: AlanCoding
labels: needs_refinement: Apply to items in 'Backlog' that need refinement.
issue_12200: state: open
title: Flickering workflow visualizer when approval node has an alias and time out
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

Go to the workflow visualizer when a workflow approval is pending - assuming there is a defined timeout, if the approval node has an alias a flickering behavior will be observed.


### AWX version

devel

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs

### Installation method

docker for mac

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1 - Create a workflow visualizer with a approval node - use an alias and defined timeout - 60s.
2 - Launch the workflow job template.
3 - Go the visualizer, and wait to the approval node to be executed.


### Expected results

1 - No flickering.


### Actual results

1. Flickering.

![approval_node](https://user-images.githubusercontent.com/9053044/167450194-8224eed5-9d2a-486f-8f63-54c68e344b8b.gif)
)

### Additional information

_No response_
user: nixocio
issue_12182: state: open
title: Aggregation of AWX job slice outputs back to one output log
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
- Feature Idea
When a job template is utilizing job slices, provide a way for the ansible output of all slices to be in one output log. The unified output log could be available for download on the parent workflow job after all slices are complete.

##### SUMMARY
In some large environments, job slices drastically improve completion time. However, reviewing output becomes more tedious, as logs from multiple job slices need to be pulled and reviewed. We've done some work using other AWX jobs to monitor groups of running jobs, but if the workflow job created by the template could collate those logs after the run, we could then use that log in our reporting and other integrations.

The final 'workflow' output log would essentially look like a regular job template's downloadable output log, if slicing was not used. Each task output in the log would be combined so that the task output from each slice is listed together. The task outputs could be prefixed with their slice job id. Full details of each task output could be omitted and left at the job slice output, and this workflow output could just be a downloadable log.

The individual slice jobs would still have their logs specific to their portion of the inventory as well, so individual slices could be reviewed.



user: davisc01
labels: type:feature: prioritized on a feature board
issue_12181: state: open
title: Toggle All On / All Off Switch at the top of Hosts page
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Hello, recently started using AWX and love the power it gives me as an admin. Having many hosts, what would really streamline the process is a simple toggle switch on the Hosts page enabling the user to either select all hosts at once or deselect all hosts. When there are many hosts, doing them one by one becomes time consuming. I apologize beforehand if this is a duplicate request but I could not find one when searching with similar words

Visual examples attached

![chrome_lZmAdQ6fqs_aklftg1DR1](https://user-images.githubusercontent.com/42691188/166975281-ea0dceeb-93b3-4e92-8c55-c0d83cd8ba34.png)

![chrome_lZmAdQ6fqs_qWJTyF4YBe](https://user-images.githubusercontent.com/42691188/166975307-3035bc2a-a3cc-480d-9ef6-450bdde5a734.png)

Thanks for reading!

user: 0utlawActual
issue_12160: state: open
title: Links should not be clickable for a user without permissions to see that resource
body: A "normal user" who has job template Read writes and views the detail screen of that job sees links for related resources (inventory, project, for example). The user can click the links and is given a 403 error. Instead of being shown a link that they cannot access, the user should just see a string with the name of the resource- link functionality should be removed.

Steps to reproduce:
As an admin user:

- Create a normal user
- Create a job template and give that normal user Job Template Read rights
- Sign out and sign in as the normal user
- Access the details page of the job template
- Try to click on one of the links for the related resources- notice the error that pops up
user: akus062381
issue_12157: state: open
title: [Performance] use "defer" to avoid loading extra (possibly expensive) data in Task Manager
body: In the task manager, we make a series of queries such as:

https://github.com/ansible/awx/blob/devel/awx/main/scheduler/task_manager.py#L90-L100
https://github.com/ansible/awx/blob/adb2b0da89f18760d85d06c8fd9731e86b6bdc76/awx/main/scheduler/task_manager.py#L104
https://github.com/ansible/awx/blob/adb2b0da89f18760d85d06c8fd9731e86b6bdc76/awx/main/scheduler/task_manager.py#L112

We do not need all the fields that come back from these queries. I had attempted to cut down on how much data we load in https://github.com/ansible/awx/pull/12045 by using the `only` directive, but it was later reverted because we determined that because of ways the polymorphic models have secret fields, that this resulted in MORE queries (@AlanCoding helped me find this by hacking the dev environment and using the django debug toolbar. We made the Task Manager only run when we hit an api endpoint in order to get this information.)

An alternative approach would be to use `defer` https://docs.djangoproject.com/en/4.0/ref/models/querysets/#defer to specifically exclude certain fields.

I had manually searched through the code to find that we reference `['celery_task_id', 'controller_node', 'created', 'execution_node', 'instance_group', 'job_explanation', 'name', 'pk', 'status']` so the work would consist of finding out which fields are on the models that are NOT in that list, and defer those fields.

This came up while looking at https://github.com/ansible/awx/issues/11671
user: kdelee
labels: needs_refinement: Apply to items in 'Backlog' that need refinement.
issue_12142: state: open
title: Add special message when job is canceled from unexpected source
body: ##### ISSUE TYPE
 - Feature Idea
 - Bug Report

##### SUMMARY
Our testers have detected a behavior change. Steps to reproduce

 - Launch a job with some hosts and a sleep task, wait for sleep task to start
 - Shell into the job's `controller_node` and manually run `receptorctl work cancel <work_id>`
 - Observe job's behavior in AWX

The previous behavior was that the `status` changed to "error". Now, the `status` changes to "canceled"

I have verified that this status comes from ansible-runner itself. That means that the user's action of canceling the job via receptor resulted in the playbook run, itself, receiving a SIGTERM signal and gracefully exiting. This is desirable, however, it creates a messaging problem.

No one ever canceled the job through the API's `/api/v2/jobs/N/cancel/` endpoint. In the models, the `cancel` model was never called. The reported status from ansible-runner conflicts with the job's `cancel_flag`.

This issue proposes that if a ansible-runner reports that a job was canceled without it ever being canceled through the API, a special message should be attached, like:

> Job was canceled by means other than the API, but exited gracefully


user: AlanCoding
issue_12131: state: open
title: automation-job pod automatically killed after 300s
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

we have jobs taking long time.

But it seems that the automation-pod running our task is automatically terminated after 300s.


### AWX version

20.0.1

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs

### Installation method

openshift

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

deploy awx on openshift or minikube

create a task doing sleep for more than 300s

launc job and wait

### Expected results

job finish after sleep

### Actual results

automation-pod terminated
job failed

### Additional information

_No response_
user: anthonyglidic
issue_12130: state: open
title: Align Workflow and Topology UX
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Here's Topology:

<img width="1674" alt="Screen Shot 2022-04-28 at 3 15 59 PM" src="https://user-images.githubusercontent.com/9889020/165829142-01d2b07d-1574-4f6c-b488-0131b5ba3c68.png">

Here's the Workflow Visualizer:

<img width="1675" alt="Screen Shot 2022-04-28 at 3 17 19 PM" src="https://user-images.githubusercontent.com/9889020/165829288-01624a27-99ea-42ab-a509-dd14f0248123.png">

We should make the Workflow Vis look and feel more like the Topology view.  This is a significant undertaking and should be broken down into a number of areas:

1) Toolbar & related actions
2) Legend
3) Look and feel of nodes/links
4) Node details (hovering over/clicking on a node)
5) The layout algorithm determining where to place the nodes (currently Dagre)
6) The workflow visualizer is currently full-screen but topology is not (should probably align)

There are probably other improvements that can be made so that the two look and feel like they come from the same application

user: mabashian
issue_12127: state: open
title: Brand logo link not supporting running AWX at non-root path
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

Top left logo link in AWX is hardcoded to / and not supporting customized AWX path

Seems like the issues is here:

https://github.com/ansible/awx/blob/b885fc2d86eeae05dc5ee1b694b87445025af938/awx/ui/src/components/AppContainer/AppContainer.js#L61

### AWX version

21.0.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Click on top left logo

### Expected results

Redirect to customized AWX home page e.g. https://host/awx

### Actual results

Link leads to not existing https://host/ url

### Additional information

Connected to https://github.com/ansible/awx/pull/11342 and https://github.com/ansible/awx-operator/pull/652
user: adpavlov
issue_12121: state: open
title: Allow users to select page size in Modal and add a select all button where appropriate
body: Feature idea:
When a user clicks the Access tab inside of a team and clicks Add, it brings up a modal where the user can add users to that team. The modal looks like this:
![image](https://user-images.githubusercontent.com/63685497/165612649-bd3753f4-695b-4efc-a905-ec1a137bd5b3.png)

Currently, if an admin wants to bulk-add other users to the team, they have to click each check box next to the user's name and paginate through all the pages to add all the users (which is a lot of clicking and extra time).

Marly showed me a hack inside the modal- 
the URL normally reflects like this: _https://localhost:8043/#/teams/2/access?resource.page=2_

she showed me that you can change the URL to read like this:
_https://localhost:8043/#/teams/2/access?resource.page=1&resource.page_size=20_

And doing so will change how many users show up in the modal. 

So my suggestions: 

- [ ] Make it possible for a user to change how many entries show up on the modal page
- [ ] Make it possible for a user to click on a Select All button to select all users on that page of the modal
user: akus062381
issue_12118: state: open
title: Can't pull EE from private container registry
body: ##### ISSUE TYPE
 - Bug Report
 
##### SUMMARY
Can't pull EE from private container registry : can't validate certificate signed by private authority.
On Registry credentials, Verify SSL in unchecked.

##### ENVIRONMENT
* AWX version: 20.0.1
* AWX install method: operator
* AWX deployment target: minikube
* Operating System: RockyLinux 8
* Web Browser: Firefox

##### STEPS TO REPRODUCE
Try to pull EE from a private registry, with certificates signed by a private authority

##### EXPECTED RESULTS
EE pulled succesfully

##### ACTUAL RESULTS
pod/automation-job-30-h9hpg                            Failed to pull image "registry.local/sdc-sasi/awx:latest": rpc error: code = Unknown desc = Error response from daemon: Get "https://registry.bureautique.itm.lan/v2/": x509: certificate signed by unknown authority

##### ADDITIONAL INFORMATION
I also tried to add the private CA to the host system, didn't change anything.

user: mooky31
issue_12103: state: open
title: API should not report job finished running while events are still processing
body: in the job output screen, the API reports a job is finished running while the UI is still gathering and rendering all of the events. As a result, the job output expand/collapse feature does not always render when it should, and the user must know that they  need to refresh in order to see that feature.

What should be happening is that the job output screen should automatically refresh to show the expand/collapse arrows when the job completes. The user should not have to click refresh to see those.

After job finishes, before clicking refresh:
![image](https://user-images.githubusercontent.com/63685497/165178970-c2a82b4d-4509-4d70-8bae-a48668e9fead.png)

After clicking refresh:
![image](https://user-images.githubusercontent.com/63685497/165179092-346340c2-4342-48e2-8b7e-87c953cec350.png)


user: akus062381
labels: needs_refinement: Apply to items in 'Backlog' that need refinement.
issue_12100: state: open
title: Remove warnings during UI build process
body: 

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
There are several warnings during the UI build process. Mainly related to 

```Failed to parse source map from``` node modules.


See: GENERATE_SOURCEMAP https://create-react-app.dev/docs/advanced-configuration/

user: nixocio
issue_12097: state: open
title: tower-cli not supporting AWX at non-root path
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

Changes from #11342 and [#652](https://github.com/ansible/awx-operator/pull/652) are not ported to tower-cli and awxkit


### AWX version

20.1.0

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs

### Installation method

kubernetes

### Modifications

yes

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Install AWX to serve in prefixed path

### Expected results

tower-cli and awxkit working

### Actual results

/usr/bin/awx --conf.host http://192.168.119.100:32262/awx --conf.username admin --conf.password sudo kubectl -n awx get secret awx-admin-password -o jsonpath="{.data.password}" | base64 --decode --conf.insecure project list
An error occurred while fetching http://192.168.119.100:32262/awx/api/

/usr/bin/awx --conf.host http://192.168.119.100:32262/awx --conf.username admin --conf.password sudo kubectl -n awx get secret awx-admin-password -o jsonpath="{.data.password}" | base64 --decode --conf.insecure project list -v
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): 192.168.119.100:32262
DEBUG:urllib3.connectionpool:http://192.168.119.100:32262 "GET /awx/api/ HTTP/1.1" 200 198
DEBUG:awxkit.api.client:"GET http://192.168.119.100:32262/awx/api/" elapsed: 0:00:00.045573
DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.base.Base'> by url: /awx/api/
Traceback (most recent call last):
File "/opt/rh/rh-python38/root/usr/local/lib/python3.8/site-packages/awxkit/cli/client.py", line 134, in fetch_version_root
self.v2 = self.root.get().available_versions.v2.get()
AttributeError: 'str' object has no attribute 'get'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/rh/rh-python38/root/usr/local/lib/python3.8/site-packages/awxkit/cli/init.py", line 24, in run
cli.connect()
File "/opt/rh/rh-python38/root/usr/local/lib/python3.8/site-packages/awxkit/cli/client.py", line 121, in connect
self.fetch_version_root()
File "/opt/rh/rh-python38/root/usr/local/lib/python3.8/site-packages/awxkit/cli/client.py", line 136, in fetch_version_root
raise RuntimeError(
RuntimeError: An error occurred while fetching http://192.168.119.100:32262/awx/api/

### Additional information

_No response_
user: adpavlov
issue_12091: state: open
title: Starting job execution along with inventory sync
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

COMPONENT NAME
- UI
- API

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
* current behavior:  A Tower dynamic inventory - synchronizing from a script/program ( "Sourced from a Project" type ) - will not allow any Job Templates associated to it to execute during a sync operation. The inventory sync operation appears to be enforcing a global lock to the aforementioned group of Job-Templates and locking the inventory for the duration of the inventory refresh, from launch up to job completion.

* Expected Behavior:  To run the starting job execution along with inventory sync. The Job-Templates/inventory global lock requirements should be relaxed and limited to enforcing the JT global lock only during the actual inventory parsing and PostgreSQL update operation, just after the script/program has emitted the newly generated JSON-formatted inventory, as per dynamic inventory specification, at its standard output . Such change would be justified by the fact that, for a program/script-generated dynamic inventory, the actual inventory structure is created at program/script termination and perceived by Tower as a single monolithic JSON dump operation.
user: gabhishek627
issue_12082: state: open
title: Are there plans to address container image vulnerabilities?
body: There have consistently been high and critical vulnerabilities that appear in the image scanning results in Quay for the container images created and used for the AWX project. For example, the container image for the awx-web pod (quay.io/ansible/awx) has two critical-level vulnerabilities (CVE-2020-1747 and CVE-2020-36242) and three high-level vulnerabilities.

There are other container images leveraged by the project with similar results, but I wanted to use the web pod as an example since it is the most exposed. This has been recurring through many releases.

For all security related bugs, email security@ansible.com instead of using this issue tracker and you will receive a prompt response.

For more information on the Ansible community's practices regarding responsible disclosure, see https://www.ansible.com/security

user: JRNC
issue_12079: state: open
title: Update React
body: Update to react 18 to address 
![image](https://user-images.githubusercontent.com/39280967/164271829-1635479a-c2c3-4807-a55d-10d5da64914a.png)


Blocked: https://github.com/ansible/awx/issues/12058#issuecomment-1104092342
user: AlexSCorey
labels: needs_refinement: Apply to items in 'Backlog' that need refinement.
issue_12075: state: open
title: limit from variable
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

I would like to be able to provide a variable instead of a pattern for **limit**.

The purpose is to be able to get through set_stat in step 1 of
a workflow those hosts that I do not want to run in step 2 of this workflow.

**I **am getting the following warning****:
**INFO**: ansible_limit contains in this case the require host for testing purposes '192..168.56.20'

`[WARNING]: Could not match supplied host pattern, ignoring: ansible_limit
ERROR! Specified hosts and/or --limit does not match any hosts`
user: antromanfdez
issue_12074: state: open
title: Per Inventory Fact Cache Timeout
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Currently there is a global configuration option `System > Jobs > Per-Host Ansible Fact Cache Timeout`/`ANSIBLE_FACT_CACHE_TIMEOUT` that can be used to define a global fact cache timeout for all inventories in AWX.

When having a lot of different inventories (which is pretty common I would think, as Organizations can be used for tenancy) with individual use-cases, setting a global timeout is not desirable as it can cause a lot of head scratching for users not being admins, who rely on longer storage for facts, e.g. for Smart Inventories or pulling facts via API vor external reports.

Therefore I'd suggest adding the same option as an override on Inventories, so each Inventory can have individual facts cache timeout set for its hosts.
user: moonrail
issue_12071: state: open
title: Hide local/utc toggle on schedule page
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
If the local time zone of a schedule is already UTC the local/utc toggle does not really do anything because the information is the same. We should hide the local/utc toggle in this scenario to avoid confusion.
user: john-westcott-iv
issue_12070: state: open
title: UI: Human-friendly time and date
body: It's hard to read the job list and identify what was updated recently.
One possible solution for that is to use the "XX minutes ago" format instead of the full date time.

This may be important for two parts of AWX:
- Jobs
- Activity Stream

## Currently behavior

![Captura de Tela 2022-04-18 às 20 00 54](https://user-images.githubusercontent.com/2138276/163890839-c06bfd7c-7efd-4e8e-9a61-f14e74010953.png)

## Suggested behavior

![Captura de Tela 2022-04-18 às 20 10 03](https://user-images.githubusercontent.com/2138276/163891212-ad9a17a3-981f-49a0-80d7-1db9fcde165d.png)



user: thenets
issue_12061: state: open
title: Feature Request: Is AWX FIPS 140-2 certified?
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

I'm evaluating the use of AWX over other tools for an operations team, and I was wondering if AWX can be deployed into a FedRAMP environment.

I don't see an official certification on the Ansible website (maybe I just missed it). If you have documentation for AWX's FedRAMP Certification, I'd like to view it, as well as any tips on configuring AWX for a Fed Environment.



user: vyas-n
issue_12059: state: open
title: Copying a notification template does not show toast message
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

Copying a notification template does not show toast message

### AWX version

devel

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs

### Installation method

docker for mac

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1 - Go to the notification template list
2 - Copy an existent notification

### Expected results

Toast message to be displayed

### Actual results

Toast message to be displayed is not displayed

### Additional information

For job templates

<img width="1505" alt="image" src="https://user-images.githubusercontent.com/9053044/163443931-97516867-de24-4865-8359-9bf87262723b.png">

Notification templates

<img width="1486" alt="image" src="https://user-images.githubusercontent.com/9053044/163444012-2c3a9e2a-9e2f-486a-807d-3418910bf12e.png">

user: nixocio
issue_12057: state: open
title: Have job_wait module set a good example and do exponetial backoff
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
AWX is sensitive to DDOS attacks by clients polling too aggressively. We should set a good example in our module and implement longer interval/some kind of backoff scheme.

See https://github.com/ansible/awx/blob/devel/awx_collection/plugins/modules/job_wait.py
user: kdelee
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_12051: state: open
title: Access to log files from web frontend
body:  - Access to log files from web frontend

Rather than having to work out how to work Docker or Kubernetes annoying log retrieval system and having to work out which container is doing the thing that you need the log for, having a webpage which could allow you to see the aggregated logs (and perhaps retrieve a zip file for support) would be really handy.
user: FooBarTrixibell
issue_12033: state: open
title: RFE: Option to export inventory as CSV file.
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Briefly describe the problem or desired enhancement. -->
- API
- UI

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Export inventory details at `api/v2/inventories/N/script/?hostvars=1` can be exported to CSV format.
Also, ability for awx to output the formatting to CSV.
awx command to expand format(-f) option.

There is no option on the UI as well as awx command which will be very helpful to collect the host details and maintain the inventory.
Using curl and jq can filter out the arrays but we need the full output.
user: sagarlutade
issue_12032: state: open
title: ansible facts query not set up for spacing
body: When creating a smart inventory, and creating a smart host filter using ansible facts, if the user types in a key-value pair where the value has spacing, an error is thrown.

To reproduce:

1. Run the gatherfacts playbook against localhost. 
2. In the CLI, shell into your instance and change the ansible_bios_vendor ansible fact variable to "Amazon AWS"
3. In the UI, create a smart inventory. In the Smart Host Filter search modal, Click advanced search and select ansible_facts as the key. In the text box, type `ansible_bios_vendor="Amazon AWS"`
4. The modal will show you the localhost. Click Select.
5. After naming your smart inventory and selecting an org, Click Save. you will see the error thrown.

Please reach out if I can help with changing the ansible fact information in the shell.

![image](https://user-images.githubusercontent.com/63685497/162840471-ae993f17-2f1f-46ce-8d1b-a766bb1c7453.png)


![image](https://user-images.githubusercontent.com/63685497/162840514-4b895f4f-0cdd-47c6-914f-e6b578ce8be7.png)

user: akus062381
issue_12019: state: open
title: Consider task impact/resource requests for container group jobs on a per job basis
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Right now when a container group job is created, we generate a pod spec based on the pod spec in the ContainerGroup. All jobs get the same resource requests/limits as is defined on the ContainerGroup podspec regardless of the calculated "task_impact" of the job.

Users can try and work around this by creating different container groups with different resource requests and/or using sliced jobs to try and split jobs into many smaller pods where the number of forks in the "slice" more closely matches the resources the pod has allocated to it.

To help users out, but not introduce breaking changes, we could

A) Allow a JT level "pod spec override"
B) Give a true/false attribute on the JT "dynamic resource requests for container group jobs" (better name needed) where we calculate the resource request based on the job's "task_impact"

##### Background
How do we limit how many forks attempt to execute in the job pod that gets launched into the container group?

Right now if you have an inventory of 1000 hosts and you set your max forks to 1000 on the job template, we will just launch it even if your underlying k8s cluster is on a laptop with 2GB of ram, because we also basically view that job pod as having unlimited resources/forks capacity (which is wrong). (really, we just don't consider capacity at all on the execution side of container groups, just the control side now since https://github.com/ansible/awx/pull/11665)

Currently we can customize the container group pod spec to add a resource request/limit, but right now that would only apply on the kubernetes level and we would STILL try and launch that 1000 fork job, though perhaps the pod will get throttled/reaped if we set a resource limit on memory/CPU.

A user can avoid trying to run a job with 1000 forks by doing some machinations with sliced jobs, but this needs to be managed by the user to make sure `inventory_hosts/slices <= max_forks_per_pod`.

### Questions/concerns

This still follows pattern of "launch the job and let kubernetes figure out if it can schedule it" -- but we still have trouble respecting Pending pods and we thrash the task manager if the namespace has resource quotas set because we get a 4XX from the Kube API and just put the job back in pending, trying to start it again on the next round of the task manager.
user: kdelee
issue_12018: state: open
title: Lookup modal selection triggers form value changes before hitting "Save"
body: ### Summary

The lookup modal updates the form field value any time the user selects a list item from within the modal. The form value _should_ only change after the user hits "Save". There appears to be some two-way binding at play here. 

Known lookups affected: Organization, Project, Inventory, Execution Environment, Application, and Credential
Lookups not affected: Multi-Credentials and Instance Groups

![lookup](https://user-images.githubusercontent.com/15881645/162064029-a100b5b2-5d3a-4bf5-ae7f-dc12bf1ed2c3.gif)
![lookup_1](https://user-images.githubusercontent.com/15881645/162064036-bf1b4757-4487-47e6-b5f8-7b845afe6f28.gif)

### AWX version

devel

### Installation method

docker for mac

### Steps to reproduce

1. Navigate to a form with a lookup
2. Open lookup
3. Select a list item 

### Expected results

Form lookup value should not change. 

### Actual results

Form lookup value changes. 

user: marshmalien
issue_12002: state: open
title: Job template against dynamic inventory fails
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

A job template created against a dynamic inventory with "host enable" filtering fails.

### AWX version

20.0.1

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs

### Installation method

minikube

### Modifications

no

### Ansible version

2.10.9

### Operating system

Ubuntu

### Web browser

Firefox

### Steps to reproduce

short version:
- I have created a small git repository with some roles, playbooks and dynamic inventories
- AWK installed using minikube
- Created a project for importing the git repo at AWX, finished succesful
- Created the dynamic inventory at AWX. workes fime

Everything looks fine and all syncs have worked. Ad-hoc commands also work against this inventory. Only the call of a job via a job template unfortunately does not work. It could be that the host enabled filter causes the problem.

This is the output of the inventory when i use the command line: ansible-inventory --list

```json
{                                                                                                                                                                                   
    "_meta": {
        "hostvars": {
            "opi3.fritz.box": {
                "etc_path": "/etc/ansible",
                "inv_architecture": "aarch64",
                "inv_cmdb_importsource": "privat",
                "inv_kernel": "5.15.25-sunxi64",
                "inv_os": "Debian GNU/Linux 10 (buster)"
            },
            "pi3.fritz.box": {
                "etc_path": "/etc/ansible",
                "inv_architecture": "armv7l",
                "inv_cmdb_importsource": "privat",
                "inv_kernel": "5.10.103-v7+",
                "inv_os": "Raspbian GNU/Linux 10 (buster)"
            },
            "pi4.fritz.box": {
                "etc_path": "/etc/ansible",
                "inv_architecture": "aarch64",
                "inv_cmdb_importsource": "privat",
                "inv_kernel": "5.15.24-bcm2711",
                "inv_os": "Ubuntu 20.04.4 LTS"
            },
            "pizero.fritz.box": {
                "etc_path": "/etc/ansible",
                "inv_architecture": "armv6l",
                "inv_cmdb_importsource": "privat",
                "inv_kernel": "5.10.103+",
                "inv_os": "Raspbian GNU/Linux 10 (buster)"
            }
        }
    },
    "all": {
        "children": [
            "ici_Arm",
            "ici_Linux",
            "ungrouped"
        ]
    },
    "ici_Arm": {
        "hosts": [
            "opi3.fritz.box",
            "pi3.fritz.box",
            "pi4.fritz.box",
            "pizero.fritz.box"
        ]
    },
    "ici_Linux": {
        "hosts": [
            "opi3.fritz.box",
            "pi3.fritz.box",
            "pi4.fritz.box",
            "pizero.fritz.box"
        ]
    }
}
```

### Expected results

Normaly a running playbook task. If you export the output from the error message and run it, you get the following result:

`python /tmp/x  | jq .`

```json
{
  "all": {
    "hosts": [],
    "children": [
      "ici_Arm",
      "ici_Cluster",
      "ici_Espressif",
      "ici_Linux"
    ]
  },
  "ici_Arm": {
    "hosts": [
      "opi3.fritz.box",
      "pi4.fritz.box"
    ]
  },
  "ici_Linux": {
    "hosts": [
      "opi3.fritz.box",
      "pi4.fritz.box"
    ]
  },
  "_meta": {
    "hostvars": {
      "opi3.fritz.box": {
        "inv_architecture": "aarch64",
        "inv_cmdb_importsource": "privat",
        "inv_kernel": "5.15.25-sunxi64",
        "inv_os": "Debian GNU/Linux 10 (buster)",
        "remote_tower_enabled": "true",
        "remote_host_enabled": "true",
        "remote_host_id": 624
      },
      "pi4.fritz.box": {
        "inv_architecture": "aarch64",
        "inv_cmdb_importsource": "privat",
        "inv_kernel": "5.15.24-bcm2711",
        "inv_os": "Ubuntu 20.04.4 LTS",
        "remote_tower_enabled": "true",
        "remote_host_enabled": "true",
        "remote_host_id": 626
      }
    }
  }
}
```
That should mean that the json record is ok.

### Actual results

```
ansible-playbook [core 2.12.4.post0]
  config file = /runner/project/ansible.cfg
  configured module search path = ['/home/runner/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/site-packages/ansible
  ansible collection location = /runner/requirements_collections:/home/runner/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.8.12 (default, Sep 21 2021, 00:10:52) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
  jinja version = 2.10.3
  libyaml = True
Using /runner/project/ansible.cfg as config file
setting up inventory plugins
_INV_PATH: /runner/inventory/hosts
[WARNING]:  * Failed to parse /runner/inventory/hosts with dynamic plugin: We
were unable to read either as JSON nor YAML, these are the errors we got from
each: JSON: Expecting value: line 1 column 1 (char 0)  Syntax Error while
loading YAML.   did not find expected key  The error appears to be in
'/runner/inventory/hosts': line 3, column 137, but may be elsewhere in the file
depending on the exact syntax problem.  The offending line appears to be:  #
-*- coding: utf-8 -*- print('{"all": {"vars": {"etc_path": "/etc/ansible"},
"hosts": [], "children": ["ici_Arm", "ici_Cluster", "ici_Espressif",
"ici_Linux"]}, "ici_Arm": {"hosts": ["opi3.fritz.box", "pi4.fritz.box"]},
"ici_Linux": {"hosts": ["opi3.fritz.box", "pi4.fritz.box"]}, "_meta":
{"hostvars": {"opi3.fritz.box": {"inv_architecture": "aarch64",
"inv_cmdb_importsource": "privat", "inv_kernel": "5.15.25-sunxi64", "inv_os":
"Debian GNU/Linux 10 (buster)", "remote_tower_enabled": "true",
"remote_host_enabled": "true", "remote_host_id": 624}, "pi4.fritz.box":
{"inv_architecture": "aarch64", "inv_cmdb_importsource": "privat",
"inv_kernel": "5.15.24-bcm2711", "inv_os": "Ubuntu 20.04.4 LTS",
"remote_tower_enabled": "true", "remote_host_enabled": "true",
"remote_host_id": 626}}}}')
^ here We could be wrong, but this one looks like it might be an issue with
unbalanced quotes. If starting a value with a quote, make sure the line ends
with the same set of quotes. For instance this arbitrary example:      foo:
"bad" "wolf"  Could be written as:      foo: '"bad" "wolf"'
  File "/usr/local/lib/python3.8/site-packages/ansible/inventory/manager.py", line 290, in parse_source
    plugin.parse(self._inventory, self._loader, source, cache=cache)
  File "/runner/project/library/inventory/dynamic.py", line 49, in parse
    self.cfg = loader.load_from_file(path, cache=cache)
  File "/usr/local/lib/python3.8/site-packages/ansible/parsing/dataloader.py", line 97, in load_from_file
    parsed_data = self.load(data=file_data, file_name=file_name, show_content=show_content, json_only=json_only)
  File "/usr/local/lib/python3.8/site-packages/ansible/parsing/dataloader.py", line 80, in load
    return from_yaml(data, file_name, show_content, self._vault.secrets, json_only=json_only)
  File "/usr/local/lib/python3.8/site-packages/ansible/parsing/utils/yaml.py", line 82, in from_yaml
    _handle_error(json_exc, yaml_exc, file_name, show_content)
  File "/usr/local/lib/python3.8/site-packages/ansible/parsing/utils/yaml.py", line 43, in _handle_error
    raise AnsibleParserError(n_err_msg, obj=err_obj, show_content=show_content, orig_exc=yaml_exc)
[WARNING]: Unable to parse /runner/inventory/hosts as an inventory source
ERROR! No inventory was parsed, please check your configuration and options.
```

### Additional information

The error occurs against any dynamic inventory, even if no "variable enabled" is used. The output of the dynamic inventory is JSON, is this the Problem?
user: gaugstein
issue_11997: state: open
title: [Scale] Introduce a single pattern for running periodic tasks in the _cluster_
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
We have a few tasks that need to be ran on a periodic basis within the cluster. As the number of nodes in the cluster scales up, that becomes a problem because every node runs the periodic task on the same schedule. So the frequency of the task increases as the number of nodes increases. This increases overall system activity and network activity.

Several times, this has become either so obvious or so acute of a problem that we added logic to elect a single node to run the logic while all the others bail. The problem is, every time this was solved, it was solved a different way.

 - awx_periodic_scheduler
   - non-blocking global lock
   - additionally, uses a Django Solo model to track the time range since its last run to collect what needs to run
 - Task manager
   - Uses a non-blocking global lock
 - heartbeat - execution node judgement
   - same as task manager, non-blocking global lock
   - https://github.com/ansible/awx/blob/7822da03fb6cd8b148fac0b87c2e638159ab634a/awx/main/tasks/system.py#L430
 - heartbeat - peer judgement
   - this _should_ only be ran once per period, but runs on all healthy nodes anyway
   - https://github.com/ansible/awx/blob/7822da03fb6cd8b148fac0b87c2e638159ab634a/awx/main/tasks/system.py#L512
 - cleanup images and files
   - runs on first healthy node, alphabetically
   - https://github.com/ansible/awx/blob/7822da03fb6cd8b148fac0b87c2e638159ab634a/awx/main/tasks/system.py#L347
 - gather_analytics
   - totally unique approach, tracks the last ran time with a setting
   - https://github.com/ansible/awx/blob/7822da03fb6cd8b148fac0b87c2e638159ab634a/awx/main/tasks/system.py#L319
 - k8s_reaper
   - does nothing to reduce run frequency, just runs on all nodes every period

I want to clearly distinguish between these truly _global_ actions, and things that _need_ to run on every node, like `awx_receptor_workunit_reaper`. Every node has to reap stale work units in their own receptor daemon.

We should consolidate these into a single pattern so that we don't increase background work as the cluster size scales up.
user: AlanCoding
labels: needs_refinement: Apply to items in 'Backlog' that need refinement.
issue_11995: state: open
title: Failure to Delete workflow from Job List
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

It can be impossible to delete a workflow (not a individual node, or job template within a workflow) temporarily.

### AWX version

latest

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs

### Installation method

docker for mac

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Create a workflow with at least three nodes.  One of the nodes, not the first 1, must be an approval node.
Launch workflow and let the first node complete.
Then cancel the workflow. 
Then immediately try to delete the workflow form the job list.

### Expected results

Workflow is deleted from jobs list

### Actual results

403 is thrown.

### Additional information

If you refresh the page, or wait a little bit after canceling the workflow the delete goes through just fine.
user: AlexSCorey
issue_11985: state: open
title: Evaluate using host_filter when filtering/querying hosts to create smart inventory
body: 
##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
@AlanCoding pointed out that the hosts endpoint also allows query using `host_filter`.

From the hosts endpoint

<img width="1203" alt="image" src="https://user-images.githubusercontent.com/9053044/161067053-e488c3b3-af9b-45ff-9374-2951d9be3569.png">


When we are querying/filtering hosts to display which ones match a specific search, we query the endpoint
```api/v2/hosts/?inventory__organization=1&name__startswith=t&order_by=name&page=1&page_size=5```

As below
<img width="1792" alt="image" src="https://user-images.githubusercontent.com/9053044/161066185-e35884ca-34ad-4ac7-b694-7b9db5f1a01a.png">

Ideally we should query using `host_filter` to be compatible with the `host_filter` that later it will be saved as part of the smart inventory.

<img width="1788" alt="image" src="https://user-images.githubusercontent.com/9053044/161066786-7f9686a1-4e1f-4d32-9a0a-a3efa039ddda.png">




user: nixocio
issue_11949: state: open
title: Multi cluster / nw segment / proxy support for AWX
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
The challenge: We have multiple subdomains /network segments in our forest. With our compliancy rules, we cannot open ports like 22 and winrm between those segments. So in this case each segment will need a AWX Instance.  

Is there already a way to make use of some kind of proxy? 
Or is there a way to spin up AWX EE 's in each network segment? 
Cannot find anything about this.
user: rverhe
issue_11943: state: open
title: Target IG by hosts
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Hello,

I have hundred of server on one inventory and i want to launch a job template on all theses servers. But all server can't be joined by the same IG due to DMZ. So actually, i have to split my inventory into several inventory and associating specific IG (with severs in right DMZ location) to all inventory and i have to launch the same template several times on all inventory.

Could it be possible to specify the IG to use at host level in the inventory by adding custom var for host and fail back to default IG in case if this var is not set.

all:
  children:
    custom_group:
      hosts:
        server1:
          instance_group: dmz1_ig
        server2:
          instance_group: dmz2_ig
        server3:

Thanks
user: zoullou
issue_11916: state: open
title: Better notification control for "Source Control Update" jobs
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
There was a time when "Source Control Update" jobs did not trigger notifications. I don't know when, recently or not, this was changed. As documented here:
https://docs.ansible.com/ansible-tower/latest/html/userguide/notifications.html

> Project Updates will use notification templates defined on the project and will inherit notification templates from the Organization associated with it

I believe this to be detrimental when there is no way to toggle these notifications off, without affecting the whole project.

Example: We used to be notified once our ansible playbooks had completed (successfully or not), we are now getting 2 notifications: One when the project updates via source control, and another one when the playbooks finish (as expected).

Ideally, it should be possible to toggle off the notification for Source Control Updates.


user: joaodlf
issue_11912: state: open
title: API request Errors are not cleaned up
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

On most lists there is potential for several different types of HTTP errors to be rendered.  For example, you might have a potential for a delete error, and a sync/update error.  

### AWX version

20

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs

### Installation method

docker for mac

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Go to a list that could have several HHTP errors....like the host groups list.  


Create 3 groups by going to Inventories --> Inventory Groups --> Add
Then go to Hosts --> Groups --> Add 
Add 2 of the three groups
Then manipulate the code to force and error on Associate/Add, and Disassociation.
A) Then go back to the UI and add the last group
B) Attempt to disassociate a group

### Expected results

A) Should show an associate error
B) Should show a disassociate error

### Actual results

The associate error is shown but the following error, disassociate is not shown.  This is due to the fact the `useDismissableErrors` does not recognize that the error has changed.  The problem is here https://github.com/ansible/awx/blob/devel/awx/ui/src/hooks/useRequest.js#L67. however we need to be able to tell that function that the error has changed somehow.  We could pass an error type to useDismissable error, so that is can trigger if there is an error, and if the error type has changed.

### Additional information

![errorbug](https://user-images.githubusercontent.com/39280967/158655490-408a41a3-b1dd-4d86-972d-80e1a408dca3.gif)

user: AlexSCorey
issue_11911: state: open
title: Update workflow node aliasing to be seperate from the identifier
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
 - #10592 Added using the identifier as an alias in the Workflow job template visualizer. 

However the Identifier has been setup to be used [as a unique ID](https://github.com/ansible/awx/blob/f99820a3913da47f073dbaca65797567be99bee6/awx_collection/plugins/modules/workflow_job_template_node.py#L124)
```
    identifier:
      description:
        - An identifier for this node that is unique within its workflow.
```
And with the previous UUID system they were unique, and identifiers to differentiate and know which node was which. 

Proposal
An alias field should be added to the API for the workflow_nodes to be used as the alias when displayed in the visualizer, so the user has the option of using Both the Identifier as a unique ID as has been the practice until this previous change, AND an alias that is separate from the identifier. 


user: sean-m-sullivan
issue_11903: state: open
title: Worker failed to run task awx.main.tasks.system.purge_old_stdout_files
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

We see some errors in the container logs of the awx task container:

```
2022-03-14 17:09:00,771 ERROR    [491eb2c3cf884c52aee0b55ac9197a2e] awx.main.dispatch Worker failed to run task awx.main.tasks.system.purge_old_stdout_files(*[], **{}
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/task.py", line 90, in perform_work
--
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/system.py", line 325, in purge_old_stdout_files
    for f in os.listdir(settings.JOBOUTPUT_ROOT):
FileNotFoundError: [Errno 2] No such file or directory: '/var/lib/awx/job_status'
```

The directory `/var/lib/awx/job_status` did not exist.
```
bash-5.1$ ls -lahZ /var/lib/awx/job_status
ls: cannot access '/var/lib/awx/job_status': No such file or directory

bash-5.1$ namei -mo /var/lib/awx
f: /var/lib/awx
 drwxr-xr-x root root /
 drwxr-xr-x root root var
 drwxr-xr-x root root lib
 drwxrwxr-x root root awx
```

### AWX version

20.0.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs

### Installation method

kubernetes

### Modifications

yes

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

```
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx-int
  namespace: awx-int
spec:
  service_type: NodePort

  replicas: 2

  web_resource_requirements:
    requests:
      cpu: 1000m
      memory: 2Gi
    limits:
      cpu: 1000m
      memory: 2Gi
  task_resource_requirements:
    requests:
      cpu: 2000m
      memory: 8Gi
    limits:
      cpu: 2000m
      memory: 8Gi

  ee_images:
    - name: xxxxxxx
      image: xxxxxxx/container/awx-ee:latest
  ee_pull_credentials_secret: awx-int-ee-pull-credentials
  ```
  
  We imported a postgres db dump from our v15.0.1 awx instance bevor we spawned the awx instance.

### Expected results

No error is logged. Directory (/var/lib/awx/job_status) is created?

### Actual results

2022-03-14 17:09:00,771 ERROR    [491eb2c3cf884c52aee0b55ac9197a2e] awx.main.dispatch Worker failed to run task awx.main.tasks.system.purge_old_stdout_files(*[], **{}
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/dispatch/worker/task.py", line 90, in perform_work
--
  File "/var/lib/awx/venv/awx/lib64/python3.9/site-packages/awx/main/tasks/system.py", line 325, in purge_old_stdout_files
    for f in os.listdir(settings.JOBOUTPUT_ROOT):
FileNotFoundError: [Errno 2] No such file or directory: '/var/lib/awx/job_status'


### Additional information

_No response_
user: yw5vruox7dr
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_11892: state: open
title: Inventory pending delete
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

Deleted inventories are stuck in pending delete status for weeks. No templates are associated with the inventories. How do I force delete the inventories? 

Azure cli output: `Inventory is already pending deletion.`

### AWX version

19.4

### Select the relevant components

- [ ] UI
- [X] API
- [ ] Docs

### Installation method

minikube

### Modifications

no

### Ansible version

quay.io/ansible/awx-ee:0.6.0

### Operating system

Centos

### Web browser

_No response_

### Steps to reproduce

Delete inventory

### Expected results

Inventory should be removed

### Actual results

Status is always pending delete

### Additional information

_No response_
user: nicolaibaralmueller
issue_11886: state: open
title: User is created as Normal User when should be SuperUser/Admin
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug Report

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->

 - UI


##### SUMMARY
We have users that are in different domain that are not being added to Admin/Super User when logging in via LDAP.  They are in the correct group.  In addition they do get created and can get logged in, but are Normal User so the basics of LDAP are working.  It seems that maybe its order of operations, or group lookup is failing since the user is a different domain thn the group.  This is using Active Directory.  Setup to use LDAP in Settings

##### ENVIRONMENT
* AWX version: 20.0.0
* AWX install method: operator 
* AWX deployment target: kubernetes
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE
Create LDAP connection. 
LDAP Group Type ActiveDirectory (Also happens with MemberDNGroupeType)

User in question is in child domain europe.domain.com
LDAP Bind account is in usa.domain.com
User in question is a member of the group CN=awx_admins,OU=Groups,DC=usa,DC=domain,DC=com

LDAP User Search

[
  [
    "DC=usa,DC=domain,DC=com",
    "SCOPE_SUBTREE",
    "(sAMAccountName=%(user)s)"
  ],
  [
    "DC=europe,DC=domain,DC=com",
    "SCOPE_SUBTREE",
    "(sAMAccountName=%(user)s)"
  ]
]

LDAP Group Search

[
  "DC=usa,DC=domain,DC=com",
  "SCOPE_SUBTREE",
  "(objectClass=group)"
]


LDAP User Flags By Group
{
  "is_superuser": [
    "CN=awx_admins,OU=Groups,DC=usa,DC=domain,DC=com"
  ]
}
LDAP Organization Map
{
  "TESTING": {
    "remove_users": true,
    "users": [
      "CN=awx_users,OU=Groups,DC=usa,DC=domain,DC=com"
    ],
    "remove_admins": true,
    "admins": "CN=awx_admins,OU=Groups,DC=usa,DC=domain,DC=com"
  }
}


##### EXPECTED RESULTS

User is created with System Administrator permissions

##### ACTUAL RESULTS

User is created as Normal User

##### ADDITIONAL INFORMATION


user: joeywashburn
issue_11879: state: open
title: can not update 19.5 -> 20.0 Fatal glibc error: CPU does not support x86-64-v2
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

can not update 19.5 -> 20.0 
pods does not start due to:
`kubectl logs --previous awx-whz-6d8f7f4589-sw8rv awx-whz-web -n whz
Fatal glibc error: CPU does not support x86-64-v2`

is it expected results on older CPU with x86-64 ?

### AWX version

20.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs

### Installation method

minikube

### Modifications

no

### Ansible version

_No response_

### Operating system

ubuntu 18.04

### Web browser

Chrome

### Steps to reproduce

update using awx-oprator:
git checkout 0.17.0
make deploy

### Expected results

expect replacing of awx-web containers with new version

### Actual results

ee replaced 
awx-web still is old.
```
kubectl get pods -n whz
NAME                                               READY   STATUS             RESTARTS   AGE
awx-operator-controller-manager-646955f456-gdj4w   2/2     Running            4          18d
awx-whz-6d8f7f4589-sw8rv                           2/4     CrashLoopBackOff   10530      18d
awx-whz-855df94bc7-76xlj                           4/4     Running            16         100d
awx-whz-postgres-0                                 1/1     Running            6          155d
```

### Additional information

cpu Flags: fpu de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx lm rep_good nopl cpuid tsc_known_freq pni cx16 hypervisor lahf_lm abm pti
user: amg-web
issue_11851: state: open
title: License Module clarification of manifest parameter
body: https://github.com/ansible/awx/blob/c6209df1e0c6247817747a17b01f3b65f756fdb1/awx_collection/plugins/modules/license.py#L25

The license module documentation does not make it clear that the manifest must exist on the remote machine.  Some note to indicate that the manifest must exist already on the host, would be beneficial.

Most other ansible modules assume that the files exist on the controller, and are transferred (if needed) to the remote machine.  

At a minimum, suggest updating this line to something like:

```
the path to a Red Hat subscription manifest file (a .zip file), which exists on the remote host.
``
user: dkolepp
issue_11849: state: open
title: UX for JT launched by schedule on Job List
body: This issue is inspired by https://github.com/ansible/awx/issues/8321
and related to https://github.com/ansible/awx/pull/11792

Currently, when a JT is launched by a schedule, the expanded row of a job list looks like this:
![image](https://user-images.githubusercontent.com/63685497/156805472-912e3129-07d0-4b20-ba78-d49696d3f014.png)

And after the schedule is deleted it looks like:
![image](https://user-images.githubusercontent.com/63685497/156805609-ddbfb0a4-014b-4271-bffd-b58368841a86.png)


My suggestions/thoughts:

1. For a job launched by a schedule: _next to_ the name/link of the schedule adjacent to the Launched By label, there should be a little icon of a schedule, something like this:  
![image](https://user-images.githubusercontent.com/63685497/156806234-1b6cb8d4-f57f-4026-b267-303ec0a20068.png)


2. For a job launched by a schedule and the schedule has been deleted: _Instead of_ removing the "Launched By" label altogether, I feel it would be a better UX if the Launched By label remained and the text showing said 'Deleted Schedule' in red lettering (or similar text)- something like this:
Launched By: Deleted Schedule

And in this case, the 'Schedule' label would instead disappear (not the 'Launched By' label)
user: akus062381
issue_11828: state: open
title: [JobOutput Doc] Search
body: Search

- During job run
- After job run
user: AlexSCorey
issue_11827: state: open
title: [JobOutput Doc] Expand/Collapse All
body: Explanation of expand collapse all
- How it works and how it changes the state object

user: AlexSCorey
issue_11826: state: open
title: [JobOutput Doc] Expand/Collapse a single job event
body: Explanation of expand collapse a single event
- How it works and how it changes the state object
user: AlexSCorey
issue_11825: state: open
title: [JobOutput Doc] Non-standard cases
body: Explain non-standard cases

- When an event comes into the output that has a parent, but the parent hasn’t arrived yet.
- When an event that has children arrives in output, but the children are not present yet

user: AlexSCorey
issue_11824: state: open
title: [JobOutput Doc] Different job types
body: Different type of job events, and how they relate/interact with the state object

- Tasks
- plays
- events

user: AlexSCorey
issue_11823: state: open
title: [JobOutput Doc] How Job Output works, generally
body: - How output works generally.
- Explain the different state components
- Page up and page down and what’s happening in the background.

user: AlexSCorey
issue_11804: state: open
title: [UI->WF Template] Loading animation cut-off on the left
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

WF template overview: The loading animation arrow is a bit cut-off on the left.

https://user-images.githubusercontent.com/87267/155464821-619b19b5-c4b4-4b6f-b0fe-41cea95f48ac.mp4




### AWX version

20.0.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs

### Installation method

minikube

### Modifications

no

### Ansible version

_No response_

### Operating system

Ubuntu 18.04

### Web browser

Firefox

### Steps to reproduce

Open Workflow template drawer/overview when running: Animation a bit cut-off

### Expected results

No cut-off animation

### Actual results


https://user-images.githubusercontent.com/87267/155464959-4610de4e-4198-46bf-93e0-835a2db321c7.mp4



### Additional information

_No response_
user: Commifreak
issue_11793: state: open
title: AWX do not load group vars after add_host
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

Hello,
I have searched and found the similar case "[add_host module in awx does not behave the same as in ansible command line](https://github.com/ansible/awx/issues/3986)". However, it is not exactly same and the recommendation there won't fix my issue. In my case, the new host is added into memory but not loading group vars.

with Ansible CLI, the playbook is run successfully. 
However, the group vars were not loadeed on AWX after add_host and AWX was returning error for the variable is not found.


### AWX version

17.1.0

### Select the relevant components

- [ ] UI
- [ ] API
- [ ] Docs

### Installation method

docker on linux

### Modifications

no

### Ansible version

2.10.4

### Operating system

Rocky Linux 8.5

### Web browser

Firefox, Chrome

### Steps to reproduce

created job workflow with the playbook content as below and run.
```yaml
- hosts: localhost
  connection: local
  tasks:
    - add_host:
        name: au3-sec-vpn01
        groups: au3
        ansible_host: 10.192.222.137

- hosts: au3-sec-vpn01
  gather_facts: no
  tasks:
    - debug:
        var: ntp_servers
```

### Expected results

AWX should have the same result as Ansible CLI and returns content of the variable ntp_servers
```
PLAY [localhost] *************************************************************************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************************************************************************
ok: [localhost]

TASK [add_host] **************************************************************************************************************************************************************************************************
changed: [localhost]

PLAY [au3-sec-vpn01] *********************************************************************************************************************************************************************************************

TASK [debug] *****************************************************************************************************************************************************************************************************
ok: [au3-sec-vpn01] => {
    "ntp_servers": [
        "0.au.pool.ntp.org",
        "1.au.pool.ntp.org",
        "2.au.pool.ntp.org",
        "3.au.pool.ntp.org"
    ]
}

PLAY RECAP *******************************************************************************************************************************************************************************************************
au3-sec-vpn01              : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
```

### Actual results

```
PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [add_host] ****************************************************************
changed: [localhost]

PLAY [au3-sec-vpn01] ***********************************************************

TASK [debug] *******************************************************************
ok: [au3-sec-vpn01] => {
    "ntp_servers": "VARIABLE IS NOT DEFINED!"
}

PLAY RECAP *********************************************************************
au3-sec-vpn01              : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
```

### Additional information

_No response_
user: SitWatchCloudRise
issue_11775: state: open
title: Survey View of Job Template for System Auditor
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

1. When a system auditor looks at the View Survey tab of a job template they cannot fully see the "action" column label on the paginated table. This persists even when resizing.

See:
![image (6)](https://user-images.githubusercontent.com/37008228/154555524-adc5456e-f95f-4ac5-b29d-c86f2575cec0.png)

2. Additionally, delete button on schedules tab inside JT should be hidden, not disabled.
3. Finally, check boxes next to line items on tabs inside a job template are "useless" and should not appear to the user if they are an auditor with no other rights

### AWX version

devel

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs

### Installation method

docker on linux

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

1. Login as a system admin
2. Navigate to job templates page
3. Create a new job template
4. Navigate to the View Survey tab and add a new survey to the job template
5. Navigate to users page
6. Create a system auditor user
7. Logout and login as the system auditor
8. Navigate to the surveys tab of the job template previously created

### Expected results

1. 'Action' column label should be fully visible
2. Delete button should be hidden (because auditor does not have deletion privledges)
3. Check boxes next to line items should not appear (because auditor is read-only)

### Actual results

1. Action column label is only partially visible (e.g. "Acti...")
2. Delete button exists and is disabled
3. Check boxes next to line items exist and can be clicked on (even though the auditor is read-only)

### Additional information

Note the last two items are more-so UX improvements than bugs. Also these last two items can be seen across other tabs for job templates (not just surveys)
user: InnocentK
issue_11773: state: open
title: Auditor permissions when user is JT admin
body: when logged in as an auditor who has admin rights to a specific JT, and then accessing the jobs tab of that particular JT, the Delete button is disabled and cannot be used. These should be hidden entirely, given the fact that the user (who is a system auditor but also has admin rights to the JT) cannot use those buttons. This follows other places in the UI where Add buttons, for example, will be hidden if a user doesn't have that permission.

![image](https://user-images.githubusercontent.com/63685497/154552817-18582b34-d107-4651-9718-467e268db55e.png)


Steps:

1. as an admin user, do the following:

-       create a job template, launch a job off of it
-       create a system auditor- give this user admin rights to that JT
-       log out
-       log in as system auditor, click on the JT they have admin rights to, click on the Jobs tab
-       notice the disabled Delete button, it should be hidden
user: akus062381
issue_11771: state: open
title: JT admin missing certain rights in Notifications tab inside the JT
body: Issue: When a auditor user is given admin and execute rights to a particular JT, they have all abilities including editing, launching, and deleting the template. 
However- inside the notifications tab, they cannot toggle a notification. I realize that if they were just a normal user, and not an auditor, that this tab wouldn't be visible at all.
But why not? Why can a normal user who is JT admin/executor not see the notifications tab at all?
Giving this type of user auditor rights creates a confusing situation for the user when they access the job template and see a notifications tab that they can't do anything with

![image](https://user-images.githubusercontent.com/63685497/154550786-1aa39ddb-00e6-4118-8538-05f00c30774a.png)

user: akus062381
issue_11769: state: open
title: Failed project sync causes job edit screen to fail with out error.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

If a job template is created from an SCM project and then the SCM project fails a sync you will no longer be able to edit the job template and the UI will not surface the issue for you. The API properly fails (see screen shot) but the UI just "reloads" the edit page w/o displaying the error the API page generated.
![image](https://user-images.githubusercontent.com/32551173/154535537-90db0529-6af7-43cd-a047-795cb09c4461.png)



### AWX version

19.5.2

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs

### Installation method

docker on linux

### Modifications

no

### Ansible version

N/A

### Operating system

N/A

### Web browser

Chrome

### Steps to reproduce

Create an SCM project
Create a JT from the project
Get the project sync to fail
Edit the JT

### Expected results

The UI should display an error stating that the JT could not be saved coupled with the error from the UI.

### Actual results

The edit screen appears to just reload.

### Additional information

_No response_
user: john-westcott-iv
issue_11752: state: open
title: Process tags added to UI that might contain unwanted characters when copying
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
When setting the tags in a job template, sometimes the data on the clipboard contains unwanted characters like '\u200b'. When that happens, the UI does not show the empty character, however, this will skip this tag when referenced while running playbooks
`tags: (u'\u200bmy_playbook_tag')`
user: lucas-benedito
issue_11739: state: open
title: Removing JT Prompts after creating related schedule results in API errors when prompting edited schedule
body: Steps to Reproduce:

1. Create a job template and enable inventory, credential, and extra vars to prompt on launch.
2. Within that JT, create a schedule. Before clicking Save, click Prompt and set the prompt values. Then save.
3. Go back to JT details screen and click edit. Uncheck the prompt on launch boxes for inventory and credential. Leave extra vars prompt on launch enabled.
4. Go back to the schedule you created and click edit. 
5. Click the prompt button inside the edit form. Set the extra vars and save to exit the prompt modal.
6. Click save. See this error:

![image](https://user-images.githubusercontent.com/63685497/153932599-5d4b1d7b-b6c5-4b46-a959-1881d8c1e58d.png)

API response:
![image](https://user-images.githubusercontent.com/63685497/153932768-9783648c-4a9a-44a0-979a-38a3e216ce64.png)

user: akus062381
issue_11716: state: open
title: Dispatcher restarts can leave some work units in a state that can't be cleaned
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Sometimes, a `receptorctl work list` will show a unit from a job which has been finished and deleted.

This appears to come from a dispatcher restart of some sort, where supervisor sends a sigterm signal so that the finalization code does not get called.

After that, if the job is deleted in relatively short order, then it falls through the cracks of our work unit reaping logic.
user: AlanCoding
issue_11707: state: open
title: Remove some of the eslint-disable comments
body: 
##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
There are several places in the code basis that we use - `eslint-disable` and certain rule, we need to verify which ones we should keep in place, and make changes accordingly.

This PR https://github.com/ansible/awx/pull/11568 added a couple more in order to speed up the react-scripts bump process.

user: nixocio
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_11701: state: open
title: NISGroupType for LDAP Group type does not exist
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

Hi,
I'm trying to configure the LDAP using the nisNetGroup integration but it seems like the group type "NISGroupType" it's not present in the dropdown list.

What is the recommendation to follow in this case?

### AWX version

14.1.0

### Select the relevant components

- [X] UI
- [ ] API
- [ ] Docs

### Installation method

docker on linux

### Modifications

no

### Ansible version

2.9

### Operating system

Centos 8

### Web browser

Firefox, Chrome, Safari, Edge

### Steps to reproduce

Go to:
SETTINGS > AUTHENTICATION > LDAP > LDAP GROUP TYPE

### Expected results

NISGroupType does not appear in the list 

![image](https://user-images.githubusercontent.com/22649727/153052136-af18c345-a924-4339-89a8-5ccd0aca463f.png)



### Actual results

![image](https://user-images.githubusercontent.com/22649727/153052136-af18c345-a924-4339-89a8-5ccd0aca463f.png)

### Additional information

N/A
user: ndelaossar
labels: component:authentication: For issues related to authentication
issue_11699: state: open
title: [Performance] Delay per-job of 0.87 seconds due from capturing EE metadata
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
To reproduce:

```
podman run --tty --interactive --rm quay.io/ansible/awx-ee:latest /bin/bash
```

```
bash-4.4$ time entrypoint
Usage: /usr/local/bin/dumb-init [option] program [args]
Try /usr/local/bin/dumb-init --help for full usage.

real	0m0.058s
user	0m0.016s
sys	0m0.040s
```

```
bash-4.4$ time AWX_ISOLATED_DATA_DIR=/tmp/alan entrypoint
Usage: /usr/local/bin/dumb-init [option] program [args]
Try /usr/local/bin/dumb-init --help for full usage.

real	0m0.870s
user	0m0.697s
sys	0m0.135s
```

If you use the `AWX_ISOLATED_DATA_DIR`, then you trigger special bash scripts in the entrypoint:

https://github.com/ansible/ansible-runner/blob/devel/utils/entrypoint.sh

The time delay comes from two commands

```bash
ansible-galaxy collection list --format json 2> /dev/null
ansible --version 2> /dev/null | head -n 1
```

The point of these 2 commands is to save the collection list and the Ansible version. These are saved to the job record, but not presented in the API.

I argue that these would be better associated with execution environments, and as such, this metadata does not need to be collected each job run.
user: AlanCoding
issue_11698: state: open
title: [tech debt] Overly-aggressive unified job save method errors when another process changes model
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
This traceback paints a very complete picture of an error case that we should address.

```
2022-02-08 07:55:56,634 ERROR    [dc755b9d534d46fe80d2413561ce1af4] awx.main.tasks.jobs job 3758 (running) Exception occurred while running task
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks/receptor.py", line 401, in _run_internal
    self.task.instance.save(update_fields=['result_traceback'])
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/models/unified_jobs.py", line 879, in save
    self._update_parent_instance()
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/models/unified_jobs.py", line 801, in _update_parent_instance
    parent_instance.save(update_fields=update_fields)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/models/jobs.py", line 330, in save
    return super(JobTemplate, self).save(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/models/unified_jobs.py", line 280, in save
    super(UnifiedJobTemplate, self).save(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/polymorphic/models.py", line 93, in save
    return super(PolymorphicModel, self).save(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/models/base.py", line 329, in save
    super(PrimordialModel, self).save(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/models/base.py", line 176, in save
    super(CreatedModifiedModel, self).save(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/models/mixins.py", line 566, in save
    super().save(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/base.py", line 743, in save
    self.save_base(using=using, force_insert=force_insert,
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/base.py", line 779, in save_base
    parent_inserted = self._save_parents(cls, using, update_fields)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/base.py", line 808, in _save_parents
    updated = self._save_table(
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/base.py", line 858, in _save_table
    raise DatabaseError("Save with update_fields did not affect any rows.")
django.db.utils.DatabaseError: Save with update_fields did not affect any rows.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks/jobs.py", line 764, in run
    res = receptor_job.run()
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks/receptor.py", line 282, in run
    res = self._run_internal(receptor_ctl)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks/receptor.py", line 405, in _run_internal
    raise RuntimeError(detail)
RuntimeError: Error creating pod: timed out waiting for the condition, ImagePullBackOff
```

At issue here is that `self.task.instance.save(update_fields=['result_traceback'])` should never trigger a call to `_update_parent_instance`, and this causes errors in error processing code... which will result in errors not being reported correctly.

If you peer into the `UnifiedJob.save` method, you can see that it tracks `status_before` and the status after, and compares them, doing an additional `.get` (which it shouldn't do). Then, if the statuses differ, then it incorrectly concludes that it is dealing with a status transition event. This is never true when `update_fields` is given and "status" is not included in the list. Passing `update_fields` is specifically done to isolate actions and keep domains of responsibility separate, to prevent problems like this.

user: AlanCoding
issue_11697: state: open
title: Add notification template form missing error handling for invalid entries
body: When a user is on the add notification template form, and they enter incorrect information into the custom messages ace editors (any of them), the save button won't save the form, BUT, no error message pops up in the UI.

Action steps:
1. Go to add form for notification template
2. enter required information
3. click the customize messages toggle
4. in the first ace editor, delete some brackets
5. click Save
6. nothing happens, and there is an error thrown in the console, but not in the UI for the user
user: akus062381
issue_11678: state: open
title: [rfe] RBAC role to limit job schedule
body: ##### ISSUE TYPE
 - Currently there is not a way to reliably restrict the ability of users or owners of a job template to schedule jobs. In a large shared environment this means that particular users who aggressively schedule jobs can cause performance problems for the cluster. While admins can modify the schedule, that doesn't prevent the user from re-scheduling the job.

##### SUMMARY
- Please create a RBAC permission for job scheduling, so Tower admins can restrict problem users from scheduling jobs.
user: drinkeroftea7
issue_11674: state: open
title: Build nightly container images on CI
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

 Having fresh nightly build containers (with the same awx version/tag) allows containers to include the latest errata which can minimize some security exposure. 

 If we take for instance the current latest container image and run a security scanner `trivy`, we can see some vulnerabilities:


```
$ podman images | grep ansible/awx | grep latest                                                                                                                                                                                                                           14:38:22
quay.io/ansible/awx                                  latest             8294ea9a34d5  13 days ago    1.15 GB


$  trivy image quay.io/ansible/awx:latest | head -10                                                                                                                                                                                                                   

quay.io/ansible/awx:latest (centos 8.5.2111)
============================================
Total: 279 (UNKNOWN: 0, LOW: 108, MEDIUM: 131, HIGH: 36, CRITICAL: 4)

+-----------------------------+------------------+----------+----------------------------------------+-----------------------------------------+-------------------------------------------------+
```

Now, if I build a new one, we can see the issues due to errata applications are gone:

```
trivy  image ansible/awx:19.5.2.dev67                                                                                                                                                                                                                                    14:39:09
2022-02-02T14:39:20.196-0500	INFO	Need to update DB
2022-02-02T14:39:20.197-0500	INFO	Downloading DB...
25.85 MiB / 25.85 MiB [-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------] 100.00% 29.28 MiB p/s 1s

usr/local/bin/helm
==================
Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)


var/lib/awx/venv/awx/lib/python3.9/site-packages/awx/ui/package-lock.json
=========================================================================
Total: 2 (UNKNOWN: 0, LOW: 0, MEDIUM: 2, HIGH: 0, CRITICAL: 0)

+------------------+------------------+----------+-------------------+---------------+---------------------------------------+
|     LIBRARY      | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION |                 TITLE                 |
+------------------+------------------+----------+-------------------+---------------+---------------------------------------+
| follow-redirects | CVE-2022-0155    | MEDIUM   | 1.14.4            | 1.14.7        | follow-redirects: Exposure of         |
|                  |                  |          |                   |               | Private Personal Information          |
|                  |                  |          |                   |               | to an Unauthorized Actor              |
|                  |                  |          |                   |               | -->avd.aquasec.com/nvd/cve-2022-0155  |
+------------------+------------------+          +-------------------+---------------+---------------------------------------+
| nanoid           | CVE-2021-23566   |          | 3.1.23            | 3.1.31        | Exposure of Sensitive Information     |
|                  |                  |          |                   |               | to an Unauthorized Actor in nanoid    |
|                  |                  |          |                   |               | -->avd.aquasec.com/nvd/cve-2021-23566 |
+------------------+------------------+----------+-------------------+---------------+---------------------------------------+
```

user: tchellomello
issue_11661: state: open
title: Survey list check boxes behaving differently with delete modal cancellation
body: On the survey list, if a user checks the box next to a survey, clicks the delete button, and then clicks the cancel button on the modal, when the screen refreshes, the box has been unchecked. 
This behavior is not in keeping with the checkbox behavior on any of the other lists in the UI.

See GIF:
![vokoscreenNG-2022-02-01_14-12-20](https://user-images.githubusercontent.com/63685497/152035842-c851abe2-16e8-4087-9030-afb63febdcd2.gif)


user: akus062381
issue_11650: state: open
title: Ansible Tower Survey enhancements
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
This is an issue to request a change to the Ansible Survey options. It would be much more user friendly to have the option to create user friendly variables and then have that translated to variable in the background. E.g. days of the week. I want the number of the day to be presented to my playbook but my user to see the day of the week as a word in a drop down, e.g. Monday, Tuesday, Wednesday etc.

An example of a playbook would be as follows, the below Ansible module will be used to find files with a date in their name.
The Ansible Tower template has a survey which collects the day of the month, Month of the year and the year with numbers.
I want to display the months to the user as Jan, Feb, March, April, etc etc to make it easier to use. However the file names contain numbers., e.g. /var/log/product/name-of-log-2021-12-28.log

We want the user to be able to chose 28 from the day box, December from the month box and 2021 from the year boxes within the survey in Tower.


Currently, if I want to have this, I must write something like this.
 
```
---
- name: playbook to find logs
   hosts: all
   tasks:
   - name: set month word to number
      set_fact:
         log_month_number: 12
      when: ( log_month_word == "December" )

   - name: find logs
      find:
         paths: /var/log/
         pattern: "{{ log_day_number }}-{{ log_month_number }}-{{ log_year_number }}"{code}
```

Basically, I want the user to be able to select a "pretty" answer from a dropdown and then Tower have the option to set a value to this answer i.e. user selects December and tower injects 12 as the variable.

user: brsanche
issue_11644: state: open
title: Add support for limiting prompt on launch values
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

Like a survey on a job template, I request that `prompt on launch` option can be specified a condition in order not to select unintentional inventory.

A customer requested on both of WFJT and JT.  



user: sugitk
issue_11636: state: open
title: Survey enable/disable toggle is haunted
body: Survey enable/disable toggle has a mind of its own. See gif
![vokoscreenNG-2022-01-28_13-46-01](https://user-images.githubusercontent.com/63685497/151604426-d69ae24b-4273-495e-bf24-88d4b781965c.gif)
.
user: akus062381
issue_11625: state: open
title: Organization deletion- user behavior- not working properly?
body: Fact #1: A user MUST be associated with an organization in order to be created. That organization name will appear both on the user's organization tab, as well as the user's role tab.
Musing: Why is that user not deleted when the organization is deleted?

Fact #2: A user can have role permissions assigned to them within a new organization, and that user's name and role will appear on the Role tab of the user.
Musing: Why does the newly assigned organization not also appear under the User's organization tab? The originally assigned organization's name did. How else can the organization list under a user have org names populated on it, aside from the initial creation of the user? This seems to render the organization tab inside of a user sort of unnecessary.
user: akus062381
issue_11624: state: open
title: Missing Resource bug- affected resources- problem
body: Normal UI behavior:
When a resource attached to a JT is deleted, the user will see a little warning icon on the screen, like so:
![image](https://user-images.githubusercontent.com/63685497/151422184-2bdffd21-56e0-4b03-86e1-bca31bb5aeea.png)


>>>Possible bug:
When a user deletes the organization attached to a project, the project list does not alert the user to the absence of that organization in the same way. Instead:
![image](https://user-images.githubusercontent.com/63685497/151422312-9dd0c174-377e-48ad-96bd-21fe414eb697.png)


>>>Possible bug:
When the user deletes an organization that has a related inventory, an alert warning does pop up like so:
![image](https://user-images.githubusercontent.com/63685497/151422444-c71b0cb8-2b43-4ad8-bebf-bc7ee0eb42c6.png)

HOWEVER: The deletion of the organization also deletes the inventory with no warning at all to the user. 


user: akus062381
issue_11623: state: open
title: Variable stays in awx inventory even it is deleted in git repo.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

Using sourced from project inventory update group_vars/all.yaml variables are not deleted
After removing variable in git repo group_vars/all.yaml , it stays in awx default groups vars although it is gone.
Change value of variable - OK
Specific groups variables are not effected by this
Specific host vars  are not effected by this.

Inventory has these "Enabled Options":
 Overwrite local groups and hosts from remote inventory source
 Overwrite local variables from remote inventory source
 Update on project update

``` 
diff --git a/inventory/avv-prod/group_vars/all.yaml b/inventory/avv-prod/group_vars/all.yaml
index af2262cf..2a7c90de 100644
--- a/inventory/avv-prod/group_vars/all.yaml
+++ b/inventory/avv-prod/group_vars/all.yaml
@@ -52,4 +52,3 @@ git_dest: "{{ lookup('env', 'PWD') }}"
 grafana_url: "https://grafana.host.zz"
 grafana_user: "admin"
 grafana_password: "123456"
-test_var: test_zzz
```

After project refresh (+inventory update on dependency): 

https://awx-test.host.zz/#/inventories/inventory/8/details
Inventories -> avv-prod -> Variables 

```
<skiped>
grafana_url: "https://grafana.host.zz"
grafana_user: "admin"
grafana_password: "123456"
test_var: test_zzz
```


### AWX version

19.5.1

### Installation method

kubernetes

### Modifications

yes

### Ansible version

2.12.1

### Operating system

Debian 10.11

### Web browser

_No response_

### Steps to reproduce

Install awx 19.5.1 using operator latest on Kubernetes
Create  inventory which is sourced from project using options:
```
 Overwrite local groups and hosts from remote inventory source
 Overwrite local variables from remote inventory source
 Update on project update
```
Add variable to inventory git repo group_vars/all.yaml
Commit git, push git,  update project on awx.
Check your variable in awx inventory group all. 
Delete it in git 
Commit git, push git,  update project on awx.
Check your variable in awx inventory group all.   

  


### Expected results

It should be gone.

### Actual results

It still exists.

### Additional information

Custom-ee

```
(.local) [d@z1 ansible-builder]$ cat requirements.txt 
urllib3
boto3
influxdb
dnspython
netaddr
psutil
bcrypt
cryptography>=3.0
Jinja2==2.11.3
jmespath==0.10.0
paramiko
pyasn1
PyNaCl
python-dateutil
six
supervisor
virtualenv
netaddr
asn1crypto
babel
cffi
idna
markupsafe
ply
pycparser
pytz
pyyaml
ara
PyMySQL
```

```
(.local) [domas@x1 ansible-builder]$ cat requirements.yml 
---
collections:
  - community.general
  - ansible.posix
  - ansible.utils
  - community.aws
  - community.crypto
  - community.grafana
  - community.mysql
  - community.zabbix
  - community.crypto
```




user: kzinas-adv
issue_11603: state: open
title: LDAP Client Certificate Support
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
It would be nice to support TLS Client Certificates for LDAP authentication mechanism. Google LDAP requires client certificates making it impossible to use AWX with Google LDAP directly.
user: andrewshulgin
labels: component:authentication: For issues related to authentication
issue_11596: state: open
title: Replace dagre
body: 
##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Replace dagre. It was deprecated.

See: https://github.com/dagrejs/dagre

user: nixocio
labels: needs_refinement: Apply to items in 'Backlog' that need refinement.
issue_11595: state: open
title: Get documentation for AWX KIT
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Write a small quick start guide for AWX KIT: https://github.com/ansible/awx/blob/devel/awxkit/README.md

user: riadhhamdi
issue_11593: state: open
title: Docker install instructions do not mention how to add awx-logos
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

I've noticed that in the current version of the installation guide there's no information how to install AWX in Docker with logos from awx-logos. Is it even a possibility?

### AWX version

19.5.0

### Installation method

docker on linux

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. Open the installation instructions for AWX in Docker.
2. Try to find information how to add the real AWX logos.

### Expected results

Information should be there

### Actual results

There is no information

### Additional information

[https://github.com/ansible/awx/blob/devel/tools/docker-compose/README.md](url)
user: Bart97
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_11586: state: open
title: AWX CLI installation instructions don't work as described
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](https://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I might not receive a timely response.

### Summary

following the docs here https://github.com/ansible/awx/blob/19.5.0/awxkit/awxkit/cli/docs/source/install.rst

I get the following error(s):

```
LookupError: setuptools-scm was unable to detect version for /private/var/folders/xp/33zq06rn0m3gr912fmh0ph3w0000gn/T/pip-install-n7cypdcn/awxkit_77096e0915ed4df3ae4de4f71d700f0b.

  Make sure you're either building from a fully intact git repository or PyPI tarballs. Most other sources (such as GitHub's tarballs, a git checkout without the .git folder) don't contain the necessary metadata and will not work.

  For example, if you're using pip, instead of https://github.com/user/proj/archive/master.zip use git+https://github.com/user/proj.git#egg=proj
  ----------------------------------------
WARNING: Discarding https://github.com/ansible/awx/archive/19.5.1.tar.gz#egg=awxkit&subdirectory=awxkit. Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
ERROR: Could not find a version that satisfies the requirement awxkit (unavailable) (from versions: 13.0.0, 14.0.0, 14.1.0, 15.0.0, 15.0.1, 16.0.0, 17.0.0, 17.0.1, 17.1.0, 18.0.0, 19.0.0, 19.1.0, 19.2.0, 19.2.1, 19.2.2, 19.3.0, 19.4.0)
ERROR: No matching distribution found for awxkit (unavailable)
```

Python 3.9.3, OSX

### AWX version

19.5.0

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.11.3

### Operating system

OSX

### Web browser

_No response_

### Steps to reproduce

Attempt to install AWX CLI with instructions in docs

### Expected results

`awx --help` has output

### Actual results

Failure to install

### Additional information

_No response_
user: Throckmortra
issue_11583: state: open
title: Project sync failure dashboard reporting- search params need to be updated
body: When a project sync ends in failure, it sometimes show on the dashboard in the Project Sync Failure count. But when the user clicks the count and is redirected to the search results, no results are shown. 
This is because the search params are set to Failed and Canceled. But technically, a project sync that ends in Error should be included as a param here to give the user the most accurate information.

![image](https://user-images.githubusercontent.com/63685497/150571873-353b8627-3e33-483e-87eb-2a81aaab740c.png)
![image](https://user-images.githubusercontent.com/63685497/150571905-6fa0bd57-5fec-4319-98fd-36dce1614e78.png)

user: akus062381
issue_11567: state: open
title: UI Text Display FullForm Width
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
On the UI display screens it would be nice if we can make a text field span the entire form so that longer text strings are not severely word wrapped. For example, on the logging edit screen in the `Log Format For API 4XX Errors ` field we can see:
![image](https://user-images.githubusercontent.com/32551173/150218854-5690803e-9dde-44d2-af6b-268ea9400ef2.png)

On the edit screen we manipulate the fields to use FormFullWidthLayout to expand them to the full form width:
![image](https://user-images.githubusercontent.com/32551173/150219332-285159eb-135f-46ff-b645-9b977d3391ab.png)

user: john-westcott-iv
issue_11557: state: open
title: Improve event processing timings by eliminating `-partial.json` event data file writes
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Re-do the pull request here:

https://github.com/ansible/ansible-runner/pull/269

Make all tests in ansible-runner pass, verify functionality with AWX, and hand over to be performance tested.

user: AlanCoding
issue_11552: state: open
title: Access to an external network from podman executed container and certyfication (docker-compose installation)
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Installation method: docker-compose 
AWX version: 19.5.0

After installing AWX and starting the template, executing the configuration on the external machine to which the `tools_awx_1 ` container was accessed, it turned out that it was not possible to connect to this machine via ssh. Podman `awx_ee ` container did not have access to this machine. The same with ca, which was on the docker container.

My quick workaround:
I added additional options in `build_execution_environment_params ` method for `contianer_options`. I added for run docker `--network=host` flags and `volume` with ca.

file: `awx/awx/main/tasks.py`

` 

def build_execution_environment_params(self, instance, private_data_dir):

        if settings.IS_K8S:
            return {}

        image = instance.execution_environment.image
        params = {
            "container_image": image,
            "process_isolation": True,
            "process_isolation_executable": "podman",  # need to provide, runner enforces default via argparse
            "container_options": ['--user=root', "--network=host", "--volume=/etc/pki/tls/certs/ca-bundle.crt:/etc/pki/tls/certs/ca-bundle.crt"],
        }

        if instance.execution_environment.credential:
            cred = instance.execution_environment.credential
            if all([cred.has_input(field_name) for field_name in ('host', 'username', 'password')]):
                host = cred.get_input('host')
                username = cred.get_input('username')
                password = cred.get_input('password')
                verify_ssl = cred.get_input('verify_ssl')
                params['container_auth_data'] = {'host': host, 'username': username, 'password': password, 'verify_ssl': verify_ssl}
            else:
                raise RuntimeError('Please recheck that your host, username, and password fields are all filled.')

        pull = instance.execution_environment.pull
        if pull:
            params['container_options'].append(f'--pull={pull}')

        if settings.AWX_ISOLATION_SHOW_PATHS:
            params['container_volume_mounts'] = []
            for this_path in settings.AWX_ISOLATION_SHOW_PATHS:
                # Using z allows the dir to mounted by multiple containers
                # Uppercase Z restricts access (in weird ways) to 1 container at a time
                params['container_volume_mounts'].append(f'{this_path}:{this_path}:z')
        return params
`



Is there a better solution? So as not to change the internal code of the application?



user: pitman123
issue_11542: state: open
title: Inventory source from project does not work anymore in 19.4.0 or 19.5.0
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Not possible to create an inventory sourced from a git project. 



### AWX version

19.4.0

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

RHEL 8

### Web browser

Chrome

### Steps to reproduce

Create a project that points to a GIT repository with the inventory definition
Sync the project
Create an inventory with a source that references the above project
Select the inventory file from the drop down menu
![image](https://user-images.githubusercontent.com/3233558/149505221-4e9109fe-bc29-4ec9-94f8-b39175f5447b.png)
Click **Sync**

### Expected results

Inventory source sync succeed, inventory created with groups and hosts

### Actual results

Inventory source sync has errors and the inventory is not created/updated

```
ansible-inventory [core 2.11.3.post0] 
  config file = None
  configured module search path = ['/home/runner/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/site-packages/ansible
  ansible collection location = /runner/requirements_collections:/home/runner/.ansible/collections:/usr/share/ansible/collections:/usr/share/automation-controller/collections
  executable location = /usr/local/bin/ansible-inventory
  python version = 3.8.6 (default, Jan 29 2021, 17:38:16) [GCC 8.4.1 20200928 (Red Hat 8.4.1-1)]
  jinja version = 2.10.3
  libyaml = True
No config file found; using defaults
[WARNING]: Ignoring invalid path provided to plugin path:
'/runner/project/integration' is not a directory
setting up inventory plugins
host_list declined parsing /runner/project/integration/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
script declined parsing /runner/project/integration/hosts as it did not pass its verify_file() method
auto declined parsing /runner/project/integration/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
yaml declined parsing /runner/project/integration/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
ini declined parsing /runner/project/integration/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
toml declined parsing /runner/project/integration/hosts as it did not pass its verify_file() method
[WARNING]: Unable to parse /runner/project/integration/hosts as an inventory
source
ERROR! No inventory was parsed, please check your configuration and options.
```

### Additional information

I have noticed that the worker pod being created does not have any volume references to the projects directory. 
Also the custom ansible.cfg being defined for the ee_environment does not get loaded in the worker node.

``` yaml
containers:
    - name: worker
      image: my_satellite/ansible/awx-ee:0.6.0
      args:
        - ansible-runner
        - worker
        - '--private-data-dir=/runner'
      resources: {}
      volumeMounts:
        - name: kube-api-access-k9m9b
          readOnly: true
          mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      terminationMessagePath: /dev/termination-log
      terminationMessagePolicy: File
      imagePullPolicy: IfNotPresent
      stdin: true
      stdinOnce: true
```
user: maveleo
issue_11531: state: open
title: AWX 19 - Support 24 hours format for timestamps
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Currently AWX 19 uses 12 hours date format mm/dd/yy, for example: 1/13/2022, 1:43:43 PM

Feature request is to support (configurable) 24 hours date format dd/mm/yy in AWX.

Timestamps are used for job details, scheduler, activity stream etc. 
Example fields: Created, Last Modified, Start Time, Next Run etc.
user: CWollinger
issue_11526: state: open
title: Add support for autoscaling the control plane
body: We are able to horizontally scale our workers due to the one-pod-per-job model that came about with the introduction of Execution Environments. However, at some point, the system _will_ fall over when one of the services in the control plane gets overwhelmed. For example, we've received a recent report that Redis starts to OOM if the callback receiver can't keep up with the amount of events that are being emitted.

Ideally, we would be able to automatically scale the control plane as well. In the past this was not possible due to our inability to target specific pods when scaling down. Kubernetes will delete pods at random, which would cause any jobs running on those pods to fail. Kubernetes 1.21 introduced a feature called [Pod deletion cost](https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/#pod-deletion-cost) that may help with this. Some exploration is needed to assess whether or not this is actually possible. One thing I'm unsure of is how this is going to work (or not) with the awx-operator.


user: shanemcd
issue_11524: state: open
title: Add HA database support from Cockroach or citusdata
body: ##### ISSUE TYPE
 - Add support for additional databases that provide better High Availability 

##### SUMMARY
Add support for CockroachDB or Citus for better HA capabilities. 

[https://github.com/citusdata/citus](url)

[https://www.cockroachlabs.com](url)

user: agilleyrh
issue_11519: state: open
title: 400 HTTP error when trying to relaunch on failed hosts
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

When you try to "relaunch job on failed hosts" for job that completely failed because of SyntaxError, AWX returns 400 error.

### AWX version

19.4.0

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Firefox

### Steps to reproduce

1. Create a job from playbook with a syntax error
2. Run the job (it fails)
3. Click "relaunch job on failed hosts" in the failed job

### Expected results

Either:

Retry the job on all hosts (for example when the job template's project was updated meanwhile)

or:

Show a better error message ("You cannot relaunch a job with syntax error." or such)

### Actual results

Pop-up with the following:

Error!
Failed to launch job.

Details
POST /api/v2/jobs/5826/relaunch/ 400
Cannot retry on failed hosts, playbook stats not available.

### Additional information

_No response_
user: radek-sprta
issue_11500: state: open
title: improve workflow editing of sub-job templates (jump to job template edit window from workflow)
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
The feature idea is to make it easier to get to the job template window (where you can edit things around the job template such as survey, execution environment the JT uses, etc).

**Problem Situation**

1. You start noticing jobs failing in your dashboard or insights. 
2. You see that it is a workflow that is scheduled to run every 4 hours
3. You look at the log (last playbook run) and realize that a bad EE got pushed out

**Fix**
you want to assign the job templates a new EE that you have published to your registry

The problem is.... if you click on the workflow, you can't actually see what job templates are assigned until you click the visualizer.  When you click the visualizer it will NOT take you to the sub-job templates.  

The only way to figure out which job templates belong to which workflow is to click on the visualizer, copy the name of the job, then go back to the job templates window, then find the job, then edit the job template to assign the new EE.  Repeat this for all unique Job Templates that are part of the workflow.

The only faster way to do this... is to search for job templates that belong to a workflow (sorta backwards...) so there is a away around this but it should be really simple to click on a job template and "EDIT" it from the visualizer... or somewhere in the workflow view (jump to the sub-job template)
user: IPvSean
issue_11498: state: open
title: chore : use --no-cache-dir flag to pip in dockerfiles to save space
body: <!--- changelog-entry
# Fill in 'msg' below to have an entry automatically added to the next release changelog.
# Leaving 'msg' blank will not generate a changelog entry for this PR.
# Please ensure this is a simple (and readable) one-line string.
---
msg: "chore : use --no-cache-dir flag to pip in dockerfiles to save space"
-->

##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

using --no-cache-dir flag in pip install ,make sure downloaded packages
by pip don't cached on system . This is a best practice which make sure
to fetch from repo instead of using local cached one . Further , in case
of Docker Containers , by restricting caching , we can reduce image size.
In term of stats , it depends upon the number of python packages
multiplied by their respective size . e.g for heavy packages with a lot
of dependencies it reduce a lot by don't caching pip packages.

Further , more detail information can be found at

https://medium.com/sciforce/strategies-of-docker-images-optimization-2ca9cc5719b6

Signed-off-by: Pratik Raj <rajpratik71@gmail.com>

##### ISSUE TYPE
 - Feature Pull Request

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API

user: Rajpratik71
labels: community pull request: Applied to community based pull requests for filtering
issue_11490: state: open
title: AWX - EC2 dynamic inventory source not grouping properly
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Setup I'm working with consists of AWX and a single inventory which has multiple sources consisting of 1 static (sourced from a project) and around 30 dynamic (Amazon EC2) inventory types.

Configuration of each dynamic inventory source is done by using following configuration:

```yaml
---
# Set Inventory hostname
hostnames:
  - "tag:Name"
  - dns-name
# Add hosts only tagged with Ansible tag
filters:
  tag:Ansible:
    - "True"
    - "true"
  instance-state-name: running
keyed_groups:
  # Add hosts to tag_Name_Value groups for each Name/Value tag pair
  - prefix: tag
    key: tags
  # Group hosts per AWS Owner ID
  - prefix: owner
    key: owner_id | string
compose:
  ansible_host: public_ip_address
  ansible_port: tags.SSHPort|default("22")
```

Usually, this configuration works as it should from my perspective, as I get the inventory consisting of:
- only hosts that are running
- only hosts that have tag "Ansible=True"
- all hosts are grouped per tags and per owner

To have the inventory up-to-date, there are scheduled jobs which trigger during the night and around 3-4-5 inventories get sourced at the time with 15 minute pause in between batches.

Issue I'm experiencing with automatic sync is that not all hosts are grouped under the tag_Ansible_True group, but the behavior is hit'n'miss. Sometimes all hosts are under the tag_Ansible_True group, but most of the time there are only about 40-60 hosts there while there should be much more. When manual sync is trigger by going to Inventories > NAME_OF_THE_INVENTORY -> Sources -> Sync all, all hosts show up under the tag_Ansible_True.

While in "broken state", examining any of the hosts in the inventory that's missing from the tag_Ansible_True group I can see that its tags are properly populated
```yaml
tags:
  Ansible: 'True'
  Environment: staging
  Name: somehostname
```

This points me into direction that something happens during the  host grouping phase while they're being grouped and saved into the inventory. Unfortunately, I'm not so familiar with that part of the system and would appreciate further guidance on how to troubleshoot this further.

Multiple curious things happen:
- sometimes all works, sometimes doesn't
- manual sync-all so far always fixed the issue - without any configuration changes
- all hosts have Ansible=True tag (even those missing from the group)
- usually - whole AWS Account/Inventory source is missing from the group
- hosts missing tag_Ansible_True are also missing aws_ec2 group

### AWX version

19.5.0

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. Dynamic inventory of ~30 soures - Amazon EC2 source - Each source on different AWS account
2. Configuration set up as in description example
3. Scheduled sync doesn't import all the hosts all the time.

### Expected results

All hosts that have tag Ansible=True are grouped into tag_Ansible_True group

### Actual results

Only a subset of hosts that have tag Ansible=True is in tag_Ansible_True Group 

### Additional information

_No response_
user: ivantomica
issue_11488: state: open
title: Allow label modificaiton of credential types
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Allow updating **only** the labels of a credential type without having to recreate the credentials.

Updating the label on a credential type currently results in

> Modifications to inputs are not allowed for credential types that are in use

This means that just to change a label (which as far as I know is only used in the AWX UI) you have to delete any of your credentials from the jobs it's in use, delete the credential, update the label, recreate the credential and add it to the right job.

This seems unnecessarily restrictive as the label itself doesn't affect the input itself or the injector configuration mapping.
user: daenney
issue_11486: state: open
title: duplicate websockets on job output page
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

![ws](https://user-images.githubusercontent.com/8745776/146828467-11b6b192-ba1c-434a-8095-1ec3bdd29faf.png)

2 of the websockets have identical upload/download messages

### AWX version

awx: 19.2.3

### Installation method

docker on linux

### Modifications

no

### Ansible version

_No response_

### Operating system

fedora 33

### Web browser

Chrome

### Steps to reproduce

have browser dev tools open, launch demo job

I see websocket connections on this page, 2 of which have identical content

### Expected results

no dupllicates

### Actual results

duplicates

### Additional information

_No response_
user: fosterseth
issue_11484: state: open
title: Default Job Idle Timeout not working
body: ### Please confirm the following

- [x] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Default Job Idle Timeout setting on AWX job settings is not working properly.

PR #10906 does not seem to work properly when value is set above 5-6 minutes.

### AWX version

AWX 19.5.0

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Firefox, Chrome

### Steps to reproduce

@oweel it looks like idle_timeout might not be working too well.

Even though idle_timeout is set to 0 its still timing out in 5-6 minutes.
![image](https://user-images.githubusercontent.com/13802820/145651803-bf44af7c-6248-4ba6-9de3-f89f73776d70.png)

![image](https://user-images.githubusercontent.com/13802820/145651692-1743bbed-fcef-4669-bfa4-df81dec21d88.png)

- pause:
      minutes: 20

If idle_timeout is set to something like 10 seconds then it works.
![image](https://user-images.githubusercontent.com/13802820/145652040-0bd42da9-c9ca-44ef-a1f7-daa0d674b352.png)
![image](https://user-images.githubusercontent.com/13802820/145652028-f1a5347f-b929-487e-8cb1-e790e806a35b.png)


And if idle_timeout is set to like 9999 it will still timeout in 5-6 minutes:
![image](https://user-images.githubusercontent.com/13802820/145652441-1f2b50d0-1447-4955-8918-c48b57e002f6.png)
![image](https://user-images.githubusercontent.com/13802820/145652449-8f1cac50-71c5-4ad3-845a-b93186e3af8a.png)


### Expected results

No timeout.

### Actual results

Timeouts after 5-6 minutes.


### Additional information

_No response_
user: felipe4334
issue_11480: state: open
title: Increasing Projects Connection Timeout
body: Hello.

AWX: 19.5.0
K3s: v1.21.7+k3s1

For updating our inventory for the Telekom Cloud we using a remote archive (tgz) via "Projects". Unfortunately, the retrieval of the package takes longer than 10 seconds and we get a "Connection failure: The read operation timed out".

I guess the solution would be to increase the connection timeout to 20 seconds but I can't find anything else regarding to "Projects"

We do the same for our GCP inventory and that works without any problems.

Is it possible to increase the connection & the command timeout for a job running in "Projects"?

user: erdna1982
issue_11476: state: open
title: [JobOutput doc Umbrella Issue]Add developer documentation for job output
body: ##### ISSUE TYPE
 - Task

##### SUMMARY
As a team, we've talked about adding documentation around a few key areas of the application where logic is particularly nuanced and not as easy to grok with a glance at the code. The job output panel is one of those places. We already have a precedent for adding architectural documentation to the application (see https://github.com/ansible/awx/blob/devel/awx/ui/docs/APP_ARCHITECTURE.md). The purpose of the documentation is provide other developers (and maybe community members) with a high level understanding of how we consume the API and display the output to the user. A developer that is not familiar with the feature should be able to use this as a starting point for understanding how it works at a high level without needing to know specific implementation details.

Adding some tasks to break up this task into smaller chunks.

- [x] #11822
- [ ] #11823
- [ ] #11824
- [ ] #11825
- [ ] #11826
- [ ] #11827
- [ ] #11828

Each of these tasks gives us a great opportunity to check unit tests for Job Output and fill in any gaps that may exist.
user: mabashian
issue_11468: state: open
title: AWX shows old Version after Upgrade
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Hi AWX-Community,

simple Question: I upgraded AWX from Versoin 19.2.1 (docker version) as described in the documentation (https://github.com/ansible/awx/blob/19.5.0/tools/docker-compose/README.md) which worked perfectly fine.

I pulled the new version and did all the magic:

```
git pull
git checkout tags/19.5.0
make docker-compose-build
make docker-compose
```
I now have new containers running (docker ps shows me that they are newly created), i even built the UI because i got an empty page at first: 
```
docker exec tools_awx_1 make clean-ui ui-devel
```

but now, when i login into the WEB gui at "About" i still get the old version tag 19.2.1. Also if i call https://awx.myname.com/api/v2 i get:

X-API-Product-Version: 19.2.1

how is this possible? do i need to bump the version tag manually?

thank you in advance!

### AWX version

19.5.0

### Installation method

docker on linux

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

* install version 19.2.1
* upgrade to version 19.5.0
* login and get wrong version number

### Expected results

get correct version number at "About"

### Actual results

still shows old version 19.2.1 at "About" in the web-gui

### Additional information

_No response_
user: Zappelphilipp
issue_11453: state: open
title: FIFO pipe code will hang indefinitely preventing any logging output
body: _Originally posted by @hans2520 in https://github.com/ansible/awx/issues/10489#issuecomment-991830200_

In debugging the above issue, I wrote some code that could lead to better reliability with the [open_fifo_write ](https://github.com/ansible/ansible-runner/blob/83b5d4e688d2563b0fe89e0a184e06879ca73eec/ansible_runner/utils/__init__.py#L392)method as well as debuggability.

This method is critical in the startup of an AWX playbook job, and if it hangs, it will give the user _no_ indication whatsoever as to what is happening.

The below code was just my start at improving the method, before the ultimate root cause in my issue (a recent Crowdstrike policy update deploying script-based execution monitoring that blocked the FIFO pipe in the first place) was discovered. The basic goal of the improvement is to force-kill the job if it doesn't finish after a certain allotted time, capture the error, and thereby give the user something useful to work with as to the cause. Also, the `flush`ing here should help reliability some especially with larger keys.

But it's a work in progress for someone else to finish. In particular, the `join` will not have the intended effect if indeed the pipe hasn't finished its writing task. Use of the 'daemon' mode may be required here, in addition, consider using `multiprocessing` library here as opposed to Thread, as that is more likely better suited for this task.

```
def open_fifo_write(path, data):
    '''open_fifo_write opens the fifo named pipe in a new thread.
    This blocks the thread until an external process (such as ssh-agent)
    reads data from the pipe.
    '''
    logger.debug(f'Pipe write! path: {path}')
    try:
        os.mkfifo(path, stat.S_IRUSR | stat.S_IWUSR)
        def write_data(p, d):
            with open(p, 'wb') as f:
                f.write(d)
                f.flush()
        t1 = threading.Thread(target=write_data, args=(path, data))
        t1.start()
        t1.join(3)
        logger.debug(f"thread {t1} finished writing")
    except Exception as e:
       logger.error(e)
       logger.exception(e)
```
user: hans2520
issue_11449: state: open
title: Upon clicking browser refresh button- Controller re-logs in and many unnecessary events occurring
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

When the user clicks Refresh in their browser, a simple refresh is not what happens. A whole host of things happen, mostly related to React, and also, the UI re-logs in again.


https://user-images.githubusercontent.com/63685497/145647722-d2290073-ee86-4f5f-81be-9b653abc28b9.mp4






### AWX version

devel

### Installation method

docker on linux

### Modifications

no

### Ansible version

_No response_

### Operating system

Fedora 35

### Web browser

Chrome

### Steps to reproduce

See video above. Simply access the details screen of a resource and click refresh.

### Expected results

A simple refresh would take place, where the UI would fetch the necessary information from the API.

### Actual results

A lot of React "noise" occurs and the UI re-logs the user in 

### Additional information

_No response_
user: akus062381
issue_11440: state: open
title: Adds metrics for cloud deployments
body: 
msg: "Adds cloud metrics endpoint"


##### SUMMARY

In order to collect metrics for cloud installations we require an unauthenticated endpoint.   This endpoint should not be exposed outside of the pod when running in openshift/k8s and should not be exposed at all for bare metal installations. 

##### ISSUE TYPE

 - Feature Pull Request

##### COMPONENT NAME
 - API


##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 19.5.1.dev29+g868e0e9af4.d20211209
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: benthomasson
issue_11439: state: open
title: Add shellcheck and codespell checks.
body: Add shellcheck and codespell checks to the Makefile.
Spelling corrections in doc files.
<!--- changelog-entry
# Fill in 'msg' below to have an entry automatically added to the next release changelog.
# Leaving 'msg' blank will not generate a changelog entry for this PR.
# Please ensure this is a simple (and readable) one-line string.
---
msg: ""
-->

##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->
This PR adds shellcheck and codespell checks to the Makefile.
Double quotes array expansion tools/docker-compose/entrypoint.sh (SC2068).
Spelling corrections in doc files.
<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Docs Pull Request

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - Makefile
 - tools/docker-compose/entrypoint.sh

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 19.5.1.dev29+g99e2f7c86b
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: joeltenta
issue_11407: state: open
title: Job Output- Applying task filters- expand information provided to user
body: On the job output screen, when a user clicks Events in the search bar and selects any task related filter, the information displayed on the page is very sparse.
It would be good, if the user is filtering by when the task started, that they were also able to see the details of that task.

Instead, here is the current view:
![image](https://user-images.githubusercontent.com/63685497/144263618-0ce92c10-3846-491a-b465-77b7f10f7dbd.png)

user: akus062381
labels: type:feature: prioritized on a feature board
issue_11406: state: open
title: Job Output- change the result of downloading searched content
body: In the job output screen of any job, there is the option for the user to download the results of the job. 
Even if the user performs a search, of any kind, resulting in filtered results on the screen, the result of downloading the output is still the full and complete job results.

Feature idea- when a user performs a search on the job output screen, resulting in filtered results on screen- when the user clicks the download button, they would be able to only download the results of their search.
user: akus062381
issue_11392: state: open
title: [kubernetes] split containers in several pods
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
As already submitted by others in the last years (e.g. in [this issue](https://github.com/ansible/awx/issues/2081)) it would be greatly appreciated if not all containers run in a single pod.
In my company's Openshift cluster for example there are resource limits defined for CPU and RAM per pod. Those could be followed more easily, if not all containers share a pod.
Furthermore outsourcing certain components like awx-task should imho represent a more fitting architecture for a container based deployment and all benefits that come with it. E.g. in high load situations where Openshift would spawn several task-pods, but wouldn't need all pods to have it's own web container etc.
user: M4XMU3
issue_11390: state: open
title: awx-manage run_dispatcher not starting
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

awx jobs not run after upgrade from 19.4.0 to 19.5.0


### AWX version

19.5.0

### Installation method

minikube

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. upgrade awx 19.4.0 to 19.5.0 ( all on minikube)
2. check awx_task container logs
````
 kubectl logs -f deployments/awx awx-task
`````

jobs starts ok IF comment out this lines from [this commit](https://github.com/ansible/awx/commit/24a6edef9ef4122a7a1b597cc9fdabaf93bb8ec4#diff-6fb7bd98930ec6a05c1ae9296b41b63921e1813dcee53895f16769f910917c38) :
`````
# for c in commands:
 #              worktypes.append(c["WorkType"])
`````

### Expected results

awx jobs runs.

### Actual results

awx jobs not starting
awx_task container message:

`````
File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 510, in inspect_execution_nodes
    worktypes.append(c["WorkType"])
TypeError: string indices must be integers
`````

user: agrisvv
issue_11379: state: open
title: Remove or reduce use of the GitPython dependency
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
When doing things with project checkouts, it's a technical debt burden that we do some things with the GitPython dependency, and some things with the `git` module from ansible-core. The bigger principle here is that - **the project_update.yml playbook should be relied on exclusively for management of the project folder**

I would divide up our usage of this library into 3 things:

 - [ ] We use git python to make a copy of the project folder for a job to use
 - [ ] We use git python to determine if a local project sync is necessary
 - [ ] We use git python to restore the project's default tag / revision if a job does the branch override

I previously put up a WIP (now stale) to change how we do the project folder copy:

https://github.com/ansible/awx/pull/7367

But does this actually cause any problems? Yes.

 - https://github.com/ansible/awx/issues/7346
 - https://github.com/ansible/awx/issues/5248
 - https://github.com/ansible/tower/issues/4584
 - https://github.com/ansible/awx/issues/6175

These are all _for the most part_ directly attributable to the use of git python to copy over the needed version of the project source for the job. That is what the WIP was trying to refactor, and doing this is relatively easy. That's low-hanging fruit, so we should do that.

We could locally save a file with the last revision (as known by the API) that a project update last checked out. This is slightly more disruptive of a change to make.

For the job branch override case, the checkout needs to be temporarily switched over to the job's revision (while holding the local project lock) and then changed back to the default reference after it has been copied. It could be very challenging to put this into the `project_update.yml` playbook, and there are a few unanswered technical questions there.

If we did all of these, then the dependency could be entirely removed, which would be nice and help avoid regressing these improvements. Due to time constraints, however, I'd advocate focusing on the first point for now.
user: AlanCoding
issue_11372: state: open
title: Expand permissions to manage notifications
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Currently, the notification admin permissions are defined at organization level.

Notification Admin

- Parent: Org admin
- Allow: Assignment of notifications
- Scope: Organization

Creating and managing Notification Templates can only be done by the notification admin, but assigning the notification should be able to do by the template owner. This is a feature request to provide the ability to expand those permissions Job template owners.
user: zaskan
issue_11365: state: open
title: Avoid errors in error handling when the receptor socket / sockfile goes missing
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Sometimes when things go really bad we see this:

```
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 3173, in _run_internal
    resultsock = receptor_ctl.get_work_results(self.unit_id, return_sockfile=True)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/receptorctl/socket_interface.py", line 248, in get_work_results
    self.writestr(f"work results {unit_id}\n")
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/receptorctl/socket_interface.py", line 48, in writestr
    self._sockfile.write(str.encode())
AttributeError: 'NoneType' object has no attribute 'write'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 1531, in run
    res = receptor_job.run()
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 3076, in run
    res = self._run_internal(receptor_ctl)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 3185, in _run_internal
    raise RuntimeError(detail)
RuntimeError
```

We should avoid digging ourselves deeper in the case that the `receptor_ctl._sockfile` is None.

user: AlanCoding
issue_11362: state: open
title: RFE: use AD Groups as a means to implement authorization using the LDAP authentication option within Tower.
body: ##### ISSUE TYPE
 - Surface an api which allows a direct call to update specific elements of the authentication scheme i.e. settings/ldap/addteammap?organization=<organization>&users=<ldapdn>&remove=true|false
Handle queuing of requests to update internal to the Tower instance, rather than making it a responsibility of the upstream system i.e. it should not be possible for 2 updates to happen concurrently

##### SUMMARY
Under the UI the LDAP configuration is effectively a JSON object in which all top level configuration and individual mapping blocks are top level nodes. In order to add an AD to Tower group mapping to assign access permissions the following options exist:
 
Manually edit the JSON block in the UI 
Via API calls – this entails the following:
Pull the full JSON document for settings/ldap
Locate and edit the block associated with the mapping required

##### POSSIBLE SOLUTION
create an Ansible role that could be used to simplify JSON updates. One such role exists, which was created by a Red Hatter:

https://github.com/skamithi/ansible-tower-ldap-settings

This role allows you to specify the organization map in a playbook format. The role itself could be enhanced to eliminate the cited necessity to supply the entire LDAP settings block, and deliver true patch functionality.


user: agilleyrh
labels: component:authentication: For issues related to authentication
issue_11358: state: open
title: AWX webhook notification not working as per document
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
 - Bug Report


##### COMPONENT NAME
 - API
 - UI


##### SUMMARY
The ansible documentation states that for webhook one can fetch the data from the webhook payload
https://docs.ansible.com/ansible-tower/latest/html/installandreference/notification_parameters_supported.html#
job_metadata - (string) job metadata as a JSON string, for example:
{'url': 'https://towerhost/$/jobs/playbook/13',
 'traceback': '',
 'status': 'running',
 'started': '2019-08-07T21:46:38.362630+00:00',
 'project': 'Stub project',
 'playbook': 'ping.yml',
 'name': 'Stub Job Template',
 'limit': '',
 'inventory': 'Stub Inventory',
 'id': 42,
 'hosts': {},
 'friendly_name': 'Job',
 'finished': False,
 'credential': 'Stub credential',
 'created_by': 'admin'}

the same is mentioned in https://docs.ansible.com/ansible-tower/latest/html/userguide/notifications.html#webhook-payloads section 23.4.10.1

However none of it works and it throws errors in the awx-task logs that there is formatting whenever the variable "{{ job_metadata }}" is referenced the webhook payload


2021-11-17 14:18:04,728 DEBUG    [5dee64b41eb64e6c80cf1b5169331bef] awx.main.dispatch task e495aca5-34ab-49ff-ab43-81cbf5e4214a starting awx.main.tasks.send_notifications(*[[51]])
2021-11-17 14:18:04,751 DEBUG    [9ea7c963e3de4ffba247a056ea4e99ed] awx.main.dispatch task 90e99f7b-3e0e-43f1-bb75-a263d24a98ad starting awx.main.scheduler.tasks.run_task_manager(*[])
2021-11-17 14:18:04,754 DEBUG    [9ea7c963e3de4ffba247a056ea4e99ed] awx.main.scheduler Running task manager.
2021-11-17 14:18:04,761 DEBUG    [9ea7c963e3de4ffba247a056ea4e99ed] awx.main.scheduler Starting Scheduler
2021-11-17 14:18:04,797 DEBUG    [9ea7c963e3de4ffba247a056ea4e99ed] awx.main.scheduler Finishing Scheduler
2021-11-17 14:18:05,371 ERROR    [5dee64b41eb64e6c80cf1b5169331bef] awx.main.notifications.webhook_backend Error sending notification webhook: 400
2021-11-17 14:18:05,373 ERROR    [5dee64b41eb64e6c80cf1b5169331bef] awx.main.tasks Send Notification Failed Error sending notification webhook: 4002021-11-17 14:18:04,728 DEBUG    [5dee64b41eb64e6c80cf1b5169331bef] awx.main.dispatch task e495aca5-34ab-49ff-ab43-81cbf5e4214a starting awx.main.tasks.send_notifications(*[[51]])
2021-11-17 14:18:04,751 DEBUG    [9ea7c963e3de4ffba247a056ea4e99ed] awx.main.dispatch task 90e99f7b-3e0e-43f1-bb75-a263d24a98ad starting awx.main.scheduler.tasks.run_task_manager(*[])
2021-11-17 14:18:04,754 DEBUG    [9ea7c963e3de4ffba247a056ea4e99ed] awx.main.scheduler Running task manager.
2021-11-17 14:18:04,761 DEBUG    [9ea7c963e3de4ffba247a056ea4e99ed] awx.main.scheduler Starting Scheduler
2021-11-17 14:18:04,797 DEBUG    [9ea7c963e3de4ffba247a056ea4e99ed] awx.main.scheduler Finishing Scheduler
2021-11-17 14:18:05,371 ERROR    [5dee64b41eb64e6c80cf1b5169331bef] awx.main.notifications.webhook_backend Error sending notification webhook: 400
2021-11-17 14:18:05,373 ERROR    [5dee64b41eb64e6c80cf1b5169331bef] awx.main.tasks Send Notification Failed Error sending notification webhook: 400
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 354, in send_notifications
    sent = notification.notification_template.send(notification.subject, notification.body)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/models/notifications.py", line 185, in send
    return backend_obj.send_messages([notification_obj])
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/notifications/webhook_backend.py", line 81, in send_messages
    raise Exception(smart_text(_("Error sending notification webhook: {}").format(r.status_code)))
Exception: Error sending notification webhook: 400
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 354, in send_notifications
    sent = notification.notification_template.send(notification.subject, notification.body)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/models/notifications.py", line 185, in send
    return backend_obj.send_messages([notification_obj])
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/notifications/webhook_backend.py", line 81, in send_messages
    raise Exception(smart_text(_("Error sending notification webhook: {}").format(r.status_code)))
Exception: Error sending notification webhook: 400



##### ENVIRONMENT
* AWX version: 19.4.0
* AWX install method: operator
* AWX deployment target: minikube
* Operating System: redhat enterprise linux 7
* Web Browser: google chrome

##### STEPS TO REPRODUCE

Please try and setup a incoming webhook in my case I am using microsoft teams
Now in AWX please setup a notification and in the success job message use the below payload
The payload I am using to send the notification
{
    "@type": "MessageCard",
    "@context": "http://schema.org/extensions",
    "summary": "Job Success: {{ job.name }}",
    "title": "Job Success: {{ job.name }}",
    "themeColor": "008000",
    "sections": [
        {
            "title": "Details",
            "facts": [
                {
                    "name": "Start date",
                    "value": "{{ job.started }}"
                },
                {
                    "name": "End date",
                    "value": "{{ job.finished }}"
                },
                {
                    "name": "Host",
                    "value": "{{ job_metadata }}"
                },
                {
                    "name": "Executed by",
                    "value": "{{ job.summary_fields.created_by.first_name }} {{ job.summary_fields.created_by.last_name }}"
                }
            ]
        }
    ],
    "potentialAction": [
        {
            "@context": "http://schema.org",
            "@type": "ViewAction",
            "name": "View on AWX",
            "target": [
                "{{ url }}"
            ]
        }
    ]
}
##### EXPECTED RESULTS

{'url': 'https://towerhost/$/jobs/playbook/13',
 'traceback': '',
 'status': 'running',
 'started': '2019-08-07T21:46:38.362630+00:00',
 'project': 'Stub project',
 'playbook': 'ping.yml',
 'name': 'Stub Job Template',
 'limit': '',
 'inventory': 'Stub Inventory',
 'id': 42,
 'hosts': {},
 'friendly_name': 'Job',
 'finished': False,
 'credential': 'Stub credential',
 'created_by': 'admin'}

##### ACTUAL RESULTS

2021-11-17 14:18:04,728 DEBUG    [5dee64b41eb64e6c80cf1b5169331bef] awx.main.dispatch task e495aca5-34ab-49ff-ab43-81cbf5e4214a starting awx.main.tasks.send_notifications(*[[51]])
2021-11-17 14:18:04,751 DEBUG    [9ea7c963e3de4ffba247a056ea4e99ed] awx.main.dispatch task 90e99f7b-3e0e-43f1-bb75-a263d24a98ad starting awx.main.scheduler.tasks.run_task_manager(*[])
2021-11-17 14:18:04,754 DEBUG    [9ea7c963e3de4ffba247a056ea4e99ed] awx.main.scheduler Running task manager.
2021-11-17 14:18:04,761 DEBUG    [9ea7c963e3de4ffba247a056ea4e99ed] awx.main.scheduler Starting Scheduler
2021-11-17 14:18:04,797 DEBUG    [9ea7c963e3de4ffba247a056ea4e99ed] awx.main.scheduler Finishing Scheduler
2021-11-17 14:18:05,371 ERROR    [5dee64b41eb64e6c80cf1b5169331bef] awx.main.notifications.webhook_backend Error sending notification webhook: 400
2021-11-17 14:18:05,373 ERROR    [5dee64b41eb64e6c80cf1b5169331bef] awx.main.tasks Send Notification Failed Error sending notification webhook: 400
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 354, in send_notifications
    sent = notification.notification_template.send(notification.subject, notification.body)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/models/notifications.py", line 185, in send
    return backend_obj.send_messages([notification_obj])
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/notifications/webhook_backend.py", line 81, in send_messages
    raise Exception(smart_text(_("Error sending notification webhook: {}").format(r.status_code)))
Exception: Error sending notification webhook: 400

##### ADDITIONAL INFORMATION
NA
user: AbhinitMallick
issue_11357: state: open
title: allow job templates to be ordered by preference
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
add the ability to sort templates and workflows into folders in the UI
user: munizal
issue_11347: state: open
title: Reduce number of UI requests adding all user profile data under one API endpoint
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Reduce number of HTTP requests being made by the UI adding all data related to user profile data under one API endpoint. Right now, there are several requests being made as part of the Config context in order to know if the user is:

* system admin
* auditor
* org admin
* notification admin
* execution environment admin

It would be ideal to provide all data about the user profile under one API endpoint, for instance, users.



user: nixocio
issue_11346: state: open
title: Websockets Tech Debt
body: # Websockets

An `event` is the data artifact of an Ansible callback call. This event flows from Ansible playbooks -> runner -> receptor -> redis -> callback receiver -> (postgres, external logger, websocket)

websocket -> (all other Controller control nodes, all subscribed websocket clients)

All events go to all other Controller nodes & out to all clients that are subscribed to the job. Controller does not filter based on event type or anything like that. This is a problem IF the receiver assumes these events sent over the websockets are reliable and they are not. This becomes apparent as the rate at which we create websockets exceeds our capacity to deliver them. This is what is happening as we build out more and more scale features in Controller. We allow for running more jobs in parallel, which creates more events per second, which requires the websockets to send more events per second, and requires the UI to display more events per second.

But it doesn't have to be this way. We need to decide how we are going to solve this problem.

1. Increase number of websockets we can reliably handle
2. Do not send events over websockets. A periodic count is all the UI NEEDS.
3. Hybrid. Deliver a subset of events reliably over websockets. 

## 1. Increase number of websockets we can reliably handle
This section looks at solving the websocket problem through a performance lense. Since it's a performance problem, we should do all the classic performance things.

A. Agree on a target workload we want the system to support
B. Quantify the current performance
C. Establish the maximum performance the current architecture, technologies

The solution may require reworking the websocket subsystem. We use the term "rework" instead of "rewrite" because we don't want to restrict ourselves to replacing the existing system. For example, we should consider sharding as a solution to meet the target workload requirement(s)

### A. Agree on a target workload we want the system to support
This is our target. It's hard to hit a moving target so let's fix it.

Let's work backwards. How many events per second are going to be created? An event is only created after it is saved into Postgres. Postgres is our bottleneck. How many events per second can Postgres save? **30,000** How did we get that number? Some experimentation a long time ago. The number could use some updating. It will surely have changed after the DB partitioning work. I believe it is heavily dependent on the number of indexes.

**Presume 30,000 events/s max**

Number of Clients | Websocket Events/s Required
-- | --
1 | 30,000
2 | 60,000
4 | 120,000
8 | 240,000
16 | 480,000
32 | 960,000
64 | 1,920,000
128 | 3,840,000

Working backwards even more. Let's look at a real customer Postgres events/s workload that I have seen.

**Presume 4,200 events/s max**

Number of Clients | Websocket Events/s Required
-- | --
1 | 4,200
2 | 8,400
4 | 16,800
8 | 33,600
16 | 67,200
32 | 134,400
64 | 268,800
128 | 537,600

TODO: Is this even doable from a networking bandwidth perspective? (i.e. 1GB/s, 10GB/s, 100GB/s)

We have now presented two potential targets. The first, is the maximum Postgres can generate. The second, is the maximum we have seen in the real world. A 3rd target would consider optimizing our event insertion rate to get Postgres to, say, 100,000 events per second.

The 30,000 per second is what we will target in this document.

### B. Quantify the current performance
TODO: We at least know this should be less than C. Doing this work would further validate the work done in C. i.e. if B performance is > C. then we did B or C wrong.

### C. Establish the maximum performance the current architecture, technologies
Let's start by looking at the maximum performance using the current Technology i.e. channels.

#### Technology Maximum
=~ 200 events per second max to a single websocket client. The response time from job event epoch to the time it reaches the browser also begins to grow as you hit this threshold. The response time grows because the events are being queued. As the queue grows, it hits a limit. When the limit is hit, new websocket events are dropped.

https://github.com/chrismeyersfsu/channels_redis_debug

#### Architecture Maximum
Under our current architecture we require sending all events to all servers. The websocket backplane is fully connected and for any event we send to N-1 other servers. The table below are the bandwidth requirements to send the events across the websocket backplane.

**30,000 events/s @ 2kb & Bandwidth Requirements**

tower nodes | Bandwidth GB/s
-- | --
2 | 0.9155273438
4 | 1.831054688
8 | 3.662109375
16 | 7.32421875
32 | 14.6484375
64 | 29.296875
128 | 58.59375






## 2. Do not send events over websockets

There are two "modes", Job is believed to be running vs. the job is known to not be running.

We have learned that the UI doesn't ACTUALLY need the job events over the websockets to operate correctly. What the UI needs is a periodic update of the NUMBER of events that have been generated.

Off the top of my head. The API can generate this count periodically.

**Can we just completely drop sending job events over the websockets?**
The UI doesn't NEED them & can operate without them. In fact, it would reduce UI complexity to drop this code. They code today around this terrible API deficiency. 

## 3. Hybrid. Deliver a subset of events reliably over websockets. 
This path would allow us to build feature(s) in the UI that rely on displaying a subset of job events. Note that a feature that requires a subset of the events doesn't exist today so we would be building for an unknown future feature here.

The hard engineering problem here is quantifying the subset that the websocket subsystem can reliably delivery. This solution boarders very closely the work in 1. above.

user: chrismeyersfsu
issue_11339: state: open
title: Role to create workflows and manage only those created workflows
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
It would be interesting to have a RBAC role who provides the ability to create workflow job templates and give admin privileges only to those created workflows. Currently, admin users are able to manage all the workflow templates, but there where cases in which you want users to create and become administrators only of the workflow jobs that they created.

user: Alffernandez
labels: type:feature: prioritized on a feature board
issue_11337: state: open
title: Allow OAuth2 Authentication to Azure AD for US Government
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Per an user's request, they would like to initiate an OAuth2 authentication flow from `login.microsoftonline.us`, instead of using Azure AD's global service endpoint (i.e. `login.microsoftonline.com`).

See: https://docs.microsoft.com/en-us/azure/active-directory/develop/authentication-national-cloud#azure-ad-authentication-endpoints

After configuring information for Azure AD authentication, AWX appears to direct the authentication request to `login.microsoftonline.com`.
user: imareporter
labels: component:authentication: For issues related to authentication
issue_11335: state: open
title: White Theme
body: ##### ISSUE TYPE
 - It's possible to get the white theme back?

##### SUMMARY
The White Theme It is much more clean and user friendly 

user: perr063
issue_11330: state: open
title: Add extra_vars to every job event sent over `job_events`
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
This issue is related to the following:

[RFE: Add extra_vars for callbacks to the log for external logger like Splunk](https://github.com/ansible/awx/issues/8702)

User wants to use information that exist in `extra_vars` from a job during the processing of `job_events` in Splunk. It would be easier for the user if the `extra_vars` field and value(s) were included in every event that goes over `job_events`.
user: brsanche
issue_11326: state: open
title: In Survey Spec if the choices is an array of strings the UI fails
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

In the AAP UI when choices are added for a multi select field they are stored as a string with \n as the delimiter. e.g
`choices: "NJ\nPA\OK"`
The REST API allows for the choices to be stored as an array of strings e.g.
```
"choices": [
        "NJ",
        "PA",
        "OK"
      ]
```

So if someone uses a REST API to add a Survey spec and specifies an array/list of strings the REST API call succeeds and stores the value but when the UI tries to display it fails.



### AWX version

AWX 4.0.0

### Installation method

openshift

### Modifications

no

### Ansible version

_No response_

### Operating system

Linux

### Web browser

Chrome

### Steps to reproduce

Create a Job Template 
Add a Survey Spec for the Job Template using a REST API with the following payload

```
POST https://{{TowerIP}}/api/v2/job_templates/{{job_template_id}}/survey_spec/
BODY

  "name": "",
  "description": "",
  "spec": [
    {
      "question_name": "State",
      "question_description": "The state where you live",
      "required": true,
      "type": "multiplechoice",
      "variable": "state",
      "min": 0,
      "max": 1024,
      "new_question": false,
      "default": "",
      "choices": [
        "NJ",
        "PA",
        "OK"
      ]
    }
  ]
}
```

After the Survey Spec has been created click on the Survey Spec "state" field and the UI gets an error
<img width="1229" alt="Screen Shot 2021-11-09 at 4 15 49 PM" src="https://user-images.githubusercontent.com/6452699/141007197-4f6d27e2-7280-4cb6-89a8-6e417b740073.png">

Survey Spec 
<img width="1211" alt="Screen Shot 2021-11-09 at 4 16 19 PM" src="https://user-images.githubusercontent.com/6452699/141007271-ddab072b-d008-4a04-ae08-842783ecae9b.png">



### Expected results

The UI should be able to display the survey spec item or reject the REST API call when arrays are used for choices.

### Actual results

The REST API call succeeds for both GET and POST  but the UI fails.

### Additional information

_No response_
user: mkanoor
issue_11322: state: open
title: RFE:  multi-line TextBox for the Limit field in the job Template 
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
It will be good to have a multi-line text box for the limit Field as the users will be able to add one host per line. Currently its not single line field

user: ammygill
issue_11316: state: open
title: In insufficient capacity case, distinguish between system capacity and user-defined IG capacity
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Why will this job not start?

![Screenshot from 2021-11-08 10-24-27](https://user-images.githubusercontent.com/1385596/140769643-b844c33f-9adc-4079-8ee5-4ef0b145d351.png)

from:
https://github.com/ansible/awx/blob/62e9e7ea80d9b931e33432a3d393bf29be886c2d/awx/main/scheduler/task_manager.py#L554

There's not capacity available, but capacity _of what_? The system has plenty of capacity.

If the user navigates from the job details to the job template details, they can find:

![Screenshot from 2021-11-08 10-27-41](https://user-images.githubusercontent.com/1385596/140769902-d71a1fc2-8a21-4d5f-a7bc-2c4b2c7906fe.png)

In this case, the root cause is that the `awx_2` instance group _has no instances in it_.

Custom instance groups could be defined on:

 - the job template
 - the project
 - the organization

So the steps above are not sufficient to diagnose the problem. In normal circumstances, the diagnosis process would be to check for custom instance groups on the JT, navigate to the project and check that, and then navigate to the organization and check that too. This is absurd.

----

This issue proposes that we should give some heads-up to the user if a job that won't start due to capacity is using custom instance groups.

If the job has no custom instance groups defined, then it should be waiting for the `default` instance group to have capacity. In that case, this is a problem of overall _system_ capacity.

In short, we should distinguish capacity issues due to _system_ capacity versus custom instance group configuration.
user: AlanCoding
issue_11314: state: open
title: [Translation] French
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Hello

We found some little mistake regarding the french translation.
Unfortunatly I haven't found the string in `awx/locale/fr/LC_MESSAGES/`

Launch job is missing a "n" (we have "Lacer un modèle" in place of "Lancer un modèle")

Also it appears username isn't capture when we hover our profile and it display "Détail de l'erreur" (Error detail)
Is it a translation error or a bug ?


### AWX version

19.2.2

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.9

### Operating system

Centos7

### Web browser

Firefox, Chrome

### Steps to reproduce

Try to launch a job, or hover your name.

### Expected results

Launch job = "La**n**cer le job"

Our name is not an error.

### Actual results

Little mistake on the rocket, and our profil is designed by an "Error detail"

### Additional information

_No response_
user: marcpaulchand
labels: component:l10n: localization, translation, japanese, french
issue_11313: state: open
title: Doc: upgrade reference in README is incorrect.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

README points to this doc for upgrading:
https://github.com/ansible/awx/blob/devel/DATA_MIGRATION.md

in turn, that points to a non-existent section in the INSTALL.md doc.

### AWX version

n/a

### Installation method

kubernetes

### Modifications

no

### Ansible version

docs

### Operating system

docs

### Web browser

_No response_

### Steps to reproduce

Reading the docs

### Expected results

A page about upgrading.

### Actual results

A broken link

### Additional information

_No response_
user: howardjones
issue_11310: state: open
title: Option to disable portions of approval notification?
body: We have the following options:

Needs review
Was approved
Was denied
Timed out

Is it possible to disable 'was approved' or have 'was denied' sent to a different email?

Thanks,
user: lplpmc
issue_11308: state: open
title: When the dashboard graph is set to "Past 24 hours", the time axis should be in units of hours
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

_No response_

### AWX version

devel

### Installation method

docker on linux

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

- sign in to awx
- run a job
- view the dashboard
- set dashboard graph option to "Past 24 hours"

### Expected results

The time axis should display hourly increments

### Actual results

The time axis is still in units of days, so all job runs show up under the same data point.

### Additional information

_No response_
user: jakemcdermott
issue_11304: state: open
title: Reduce dropped metrics
body: Controller's management and exposed view of Prometheus metrics is ... special. Hit the /metrics/?subsystem=1 endpoint for ANY Controller node and you get the subsystem metrics for ALL Controller nodes. The snippet below is a response from node `awx_1` BUT it includes metrics for node `awx_2`.

```
X-API-Node: awx_1


# HELP callback_receiver_events_queue_size_redis Current number of events in redis queue
# TYPE callback_receiver_events_queue_size_redis gauge
callback_receiver_events_queue_size_redis{node="awx_1"} 0
callback_receiver_events_queue_size_redis{node="awx_2"} 0
# HELP callback_receiver_events_popped_redis Number of events popped from redis
# TYPE callback_receiver_events_popped_redis gauge
callback_receiver_events_popped_redis{node="awx_1"} 7225
callback_receiver_events_popped_redis{node="awx_2"} 0
# HELP callback_receiver_events_in_memory Current number of events in memory (in transfer from redis to db)
# TYPE callback_receiver_events_in_memory gauge
callback_receiver_events_in_memory{node="awx_1"} 0
callback_receiver_events_in_memory{node="awx_2"} 0
```

**How are node metrics propagated to all other nodes?**

A periodic task runs that (1) stores the local node metrics to Redis and (2) emits the local node metrics over set of websockets that all Controller nodes are connected to. (3) The metrics payload is received by a Controller node and saved into Redis.


https://github.com/ansible/awx/blob/b5fac4157df2f8c949361a7ca26452f47fc3baf5/awx/settings/defaults.py#L443 ^^^ periodic task
https://github.com/ansible/awx/blob/b5fac4157df2f8c949361a7ca26452f47fc3baf5/awx/main/analytics/subsystem_metrics.py#L214 ^^^ store metrics into local Redis
https://github.com/ansible/awx/blob/b5fac4157df2f8c949361a7ca26452f47fc3baf5/awx/main/analytics/subsystem_metrics.py#L246 ^^^ emit metrics over websockets
https://github.com/ansible/awx/blob/b5fac4157df2f8c949361a7ca26452f47fc3baf5/awx/main/wsbroadcast.py#L150 ^^^ Receive & save metric

**So what is the problem?**

Job event traffic (among other types of traffic) flow through the websockets that all Controller nodes are connected over. Not just the same websocket, but the same Channels Layer channel. Each channel has a queue. Each queue has a capacity. The capacity can be configured per-channel, but that isn't the point. The point is that there is an upper bound on the queue size of the channel and we OFTEN hit that capacity. Emitted websocket messages submitted that would exceed the channel/queue capacity are dropped. This is the problem. Metrics data can be dropped.

**Solution?**

Dedicate a channel to metrics. Currently metrics are going over the only channel that `BroadcastConsumer` uses.

https://github.com/ansible/awx/blob/b5fac4157df2f8c949361a7ca26452f47fc3baf5/awx/main/consumers.py#L93 ^^^ All broadcast websockets join the same channel.
https://github.com/ansible/awx/blob/b5fac4157df2f8c949361a7ca26452f47fc3baf5/awx/settings/defaults.py#L967 ^^^ Broadcast channel name

https://github.com/ansible/awx/blob/b5fac4157df2f8c949361a7ca26452f47fc3baf5/awx/settings/defaults.py#L776 ^^^ What we set the channel capacity to

Note: It's very hard to programatically detect/observe when a channel is overloaded https://github.com/ansible/awx/issues/8760

user: chrismeyersfsu
issue_11303: state: open
title: LDAP username is case-sensitive after first logon
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

After setting up LDAP authentication in the GUI, users can successfully login with their Active Directory credentials.
On the first login attempt, the username is not case sensitive.
However, from the second login attempt onwards, users have to provide their username in capital letters so that authentication succeeds.

I get the following logs from my awx-web container on a failed login:
2021-11-03 14:51:49,340 WARNING  [90f003f372944c4db00830e2f56a033c] awx.api.generics Login failed for user my-admin-user from 10.20.30.44
2021-11-03 14:51:49,345 DEBUG    [90f003f372944c4db00830e2f56a033c] awx.analytics.performance request: <WSGIRequest: POST '/api/login/'>, response_time: 0.099s
2021-11-03 14:51:49,346 WARNING  [90f003f372944c4db00830e2f56a033c] django.request Unauthorized: /api/login/
2021-11-03 14:51:49,346 WARNING  [90f003f372944c4db00830e2f56a033c] django.request Unauthorized: /api/login/

I get the following logs on a successful login:
2021-11-03 14:51:53,123 DEBUG    [f7b5d8199ac64701b656789e5b1d23c3] django_auth_ldap search_s('OU=Limited,OU=Users,OU=ADMI,DC=my,DC=example,DC=domain', 2, '(cn=%(user)s)') returned 1 objects: cn=my-admin-user,ou=limited,ou=users,ou=admi,dc=my,dc=example,dc=domain
2021-11-03 14:51:53,127 DEBUG    [f7b5d8199ac64701b656789e5b1d23c3] django_auth_ldap Populating Django user MY-ADMIN-USER
2021-11-03 14:51:53,130 DEBUG    [f7b5d8199ac64701b656789e5b1d23c3] django_auth_ldap search_s('OU=Limited,OU=Groups,OU=ADMI,DC=my,DC=example,DC=domain', 2, '(&(objectClass=group)(member=cn=my-admin-user,ou=limited,ou=users,ou=admi,dc=my,dc=example,dc=domain))') returned 1 objects: ---redacted---
2021-11-03 14:51:53,220 DEBUG    [f7b5d8199ac64701b656789e5b1d23c3] django_auth_ldap cn=my-admin-user,ou=limited,ou=users,ou=admi,dc=my,dc=example,dc=domain is a member     of ---redacted---
2021-11-03 14:51:53,220 DEBUG    [f7b5d8199ac64701b656789e5b1d23c3] django_auth_ldap cn=my-admin-user,ou=limited,ou=users,ou=admi,dc=my,dc=example,dc=domain is not a member of ---redacted---
2021-11-03 14:51:53,220 DEBUG    [f7b5d8199ac64701b656789e5b1d23c3] django_auth_ldap cn=my-admin-user,ou=limited,ou=users,ou=admi,dc=my,dc=example,dc=domain is not a member of ---redacted---
2021-11-03 14:51:53,241 DEBUG    [f7b5d8199ac64701b656789e5b1d23c3] django_auth_ldap cn=my-admin-user,ou=limited,ou=users,ou=admi,dc=my,dc=example,dc=domain is not a member of ---redacted---
2021-11-03 14:51:53,264 DEBUG    [f7b5d8199ac64701b656789e5b1d23c3] django_auth_ldap cn=my-admin-user,ou=limited,ou=users,ou=admi,dc=my,dc=example,dc=domain is a member     of ---redacted---
2021-11-03 14:51:53,276 DEBUG    [f7b5d8199ac64701b656789e5b1d23c3] django_auth_ldap cn=my-admin-user,ou=limited,ou=users,ou=admi,dc=my,dc=example,dc=domain is not a member of ---redacted---
2021-11-03 14:51:53,281 DEBUG    [f7b5d8199ac64701b656789e5b1d23c3] django_auth_ldap cn=my-admin-user,ou=limited,ou=users,ou=admi,dc=my,dc=example,dc=domain is not a member of ---redacted---
2021-11-03 14:51:53,286 DEBUG    [f7b5d8199ac64701b656789e5b1d23c3] django_auth_ldap cn=my-admin-user,ou=limited,ou=users,ou=admi,dc=my,dc=example,dc=domain is not a member of ---redacted---
2021-11-03 14:51:53,307 INFO     [f7b5d8199ac64701b656789e5b1d23c3] awx.api.generics User my-admin-user logged in from 10.20.30.44



### AWX version

19.3.0

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

- Install AWX via the awx-operator
- Setup LDAP connection to a Microsoft AD via the web GUI
- use the following in the "LDAP User Search" field:
[
  "OU=Limited,OU=Users,OU=ADMI,DC=my,DC=example,DC=domain",
  "SCOPE_SUBTREE",
  "(cn=%(user)s)"
]

### Expected results

Username on login screen is case-insensitive.

### Actual results

Username is case-sensitive after first logon.

### Additional information

_No response_
user: Uquout7o
labels: component:authentication: For issues related to authentication
issue_11301: state: open
title: Jobs in waiting state are blocking other jobs forever
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Sometimes, I notice that some jobs are in waiting state forever and they are blocking other jobs.
I'm not sure why it happens (my only lead is OOM on pods).

### AWX version

19.4.0

### Installation method

kubernetes

### Modifications

yes

### Ansible version

2.11

### Operating system

Centos

### Web browser

Chrome

### Steps to reproduce

Not sure maybe OOM on a pod

### Expected results

It will be great to clean those jobs or make them not blocking

### Actual results

All other scheduled jobs are blocked

### Additional information

_No response_
user: moreiramarti
issue_11295: state: open
title: Version is exposed for not-logged clients through the api
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Currently, the awx version is exposed by the api for not-logged clients using the api. (ej. api/v2/ping - X-API-Product-Version).
It would be nice if we can provide options in order to show/hide those variables exposed for not-logged clients.

```
X-API-Node
X-API-Product-Name
X-API-Product-Version
X-API-Time
```


user: zaskan
issue_11291: state: open
title: awxkit python API: add example code
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

There are some few examples for using awxkit as a CLI tool in https://github.com/ansible/awx/blob/393369a/awxkit/awxkit/cli/docs/source/examples.rst 

What is lacking, however, are examples for importing awxkit into own python code to interface the API. Given the dynamic nature of the library it's not easy to grasp from looking at its source code, either.

I'm aware that the awxkit python API is not considered stable (though I don't recall where I found that statement), but that might not be a hindrance for using it, so some example would be useful.
user: azrdev
issue_11290: state: open
title: add ability to hide relaunch button from jobs endpoint
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Requesting a feature which disable re-launch "rocket" icon from Job menu.
It is a great feature but also has potential danger to re-launching job template by accidentally click on it.

We want to hide (or make it now showing) from Job menu.
Another solution is create an option for template which disable "rocket" icon.
Basically, disable by template level.
user: munizal
issue_11283: state: open
title: RFE: SCM remote archive ability to define the url + an artifact and allow the artifact to be overridden
body: ##### ISSUE TYPE
- When using a git/bitbucket based project, the branch can be overwritten at runtime, however, short of using an api call to override the whole url prior to invoking a job, there is no option to point to a new build with this approach.

##### SUMMARY
 - The ability to point to specific repositories, i.e defining the url + an artifact and allow the artifact to be overridden, this would be similar in function to the git based approach where the branchid drives the version of the playbook which is pulled and used on job invoke.
user: agilleyrh
issue_11275: state: open
title: AWX multiple DNS searchs looking for postgres when postgres container is down
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Hi, we've a crontab job where we make a postgres database backup.
These are the steps of that job:

```
#!/bin/bash

DOCKER=`which docker`
SRC_BACKUP="/opt/postgres/12"
DST_BACKUP="/var/lib/backups/awx/backup_AWX_PG.tar"


function script {

  echo "Obtener el id del contenedor que corre la Base de Datos"
  ID_C_BBDD=`$DOCKER ps -a | grep postgres | tr -s ' ' | cut -f1 -d' '`

  echo "Parada del contenedor de postgres"
  if [ `$DOCKER stop $ID_C_BBDD` != $ID_C_BBDD ]; then
    echo "  ERROR. No existe o no se puede parar el contenedor"
  else
    echo "  INFO. Contenedor $ID_C_BBDD parado"
  fi

  echo "Una vez parada la BBDD se puede hacer un tar"
  tar cvfp $DST_BACKUP $SRC_BACKUP
  if [ $? -ne 0 ]; then
    echo "  ERROR. No se ha realizado el tar"
  else
    echo "  INFO. Fichero tar realizado con éxito"
    echo "  INFO. `ls $DST_BACKUP`"
  fi

  echo "Arranque del contenedor de la BBDD"
  if [ `$DOCKER start $ID_C_BBDD` != $ID_C_BBDD ]; then
    echo "  ERROR. No existe o no se ha podido levantar el contenedor"
  else
    echo "  INFO. Contenedor $ID_C_BBDD arrancado"
  fi

  echo "Proceso de backup finalizado"

}


date +'%b %e %H:%M:%S' >> /var/log/scripts/$(basename $0).log
script | tee -a /var/log/scripts/$(basename $0).log

```
As you can see we stop postgres container to do a postgres files backup.
When we stop docker container AWX seems to start looking for postgres container asking DNS.
This causes DNS attack alerts at out network devices.

How can we stop this?

### AWX version

17.0.1

### Installation method

docker on linux

### Modifications

yes

### Ansible version

_No response_

### Operating system

RHEL 8.1

### Web browser

_No response_

### Steps to reproduce

Stop postgres container.

### Expected results

Stop searching for postgres while docker container is stopped.

### Actual results

Multiple DNS searchs looking for postgres, postgres.<domain> and postgres.<sub>.<domain> detected as possible DNS attack.

### Additional information

We used a local registry to download the docker images. 
The server has not connection to Internet.
user: vipamadi
issue_11272: state: open
title: WIP - replace 8 year old ansiconv with ansi2html
body: <!--- changelog-entry
# Fill in 'msg' below to have an entry automatically added to the next release changelog.
# Leaving 'msg' blank will not generate a changelog entry for this PR.
# Please ensure this is a simple (and readable) one-line string.
---
msg: "Replace dependency 'ansiconv' with 'ansi2html'."
-->

##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->

This PR replaces the `ansiconv` dependency with `ansi2html`.

In 2015 with 7f2a02953290ff3a4e02164c60cc1c3f8487198c the ansi2html dependency - which was using GPL back then - was replaced with ansiconv which is licensed as MIT. Since then no changes to ansiconv have been made and it's still available as the original version 1.0.0. So `requirements/requirements.in` lists it as an `UPGRADE BLOCKER` and suggests replacing rather than upgrading.

With https://github.com/pycontribs/ansi2html/commit/495ca3c5c6123f429865863f8875f9fb9165bdbf a relicensing attempt to LGPLv3+ has been made and was successful. The switch back to ansi2html is now possible.

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bugfix Pull Request

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
19.4.1.dev92+ga8268fba28
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
<!---```

```
-->
user: ziegenberg
labels: dependencies: Pull requests that update a dependency file
issue_11266: state: open
title: Can not create a copy of an inventory in a different organization using the same inventory name
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

I'm working on an automation that is executed from Ansible Tower for migrating all the elements of the Default organization to a new created organization. When trying to migrate the inventories, using the awx.awx.inventory module with the copy_from attribute (where I specify the ID of the inventory I want to copy), the automation fails because it is not possible to copy the inventory in the new organization, using the same inventory name.

### AWX version

19.4.0

### Installation method

docker on linux

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Use the `awx.awx.inventory` module with the following parameters:

- `name`: the name of an inventory that already exists
- `organization`: a new organization that has been created and where we want to create the new inventory (copy_from one that exists on the Default organization)
- `state`: present
- `copy_from`: the ID of the inventory we want to copy from the Default organization

This is the code used, where `inventory_info` is a variable containing all the parameters of the inventory we want to migrate (the info has been requested using a query to the API).
```
- name: Create inventories inside the organization
  awx.awx.inventory:
    name: "{{ inventory_info.name }}"
    organization: "ORG_{{ team_name_create_organization }}"
    state: present
    copy_from: "{{ inventory_info.id }}"
    tower_password: '{{ api_tower_password }}'
    tower_username: '{{ api_tower_user }}'
    tower_host: '{{ api_tower_url }}' 
```

### Expected results

A new inventory will be created in the new organization using the same inventory name. This inventory will be a copy of the one we are specifying on `copy_from`.

### Actual results

The new inventory is not created because the module fails complaining about you can not use the same name for the new inventory:

```
Unable to create inventory INV_I-SSO-ES-TS-MONIT_PREVIOUS: The original object is already named INV_I-SSO-ES-TS-MONIT_PREVIOUS, a copy from it cannot have the same name
```

### Additional information

_No response_
user: casty8
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_11265: state: open
title: Ability to Replenish Job Event Logs to Logging Server
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Please add the ability to specify a Job ID range or select all available Jobs to ship job_events to the logging server.

The use-case is to replenish logs at the logging server which were not shipped due to issues with the logging server at the time the job was running in the controller.

This would allow users to remove logs from the defined range and re-populate them to the logging server.
user: jamesmarshall24
issue_11262: state: open
title: [AWX 19.3.0] Playbook2 can not find the fetched file by Playbook1
body: I want to have a workflow job template which links 2 job templates. Each job template launch a playbook: playbook1 is used to fetch a file from remote host and save it to local path, such as "/tmp/remote_file.txt". playbook2 is used to read the fetched file and do something else.

I have installed AWX v14 on docker and deployed such workflow job template, which always works well. The fetched file was saved on awx_task container.

Now I install AWX v19 on OCP via awx-operator, and deployed such workflow job template. Since AWX v19 runs each job in a separate container, playbook1 is successful (which means the fetched file is successfully saved to "/tmp"), but playbook2 is failed with error:
"FileNotFoundError: [Errno 2] No such file or directory: '/tmp/remote_file.txt' "

Using "set_stats" to pass result between playbooks is a workaround, but it is not applicable if the data to be passed to playbook2 is huge. For example, playbook2 is required to process thousands of files which is fetched by playbook1.
Is it possible to have a shared volume for all containers of each AWX template job, so that these containers can access and share some specific file path?
user: zosmf-Robyn
issue_11249: state: open
title: dynamic inventory plugin  request
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

A feature to support adding dynamic inventory.

awx 19.4
kube 1.20

I have looked at the following and can run on the cli inside the container but it seems difficult to run or include a dynamic inventory to what seems a common requirement from the GUI? Or am I missing something. The gui doesn't seem to have script options like found in earlier version.

https://github.com/ansible/awx/issues/3113#

user: macthev
issue_11243: state: open
title: Job status are not displayed correctly in dashboard due to TimeZone
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Hello,

I open this issue because the job status aren't correctly displayed in the dashboard due to timezone. If a job is launch at 1AM the 13th it will be displayed for the 12th in the dashboard.

The issue occured in AWX 19.2.0 on k8s.


### AWX version

19.2.0

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Firefox, Chrome

### Steps to reproduce

1. Create a new schedule job 
2. Define the Start time to 1AM
3. Set the local timezone to Europe/Paris
![image](https://user-images.githubusercontent.com/14820052/137160170-25660b77-4459-4b12-88c5-479338557be9.png)

4. Save

In the occurences you should see something like this for Local : 
![image](https://user-images.githubusercontent.com/14820052/137152840-704b3abd-5b21-4177-a23d-37f19a52ec36.png)

In the occurences you should see something like this for UTC :
![image](https://user-images.githubusercontent.com/14820052/137152933-0d2b8d10-5add-4c11-9754-a0fc961fb936.png)



### Expected results

In the dashboard, I want to see a point in the correct local timezone to be ISO with the Jobs output 

### Actual results

When the job is started, you can see the correct time of start in the Views/jobs at 1AM BUT in the Dashboard, you can see a point for the day before because of the UTC time at 11PM. 

In the jobs list I can see the correct schedule time : 
![image](https://user-images.githubusercontent.com/14820052/137153140-ac57c8f6-1377-49e5-acee-b1519f372942.png)

But in the dashboard it's for the day before : 
![image](https://user-images.githubusercontent.com/14820052/137153336-015d4383-2e56-479b-af97-86c37574b953.png)

As you can see I have no jobs for the 10/13 but in the jobs list you can see the 10/13/2021 at 1AM

### Additional information

_No response_
user: craph
issue_11240: state: open
title: Default execution environment is not used when EE is not set
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

I had another team member open an issue https://github.com/ansible/workshops/issues/1350 and realized that when we don't explicitly set an Execution Environment to a job template.... it seems to just choose one (probably in order by naming).  

The problem is that in our case, the default EE worked fine.  We later synced the Ansible 2.9 EE.  The job template never explicitly had an EE set, so as soon as the new EE was sync the job started failing for folks.

In order through the WebUI
![image](https://user-images.githubusercontent.com/6537680/137017080-5a86cf08-c1d9-49bd-8dd8-c6e0f93fbc4c.png)

I noticed the EE that was being used was the first one, Ansible 2.9 (which does not contain the `rhel_system_roles.timesync`

I think we should make a choice here:

1. when the EE is NOT set, use the `Default execution environment `

or

2. when the EE is not set, don't let the Job Template exist (error, force an EE to be set).



### AWX version

Ansible Automation Platform 4.0.0

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.11

### Operating system

RHEL 8.4

### Web browser

Chrome

### Steps to reproduce

any AAP 2.X

### Expected results

use the Default Execution Environment and just work

### Actual results

failed with 'redhat.rhel_system_roles.timesync' was not found as indicated in ticket https://github.com/ansible/workshops/issues/1350

### Additional information

N/A, should be easy to replicate by syncing two or more EEs to Automation controller or AWX then seeing what happens when you create a job template and not explicitly set the EE
user: IPvSean
issue_11234: state: open
title: Advanced Search should have a "reset search" option
body: When a user is using the advanced search feature, there should be one button for the user to click if they want their search parameters cleared out. There is a 'clear all filters' button, but there is not one to clear all search parameters.
user: akus062381
issue_11228: state: open
title: [RFE] ability to limit number of job slices
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
* There is currently not a way to set a maximum number of job slices that the user of a job template can request.
* A user can therefore set an unrealistically high number of job slices, degrading the performance of a cluster
* Please provide a way for administrators to limit the number of job slices that can be requested at run time for a job template.
* There is already a setting for limiting the number of forks that can be used for a job. The slice limit would ideally provide a similar configuration interface.

user: drinkeroftea7
issue_11223: state: open
title: Allow job output download the output based on seach/filter applied
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Today, after applying a search OR a filter on the Job output page when the user download the output, the file contains all events instead of the filtered/searched ones.

### AWX version

devel

### Installation method

docker on linux

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

1. Launch any job template with many job events
2. filter the output by search or event
3. click on download output

### Expected results

Only the filtered content to be present in the job output

### Actual results

The txt file contains all job events

### Additional information

_No response_
user: tiagodread
labels: type:feature: prioritized on a feature board
issue_11222: state: open
title: Set AWX_CONTAINER_GROUP_POD_PENDING_TIMEOUT with setting module of awx collection
body: ##### ISSUE TYPE
 - Feature Idea
 
Trying to set  AWX_CONTAINER_GROUP_POD_PENDING_TIMEOUT with settings module of awx collection 

```yaml
- name: Set the value of AWX_CONTAINER_GROUP_POD_PENDING_TIMEOUT
  settings:
    name: "AWX_CONTAINER_GROUP_POD_PENDING_TIMEOUT"
    value: "10m"
```

Raised this error :


```yaml
TASK [Set the value of AWX_CONTAINER_GROUP_POD_PENDING_TIMEOUT] ****************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: KeyError: 'AWX_CONTAINER_GROUP_POD_PENDING_TIMEOUT'
fatal: [localhost]: FAILED! => changed=false 
  module_stderr: |-
    Traceback (most recent call last):
      File "/root/.ansible/tmp/ansible-tmp-1633693454.1335557-74-197260893426883/AnsiballZ_settings.py", line 100, in <module>
        _ansiballz_main()
      File "/root/.ansible/tmp/ansible-tmp-1633693454.1335557-74-197260893426883/AnsiballZ_settings.py", line 92, in _ansiballz_main
        invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)
      File "/root/.ansible/tmp/ansible-tmp-1633693454.1335557-74-197260893426883/AnsiballZ_settings.py", line 40, in invoke_module
        runpy.run_module(mod_name='ansible_collections.awx.awx.plugins.modules.settings', init_globals=dict(_module_fqn='ansible_collections.awx.awx.plugins.modules.settings', _modlib_path=modlib_path),
      File "/usr/lib64/python3.8/runpy.py", line 207, in run_module
        return _run_module_code(code, init_globals, run_name, mod_spec)
      File "/usr/lib64/python3.8/runpy.py", line 97, in _run_module_code
        _run_code(code, mod_globals, init_globals,
      File "/usr/lib64/python3.8/runpy.py", line 87, in _run_code
        exec(code, run_globals)
      File "/tmp/ansible_settings_payload_5v1dphqk/ansible_settings_payload.zip/ansible_collections/awx/awx/plugins/modules/settings.py", line 180, in <module>
      File "/tmp/ansible_settings_payload_5v1dphqk/ansible_settings_payload.zip/ansible_collections/awx/awx/plugins/modules/settings.py", line 140, in main
    KeyError: 'AWX_CONTAINER_GROUP_POD_PENDING_TIMEOUT'
  module_stdout: ''
  msg: |-
    MODULE FAILURE
    See stdout/stderr for the exact error
  rc: 1

```
##### SUMMARY
In some case, we observed that 5 minutes for AWX_CONTAINER_GROUP_POD_PENDING_TIMEOUT is not enough when pods are waiting the cluster to add new node using autoscaling.
It seems not possible to set this setting using  awx collection

user: mick1627
issue_11219: state: open
title: when I sync git project in awx,have some error.
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

ERRO[1208] error unmounting /var/lib/containers/storage/overlay/41a3f216c17eb5b0a6e6f5709893765e5a7dd52b630585d9bbf4717b8812cec3/merged: invalid argument
ERRO[1210] error loading cached network config: network "podman" not found in CNI cache
WARN[1210] falling back to loading from existing plugins on disk
ERRO[1210] Error preparing container e7ee6aa8cab0a1efa5458d3b6f5819fc06da37e4c3cea5606432b6a3a21706bd: error configuring network namespace for container e7ee6aa8cab0a1efa5458d3b6f5819fc06da37e4c3cea5606432b6a3a21706bd: error adding pod ansible_runner_42_ansible_runner_42 to CNI network "podman": running [/usr/sbin/iptables -t nat -A POSTROUTING -s 10.88.0.2 -j CNI-d6a4b69bf70842ac8ffe6d2c -m comment --comment name: "podman" id: "e7ee6aa8cab0a1efa5458d3b6f5819fc06da37e4c3cea5606432b6a3a21706bd" --wait]: exit status 4: iptables v1.8.4 (nf_tables):  RULE_APPEND failed (Invalid argument): rule in chain POSTROUTING

### AWX version

19.4.0

### Installation method

docker on linux

### Modifications

yes

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1. run docker compose success
2. sync git project by awx
3. have error
   ERRO[1208] error unmounting /var/lib/containers/storage/overlay/41a3f216c17eb5b0a6e6f5709893765e5a7dd52b630585d9bbf4717b8812cec3/merged: invalid argument
ERRO[1210] error loading cached network config: network "podman" not found in CNI cache
WARN[1210] falling back to loading from existing plugins on disk
ERRO[1210] Error preparing container e7ee6aa8cab0a1efa5458d3b6f5819fc06da37e4c3cea5606432b6a3a21706bd: error configuring network namespace for container e7ee6aa8cab0a1efa5458d3b6f5819fc06da37e4c3cea5606432b6a3a21706bd: error adding pod ansible_runner_42_ansible_runner_42 to CNI network "podman": running [/usr/sbin/iptables -t nat -A POSTROUTING -s 10.88.0.2 -j CNI-d6a4b69bf70842ac8ffe6d2c -m comment --comment name: "podman" id: "e7ee6aa8cab0a1efa5458d3b6f5819fc06da37e4c3cea5606432b6a3a21706bd" --wait]: exit status 4: iptables v1.8.4 (nf_tables):  RULE_APPEND failed (Invalid argument): rule in chain POSTROUTING

### Expected results

sync success

### Actual results

error:
ERRO[1208] error unmounting /var/lib/containers/storage/overlay/41a3f216c17eb5b0a6e6f5709893765e5a7dd52b630585d9bbf4717b8812cec3/merged: invalid argument
ERRO[1210] error loading cached network config: network "podman" not found in CNI cache
WARN[1210] falling back to loading from existing plugins on disk
ERRO[1210] Error preparing container e7ee6aa8cab0a1efa5458d3b6f5819fc06da37e4c3cea5606432b6a3a21706bd: error configuring network namespace for container e7ee6aa8cab0a1efa5458d3b6f5819fc06da37e4c3cea5606432b6a3a21706bd: error adding pod ansible_runner_42_ansible_runner_42 to CNI network "podman": running [/usr/sbin/iptables -t nat -A POSTROUTING -s 10.88.0.2 -j CNI-d6a4b69bf70842ac8ffe6d2c -m comment --comment name: "podman" id: "e7ee6aa8cab0a1efa5458d3b6f5819fc06da37e4c3cea5606432b6a3a21706bd" --wait]: exit status 4: iptables v1.8.4 (nf_tables):  RULE_APPEND failed (Invalid argument): rule in chain POSTROUTING

### Additional information

_No response_
user: cnxieyang
issue_11210: state: open
title: [RFE] authentication support for PING Federate via OAuth2
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Ansible Tower currently only supports external OAuth2 authentication for Github and Google as documented in https://docs.ansible.com/ansible-tower/latest/html/administration/ent_auth.html.  

It is required to integrate via OAuth2 with the corporate OAuth2 authorization server "PING federate", which follows the OAuth2 standard as documented in https://www.ietf.org/rfc/rfc6749.txt. 

PING federate follows the well established OAuth2 standard (https://www.ietf.org/rfc/rfc6749.txt). Integrating with a standards compliant OAuth2 authorization server for OAuth2 authentication at the API and user interface could be supported by implementing generic OAuth2 IDP support by making Tower AWX act as "resource server" in accordance with rfc6749.

Note: This is different to using the Tower internal OAuth2 authorization server as documented in https://docs.ansible.com/ansible-tower/latest/html/administration/oauth2_token_auth.html

user: tuxonfire
labels: component:authentication: For issues related to authentication
issue_11194: state: open
title: Add Ability to Grant Permissions for Jobs Created with a Project to the Respective Project Admin
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
The request is to add permissions to all jobs created using a particular project to the project admin. This is for environments where project owners have governance over their respective job templates.

user: jamesmarshall24
issue_11190: state: open
title: Provide the option to keep or delete all the child objects on organization deletion
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Currently, we keep org's projects and job templates when we delete a organization. This RFE is for request for an option which could let the user to choose between keeping the child objects or delete them.
user: zaskan
issue_11185: state: open
title: In docker-compose dev environment, tools_receptor_hop should change to run as AWX user
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
If you run with `make docker-compose` you get these

```
$ docker ps --format "table {{.Image}} {{.Names}}"
IMAGE NAMES
quay.io/awx/awx_devel:devel tools_receptor_2
quay.io/awx/awx_devel:devel tools_receptor_1
quay.io/project-receptor/receptor:latest tools_receptor_hop
quay.io/awx/awx_devel:devel tools_awx_1
postgres:12 tools_postgres_1
redis:latest tools_redis_1
```

Look at what user you are in those containers:

```
$ alan_containers="tools_awx_1 tools_receptor_1 tools_receptor_2 tools_receptor_hop"
$ for c in $alan_containers ; do docker exec -it $c whoami ; done
awx
awx
awx
root
```

The reason for this is the container image being used. The image https://quay.io/repository/ansible/receptor?tab=tags has no reason to do anything with an `awx` user.

The previous (now deprecated) plan was to switch over the execution (`tools_receptor_*`) nodes over to some other non-awx user (exactly what and how with the images, unclear).

Now, however, the standard is becoming the execution nodes run under the awx user. This includes hop nodes.

Because of that, the hop node should switch over to the awx user as well as the other containers, and do so by using the same dev image as all the rest.

user: AlanCoding
issue_11182: state: open
title: Create a new workflow role only with "create" permissions
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Currently we can assign the following roles for workflow users/groups:

- Executor: Users can execute workflows 
- Reader: Users can only see the workflows 
- Approver: user can approve workflows 
- Admin: user can Create, Execute and approve the workflow 

For specific use cases, the admins have to be able to create the workflow templates but not to approve them. So, this request is to create a new role "Creator" able to create workflow templates but not to approve them.


user: zaskan
issue_11176: state: open
title: Add Affected Host Count to Job API Endpoint
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
When browsing jobs in the API (/api/v2/jobs/) there is a field called “limit”.  It lists out the hosts that the job was limited to touching based on the inventory selection.  Its listed out as a string, calling out the hosts separated by comma.
It would be very useful if there were a field in this view that called out the total host count based on the limit.

user: munizal
issue_11165: state: open
title: Bulk deletion of jobs leads to internal error
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Bulk deletion of jobs leads to internal error

### AWX version

devel

### Installation method

docker for mac

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1 - Trigger a miscellaneous of several jobs, like, inventory source sync, workflow, and job templates.
2 - Select all of the jobs on the first page to be deleted.
3 - Delete them


### Expected results

All jobs to be deleted.

### Actual results

<img width="1788" alt="image" src="https://user-images.githubusercontent.com/9053044/135274288-2dd4240d-7559-4609-98ea-2e691ae9887b.png">


### Additional information

It is seem like workflow job that trigger then job template to run was deleted first, but I was not able to conclude that was the reason of the internal server failure.


```bash

tools_awx_1     | awx-uwsgi stdout | 172.19.0.1 DELETE /api/v2/project_updates/130/ - HTTP/1.1 204
tools_awx_1     | awx-uwsgi stdout |
tools_awx_1     | awx-uwsgi stdout | 2021-09-29 13:02:34,402 ERROR    [189b3bfd] django.request Internal Server Error: /api/v2/jobs/128/
tools_awx_1     | awx-uwsgi stdout | Traceback (most recent call last):
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/base/base.py", line 240, in _commit
tools_awx_1     | awx-uwsgi stdout |     return self.connection.commit()
tools_awx_1     | awx-uwsgi stdout | psycopg2.errors.ForeignKeyViolation: insert or update on table "main_host" violates foreign key constraint "main_host_last_job_host_summar_b8bd727d_fk_main_jobh"
tools_awx_1     | awx-uwsgi stdout | DETAIL:  Key (last_job_host_summary_id)=(45) is not present in table "main_jobhostsummary".
tools_awx_1     | awx-uwsgi stdout |
tools_awx_1     | awx-uwsgi stdout |
tools_awx_1     | awx-uwsgi stdout | The above exception was the direct cause of the following exception:
tools_awx_1     | awx-uwsgi stdout |
tools_awx_1     | awx-uwsgi stdout | Traceback (most recent call last):
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
tools_awx_1     | awx-uwsgi stdout |     response = get_response(request)
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
tools_awx_1     | awx-uwsgi stdout |     response = self.process_exception_by_middleware(e, request)
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
tools_awx_1     | awx-uwsgi stdout |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
tools_awx_1     | awx-uwsgi stdout |   File "/usr/lib64/python3.8/contextlib.py", line 75, in inner
tools_awx_1     | awx-uwsgi stdout |     return func(*args, **kwds)
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/transaction.py", line 240, in __exit__
tools_awx_1     | awx-uwsgi stdout |     connection.commit()
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/base/base.py", line 262, in commit
tools_awx_1     | awx-uwsgi stdout |     self._commit()
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/base/base.py", line 240, in _commit
tools_awx_1     | awx-uwsgi stdout |     return self.connection.commit()
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/utils.py", line 89, in __exit__
tools_awx_1     | awx-uwsgi stdout |     raise dj_exc_value.with_traceback(traceback) from exc_value
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/base/base.py", line 240, in _commit
tools_awx_1     | awx-uwsgi stdout |     return self.connection.commit()
tools_awx_1     | awx-uwsgi stdout | django.db.utils.IntegrityError: insert or update on table "main_host" violates foreign key constraint "main_host_last_job_host_summar_b8bd727d_fk_main_jobh"
tools_awx_1     | awx-uwsgi stdout | DETAIL:  Key (last_job_host_summary_id)=(45) is not present in table "main_jobhostsummary".
tools_awx_1     | awx-uwsgi stdout |
tools_awx_1     | awx-uwsgi stdout | 2021-09-29 13:02:34,402 ERROR    [189b3bfd] django.request Internal Server Error: /api/v2/jobs/128/
tools_awx_1     | awx-uwsgi stdout | Traceback (most recent call last):
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/base/base.py", line 240, in _commit
tools_awx_1     | awx-uwsgi stdout |     return self.connection.commit()
tools_awx_1     | awx-uwsgi stdout | psycopg2.errors.ForeignKeyViolation: insert or update on table "main_host" violates foreign key constraint "main_host_last_job_host_summar_b8bd727d_fk_main_jobh"
tools_awx_1     | awx-uwsgi stdout | DETAIL:  Key (last_job_host_summary_id)=(45) is not present in table "main_jobhostsummary".
tools_awx_1     | awx-uwsgi stdout |
tools_awx_1     | awx-uwsgi stdout |
tools_awx_1     | awx-uwsgi stdout | The above exception was the direct cause of the following exception:
tools_awx_1     | awx-uwsgi stdout |
tools_awx_1     | awx-uwsgi stdout | Traceback (most recent call last):
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
tools_awx_1     | awx-uwsgi stdout |     response = get_response(request)
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
tools_awx_1     | awx-uwsgi stdout |     response = self.process_exception_by_middleware(e, request)
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
tools_awx_1     | awx-uwsgi stdout |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
tools_awx_1     | awx-uwsgi stdout |   File "/usr/lib64/python3.8/contextlib.py", line 75, in inner
tools_awx_1     | awx-uwsgi stdout |     return func(*args, **kwds)
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/transaction.py", line 240, in __exit__
tools_awx_1     | awx-uwsgi stdout |     connection.commit()
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/base/base.py", line 262, in commit
tools_awx_1     | awx-uwsgi stdout |     self._commit()
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/base/base.py", line 240, in _commit
tools_awx_1     | awx-uwsgi stdout |     return self.connection.commit()
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/utils.py", line 89, in __exit__
tools_awx_1     | awx-uwsgi stdout |     raise dj_exc_value.with_traceback(traceback) from exc_value
tools_awx_1     | awx-uwsgi stdout |   File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/base/base.py", line 240, in _commit
tools_awx_1     | awx-uwsgi stdout |     return self.connection.commit()
tools_awx_1     | awx-uwsgi stdout | django.db.utils.IntegrityError: insert or update on table "main_host" violates foreign key constraint "main_host_last_job_host_summar_b8bd727d_fk_main_jobh"
tools_awx_1     | awx-uwsgi stdout | DETAIL:  Key (last_job_host_summary_id)=(45) is not present in table "main_jobhostsummary".
tools_awx_1     | awx-uwsgi stdout |

```
user: nixocio
issue_11162: state: open
title: The job is not transmitted to the container group in private cloud
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

I tried to execute a job on the contain group on remote cluster running on our private cloud ( openstack).
The pod is created and running but  no project/inventory/artifact are transmitted there and the job is waiting for about 5mis and ends up with error. 
When I executed the same job on the container group in other remote cluster on public cloud( Azure), it worked fine.
Our awx19 instance is running on Azure, too.  
Tcp port 443,22 and kubernetes api ports are open from Azure to out private cloud.
Is there any additional port to be allowed between them?






### AWX version

19.3.0

### Installation method

openshift

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

create a conatiner group on remote cluster.
execute the test job on the container group.

### Expected results

successful job excution

### Actual results

job time out

### Additional information

_No response_
user: Lee-Kwang
issue_11153: state: open
title: Teams should have admin access to an ORG and they should have admin access to  template,projects,inventory(RBAC)
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

The issues which I am talking about is something we are facing when we are managing RBAC using API (awx.awx.role)

##### ISSUE TYPE
 - Teams should have admin access to an ORG and they should have admin access to  template,projects,inventory

##### SUMMARY
 Instead of giving execute permission to teams, teams should have admin access to ORG
As of now we have to give template,project and inventory name to give admin access. Is it possible to give admin access to a teams so that team will have admin privilege to all templates,projects and inventory in that ORG
 

For example: when we use awx.awx.role

```
- team: "team_ops_ir"
      organization: OPS
      role: admin
      state: present
```

Now only execute will work and that will give template execute access


```
- team: "team_ops_ir"
      organization: OPS
      role: execute
      state: present
```
user: dhikrahashim
issue_11152: state: open
title: Jobs failed - Error creating pod - connection refused
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Hi!
over night around jobs are triggered via API. It worked fine so far but last night some jobs failed! oh no!
what went wrong?

### AWX version

19.3.0

### Installation method

minikube

### Modifications

no

### Ansible version

_No response_

### Operating system

Ubuntu 20.04

### Web browser

_No response_

### Steps to reproduce

start job via API but I am unsure if it has to be via API... i guess not

### Expected results

Job being started

### Actual results

4 jobs failed
the last one has no text in "output" but this information:
_failed
Task was marked as running but was not present in the job queue, so it has been marked as failed._

Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 1406, in run
    res = receptor_job.run()
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 2935, in run
    return self._run_internal(receptor_ctl)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 3000, in _run_internal
    raise RuntimeError(detail)
RuntimeError: Error creating pod: pods "automation-job-6494-" is forbidden: etcdserver: request timed out

Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 1406, in run
    res = receptor_job.run()
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 2935, in run
    return self._run_internal(receptor_ctl)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 3000, in _run_internal
    raise RuntimeError(detail)
RuntimeError: Error creating pod: Post "https://10.96.0.1:443/api/v1/namespaces/default/pods": dial tcp 10.96.0.1:443: connect: connection refused

Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 1406, in run
    res = receptor_job.run()
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 2935, in run
    return self._run_internal(receptor_ctl)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 3000, in _run_internal
    raise RuntimeError(detail)
RuntimeError: Error creating pod: Post "https://10.96.0.1:443/api/v1/namespaces/default/pods": dial tcp 10.96.0.1:443: connect: connection refused

### Additional information

_No response_
user: stefanpinter
issue_11126: state: open
title: [ui_next] Disabling an instance should include an alert for the user
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
_**Suggestion #1**_
- [ ] In the Instances tab inside of an instance group, a user can disable an instance.
       Doing so affects the jobs set to run against that instance.
       When a user clicks disable, they may not be aware of the impact it will have.
       I suggest that when they go to disable it, an alert pops up (that they have to click OK on) explaining something like:
       "Disabling this instance will prevent the successful run of linked jobs, and you may notice these jobs stay in a pending 
       state."
       I am suggesting this because I inadvertently disabled an instance, and didn't realize why my jobs just sat pending with no 
       movement. An end user may have the same experience.

![image](https://user-images.githubusercontent.com/63685497/134600332-d677bc76-bb56-4183-8a6e-b88e165b6f17.png)

_**Suggestion #2**_
- [ ] In connection with this, in the jobs list, when a job is stuck in pending (in this case due to an instance being disabled), there is not enough information for the user. The message in the hidden line item of the job (on the jobs list) will merely say (see snippet):

![image](https://user-images.githubusercontent.com/63685497/134600559-b14fd679-271a-4e96-8358-f8a481d109a9.png)

This does not give the user any indication that they should check to see whether the associated instance has been toggled off. This would be helpful information to know, in this case.
user: akus062381
issue_11121: state: open
title: Add ability to use variables in Metadata for External Secret Management Systems
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
**Problem**
At CyberArk, we recommend that all customers create unique root passwords and/or unique private keys for host authentication to *nix hosts.  Since the CyberArk platform manages this credential and can also broker secure sessions to the host, this is the easiest way to reduce the attack surface.

In Ansible community, we have many customers who use a single playbook across many remote hosts to complete such actions as OS Patching, NTP server updates, and more.  Since the playbook can leverage the `inventory_hostname` variable, we can create host vars in the playbook to pull back the unique root password using Jinja variables to inject the `inventory_hostname` into the secret variable ID to dynamically retrieve the proper host's password just-in-time for playbook execution.

In AWX and Ansible Automation Platform, only one Machine or AWS Access Key credential can be assigned to a Job Template.  In order to recreate Ansible community's one playbook to many method would require a 1:1 Job Template for each host.  This is not feasible for medium-to-large enterprises.

**Requested Solution**
Please update the External Secrets Management Systems included out of the box with AWX and Ansible Automation Platform to be able to accept variables, such as `inventory_hostname`.  This would allow us to assign one Machine credential containing that variable to a single Job Template that can iterate across many hosts and dynamically fetch secrets just-in-time based on the host being authenticated to.

user: infamousjoeg
issue_11100: state: open
title: Add UI checks for any certs/keys used which might have expired
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

Now we have various certification chains and signing mechanisms in the mesh, I would like to be able to validate the certs/keys and notify where possible of pending expiry (much like we do with licenses already).

Mesh installer generate keys for signing work - for signing work from control to execution nodes using keys - https://github.com/ansible/tower-packaging/issues/1407 and https://github.com/ansible/receptor/pull/414

/etc/receptor/receptor.conf also contains a number of TLS certs, such as:
```
# TLS
- tls-server:
    name: tls_server
    cert: /etc/receptor/tls/192.168.111.126.crt
    key: /etc/receptor/tls/192.168.111.126.key
    clientcas: /etc/receptor/tls/ca/mesh-CA.crt
    requireclientcert: true

- tls-client:
    name: tls_client
    cert: /etc/receptor/tls/192.168.111.126.crt
    key: /etc/receptor/tls/192.168.111.126.key
    rootcas: /etc/receptor/tls/ca/mesh-CA.crt
    insecureskipverify: false
```

We should inform the user when they are coming up for expiry/renewal. Perhaps a management job which runs periodically, and informs the user 90,60 and 30 days out.


user: ffirg
labels: type:feature: prioritized on a feature board
issue_11094: state: open
title: Schedule created by AWXkit cli tool faills to by open in GUI detail view
body: ### Please confirm the following

- [x] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

I created schedule with command:
`schedule create --name "gitlab update" --organization 1 --unified_job_template 9 --rrule "DTSTART:20210920T130000+0000 RRULE:INTERVAL=1;FREQ=HOURLY` 

It's visible in AWX, but when I want to see details in AWX I got error:
There was an error loading this content. Please reload the page. Back to Dashboard.
`Error: Invalid UNTIL value: 20210920T130000+0000 at Object.f.untilStringToDate (https://<my_url>/static/js/2.11d97623.chunk.js:2:179339) at P (https://<my_url>/static/js/2.11d97623.chunk.js:2:198109) at Ce (https://<my_url>/static/js/2.11d97623.chunk.js:2:215521) at https://<my_url>/static/js/2.11d97623.chunk.js:2:216852 at _e (https://<my_url>/static/js/2.11d97623.chunk.js:2:217411) at o_ (https://<my_url>/static/js/main.11ca6dfe.chunk.js:1:634636) at Zo (https://<my_url>/static/js/2.11d97623.chunk.js:2:1358657) at Ss (https://<my_url>/static/js/2.11d97623.chunk.js:2:1404887) at vl (https://<my_url>/static/js/2.11d97623.chunk.js:2:1397614) at ml (https://<my_url>/static/js/2.11d97623.chunk.js:2:1397539)
`

If i tried create schedule with  `--rrule "DTSTART:20210920T130000+0000 RRULE:INTERVAL=1;FREQ=HOURLY DTEND:22220202T222222+0000` i got `rrule parsing failed validation: unsupported property: DTEND`.

When I get schedule details by cli i got 
`{
     "rrule": "DTSTART:20210920T130000+0000 RRULE:INTERVAL=1;FREQ=HOURLY",
     "id": 6,
     "type": "schedule",
     "url": "/api/v2/schedules/6/",
     "summary_fields": {
          "unified_job_template": {
               "id": 9,
               "name": "gitlab",
               "description": "",
               "unified_job_type": "project_update"
          },
          "created_by": {
               "id": 2,
               "username": "awx",
               "first_name": "",
               "last_name": ""
          },
          "modified_by": {
               "id": 2,
               "username": "awx",
               "first_name": "",
               "last_name": ""
          },
          "user_capabilities": {
               "edit": true,
               "delete": true
          }
     },
     "created": "2021-09-20T12:10:32.902537Z",
     "modified": "2021-09-20T12:10:32.902552Z",
     "name": "gitlab update",
     "description": "",
     "extra_data": {},
     "inventory": null,
     "scm_branch": null,
     "job_type": null,
     "job_tags": null,
     "skip_tags": null,
     "limit": null,
     "diff_mode": null,
     "verbosity": null,
     "unified_job_template": 9,
     "enabled": true,
     "dtstart": "2021-09-20T13:00:00Z",
     "dtend": null,
     "next_run": "2021-09-20T13:00:00Z",
     "timezone": "UTC",
     "until": ""
}`

So i have no idea how to create this schedule properly

### AWX version

19.3

### Installation method

minikube

### Modifications

no

### Ansible version

2.11.5

### Operating system

debian

### Web browser

Chrome

### Steps to reproduce

Create scheduly by awxkit 19.3

### Expected results

I'm able open and see schedule in AWX

### Actual results

Got error about `Invalid UNTIL value`

### Additional information

_No response_
user: cerberek
issue_11085: state: open
title: [RFE] Allow to select multiple inventories from Prompt of launch when a Job Template is launched
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
The user wants to run against multiple combinations of inventories, i.e. when the customer has N number of environments and the user decides to run against 1 of those or N number of inventories when prompt of launch.

user: tuxonfire
labels: type:feature: prioritized on a feature board
issue_11075: state: open
title: Only 3 jobs are running concurrently, the others are on a pending state
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Launch >10 workflow templates to different hosts from the same inventory, only 3 workflows starts running and the other are waiting on pending state.

I've checked that only 3 workers are running at the same time despite having a maximum of 20. Also it isn't a problem of resources as it has a lot of free disk space and more that 1GB of RAM free.


```
bash-4.4# awx-manage run_dispatcher --status
Recorded at: 2021-09-14 09:22:01 UTC 
awx[pid:129] workers total=4 min=4 max=20 
.  worker[pid:26551] sent=6 finished=5 qsize=1 rss=135.352MB
     - running 54be8330-5e46-48c4-84e2-affc962febd7 RunJob(*[19341])
.  worker[pid:27230] sent=2 finished=1 qsize=1 rss=133.215MB
     - running 1edc58d7-9366-4c5e-91de-83fd3181b414 RunJob(*[19342])
.  worker[pid:29744] sent=9 finished=8 qsize=1 rss=133.742MB
     - running 873c997e-2897-41b1-a79c-ada43f3db1ba RunJob(*[19354])
.  worker[pid:31523] sent=2 finished=1 qsize=1 rss=122.844MB
     - running for: 0.0s f2b7fba8-bceb-451c-9db1-4ce87107a665 run_task_manager(*[])

```

**Important note:** the SCM projects are set up to "update on launch" with no cache cause we need that every new job launched has the latest revision and that could be the issue.

### AWX version

17.1.0

### Installation method

docker on linux

### Modifications

no

### Ansible version

2.9.18

### Operating system

Linux

### Web browser

Chrome

### Steps to reproduce

Install docker on a single instance using docker-compose
- set the SCM to update on launch with no cache
- spawn multiple jobs 
- check jobs and see that only 3 are running 

### Expected results

Start running all the jobs if the jobs are allowed to run concurrently

### Actual results

Only 3 jobs are running

### Additional information

_No response_
user: jerosa
issue_11058: state: open
title: Instance group- Associated instances list- CSS responsiveness bug
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Looking at the list of associated instances inside of an instance- the header titles smush together when the page size is reduced.
![instance-group-css-responsiveness](https://user-images.githubusercontent.com/63685497/132701113-f016e943-69c4-4bf8-9162-a17c8f54a346.gif)


### AWX version

4.0

### Installation method

docker for mac

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Visit the instance tab inside of an instance. See video for detail.

### Expected results

Header title words would size down appropriately.

### Actual results

Some of the words smush together when page size is reduced.

### Additional information

_No response_
user: akus062381
issue_11057: state: open
title: email notification template in HTML
body: ISSUE TYPE
    Feature Idea

SUMMARY

It would be useful to have the option of being able to choose the Content-Type with what is sent to the smtp server
Emails are sent with
Content-Type: text / plain;
or
Content-Type: text / html;

thx
user: ldktta
issue_11054: state: open
title: Cannot find awxkit folder after installation
body: Hi

I've installed awxkit on my server, and I'm trying to build doc as specified [here](https://github.com/ansible/awx/blob/devel/INSTALL.md#building-the-cli-documentation)

But there is no `awxkit` folder on the file system. Did I miss something?

Regards,
Eugène NG
user: papiveron
issue_11053: state: open
title: Search Across All Credentials When Modifying a Template
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
When modifying a Template you have the option to add a `CREDENTIAL`.
You have to search for the credential but you have to know in advance what the type of credential it is you are searching for.

When adding a credential to a template the search option should search across all credentials and not just the selected type.

user: opticyclic
issue_11052: state: open
title: Sort By All Columns in The Credentials Resource
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
The Credentials resource lists 4 columns: NAME, KIND, OWNERS, ACTIONS.
The only search option is by NAME and not any of the other columns.
The Templates, Projects and Jobs views all have the ability to search in different ways.

The Credentials resource view should have the ability to sort by any of the 4 columns displayed. 

user: opticyclic
labels: type:feature: prioritized on a feature board
issue_11050: state: open
title: Add A New Notification From The Project View
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
On the project view there is a button called `JOB TEMPLATES`. From here there is a green + button that allows you to add a new Template.
There is no green + button on the `NOTIFICATIONS` button to do a similar action.

Add a green + button on the right side of the Project `NOTIFICATIONS` view that will allow the creation of a new notification template.
Hide the button if the user does not have the rights to create a new template.
After creating the template the view will switch back to the Project `NOTIFICATIONS` view and the template will be enabled.

user: opticyclic
labels: type:feature: prioritized on a feature board
issue_11044: state: open
title: Download The Logs While Jobs Are Still Running
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
You can only download the logs from the UI when the job is complete.
The UI gives you a tail view of the logs but it isn't feasible to use if you have a large log such as when using verbose logging.

However, the REST API **does** allow you to download the log whilst the job is running.

Since it is possible with the REST API, the UI should give you the option as well.

user: opticyclic
issue_11043: state: open
title: Add An Option To Save A Job Filter
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
A certain project has job templates that have been failing periodically over the last month.
Every morning I have to go to the jobs page and type in the same search parameters to find the jobs.

Similarly, on a less regular basis, when I get requests for different teams I have to remember their search query in order to find what they are looking for.

It would be much more useful to have the option to save the search query and then have an easy way to click on it instead of having to remember and type out the query every time.

user: opticyclic
labels: type:feature: prioritized on a feature board
issue_11039: state: open
title: Make Dashboard Customisable
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
The dashboard shows some summary stats a job status graph and recently used templates and job runs.
It is largely useless as a dashboard if that isn't the information you are interested in.

The Dashboard would be more useful if you could re-arrange the tiles or remove them or add other details to it in a similar way that JIRA can.
e.g. I would like to see details for a single project and I want to see recent job runs for a single template

user: opticyclic
labels: type:feature: prioritized on a feature board
issue_11037: state: open
title: Show Who Cancelled a Job
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
If a job is cancelled the UI doesn't show who cancelled it.
This is very bad from an audit point of view.

On the DETAILS section there is a LAUNCHED BY key with the user that launched the job.

If a job is cancelled the section should show CANCELLED BY and the user that cancelled the job

user: opticyclic
issue_11026: state: open
title: Cannot run template job due to RuntimeError: Error creating pod: timed out waiting for the condition, ImagePullBackOff
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

New to AWX.
(it might not be a bug, but a proxy issue. However I have been investigated for a couple of days. And I have not seen other infomation on google indicating the same error message. Please help me.)

Successfully Installed with AWX operator 0.13.0 and minikube, behind coperate proxy.
Successfully synced code from git.
Encounted error when tempted running a testing template job.
`
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 1406, in run
    res = receptor_job.run()
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 2935, in run
    return self._run_internal(receptor_ctl)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 3000, in _run_internal
    raise RuntimeError(detail)
RuntimeError: Error creating pod: timed out waiting for the condition, ImagePullBackOff
`



### AWX version

AWX 19.3.0  

### Installation method

minikube

### Modifications

no

### Ansible version

_No response_

### Operating system

minikube on centos with docker driver

### Web browser

Chrome

### Steps to reproduce

created project, and synced playbooks from git repository.
defined inventory and host with ssh username and password.
defined template to run a simple playbook with command module.
`-
    name: test connection
    hosts: all
    tasks:
        -
            name: cmd-date
            command: date`

Encounted error when tempted running a testing template job.
`Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 1406, in run
    res = receptor_job.run()
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 2935, in run
    return self._run_internal(receptor_ctl)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 3000, in _run_internal
    raise RuntimeError(detail)
RuntimeError: Error creating pod: timed out waiting for the condition, ImagePullBackOff`


### Expected results

job executed successfully.

### Actual results

The job stuck in running state for a few miniutes, then report the following error.
`Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 1406, in run
    res = receptor_job.run()
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 2935, in run
    return self._run_internal(receptor_ctl)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 3000, in _run_internal
    raise RuntimeError(detail)
RuntimeError: Error creating pod: timed out waiting for the condition, ImagePullBackOff`


### Additional information

Installed with AWX Operator 0.13.0, Minikube, around Sep 2021.
The whole environment is behind coperate proxy, with ZScaler certificate.
Minikube has been configured with ZScaler certificate.
I also tried implement the cert on awx-demo-task.

my troubleshooting so far.
I logged into awx-demo-task container, found that the proxy is not deployed by default(also i dont know what should be the documented way to pass the proxy setting down to awx-demo containers level). 
I tried adding proxy in awx/job setting/Extra Environment Variables, but still having the same error.
`{
  "GIT_SSL_NO_VERIFY": "True",
  "HTTP_PROXY": "http://[our proxy]:8080/",
  "HTTPS_PROXY": "http://[our proxy]:8080/",
  "NO_PROXY": "localhost,127.0.0.1,10.96.0.0/12,192.168.99.0/24,192.168.39.0/24,192.168.49.0/24"
}`
user: sc8608
issue_11015: state: open
title: SSL: Unsupported protocol (_ssl.c:1124)
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Running VSphere 5.5 which is still using TLS 1.0. 

I was able to solve this issue by executing `docker exec awx_web bash -c "/usr/bin/update-crypto-policies --set LEGACY"` in the docker containers before AWX kubes. 

Is there any way to enable legacy support? 

### AWX version

19.3.0

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Execute any module, ex. community.vmware.vmware_guest_info against a vsphere 5.5 using TLS 1.0. 



### Expected results

Error is expected, but how to bypass? 

### Actual results

`Unable to connect to vCenter or ESXi API at virtualcenter.domain.local on TCP/443: [SSL: UNSUPPORTED_PROTOCOL] unsupported protocol (_ssl.c:1124)`

### Additional information

_No response_
user: nicolaibaralmueller
labels: component:authentication: For issues related to authentication
issue_11010: state: open
title: Duplicate xhr requests on Survey tab for JT and WFJT
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Navigating to `https://localhost:8043/#/templates/job_template/7/survey` some xhr requests are being made twice

### AWX version

devel

### Installation method

docker on linux

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

1. Create a job template
2. navigate to survey tab
3. do a hard reload

### Expected results

the requests should happen once

### Actual results

some requests are made twice

### Additional information

![Screenshot from 2021-09-02 10-56-25](https://user-images.githubusercontent.com/12464858/131856752-0159cb99-f376-4de3-984f-3998cdc08b1d.png)

user: tiagodread
issue_11006: state: open
title: EE selection UX confusion in Project and Templates interface
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

When I go the "Projects" interface and create a new project with a default EE, the next step of the usual process is to create a job template by selecting the new project created
The problem is that in the "Template" interface I again get an option to select the EE even after I select a project, this can be prefilled or the field should say "Replace default project EE", or something like that

### AWX version

AAP 2.0

### Installation method

kubernetes

### Modifications

no

### Ansible version

2.11

### Operating system

RHEL

### Web browser

_No response_

### Steps to reproduce

Create a project and select a Default EE
Create a EE and then you have an option to select EE even if you select the project created in 1st step

### Expected results

EE should be prefilled or Option in Templates should be to replace an EE

### Actual results

UX confusion, as a user I am not sure if I should select EE in the Template  interface or not
![Template interface](https://user-images.githubusercontent.com/6129262/131742347-5a9d353a-f92c-4a14-9565-6ce4041296b4.png)
![Project_interface](https://user-images.githubusercontent.com/6129262/131742349-d6783b0c-e171-4df8-80a7-0d854a12938e.png)



### Additional information

_No response_
user: anshulbehl
issue_11004: state: open
title: Unit test expansion- need error handling checks for Notification Type
body: ### Summary

Need to be added: unit tests for testing the error handling of the fields in the different notification types on the Add Notification form.

user: akus062381
issue_10999: state: open
title: [RFE] A toggle to write schema tables to private
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

Currently, the Tower schema tables are public. 
A customer has asked if exists the viability to write them to be private instead.
user: tuxonfire
issue_10984: state: open
title: known_hosts module on ~/.ssh/known_hosts fails inside EE with "No such file or directory"
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Invoking the builtin `known_hosts` module without a `path` argument defaults to `~/.ssh/known_hosts`, which fails inside an EE.

### AWX version

19.2.0

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Running the following task ...

~~~yaml
- known_hosts:
   name: example.com
   key: "example.com ssh-rsa ..."
   state: present
~~~

 through AWX19, i.e. inside an EE, fails with msg:
> Failed to write to file /home/ansible/.ssh/known_hosts: [Errno 2] No such file or directory: '/home/ansible/.ssh/tmpyflcwiy3'


### Expected results

`~/.ssh/known_hosts` to be updated

### Actual results

Above error, Playbook abort.

### Additional information

_No response_
user: azrdev
issue_10956: state: open
title: AWX settings field validator reports an error if "ALLOW_JINJA_IN_EXTRA_VARS" is set via extra_settings using awx-operator 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

We tried to set "ALLOW_JINJA_IN_EXTRA_VARS" to "always" using awx-operator extra_settings (https://github.com/ansible/awx-operator#extra-settings) 

The operator sets the field correctly to "always" in /etc/tower/settings.py, however since this file is mounted as read-only file (from configmap), accessing the jobs option within the settings view or "/api/v2/settings/jobs" or "/api/v2/settings/all" would fail with "Internal server error". Below error can be seen in the web container logs,

File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/conf/registry.py", line 132, in get_setting_field
field_instance = field_class(**field_kwargs)
File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/rest_framework/fields.py", line 1411, in _init_
super()._init_(**kwargs)
File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/rest_framework/fields.py", line 336, in _init_
assert not (read_only and required), NOT_READ_ONLY_REQUIRED
AssertionError: May not set both `read_only` and `required`
2021-08-26 05:57:19,070 DEBUG [2a5a745eb78140d297fa78ba8f6dd33c] awx.analytics.performance request: <WSGIRequest: GET '/api/v2/settings/all/'>, response_time: 0.368s 

This issue seems to happen only with "ALLOW_JINJA_IN_EXTRA_VARS" field and we tried to set some other fields such as "TOWER_URL_BASE", "AUTH_LDAP_BIND_DN", they work fine without any issues. It looks like some special validation (may be due to how its configured here - https://github.com/ansible/awx/blob/dc7bd734319923b50e6699a1c4369cacc28c6276/awx/main/conf.py#L231 ) is done using rest_framework field validator for ALLOW_JINJA_IN_EXTRA_VARS field. Could you please check?

### AWX version

19.2.2

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

Create AWX operator template with below spec key

```yaml
  spec:
    extra_settings:
      - setting: ALLOW_JINJA_IN_EXTRA_VARS
        value: "'always'"
```
Apply the template using
```bash
kubectl apply -f <template>.yml
```

### Expected results

No error while accessing /api/v2/settings/all or /api/v2/settings/jobs end-points.

### Actual results

We see "Internal server error" on accessing the api/v2/settings/all or /api/v2/settings/jobs end-points.

### Additional information

_No response_
user: HarishaAmeen
issue_10955: state: open
title: External Postgres DB fail to migrate ( AWX migration 17.0.1 - > latest)
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug Report


##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - Installer

##### SUMMARY
<!-- Briefly describe the problem. -->

Installation with external Postgres DB previously running with docker based version 17.0.1 
With minikube setup fails on DB migration step 

# minikube kubectl logs awx-768d58d7bf-s5mmd awx-task
[wait-for-migrations] Waiting for database migrations...
[wait-for-migrations] Attempt 1 of 10
[wait-for-migrations] Waiting 0.5 seconds before next attempt
[wait-for-migrations] Attempt 2 of 10
[wait-for-migrations] Waiting 1 seconds before next attempt
[wait-for-migrations] Attempt 3 of 10
[wait-for-migrations] Waiting 2 seconds before next attempt
[wait-for-migrations] Attempt 4 of 10
[wait-for-migrations] Waiting 4 seconds before next attempt
[wait-for-migrations] Attempt 5 of 10
[wait-for-migrations] Waiting 8 seconds before next attempt
[wait-for-migrations] Attempt 6 of 10
[wait-for-migrations] Waiting 16 seconds before next attempt
[wait-for-migrations] Attempt 7 of 10
[wait-for-migrations] Waiting 30 seconds before next attempt
[wait-for-migrations] Attempt 8 of 10
[wait-for-migrations] Waiting 30 seconds before next attempt
[wait-for-migrations] Attempt 9 of 10
[wait-for-migrations] Waiting 30 seconds before next attempt
[wait-for-migrations] Attempt 10 of 10
[wait-for-migrations] ERROR: Database migrations not applied





##### ENVIRONMENT
* AWX version: 19.3.0
* AWX install method: operator
* AWX deployment target:  minikube
* Operating System: RH 7.9
* Web Browser: Chrome 

##### STEPS TO REPRODUCE

<!-- For new features, show how the feature would be used. For bugs, please show
exactly how to reproduce the problem. Ideally, provide all steps and data needed
to recreate the bug from a new awx install. -->

Postgres DB v12 installed externally , unable to migrate in minikube/operator type of setup 

##### EXPECTED RESULTS

<!-- For bug reports, what did you expect to happen when running the steps
above? -->

operator should quickly migrate external postgres DB that its structure is adequate for new AWX version


##### ACTUAL RESULTS

<!-- For bug reports, what actually happened? -->

 minikube kubectl logs awx-768d58d7bf-s5mmd awx-task
[wait-for-migrations] Waiting for database migrations...
[wait-for-migrations] Attempt 1 of 10
[wait-for-migrations] Waiting 0.5 seconds before next attempt
...
[wait-for-migrations] Attempt 10 of 10
[wait-for-migrations] ERROR: Database migrations not applied




##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: olokolo250
issue_10941: state: open
title: Canceling inventory source sync leads to error state on job output
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Canceling inventory source sync leads to error state on job output.

Inventory source was sourced from a project.

### AWX version

devel

### Installation method

docker for mac

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

1 - Create an inventory source - sourced from a project
2 - Sync the inventory source
3 - Cancel the inventory source sync
4 - See job output


### Expected results

Job output status to be cancelled.


### Actual results

Job output status is in error state. 

![image](https://user-images.githubusercontent.com/9053044/130817442-31935995-7f2a-43f8-93ec-4bfa5fb06c21.png)


![image](https://user-images.githubusercontent.com/9053044/130817570-128cb782-86b4-45a0-b1c6-40a8ac2b4082.png)


On the older versions we shown this status as canceled as below.

![image](https://user-images.githubusercontent.com/9053044/130817335-e3a6cd65-1adf-4cc1-aa50-8452cde1d758.png)



### Additional information

HTTP Requests made:

<img width="1489" alt="image" src="https://user-images.githubusercontent.com/9053044/130817754-0faafe15-c3e0-42e5-b4cc-85a5eb9cf5d4.png">

<img width="1786" alt="image" src="https://user-images.githubusercontent.com/9053044/130817997-02cb57d8-7335-483f-9f37-fa963ff74a21.png">

There is also the job data related to the inventory source sync.
user: nixocio
issue_10936: state: open
title: [RFE] webhook notification can customize the HTTP header with job_metadata
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Now `HTTP HEADERS` can be configured only as a fixed JSON string.
A customer wants to put a customized string using `job_metadata`.`extra_vars`.

user: sugitk
issue_10916: state: open
title: Migration not updating postgres tables correctly 
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

I have succesfully upgraded my AWX Install from 13.0.0 -> 17.0.1 and from 17.0.1 -> 17.1.0, however when I upgrade from 17.1.0 to 18.0.0 or 19.3.0 I encounter the same errors. I redirected all the output to a log, and I see the create tables fail, because the db already exists, and I dont see any alter statements that add the missing columns.

```
ESC[33mpostgres_1  |ESC[0m 2021-08-19 14:53:37.138 UTC [115] ERROR:  column "last_isolated_check" of relation "main_instance" does not exist at character 87
ESC[33mpostgres_1  |ESC[0m 2021-08-19 14:53:37.138 UTC [115] STATEMENT:  INSERT INTO "main_instance" ("uuid", "hostname", "ip_address", "created", "modified", "last_isolate
d_check", "version", "capacity", "capacity_adjustment", "enabled", "managed_by_policy", "cpu", "memory", "cpu_capacity", "mem_capacity") VALUES ('00000000-0000-0000-0000-00
0000000000', 'awx_1', NULL, '2021-08-19T14:53:37.138440+00:00'::timestamptz, '2021-08-19T14:53:37.138493+00:00'::timestamptz, NULL, '', 0, '1.00', true, true, 0, 0, 0, 0) R
ETURNING "main_instance"."id"
ESC[36mawx_1_1     |ESC[0m Traceback (most recent call last):
ESC[36mawx_1_1     |ESC[0m   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
ESC[36mawx_1_1     |ESC[0m     return self.cursor.execute(sql, params)
ESC[36mawx_1_1     |ESC[0m psycopg2.errors.UndefinedColumn: column "last_isolated_check" of relation "main_instance" does not exist
ESC[36mawx_1_1     |ESC[0m LINE 1: ... "hostname", "ip_address", "created", "modified", "last_isol...


ESC[33mpostgres_1  |ESC[0m 2021-08-19 14:53:39.171 UTC [116] ERROR:  column main_instancegroup.controller_id does not exist at character 129
ESC[33mpostgres_1  |ESC[0m 2021-08-19 14:53:39.171 UTC [116] STATEMENT:  SELECT "main_instancegroup"."id", "main_instancegroup"."name", "main_instancegroup"."created", "main_instancegroup"."modified", "main_instancegroup"."controller_id", "main_instancegroup"."is_container_group", "main_instancegroup"."credential_id", "main_instancegroup"."pod_spec_override", "main_instancegroup"."policy_instance_percentage", "main_instancegroup"."policy_instance_minimum", "main_instancegroup"."policy_instance_list" FROM "main_instancegroup" WHERE "main_instancegroup"."name" = 'tower'
ESC[36mawx_1_1     |ESC[0m Traceback (most recent call last):
ESC[36mawx_1_1     |ESC[0m   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
ESC[36mawx_1_1     |ESC[0m     return self.cursor.execute(sql, params)
ESC[36mawx_1_1     |ESC[0m psycopg2.errors.UndefinedColumn: column main_instancegroup.controller_id does not exist
ESC[36mawx_1_1     |ESC[0m LINE 1: ...roup"."created", "main_instancegroup"."modified", "main_inst...
ESC[36mawx_1_1     |ESC[0m                                                              ^
```

Which causes and endless loop on the migration.

### AWX version

17.1.0

### Installation method

docker on linux

### Modifications

no

### Ansible version

2.9.6

### Operating system

Ubuntu 20.04

### Web browser

_No response_

### Steps to reproduce

I am currently running 17.1.0 and I am following the steps at this link as directed in the README.md for version 18.0.0

- ansible-playbook  -i tools/docker-compose/inventory tools/docker-compose/ansible/migrate.yml -e "migrate_local_docker=true" -e "postgres_data_dir=/opt/pgdocker" -e "old_docker_compose_dir=/var/lib/awx"
- make docker-compose-build
- make docker-compose (this is where the db migration fails, never get to the next step)

### Expected results

I expected the database to be migrated, and updated with any new columns between versions. 

### Actual results

When I look at the tables in question for postgres, I do not see any of the columns that are now expected.

### Additional information

_No response_
user: mikecurrancs
issue_10908: state: open
title: PermissionError: [Errno 13] Permission denied: '/var/lib/awx/projects
body: ### Please confirm the following

- [x] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

While running job on AWX for the first time, I am facing below error.

```
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 1316, in run
    self.pre_run_hook(self.instance, private_data_dir)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 1826, in pre_run_hook
    RunProjectUpdate.make_local_copy(job.project, private_data_dir, scm_revision=job_revision)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 2233, in make_local_copy
    source_branch = git_repo.create_head(tmp_branch_name, p.scm_revision)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/git/repo/base.py", line 386, in create_head
    return Head.create(self, path, commit, force, logmsg)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/git/refs/symbolic.py", line 543, in create
    return cls._create(repo, path, cls._resolve_ref_on_create, reference, force, logmsg)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/git/refs/symbolic.py", line 510, in _create
    ref.set_reference(target, logmsg)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/git/refs/symbolic.py", line 326, in set_reference
    assure_directory_exists(fpath, is_file=True)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/git/util.py", line 177, in assure_directory_exists
    os.makedirs(path, exist_ok=True)
  File "/usr/lib64/python3.8/os.py", line 223, in makedirs
    mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/var/lib/awx/projects/_8__vcloud_lab_projects/.git/refs/heads/awx_internal'
```


**AWX version:**
 ______________ 
<  AWX 19.3.0  >
 -------------- 
          \
          \   ^__^
              (oo)\_______
              (__)      A )\
                  ||----w |
                  ||     ||

### AWX version

19.3.0

### Installation method

minikube

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

Chrome

### Steps to reproduce

On the newly deployed AWX I created new template and launched it but getting the error.

### Expected results

ping result

### Actual results

Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 1316, in run
    self.pre_run_hook(self.instance, private_data_dir)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 1826, in pre_run_hook
    RunProjectUpdate.make_local_copy(job.project, private_data_dir, scm_revision=job_revision)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 2233, in make_local_copy
    source_branch = git_repo.create_head(tmp_branch_name, p.scm_revision)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/git/repo/base.py", line 386, in create_head
    return Head.create(self, path, commit, force, logmsg)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/git/refs/symbolic.py", line 543, in create
    return cls._create(repo, path, cls._resolve_ref_on_create, reference, force, logmsg)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/git/refs/symbolic.py", line 510, in _create
    ref.set_reference(target, logmsg)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/git/refs/symbolic.py", line 326, in set_reference
    assure_directory_exists(fpath, is_file=True)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/git/util.py", line 177, in assure_directory_exists
    os.makedirs(path, exist_ok=True)
  File "/usr/lib64/python3.8/os.py", line 223, in makedirs
    mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/var/lib/awx/projects/_8__vcloud_lab_projects/.git/refs/heads/awx_internal'

### Additional information

_No response_
user: janviudapi
issue_10894: state: open
title: Nested Teams
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
currently using AWX 19.2.2

I would love to see the possibility to create nested teams.
Meaning to be able to assign the member/admin/read role of one team to another team.
There is already an UI option to assign a team-role to certain/multiple users, but I would love to have that for teams as well.
For adding users to a team-role I would click: "Access"->"Teams"->"select team"->"Access"->"Add"->"fill out the dialog".
This dialog should also contain the option to assign roles to "Team(s)".
According to the API, as I understand it, there is already an option to do this - ".related.teams":
```json
{
    "id": 134,
    "type": "role",
    "url": "/api/v2/roles/134/",
    "related": {
        "users": "/api/v2/roles/134/users/",
        "teams": "/api/v2/roles/134/teams/",
        "team": "/api/v2/teams/1/"
    },
    "summary_fields": {
        "resource_name": "Awsome-Team",
        "resource_type": "team",
        "resource_type_display_name": "Team",
        "resource_id": 1
    },
    "name": "Admin",
    "description": "Can manage all aspects of the team"
}
```
As I understand it, this functionality could be added to the UI by adding a "Teams" option in the "Access"->"Add" dialog.
If this feature was already requested, please excuse me requesting it again - I could not find any information on that.

Thanks and BR
user: DrackThor
issue_10893: state: open
title: Better logging of credential plugin test failures
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
When trying to configure HashiCorp Vault Secret Lookup credentials on Tower UI - keep on getting “HashiCorp Vault Secret Lookup: HTTP 404” errors. However, unable to work out why when looking at all the logs in /var/log/tower/*.log as we can find below message only even if we set Settings > System > Logging, adjust the verbosity on logging to DEBUG.
~~~~~~
2021-08-11 01:00:00,301 WARNING  awx.api.generics status 400 received by user my_user_name attempting to access /api/v2/credentials/1/test/ from 192.000.00.000
2021-08-11 01:05:00,302 WARNING  django.request Bad Request: /api/v2/credentials/1/test/
~~~~~~
Is there any way we can increase logging against these insufficient error messages in Tower? 



user: garamirseokim
issue_10890: state: open
title: awx.awx.application: Expose client_id and client_secret when creating "confidential" application.
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

When you create an Application object, a `client_id` and `client_secret` are created, values you need to be able to use the application configuration in an OAuth2 flow. When `client_type` is set to `confidential` (the default), the `client_secret` can't  be retrieved, it is only ever included in the response to the original `POST` request to create the Application.

The `create_if_needed` function only copies out the `name`, `username`, `identifier` and `hostname` keys (if defined) for the created Application:

https://github.com/ansible/awx/blob/f6104dd438fe2853ff795b2265d80375a8b4ede0/awx_collection/plugins/module_utils/controller_api.py#L501-L503

Could the `client_id` and `client_secret` be included in this? That way we can then update a kubernetes job that requires read access to the AWX inventory with that information and have it log into the API as needed while still maintaining operational control over the tokens (only Application tokens can be inspected and revoked by other users).
user: mjpieters
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_10877: state: open
title: Using a bastion host in AWX 19
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

AWX 19 seems to be unable to run playbooks through bastion hosts.

### AWX version

19.2.2

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

I'm using the below arguments in my inventory, (Which works fine on AWX 9) and both the bastion host and end host use the same user/ssh key

ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q [USERNAME]@[BASTIONSERVERIP]"'

### Expected results

Ansible to run playbook on end host

### Actual results

Below error at end of output

kex_exchange_identification: Connection closed by remote host

### Additional information

_No response_
user: kbootle2
issue_10874: state: open
title: Added worker thread settings to external_logging  for optimize performance
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->



<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

#10808 

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Pull Request

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API
 - UI

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
19.2.2
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: oweel
labels: community pull request: Applied to community based pull requests for filtering
issue_10862: state: open
title: Collection: get_one will never work for numeric names that match object ids
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

In the AWX-Collection in controller_api.ControllerAPIModule the method "get_one" takes an argument "name_or_id".

In this method, the argument "name_or_id" is cast into an integer, so that a numeric string will be used as an integer:
https://github.com/ansible/awx/blob/19.2.2/awx_collection/plugins/module_utils/controller_api.py#L127

However this makes no sense for situations, where a name is explicitly given & used, e.g. in the Organization-Module:
https://github.com/ansible/awx/blob/19.2.2/awx_collection/plugins/modules/organization.py#L144

Also this conflicts with existing object Ids, as "get_one" expects exactly one result, not anything else.
But "get_one" uses "or__id" and "or__name" in conjunction, so that any count from 0 to 2 results can be returned.

### AWX version

19.2.2

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Only an example. Any "name" param that is handled as secondary primary key causes this.

1. Create AWX Organization with name numerically equal to an existing Organizations Id, e.g. "00021"
2. Try to handle this Organization via Collection Module "awx.awx.organization" (which only has param "name")
3. Observe thrown error by module

### Expected results

AWX Organization with name "00021" can be handled via awx.awx.organization Module

### Actual results

awx.awx.organization Module fails with:
`Request to /api/v2/organizations/?or__id=21&or__name=00021 returned 2 items, expected 1`

awx.awx.organization-Task-Output contains made query params:
```json
{
    "query": {
        "or__id": 21,
        "or__name": "00021"
    },
    (...)
}
```

### Additional information

_No response_
user: moonrail
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_10857: state: open
title: allow for AWS RDS IAM authentication
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
I was hoping it would be possible to get AWX to support using AWS IAM authentication to connect to the postgres database.   Right now it's limited to password only (that I could determine).

thanks

user: ksquires
issue_10848: state: open
title: docker-compose-build Error - centos:8 not a valid repository/tag
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

docker-compose-build fails with Error parsing reference: "centos:8 as builder" is not a valid repository/tag: invalid reference format
make: *** [docker-compose-build] Error 1



### AWX version

19.2.2

### Installation method

docker on linux

### Modifications

no

### Ansible version

2.10.4

### Operating system

RHEL 7.9

### Web browser

_No response_

### Steps to reproduce

make docker-compose-build                                                                                        
ansible-playbook tools/ansible/dockerfile.yml -e build_dev=True
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

PLAY [Render AWX Dockerfile and sources] *****************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************
ok: [localhost]

TASK [dockerfile : Create _build directory] **************************************************************************************
changed: [localhost]

TASK [dockerfile : Render supervisor configs] ************************************************************************************
changed: [localhost] => (item=supervisor.conf)
changed: [localhost] => (item=supervisor_task.conf)

TASK [dockerfile : Render Dockerfile] ********************************************************************************************
changed: [localhost]

PLAY RECAP ***********************************************************************************************************************
localhost                  : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

DOCKER_BUILDKIT=1 docker build -t gcr.io/ansible-tower-engineering/awx_devel:HEAD \
    --build-arg BUILDKIT_INLINE_CACHE=1 \
    --cache-from=gcr.io/ansible-tower-engineering/awx_devel:HEAD .
Sending build context to Docker daemon   294 MB
Step 1/53 : FROM centos:8 as builder
Error parsing reference: "centos:8 as builder" is not a valid repository/tag: invalid reference format
make: *** [docker-compose-build] Error 1

### Expected results

AWX installed.

### Actual results

Installatin failed.

### Additional information

_No response_
user: zebra-link
issue_10847: state: open
title: Added setting for disallow to approve their own workflows
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->

Added setting for disallow users to approve their own workflow jobs

#10610 

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - New or Enhanced Feature

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API
 - UI

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
19.2.2
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: oweel
labels: community pull request: Applied to community based pull requests for filtering
issue_10844: state: open
title: List pages- select boxes, gray out buttons that don't apply
body: A thought I had working my way through the app- when a user is on a list page (ie. Host List, Template List, and so forth) where there are check boxes for the user to select, if a user selects one or more of those, the action buttons at the top of the screen (Add, Delete, Edit Order, etc etc) all stay enabled.
My idea: when a user selects an item in a list using its check box, disable any buttons whose action does not apply to the checking of that box. Example: the Delete button would stay enabled, but the Add button would be disabled, because a user can Add an item with a check box checked just the same as they could with a check box not checked. This logic would be in line with the fact that the Delete button is disabled only until a user checks the box next to one or more item in the list.

![list-checkbox](https://user-images.githubusercontent.com/63685497/128757497-f04d4d17-95f9-47fc-beeb-d83087d6f184.gif)



user: akus062381
issue_10843: state: open
title: Support MSI authentication for Azure Keyvault secrets management credentials.
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
We deploy AWX inside subscriptions on a VM with a [Managed Service Identity](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview), so that we don't have to configure service principal client IDs and secrets (along with the necessary rotation policies and process). We would like to use the [Azure Keyvault](https://docs.ansible.com/ansible-tower/3.5.0/html/administration/credential_plugins.html#microsoft-azure-key-vault) credential plugin, as an input source for other credentials. However it appears that this can only be used with statically configured client ID and secret. Putting in dummy values for client ID and secret products an authentication error.

https://docs.microsoft.com/en-us/azure/developer/python/azure-sdk-authenticate#authenticate-with-defaultazurecredential
user: jghal
issue_10841: state: open
title: System Auditors can check list items
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

On most, if not all, lists a system auditor can click the check box on the list items.  The delete button is still disabled so they can't really do anything with the button but it would be better UX to disabled the individual check boxes as well.

### AWX version

devel

### Installation method

docker for mac

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Create a system auditor and sign in as that user. Go to any list.  

### Expected results

Check boxes on the tool bar, and the list items should be disabled.

### Actual results

List item check boxes are not disabled, and in some cases the toolbar check box  (select all) is not disabled.

### Additional information

_No response_
user: AlexSCorey
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_10840: state: open
title: Support for Github App for server-to-server token
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Please add feature to support Github App for server token as described here https://docs.github.com/en/developers/overview/managing-deploy-keys#server-to-server-tokens

Currently we use deploy keys to integrate Github with awx but this concept fails in case of Ansible playbook that depends on multiple ansible roles. As these roles are separate repo, individual deploy key fails to checkout other repo.
 

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

user: itsmeabhijeet
issue_10838: state: open
title: "Cleanup Job Schedule" fails with external DB, schema other than public
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

When you use an external postgres database for AWX and don't use the default schema "public", then the cleanup job "Cleanup Job Schedule" fails, because there is a fixed call for the table "public.main_jobevent".
This table cannot exist, if you use another schema e.g. "awx".

Please honor the environment variables passed by deployment scripts, so you don't run in errors if using not the default schema name.

### AWX version

19.2.2

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

You need an installation of AWX configured with an external postgres DB using a schema not named "public".

1. Run the scheduled job "Cleanup Job Schedule"
2. Check the output of this job

### Expected results

The cleanup job finishes successfully.

### Actual results

The cleanup job fails with the following exception:



	Traceback (most recent call last):
	  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 82, in _execute
		return self.cursor.execute(sql)
	psycopg2.errors.UndefinedTable: relation "public.main_jobevent" does not exist
	LINE 1: ...ild FROM pg_catalog.pg_inherits WHERE inhparent = 'public.ma...
																 ^
	The above exception was the direct cause of the following exception:
	Traceback (most recent call last):
	  File "/usr/bin/awx-manage", line 8, in <module>
		sys.exit(manage())
	  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/__init__.py", line 171, in manage
		execute_from_command_line(sys.argv)
	  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
		utility.execute()
	  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/__init__.py", line 375, in execute
		self.fetch_command(subcommand).run_from_argv(self.argv)
	  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/base.py", line 323, in run_from_argv
		self.execute(*args, **cmd_options)
	  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/base.py", line 364, in execute
		output = self.handle(*args, **options)
	  File "/usr/lib64/python3.8/contextlib.py", line 75, in inner
		return func(*args, **kwds)
	  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/management/commands/cleanup_jobs.py", line 415, in handle
		skipped_partition, deleted_partition = func()
	  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/management/commands/cleanup_jobs.py", line 174, in cleanup_jobs_partition
		return self.cleanup(Job)
	  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/management/commands/cleanup_jobs.py", line 169, in cleanup
		skipped, deleted = delete_meta.delete()
	  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/management/commands/cleanup_jobs.py", line 143, in delete
		self.find_partitions_to_drop()
	  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/management/commands/cleanup_jobs.py", line 112, in find_partitions_to_drop
		cursor.execute(query)
	  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 67, in execute
		return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
	  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
		return executor(sql, params, many, context)
	  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
		return self.cursor.execute(sql, params)
	  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/utils.py", line 89, in __exit__
		raise dj_exc_value.with_traceback(traceback) from exc_value
	  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 82, in _execute
		return self.cursor.execute(sql)
	django.db.utils.ProgrammingError: relation "public.main_jobevent" does not exist
	LINE 1: ...ild FROM pg_catalog.pg_inherits WHERE inhparent = 'public.ma...
																 ^


### Additional information

_No response_
user: tobias-oe
issue_10833: state: open
title: Ability to set a limit from received webhooks query string
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Ability to set a limit from received webhooks query string:

We have many Git repositories that trigger webhooks which, at the moment, have to be matched 1-1 to a job template (in each job template, we set of course the inventory but also a limit).
If we could pass the limit in a Git webhook query string, we could reduce the amount of job templates.

The limit in format `"limit1&limit2&...limitn"` can collision with query string format and should probably be encoded/translated (& character) to something else.
user: amolari
issue_10818: state: open
title: RFE: LIMIT from variable/previous node in WF
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
I have a "provisioning" JT that creates new managed nodes, and makes them appear in the inventory. I'd like to put this JT into a WF, and add further Job Templates that shall be run on the new nodes only (cannot use provisioning callbacks because of #10784 ).

It is possible to do this by modifying *all* the plays in the further JTs, like `hosts: "{{ new_managed_nodes | default(['all']) | join(',') }}"` and exporting the `new_managed_nodes` list using `set_stats` from the JT that creates the nodes. (see <https://groups.google.com/g/awx-project/c/1DtuAFYNHD8/m/NoKqBaMgCAAJ>). However having to ensure that all plays in these playbooks are using that variable seems cumbersome to me, and dangerous too: if you miss one `hosts: all` it might run on the whole inventory unintended.

The Request here is to add a possibility to specify a `--limit` not only as a fixed value, but based on a variable or some other mechanism to pass output from a previous JT.

##### alternatives considered
1. provisioning callbacks. Yes, but not possible due to our firewall #10784 
2. as explained above, putting `hosts: "{{ variable }}"` into each play
3. on creation, putting new managed nodes into a special group with a fixed name, and have these playbooks run only on that group. (idea from https://www.unixsysadmin.com/ansible-resources-best-practices-awx-tower/ )
    * limits reusability of said playbooks to provisioning only
    * might have issues with parallel provisioning WFs
4. run the further JTs not as part of the WF, but trigger them from it using the API. This is what I'm currently doing, but I don't think it's a beautiful workaround (requiring an extra user allowed to use the API, with credentials in that job), and it decouples the jobs from the provisioning WF (though provisioning callbacks would do that, too)
user: azrdev
issue_10815: state: open
title: Add OAuth2 Application Configuration to Import/Export Modules
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Per an user's request, they would like to import/export OAuth2 application configurations from the `awx.awx` collection.

Adding an action to the `export` and `import` modules that GET or POST an application's configuration to `/api/v2/applications/`:
~~~
{
    "name": "Test",
    "description": "",
    "client_id": "criiIjZdQ69BwDJAydDwPx8Mk2zp8o4bHQoUWEQA",
    "client_type": "public",
    "redirect_uris": "",
    "authorization_grant_type": "password",
    "skip_authorization": false,
    "organization": 1
}
~~~
user: imareporter
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_10808: state: open
title: Add worker thread settings to external_logging.py to help combat performance issues
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Some users may run into performance issues shipping logs to external loggers due to default rsyslog settings. Adding worker thread settings in the rsyslog.conf file can help increase that performance which enables the external loggers to receive logs significantly faster. This could be done by making these thread values configurable in the API similar to the queue.spoolDirectory and queue.maxdisksize values.

Making the following change to increase those worker thread values enabled a user to be able to access these logs on their external service close to two hours earlier during job runs with a large number (~250k) of events:

```
f'main_queue(queue.spoolDirectory="{spool_directory}" queue.maxdiskspace="{max_disk_space}g" queue.type="Disk" queue.filename="awx-external-logger-backlog" queue.workerthreadminimummessages="100" queue.workerthreads="50")',
```

Before the change, the user was seeing the jobs take upwards of 2 hours to populate externally while after this change they populated in ~10sec. In addition to this change, they also increased the max_disk_space value from 1g to 10g but this value is already easily configurable from the API.

user: msilmser
issue_10806: state: open
title: Please add support for AWS Secrets Manager  (for Credential input source)
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

[AWS Secrets Manager](https://aws.amazon.com/secrets-manager/) provides similar service to Azure KeyVault, and the AWS collection provides a [lookup plugin](https://docs.ansible.com/ansible-tower/latest/html/userguide/credential_plugins.html#) for it. It would be great to see AWS Secrets Manager supported as a [Credential input source](https://docs.ansible.com/ansible-tower/latest/html/userguide/credential_plugins.html#) the same as Azure KeyVault.

user: jghal
issue_10792: state: open
title: After viewing a job output and logging out browser still requests websocket connection
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

After viewing a job output and logging out browser still requests websocket connection

### AWX version

17.1.0

### Installation method

docker on linux

### Modifications

no

### Ansible version

-

### Operating system

Ubuntu 20.04

### Web browser

Firefox, Chrome

### Steps to reproduce

* login
* open the output of a job
* logout 

### Expected results

Stop sending websocket request, after logout.

### Actual results

Browser shows the login screen, but still requests websocket connections _every second_.

### Additional information

From the awx_web container:

`{"log":"2021/07/30 11:00:32 [error] 79#0: *5712263 recv() failed (104: Connection reset by peer) while proxying upgraded connection, client: 10.222.0.177, server: _, request: \"GET /websocket/ HTTP/1.1\", upstream: \"http://127.0.0.1:805
1/websocket/\", host: \"awx.hkm.de\"\n","stream":"stderr","time":"2021-07-30T11:00:32.972457785Z"}                                                                                                                                           {"log":"2021-07-30 11:00:34,948 ERROR    awx.main.consumers Request user is not authenticated to use websocket.\n","stream":"stderr","time":"2021-07-30T11:00:34.94925464Z"}
{"log":"2021-07-30 11:00:34,948 ERROR    awx.main.consumers Request user is not authenticated to use websocket.\n","stream":"stderr","time":"2021-07-30T11:00:34.949291155Z"}                                                                {"log":"2021-07-30 11:00:34,948 ERROR    Request user is not authenticated to use websocket.\n","stream":"stderr","time":"2021-07-30T11:00:34.949786083Z"}
{"log":"10.222.0.177 - - [30/Jul/2021:11:00:34 +0000] \"GET /websocket/ HTTP/1.1\" 101 21 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36\" \"-\"\n","stream":"stdout","time":"2021-07-30T11:00:34.972647339Z"}
{"log":"2021/07/30 11:00:34 [error] 79#0: *5712265 recv() failed (104: Connection reset by peer) while proxying upgraded connection, client: 10.222.0.177, server: _, request: \"GET /websocket/ HTTP/1.1\", upstream: \"http://127.0.0.1:805
1/websocket/\", host: \"awx.hkm.de\"\n","stream":"stderr","time":"2021-07-30T11:00:34.972755766Z"}
{"log":"2021-07-30 11:00:36,950 ERROR    awx.main.consumers Request user is not authenticated to use websocket.\n","stream":"stderr","time":"2021-07-30T11:00:36.950369256Z"}                                                                {"log":"2021-07-30 11:00:36,950 ERROR    awx.main.consumers Request user is not authenticated to use websocket.\n","stream":"stderr","time":"2021-07-30T11:00:36.950425577Z"}
{"log":"2021-07-30 11:00:36,950 ERROR    Request user is not authenticated to use websocket.\n","stream":"stderr","time":"2021-07-30T11:00:36.951012428Z"}                                                                                   {"log":"10.222.0.177 - - [30/Jul/2021:11:00:36 +0000] \"GET /websocket/ HTTP/1.1\" 101 21 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36\" \"-\"\n","stream":"st
dout","time":"2021-07-30T11:00:36.975319527Z"}
{"log":"2021/07/30 11:00:36 [error] 79#0: *5712267 recv() failed (104: Connection reset by peer) while proxying upgraded connection, client: 10.222.0.177, server: _, request: \"GET /websocket/ HTTP/1.1\", upstream: \"http://127.0.0.1:805
1/websocket/\", host: \"awx.hkm.de\"\n","stream":"stderr","time":"2021-07-30T11:00:36.975533137Z"}
{"log":"2021-07-30 11:00:38,047 ERROR    awx.main.consumers Request user is not authenticated to use websocket.\n","stream":"stderr","time":"2021-07-30T11:00:38.047630265Z"}
{"log":"2021-07-30 11:00:38,047 ERROR    awx.main.consumers Request user is not authenticated to use websocket.\n","stream":"stderr","time":"2021-07-30T11:00:38.047662461Z"}                                                                {"log":"2021-07-30 11:00:38,047 ERROR    Request user is not authenticated to use websocket.\n","stream":"stderr","time":"2021-07-30T11:00:38.048250053Z"}
{"log":"10.222.0.177 - - [30/Jul/2021:11:00:38 +0000] \"GET /websocket/ HTTP/1.1\" 101 21 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36\" \"-\"\n","stream":"st
dout","time":"2021-07-30T11:00:38.072265932Z"}
{"log":"2021/07/30 11:00:38 [error] 79#0: *5712269 recv() failed (104: Connection reset by peer) while proxying upgraded connection, client: 10.222.0.177, server: _, request: \"GET /websocket/ HTTP/1.1\", upstream: \"http://127.0.0.1:805
1/websocket/\", host: \"awx.hkm.de\"\n","stream":"stderr","time":"2021-07-30T11:00:38.072308602Z"}
{"log":"2021-07-30 11:00:39,140 ERROR    awx.main.consumers Request user is not authenticated to use websocket.\n","stream":"stderr","time":"2021-07-30T11:00:39.141282935Z"}
{"log":"2021-07-30 11:00:39,140 ERROR    awx.main.consumers Request user is not authenticated to use websocket.\n","stream":"stderr","time":"2021-07-30T11:00:39.141320863Z"}
{"log":"2021-07-30 11:00:39,140 ERROR    Request user is not authenticated to use websocket.\n","stream":"stderr","time":"2021-07-30T11:00:39.142003499Z"}
{"log":"10.222.0.177 - - [30/Jul/2021:11:00:39 +0000] \"GET /websocket/ HTTP/1.1\" 101 21 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36\" \"-\"\n","stream":"st
dout","time":"2021-07-30T11:00:39.165517443Z"}
{"log":"2021/07/30 11:00:39 [error] 79#0: *5712271 recv() failed (104: Connection reset by peer) while proxying upgraded connection, client: 10.222.0.177, server: _, request: \"GET /websocket/ HTTP/1.1\", upstream: \"http://127.0.0.1:805
1/websocket/\", host: \"awx.hkm.de\"\n","stream":"stderr","time":"2021-07-30T11:00:39.165715431Z"}
{"log":"2021-07-30 11:00:40,238 ERROR    awx.main.consumers Request user is not authenticated to use websocket.\n","stream":"stderr","time":"2021-07-30T11:00:40.238941632Z"}
{"log":"2021-07-30 11:00:40,238 ERROR    awx.main.consumers Request user is not authenticated to use websocket.\n","stream":"stderr","time":"2021-07-30T11:00:40.239105546Z"}
{"log":"2021-07-30 11:00:40,238 ERROR    Request user is not authenticated to use websocket.\n","stream":"stderr","time":"2021-07-30T11:00:40.240089793Z"}
{"log":"10.222.0.177 - - [30/Jul/2021:11:00:40 +0000] \"GET /websocket/ HTTP/1.1\" 101 21 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36\" \"-\"\n","stream":"st
dout","time":"2021-07-30T11:00:40.264837817Z"}
`

user: michaelkebe
issue_10784: state: open
title: RFE: Support provisioning callbacks when the node can't reach tower proper
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
When managed nodes cannot reach AWX (e.g. due to firewall restrictions), provisioning callbacks cannot be used. The obvious workaround, using the API to launch jobs, requires authorization  hence a user account, which is way more complicated than just a url and a a simple token (host config key)

#1638 already asked about this, but was close with reference to some "receptor" architecture. A quick search suggests such is now in use in the code, so is a solution for this problem now possible?

user: azrdev
issue_10770: state: open
title: Add job output item changed filter
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Currently we have event filters for:
* Item OK
* Item Failed
* Item Skipped

But no "Item Changed".

![image](https://user-images.githubusercontent.com/1826947/127336828-2a583e1d-4e39-441e-a435-8053facd55c2.png)

I frequently want to skip to (or filter) tasks which changed something to see what they did (or want to do in the case of check mode). So it would be useful if "changed" were added to this list of item filters.
user: phemmer
issue_10759: state: open
title: Cleanup imagePullSecret from k8s when delete Credential
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->
Cleanup imagePullSecret from k8s when delete Credential

#10238

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bugfix Pull Request

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
19.2.2
```


##### ADDITIONAL INFORMATION
<!---
Include additional information to help people understand the change here.
For bugs that don't have a linked bug report, a step-by-step reproduction
of the problem is helpful.
  -->

<!--- Paste verbatim command output below, e.g. before and after your change -->
```

```

user: oweel
issue_10754: state: open
title: RFE: Option to set Extra Env Vars at some non-global level
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
A example use case for this would be to set proxy config based on the isolated instance group the job is executing against. 

user: benjdudas
issue_10744: state: open
title: no partition of relation "main_projectupdateevent" found
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

After changing the execution environment of a inventory source, I received the following exception when trying to perform an inventory sync.
```
django.db.utils.IntegrityError: no partition of relation "main_projectupdateevent" found for row
DETAIL:  Partition key of the failing row contains (job_created) = (2021-07-23 17:45:42.319417+00).
```

### AWX version

19.2.2

### Installation method

minikube

### Modifications

no

### Ansible version

2.10.11

### Operating system

Debian Buster

### Web browser

Chrome

### Steps to reproduce

Not sure. The last thing I did prior to this was to change the execution environment on an inventory source.

### Expected results

Jobs to run

### Actual results

```
2021-07-23 17:45:42,050 DEBUG    [3f9134a3faf445ae8a3694e5d316ff83] awx.main.dispatch task aab78528-b800-495a-8ce8-9355a64689ce starting awx.main.scheduler.tasks.run_task_manager(*[])
2021-07-23 17:45:42,053 DEBUG    [3f9134a3faf445ae8a3694e5d316ff83] awx.main.scheduler Running task manager.
2021-07-23 17:45:42,065 DEBUG    [3f9134a3faf445ae8a3694e5d316ff83] awx.main.scheduler Starting Scheduler
2021-07-23 17:45:42,118 DEBUG    [3f9134a3faf445ae8a3694e5d316ff83] awx.analytics.job_lifecycle inventoryupdate-383 acknowledged
2021-07-23 17:45:42,169 DEBUG    [3f9134a3faf445ae8a3694e5d316ff83] awx.main.models.inventory Going to update inventory computed fields, pk=2
2021-07-23 17:45:42,179 DEBUG    [3f9134a3faf445ae8a3694e5d316ff83] awx.main.models.inventory Finished updating inventory computed fields, pk=2, in 0.010 seconds
2021-07-23 17:45:42,180 DEBUG    [3f9134a3faf445ae8a3694e5d316ff83] awx.analytics.job_lifecycle inventoryupdate-383 waiting
2021-07-23 17:45:42,180 DEBUG    [3f9134a3faf445ae8a3694e5d316ff83] awx.main.scheduler inventory_update 383 (waiting) consumed 1 capacity units from default with prior total of 0
2021-07-23 17:45:42,181 DEBUG    [3f9134a3faf445ae8a3694e5d316ff83] awx.main.scheduler Finishing Scheduler
2021-07-23 17:45:42,200 DEBUG    [3f9134a3faf445ae8a3694e5d316ff83] awx.main.dispatch task f4767f62-4d57-4b8b-b3a9-d1fdeb13d2ad starting awx.main.tasks.RunInventoryUpdate(*[383])
2021-07-23 17:45:42,280 DEBUG    [3f9134a3faf445ae8a3694e5d316ff83] awx.main.models.inventory Going to update inventory computed fields, pk=2
2021-07-23 17:45:42,292 DEBUG    [3f9134a3faf445ae8a3694e5d316ff83] awx.main.models.inventory Finished updating inventory computed fields, pk=2, in 0.011 seconds
2021-07-23 17:45:42,316 DEBUG    [3f9134a3faf445ae8a3694e5d316ff83] awx.analytics.job_lifecycle inventoryupdate-383 pre run
2021-07-23 17:45:42,339 DEBUG    [3f9134a3faf445ae8a3694e5d316ff83] awx.analytics.job_lifecycle projectupdate-384 created
2021-07-23 17:45:42,411 DEBUG    [3f9134a3faf445ae8a3694e5d316ff83] awx.analytics.job_lifecycle projectupdate-384 pre run
2021-07-23 17:45:42,421 DEBUG    [3f9134a3faf445ae8a3694e5d316ff83] awx.analytics.job_lifecycle projectupdate-384 preparing playbook
2021-07-23 17:45:42,452 DEBUG    [3f9134a3faf445ae8a3694e5d316ff83] awx.analytics.job_lifecycle projectupdate-384 running playbook


2021-07-23 17:45:43,487 DEBUG    [-] awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-07-23 17:45:43,487 DEBUG    [-] awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-07-23 17:45:43,502 ERROR    [-] awx.main.commands.run_callback_receiver Database Error Saving Job Event
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.CheckViolation: no partition of relation "main_projectupdateevent" found for row
DETAIL:  Partition key of the failing row contains (job_created) = (2021-07-23 17:45:42.319417+00).


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/dispatch/worker/callback.py", line 130, in flush
    cls.objects.bulk_create(events)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/query.py", line 474, in bulk_create
    ids = self._batched_insert(objs_without_pk, fields, batch_size, ignore_conflicts=ignore_conflicts)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/query.py", line 1202, in _batched_insert
    inserted_id = self._insert(
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/query.py", line 1186, in _insert
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/sql/compiler.py", line 1377, in execute_sql
    cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
django.db.utils.IntegrityError: no partition of relation "main_projectupdateevent" found for row
DETAIL:  Partition key of the failing row contains (job_created) = (2021-07-23 17:45:42.319417+00).


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.CheckViolation: no partition of relation "main_projectupdateevent" found for row
DETAIL:  Partition key of the failing row contains (job_created) = (2021-07-23 17:45:42.319417+00).


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/dispatch/worker/callback.py", line 139, in flush
    e.save()
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/models/base.py", line 176, in save
    super(CreatedModifiedModel, self).save(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/base.py", line 743, in save
    self.save_base(using=using, force_insert=force_insert,
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/base.py", line 780, in save_base
    updated = self._save_table(
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/base.py", line 873, in _save_table
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/base.py", line 910, in _do_insert
    return manager._insert([self], fields=fields, return_id=update_pk,
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/query.py", line 1186, in _insert
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/sql/compiler.py", line 1377, in execute_sql
    cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
django.db.utils.IntegrityError: no partition of relation "main_projectupdateevent" found for row
DETAIL:  Partition key of the failing row contains (job_created) = (2021-07-23 17:45:42.319417+00).

2021-07-23 17:45:43,502 ERROR    [-] awx.main.commands.run_callback_receiver Database Error Saving Job Event
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.CheckViolation: no partition of relation "main_projectupdateevent" found for row
DETAIL:  Partition key of the failing row contains (job_created) = (2021-07-23 17:45:42.319417+00).


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/dispatch/worker/callback.py", line 130, in flush
    cls.objects.bulk_create(events)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/query.py", line 474, in bulk_create
    ids = self._batched_insert(objs_without_pk, fields, batch_size, ignore_conflicts=ignore_conflicts)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/query.py", line 1202, in _batched_insert
    inserted_id = self._insert(
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/query.py", line 1186, in _insert
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/sql/compiler.py", line 1377, in execute_sql
    cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
django.db.utils.IntegrityError: no partition of relation "main_projectupdateevent" found for row
DETAIL:  Partition key of the failing row contains (job_created) = (2021-07-23 17:45:42.319417+00).


During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.CheckViolation: no partition of relation "main_projectupdateevent" found for row
DETAIL:  Partition key of the failing row contains (job_created) = (2021-07-23 17:45:42.319417+00).


The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/dispatch/worker/callback.py", line 139, in flush
    e.save()
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/models/base.py", line 176, in save
    super(CreatedModifiedModel, self).save(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/base.py", line 743, in save
    self.save_base(using=using, force_insert=force_insert,
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/base.py", line 780, in save_base
    updated = self._save_table(
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/base.py", line 873, in _save_table
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/base.py", line 910, in _do_insert
    return manager._insert([self], fields=fields, return_id=update_pk,
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/query.py", line 1186, in _insert
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/sql/compiler.py", line 1377, in execute_sql
    cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
django.db.utils.IntegrityError: no partition of relation "main_projectupdateevent" found for row
DETAIL:  Partition key of the failing row contains (job_created) = (2021-07-23 17:45:42.319417+00).
```

### Additional information

_No response_
user: phemmer
issue_10742: state: open
title: Inventory variables being imported as strings
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

When importing variables defined in the inventory, the keys are coming back as strings.

For example I have something similar to:
```
all:
  vars:
    location_names:
      0: abc
      1: def
      2: ghi
    location: '{{ location_names[location_id] }}'
```

However after the inventory has been imported into AWX, the keys for `location_names` are stored as strings instead of integers. This causes the `location` variable to fail as the integer version of the key cannot be found.

### AWX version

19.2.2

### Installation method

minikube

### Modifications

no

### Ansible version

2.10.11

### Operating system

Debian Buster

### Web browser

Chrome

### Steps to reproduce

* Create a project containing an inventory with:

```
all:
  vars:
    location_names:
      0: abc
      1: def
      2: ghi
```

* Import the inventory from the project.
* View the inventory's imported variables.

### Expected results

`location_names` keys should be integers.

### Actual results

`location_names` keys are strings.

### Additional information

_No response_
user: phemmer
issue_10736: state: open
title: collection's license module doesn't fail if manifest file is incorrect
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

_No response_

### AWX version

Tower 3.8 and AAP 2.0

### Installation method

docker on linux

### Modifications

no

### Ansible version

2.9

### Operating system

RHEL 8.4

### Web browser

Firefox

### Steps to reproduce

I tried by mistake to upload the wrong manifest (it happened to be a random .tar.gz file, incorrectly renamed to look like a manifest.zip file) and it wasn't reported by the module. Trying the same thing through the UI spits out an error, so I'm pretty sure that it's an issue of the module.

### Expected results

an error rejecting the file

### Actual results

no error message

### Additional information

Same behavior with awx.awx collection 19.2.0 used against AAP 2.0 and with awx.awx 19.1.0 used against Tower 3.8 so I guess that the error is pretty stable and still there, if nobody has addressed it since then.
user: ericzolf
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_10735: state: open
title: Unwanted keyctl syscalls from python-ldap -> OpenLDAP -> Cyrus Sasl
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

For every web page request (that may include authentication/ authorisation) the web container performs multiple `keyctl` syscalls. The `keyctl` syscall is not included in the default seccomp Docker profile and results in audit events on the host.
Since every request result in a auditd event in the audit logs, it will result in a lot of events when the service is used extensively.

To trace all syscalls made by the uwsgi process, and filter for the keyctl syscall specifically I used the command below in the container:
`strace -tt -T $(pidof 'uwsgi' | sed 's/\([0-9]*\)/\-p \1/g') 2>&1 | grep keyctl`

The auditd event:
`type=SECCOMP msg=audit(1626767070.957:79626): auid=4294967295 uid=0 gid=0 ses=4294967295 subj=system_u:system_r:spc_t:s0 pid=53596 comm="uwsgi" sig=0 arch=c000003e syscall=250 compat=0 ip=0x7f16c3d996ed code=0x50000AUID="unset" UID="root" GID="root" ARCH=x86_64 SYSCALL=unknown-syscall(-1)`

strace command result:
```
[pid    87] 09:05:14.170919 keyctl(KEYCTL_GET_PERSISTENT, 0, KEY_SPEC_PROCESS_KEYRING) = 386832846 <0.000156>
[pid    87] 09:05:14.171358 keyctl(KEYCTL_SEARCH, 386832846, "keyring", "_krb", KEY_SPEC_PROCESS_KEYRING) = 184696767 <0.000188>
[pid    87] 09:05:14.171863 keyctl(KEYCTL_SEARCH, 184696767, "user", "krb_ccache:primary", 0) = 150118346 <0.000178>
[pid    87] 09:05:14.172543 keyctl(KEYCTL_READ, 150118346, NULL, 0) = 9 <0.000617>
[pid    87] 09:05:14.174020 keyctl(KEYCTL_READ, 150118346, "\0\0\0\1\0\0\0\0010", 9) = 9 <0.000207>
[pid    87] 09:05:14.174839 keyctl(KEYCTL_READ, 184696767, NULL, 0) = 4 <0.000291>
[pid    87] 09:05:14.175722 keyctl(KEYCTL_READ, 184696767, "\312\237\362\10", 4) = 4 <0.000089>
[pid    87] 09:05:14.176501 keyctl(KEYCTL_SEARCH, 184696767, "keyring", "0", 0) = -1 ENOKEY (Required key not available) <0.000515>
[pid    87] 09:05:14.177888 keyctl(KEYCTL_DESCRIBE, 150118346, NULL, 0) = 37 <0.000796>
[pid    87] 09:05:14.179593 keyctl(KEYCTL_DESCRIBE, 150118346, "user;0;0;3f010000;krb_ccache:pri"..., 37) = 37 <0.000209>
[pid    87] 09:05:14.192642 keyctl(KEYCTL_GET_PERSISTENT, 0, KEY_SPEC_PROCESS_KEYRING) = 386832846 <0.000139>
[pid    87] 09:05:14.193014 keyctl(KEYCTL_SEARCH, 386832846, "keyring", "_krb", KEY_SPEC_PROCESS_KEYRING) = 184696767 <0.000090>
[pid    87] 09:05:14.193461 keyctl(KEYCTL_SEARCH, 184696767, "user", "krb_ccache:primary", 0) = 150118346 <0.000134>
[pid    87] 09:05:14.193952 keyctl(KEYCTL_READ, 150118346, NULL, 0) = 9 <0.000174>
[pid    87] 09:05:14.194753 keyctl(KEYCTL_READ, 150118346, "\0\0\0\1\0\0\0\0010", 9) = 9 <0.000516>
[pid    87] 09:05:14.195888 keyctl(KEYCTL_READ, 184696767, NULL, 0) = 4 <0.000185>
[pid    87] 09:05:14.196849 keyctl(KEYCTL_READ, 184696767, "\312\237\362\10", 4) = 4 <0.000335>
[pid    87] 09:05:14.197633 keyctl(KEYCTL_SEARCH, 184696767, "keyring", "0", 0) = -1 ENOKEY (Required key not available) <0.000458>
[pid    87] 09:05:14.198668 keyctl(KEYCTL_DESCRIBE, 150118346, NULL, 0) = 37 <0.000117>
[pid    87] 09:05:14.199104 keyctl(KEYCTL_DESCRIBE, 150118346, "user;0;0;3f010000;krb_ccache:pri"..., 37) = 37 <0.000262>
```

The syscall is related to kerberos.

We could allow `keyctl` syscalls with a custom seccomp profile, and include the `keyctl` syscall:
```
		{
			"names": [
				"keyctl"
			],
			"action": "SCMP_ACT_ALLOW"
		},
```

Or run the container with security option: `seccomp:unconfined` (be careful with this option).

The syscall is related to the `python-ldap` module, which wraps OpenLDAP client library (`libldap`) which includes the `Cyrus SASL library`.
 
The DJANGO python-ldap integration can partly be configured via settings API and/ or custom Python configuration. 

```
import ldap

AUTH_LDAP_CONNECTION_OPTIONS = {
    ldap.OPT_REFERRALS: 0,
    ldap.OPT_NETWORK_TIMEOUT: 120,
    ldap.OPT_X_TLS_NEWCTX: 0,
    ldap.OPT_X_SASL_MECH: 'PLAIN',
    ldap.OPT_DEBUG_LEVEL: 0
}
```

I defined the environment variable in our `environment.sh` file:
```
KRB5CCNAME=FILE:/tmp/
```

More info regarding this can be found in the Cyrus SASL Git repository: https://github.com/cyrusimap/cyrus-sasl/

I was hoping setting the `OPT_X_SASL_MECH` to `EXTERNAL` or `PLAIN` would disable kerberos or setting the `KRB5CCNAME` environment variable would use local file caching for TGT and disable the `keyctl` syscalls. But both settings do not seem to have any affect.

How to configure/ disable the `keyctl` syscalls if kerberos authentication is not used?
How to exclude/ filter out these particular audit events, I have tried different auditd rules but they don't seem to catch the `SYSCALL=unknown-syscall(-1)`

The syscall is also performed if LDAP is not configured. 

### AWX version

15+

### Installation method

docker on linux

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Start a host operating system with SELinux, Auditd and Docker with seccomp enabled.
Start local AWX environment in docker.
This should result in auditd events regarding the unknown keyctl syscall. 


### Expected results

If the kerberos authentication mechanism is not used we should be able to disable the syscalls to keyctl.

### Actual results

Auditd events

### Additional information

_No response_
user: velzend
issue_10731: state: open
title: Support / Consume MFA declarations from IdP
body: ##### ISSUE TYPE
 - Feature Idea
 - Security Improvement

##### SUMMARY
Perusing through the issues attached to this project it becomes clear that it is the opinion of the project team that 2FA/MFA is the responsibility of the IdP and not something which will itself become part of Ansible AWX. Let's take that as a given and not bother to argue the merits of it, as the decision has clearly been made and I presume a great deal of thought went into it.

However, if it is the decision of the team and the wider community that the IdP should be handling 2FA/MFA then it would be desirable to configure the application to consume declaration that MFA auth has been attempted and succeeded (EG: conformance to the https://refeds.org/profile/mfa MFA profile in the SAML2 community) as well as to make it possible to request MFA from the IdP at authentication time (this isn't always configured as part of the SAML metadata, for instance). This would prevent failures to MFA, while still authenticating correctly otherwise (as is known can happen with some commercial 2FA/MFA vendors' APIs), from resulting in access when MFA is meant to be required.

I'll be happy to flesh this out a bit more, I'm just getting the essentials down right now.

user: dnorthup-ums
labels: component:authentication: For issues related to authentication
issue_10715: state: open
title: Safely Launch Large Slice Counts to Workers
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
When launching a job with a large number of slices, all jobs are queued up immediately to be dispatched and then queued based on capacity. This causes instability in the UI. Based on the available worker count, these newly spawned jobs for dispatch should be processed safely based on the number of available workers and not result in UI issues.

user: jamesmarshall24
issue_10699: state: open
title: TOWER_HOST=https://awx.example.org TOWER_USERNAME=example TOWER_PASSWORD=secret make clean html
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

When I try a compile on Centos-7.9 it fails with the following error:

$ TOWER_HOST=https://awx.example.org TOWER_USERNAME=example TOWER_PASSWORD=secret make clean html
Running Sphinx v4.1.1

Exception occurred:
  File "/usr/local/lib/python3.6/site-packages/awxkit/cli/sphinx.py", line 4, in <module>
    from sphinxcontrib.autoprogram import AutoprogramDirective
  File "/usr/local/lib/python3.6/site-packages/sphinxcontrib/autoprogram.py", line 11
    from __future__ import annotations
                                     ^
SyntaxError: future feature annotations is not defined
The full traceback has been saved in /tmp/sphinx-err-86h4xf0k.log, if you want to report the issue to the developers.
Please also report this if it was a user error, so that a better error message can be provided next time.
A bug report can be filed in the tracker at <https://github.com/sphinx-doc/sphinx/issues>. Thanks!
make: *** [html] Error 2


### AWX version

19.2.2

### Installation method

kubernetes

### Modifications

no

### Ansible version

_No response_

### Operating system

2.9.23

### Web browser

Edge

### Steps to reproduce

sudo pip3 install awxkit
sudo pip3 install sphinx sphinxcontrib-autoprogram
cd /home/andrew.cowan/awx/awxkit/awxkit/cli/docs
$ TOWER_HOST=https://awx.example.org TOWER_USERNAME=example TOWER_PASSWORD=secret make clean html
Running Sphinx v4.1.1


### Expected results

make clean html - Builds code.

### Actual results

Build fails with:

Exception occurred:
  File "/usr/local/lib/python3.6/site-packages/awxkit/cli/sphinx.py", line 4, in <module>
    from sphinxcontrib.autoprogram import AutoprogramDirective
  File "/usr/local/lib/python3.6/site-packages/sphinxcontrib/autoprogram.py", line 11
    from __future__ import annotations
                                     ^

### Additional information

This is a clean Centos 7.9 environment acting as a client to Kubernetes cluster.
user: techietubby
issue_10690: state: open
title: Enable usage of vault client script in Ansible Tower
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
From Ansible CLI it is possible to use a vault client script to run playbooks as the example below:
`ansible-playbook --vault-id vaulttest@vaulttest.py my_playbook.yml`

The same cannot be achieved in AWX/Tower when using the Vault credential as it does not have a place to set the vault client script and setting it on the field "Vault identifier" doesn't work either.
user: lucas-benedito
issue_10689: state: open
title: Add management job to cleanup old schedules on job templates
body: ##### SUMMARY
<!--- Describe the change, including rationale and design decisions -->

<!---
If you are fixing an existing issue, please include "related #nnn" in your
commit message and your description; but you should still explain what
the change does.
-->
Add management job to cleanup old schedules on job templates

#10307 

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Pull Request

##### COMPONENT NAME
<!--- Name of the module/plugin/module/task -->
 - API

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
19.2.2
```

user: oweel
issue_10680: state: open
title: Add import tests
body: Requires https://github.com/ansible/awx/pull/10562

* Add tests to verify:
  * All imports between modules under the _same_ screen are relative
  * Imports between modules under _different_ screens aren't allowed
  * Except for `src/screens` (see above), all imports between modules under the same top-level directory are relative
  * All other imports not mentioned above are absolute
* Show a helpful message when these tests fail.



user: jakemcdermott
issue_10678: state: open
title: Reduce test execution time
body: We exceed ~20 mins on some CI runs now. It would be good to bring test execution times back down to ~10 minutes or less on average.

Possible avenues to explore (but by no means an exhaustive list):

* Jest CLI options (parallelization, workers, etc.)
* Timeouts for async tests might need tuning
* Convert some tests to shallow rendering
* Remove slow tests that provide wholly redundant coverage
* Distribute the tests to different CI jobs (e.g one job for `src/screens`, another for everything else). This is worth considering if other approaches don't work out.
  * requires https://github.com/ansible/awx/pull/10672

Before starting, establish and document a method for comparing before/after PR performance empirically.
user: jakemcdermott
issue_10670: state: open
title: AWX (cli) social logins not working
body: ##### ISSUE TYPE
 - Logging in using configured "social" accounts (oauth2) is not working or to complicated on the awx cli tool.
 - logging in using e.g. your google account does not work out of the box. it might be possible to manually generate a client ID but this is at least not seamless and to complicated for daily use.


##### SUMMARY
when logging in using an external oauth2 account (in awx called "social" account), i would expect that the AWX cli tool opens a browser with the google login page to handle the login process or returns a URL so one can use on a non-headless system to generate the token and add it to the config.

user: marcoatenway
issue_10666: state: open
title:  Email notification authentication that supports sending an oauth token
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea
 -  Email notification authentication that supports sending an OAuth token.

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

Email notification authentication that supports sending an [OAuth token](https://docs.microsoft.com/en-us/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth#sasl-xoauth2) when SMTP AUTH is off.



user: tuxonfire
issue_10661: state: open
title: Custom icon SAML
body: 
##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
>Since SAML login is usually corporate, it would be really good to have an option to replace this nondescript icon with company logo - that way it would be much easier to explain to users where they need to click to login

This will probably require API and UI changes.

Filing a separate issue from https://github.com/ansible/awx/issues/9554

user: nixocio
issue_10659: state: open
title: OAuth2: Generate Tokens from Applications page
body: ##### ISSUE TYPE
 - Feature Idea

#### SUMMARY

Currently, in the UI, users can only create tokens from the Tokens tab on their User page.  

We should make it possible to create Application Tokens from the Applications page in the UI.  The tricky bit is that every token needs to be associated with a user in order to leverage our RBAC system.  So when creating the token, it must be possible to:

- Specify an existing user OR
- Generate a service account for that application

> Note: when I refer to `service account`, it is just another user.  It might be useful to add a boolean flag `service_account` to the User model to be able to filter these out in case we need to add a disable all service accounts further down the road, etc.

This could be a new `Create Service Account` button, which would make a POST to `api/v2/users` to create a service account with a generated name such as `<application-name>-service-account` (will need to deal with collisions).  

##### UI Considerations

The form would have the following inputs:
* Description
* Scope
* User (if you click `Create Service Account`, the default user will be set to this service account)

When the user clicks `Submit` to create the app token in the UI, the UI will make POST to:
* `api/v2/application/<#>/tokens` to create the token

##### RBAC

Only Admin's and Org Admin's should be able to generate a service account.  
user: rooftopcellist
labels: type:feature: prioritized on a feature board
issue_10655: state: open
title: [Meta] Multiple API Requests being made when unnecessary
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Certain places in Tower, where API requests are being sent and received, multiples (duplicates) of requests are being made when unnecessary. See screenshots:

When creating and saving a new schedule only inside of a workflow template:
![image](https://user-images.githubusercontent.com/63685497/125810688-90484bf6-073e-4e43-872b-f7fe8336a961.png)

When creating a new group inside of an inventory:
![image](https://user-images.githubusercontent.com/63685497/125810850-7308bab5-4682-497d-952e-3964eadefbb0.png)

When visiting the details page of a workflow template:
![image](https://user-images.githubusercontent.com/63685497/125809289-4fcc9928-2e49-40ae-8fd7-f34161dbf1b3.png)


### AWX version

4.0

### Installation method

docker for mac

### Modifications

no

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

Create a schedule inside a workflow template. When clicking save, take note of API duplicate requests (4 of each) on network tab.

Access details page for a workflow template. Take note of duplicate requests on network tab.

Create a group inside an inventory. When clicking save, take note of API duplicate requests on network tab.

### Expected results

One of each necessary request should be made.

### Actual results

multiples are being received.

### Additional information

_No response_
user: akus062381
issue_10648: state: open
title: Running AWX as non-root user
body: Running any docker container as a root user is considered to be a security risk. Running container as root invites a lot of security issues with privilege escalation being one of them also this 

As highlighted here: Looks like people have raised this issue as well. 

Could you provide AWX specifications on running AWX as a non-privileged user or specifications where we can apply the principle of least privilege while running AWX properly and securely?
user: pgaijin66
issue_10644: state: open
title: Rethink ad-hoc commands in an EE context
body: 

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
1. Small things

AD_HOC_COMMANDS isn't collectionified, and may have (probably does) defaults that aren't in the stock EE. It's also one global setting

2. Bigger things

We can use indexed content and collections in EEs to build something much better. But... larger thing.

user: wenottingham
issue_10616: state: open
title: AWX 19.2.2 PermissionError: /runner/env/
body: ### Please confirm the following

- [X] I agree to follow this project's [code of conduct](http://docs.ansible.com/ansible/latest/community/code_of_conduct.html).
- [X] I have checked the [current issues](https://github.com/ansible/awx/issues) for duplicates.
- [X] I understand that AWX is open source software provided for free and that I am not entitled to status updates or other assurances.

### Summary

Running AWX 19.2.2 with awx-operator 0.12.0 on kubernetes. AWX EE 0.5.0
Images are pushed (not modified) to a local private registry.
When I try to execute a job template, I receive the following error after a few seconds:


`Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/ansible_runner/streaming.py", line 107, in run
    unstream_dir(self._input, data['zipfile'], self.private_data_dir)
  File "/usr/local/lib/python3.8/site-packages/ansible_runner/utils/streaming.py", line 59, in unstream_dir
    os.chmod(out_path, perm)
PermissionError: [Errno 1] Operation not permitted: '/runner/env/'`

There was no such problem with AWX 19.2.0 and operator 0.10.0.

### AWX version

19.2.2

### Installation method

kubernetes

### Modifications

yes

### Ansible version

_No response_

### Operating system

_No response_

### Web browser

_No response_

### Steps to reproduce

- Push images to private registry
- Launch AWX operator and AWX
- Create a new project and template
- Execute template

### Expected results

Job runs without error like in version 19.2.0

### Actual results

Job error:
`Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/ansible_runner/streaming.py", line 107, in run
    unstream_dir(self._input, data['zipfile'], self.private_data_dir)
  File "/usr/local/lib/python3.8/site-packages/ansible_runner/utils/streaming.py", line 59, in unstream_dir
    os.chmod(out_path, perm)
PermissionError: [Errno 1] Operation not permitted: '/runner/env/'`

### Additional information

_No response_
user: CWollinger
issue_10610: state: open
title: Introduce option for WorkflowApprovalTemplates so users cannot approve their own workflow job
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
At the moment the right to allow approvals is only dependent on the approval permission or the super user role. Therefore a user who can start a workflow job and also has the right to approve, can approve their own jobs.

Sometimes teams want to apply something like _"two-man rule"_ or _"4-eye principle"_, where everybody in the team has the right to start a job, but a second member of the team should approve.

###### Suggestion
Add a setting on the level of WorkflowApprovalTemplate named e.g. "Self approval forbidden", which is false by default to not break existing approval templates.

When enabled, this setting enforces the approver to be somebody else than the person who started the workflow job.

In `awx/main/access.py` the right to approve is checked in the method WorkflowApprovalAccess#can_approve_or_deny. The new code could look something like this:

```python
    def can_approve_or_deny(self, obj):
        
        # new code starting here
        if obj.approval_template and obj.approval_template.cannotApproveSelf:
            return self.user != obj.created_by
        # new code ending here

        if (obj.workflow_job_template and self.user in obj.workflow_job_template.approval_role) or self.user.is_superuser:
            return True
```

user: davidburkhart
issue_10603: state: open
title: API call that returns inventory objects associated with nested workflow templates/jobs
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

Catalog needs API call that returns all associated Inventory objects with a workflow, namely:

1. List all inventory objects of job_templates nested under workflow template
2. List all inventory objects of jobs nested under workflow job

We'd need this done in one API call, so this information would have to be most likely pre-computed/cached on Controller side

user: Ladas
issue_10599: state: open
title: authentication: manage SAML and LDAP auth source that may overlap 
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

We configuring two authentication sources of type LDAP and SAML with the same users. Users from these sources end up with the social tag. 

Let's suppose we have the users: 
- **bob** : LDAP user, can connect to AWX through his login password 
-  **bob** : A SAML user 

bob can connect through LDAP, but once he connects through SAML it will be tagged as SAML user and this cannot be reverted. So he can no longer connect through LDAP. 

My request here is : 

- either to have users that may have both LDAP and SOCIAL tags so it's the same user but he can keep connect from whatever source he wants. 
- If we have multipe sources with the same users, then create different users with different tags. and keep connect from any source. 



user: riadhhamdi
labels: component:authentication: For issues related to authentication
issue_10579: state: open
title: Migrating data from old docker-installation to AWX (19.2.1 & 19.2.2) fails during migration
body: ### Summary

I have migrated the postgresql-data from an older AWX docker-installation to a kubernetes-installation. Upgrade to version 19.2.0 (operator 0.10.0) works like a charm. Upgrading to either 19.2.1 or 19.2.2 fails during the data migration. The awx-operator logs prints no errors but browsing to the awx web-ui shows "awx is upgrading" in a forever-loop.

Running the "awx-manage migrate" manually from the awx-web container fails with:

```bash-4.4$ awx-manage migrate --noinput
Operations to perform:
  Apply all migrations: auth, conf, contenttypes, main, oauth2_provider, sessions, sites, social_django, sso, taggit
Running migrations:
  Applying main.0144_event_partitions...Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 8, in <module>
    sys.exit(manage())
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/__init__.py", line 171, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/commands/migrate.py", line 232, in handle
    post_migrate_state = executor.migrate(
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/migrations/executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/migrations/executor.py", line 245, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/migrations/migration.py", line 124, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/migrations/operations/models.py", line 527, in database_forwards
    alter_together(
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/base/schema.py", line 379, in alter_index_together
    self._delete_composed_index(model, fields, {'index': True}, self.sql_delete_index)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/backends/base/schema.py", line 394, in _delete_composed_index
    raise ValueError("Found wrong number (%s) of constraints for %s(%s)" % (
ValueError: Found wrong number (0) of constraints for main_inventoryupdateevent(inventory_update_id, start_line)
```

Additional information from postgresql of table main_inventoryupdateevent:
```awx=# \d+ public.main_inventoryupdateevent
                                                               Table "public.main_inventoryupdateevent"
       Column        |           Type           | Collation | Nullable |                        Default                        | Storage  | Stats target | Description 
---------------------+--------------------------+-----------+----------+-------------------------------------------------------+----------+--------------+-------------
 id                  | bigint                   |           | not null | nextval('main_inventoryupdateevent_id_seq'::regclass) | plain    |              | 
 created             | timestamp with time zone |           | not null |                                                       | plain    |              | 
 modified            | timestamp with time zone |           | not null |                                                       | plain    |              | 
 event_data          | text                     |           | not null |                                                       | extended |              | 
 uuid                | character varying(1024)  |           | not null |                                                       | extended |              | 
 counter             | integer                  |           | not null |                                                       | plain    |              | 
 stdout              | text                     |           | not null |                                                       | extended |              | 
 verbosity           | integer                  |           | not null |                                                       | plain    |              | 
 start_line          | integer                  |           | not null |                                                       | plain    |              | 
 end_line            | integer                  |           | not null |                                                       | plain    |              | 
 inventory_update_id | integer                  |           | not null |                                                       | plain    |              | 
Indexes:
    "main_inventoryupdateevent_pkey1" PRIMARY KEY, btree (id)
    "main_inventoryupdateevent_inventory_update_id_idx" btree (inventory_update_id)
Check constraints:
    "main_inventoryupdateevent_counter_check" CHECK (counter >= 0)
    "main_inventoryupdateevent_end_line_check" CHECK (end_line >= 0)
    "main_inventoryupdateevent_start_line_check" CHECK (start_line >= 0)
    "main_inventoryupdateevent_verbosity_check" CHECK (verbosity >= 0)
Access method: heap
```



### AWX version

19.2.2

### Installation method

kubernetes

### Modifications

no

### Ansible version

default

### Operating system

Centos 8

### Web browser

_No response_

### Steps to reproduce

Either by migrating the database from an older docker-installation (e.g. awx version 17) directly into (19.2.1/19.2.2) or by migrating the data into 19.2.0 and then upgrade awx to (19.2.1/19.2.2) using the awx-operator (0.11.0 / 0.12.0).

### Expected results

A working awx-installation

### Actual results

awx-task & awx-web stuck during data-migration phase.

### Additional information

_No response_
user: cazzen2k4
issue_10565: state: open
title: GUI settings component broken in 19.2.2
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug Report

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI

##### SUMMARY
/#/settings shows:
Something went wrong...
There was an error loading this content. Please reload the page. Back to Dashboard.
Error details are empty.

Note: Everything else is working fine.

Browser development tools response reports: SyntaxError: JSON.parse: unterminated string at line 1 column 64792 of the JSON data

##### ENVIRONMENT
* AWX version: 19.2.2
* AWX install method: developer environment
* AWX deployment target: Docker compose
* Operating System: MacOS 11.3.1
* Web Browser: tested latest Safari, Firefox and Brave

##### STEPS TO REPRODUCE

Clean install as described in README.md files.

##### EXPECTED RESULTS

Working settings GUI 

##### ACTUAL RESULTS

##### ADDITIONAL INFORMATION

/api/v2/settings/all/ -> no output in GUI REST api explorer

I do get output on all other setting details in GUI REST api exporer like /api/v2/settings/system/ and /api/v2/settings/ldap/.

user: lo78cn
issue_10560: state: open
title: Screen resize causes part of Jobs List to go off screen
body: ![jobs_list](https://user-images.githubusercontent.com/63685497/123998960-ff3ac080-d99f-11eb-9eb3-d6223dd3a7a5.gif)

user: akus062381
issue_10558: state: open
title: Job output not loading in UI when launching job template
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
After launching a job, the UI displays the spinning wheel and stays there forever. 

##### ENVIRONMENT
* AWX version: 19.2.2
* AWX install method: minikube (AWX Operator)
* Ansible version:  2.9.21
* Operating System: AWS Linux 2
* Web Browser: Chrome 91.0.4472.114

##### STEPS TO REPRODUCE

Create a job template with an Inventory whose Source is of type 'Sourced from a Project', with the following options checked: Overwrite, Overwrite variables, Update on launch.

Launch the job template.

##### EXPECTED RESULTS

Job output should appear on the screen as the job completes.

##### ACTUAL RESULTS

The blue spinning wheel stays on the screen forever.

##### ADDITIONAL INFORMATION

If I click on the Jobs tab in the right, and then click back on the "stuck" job, I can see the output normally.

I think this could be related to the following. When I launch the job, the displayed URL is:
<base_url>/#/jobs/116/output 
But when clicking on the job from the Jobs lists, the URL is:
<base_url>/#/jobs/playbook/116/output


user: soy-yo-con-bonete
issue_10555: state: open
title: Org Select Modal inside Notification Creation Form
body: The styling for modal is off when the screen is downsized.

User clicks Notifications, and clicks Add.
Click the search button in the Org field.
Downsize screen. See GIF

![org](https://user-images.githubusercontent.com/63685497/123974564-af053380-d98a-11eb-8816-4d4fcc91ab57.gif)


user: akus062381
issue_10554: state: open
title: Schedule creation form inside a Source of an Inventory- field validation
body: When a user accesses the source tab inside an inventory, and clicks on a specific source, and then accesses the schedules tab inside that source- and clicks the Add button to create a new schedule- I noticed some things:

1) Start date/time allows the user to put a date in the past. If this is intentional, maybe an alert could appear to let the user know, to make sure they intended to put the start time in the past...?
In this screenshot, note the created date vs. the first run date:

![image](https://user-images.githubusercontent.com/63685497/123967896-bf1a1480-d984-11eb-8fb8-58b894b6a165.png)

2) The date field allows the user to put simply a year and save the form, or simply put year and month and save, without any alert- and it defaults to today's date/time with no alert to the user. (note: this field DOES alert the user if they enter a year, month, or day that is missing a digit).

![schedule](https://user-images.githubusercontent.com/63685497/123968372-29cb5000-d985-11eb-9633-aa9f9c299947.gif)



user: akus062381
issue_10549: state: open
title: Auditors can try to associate a Host with a Group
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY

The Add button is enable to auditors users 

##### ENVIRONMENT
* AWX version: X.Y.Z
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  X.Y.Z
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

1. Login as auditor
2. Click on hosts
3. Go to Groups tab


##### EXPECTED RESULTS

Add button to be disabled
##### ACTUAL RESULTS

![image](https://user-images.githubusercontent.com/12464858/123857917-4c178c00-d8f9-11eb-8348-5b1fd0159ba2.png)

user: tiagodread
issue_10546: state: open
title: Notification template webhook validation doesn't indicate HTTP headers needs to be a JSON
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://web.libera.chat/?channels=#ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
No indication that something is wrong about JSON format requirement on Notification template for webhook.

##### ENVIRONMENT
* AWX version: devel
* AWX install method: VM
* Operating System: macOS
* Web Browser: Chrome Canary 93.0.4558.0 (oficial) canary (x86_64)

##### STEPS TO REPRODUCE

- Create or edit a webhook
- Add a HTTP header in plain text
- Get error from console, but no UI indication

https://user-images.githubusercontent.com/2138276/123852530-cb559180-d8f2-11eb-85cc-b16fdcf6d59a.mov

##### EXPECTED RESULTS

- Error message on UI telling me to use JSON format.
- Also, should be better some other explicit way to inform the required format.

##### ACTUAL RESULTS

- Console error:

```log
Warning: An unhandled error was caught from submitForm() SyntaxError: Unexpected token G in JSON at position 0
    at JSON.parse (<anonymous>)
    at NotificationTemplateForm.jsx:234
    at NotificationTemplateForm.jsx:218
    at onSubmit (NotificationTemplateForm.jsx:111)
    at Formik.tsx:851
    at Formik.tsx:1202
    at Formik.tsx:758
(anonymous) @ Formik.tsx:826
Promise.catch (async)
(anonymous) @ Formik.tsx:825
(anonymous) @ Formik.tsx:1202
s @ react-dom.production.min.js:14
f @ react-dom.production.min.js:14
(anonymous) @ react-dom.production.min.js:14
v @ react-dom.production.min.js:15
st @ react-dom.production.min.js:52
ot @ react-dom.production.min.js:51
lt @ react-dom.production.min.js:52
pt @ react-dom.production.min.js:56
F @ react-dom.production.min.js:287
z @ react-dom.production.min.js:19
Qt @ react-dom.production.min.js:70
Zt @ react-dom.production.min.js:69
t.unstable_runWithPriority @ scheduler.production.min.js:19
Vi @ react-dom.production.min.js:122
j @ react-dom.production.min.js:287
Yt @ react-dom.production.min.js:68
```
user: thenets
issue_10535: state: open
title: Access tab for a template- Adding access should only show available teams
body: Bug/Feature Request Report

I feel like this is a combo bug report / feature request-
When the admin user is inside the Access tab of a template, and they add Teams, there are teams displayed in this list of options that are not able to be added to access for that template. The user can click the team name and complete the modal to add it, but when the user is redirected back to the access tab showing which users/teams have access, users from those teams simply do not show up. There is not any kind of error message or alert for the user regarding why those specific roles weren't added.

Expected results: I would expect either 1) the teams that don't have access to be added would not appear at all or 2)if those teams were selected, there would be some sort of alert explaining to the user why they weren't added.

![access](https://user-images.githubusercontent.com/63685497/123665950-c2879180-d806-11eb-944b-55a2d058481c.gif)

user: akus062381
issue_10534: state: open
title: Credential Name for an Execution Environment- Display runs off screen
body: Bug Report

Issue: The credential name displayed on the detail page for an Execution Environment runs off screen if it has more than a certain number of characters.

![image](https://user-images.githubusercontent.com/63685497/123665509-5a38b000-d806-11eb-9222-5a35888d822a.png)

user: akus062381
issue_10521: state: open
title: For governance, enforce prechecks against playbooks/workflows or inventories and potentially post checks.
body: 

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
**Who benefits from this feature?:** 
Organizations benefit from the ability to have governance with less points of failure and less overhead. If implemented into mature ci/cd piplines it would enable the org to further enhance their security. Smaller teams that cannot implement mature ci/cd pipelines to help manage and enforce code would benefit. This would allow for enhanced behaviors or workflows in environments where teams have customized this prerun/precheck to fit their environment accordingly, such as integration into CMDB, other workflows or plays, etc.

**Needs or objectives from this feature:** 
This specific customer wants the code for governance however it can be used for different use cases. I will discuss these now.

**Req:**
The ability to run a play/playbook before any playbook/workflow at a global level outside of the end-users control or playbooks. (Think the way gather_facts can be set to run before every playbook.)


**Potentially Optional:**
The ability to run a play/playbook after any playbook/workflow at a global level outside of the end-users control or playbooks. (Think the way gather_facts can be set to run before every playbook.)

**NOTE:**
This is to give Admins increased flexibility and control. It accelerates "their customer's" onboarding and usage and removes the potential for human error when complying with org policies.

**Use Case:**
The user wants to ensure appropriate CMDB information is correct prior to the run of a user's code, preventing "unapproved" ad-hoc runs.
The user wants to ensure appropriate security of plays being run in the playbook avoiding an "injection" of sorts that is designed to circumvent their ci/cd pipeline.
The user wants to ensure appropriate updates or workflows are triggered regarding their ITSM workflows prior to a play.
The user wants to ensure appropriate updates or workflows are triggered regarding their ITSM workflows prior to a play.

**Out of scope :**
Utilization of Agents
What does success look like?: Success looks like a feature similar to "Gathering_Facts" that could be enabled (or is always on) that could be customized further to run additional plays. This could be something Gathering_facts is bundled into. This would be able to run before and after plays or workflows. This would be available to admins only and apply to the environment. This would be able to handle exceptions and not cause the environment to be unstable. The use of this feature would be supported by Red Hat.
user: tra7nce
issue_10513: state: open
title: Link dependencies of a jobs for `update_on_launch` behavior
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
If you have a project with `update_on_launch` set to True, then a project update will happen before a job using that project launches.

There is no way to see this connection in the UI.

The API stores this information the a `dependent_jobs` relationship in the database. This is not exposed through the API.

Presumably, it may be useful to provide dependent jobs through the API and link them somewhere in the job details information in the UI.

Ping @chrismeyersfsu, @kialam, @one-t 

I just want to have this documented, because I do not know of any other issue that mentions it.

user: AlanCoding
issue_10501: state: open
title: ToolbarDeleteButton and DeleteButton should only show spinner during delete
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
While deleting and list item, or deleting and item from a details view, the delete button should remove the Delete text to only show the spinner.  Additionally, the width and height of the delete button should match that of the add button.

user: AlexSCorey
issue_10498: state: open
title: Select Buttons in Modals should be disabled until selection is made
body: 

##### ISSUE TYPE
 - Enhancement

##### SUMMARY
Disable select button in modals until a selection is made
![Screen Shot 2021-06-23 at 11 32 51 AM](https://user-images.githubusercontent.com/39280967/123125729-c6866e80-d416-11eb-8f99-dcdc7a41605a.png)


user: AlexSCorey
issue_10494: state: open
title: Galaxy credential tags overflow input
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<img width="1438" alt="Screen Shot 2021-06-23 at 10 26 13 AM" src="https://user-images.githubusercontent.com/9889020/123115011-c46be200-d40d-11eb-8d49-b92270974913.png">

This can be seen by selecting a number of galaxy credentials when creating/editing an organization.

I haven't looked but I suspect this might be the case for other multi-select lookups.

There's no loss of functionality here - just doesn't look good.

user: mabashian
issue_10491: state: open
title: Warn the user when trying to delete an EE used in Global default EE
body: When a Global Default Execution Environment is about to be deleted, the deletition modal is not warning the user that this  particular EE is being used as `Global Default` one

![image](https://user-images.githubusercontent.com/12464858/122954725-12251380-d356-11eb-8766-7c7aa374250b.png)

I wonder if this is possible to show the deletition modal similar to:
![image](https://user-images.githubusercontent.com/12464858/122954872-3123a580-d356-11eb-8f63-be22f9dfe4c4.png)

user: tiagodread
issue_10488: state: open
title: How to enable SSL for docker install
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Documentation

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI

##### SUMMARY
How do I install an SSL certificate with a docker install?

##### ENVIRONMENT
* AWX version: 19.2.0
* AWX install method: developer environment
* AWX deployment target: docker
* Operating System: Centos 7
* Web Browser: Chrome

##### ADDITIONAL INFORMATION

While we are at it, what options can be configured in the inventory file? I can not find any documentation on this.  

user: dmatthewsbnd251
issue_10486: state: open
title: Prompt on Launch erroneously validates credential step
body: 
##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Vault credentials can potentially pass validation erroneously

##### ENVIRONMENT
* AWX version: 19.2
* AWX install method: docker for mac

* Operating System: Big Sur
* Web Browser: Chrome

##### STEPS TO REPRODUCE

1. assign 1 of them to JT and click prompt on launch for credentials.
2. In the launch wizard toggle that default credential on and off and you should see the error message at the top of the wizard appear.
3. Activate the default credential to ensure the error message is gone….then toggle on the other vault credential still should see no error message
4. Then toggle off the default 1, error message returns (edited) 
5. Then toggle off the added, non default credential…..error message disappears

##### EXPECTED RESULTS
Error message should remain if there is no vault credential with the same vault id as the default credential.

##### ACTUAL RESULTS
Error message disappears


##### ADDITIONAL INFORMATION
![credvalidation](https://user-images.githubusercontent.com/39280967/122813133-961cc400-d2a0-11eb-9ed2-096c5df16391.gif)


user: AlexSCorey
issue_10482: state: open
title: Upgrade to 19.2 or 19.2.1 failed
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->

##### ENVIRONMENT
* AWX version: 19.x
* AWX install method: openshift
* Ansible version:  N/A
* Operating System: :inux
* Web Browser:

##### STEPS TO REPRODUCE

I'm trying to update the existing 17.x on docker into the latest one on Kubernetes. The migration from 17 to 19.x has failed. What I found:
I'm not able to update 17.x from docker into k8s via operator 0.11.0
BUT
I'm able to update 17.x from docker into k8s via operator version 0.8.0
Then I'm able to update 19.0.0 on operator 0.8.0 to 19.1.0 on operator 0.9.0

and then upgrade to operator 0.10.0 or 0.11.0 failed.


##### EXPECTED RESULTS

Upgrade to AWX with operator 0.11.0 should be success

##### ACTUAL RESULTS

failed on DB migration

##### ADDITIONAL INFORMATION

<!-- Include any li
[1.txt](https://github.com/ansible/awx/files/6685977/1.txt)
nks to sosreport, database dumps, screenshots or other
information. -->

user: AlekseiSaff
issue_10475: state: open
title: Handle search if initial list is empty
body: 
##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Disable advanced search if initial list is empty. If the initial list has not items there is not usage for the advanced search.  For instance:

![image](https://user-images.githubusercontent.com/9053044/122598284-a29fe300-d03a-11eb-96cb-7750db0139b9.png)
user: nixocio
issue_10472: state: open
title: AWX upgrade failed
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
AWX upgrade from 17 to 19 failed on 0137_custom_inventory_scripts_removal_data step


##### ENVIRONMENT
* AWX version: 17.0 to 19.x 
* AWX install method: awx-operator
* Ansible version:  19.x
* Operating System: Linux
* Web Browser:

##### STEPS TO REPRODUCE

Upgrade from 17.x to 19.x failed on step 0137_custom_inventory_scripts_removal_data

##### EXPECTED RESULTS

full upgrade passed

##### ACTUAL RESULTS

Upgrade failed

##### ADDITIONAL INFORMATION

sh-4.4$ awx-manage migrate --noinput
Operations to perform:
  Apply all migrations: auth, conf, contenttypes, main, oauth2_provider, sessions, sites, social_django, sso, taggit
Running migrations:
2021-06-18 03:24:30,435 INFO     [-] awx.main.migrations deleted (10757, {'main.ActivityStream_unified_job': 0, 'main.UnifiedJob_dependent_jobs': 0, 'main.UnifiedJob_notifications': 2, 'main.UnifiedJob_labels': 0, 'main.UnifiedJob_credentials': 0, 'main.JobLaunchConfig_credentials': 0, 'main.ActivityStream_inventory_update': 2, 'main.InventoryUpdateEvent': 8818, 'main.InventoryUpdate': 645, 'main.JobLaunchConfig': 645, 'main.UnifiedJob': 645})
2021-06-18 03:24:30,436 INFO     [-] awx.main.migrations Deleted 645 custom inventory script sources.
  Applying main.0137_custom_inventory_scripts_removal_data...Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 8, in <module>
    sys.exit(manage())
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/__init__.py", line 171, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/commands/migrate.py", line 232, in handle
    post_migrate_state = executor.migrate(
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/migrations/executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/migrations/executor.py", line 245, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/migrations/migration.py", line 124, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/migrations/operations/special.py", line 190, in database_forwards
    self.code(from_state.apps, schema_editor)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/migrations/_inventory_source.py", line 105, in delete_custom_inv_source
    ct, deletions = InventorySource.objects.filter(source='custom').delete()
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/query.py", line 710, in delete
    collector.collect(del_query)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/deletion.py", line 224, in collect
    field.remote_field.on_delete(self, field, sub_objs, self.using)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/deletion.py", line 15, in CASCADE
    collector.collect(sub_objs, source=field.remote_field.model,
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/db/models/deletion.py", line 224, in collect
    field.remote_field.on_delete(self, field, sub_objs, self.using)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/utils/polymorphic.py", line 18, in SET_NULL
    return models.SET_NULL(collector, field, sub_objs.non_polymorphic(), using)
AttributeError: 'QuerySet' object has no attribute 'non_polymorphic'
sh-4.4$ 


user: AlekseiSaff
issue_10470: state: open
title: Edit Job Template Project Type "Manual" box not selected when clicked
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->
Edit Job Template Project Type "Manual" box not selected when clicked
##### ENVIRONMENT
* AWX version: 19.2.1
* Ansible version:  2.11.1
* Operating System: OSX
* Web Browser: Chrome

##### STEPS TO REPRODUCE

1.  Go to edit a Job Template
2.  Click on Project lookup
3.  In the filter toolbar, select `type`
4.  Click on "manual"
5.  Observe that the checkbox next to "manual" is not checked, however the search param is correctly stored

##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->
The checkbox next to each option should be selected/deselected if clicked

##### ACTUAL RESULTS
The checkbox for "manual" remains unchecked no matter what
<!-- What actually happened? -->

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

![jtedit_project](https://user-images.githubusercontent.com/2293210/122473361-bcd0b700-cf8f-11eb-8b15-2fe1ac276dfa.gif)


user: kialam
issue_10467: state: open
title: "AWX is currently upgrading." page seems to have a missing logo
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
The special migration page looks like it uses a moved / missing asset.

##### STEPS TO REPRODUCE

`awx-manage migrate 0145` or any migration number that's not current

then visit any given page.

##### EXPECTED RESULTS

Migration page

##### ACTUAL RESULTS

Migration page that looks like this

![Screenshot from 2021-06-17 09-34-49](https://user-images.githubusercontent.com/1385596/122407416-9db23500-cf4f-11eb-992e-0f0ae338341b.png)


##### ADDITIONAL INFORMATION

missing image is at https://localhost:8043/static/media/logo-black.svg (get 404)

The code that puts in this image looks to be:

https://github.com/ansible/awx/blob/f0129c857b01d9949a68492a6934b908fe032982/awx/ui_next/public/installing.html#L26

I can't find any trace of this black logo, so maybe it just needs to be updated to another logo?
user: AlanCoding
issue_10460: state: open
title: ERRO[0000] Error adding network 
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When I try to launch Demo-job [GIT_URL ](https://github.com/ansible/ansible-tower-samples) from AWX UI first I was getting the following message:
`Demo Job Template run fails; source control update error: 'overlay' is not supported over overlayfs`
which I resolve by implementing the fix from [HERE](https://github.com/ansible/awx/issues/10099#issuecomment-856054347)
Then I got the ERROR from below: ERRO[0000] Error adding network: running 

##### ACTUAL RESULTS

job status failed

`ERRO[0000] Error adding network: running [/usr/sbin/iptables -t nat -A POSTROUTING -s 10.88.0.5 -j CNI-8c350ef2d04db791fe697db0 -m comment --comment name: "podman" id: "e032b62c91476ad6f28c9807422f67877f90134bc0c98389792950d3f127ee06" --wait]: exit status 4: iptables v1.8.4 (nf_tables):  RULE_APPEND failed (Invalid argument): rule in chain POSTROUTING
ERRO[0000] Error while adding pod to CNI network "podman": running [/usr/sbin/iptables -t nat -A POSTROUTING -s 10.88.0.5 -j CNI-8c350ef2d04db791fe697db0 -m comment --comment name: "podman" id: "e032b62c91476ad6f28c9807422f67877f90134bc0c98389792950d3f127ee06" --wait]: exit status 4: iptables v1.8.4 (nf_tables):  RULE_APPEND failed (Invalid argument): rule in chain POSTROUTING
ERRO[0000] Error preparing container e032b62c91476ad6f28c9807422f67877f90134bc0c98389792950d3f127ee06: error configuring network namespace for container e032b62c91476ad6f28c9807422f67877f90134bc0c98389792950d3f127ee06: running [/usr/sbin/iptables -t nat -A POSTROUTING -s 10.88.0.5 -j CNI-8c350ef2d04db791fe697db0 -m comment --comment name: "podman" id: "e032b62c91476ad6f28c9807422f67877f90134bc0c98389792950d3f127ee06" --wait]: exit status 4: iptables v1.8.4 (nf_tables):  RULE_APPEND failed (Invalid argument): rule in chain POSTROUTING
Error: error resolving storage path for container e032b62c91476ad6f28c9807422f67877f90134bc0c98389792950d3f127ee06: lstat /var/lib/containers/storage/overlay/e35bf0d5bbe97ad44a0a464c5d73eb58b9fd8f8390bea26c0061970d24a64206/merged: invalid argument`

##### ENVIRONMENT
* AWX version: 19.2.0
* AWX install method: docker on centos7
* Ansible version:  2.9.21
* Operating System: Centos7
* Web Browser: Chrome: 91.0.4472.101

##### STEPS TO REPRODUCE

git clone repo 
apply fix #9552 (nginx user missing)
make docker-compose-build
start Docker containers
make docker-compose
docker exec tools_awx_1 make clean-ui ui-devel
apply fix https://github.com/ansible/awx/issues/10099#issuecomment-856054347
restart container
GUI: login: admin user
GUI: resources > Projects > Demo Project > Sync
GUI: views > jobs > 3 — Demo Project

##### EXPECTED RESULTS

successful job


user: jovestefanovski
issue_10453: state: open
title: Ad Hoc Command should re-render wizard after closing error alert
body: 

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
When you execute an ad hoc command that creates some sort of api error and the wizard is closed, and an api error is show in an alert modal.  It would be nice if the wizard re-opened automatically with the fields completed with the data that was submitted.

user: AlexSCorey
labels: type:feature: prioritized on a feature board
issue_10451: state: open
title: Wrong error may be displayed when a vault credential has no password
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
If your job template contains multiple credentials, and one of them is a vault credential which has no associated password, you will get an error "Job cannot start because Credential [credential] does not provide one or more required fields (vault_password). Task failed pre-start check."

That sounds right, except that the error can name the wrong credential. Confusingly, the error can even tell you that a non-vault credential is missing a required vault_password field and that's why you can't start the job. At first I was getting an error telling me that a custom cloud credential was missing vault_password, but after removing that credential from the template I got an error about a different vault credential which *did* have a vault_password was missing vault_password (the template uses two vault credentials).

##### ENVIRONMENT
* AWX version: 19.1.0
* AWX install method: AWX operator on microk8s
* Ansible version:  ansible [core 2.11.1.post0] (in execution environment)
* Operating System: Ubuntu Focal
* Web Browser:

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->

1. Create some credentials, including a vault credential which does not have the required field vault_password set. This happened because on AWX 17 there was a bug that prevented us from using the credential UI after having too many credential types and I guess I messed something up entering the vault credential using the API.
2. Create a job template which uses those credentials.
3. Try to run the job template.

I don't know what causes this behavior. The order the credentials are created in might matter. In my case, the vault credential without a vault_password value was the last credential created and the last credential added to the job template.

##### EXPECTED RESULTS

An error should be displayed stating that the vault credential with no vault_password field requires vault_password to be set.

##### ACTUAL RESULTS

An error is displayed stating that some other credential which either is not a vault credential or is a vault credential that does have a vault_password requires vault_password to be set.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: wat-usmdon
issue_10448: state: open
title: awx-cli Unable to migrate from AWX 17.0.1 (docker) to AWX 19.2.0 (K8S)
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->

##### ENVIRONMENT
* AWX version: 19.2.0
* AWX install method: k8s
* Ansible version:  X.Y.Z
* Operating System: RHEL 7
* Web Browser: Chrome

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->
I'm trying to migrate my AWX 17.1.0 (docker) to the latest version AWX 19.2.0 hosted in k8s and installed with AWX operator.
The basic installation works great but I'm unable to migrate the data.

I have tried to follow : https://github.com/ansible/awx/blob/devel/tools/docker-compose/docs/data_migration.md but the process describe here only creates a new postgres container with the data.... but there are no explanations about how to import all the content in kubernetes installation...

Moreover, I have tried to use awxcli  to run export and import but I have issue too.
The `awx export` command run well but the import fails... 



##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->

How to migrate from AWX 17.1.0 (docker) to AWX 19.2.0 (k8s) ?
How to export / import data ?

##### ACTUAL RESULTS

<!-- What actually happened? -->
Here is the output of the import commands : 
```
# awx import < /tmp/awx_export 
Object import failed: Bad Request (400) received - {'local_path': ['Cannot change local_path for git-based projects']}.
Object import failed: Bad Request (400) received - {'playbook': ['Playbook not found for project.']}.
Object import failed: Bad Request (400) received - {'playbook': ['Playbook not found for project.']}.
Object import failed: Bad Request (400) received - {'playbook': ['Playbook not found for project.']}.
Object import failed: Bad Request (400) received - {'playbook': ['Playbook not found for project.']}.
Object import failed: Bad Request (400) received - {'playbook': ['Playbook not found for project.']}.
Object import failed: Bad Request (400) received - {'playbook': ['Playbook not found for project.']}.
Object import failed: Bad Request (400) received - {'playbook': ['Playbook not found for project.']}.
Object import failed: Bad Request (400) received - {'playbook': ['Playbook not found for project.']}.
Object import failed: Bad Request (400) received - {'playbook': ['Playbook not found for project.']}.
Role assignment failed: Bad Request (400) received - {'msg': "You cannot grant credential access to a user not in the credentials' organization"}.
Role assignment failed: Bad Request (400) received - {'msg': "You cannot grant credential access to a user not in the credentials' organization"}.
Role assignment failed: Bad Request (400) received - {'msg': "You cannot grant credential access to a user not in the credentials' organization"}.
Role assignment failed: Bad Request (400) received - {'msg': "You cannot grant credential access to a user not in the credentials' organization"}.
```

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: craph
issue_10447: state: open
title: "tower_notification_template" module fails when type is webhook and the custom messages is used with "message" and is successful if used with "body"
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->
- When we specify the custom message like below in the tower_notification_template, it seems to work perfectly and when notification is associated with any Job Template run, the desired notification format is sent as well in the destination webhook.

~~~
      messages:
        started:
          body: |-
            {
              "tower_source"  : "Ansible Tower Dev",
              "id"            : "{{ job.id }}"
            }
~~~
- But when the same is configured using "message" instead of "body", the playbook seems to fail.
- We need to more clarification on the tower_notification_template [documentation here](https://cloud.redhat.com/ansible/automation-hub/repo/published/ansible/tower/content/module/tower_notification_template) on the formats for message/body that needs to be used. 
- Also the difference between message/body.

##### ENVIRONMENT
* Ansible version:  2.9.13
* Operating System: RHEL
* Ansible Tower
##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->
Below sample can be used for testing while creating Customized messages:
~~~
      messages:
        started:
          message: |-
            {
              "tower_source"  : "Ansible Tower Dev",
              "id"            : "{{ job.id }}"
            }
~~~
##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->
- The "message" should work like the "body"
##### ACTUAL RESULTS

<!-- What actually happened? -->
It fails with below:
```
FAILED! => {"changed": false, "msg": "Unable to create notification_template webhook1 notification: {'messages': ['Messages cannot contain newlines (found newline in started event)']}"}
```
##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->
The below attached image for successful creation using "body".
![body_success](https://user-images.githubusercontent.com/25864564/122012235-9289c880-cdda-11eb-8dd6-423646c78362.png)

user: SWADESNA
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_10444: state: open
title: Duplicate and Triplicate Smart Inventory Requests
body: 
##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Navigating between Inventory List --> Smart Inventory Add, Smart Inventory Detail --> Smart Inventory Edit, there are duplicate and triplicate api requests

##### ENVIRONMENT
* AWX version: 19.1.0
* AWX install method: docker for mac
* Ansible version:  awx
* Operating System:Mojave
* Web Browser:Chrome

##### STEPS TO REPRODUCE
Create a Smart Inventory and then navigate between the details view and the edit view.  Same thing for add...navigate between inventory list and smart inventory add.  

Looks like the form loads, look up make their requests and then, a request to inventory.readInstanceGroup and Inventory.readOptions are called forcing the form to reload.


user: AlexSCorey
issue_10442: state: open
title: Add some kind of flag to indicate the global default EEs
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
See the UI for Execution Environments, it's a list

![Screenshot from 2021-06-14 13-59-58](https://user-images.githubusercontent.com/1385596/121937634-e16f2980-cd18-11eb-9a4e-58edb82f9248.png)

We should have a concrete visual indicator (other than the name) for the EE which will be used for project updates, and the EE that will be the default for jobs.

The system administrator can change the default for jobs, so the flag should be responsive to this.

The API does not return data sufficient for this yet.

user: AlanCoding
issue_10421: state: open
title: [RFE] Modify Usage of 'Ansible Galaxy' Credential When 'create_preload_data=False'
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Currently, if we pass extra variable `create_preload_data=False` _(./setup.sh -e create_preload_data=False)_ project syncs won't work until we explicitly create a Galaxy Credential per organization.

##### Customer Explanation:
- On a new instance of Tower 3.8.1 I can see that we don't have any Credentials created by default. As soon as I changed that to True and re-ran the setup, the credential was there. When you navigate to the UI for adding an organization, the default Galaxy cred is also there.
- It seems weird that the creation of this credential is tied into the preload data - we don't want any of the demo stuff and we'd need to delete it, but we'd have to start setting that to be true to be able to get a default Galaxy cred otherwise we can't easily use Galaxy without creating per org Galaxy credentials.

##### STEPS TO REPRODUCE
./setup.sh -e create_preload_data=False
user: swatinarvekar
issue_10419: state: open
title: Display currently running jobs in notifications pane
body: 

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
When a user launches a job (workflow or template) they are shown in the jobs view.

We could make it easier for users to see _their_ running or completed jobs if we had them showing in the notifications (Bell icon with count) pop out pane. Having the count show unread notifications or running jobs by default would be good, but also letting the user change the default in account preferences.

user: itblaked
issue_10418: state: open
title: Add Task Visualizer feature to visualise the flow of tasks performed by a Job Template
body: 
##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

### WHAT
Business users love the simplicity of the Workflow visualizer; it's so easy to identify the flow path and the result as success or failure. 

If we could visualize the task workflow in the same way we do job workflows I believe it would be of great interest to non technical users of the platform.

### WHY

I'm often asked if I can provide the same visual interface for tasks performed within a single job template. I explain to them I can, but it'll mean reworking the Ansible playbook/role so that it operates in smaller functional units and then creating more job templates to execute the functional units and adding them to a workflow that visualizes them.

### HOW

I imagine that dynamically included roles, tasks, variables etc would make it very difficult to visualize since you may not know what the next item could be, however perhaps the feature can be expanded iteratively starting with just visualizing the known tasks such as currently executing and completed tasks? 

In the same way we add icons (E.g. JT|P|I|W|II|!) to visual items workflow visualizer, we could do the same for high level task types like T for general tasks, SV for static variable include or DV for dynamic variable include, so on and so forth for static/dynamically included tasks, playbooks.

I see the visualization being an optional viewing mode a user can enter in addition to the streaming console that we use today in job templates.

user: itblaked
issue_10415: state: open
title: jobs tab of instance group- running job status update lag- shows running when canceled
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When the user visits the jobs tab inside of an instance group, and initiates a job to be launched, the status icon shows the job still running- while on the jobs list, it has actually finished running. Therefore, if a user tries to cancel the job from the jobs tab of the instance group, they receive a 405 error. 
Perhaps one way to handle this, is if there is a status lag, and the user tries to cancel a job already canceled, that the UI would simply update to show the job status- which in this case may be successfully completed, according to the jobs list.

##### STEPS TO REPRODUCE

Create an instance group.
Create a project and template, and , from the jobs tab of that instance group, trigger a job to run associated with the instance group you created. The job should not be a long one, but should run for a minute at least to give you a chance to test this.
Navigate back to the Jobs tab of that instance group. Click the check box next to that job, and click Cancel jobs. If the job is actually complete on the jobs list, when you do this, you will see a 405 method not allowed error.
If you trigger a job to run from the jobs tab of the instance group, navigate back to the jobs tab once it's launched, and click the little circle cancel icon- if the job has finished running and shows complete on the jobs list, clicking this cancel button does nothing. The job still shows running and no error appears.

![cancelbutton](https://user-images.githubusercontent.com/63685497/121563315-4c062980-c9e8-11eb-8c40-4efaa7e891ba.gif)



user: akus062381
issue_10409: state: open
title: Jobs should report image SHA256 and EEs should give latest value
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
If someone runs a job with `quay.io/ansible/awx-ee:devel`, that doesn't give traceability. There are a great multitude of ways that could have ran with something other than what was expected (expectation isn't even _clear_). Even the tags like `:0.3.0` are not ironclad.

If a job gave `quay.io/ansible/awx-ee:devel`, `9c55e8c5d023`, then I could find what that maps to in the build history.

https://quay.io/repository/ansible/awx-ee?tab=history

Likewise, jobs & projects give a git hash.

We don't have traceability around roles & collections from `collections/requirements.yml`, but this is being de-emphasized in favor of EEs. So EEs should at least have a mechanism of real audit / traceability.
user: AlanCoding
issue_10408: state: open
title: PATCH to settings endpoint with default value shouldn't generate activity stream entry
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Settings operations generate a lot of useless noise when given their own default values.

##### STEPS TO REPRODUCE
PATCH to `/api/v2/settings/all/` with a payload like `{"SOME_SETTING": "value"}` where the value is the system default of that setting, starting from the state after all settings have been reset to defaults.

##### EXPECTED RESULTS
Nothing changes, so there should be nothing in the activity stream about this

##### ACTUAL RESULTS
It "creates" the setting according to the activity stream

##### ADDITIONAL INFORMATION

This produces a lot of noise with how the UI operates specifically, followup from https://github.com/ansible/awx/pull/10376

user: AlanCoding
issue_10393: state: open
title: Websocket is already in CLOSING or CLOSED state
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
See https://github.com/ansible/awx/pull/10339#issuecomment-856804232

There are some residual places where this error is popping up in the console.  I'm not sure why #10339 didn't address them but it didn't so we're opening this up to track the remaining work.

user: mabashian
issue_10386: state: open
title: Inventory field is disabled in Workflow template page even if Workflow Admin role got
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Inventory field disabled in Create Workflow UI even if user/team has Workflow Admin role of Organization

##### ENVIRONMENT
* AWX version: 17.1.0
* AWX install method: docker on linux
* Ansible version:  2.9.19
* Web Browser: Google Chrome

##### STEPS TO REPRODUCE

- Create an Organization
- Create an Inventory
- Create an User/Team
- Assign roles below to the User/Team:
  - Workflow Admin of the Organization
  - Admin of the Inventory

![immagine](https://user-images.githubusercontent.com/1803926/121148491-1de6e500-c842-11eb-8b75-6891ce8f5834.png)

##### EXPECTED RESULTS

In Workflow page, Inventory should be editable if User/Team has Workflow Admin role and a list of inventories should appear based on his Inventory roles

If User/Team has Workflow Admin role but no Inventory Admin or other specific Inventory roles (e.g. Use/Admin of specific inventories), empty list could appear

##### ACTUAL RESULTS

At the moment User/Team must have Inventory Admin role of Organization to get Inventory field editable in Workflow template UI

![immagine](https://user-images.githubusercontent.com/1803926/121148609-38b95980-c842-11eb-9b61-cd3ff82a2c63.png)

TIPS: if a User/Team is member of multiple Organizations and has Inventory Admin role of only one of his Organizations, Inventory field is editable in Workflow page.

##### ADDITIONAL INFORMATION

In our AWX use case scenario, Inventories are created by superadmins and they assign the use/admin role of specific inventories to Users/Teams.
So usually a User/Team has no Inventory Admin role of their Organization (but has other roles). This due to prevent a User/Team edit the content of an Inventory for security reasons.
user: kladiv
issue_10368: state: open
title: [RFE] Add custom messages examples for webhook type notification for tower_notification_template module documentation
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Currently we only have a basic example for slack notification type. It should be helpful if we can add more examples for formatting dictionaries or adding variables as a part of message.  We can also add example for both message/body configuration.

This needs to be documented in the collections documentation in Automation Hub. 

user: SWADESNA
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_10364: state: open
title: Allow job_explanation to be set for jobs that hit an exception
body: 
##### ISSUE TYPE
 - Bug Report

#### SUMMARY

Inspired by conversation on this ticket: https://github.com/ansible/awx/issues/10114#issuecomment-853953369

Currently, if a job_explanation is set on a job, if that job hits an exception/error, the job_explanation gets cleared.  This is not the case for canceled jobs.  

###### Use case

For container groups, when a job is run, if invalid k8s/openshift credentials are provided or the service account doesn't have sufficient permissions, the job will fail with a raised exception.  If we could set the `job_explanation` and have it persist, a useful message would show in the UI next to the status of the job, in place of the "Error" in the screenshot below. 

![image](https://user-images.githubusercontent.com/11698892/120867096-39f73780-c55f-11eb-9981-9a1858885fbf.png)

More background on that in [this comment](https://github.com/ansible/awx/pull/10204#issuecomment-848244192).  


#### ENVIRONMENT
* AWX version: 19.0.0
* Feature: Container Groups & Error Handling for Jobs

#### STEPS TO REPRODUCE

1. Create OCP cluster cred with a service account with no rules for secrets
2. Create an awx-ee and push it to a protected registry
3. Create a registry cred in AWX
4. Create an EE in AWX pointing to your custom ee in the protected registry, add your registry cred to it
5. Create a Container Group with your OCP cluster cred
6. Create a JT, configure the Container Group and EE.  
7. Run a job and see that is fails with no job_explanation set

#### EXPECTED RESULTS

When you add:
```
job.job_explanation(error_msg)
job.save()
```

In the code here: https://github.com/ansible/awx/pull/10204/files#diff-e47089fc124c2bf4fc4bf47dde61fe91888e31331c3e067e27652858f6ae0fc6R125

the job_explanation should be set on the job, no matter what happens next.  
#### ACTUAL RESULTS

The job_explanation gets cleared when the job hits an error in execution and the user is left without a descriptive error (though they do have a stacktrace in the stdout of the job).  

user: rooftopcellist
issue_10360: state: open
title: Activity Stream for setting deletion does not tell what setting was deleted
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
If you delete a setting, then a user cannot reasonably determine what happened from the activity stream because no form of the setting key or label is reported.

##### STEPS TO REPRODUCE

Go to the API, set a setting to a test value.

Then issue a DELETE request to that setting's category.

##### EXPECTED RESULTS

I can see what happened in activity stream

##### ACTUAL RESULTS

Setting creation entry looks good

deletion entry looks like this:

![Screenshot from 2021-06-04 10-55-17](https://user-images.githubusercontent.com/1385596/120821679-b1a77100-c523-11eb-82c2-df3d791f005b.png)


##### ADDITIONAL INFORMATION

This primarily on the API. See `/api/v2/activity_stream/?order_by=-timestamp&page_size=2`

```json
{
    "count": 1451,
    "next": "/api/v2/activity_stream/?order_by=-timestamp&page=2&page_size=2",
    "previous": null,
    "results": [
        {
            "id": 1451,
            "type": "activity_stream",
            "url": "/api/v2/activity_stream/1451/",
            "related": {
                "actor": "/api/v2/users/2/"
            },
            "summary_fields": {
                "actor": {
                    "id": 2,
                    "username": "alan",
                    "first_name": "",
                    "last_name": ""
                }
            },
            "timestamp": "2021-06-04T14:54:58.073945Z",
            "operation": "delete",
            "changes": {
                "value": "[\"test_value\"]",
                "id": 142
            },
            "object1": "setting",
            "object2": "",
            "object_association": "",
            "action_node": "awx_1",
            "object_type": ""
        },
        {
            "id": 1450,
            "type": "activity_stream",
            "url": "/api/v2/activity_stream/1450/",
            "related": {
                "actor": "/api/v2/users/2/",
                "setting": "/api/v2/settings/jobs/"
            },
            "summary_fields": {
                "actor": {
                    "id": 2,
                    "username": "alan",
                    "first_name": "",
                    "last_name": ""
                },
                "setting": [
                    {
                        "category": "jobs",
                        "name": "AWX_ANSIBLE_CALLBACK_PLUGINS"
                    }
                ]
            },
            "timestamp": "2021-06-04T14:54:55.180050Z",
            "operation": "create",
            "changes": {
                "value": "[\"test_value\"]",
                "id": 142
            },
            "object1": "setting",
            "object2": "",
            "object_association": "",
            "action_node": "awx_1",
            "object_type": ""
        }
    ]
}
```

No usable information is given to the UI about the setting key or label.
user: AlanCoding
issue_10354: state: open
title: Unable to upgrade to 19.2
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
I have tried to upgrade from 19.1 to 19.2

##### ENVIRONMENT
* AWX version: 19.2.0
* AWX install method: kubernetes (K3S) on debian buster
* Ansible version:  n/a
* Operating System: n/a
* Web Browser: n/a

##### STEPS TO REPRODUCE

Deploy the latest release of the awx operator

##### EXPECTED RESULTS

I expected to get an upgraded AWXS object

##### ACTUAL RESULTS

the existing AWX were removed, no new pods were created. In short, my AWXS is gone.

##### ADDITIONAL INFORMATION

No errors showed in the logs of the awx operator pod.

user: lemmy04
issue_10331: state: open
title: job event endpoint optimization - Remove job event host join
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
`/api/v2/jobs/3/job_events/?order_by=counter&counter__gte=50000&limit=200` will invoke a pagination class that is efficient. No count will be performed. The first query below is best case. The second query is now the worst case. Postgres planner decides to deviate from the more efficient execution plan. A little bit of empirical testing shows that removing the host join will encourage postgres to "do the right thing" (see the 3rd query below). The `job_events` endpoint includes `host` in the `summary_fields`. However, we have the host `id` and `name` in the `job_event` record.

At the time of writing this, AWX nullifies the host pointer on the job event when deleting a host. We may remove the nullifying of the related job events when a host is deleted as a performance optimization. If so, the host join can not simply be removed. Instead, it will need to be replaced with a "do these hosts exist" query. Or we can simply query the set of hosts in a query separate from the join. Related https://github.com/ansible/awx/issues/10337

```
            "summary_fields": {
                "host": {
                    "id": 4875,
                    "name": "localhost",
                    "description": ""
                },
            },
```

```
awx=# EXPLAIN ANALYZE SELECT "main_jobevent"."id", "main_jobevent"."event", "main_jobevent"."event_data", "main_jobevent"."failed", "main_jobevent"."changed", "main_jobevent"."uuid", "main_jobevent"."playbook", "main_jobevent"."play", "main_jobevent"."role", "main_jobevent"."task", "main_jobevent"."counter", "main_jobevent"."stdout", "main_jobevent"."verbosity", "main_jobevent"."start_line", "main_jobevent"."end_line", "main_jobevent"."created", "main_jobevent"."modified", "main_jobevent"."job_id", "main_jobevent"."host_id", "main_jobevent"."host_name", "main_jobevent"."parent_uuid", "main_host"."id", "main_host"."created", "main_host"."modified", "main_host"."description", "main_host"."created_by_id", "main_host"."modified_by_id", "main_host"."name", "main_host"."inventory_id", "main_host"."enabled", "main_host"."instance_id", "main_host"."variables", "main_host"."last_job_id", "main_host"."last_job_host_summary_id", "main_host"."ansible_facts", "main_host"."ansible_facts_modified", "main_host"."insights_system_id" FROM "main_jobevent" LEFT OUTER JOIN "main_host" ON ("main_jobevent"."host_id" = "main_host"."id") WHERE ("main_jobevent"."job_created" = '2021-05-31T22:19:47.979559+00:00'::timestamptz AND "main_jobevent"."job_id" = 12793 AND "main_jobevent"."counter" >= 50000) ORDER BY "main_jobevent"."counter" ASC  LIMIT 200;
                                                                                                    QUERY PLAN                              
--------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------
 Limit  (cost=458.82..459.32 rows=200 width=1527) (actual time=90.097..90.131 rows=200 loops=1)
   ->  Sort  (cost=458.82..459.37 rows=220 width=1527) (actual time=90.096..90.119 rows=200 loops=1)
         Sort Key: main_jobevent_20210531_22.counter
         Sort Method: top-N heapsort  Memory: 428kB
         ->  Hash Left Join  (cost=20.84..450.26 rows=220 width=1527) (actual time=0.133..61.181 rows=50205 loops=1)
               Hash Cond: (main_jobevent_20210531_22.host_id = main_host.id)
               ->  Index Scan using main_jobevent_20210531_22_job_id_job_created_counter_idx on main_jobevent_20210531_22  (cost=0.56..429.4
0 rows=220 width=1417) (actual time=0.050..47.874 rows=50205 loops=1)
                     Index Cond: ((job_id = 12793) AND (job_created = '2021-05-31 22:19:47.979559+00'::timestamp with time zone) AND (counte
r >= 50000))
               ->  Hash  (cost=19.01..19.01 rows=101 width=110) (actual time=0.070..0.071 rows=101 loops=1)
                     Buckets: 1024  Batches: 1  Memory Usage: 20kB
                     ->  Seq Scan on main_host  (cost=0.00..19.01 rows=101 width=110) (actual time=0.008..0.047 rows=101 loops=1)
 Planning Time: 0.891 ms
 Execution Time: 90.170 ms
```


```
awx=# EXPLAIN ANALYZE SELECT "main_jobevent"."id", "main_jobevent"."event", "main_jobevent"."event_data", "main_jobevent"."failed", "main_jobevent"."changed", "main_jobevent"."uuid", "main_jobevent"."playbook", "main_jobevent"."play", "main_jobevent"."role", "main_jobevent"."task", "main_jobevent"."counter", "main_jobevent"."stdout", "main_jobevent"."verbosity", "main_jobevent"."start_line", "main_jobevent"."end_line", "main_jobevent"."created", "main_jobevent"."modified", "main_jobevent"."job_id", "main_jobevent"."host_id", "main_jobevent"."host_name", "main_jobevent"."parent_uuid", "main_host"."id", "main_host"."created", "main_host"."modified", "main_host"."description", "main_host"."created_by_id", "main_host"."modified_by_id", "main_host"."name", "main_host"."inventory_id", "main_host"."enabled", "main_host"."instance_id", "main_host"."variables", "main_host"."last_job_id", "main_host"."last_job_host_summary_id", "main_host"."ansible_facts", "main_host"."ansible_facts_modified", "main_host"."insights_system_id" FROM "main_jobevent" LEFT OUTER JOIN "main_host" ON ("main_jobevent"."host_id" = "main_host"."id") WHERE ("main_jobevent"."job_created" = '2021-05-31T22:15:48.806907+00:00'::timestamptz AND "main_jobevent"."job_id" = 12785 AND "main_jobevent"."counter" >= 50000) ORDER BY "main_jobevent"."counter" ASC  LIMIT 200;
                                                                                               QUERY PLAN                                   
--------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------
 Limit  (cost=0.56..703.33 rows=200 width=1527) (actual time=0.107..0.848 rows=200 loops=1)
   ->  Nested Loop Left Join  (cost=0.56..1255.00 rows=357 width=1527) (actual time=0.107..0.838 rows=200 loops=1)
         Join Filter: (main_jobevent_20210531_22.host_id = main_host.id)
         Rows Removed by Join Filter: 6466
         ->  Index Scan using main_jobevent_20210531_22_job_id_job_created_counter_idx on main_jobevent_20210531_22  (cost=0.56..697.85 rows
=357 width=1417) (actual time=0.056..0.244 rows=200 loops=1)
               Index Cond: ((job_id = 12785) AND (job_created = '2021-05-31 22:15:48.806907+00'::timestamp with time zone) AND (counter >= 5
0000))
         ->  Materialize  (cost=0.00..19.52 rows=101 width=110) (actual time=0.000..0.001 rows=33 loops=200)
               ->  Seq Scan on main_host  (cost=0.00..19.01 rows=101 width=110) (actual time=0.004..0.022 rows=63 loops=1)
 Planning Time: 0.252 ms
 Execution Time: 0.880 ms
(10 rows)
```

```
awx=# EXPLAIN ANALYZE SELECT "main_jobevent"."id", "main_jobevent"."event", "main_jobevent"."event_data", "main_jobevent"."failed", "main_jobevent"."changed", "main_jobevent"."uuid", "main_jobevent"."playbook", "main_jobevent"."play", "main_jobevent"."role", "main_jobevent"."task", "main_jobevent"."counter", "main_jobevent"."stdout", "main_jobevent"."verbosity", "main_jobevent"."start_line", "main_jobevent"."end_line", "main_jobevent"."created", "main_jobevent"."modified", "main_jobevent"."job_id", "main_jobevent"."host_id", "main_jobevent"."host_name", "main_jobevent"."parent_uuid" FROM "main_jobevent" WHERE ("main_jobevent"."job_created" = '2021-05-31T22:19:47.979559+00:00'::timestamptz AND "main_jobevent"."job_id" = 12793 AND "main_jobevent"."counter" >= 50000) ORDER BY "main_jobevent"."job_created", "main_jobevent"."job_id", "main_jobevent"."counter"  ASC  LIMIT 200;
                                                                                            QUERY PLAN                                      
--------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------
 Limit  (cost=0.56..390.41 rows=200 width=1425) (actual time=0.029..0.210 rows=200 loops=1)
   ->  Index Scan using main_jobevent_20210531_22_job_id_job_created_counter_idx on main_jobevent_20210531_22  (cost=0.56..429.40 rows=220 w
idth=1425) (actual time=0.029..0.201 rows=200 loops=1)
         Index Cond: ((job_id = 12793) AND (job_created = '2021-05-31 22:19:47.979559+00'::timestamp with time zone) AND (counter >= 50000))
 Planning Time: 0.181 ms
 Execution Time: 0.241 ms
```
user: chrismeyersfsu
issue_10307: state: open
title: Management job to cleanup old schedules on job templates
body: 
##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Ansible Tower job templates (and workflow templates) allow for schedules to be configured. Schedules that have completed or no longer reoccur still remain listed on that job template. Therefore there should be a management job added to cleanup "old" or inactive schedules on job templates.  For now, these need to be manually deleted.

user: ansiblejunky
labels: type:feature: prioritized on a feature board
issue_10300: state: open
title: Google OAuth2 Settings- Error handling needs to be more specific
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When editing Google OAuth2 Settings, the error handling is located strangely- there are errors present for Organization Map as well as Team Map, but the errors don’t show the user exactly where the errors are:
![image](https://user-images.githubusercontent.com/63685497/119834614-1e8c8c80-bece-11eb-9f21-a1888ac38bd5.png)

user: akus062381
issue_10299: state: open
title: Activity stream- template name change improperly recorded
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When updating the names of templates, etc… The activity stream is not properly recording the old name for history sake.  Every single past history related to that template shows the “new” name instead of what it was at the time.

user: akus062381
issue_10298: state: open
title: Unicode in form fields causes inconsistencies
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY

- [ ] Tower allows you to use unicode in hosts/groups but ansible does not ([WARNING]: Invalid characters were found in group names but not replaced).  Passing it in the limit makes it not match any host (even though a group exist with the exact unicode name)

- [ ] Most places show unicode properly, but others (like the Workflow, edit node screen don’t)
![image](https://user-images.githubusercontent.com/63685497/119832779-804bf700-becc-11eb-841a-77cf2ec275f0.png)


user: akus062381
issue_10288: state: open
title: [Meta Issue] Resources- Form Validation Errors
body: This issue encompasses multiple errors regarding word count for fields in different resources.

##### ISSUE TYPE
 - Bug Report

##### SUMMARY

**TEMPLATES RESOURCE:**

- [ ] Limit field will happily accept any number of digits (even up to 200K characters)
- [ ] Launching a job with a 200k character “limit” field causes a traceback
![character-limit](https://user-images.githubusercontent.com/63685497/119697123-df9efe00-be1d-11eb-81b1-9573dacbc648.gif)

- [ ] Job Tags: UI allows me to attempt to create job tags > 1024 length but will fail to save them (api properly returns error about over length- BUT- the UI shows no error message, just the template refuses to save). Field shouldn’t allow us to enter larger than 1024.
![job-tags](https://user-images.githubusercontent.com/63685497/119698186-00b41e80-be1f-11eb-8684-9d69268694bc.gif)

- [ ] Forks: field is erratic about showing max of 200 allowed (sometimes no error displayed for large numbers)
![forks](https://user-images.githubusercontent.com/63685497/119698678-77e9b280-be1f-11eb-8d9a-93eae60b21d4.gif)

- [ ] Provisioning Callback: Host Key field allows entering > 1024 even though it won’t save (same as above, copy and pasting large text doesn’t show the field error).
![callback](https://user-images.githubusercontent.com/63685497/119698933-bf703e80-be1f-11eb-9e1c-60fe74946f41.gif)

- [ ] Survey: Only the Default value field stopped me from entering large amounts of text, every other field accepted 200k+ characters.  (Just to note, my playbook ran fine even though I passed a 200k char variable name to it, nice)
![survey](https://user-images.githubusercontent.com/63685497/119699932-acaa3980-be20-11eb-9cba-34e8295c6053.gif)

- [ ] Timeout field is very inconsistent about showing the error message for the max limit of the field.  Sometimes it doesn’t show it, sometimes it does (mostly when I hold down a key).  Pressing “down” on a large number changes it to scientific notation also, fun quirk (9e+26).  Once the number shows in scientific notation, then no matter what number I then enter (even 0 or 1) throws an error that a valid integer is required.
![timeout](https://user-images.githubusercontent.com/63685497/119706639-3e697500-be28-11eb-9ed2-29d9bf778e02.gif)

- [ ] Job slicing- entering a large number (ex: 20 characters) into this field results in the same error as the error shown in the timeout field (see above).
ALSO: Slices field error says that the max number is 2147483647 but it changes any number higher than 1000000 

- [ ] When any text box has an error, clicking checkboxes (ex: Concurrent Jobs) will hide the errors until you unclick it

**CREDENTIALS:**

- [ ] Cred Description field will accept large amounts of text (200k was entered)
- [ ]  Lots of the input fields (ex: machine credentials username/password) allow an unlimited number of characters.  It allows me to save a username/password/sudo user set with 200k characters, but attempting to run a job with this Cred causes the same traceback listed above
- [ ] Once you add a credential with ~500k character username, it will save, but the details page of that credential will fail to load (page locks up)

**PROJECTS:**

- [ ] Most fields validated before saving, except Description doesn’t have a max.  Cache Timeout has the same issues as Timeout above.
- [ ] Description field does not have a max character count.
- [ ] Timeout field is very inconsistent about showing the error message for the max limit of the field.  Sometimes it doesn’t show it, sometimes it does (mostly when I hold down a key).  Pressing “down” on a large number changes it to scientific notation also, fun quirk (9e+26).  Once the number shows in scientific notation, then no matter what number I then enter (even 0 or 1) throws an error that a valid integer is required.
user: akus062381
issue_10286: state: open
title: Schedules- long names don't wrap when displayed on screen
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
We allow 512 characters in schedule names, but when viewing / editing a schedule with such a long name, in the breadcrumbs, it pushes the Schedules “View activity stream” icon (and most of its name) off the page instead of wrapping.

##### STEPS TO REPRODUCE

![schedule-name](https://user-images.githubusercontent.com/63685497/119694630-643c4d00-be1b-11eb-96cb-4f9f533a123d.gif)

user: akus062381
issue_10282: state: open
title: Resource Advanced Search functionality- the ID key doesn't function as expected
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
On Schedules (and almost every search).  If I do an advanced search for something using the key “id” (possibly others) but then use invalid data (like “id contains s” as my search).  I got a proper error message about it needing to be an integer, but now the key field on the search box above it is broken, you have to completely clear the search to get the keys list back.

##### ENVIRONMENT
Chrome Version 90.0.4430.93

##### STEPS TO REPRODUCE

Go to Schedules list.
Select an advanced search, and set the key to ID. in the search box, type alphabetical characters. When you click search you get the error message, but the filter stays there instead of disappearing, so the user cannot continue with their search unless they completely clear all search filters.
![image](https://user-images.githubusercontent.com/63685497/119687085-e8d79d00-be14-11eb-94a9-a07d49c359c2.png)


##### EXPECTED RESULTS

When the user entered an invalid search filter and the error is thrown, I would expect the incorrect filter to be cleared out.

##### ACTUAL RESULTS

The incorrect search filter remains, and the only way to continue searching is to clear all filters and start again.


user: akus062381
issue_10266: state: open
title: RFE: Allow "GitHub\GitLab PAT" creds to be configured at the JT level.  
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Feature request to allow the GitHub/GitLab Personal Access Token credentials to be configured on a Job Template. 

user: benjdudas
issue_10265: state: open
title: Select list item clicking on row 
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
This is a follow up issue from https://github.com/ansible/awx/pull/10180, to select items inside modal now the users should click on the radio/select input, clicking on the row won't select the item anymore.
 
##### STEPS TO REPRODUCE

1. Click on any lookup field to open a modal
2. Click on the item row

##### EXPECTED RESULTS

The input to be selected

##### ACTUAL RESULTS

Clicking on the row nothing happens, you need click on the input

Before:
![chrome-capture (14)](https://user-images.githubusercontent.com/12464858/119521757-cfb9e800-bd51-11eb-9217-2babea87584f.gif)

After:
![chrome-capture (15)](https://user-images.githubusercontent.com/12464858/119521769-d2b4d880-bd51-11eb-9a51-fa1b09eccc3e.gif)
user: tiagodread
labels: qe:regression: it used to work
component:a11y: Accessibility
issue_10264: state: open
title: Can't reliably monitor job output - "Unable to monitor finished job"
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

Technically a feature idea, however the race condition aspect makes it a little bit of a bug too.

##### SUMMARY
Currently if you try to run `awx jobs monitor` and a job is completed, awxkit will refuse to display any output. You might argue that for finished jobs you should use `awx jobs stdout`, however the user might not know if the job is complete, and/or it's a race condition.

The intent is to kick off a job via a CI system, and then run `awx jobs monitor` to stream the output. However if the job completes fast, or there's some other delay before `awx jobs monitor` is invoked, and the job has completed, then no output will be displayed and it will instead error out with `Unable to monitor finished job`.  
Once #10194 is fixed, this is effectively an artificial limitation. And removing it seems like the correct solution. Given that you can run `awx jobs monitor` half way through a job, and it'll output everything up until that point, there seems no reason why running it after the job completes shouldn't do the same thing.

user: phemmer
issue_10259: state: open
title: Give a sane error message when AWX returns migration screen
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
The AWX collection gives an irrelevant traceback when it acts against a server that returns the migration-in-progress page

##### ENVIRONMENT
* AWX version: X.Y.Z
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  X.Y.Z
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

Update the source tree but don't yet migrate

Run any playbook that makes use of modules in the AWX collection

##### EXPECTED RESULTS

Error:

> Failed, because the server reports that it is migrating

##### ACTUAL RESULTS

```
The full traceback is:
Traceback (most recent call last):
  File "/home/alancoding/.ansible/tmp/ansible-tmp-1621957071.3594759-2490463-77222652678128/AnsiballZ_tower_job_template.py", line 100, in <module>
    _ansiballz_main()
  File "/home/alancoding/.ansible/tmp/ansible-tmp-1621957071.3594759-2490463-77222652678128/AnsiballZ_tower_job_template.py", line 92, in _ansiballz_main
    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)
  File "/home/alancoding/.ansible/tmp/ansible-tmp-1621957071.3594759-2490463-77222652678128/AnsiballZ_tower_job_template.py", line 40, in invoke_module
    runpy.run_module(mod_name='ansible_collections.awx.awx.plugins.modules.tower_job_template', init_globals=dict(_module_fqn='ansible_collections.awx.awx.plugins.modules.tower_job_template', _modlib_path=modlib_path),
  File "/usr/lib64/python3.9/runpy.py", line 210, in run_module
    return _run_module_code(code, init_globals, run_name, mod_spec)
  File "/usr/lib64/python3.9/runpy.py", line 97, in _run_module_code
    _run_code(code, mod_globals, init_globals,
  File "/usr/lib64/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/tmp/ansible_tower_job_template_payload_ch37xndt/ansible_tower_job_template_payload.zip/ansible_collections/awx/awx/plugins/modules/tower_job_template.py", line 608, in <module>
  File "/tmp/ansible_tower_job_template_payload_ch37xndt/ansible_tower_job_template_payload.zip/ansible_collections/awx/awx/plugins/modules/tower_job_template.py", line 456, in main
  File "/tmp/ansible_tower_job_template_payload_ch37xndt/ansible_tower_job_template_payload.zip/ansible_collections/awx/awx/plugins/module_utils/tower_api.py", line 134, in get_one
  File "/tmp/ansible_tower_job_template_payload_ch37xndt/ansible_tower_job_template_payload.zip/ansible_collections/awx/awx/plugins/module_utils/tower_api.py", line 76, in get_endpoint
  File "/tmp/ansible_tower_job_template_payload_ch37xndt/ansible_tower_job_template_payload.zip/ansible_collections/awx/awx/plugins/module_utils/tower_api.py", line 264, in make_request
AttributeError: 'LooseVersion' object has no attribute 'version'
```

##### ADDITIONAL INFORMATION

I don't know that it's appropriate that the migration detection middleware fails to return the version.

So it could be fixed in the collection, or in the API itself.

user: AlanCoding
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_10252: state: open
title: Ability to use a custom CA cert for a Registry Credential
body: 

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

For Execution Environment images, we currently allow users to pull and use images from public and protected protected registries.  With `Verify SSL` enabled, images can be pulled from registries whose CA certs are in the system CA trust store, but there is currently no way to add a custom CA cert via AWX.  

The current work-around would be to disable `Verify SSL`, which will add the registry URL to a list of _allowed_ insecure registries.  

##### Implementation Notes

This will involve:
- [ ] Adding an `ssl_ca_cert` input to the registry credential.  This will require adding a new text box input field in the UI as well.  
- [ ] Code to write the provided cert to a file/add them to the system CA trust store. 
- [ ] Code to make that cert available in the context of openshift/kubernetes for pulling the EE to be used in container groups.  (this part is unclear to me, but this is good [initial reading](https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/)

A good first step would be to set up an insecure registry to test against and push a custom EE to it.  

user: rooftopcellist
issue_10244: state: open
title: Create Instances with API
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
It's possible to update and manage instances with the API, however they can't be created any way besides awx-manage or in the UI. Could this be a feature in future releases?

Support for this in the awx-kit and Ansible collection would also be very useful.
user: DiefBell
issue_10243: state: open
title: Unable to use awx collection with LDAP user, due to token creation
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->
When trying to schedule a job with awx.awx.tower_schedule, I am unable to authenticate to Tower using username/password with LDAP authentication provider. We are using Ansible Tower, but based on the module error message, this appears to be a problem with awx.awx collection attempting to create an Oauth token instead of using basic auth for the request.

##### ENVIRONMENT
* AWX version: Tower 3.7.1
* AWX install method: Bare metal
* Ansible version:  2.9.21
* Operating System:  CentOS Linux release 7.9.2009
* Web Browser: N/A
* awx.awx collection version: 19.1.0

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->
Attempt to schedule a job using awx.awx.tower_schedule with username/password authentication for LDAP user. Instead the task errors with `OAuth2 Tokens cannot be created by users associated with an external authentication provider`.  We are using Ansible Tower, but based on the module error stack trace the problem appears to be with how authentication is implemented for awx.awx.

Example playbook below.

##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->
The schedule is created successfully in Tower

##### ACTUAL RESULTS

<!-- What actually happened? -->
awx.awx.tower_schedule module fails with the following error:
```
    "msg": "Failed to get token: HTTP Error 403: Forbidden",
    "response": "{\"detail\":\"(access_denied) OAuth2 Tokens cannot be created by users associated with an external authentication provider (ldap)\"}"
```

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

Playbook used for testing
```yaml
- hosts: localhost
  connection: local
  gather_facts: false
  tasks:
    - name: Schedule a job test
      awx.awx.tower_schedule:
        name: "Schedule a job test"
        state: present
        unified_job_template: "Demo Job"
        rrule: "{{ query('awx.awx.tower_schedule_rrule', 'week', start_date='2021-12-19 13:05:51') }}"
        tower_host: https://tower.company.example.com/#/login
        tower_username: myuser
        tower_password: mypassword
      register: result
```

Output from failed playbook run
```
(demo_venv) [vagrant@a9d8b915b6ea jobs_local]$ ansible-playbook ./scheduler_demo.yml -vvv
ansible-playbook 2.9.21
  config file = /home/vagrant/.ansible.cfg
  configured module search path = ['/home/vagrant/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/vagrant/virtualenvs/demo_venv/lib64/python3.6/site-packages/ansible
  executable location = /home/vagrant/virtualenvs/demo_venv/bin/ansible-playbook
  python version = 3.6.12 (default, Oct 23 2020, 13:36:31) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
Using /home/vagrant/.ansible.cfg as config file
host_list declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
script declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
auto declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Parsed /etc/ansible/hosts inventory source with ini plugin
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
Skipping callback 'actionable', as we already have a stdout callback.
Skipping callback 'counter_enabled', as we already have a stdout callback.
Skipping callback 'debug', as we already have a stdout callback.
Skipping callback 'dense', as we already have a stdout callback.
Skipping callback 'dense', as we already have a stdout callback.
Skipping callback 'full_skip', as we already have a stdout callback.
Skipping callback 'json', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'null', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.
Skipping callback 'selective', as we already have a stdout callback.
Skipping callback 'skippy', as we already have a stdout callback.
Skipping callback 'stderr', as we already have a stdout callback.
Skipping callback 'unixy', as we already have a stdout callback.
Skipping callback 'yaml', as we already have a stdout callback.

PLAYBOOK: scheduler_demo.yml **********************************************************************************************************************************
1 plays in ./scheduler_demo.yml

PLAY [localhost] ******************************************************************************************************************************************************
META: ran handlers

TASK [Schedule a job test] ********************************************************************************************************************************************
task path: /workspaces/ansible/app/rootfs/jobs_local/scheduler_demo.yml:6
Using module file /home/vagrant/.ansible/collections/ansible_collections/awx/awx/plugins/modules/tower_schedule.py
Pipelining is enabled.
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: vagrant
<127.0.0.1> EXEC /bin/sh -c '/home/vagrant/virtualenvs/demo_venv/bin/python3 && sleep 0'
The full traceback is:
  File "/tmp/ansible_awx.awx.tower_schedule_payload_35r03c84/ansible_awx.awx.tower_schedule_payload.zip/ansible_collections/awx/awx/plugins/module_utils/tower_api.py", line 322, in authenticate
    headers={'Content-Type': 'application/json'},
  File "/tmp/ansible_awx.awx.tower_schedule_payload_35r03c84/ansible_awx.awx.tower_schedule_payload.zip/ansible/module_utils/urls.py", line 1294, in open
    r = urllib_request.urlopen(*urlopen_args)
  File "/opt/rh/rh-python36/root/usr/lib64/python3.6/urllib/request.py", line 223, in urlopen
    return opener.open(url, data, timeout)
  File "/opt/rh/rh-python36/root/usr/lib64/python3.6/urllib/request.py", line 532, in open
    response = meth(req, response)
  File "/opt/rh/rh-python36/root/usr/lib64/python3.6/urllib/request.py", line 642, in http_response
    'http', request, response, code, msg, hdrs)
  File "/opt/rh/rh-python36/root/usr/lib64/python3.6/urllib/request.py", line 570, in error
    return self._call_chain(*args)
  File "/opt/rh/rh-python36/root/usr/lib64/python3.6/urllib/request.py", line 504, in _call_chain
    result = func(*args)
  File "/opt/rh/rh-python36/root/usr/lib64/python3.6/urllib/request.py", line 650, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
fatal: [localhost]: FAILED! => {
    "changed": false,
    "invocation": {
        "module_args": {
            "description": null,
            "diff_mode": null,
            "enabled": null,
            "extra_data": null,
            "inventory": null,
            "job_tags": null,
            "job_type": null,
            "limit": null,
            "name": "Schedule a job test",
            "new_name": null,
            "rrule": "DTSTART;TZID=America/New_York:20211219T130551 RRULE:FREQ=WEEKLY;INTERVAL=1",
            "scm_branch": null,
            "skip_tags": null,
            "state": "present",
            "tower_config_file": null,
            "tower_host": "https://tower.company.example.com/#/login",
            "tower_oauthtoken": null,
            "tower_password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "tower_username": "myuser",
            "unified_job_template": "Demo Job",
            "validate_certs": null,
            "verbosity": null
        }
    },
    "msg": "Failed to get token: HTTP Error 403: Forbidden",
    "response": "{\"detail\":\"(access_denied) OAuth2 Tokens cannot be created by users associated with an external authentication provider (ldap)\"}"
}

PLAY RECAP ************************************************************************************************************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   
```
user: jhampson-dbre
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_10242: state: open
title: awxkit workflow_job monitor errors out against Ansibe Tower
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
I am able to launch a job against Ansible Tower via awxkit. However, attempting to monitor the workflow job via `awx  workflow_job monitor` fails.

##### ENVIRONMENT
* AWX version: 18.0.0
* AWX install method: pip via python 3.6.8
* Ansible version: Python 2 & Ansible 2.10.9 on client,  Python 2 & Ansible 2.10.7 on clieTowernt
* Operating System: CentOS 7
* Web Browser: Chrome, curl
* Ansible Tower: 3.8.3

##### STEPS TO REPRODUCE

Create workflow job template which calls on regular job template

Create user with read + execute permissions in Tower that has ability to execute workflow job template

Launch workflow job template via awxkit

Monitor workflow job

`awx workflow_job_templates launch --limit my-ec2-hostname 20`

Results in:

```json
{
     "workflow_job": 572,
     "ignored_fields": {},
     "id": 572,
     "type": "workflow_job",
     "url": "/api/v2/workflow_jobs/572/",
     "summary_fields": {
          "organization": {
               "id": 3,
               "name": "My Organization - Development",
               "description": "Development deployment account for myorg in AWS"
          },
          "inventory": {
               "id": 5,
               "name": "EC2 Development",
               "description": "",
               "has_active_failures": false,
               "total_hosts": 1,
               "hosts_with_active_failures": 0,
               "total_groups": 4,
               "has_inventory_sources": true,
               "total_inventory_sources": 1,
               "inventory_sources_with_failures": 0,
               "organization_id": 3,
               "kind": ""
          },
          "workflow_job_template": {
               "id": 20,
               "name": "base_centos_7",
               "description": "A base CentOS 7 workflow template"
          },
          "unified_job_template": {
               "id": 20,
               "name": "base_centos_7",
               "description": "A base CentOS 7 workflow template",
               "unified_job_type": "workflow_job"
          },
          "created_by": {
               "id": 2,
               "username": "isuftin",
               "first_name": "Ivan",
               "last_name": "Suftin"
          },
          "modified_by": {
               "id": 2,
               "username": "isuftin",
               "first_name": "Ivan",
               "last_name": "Suftin"
          },
          "user_capabilities": {
               "delete": true,
               "start": true
          },
          "labels": {
               "count": 0,
               "results": []
          }
     },
     "created": "2021-05-20T20:57:33.981409Z",
     "modified": "2021-05-20T20:57:34.040583Z",
     "name": "base_centos_7",
     "description": "A base CentOS 7 workflow template",
     "unified_job_template": 20,
     "launch_type": "manual",
     "status": "pending",
     "failed": false,
     "started": null,
     "finished": null,
     "canceled_on": null,
     "elapsed": 0.0,
     "job_args": "",
     "job_cwd": "",
     "job_env": {},
     "job_explanation": "",
     "result_traceback": "",
     "workflow_job_template": 20,
     "extra_vars": "{\"remove_packages\": [\"rsh\", \"talk\", \"telnet-server\", \"rsh-server\", \"ypserv\", \"tftp-server\", \"xinetd\", \"ypbind\", \"openldap-clients\", \"xorg-x11*\"]}",
     "allow_simultaneous": true,
     "job_template": null,
     "is_sliced_job": false,
     "inventory": 5,
     "limit": "my-ec2-hostname",
     "scm_branch": "development",
     "webhook_service": "",
     "webhook_credential": null,
     "webhook_guid": ""
}
```

Using the workflow_job id, I then issue `awx -v workflow_job monitor 572`

```json
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): my.internal.tower.hostname:443
DEBUG:urllib3.connectionpool:https://my.internal.tower.hostname:443 "GET /api/ HTTP/1.1" 200 307
DEBUG:awxkit.api.client:"GET https://my.internal.tower.hostname:443/api/" elapsed: 0:00:00.135593
DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.api.ApiV2'> by url: /api/v2/
DEBUG:urllib3.connectionpool:https://my.internal.tower.hostname:443 "GET /api/v2/ HTTP/1.1" 200 1688
DEBUG:awxkit.api.client:"GET https://my.internal.tower.hostname:443/api/v2/" elapsed: 0:00:00.167629
DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.workflow_jobs.WorkflowJobs'> by url: /api/v2/workflow_jobs/
DEBUG:urllib3.connectionpool:https://my.internal.tower.hostname:443 "OPTIONS /api/v2/workflow_jobs/ HTTP/1.1" 200 12107
DEBUG:awxkit.api.client:"OPTIONS https://my.internal.tower.hostname:443/api/v2/workflow_jobs/" elapsed: 0:00:00.295014
DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.workflow_jobs.WorkflowJobs'> by url: /api/v2/workflow_jobs/
DEBUG:urllib3.connectionpool:https://my.internal.tower.hostname:443 "OPTIONS /api/v2/workflow_jobs/1/ HTTP/1.1" 200 7037
DEBUG:awxkit.api.client:"OPTIONS https://my.internal.tower.hostname:443/api/v2/workflow_jobs/1/" elapsed: 0:00:00.242236
DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.workflow_jobs.WorkflowJob'> by url: /api/v2/workflow_jobs/572/
DEBUG:urllib3.connectionpool:https://my.internal.tower.hostname:443 "GET /api/v2/workflow_jobs/572/ HTTP/1.1" 200 2362
DEBUG:awxkit.api.client:"GET https://my.internal.tower.hostname:443/api/v2/workflow_jobs/572/" elapsed: 0:00:00.238253
------Starting Standard Out Stream------
DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.workflow_jobs.WorkflowJob'> by url: /api/v2/workflow_jobs/572/
DEBUG:urllib3.connectionpool:https://my.internal.tower.hostname:443 "GET /api/v2/workflow_jobs/572/ HTTP/1.1" 200 2362
DEBUG:awxkit.api.client:"GET https://my.internal.tower.hostname:443/api/v2/workflow_jobs/572/" elapsed: 0:00:00.347116
Launching base_centos_7...
DEBUG:urllib3.connectionpool:https://my.internal.tower.hostname:443 "GET /api/v2/unified_jobs?order_by=finished&unified_job_node__workflow_job=572 HTTP/1.1" 301 162
DEBUG:awxkit.api.client:"GET https://my.internal.tower.hostname:443/api/v2/unified_jobs?order_by=finished&unified_job_node__workflow_job=572" elapsed: 0:00:00.002451
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): my.internal.tower.hostname:80
DEBUG:urllib3.connectionpool:http://my.internal.tower.hostname:80 "GET /api/v2/unified_jobs/?order_by=finished&unified_job_node__workflow_job=572 HTTP/1.1" 301 134
DEBUG:awxkit.api.client:"GET http://my.internal.tower.hostname/api/v2/unified_jobs/?order_by=finished&unified_job_node__workflow_job=572" elapsed: 0:00:00.005123
DEBUG:urllib3.connectionpool:https://my.internal.tower.hostname:443 "GET /api/v2/unified_jobs/?order_by=finished&unified_job_node__workflow_job=572 HTTP/1.1" 401 107
DEBUG:awxkit.api.client:"GET https://my.internal.tower.hostname:443/api/v2/unified_jobs/?order_by=finished&unified_job_node__workflow_job=572" elapsed: 0:00:00.065960
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/awxkit/cli/__init__.py", line 25, in run
    cli.parse_resource()
  File "/usr/local/lib/python3.6/site-packages/awxkit/cli/client.py", line 168, in parse_resource
    response = self.parse_action(resource)
  File "/usr/local/lib/python3.6/site-packages/awxkit/cli/client.py", line 316, in parse_action
    return getattr(page, self.method)(**parsed)
  File "/usr/local/lib/python3.6/site-packages/awxkit/cli/custom.py", line 580, in perform
    self.page.connection.session,
  File "/usr/local/lib/python3.6/site-packages/awxkit/cli/stdout.py", line 62, in monitor_workflow
    fetch(seen)
  File "/usr/local/lib/python3.6/site-packages/awxkit/cli/stdout.py", line 23, in fetch
    ).json()['results']
KeyError: 'results'

```

Also, this is a thing:

```sh
# awx workflow_job_templates launch --limit my-ec2-hostname --monitor 20

------Starting Standard Out Stream------
Launching base_centos_7...
'results'

#
```

In both of the above launch attempts, the workflow job continues working and actually succeeds :/

Also note that in the json output, the `related` field is missing. This seems to be an issue with awxkit since when I perform a regular curl to the same URL wit the same bearer token as awkxit is using, the related fields do come up. Through those fields I am able to track down the workflow nodes.

*Also* note that awxkit leaves out a slash at first in the call to `/api/v2/unified_jobs/` which then Tower will try to 301 redirect to the proper URL but @ http/80 for some reason. My load balancer will catch that and redirect back to https/443 with the proper URL but it looks like by that point the authentication token is gone since we're seeing a 401

##### EXPECTED RESULTS

awxkit hangs out and monitors the workflow job until it's done. 

##### ACTUAL RESULTS

Errors pasted above


user: isuftin
issue_10238: state: open
title: Cleanup image pull secrets when registry cred is deleted
body: Follow-up this PR: https://github.com/ansible/awx/pull/10204
Follow-up to this Issue:  https://github.com/ansible/awx/issues/10114

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Currently, we create image pull secrets in the namespace of the cluster defined in the Container Group.  These secrets remain after job runs and get re-used.  This is fine, the issue is when a registry credential is deleted.  In this case, we should delete all associated cluster secrets.  

To do this, we need to:
1. Get a list of container groups
2. Iterate over the EE's and gather the ones that use that quay credential
3. Iterate over the JT's and get the ones that use those EE's. Create a unique list of the Instance groups (container groups) for these JT's
4. Reconstruct the secret name, then attempt to delete it using the credential for that instance_group.  

For example:
```
from django.conf import settings
automation-{0}-image-pull-secret-{1}.format(settings.INSTALL_UUID[:5], registry_cred.id
```

Alternatively, we could try to maintain a list of known pull secrets and delete from that list...

This could be done [here](https://github.com/ansible/awx/blob/devel/awx/api/views/__init__.py#L1390) in the credential `destroy()` method.  


##### ENVIRONMENT
* AWX version: 19.1.0

##### STEPS TO REPRODUCE

1. Create valid openshift/k8s credential
2. Create valid registry credential
3. Create an Execution environment that uses a protected registry and specify the registry credential
4. Create a JT that uses them
5. Run a job
6. Observe an image pull secret has now been created in the openshift/k8s cluster.  
7. Delete the registry credential

##### EXPECTED RESULTS

The image pull secret should be deleted.  

##### ACTUAL RESULTS

Currently, the secret must be deleted manually.  Secret will remain.  



user: rooftopcellist
issue_10232: state: open
title: Error thrown when adding organizations to roles for team or user
body: Bug Report

##### SUMMARY
When adding multiple roles at one time for an organization in a user or a team: 400 Error: you cannot assign an Organization participation role as a child role for a team.

##### STEPS TO REPRODUCE

Click on a team or user. Click roles. Click Add.
Select organization. then select an individual organization.
select multiple roles for the organization- you will then see the error when you click Save.


user: akus062381
issue_10231: state: open
title: Adding credentials to roles section of Team/User
body: Bug Report

##### SUMMARY
When adding an admin, read, or use role for Credentials for Team or User, a 400 error is shown: You cannot grant credential access to a team when the organization field isn't set, or belongs to a different organization

##### STEPS TO REPRODUCE

Create an organization. Visit the Roles tab. Click Teams.
Select team, and then select multiple roles for that team and click Save. You will see the error shown above, unless the credential is associated with the organization. 
Suggestion: in the list where the user selects the team or user, any options that won't work could be removed from the browser window, so that user can't even see them to select them in the first place.

##### EXPECTED RESULTS

Only allowed credentials would be shown in the list where the user makes a selection (inside the modal). 


user: akus062381
issue_10228: state: open
title: job tags not working with tags in roles/tasks
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->
I create a template to run an ansible playbook with job tags. When I run it, ansible-playbook run all tasks in roles, not specific tasks with tags. 
Job tags is working with tasks in main playbook file, but not working with tasks in roles.

##### ENVIRONMENT
* AWX version: 19.1.0
* AWX install method: docker on linux
* Ansible version:  2.9.6
* Operating System: Ubuntu 20.04
* Web Browser: Firefox

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->

##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->
Job run ansible-playbook with specific tasks in roles.

##### ACTUAL RESULTS

<!-- What actually happened? -->
Job run ansible-playbook with all tasks in roles.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: dat1041988
issue_10219: state: open
title: Not sure what this AWX error means?
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
We got this error in our environment:

```python
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 1397, in run
    res = receptor_job.run()
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 2957, in run
    return self._run_internal(receptor_ctl)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/tasks.py", line 3008, in _run_internal
    raise RuntimeError(detail)
RuntimeError: Stream error running pod: unexpected EOF
```

##### ENVIRONMENT
* AWX version: 
```
 ______________ 
<  AWX 19.0.0  >
 -------------- 
          \
          \   ^__^
              (oo)\_______
              (__)      A )\
                  ||----w |
                  ||     ||
```
* AWX install method: operator on kubernetes

##### STEPS TO REPRODUCE

Attempting to run a job and this is the error we get "sometimes"


/cc @moficodes @odrodrig

user: jjasghar
issue_10207: state: open
title: 19.1: project refreshing fails
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
After upgrading to 19.1.0 I'm no longer able to refresh projects.

##### ENVIRONMENT
* AWX version: 19.1.0
* AWX install method: Kubernetes with AWX operator 0.9.0
* Ansible version:  Whatever is in the EE 0.2.0 execution environment
* Operating System: Amazon Linux 2
* Web Browser: Firefox 86

##### STEPS TO REPRODUCE

* I upgraded my 19.0.0 installation to 19.1.0
* I clicked on the refresh button next to one of my projects

##### EXPECTED RESULTS

No errors

##### ACTUAL RESULTS

I get an error, with rather unhelpful output:

```python
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/ansible_runner/streaming.py", line 108, in run
    utils.unstream_dir(zip_data, self.private_data_dir)
  File "/usr/local/lib/python3.8/site-packages/ansible_runner/utils.py", line 104, in unstream_dir
    data = base64.b85decode(data)
  File "/usr/lib64/python3.8/base64.py", line 463, in b85decode
    raise ValueError('bad base85 character at position %d'
ValueError: bad base85 character at position 84
```

I initially thought this might be due to me having forgotten to rebuild my EE on top of 0.2.0, but even after doing that and launching the job on an EE derived from 0.2.0 I still get this.

Unfortunately this is all the log I get, which makes debugging this difficult without further pointers.

user: daenney
issue_10201: state: open
title: awxkit doesn't expose job cancellation
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Add a command flag such that when using `awx job_templates launch --monitor`, and the command is interrupted (SIGINT/SIGTERM), the job is stopped before exiting.

The intent behind this is for use in version control CI systems. A CI job might launch an AWX job using `awx job_templates launch`, and then the CI job is cancelled (such as due to a push which obsoletes the current job), but the AWX job continues running. The admin might want to have the AWX job cancelled as well so that a new job can be kicked off (among other reasons).

There is a risk of course, such that handlers won't run and whatnot, but the admin can decide whether the risk is acceptable.

&nbsp;

Also note there's currently no way to hack around this, by launching job, getting ID, monitoring, and manually calling cancel. awxkit does not expose a cancellation call to the user.
user: phemmer
issue_10198: state: open
title: Unable to see workflow job status (failed or success) log in logging aggregator
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Workflow job status is present in API but not in awx.analytics.activity_stream or awx.analytics.job_events

##### ENVIRONMENT
* AWX version: <=19.1.0
* AWX install method: minikube
* Ansible version:  2.x
* Operating System: RHEL7
* Web Browser: Chrome

##### STEPS TO REPRODUCE

1. Create a workflow
2. Configure Logging aggregator send activity_stream and job_events
3. Launch the workflow template
4. Check the workflow job status under https://XXX.AWX_URL/api/v2/workflow_jobs/XXX_WORKFLOW_JOB_ID
5. Check the logging aggregator entries for awx.analytics.activity_stream or awx.analytics.job_events

##### EXPECTED RESULTS

In the logs sent to the logging aggregator, no details for "status" and "failed" entries are being associated with the workflow job id as it is shown in the API. 
...
        {
            "id": 13302,
            "type": "workflow_job",
            "url": "/api/v2/workflow_jobs/13302/",
            "related": {
                "created_by": "/api/v2/users/12/",
                "modified_by": "/api/v2/users/12/",
                "unified_job_template": "/api/v2/workflow_job_templates/45/",
                "execution_environment": "/api/v2/execution_environments/10/",
                "workflow_job_template": "/api/v2/workflow_job_templates/45/",
                "notifications": "/api/v2/workflow_jobs/13302/notifications/",
                "workflow_nodes": "/api/v2/workflow_jobs/13302/workflow_nodes/",
                "labels": "/api/v2/workflow_jobs/13302/labels/",
                "activity_stream": "/api/v2/workflow_jobs/13302/activity_stream/",
                "relaunch": "/api/v2/workflow_jobs/13302/relaunch/",
                "cancel": "/api/v2/workflow_jobs/13302/cancel/"
            },
           ......
            "created": "2021-05-13T09:35:19.182328Z",
            "modified": "2021-05-13T09:35:19.924731Z",
            "name": "demo_patching.demoservers",
            "description": "",
            "unified_job_template": 45,
            "launch_type": "manual",
            **"status": "successful",**
            "execution_environment": 10,
            **"failed": false,**
            "started": "2021-05-13T09:35:19.924494Z",
            "finished": "2021-05-13T09:36:52.481202Z",
            "canceled_on": null,
            "elapsed": 92.557,
            "job_explanation": "",
            "launched_by": {
                "id": 12,
                "name": "cesarryan.mindana",
                "type": "user",
                "url": "/api/v2/users/12/"
            },
            "workflow_job_template": 45,
            "extra_vars": "{\"rfcnumber\": \"\", \"sequential\": \"no\", \"targethgroup\": \"lnpnpriftst044v\"}",
            "allow_simultaneous": false,
            "job_template": null,
            "is_sliced_job": false,
            "inventory": null,
            "limit": null,
            "scm_branch": null,
            "webhook_service": "",
            "webhook_credential": null,
            "webhook_guid": ""
        }
...

##### ACTUAL RESULTS

Unable to see such details in the logging aggregation

##### ADDITIONAL INFORMATION


user: ryan012880
issue_10194: state: open
title: awxkit `job_templates launch --monitor` stops streaming
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When using the `awx` utility from awxkit to launch a job and monitor the output, it eventually stops outputting even though the job is still running. It does not stop in the same spot every time (same job, same parameters).

##### ENVIRONMENT
* AWX version: 19.1.0
* AWX install method: minikube
* Ansible version:  2.10.7
* Operating System: Debian Buster
* Web Browser: N/A

##### STEPS TO REPRODUCE

```
awx --conf.host https://awx.example.com -k --conf.username user --conf.password pass job_templates launch site.yml --monitor -f human --job_type check --diff_mode true --scm_branch awx -v
```
##### EXPECTED RESULTS

continue streaming output until job completes

##### ACTUAL RESULTS

Stops streaming after a seemingly random line, going into a polling loop until the job completes, at which point it exits.

##### ADDITIONAL INFORMATION

```

DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.jobs.Job'> by url: /api/v2/jobs/207/
DEBUG:urllib3.connectionpool:https://awx.example.com:443 "GET /api/v2/jobs/207/ HTTP/1.1" 200 7000
DEBUG:awxkit.api.client:"GET https://awx.example.com/api/v2/jobs/207/" elapsed: 0:00:00.326234
DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.jobs.JobEvents'> by url: /api/v2/jobs/207/job_events/
DEBUG:urllib3.connectionpool:https://awx.example.com:443 "GET /api/v2/jobs/207/job_events/?order_by=start_line&no_truncate=True&start_line__gte=860 HTTP/1.1" 200 47479
DEBUG:awxkit.api.client:"GET https://awx.example.com/api/v2/jobs/207/job_events/?order_by=start_line&no_truncate=True&start_line__gte=860" elapsed: 0:00:00.319897
ok: [host1.example.com]
ok: [host2.example.com]
ok: [host3.example.com]
ok: [host4.example.com]
ok: [host5.example.com]
ok: [host6.example.com]
ok: [host7.example.com]
ok: [host8.example.com]
DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.jobs.Job'> by url: /api/v2/jobs/207/
DEBUG:urllib3.connectionpool:https://awx.example.com:443 "GET /api/v2/jobs/207/ HTTP/1.1" 200 7000
DEBUG:awxkit.api.client:"GET https://awx.example.com/api/v2/jobs/207/" elapsed: 0:00:00.282339
DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.jobs.JobEvents'> by url: /api/v2/jobs/207/job_events/
DEBUG:urllib3.connectionpool:https://awx.example.com:443 "GET /api/v2/jobs/207/job_events/?order_by=start_line&no_truncate=True&start_line__gte=868 HTTP/1.1" 200 44930
DEBUG:awxkit.api.client:"GET https://awx.example.com/api/v2/jobs/207/job_events/?order_by=start_line&no_truncate=True&start_line__gte=868" elapsed: 0:00:00.636146
ok: [host9.example.com]
ok: [host10.example.com]
ok: [awx.example.com]
ok: [host11.example.com]
ok: [host12.example.com]

TASK [firewall : include_tasks] ************************************************
DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.jobs.Job'> by url: /api/v2/jobs/207/
DEBUG:urllib3.connectionpool:https://awx.example.com:443 "GET /api/v2/jobs/207/ HTTP/1.1" 200 7000
DEBUG:awxkit.api.client:"GET https://awx.example.com/api/v2/jobs/207/" elapsed: 0:00:00.266627
DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.jobs.JobEvents'> by url: /api/v2/jobs/207/job_events/
DEBUG:urllib3.connectionpool:https://awx.example.com:443 "GET /api/v2/jobs/207/job_events/?order_by=start_line&no_truncate=True&start_line__gte=875 HTTP/1.1" 200 39590
DEBUG:awxkit.api.client:"GET https://awx.example.com/api/v2/jobs/207/job_events/?order_by=start_line&no_truncate=True&start_line__gte=875" elapsed: 0:00:00.312377
DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.jobs.Job'> by url: /api/v2/jobs/207/
DEBUG:urllib3.connectionpool:https://awx.example.com:443 "GET /api/v2/jobs/207/ HTTP/1.1" 200 7001
DEBUG:awxkit.api.client:"GET https://awx.example.com/api/v2/jobs/207/" elapsed: 0:00:00.178214
DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.jobs.JobEvents'> by url: /api/v2/jobs/207/job_events/
DEBUG:urllib3.connectionpool:https://awx.example.com:443 "GET /api/v2/jobs/207/job_events/?order_by=start_line&no_truncate=True&start_line__gte=875 HTTP/1.1" 200 39590
DEBUG:awxkit.api.client:"GET https://awx.example.com/api/v2/jobs/207/job_events/?order_by=start_line&no_truncate=True&start_line__gte=875" elapsed: 0:00:00.232111
DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.jobs.Job'> by url: /api/v2/jobs/207/
DEBUG:urllib3.connectionpool:https://awx.example.com:443 "GET /api/v2/jobs/207/ HTTP/1.1" 200 7001
DEBUG:awxkit.api.client:"GET https://awx.example.com/api/v2/jobs/207/" elapsed: 0:00:00.229404
DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.jobs.JobEvents'> by url: /api/v2/jobs/207/job_events/
DEBUG:urllib3.connectionpool:https://awx.example.com:443 "GET /api/v2/jobs/207/job_events/?order_by=start_line&no_truncate=True&start_line__gte=875 HTTP/1.1" 200 39590
DEBUG:awxkit.api.client:"GET https://awx.example.com/api/v2/jobs/207/job_events/?order_by=start_line&no_truncate=True&start_line__gte=875" elapsed: 0:00:00.215470
DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.jobs.Job'> by url: /api/v2/jobs/207/
DEBUG:urllib3.connectionpool:https://awx.example.com:443 "GET /api/v2/jobs/207/ HTTP/1.1" 200 7001
DEBUG:awxkit.api.client:"GET https://awx.example.com/api/v2/jobs/207/" elapsed: 0:00:00.152456
DEBUG:awxkit.api.registry:Retrieved <class 'awxkit.api.pages.jobs.JobEvents'> by url: /api/v2/jobs/207/job_events/
DEBUG:urllib3.connectionpool:https://awx.example.com:443 "GET /api/v2/jobs/207/job_events/?order_by=start_line&no_truncate=True&start_line__gte=875 HTTP/1.1" 200 39590
DEBUG:awxkit.api.client:"GET https://awx.example.com/api/v2/jobs/207/job_events/?order_by=start_line&no_truncate=True&start_line__gte=875" elapsed: 0:00:00.354734
...
```
^ with the last 6 lines repeating over and over
user: phemmer
issue_10156: state: open
title: Allow user to relaunch a Manage job from the Job List
body: 
##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
There is not relaunch button on the job list for managed jobs.  Not sure why this is the case, but it is also the case in the old ui.  We should reconsider this.
![Screen Shot 2021-05-10 at 11 09 12 AM](https://user-images.githubusercontent.com/39280967/117681579-3f3fad00-b180-11eb-8ea5-edc4619bb1b0.png)


user: AlexSCorey
issue_10153: state: open
title: AWX 19.1: management jobs with a "days" parameter can not be scheduled at all
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
On top of #10152 there is also a bug that makes it impossible to edit a schedule with a "days" parameter.

##### ENVIRONMENT
* AWX version: 19.1.0
* AWX install method: k3s on debian buster deployed with awx-operator 0.9.0
* Ansible version:  n/a
* Operating System: centos? 
* Web Browser: any

##### STEPS TO REPRODUCE

1. in management jobs click on "cleanup job details" or "cleanup activity stream"
2. create or edit the schedule
3. manually set the start time to some meaningful value, like "01-01-1971T00:00:00"
4. try to save the job


##### EXPECTED RESULTS

The job should be saved with the new settings

##### ACTUAL RESULTS

There is an error:
"can't assign to property "days" on "{\"days\":\"30\"}": not an object" and the job is not saved.

user: lemmy04
issue_10151: state: open
title: AWX 19.1: jobs stuck in "running" for over 12 hours but not actually doing anything at all
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Since yesterday my AWX does not work anymore - jobs get created and started but do not *actually* start i.e. no worker container is created, no actual work is done

##### ENVIRONMENT
* AWX version: 19.1.0
* AWX install method: k3s on debian buster, awx deployed with operator 0.9.0
* Ansible version:  whichever is in awx-ee 0.2.0
* Operating System: whichever is used in the images? Centos?
* Web Browser: any.

##### STEPS TO REPRODUCE

I start a new job by manually launching either an SCM update or a job or workflow template
1. job gets created
2. job goes from pending to running
3. NO new worker container is created in k3s
4. NO actual work is done, no standard output on the job, job never finishes

##### EXPECTED RESULTS

I would expect the job to either work or fail at some point with some (meaningful) error message

##### ACTUAL RESULTS

job never actually starts - just sits there in "running" but nothing is actually happening.


##### ADDITIONAL INFORMATION

no errors on the K3s side of things - it looks more like AWX never actually even tries to talk to K3s anymore.
BUT: ad-hoc jobs still work... this only affects templates and SCM updates (or maybe more, i have not tried every possible thing)
user: lemmy04
issue_10142: state: open
title: Support for AWS IAM and Azure auth methods in HashiCorp Vault Secret Lookup credential type
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

HashiCorp Vault provides authentication methods supporting both AWS and Azure instance identities (AWS IAM and Azure MSI)

- https://www.vaultproject.io/docs/auth/aws
- https://www.vaultproject.io/docs/auth/azure

It would be really great for the credential type to support these authentication methods natively.

user: jghal
issue_10139: state: open
title: Team and User Roles Should be sent from the api already collated
body: 
##### ISSUE TYPE
-enhancement




##### SUMMARY
Current the `/teams/id/roles` and `/users/id/roles` end points gives us a list of resources with a different list item for each role. This means that there could be several list items for the same resource if the team/user has multiple roles on that resource.  See the image below of the teams/roles list in the ui.  
![Screen Shot 2021-05-07 at 9 30 33 AM](https://user-images.githubusercontent.com/39280967/117457146-f33dff80-af16-11eb-9300-9e2e679d28a4.png)

The UI is unable to collate these very well because doing so would render our pagination useless as the pagination relies on the count that is returned from the api. Things get really complicated when we include searching and then start removing roles from the list.

This functionality is working on the Teams/Access list which hits `teams/id/access_list`
![Screen Shot 2021-05-07 at 9 34 07 AM](https://user-images.githubusercontent.com/39280967/117457751-88d98f00-af17-11eb-80b7-6b97a3f0a397.png)

user: AlexSCorey
issue_10137: state: open
title: Not able to import inventory to AWX from host
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI
 - Installer

##### SUMMARY
I installed AWX using awx-operator. 
Issue1: I didn't get what password to give inside the awx-task container when prompts for sudo password.
Issue2: Getting this error FileNotFoundError: [Errno 2] No such file or directory: 'podman' while importing the inventory from host file
##### ENVIRONMENT
* AWX version: 19
* AWX install method: operator, developer environment
* AWX deployment target: kubernetes
* Operating System: Centos 7.9
* Web Browser:

##### STEPS TO REPRODUCE

Login to the awx-task container and run the below command
awx-manage inventory_import --inventory-name inventory --source /var/lib/awx/projects/inventory
My file is the source given and the inventory is already created in AWX

##### EXPECTED RESULTS

Inventory is imported successfully

##### ACTUAL RESULTS

    1.390 INFO     Updating inventory 4: inventory
2021-05-07 07:32:35,559 DEBUG    [-] awx.analytics.job_lifecycle inventoryupdate-21 created
    1.469 INFO     Reading Ansible inventory source: /var/lib/awx/projects/inventory
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 8, in <module>
    sys.exit(manage())
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/__init__.py", line 164, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/management/commands/inventory_import.py", line 872, in handle
    data = AnsibleInventoryLoader(source=source, venv_path=venv_path, verbosity=verbosity).load()
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/management/commands/inventory_import.py", line 132, in load
    return self.command_to_json(base_args)
  File "/var/lib/awx/venv/awx/lib64/python3.8/site-packages/awx/main/management/commands/inventory_import.py", line 108, in command_to_json
    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  File "/usr/lib64/python3.8/subprocess.py", line 854, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib64/python3.8/subprocess.py", line 1702, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'podman'


##### ADDITIONAL INFORMATION

Please help me with the above 2 issues as i couldn't find any results in the internet

user: trinesh17
issue_10126: state: open
title: Workflow not working as expected when a job finish with an Error.
body: --------------------------------------------------------
<!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->
Workflow not working as expected when a job finish with an Error.

##### ENVIRONMENT
* AWX version: 14.0.0
* AWX install method: openshift
* Ansible version:  2.9.11
* Operating System: CentOS
* Web Browser: google chrome

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->
- Create "Print Hello World" job_template. This is a simple job that will always run successfully.
- Create "Error_job" job_template. This job will always ERROR when launch it. 
   An example to do that is the follow:
       * Create a container group that is using an image that it does not exist. 
       * Create a job_template and select on the "Instance Group" the container group created on the previous step
- Create a workflow as follow
       ![image](https://user-images.githubusercontent.com/11569187/117283975-a4389180-ae66-11eb-9787-0b2fb7a537b8.png)
       * From START add 2 JobTemplates: "Error_job" and "Print Hello World [1]"
       * Add a third jobTemplate "Print Hello World [2]" as follow:
               * Link from "Error_job" to "Print Hello World [2]" defined as run On Success
               * Link from "Print Hello World [1]" to "Print Hello World [2]" defined as run On Success
               * "Print Hello World [2]" defined as convergense: ALL
- Run the workflow 

##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->
As "Error_job" do not success, I expect that "Print Hello World [2]" will NOT be execute.

##### ACTUAL RESULTS

<!-- What actually happened? -->
"Print Hello World [2]" is executed, even if "Error_job" finished with an ERROR.
![image](https://user-images.githubusercontent.com/11569187/117284079-c3372380-ae66-11eb-9822-51fcd482900a.png)

![image](https://user-images.githubusercontent.com/11569187/117288364-b537d180-ae6b-11eb-86b5-60e1725745f1.png)


##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: solarana
issue_10112: state: open
title: [RFE] Populate the "Ansible Galaxy" credential to an new Organization when created using API
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Starting Ansible Tower 3.8, Currently, when we add a new Organization in Ansible Tower UI, The "Galaxy Credential" field is automatically populated with the default "Ansible Galaxy" credential. 

But the same does not happen while creating a new Organization with API. We can make sure that the API also automatically add the 'missing' credential.
user: SWADESNA
issue_10103: state: open
title: Execution Environment Templates Tab has wrong empty state message
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Sub lists for an 'external resource' like the Execution Environments tab inside of an Organization or the Templates Tab inside of an Execution Environment should have link to take the user to the top level resource list so that they can add/edit a a resource.

Using the screen shot below we are inside of an Execution Environment on the Templates tab.  No templates are using this EE so the list is empty.  The message should read  ``` Please add Templates(link to `/templates`) to populate this list. ``` so that they can add/edit a template to use this EE.  
![Screen Shot 2021-05-04 at 12 37 47 PM](https://user-images.githubusercontent.com/39280967/117040277-b89a5400-acd7-11eb-9a70-8854b417d331.png)

A list of resources where this applies 
- [ ] Execution Environment --> Templates tab
- [ ] User --> Organizations tab
- [ ] Organizations --> Teams tab, Execution Environments tab, Notifications tab
- [ ] Projects --> Notifications tab
- [ ] Templates --> Notifications tab

This is probably not an exhaustive list.


user: AlexSCorey
issue_10080: state: open
title: AWX deleting old hosts from DB throws 502
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->

##### ENVIRONMENT
* AWX version: 19.1.0
* AWX install method: awx-operator / k8s helm charts
* Ansible version:   2.11.0rc2
* Operating System: Mac
* Web Browser: Vivaldi

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->
1. Use AWS ASG and scale up / scale down
2. Use AWX with ec2_inventory pulling directly from AWS.
3. Inventory update set to delete and then update
4. Something breaks with the inventory which causes it to have issues deleting hosts.
5. On manual deletions not able to delete few hosts - getting 502

##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->
AWX to delete old hosts / pull new ones correctly.

##### ACTUAL RESULTS

<!-- What actually happened? -->
Inventory update hangs / has to be either killed manually or timeout.

Manual removal of specific hosts causes 502.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

AWX web container logs : 

```
2021/05/03 12:02:12 [error] 25#0: *8648 upstream prematurely closed connection while reading response header from upstream, client: {service_endpoint_ip} , server: _, request: "DELETE /api/v2/hosts/3068/ HTTP/1.1", upstream: "uwsgi://127.0.0.1:8050", host: "awx....", referrer: "https://awx..../api/v2/hosts/3068/"

{service_endpoint_ip} - - [03/May/2021:12:02:12 +0000] "DELETE /api/v2/hosts/3068/ HTTP/1.1" 502 568 "https://awx..../api/v2/hosts/3068/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/537.36" "{client_ip}"

DAMN ! worker 1 (pid: 1172) died, killed by signal 9 :( trying respawn ...
Respawned uWSGI worker 1 (new pid: 1176)
WSGI app 0 (mountpoint='') ready in 2 seconds on interpreter 0x2098540 pid: 1176 (default app)
```

Vivaldi network console log :

```
DevTools failed to load SourceMap: Could not load content for https://awx..../static/rest_framework/css/bootstrap.min.css.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
jquery-3.5.1.min.js:2 DELETE https://awx...../api/v2/hosts/3068/ 502
send @ jquery-3.5.1.min.js:2
ajax @ jquery-3.5.1.min.js:2
doAjaxSubmit @ ajax-form.js:75
dispatch @ jquery-3.5.1.min.js:2
v.handle @ jquery-3.5.1.min.js:2
```

Vivaldi also seems to be pointing to `static/rest_framework/js/jquery-3.5.1.min.js` as source of error and specifically this line throwing 502: 

`                        r.send(i.hasContent && i.data || null)`



Also to add - this all started with the issue #9555. I was able to delete old hosts under AWX 17.1.0 but it took a bigger part of a day / under 19.1.0 this seems to just throw 502 all the time now on the broken hosts.
user: endriu0
issue_10060: state: open
title: looking for an easy way to create venv on AWX K8s install
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Implement an easy way to manage and create venv in web /task container, by default containers are configured with no privilege escalation

##### SUMMARY
Have an easy way to create, manage venv in AWX in K8s

user: rdzielicki
issue_10054: state: open
title: Can't pass `job_metadata` cleanly to JSON APIs
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY

Side case of https://github.com/ansible/awx/issues/9888

If you are sending a notification to a webhook API that expects JSON input, it is extremely difficult to structure a properly formatted `body` parameter that includes JSON job variables, as string-ification and quoting gets in the way.

Example:

```
{ "extra_vars": "{{ job_metadata }}" }
```
does not work, and you need to do something like:
```
{
 "extra_vars": { 
   "inventory": "{{ job.summary_fields.inventory.name }}",
   "status": "{{ job.status }}"
 }
}
```

##### ENVIRONMENT
* AWX version: current

user: wenottingham
issue_10027: state: open
title: failed to executed command 'make docke-compose'
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->

##### ENVIRONMENT
* AWX version: devel
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  2.9.18
* Operating System: centos7
* Web Browser: google

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->
please run command 'make docke-compose'

##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->

Docker service is going to start with all of its images.

##### ACTUAL RESULTS

<!-- What actually happened? -->
ansible-playbook -i tools/docker-compose/inventory tools/docker-compose/ansible/sources.yml \
    -e awx_image=quay.io/awx/awx_devel \
    -e awx_image_tag=devel \
    -e cluster_node_count=1

PLAY [Render AWX Dockerfile and sources] *************************************************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Create _sources directory] *********************************************************************************************************************************************************************************
ok: [localhost]

TASK [sources : Detect secrets] **********************************************************************************************************************************************************************************
ok: [localhost] => (item=pg_password)
ok: [localhost] => (item=secret_key)
ok: [localhost] => (item=broadcast_websocket_secret)

TASK [sources : Generate secrets if needed] **********************************************************************************************************************************************************************
skipping: [localhost] => (item={u'failed': False, u'stat': {u'charset': u'us-ascii', u'uid': 0, u'exists': True, u'attr_flags': u'', u'woth': False, u'device_type': 0, u'mtime': 1619506911.9745579, u'block_size': 4096, u'inode': 8805653, u'isgid': False, u'size': 36, u'executable': False, u'roth': False, u'isuid': False, u'readable': True, u'isreg': True, u'version': u'453791865', u'pw_name': u'root', u'gid': 0, u'ischr': False, u'wusr': True, u'writeable': True, u'isdir': False, u'blocks': 8, u'xoth': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': False, u'gr_name': u'root', u'path': u'../_sources/secrets/pg_password.yml', u'xusr': False, u'atime': 1619506913.0135374, u'mimetype': u'text/plain', u'ctime': 1619506912.2435527, u'wgrp': False, u'xgrp': False, u'dev': 64768, u'isblk': False, u'isfifo': False, u'mode': u'0600', u'checksum': u'7013be875366d4ea9ce20b39d9481f570f1ffbdb', u'islnk': False, u'attributes': []}, u'ansible_loop_var': u'item', u'item': u'pg_password', u'invocation': {u'module_args': {u'follow': False, u'get_checksum': True, u'path': u'../_sources/secrets/pg_password.yml', u'checksum_algorithm': u'sha1', u'get_md5': False, u'get_mime': True, u'get_attributes': True}}, u'changed': False}) 
skipping: [localhost] => (item={u'failed': False, u'stat': {u'charset': u'us-ascii', u'uid': 0, u'exists': True, u'attr_flags': u'', u'woth': False, u'device_type': 0, u'mtime': 1619506912.4385488, u'block_size': 4096, u'inode': 8805655, u'isgid': False, u'size': 35, u'executable': False, u'roth': False, u'isuid': False, u'readable': True, u'isreg': True, u'version': u'2108980606', u'pw_name': u'root', u'gid': 0, u'ischr': False, u'wusr': True, u'writeable': True, u'isdir': False, u'blocks': 8, u'xoth': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': False, u'gr_name': u'root', u'path': u'../_sources/secrets/secret_key.yml', u'xusr': False, u'atime': 1619506913.031537, u'mimetype': u'text/plain', u'ctime': 1619506912.578546, u'wgrp': False, u'xgrp': False, u'dev': 64768, u'isblk': False, u'isfifo': False, u'mode': u'0600', u'checksum': u'086a90d5041ca81ad58e267b56fd3298af32e880', u'islnk': False, u'attributes': []}, u'ansible_loop_var': u'item', u'item': u'secret_key', u'invocation': {u'module_args': {u'follow': False, u'get_checksum': True, u'path': u'../_sources/secrets/secret_key.yml', u'checksum_algorithm': u'sha1', u'get_md5': False, u'get_mime': True, u'get_attributes': True}}, u'changed': False}) 
skipping: [localhost] => (item={u'failed': False, u'stat': {u'charset': u'us-ascii', u'uid': 0, u'exists': True, u'attr_flags': u'', u'woth': False, u'device_type': 0, u'mtime': 1619506912.7755423, u'block_size': 4096, u'inode': 8805656, u'isgid': False, u'size': 51, u'executable': False, u'roth': False, u'isuid': False, u'readable': True, u'isreg': True, u'version': u'672981623', u'pw_name': u'root', u'gid': 0, u'ischr': False, u'wusr': True, u'writeable': True, u'isdir': False, u'blocks': 8, u'xoth': False, u'rusr': True, u'nlink': 1, u'issock': False, u'rgrp': False, u'gr_name': u'root', u'path': u'../_sources/secrets/broadcast_websocket_secret.yml', u'xusr': False, u'atime': 1619506913.045537, u'mimetype': u'text/plain', u'ctime': 1619506912.9105396, u'wgrp': False, u'xgrp': False, u'dev': 64768, u'isblk': False, u'isfifo': False, u'mode': u'0600', u'checksum': u'b4d186fbd5c3ec3799df6825ec49e3cc087981ea', u'islnk': False, u'attributes': []}, u'ansible_loop_var': u'item', u'item': u'broadcast_websocket_secret', u'invocation': {u'module_args': {u'follow': False, u'get_checksum': True, u'path': u'../_sources/secrets/broadcast_websocket_secret.yml', u'checksum_algorithm': u'sha1', u'get_md5': False, u'get_mime': True, u'get_attributes': True}}, u'changed': False}) 

TASK [sources : Include generated secrets unless they are explicitly passed in] **********************************************************************************************************************************
ok: [localhost] => (item=None)
ok: [localhost] => (item=None)
ok: [localhost] => (item=None)
ok: [localhost]

TASK [sources : Write out SECRET_KEY] ****************************************************************************************************************************************************************************
ok: [localhost]

TASK [sources : Render configuration templates] ******************************************************************************************************************************************************************
ok: [localhost] => (item=database.py)
ok: [localhost] => (item=websocket_secret.py)
ok: [localhost] => (item=haproxy.cfg)

TASK [sources : Delete old local_settings.py] ********************************************************************************************************************************************************************
ok: [localhost]

TASK [sources : Copy local_settings.py] **************************************************************************************************************************************************************************
ok: [localhost]

TASK [sources : Get OS info for sdb] *****************************************************************************************************************************************************************************
ok: [localhost]

TASK [sources : Get user UID] ************************************************************************************************************************************************************************************
ok: [localhost]

TASK [sources : Set fact with user UID] **************************************************************************************************************************************************************************
ok: [localhost]

TASK [sources : Set global version if not provided] **************************************************************************************************************************************************************
skipping: [localhost]

TASK [sources : Render Docker-Compose] ***************************************************************************************************************************************************************************
ok: [localhost]

PLAY RECAP *******************************************************************************************************************************************************************************************************
localhost                  : ok=12   changed=0    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0   

docker-compose -f tools/docker-compose/_sources/docker-compose.yml up 
Starting tools_redis_1    ... done
Starting tools_postgres_1 ... done
Starting tools_awx_1      ... done
Attaching to tools_redis_1, tools_postgres_1, tools_awx_1
tools_awx_1 | standard_init_linux.go:219: exec user process caused: no such file or directory
tools_postgres_1 | 
tools_postgres_1 | PostgreSQL Database directory appears to contain a database; Skipping initialization
tools_postgres_1 | 
tools_postgres_1 | 2021-04-27 11:20:33.435 UTC [1] LOG:  starting PostgreSQL 12.6 (Debian 12.6-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
tools_postgres_1 | 2021-04-27 11:20:33.435 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
tools_postgres_1 | 2021-04-27 11:20:33.435 UTC [1] LOG:  listening on IPv6 address "::", port 5432
tools_postgres_1 | 2021-04-27 11:20:33.436 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
tools_postgres_1 | 2021-04-27 11:20:33.446 UTC [26] LOG:  database system was shut down at 2021-04-27 11:15:44 UTC
tools_postgres_1 | 2021-04-27 11:20:33.448 UTC [1] LOG:  database system is ready to accept connections
tools_redis_1 | 1:C 27 Apr 2021 11:20:33.359 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
tools_redis_1 | 1:C 27 Apr 2021 11:20:33.359 # Redis version=6.2.2, bits=64, commit=00000000, modified=0, pid=1, just started
tools_redis_1 | 1:C 27 Apr 2021 11:20:33.359 # Configuration loaded
tools_redis_1 | 1:M 27 Apr 2021 11:20:33.360 * monotonic clock: POSIX clock_gettime
tools_redis_1 | 1:M 27 Apr 2021 11:20:33.360 * Running mode=standalone, port=0.
tools_redis_1 | 1:M 27 Apr 2021 11:20:33.360 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
tools_redis_1 | 1:M 27 Apr 2021 11:20:33.360 # Server initialized
tools_redis_1 | 1:M 27 Apr 2021 11:20:33.361 * Loading RDB produced by version 6.2.2
tools_redis_1 | 1:M 27 Apr 2021 11:20:33.361 * RDB age 289 seconds
tools_redis_1 | 1:M 27 Apr 2021 11:20:33.361 * RDB memory usage when created 0.77 Mb
tools_redis_1 | 1:M 27 Apr 2021 11:20:33.361 * DB loaded from disk: 0.000 seconds
tools_redis_1 | 1:M 27 Apr 2021 11:20:33.361 * The server is now ready to accept connections at /var/run/redis/redis.sock
tools_awx_1 exited with code 1


##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: wxfVeryGood
issue_10017: state: open
title: AWXKIT - provide documentation that does not require to install the development environment
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea: how about a man page

##### SUMMARY
right now there is no documentation for awxkit, unless you install the development environment, and run a webserver.
A good old man page would be nice.
user: lemmy04
issue_10010: state: open
title: [execution-environments] Validate AWX_ISOLATION_SHOW_PATHS before volume mounting
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
If I list directories in `AWX_ISOLATION_SHOW_PATHS` that don't exist, then it will fail _all_ jobs.

Example failure:

```
Error: statfs /opt/tmpawx/at_CableWhile7110562512422525659272746655482681552534512956703397582_test: no such file or directory
```

(you get this output as opposed to your job standard out)

This is very hard to debug because the job / project update being ran has nothing to do with the folder in question.

Maybe we could get by with a `logger.warn` and allow the jobs to continue by omitting the mount paths which are not valid.
user: AlanCoding
issue_9979: state: open
title: AWXKit - Implement handling for bad parameters
body: Passing anything other than an object when creating resources with specified dependencies results in silent unexpected behavior.

For example, if you create a job template like this:
`jt = v2.job_templates.create(inventory="This Refers To Nothing!")`
or this
`jt = v2.job_templates.create(inventory=1337)`
No error will be returned and the Job Template will be created with a freshly dynamically generated inventory.

user: one-t
issue_9969: state: open
title: Deprecate notifications in favour of standard job templates with added features
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
The notification feature has limited features and flexibility, and requires extra code maintenance for each level of flexibility or additional feature.

It was designed prior to the introduction of workflows and could now easily be replaced by a standard job template as part of a workflow, given a few pre-requisites:

* all the notification types have a corresponding Ansible module and Tower credential type (e-mail, webhook, Slack, IRC, etc...)
* workflow templates can be triggered via a (named) provisioning callback (I think that's the only thing you can do with a template but can't with a workflow)
* potential "placeholders" used in notifications should be made available as additional Ansible variables

Like slicing, notifications could be triggered from a job template via an implicit workflow but that's more an implementation detail and it would again create specific code, which a purer/leaner implementation would avoid.

user: ericzolf
issue_9968: state: open
title: 19.0.0 Docker install fails during Clean and Build UI
body: ISSUE TYPE

    Bug Report

SUMMARY

Install fails during Clean and Build UI "docker exec tools_awx_1 make clean-ui ui-devel"
ENVIRONMENT

    AWX version: 19.0.0
    AWX install method: docker on linux
    Ansible version: 2.10.7
    Operating System: Centos Linux 7
    Web Browser: N/A

STEPS TO REPRODUCE

I followed the install steps on https://github.com/ansible/awx/blob/19.0.0/tools/docker-compose/README.md
  - Set tools/docker-compose/inventory variables for pg_password & secret_key
  - make docker-compose-build
  - make docker-compose
  - Correct for nginx user errors as per bug #9552
  - docker exec tools_awx_1 make clean-ui ui-devel

EXPECTED RESULTS

Build UI and login in to AWX


ACTUAL RESULTS

# docker exec tools_awx_1 make clean-ui ui-devel
  rm -rf node_modules
  rm -rf awx/ui_next/node_modules
  rm -rf awx/ui_next/build
  rm -rf awx/ui_next/src/locales/_build
  rm -rf awx/ui_next/.ui-built
  npm --prefix awx/ui_next --loglevel warn --ignore-scripts install
  npm ERR! cb() never called!
  
  npm ERR! This is an error with npm itself. Please report this error at:
  npm ERR!     <https://npm.community>
  
  npm ERR! A complete log of this run can be found in:
  npm ERR!     /var/lib/awx/.npm/_logs/2021-04-21T12_07_15_898Z-debug.log
  make: *** [Makefile:395: awx/ui_next/node_modules] Error 1


ADDITIONAL INFORMATION
Last few lines in log file - /var/lib/awx/.npm/_logs/2021-04-21T12_07_15_898Z-debug.log
I've attempted this 3 different times, always failing at roughly the same point.
  27968 silly extract @patternfly/react-tokens@4.9.26 extracted to /awx_devel/awx/ui_next/node_modules/.staging/@patternfly/react-tokens-99450260 (19726ms)
  27969 timing npm Completed in 76260ms
  27970 error cb() never called!
  27971 error This is an error with npm itself. Please report this error at:
  27972 error <https://npm.community>

UI to https://<host_fqdn>:8043 displays:
  <% if (process.env.NODE_ENV === 'production') { %> <% } %> <% if (process.env.NODE_ENV === 'production') { %>
  <% } else { %>
  <% } %> 

user: andresch26
issue_9956: state: open
title: Advanced Search on Hosts returns 400 if wrong variable type is passed
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY


1. Advanced Search on Hosts screen returns 400 if wrong variable type is passed with exact field select - searching for inventory - it has to be an integer.

<img width="1443" alt="image" src="https://user-images.githubusercontent.com/9053044/115412406-45b2b880-a1c2-11eb-945b-49726a6247fd.png">

On the API side:

![image](https://user-images.githubusercontent.com/9053044/115422089-90383300-a1ca-11eb-85e5-6a4bd6bdbbad.png)


2. The same does not happen to the instance group lookup.

<img width="1281" alt="image" src="https://user-images.githubusercontent.com/9053044/115418954-ed7eb500-a1c7-11eb-85e6-5c610d01c8e0.png">

On the API side.

![image](https://user-images.githubusercontent.com/9053044/115422354-d097b100-a1ca-11eb-9e57-ff9ca7026f56.png)


3. Another error case:

<img width="1251" alt="image" src="https://user-images.githubusercontent.com/9053044/115418221-531e7180-a1c7-11eb-8890-6a3edb963d55.png">


user: nixocio
issue_9953: state: open
title: Support Azure AD login with tenant ID
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
In an enterprise, using a "tenant id" is the preferred way to interact with Azure

https://python-social-auth.readthedocs.io/en/latest/backends/azuread.html#tenant-support

user: dsafanyuk
issue_9941: state: open
title: Error user awx
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
i have an error when i want to connect to the UI of awx 

##### ENVIRONMENT
* AWX version: 19.0.0
* AWX install method:  docker on linux
* Ansible version:  2.9.20
* Operating System: Debian 10
* Web Browser: Google Chrome

##### STEPS TO REPRODUCE

$ make docker-compose-build 
$ make docker-compose 
$ docker exec tools_awx_1 make clean-ui ui-devel 
$ docker exec -ti tools_awx_1 awx-manage createsuperuser (Création user admin)
$ TARGET='https://awx.local:8043' npm --prefix awx/ui_next start (pour serveur externe)



##### EXPECTED RESULTS

Login in the UI of AWX

##### ACTUAL RESULTS

[HPM] Error occurred while trying to proxy request /api/login/ from 192.168.1.91:3001 to https://awx.local:8043 (ENOTFOUND) (https://nodejs.org/api/errors.html#errors_common_system_errors)


##### ADDITIONAL INFORMATION

![image](https://user-images.githubusercontent.com/82808496/115215893-41c06100-a104-11eb-9fa2-b91731d4c299.png)

user: Valvos420
issue_9926: state: open
title: awx-postgres-0 have CrashLoopBackOff STATUS.
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->

##### ENVIRONMENT
Installed by following the guide below.
https://github.com/ansible/awx/blob/devel/INSTALL.md

* AWX version: 18
* AWX install method: minikube, kubectl, docker
* Ansible version:  2.9.17
* Operating System: CentOS 7
* Web Browser: 

##### STEPS TO REPRODUCE

Hi. Yesterday I got an "Internal Server Error" from the AWX.
I checked awx-postgres-0 have CrashLoopBackOff  STATUS.



##### EXPECTED RESULTS

The awx-postgres-0 pod should also be in the Running state.

##### ACTUAL RESULTS

$ minikube kubectl get pods
NAME                               READY   STATUS             RESTARTS   AGE
pod/awx-6f7bd969db-pcczn           4/4     Running            0          2m13s
pod/awx-operator-57bcb58f5-5lzw9   1/1     Running            0          6m58s
pod/awx-postgres-0                 0/1     CrashLoopBackOff   4          2m19s

##### ADDITIONAL INFORMATION

I've got log from awx-postgres-0
initdb: error: directory "/var/lib/postgresql/data/pgdata" exists but is not empty

I think It's the same as the link below.
https://groups.google.com/g/awx-project/c/9j81DcyeWJY

Isn't this solved? Please tell me how to fix it!

user: gymzang
issue_9916: state: open
title: RFE: Allow more fine grained schedules/allow direct rrule entry
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
The scheduling of jobs/workflows is somewhat non-intuitive, if you want to run scheduled jobs outside of set times at given days or every x minute all day.

A current scenario I have right now is I want to run a job:
Monday - Friday
Starting: 10:01
Ending: 18:02
Every: 15 minutes

This alone requires the creation of _33 separate schedules_. This is potentially amplified because the Job Template copy behavior does not permit for copying of the schedule. It would be helpful to have the option to also copy schedules (and notifications) related to the Job Template.

While it is possible to generate such rules by using rrule via the API, it might be too complicated for less tech savvy users and defeats the purpose of the WebUI. The only thinkable option is to make a Survey Job, utilizing awx.awx.tower_schedule and generate the rrule.

If improvements to the Job Schedule UI, allowing for more fine-grained schedules is not on the current roadmap, could an option be an option to accept rrule as input during schedule creation until it is?

Exceptions for holidays (or otherwise) would also be a positive addition, as certain organizations might not want to run jobs that could impact business critical systems when staff is on extended leave or some jobs (like financial processing) should not be run. This could optimally be possible on to set on a global level, with the possibility of overriding for single jobs.

Additional suggestions (2021-04-27):
- **Standardize on [_ISO 8601-2:2019_](https://en.wikipedia.org/wiki/ISO_8601) format**
  - Schedule creation is made in 24 hour format (ISO 8601)
    - Week start (for weekly jobs) hard-coded to Sunday (not ISO 8601)
  - Schedule list is in (M)M/DD/YYYY & 12 hour format (not ISO 8601)
    - The same applies to Start/End Date (also has (M)M/DD/YYYY format)
- **_Repeat Frequency_ field does not take input like _Local Time Zone_, meaning you cannot use the keyboard**
  - The same applies to "End" field (if applicable)
user: rl-akjaer
issue_9882: state: open
title: AWXCLI add custom ca file
body: ##### ISSUE TYPE
 - Add the option that you can add a custom ca-file for the awx cli
##### SUMMARY
`awx --conf-verify /test/cer.pem`

https://github.com/ansible/awx/blob/bdd41c70afb145adf1c79f1bf95c3a12cd206caf/awxkit/awxkit/api/client.py#L33

`verify = /test/cer.pem`
user: hupling
issue_9868: state: open
title: Navigating to Template Details shows an empty screen for a while
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Navigating to Template Details shows an empty screen for a while.


https://user-images.githubusercontent.com/9053044/114190273-22158580-9919-11eb-8052-06cef996afad.mov




user: nixocio
issue_9865: state: open
title: [17.1.0] Job remains pending indefinitely when awx_task_hostname and awx_web_hostname are modified in inventory
body: @ryanpetrello 

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
A git source control project is created, then the related job remains pending indefinitely and no cloning is ever made.

##### ENVIRONMENT
* AWX version: 17.1.0
* AWX install method:  docker compose on linux
* Ansible version: 3.2.0
* Operating System: Ubuntu 21.04
* docker-ce: ```5:20.10.5~3-0~ubuntu-groovy```
* docker-compose: 1.29.0

##### STEPS TO REPRODUCE
0.1. Run inside Python3 virtual env
0.2. Install latest ansible, wheel, docker-compose and redis with pip3
1. Checkout 17.1.0 & create new branch
2. Modify installer/inventory with:
  - awx_official=true
  - docker_compose_dir=/some/folder
  - host_port=<some_available_port>
  - logging_driver=journald
  - pg_database=awx
  - pg_hostname=<some_private_ip_address>
  - pg_password=some_password
  - pg_port=<<some_pg_used_port>
  - pg_sslmode=require
  - pg_username=awx
  - postgres_data_dir=''
  - project_data_dir=/awx/projects
  - secret_key=some_password
  - use_docker_compose=true
2. Restart PostgreSQL 12 AWX Cluster
3. Build as root with:
```
export awx_version="17.1.0"
cd installer
ansible-playbook -i inventory install.yml
```
4. Login as admin
5. Create organization
6. Create source control credential
7. Create project with:
```
Source Control Type: git
Source Control URL: user@<ip_address>:/path/to/git/repository
Options:
  - Update Revision on Launch
  - Allow Branch Override
```

##### EXPECTED RESULTS

The git repository should be cloned into the Playbook Directory within <project_data_dir>.

##### ACTUAL RESULTS
- The related job is pending.
- The project details shows a "Project Base Path" (/var/lib/awx/projects) mismatch with <project_data_dir>
- /var/lib/awx/projects is also empty inside awx_task container
- The Playbook Directory shown in the project details is not created in <project_data_dir>

A manual git clone on the controller is successful:
```
/tmp/awx# git clone user@<ip_address>:/path/to/git/repository
Cloning into '.'...
...
remote: Enumerating objects: 95, done.
remote: Counting objects: 100% (95/95), done.
remote: Compressing objects: 100% (81/81), done.
remote: Total 95 (delta 54), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (95/95), 30.72 KiB | 6.14 MiB/s, done.
Resolving deltas: 100% (54/54), done.
```

Also, following some advices in a [similar old thread](https://github.com/ansible/awx/issues/5617) inside ```awx_task```:
```
bash-4.4# awx-manage run_dispatcher --status

bash-4.4# awx-manage shell_plus
# Shell Plus Model Imports
from awx.conf.models import Setting
from awx.main.models.activity_stream import ActivityStream
from awx.main.models.ad_hoc_commands import AdHocCommand
from awx.main.models.credential import Credential, CredentialInputSource, CredentialType
from awx.main.models.events import AdHocCommandEvent, InventoryUpdateEvent, JobEvent, ProjectUpdateEvent, SystemJobEvent
from awx.main.models.ha import Instance, InstanceGroup, InventoryInstanceGroupMembership, OrganizationInstanceGroupMembership, TowerScheduleState, UnifiedJobTemplateInstanceGroupMembership
from awx.main.models.inventory import CustomInventoryScript, Host, Inventory, InventorySource, InventoryUpdate, SmartInventoryMembership
from django.contrib.auth.models import Group, Permission, User
from awx.main.models.jobs import Job, JobHostSummary, JobLaunchConfig, JobTemplate, SystemJob, SystemJobTemplate
from awx.main.models.label import Label
from awx.main.models.notifications import Notification, NotificationTemplate
from awx.main.models.oauth import OAuth2AccessToken, OAuth2Application
from awx.main.models.organization import Organization, OrganizationGalaxyCredentialMembership, Profile, Team, UserSessionMembership
from awx.main.models.projects import Project, ProjectUpdate
from awx.main.models.rbac import Role, RoleAncestorEntry
from awx.main.models.schedules import Schedule
from awx.main.models.unified_jobs import UnifiedJob, UnifiedJobDeprecatedStdout, UnifiedJobTemplate
from awx.main.models.workflow import WorkflowApproval, WorkflowApprovalTemplate, WorkflowJob, WorkflowJobNode, WorkflowJobTemplate, WorkflowJobTemplateNode
from awx.sso.models import UserEnterpriseAuth
from django.contrib.contenttypes.models import ContentType
from django.contrib.sessions.models import Session
from django.contrib.sites.models import Site
from oauth2_provider.models import Grant, RefreshToken
from social_django.models import Association, Code, Nonce, Partial, UserSocialAuth
from taggit.models import Tag, TaggedItem
# Shell Plus Django Imports
from django.core.cache import cache
from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import transaction
from django.db.models import Avg, Case, Count, F, Max, Min, Prefetch, Q, Sum, When, Exists, OuterRef, Subquery
from django.utils import timezone
from django.urls import reverse
Python 3.6.8 (default, Mar 19 2021, 05:13:41) 
[GCC 8.4.1 20200928 (Red Hat 8.4.1-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> def check_lock():
...     import time
...     from awx.main.utils.pglock import advisory_lock
...     time.sleep(1)
...     with advisory_lock('task_manager_lock', wait=False) as acquired:
...         return acquired
... 
>>> [check_lock() for i in range(20)]
[True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True]
>>> exit
```
user: jean-christophe-manciot
issue_9859: state: open
title: [ui_next] Advanced Search Key dropdown does not function after receiving 400 response. Must be cleared
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Advanced Search Key dropdown does not function after receiving 400 response. Must be cleared

##### STEPS TO REPRODUCE
1. Create an advanced search query which does not return a valid value and generates a 400 response (i.e. "management" on Schedules page)
2. Search
3. Attempt to use 'Key' dropdown

##### EXPECTED RESULTS

Key dropdown to contain value to fix query

##### ACTUAL RESULTS

Empty 'key' dropdown

##### ADDITIONAL INFORMATION
![keymissing](https://user-images.githubusercontent.com/12446869/114093280-e8953980-9888-11eb-8dbe-ac697a2735ae.gif)


user: unlikelyzero
issue_9857: state: open
title: [ui_next] Seconds displayed for some settings which may best be represented in hours/minutes/seconds
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Seconds displayed for some settings which may best be represented in hours/minutes/seconds

##### ADDITIONAL INFORMATION
<img width="916" alt="Screen Shot 2021-04-08 at 12 12 42 PM" src="https://user-images.githubusercontent.com/12446869/114060972-e5d41d80-9863-11eb-90ff-6c7b0e7948ec.png">


user: unlikelyzero
issue_9823: state: open
title: Allow playbooks to be called in job templates directly from collections
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Currently playbooks can be called from collections via includes or imports. However, some customers may have a desire to call playbooks inside of downloaded collections directly from the job template menu.
user: msilmser
issue_9812: state: open
title: GCP Dynamic Inventory
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI

##### SUMMARY
<!-- Briefly describe the problem. -->
It would appear I am unable to tell the GCP Dynamic Inventory to use another instance IP address / NIC via source / extra variables.  This means that the dynamic inventory wants to use the external IP instead of the internal IP address, and ultimately fails connectivity tests.  

I can solve this problem in the AWS dynamic inventory by adding the following to the source variable.
{
 hosts: "ec2_tag_Name",
 destination_variable: "private_ip_address",
 pattern_include: (k8s)
}

We need something similar for GCP, because as of this moment I have not found a way to solve the problem of forcing AWX to use another IP address associated with an instance.

I have tried to add various things like adding the following to the dynamic inventory variables

plugin: google.cloud.gcp_compute
compose:
  ansible_host: networkInterfaces[0].networkIP

##### ENVIRONMENT
* AWX version: 13.0.0
* AWX install method: docker on linux
* Ansible version:  2.9.10
* Operating System: Ubuntu
* Web Browser: firefox

##### STEPS TO REPRODUCE

<!-- For new features, show how the feature would be used. For bugs, please show
exactly how to reproduce the problem. Ideally, provide all steps and data needed
to recreate the bug from a new awx install. -->
1. Enable Inventory source for GCP
2. Select a host with a known external address
3. Verify the ansible_ssh_host value

##### EXPECTED RESULTS

<!-- For bug reports, what did you expect to happen when running the steps
above? -->

##### ACTUAL RESULTS

<!-- For bug reports, what actually happened? -->

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: Gortex
issue_9798: state: open
title: Add Logging or Indicator when Facts Cache is Cleared
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Add an indicator in Tower activity stream or in logging when fact caching for a host is cleared.

The meta module does not appear to be logged at all in the job_events endpoint, so there is no way to tell when they were cleared unless you confirm facts list is empty at the same time as checking `ansible_facts_modified` for the host. Otherwise, there is no record of the event.

user: jamesmarshall24
issue_9796: state: open
title: [ui_next] Z-depth of node link can be masked in certain scenarios. Prevents link modification
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Z-depth of node link can be masked in certain scenarios. Prevents link modification

<img width="818" alt="Screen Shot 2021-03-31 at 2 56 55 PM" src="https://user-images.githubusercontent.com/12446869/113437698-170ca380-93b5-11eb-8baa-065f450604c1.png">



user: unlikelyzero
issue_9792: state: open
title: [ui_next] Highlight links to a node when hovering over a node in workflow viz
body: ##### ISSUE TYPE
 - Feature

##### SUMMARY
While testing complicated workflows, it became difficult to determine which workflow node's links were connected to other nodes. Example here:

<img width="818" alt="Screen Shot 2021-03-31 at 2 56 55 PM" src="https://user-images.githubusercontent.com/12446869/113435595-21c53980-93b1-11eb-899b-891e84b66f1e.png">

It would be great if we added the ability to highlight links when hovering over a node
user: unlikelyzero
issue_9791: state: open
title: [ui_next] Add All/Any workflow viz indication to Workflow Viz Legend/Key
body: ##### ISSUE TYPE
 - Enhancement

##### SUMMARY
Users viewing a workflow Viz may not understand what Any/All means. At the moment, it's only described within the tooltip of the edit node wizard.

We should update the legend/key to describe what 'All' means.

<img width="237" alt="Screen Shot 2021-03-31 at 6 21 27 PM" src="https://user-images.githubusercontent.com/12446869/113435104-276e4f80-93b0-11eb-9dd3-974efcfbec7e.png">

user: unlikelyzero
labels: type:feature: prioritized on a feature board
Hacktoberfest: Issues tagged for Hacktoberfest
issue_9787: state: open
title: Notification Template - Parameterized Target URL
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Trying to use AWX to call back to TeamCity to finish agentless builds.  The callback URL must include an AWX extra_var.  Would like a way to template the Target URL so it could contain the passed in build number.  For example:

http://<teamcity.url>/app/rest/builds/id:<build_id>/log

Would also be great if the basic auth credentials could be templated from extra_vars as well, since TeamCity generates temp credentials on each job run and passes them to the AWX server as extra_vars also.


user: pmanno
issue_9785: state: open
title: Cannot sync Git project
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->
I am unable to clone ("sync") GitHub repos configured in SCM projects in AWX.
When attempting to sync, I see the following error:
```
cannot clone: Operation not permitted
user namespaces are not enabled in /proc/sys/kernel/unprivileged_userns_clone
Error: cannot re-exec process
```
I've been testing with https://github.com/ansible/tower-example.

##### ENVIRONMENT
* AWX version: 18.0.0
* AWX install method: docker (compose) on linux
* Ansible version: Host: 2.10.7, AWX: Unknown
* Operating System: Debian 10
* Web Browser: Firefox 87

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->
1. Follow [instructions for docker-compose install](https://github.com/ansible/awx/blob/18.0.0/tools/docker-compose/README.md).
2. See error during install   
```
[...]
tools_redis_1 | 1:M 01 Apr 2021 08:08:03.867 * The server is now ready to accept connections at /var/run/redis/redis.sock
tools_awx_1 | cannot clone: Operation not permitted
tools_awx_1 | user namespaces are not enabled in /proc/sys/kernel/unprivileged_userns_clone
tools_awx_1 | Error: cannot re-exec process
tools_awx_1 | [ -d "/awx_devel/awx.egg-info" ] || python3 /awx_devel/setup.py egg_info_dev
[...]
```
3. Login and create a project
    - SCM type: Git
    - URL: https://github.com/ansible/tower-example
4. Save the project and click Sync
5. See error:
![image](https://user-images.githubusercontent.com/10629864/113270029-f8cd7780-92d0-11eb-895c-8f21e570f0f8.png)


##### EXPECTED RESULTS
I would expect the project to sync correctly.
<!-- What did you expect to happen when running the steps above? -->

##### ACTUAL RESULTS
See error above.
<!-- What actually happened? -->

##### ADDITIONAL INFORMATION
I don't think it's related, but AWX also reports that the Ansible version is "unknown": 
![image](https://user-images.githubusercontent.com/10629864/113270271-33371480-92d1-11eb-8014-8101208d5315.png)

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: tigattack
issue_9747: state: open
title: Job output not refreshing automatically in AWX 18.0.0
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Job output not refreshing automatically in AWX 18.0.0. I need to manually hit F5 or refresh from the browser so I could see what is happening during the job execution.

##### ENVIRONMENT
* AWX version: 18.0.0
* AWX install method: minikube
* Ansible version:  2.9.13
* Operating System: Ubuntu 20.04 LTS
* Web Browser: ALL



user: dimovstanimir
issue_9709: state: open
title: Enable use of a cookiejar by awxkit
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
2FA is required for accessing the network where our AWX is located. If the MFA portal is navigated through the browser, then we have a session token in the browser cookiejar and can access the AWX UI or API browser, log in, and use it. In order to use the AWXKIT CLI, we would need to access that cookiejar. 

So I request that the awx cli add support for the following parameters:

    --cookie "TOKEN=Onsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfY"

    --cookie-jar /path/to/cookies.txt

The cookie-jar should be a "standard" Netscape cookiejar or whatever format is most compatible.


user: philipsd6
issue_9678: state: open
title: 18.0.0: changing the logo in settings changes it only on the login page but not in the page headers
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
I've put my own logo in the settings, but that only changes the logo on the login page, not in the page headers

##### ENVIRONMENT
* AWX version: 18.0.0
* AWX install method: docker on linux
* Ansible version:  2.9.19

##### STEPS TO REPRODUCE

- Create a png file (with transparency)
- upload it to AWX in the UI settings
- save settings



##### EXPECTED RESULTS

I'd expect the new logo to show in the page header and on the login page

##### ACTUAL RESULTS

the new logo only shows on the login page


user: lemmy04
issue_9661: state: open
title: Add the boto profile concept to AWX
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
I wanted to setup AWX with my project. In my aws_ec2 inventory plugin, I specified a boto_profile var since I have multiple ones configured locally.

Problem is, AWX does not provide a way to specify what boto profile to feed. Instead, it [feeds only the env var](https://docs.ansible.com/ansible-tower/latest/html/userguide/credentials.html#amazon-web-services):

```
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SECURITY_TOKEN
```

Consequently, the plugin crashes since it does not use the provided env var but wants to read the boto profile.

AWX should have a way to figure out how to provide the boto profile (adding a AWS_PROFILE env var) ?

The workaround for now is to not provide the `boto_profile` parameter of the aws_ec2 inventory. It implies, on your own machine, that AWS must use the default boto profile, which is not desirable.

##### ENVIRONMENT
* AWX version: 17.0.1
* AWX install method: docker on linux
* Ansible version:  2.9.17
* Operating System: Debian 9
* Web Browser: Chrome

##### STEPS TO REPRODUCE

Add a `boto_profile` parameter in the aws_ec2 plugin inventory and do not use the default one. AWX won't be able to find that profile

##### EXPECTED RESULTS

You playbooks can run

##### ACTUAL RESULTS

The inventory can't be parsed

```
    2.372 ERROR    [WARNING]:  * Failed to parse
    2.372 ERROR    /tmp/awx_347_pau03o08/project/inventory/aws_ec2.yml with auto plugin:
    2.372 ERROR    Insufficient credentials found: The config profile (ansible-inventory) could
    2.372 ERROR    not be found
```

##### ADDITIONAL INFORMATION

I [opened an issue](https://github.com/ansible-collections/amazon.aws/issues/127) on ansible as well, they told me it would be better to have this in AWX tracking.

user: DeLoWaN
issue_9658: state: open
title: Trigger influxdb measurement upon notification event
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
The new Tower notification should be able to add a data point to an Influxdb measurement upon a Tower event. It must be able to post multiple tags and multiple values to the time series database.

This will prove to be a powerful enhancement which can significantly complement the Grafana notification.
 
user: mrmibrown
issue_9651: state: open
title: [RFE] Add import time for inventory object imported from an inventory source to the UI. This inventory import time would be listed by the hostname in the hosts list under an inventory source view.
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
it would be really nice to see the time next to a host record on the import to see "when" the last time a host record was updated (especially useful for when an overwrite of vars happens) so that one can tell when a host has been updated last and whether some timed event like a specific workflow happened before or after a host update happened and the vars were updated.


user: ammygill
issue_9623: state: open
title: [ui_next] Incorrect form validation on JT Create form after Project Lookup
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Incorrect form validation on JT Create form after Project Lookup

##### STEPS TO REPRODUCE
1. Create a New JT
2. Enter Name and Select Inventory
3. Select a project
Note: form validation under Project field. Disappears after selecting Playbook

##### EXPECTED RESULTS
1. No error text for selecting a Project after project selected

##### ACTUAL RESULTS
1. Error text for selecting a Project after project selected but before Playbook

##### ADDITIONAL INFORMATION
<img width="873" alt="Screen Shot 2021-03-19 at 7 54 54 AM" src="https://user-images.githubusercontent.com/12446869/111776885-e98a0b00-8888-11eb-8ebc-cc22bbd9d9a1.png">

user: unlikelyzero
issue_9607: state: open
title: [RFE] Support Promoting of Hosts /Groups when deleting an Inventory Source
body: See https://github.com/ansible/awx/issues/6648#issuecomment-611139427
##### ISSUE TYPE
 - enhancement

##### SUMMARY
This could look like https://tower-mockups.testing.ansible.com/patternfly/inventories/inventories-groups-delete/

user: AlexSCorey
issue_9594: state: open
title: Task was marked as running in Tower but was not present in the job queue, so it has been marked as failed
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Sometimes, I have some schedule jobs that failed on awx status job with no logs but the playbook ran on the server.
Here it's an update of the system like apt update && apt upgrade.

Sometimes the same schedules jobs succeeded with logs and all is ok

I get the following explanation
```
Task was marked as running in Tower but was not present in the job queue, so it has been marked as failed.
```

```
Identity added: /tmp/awx_537_84tgb_ux/artifacts/537/ssh_key_data (***)
Using /etc/ansible/ansible.cfg as config file
Vault password: 

PLAY [Update and Upgrade all packages on Linux machines] ***********************

TASK [Gathering Facts] *********************************************************
```

![image](https://user-images.githubusercontent.com/57101863/111367898-83896200-8695-11eb-9e62-caa9c1fb79fc.png)

##### ENVIRONMENT
* AWX version: 15.0.1
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  2.9.14
* Operating System: 
```bash
cat /etc/os-release 
NAME="CentOS Linux"
VERSION="8 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Linux 8 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-8"
CENTOS_MANTISBT_PROJECT_VERSION="8"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="8"
```
* Web Browser: Chrome Version 89.0.4389.82 

##### STEPS TO REPRODUCE

Dont really know

##### EXPECTED RESULTS

All logs and success jobs

##### ACTUAL RESULTS

failed jobs random with no logs

I don't use latest version of awx because there are too much bugs that makes awx painfull to use so I don't know if latest version resolve this issue.
If you want more information or tests, feel free to ask. Thanks you
user: bdoublet91
issue_9567: state: open
title: Session Timeout- Multiple Errors while Workflow Template is running active job
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When session timeout modal appears while a Workflow Template is running a job- first time it appears, if user clicks continue, it continues. The second time it appears and user clicks continue, it looks like the job continues... and then all of a sudden, the user is logged out without a warning, and the screen that results is missing the box to enter user name and password. After a minute or two these input fields appear again.
If user logs in again, the web page refuses to load any content for several minutes, and then a 502 error is thrown.

##### ENVIRONMENT
* AWX version: Devel 3/11/21

##### STEPS TO REPRODUCE

In Settings, change Session Timeout to 60 seconds.
In Templates, create a Workflow Template. Once created, open the template and click on the Visualizer tab. Add multiple Workflow Jobs in order to have the job run longer than the 60 second timeout (you want it running when the timeout modal appears).
Launch the template.
Wait until the timeout modal appears and click Continue. Job will keep going.
Second time modal appears- click Continue. After a moment, you will see that you are logged out without any warning, and the resulting screen does not have the username/password input box.
Wait a few moments and those input boxes will appear. Enter your credentials to log in.
Once logged in, you'll notice that none of the different tabs will load. If you wait 5 or so minutes, maybe closer to 10, a 502 Bad Gateway error will be thrown.

##### EXPECTED RESULTS

User would be able to click Continue on the timeout modal and continue their work with no problems.

##### ACTUAL RESULTS

User was logged out when they didn't want to be, their running job was interrupted, and they had problems logging back in, ultimately seeing an error.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->
<img width="767" alt="Screen Shot 2021-03-11 at 2 32 35 PM" src="https://user-images.githubusercontent.com/63685497/110852673-a9bb9600-8280-11eb-926f-c0d39ad65d8f.png">


user: akus062381
issue_9548: state: open
title: Deleting multiple schedules inside of a job template results in error
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When you have multiple schedules added in the schedules tab of a particular job template (I added 3 for testing purposes), and you click the check boxes next to every single one, and click delete, about 50% of the time you get an error (see GIF) and the first schedule in the sequence will not delete. After you "x" the error out, you can check the box next to that one schedule and click delete and it will delete.

##### ENVIRONMENT
* AWX version: Devel 3-10-21

##### STEPS TO REPRODUCE

Click on Templates.
Click on an individual template, then click the Schedules tab.
One by one, add 3 schedules. Just a name will suffice for these purposes.
On the view of those 3 listed schedules, click the check box next to all 3 schedules. Click Delete.
About 50-60% of the time, you will get an error message pop up, and the first schedule in the list will not delete.
Note: I had to create 3 new schedules a couple of times to get the error to reproduce.

##### EXPECTED RESULTS

Checking the check boxes next to multiple schedules, and then clicking delete, would result in all of those selected schedules being deleted.

##### ACTUAL RESULTS

a 500 error was returned, and the first schedule in the list refuses to delete. Once the error is cleared, the one schedule can be successfully deleted.

##### ADDITIONAL INFORMATION

![delete error](https://user-images.githubusercontent.com/63685497/110687021-0c902d00-81ae-11eb-8b9c-7330cbda0413.gif)


user: akus062381
issue_9531: state: open
title: [RFE] Allow Notification Templates to reference credentials stored in external credential managers
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Allow Notification Templates to reference credentials stored in external credential managers. This would be useful if a team wanted to reference a slack API credential stored in Cyberark
user: unlikelyzero
issue_9516: state: open
title: Job template details reordering data after updating a Job template
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
This is a follow up issue from https://github.com/ansible/awx/pull/9489#issuecomment-791591959

##### ENVIRONMENT
Devel

##### STEPS TO REPRODUCE

1. Create a Job template assigning an execution environment
2. Edit this JT and remove the EE

##### EXPECTED RESULTS

The details view should not reorder the details of this JT
##### ACTUAL RESULTS


![jt3](https://user-images.githubusercontent.com/12464858/110333715-b29e3480-8000-11eb-8cb6-3193d7b31fbb.gif)


user: tiagodread
issue_9455: state: open
title: Multiple Admin Permissions Appear for Team Roles on Resource Access List
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When viewing users on Access tab for resources, the admin role can appear more than once.

##### ENVIRONMENT
* AWX version: Devel 3/2/2021

##### STEPS TO REPRODUCE

Create a user in the user tab.
Create a team in the team tab. Add this team to the same organization that the user is in that you just created. Add the user you just made to that team and give it admin access.
Create another team in the team tab. Add this team to the same organization that the user is in that you just created, and add the user you just made to this team also. Give it admin access.
Navigate to the inventory tab. Select an inventory and view its access tab.
Click add. Add the user you just created and give it admin access.
Click add again and select teams this time. Add the first team and give it admin access.
Click add a third time and select teams again. Add the second team and give it admin access. 
Back on the access tab of that particular inventory, view the user's name and take note of its team roles. You should see Admin listed twice.
It appears that, when adding a team to the access tab of an inventory, the UI allows you to add a team that has already been added, and lists its roles twice.
Basically, if a user is specifically added to more than one team, and those teams are added to an inventory, the user's roles on those teams will appear per each team. Example: If a user is associated with 3 teams with an admin role on each team, and that user and all three teams are added to an inventory, the team roles will show three admin roles next to that user's name in the access tab. This is also true for other roles- Read, Member, etc.
This bug also occurs on the Templates, within the Access tab of a specific job template.
Also on the Projects tab, inside the Access tab of a specific project.
I tried to verify if it happens in the Credentials tab, and ended up finding another bug, which I will file separately.

Any questions, please let me know!

##### EXPECTED RESULTS

I would expect to see only 1 admin team role, or a clear delineation that the user has roles in multiple teams. 

##### ACTUAL RESULTS

Duplicate admin role labels appear with no context of where/why (ie- is the user a member of more than one team?)

##### ADDITIONAL INFORMATION

![Screen Shot 2021-03-02 at 10 48 35 AM](https://user-images.githubusercontent.com/63685497/109674341-d961f400-7b44-11eb-963c-5d8071625403.png)

[jsonformatter.txt](https://github.com/ansible/awx/files/6069860/jsonformatter.txt)


user: akus062381
issue_9451: state: open
title: Instead of hiding "Add job template", disable and give tooltip as to why.
body: We are currently hiding the "Add job template option" in the template add dropdown element when the use has not created/has access to all the resources needed to save a JT.

![Screen Shot 2021-03-02 at 9 57 05 AM](https://user-images.githubusercontent.com/1342624/109671540-2c867780-7b42-11eb-9e90-bb68267cc541.png)

We would like to revise this to still show "Add job template", but disable it and give a tooltip as to why it is disabled.  Will need to workshop the best language for that tooltip, maybe something like "You need to have access to at least one Inventory and Project to create a Job Template."
user: jlmitch5
issue_9449: state: open
title: RFE: Add retries to combat connection issues with credential plugins
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
When there are intermittent connection issues, failing to reach out to a credential vault will fail the entire playbook. Adding any amount of retries to the plugin will help complete these jobs successfully in the event of a connection failure.

https://github.com/ansible/awx/tree/devel/awx/main/credential_plugins
user: msilmser
issue_9440: state: open
title: Project does not use the latest commit on auto refresh
body: ##### ISSUE TYPE
 - Bug Report
##### COMPONENT NAME
 - UI
##### SUMMARY
When the inventory project does not use on the latest commit when the resync is raised by a job. The resync on the last commit is possible only when you request it manually.

##### ENVIRONMENT
* AWX version: 17.0.1
* AWX install method: docker on linux
* Ansible version: 2.9.17
* Operating System: centos 8
* Web Browser: 85.0.1 (64-bit)

##### STEPS TO REPRODUCE
1 / Create a source :
     Source Control Credential Type * : git
     Clean : check
     Delete : check 
     Update Revision on Launch : check

2 / Create an inventory :
     Source: sourced from a project
     Project : project previously created
     Overwrite : check 
     Overwrite variables : check
     Update on launch : check

3 / Create job template using the previous created inventory.

4 / Run the job.

5 / Add a commit to git use as project source.

6 / Run the job.
     Check the "scm_version" in the 'Source Control Update' log.

##### EXPECTED RESULTS
When the inventory project uses the latest commit when the resync is raised by a job

##### ACTUAL RESULTS
When the inventory project does NOT use the latest commit when the resync is raised by a job.

user: papapillon
issue_9428: state: open
title: Cannot build images due to multiple issues
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Building manually the images instead of pulling them from docker hub fails.

##### ENVIRONMENT
* AWX version: 17.0.1
* AWX install method:  docker compose on Linux
* Ansible version: 3.0.0
* Operating System: Ubuntu 21.04
* docker-ce: ```5:20.10.4~3-0~ubuntu-groovy```
* docker-compose: 1.28.5

##### STEPS TO REPRODUCE
0.1. Run inside Python3 virtual env
0.2. Install latest ansible, wheel, docker-compose and redis with pip3
1. Checkout 17.0.1 & create new build branch
2. Modify installer/inventory with:
  - awx_official=false
  - docker_compose_dir=/some/folder
  - host_port=<some_available_port>
  - docker_logger=journald
  - ```# dockerhub_base=''"```
  - ```# dockerhub_version=''"```
  - host_port=8001 (unused host port)
  - pg_database=awx
  - pg_hostname=<some_private_ip_address>
  - pg_password=some_password
  - pg_port=<some_pg_used_port>
  - pg_sslmode=require
  - pg_username=awx
  - postgres_data_dir=''
  - project_data_dir=/some/other/folder
  - secret_key=some_password
2. Restart PostgreSQL 12 AWX Cluster
3. Build as root with:
```
export awx_version="17.0.1"
cd installer
ansible-playbook -i inventory build.yml
```

##### EXPECTED RESULTS

All AWX docker containers should be built.

##### ACTUAL RESULTS
```
fatal: [localhost]: FAILED! => {"changed": true, "cmd": ["docker", "build", "-t", "awx:17.0.1", ".."], "delta": "0:00:21.209698", "end": "2021-03-01 11:25:48.619104", "msg": "non-zero return code", "rc": 1, "start": "2021-03-01 11:25:27.409406", "stderr": "Address already in use", "stderr_lines": ["Address already in use"], "stdout": "Sending build context to Docker daemon  280.7MB\r\r\nStep 1/51 : ARG COLLECTION_BASE=\"/var/lib/awx/vendor/awx_ansible_collections\"\nStep 2/51 : FROM centos:8 as builder\n8: Pulling from library/centos\n7a0437f04f83: Pulling fs layer\n7a0437f04f83: Verifying Checksum\n7a0437f04f83: Download complete\n7a0437f04f83: Pull complete\nDigest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1\nStatus: Downloaded newer image for centos:8\n ---> 300e315adb2f\nStep 3/51 : ENV LANG en_US.UTF-8\n ---> Running in a525b3e3364a\nRemoving intermediate container a525b3e3364a\n ---> 7b5541c0c02b\nStep 4/51 : ENV LANGUAGE en_US:en\n ---> Running in 2c42912825d1\nRemoving intermediate container 2c42912825d1\n ---> 962dc01fe292\nStep 5/51 : ENV LC_ALL en_US.UTF-8\n ---> Running in 1e6ce52c1fe2\nRemoving intermediate container 1e6ce52c1fe2\n ---> 37911ef9fcd6\nStep 6/51 : USER root\n ---> Running in a1ab2507227d\nRemoving intermediate container a1ab2507227d\n ---> 6dd8c18731f2\nStep 7/51 : RUN dnf -y module enable 'postgresql:12'\n ---> Running in 4e85512def2e\n\u001b[91m/bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)\n\u001b[0mCentOS Linux 8 - AppStream                      9.3 MB/s | 6.3 MB     00:00    \nCentOS Linux 8 - BaseOS                         6.4 MB/s | 2.3 MB     00:00    \nCentOS Linux 8 - Extras                          64 kB/s | 9.0 kB     00:00    \nDependencies resolved.\n================================================================================\n Package           Architecture     Version             Repository         Size\n================================================================================\nEnabling module streams:\n postgresql                         12                                         \n\nTransaction Summary\n================================================================================\n\nComplete!\n\u001b[91mFailed to set locale, defaulting to C.UTF-8\n\u001b[0mRemoving intermediate container 4e85512def2e\n ---> 2f6b83f8afa5\nStep 8/51 : RUN dnf -y update &&     dnf -y install epel-release 'dnf-command(config-manager)' &&     dnf module -y enable 'postgresql:12' &&     dnf config-manager --set-enabled powertools &&     dnf -y install ansible     gcc     gcc-c++     git-core     glibc-langpack-en     libcurl-devel     libffi-devel     libtool-ltdl-devel     make     nodejs     nss     openldap-devel     patch     @postgresql:12     postgresql-devel     python3-devel     python3-pip     python3-psycopg2     python3-setuptools     swig     unzip     xmlsec1-devel     xmlsec1-openssl-devel\n ---> Running in 71b89b280cf6", "stdout_lines": ["Sending build context to Docker daemon  280.7MB", "", "Step 1/51 : ARG COLLECTION_BASE=\"/var/lib/awx/vendor/awx_ansible_collections\"", "Step 2/51 : FROM centos:8 as builder", "8: Pulling from library/centos", "7a0437f04f83: Pulling fs layer", "7a0437f04f83: Verifying Checksum", "7a0437f04f83: Download complete", "7a0437f04f83: Pull complete", "Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1", "Status: Downloaded newer image for centos:8", " ---> 300e315adb2f", "Step 3/51 : ENV LANG en_US.UTF-8", " ---> Running in a525b3e3364a", "Removing intermediate container a525b3e3364a", " ---> 7b5541c0c02b", "Step 4/51 : ENV LANGUAGE en_US:en", " ---> Running in 2c42912825d1", "Removing intermediate container 2c42912825d1", " ---> 962dc01fe292", "Step 5/51 : ENV LC_ALL en_US.UTF-8", " ---> Running in 1e6ce52c1fe2", "Removing intermediate container 1e6ce52c1fe2", " ---> 37911ef9fcd6", "Step 6/51 : USER root", " ---> Running in a1ab2507227d", "Removing intermediate container a1ab2507227d", " ---> 6dd8c18731f2", "Step 7/51 : RUN dnf -y module enable 'postgresql:12'", " ---> Running in 4e85512def2e", "\u001b[91m/bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)", "\u001b[0mCentOS Linux 8 - AppStream                      9.3 MB/s | 6.3 MB     00:00    ", "CentOS Linux 8 - BaseOS                         6.4 MB/s | 2.3 MB     00:00    ", "CentOS Linux 8 - Extras                          64 kB/s | 9.0 kB     00:00    ", "Dependencies resolved.", "================================================================================", " Package           Architecture     Version             Repository         Size", "================================================================================", "Enabling module streams:", " postgresql                         12                                         ", "", "Transaction Summary", "================================================================================", "", "Complete!", "\u001b[91mFailed to set locale, defaulting to C.UTF-8", "\u001b[0mRemoving intermediate container 4e85512def2e", " ---> 2f6b83f8afa5", "Step 8/51 : RUN dnf -y update &&     dnf -y install epel-release 'dnf-command(config-manager)' &&     dnf module -y enable 'postgresql:12' &&     dnf config-manager --set-enabled powertools &&     dnf -y install ansible     gcc     gcc-c++     git-core     glibc-langpack-en     libcurl-devel     libffi-devel     libtool-ltdl-devel     make     nodejs     nss     openldap-devel     patch     @postgresql:12     postgresql-devel     python3-devel     python3-pip     python3-psycopg2     python3-setuptools     swig     unzip     xmlsec1-devel     xmlsec1-openssl-devel", " ---> Running in 71b89b280cf6"]}
```

```
# docker ps --all
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS    PORTS     NAMES
71b89b280cf6   2f6b83f8afa5   "/bin/sh -c 'dnf -y …"   4 minutes ago   Created             wonderful_sanderson
```
user: jean-christophe-manciot
issue_9414: state: open
title: RFE: Remove blocker on job launch when "Update Revision on Launch" is configured on the project
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
A previously failed project update would require a manual sync in order to remove the blocker to launch the job. This RFE is to allow a job to launch if the project is in a failed state when "Update Revision on Launch" is configured on the project. The current behavior will break workflows in environments with unstable connections to source control and would require manual intervention each time a project sync failed. 
user: benjdudas
issue_9407: state: open
title: add feature to save rsyslogd queue content when external logging is misconfigured
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
rsyslog does not save the queue content when external logging is misconfigured.
In case of a 404 error on the external logging service, a buffer will not be kept and any log events will be lost.
For example, one time 404 error from an external logging server, we lost log events until the external logging service is fixed.

Additionally, rsyslogd does not save the queue content on service shutdown. 
can we add such feature to store the queue on rsyslogd shutdown or restart.


user: rchincholkar
issue_9390: state: open
title: RFE: Resource limit for job or fork.
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Add configurable resource limits for jobs or forks. If the job reaches the limit during executions, kill the fork or job itself to protect other jobs running on the same Ansible Tower instance. If the limits were to be set on the jobs or forks, this will also help the scheduler in addition to the capacity to determine on which instance to run the job on. 
user: IshwarKanse
issue_9367: state: open
title: Toggle schedule for JT not working properly after deleting survey prompted before
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY

The user can not toggle the schedule for a particular JT when the JT had a survey prompted before after deleting the survey 


##### STEPS TO REPRODUCE

1. Create a JT
3. Create a survey without default answer
4. Create a schedule adding the answer as prompt
5. Delete the survey
6. Try to toggle the schedule On/Off


##### EXPECTED RESULTS

After deleting the survey the schedule that asked for that information might update removing the `EXTRA_DATA` and successfully toggling the schedule On/Off (because isn't depending on surveys anymore)

##### ACTUAL RESULTS

![image](https://user-images.githubusercontent.com/12464858/108541835-b1130380-72c1-11eb-96d8-b04f7e000350.png)

![image](https://user-images.githubusercontent.com/12464858/108541918-d142c280-72c1-11eb-8e92-24142021faaf.png)


user: tiagodread
issue_9366: state: open
title: Toggle schedule for JT not working properly with surveys 
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
The user can not toggle the Schedule On/Off on a schedule for a particular JT when the JT has survey with default answer
<!-- Briefly describe the problem. -->


##### STEPS TO REPRODUCE

1. Create a JT
2. Create a schedule
3. Create a survey without default answer
4. Edit this survey adding a default answer 
5. Try to toggle the schedule On/Off


##### EXPECTED RESULTS

After adding a default answer, is expected that the user can enable/disable the toogle

##### ACTUAL RESULTS

The API returns the message `'basic' value missing` (basic in this case is the name of the survey)

##### ADDITIONAL INFORMATION

Trying to toggle the schedule:

![image](https://user-images.githubusercontent.com/12464858/108537257-2da2e380-72bc-11eb-966f-b2fc90f3cfa2.png)

The survey in question:

![image](https://user-images.githubusercontent.com/12464858/108537302-3b586900-72bc-11eb-953e-57b61c679d33.png)



user: tiagodread
issue_9354: state: open
title: Problem when migrating from 15.0.1 to 17.01
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
AWX 

##### ENVIRONMENT
* AWX version: 15.0.1
* AWX install method: docker on linux
* Ansible version:  X.Y.Z
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

Migrate from 15.0.1 to 17.0.1 (without applying version 16.0.0)

##### EXPECTED RESULTS

Got AWX up and running and so got the login page

##### ACTUAL RESULTS

When migration is completed or seems to be, the login page stays on "AWX is installing ..."

##### ADDITIONAL INFORMATION

We solved the problem by reverting to version 15.0.1 then migrating to 16.0.0 and finally to 17.0.1.
It seems that the NGINX configuration file (nginx.conf) generated by the installer is modified by the installer of version 16.0.0 but not by the installer of version 17.0.1.




user: tassin76
issue_9351: state: open
title: RFE: Ability to bulk delete unused templates/inventories
body: ##### ISSUE TYPE
 - Manually or by a schedule be able to delete a large amount of unused/unwanted inventories

##### SUMMARY
After a specified amount of time have inventories that haven't been used in X days to be deleted automatically, the same for templates. Also the ability to do this manually if needed. 
user: agilleyrh
issue_9331: state: open
title: [ui_next] Update chip group labels to match best practices pattern
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
The information within the chip groups has been extremely difficult to locate in our tests. With @AlexSCorey 's [PR](https://github.com/ansible/awx/blob/06c35e7cd27e32bdbb35c9fe7434b8946aa225de/awx/ui_next/src/components/ResourceAccessList/ResourceAccessListItem.jsx#L59-L60), we've established a pattern I think will be worth repeating throughout the rest of the chipgroup components.

user: unlikelyzero
issue_9315: state: open
title: RFE: Extend Gitlab,Github webhook integration to trigger project updates. 
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Currently our webhook integration works with Gitlab, Github to trigger job template runs. 

https://docs.ansible.com/ansible-tower/latest/html/userguide/webhooks.html

We need to extend this to trigger project sync job. Thus a project will be updated with the webhook. A job template using this project doesn't have to use update revision on launch for the project. 
user: IshwarKanse
issue_9305: state: open
title: Workflow for modifying many User Roles on a Resource could be improved
body: ##### ISSUE TYPE
 - Bughancement?

##### SUMMARY
The current workflow for adding or modifying user roles on a resource seems biased towards adding/modifying a single role at a time for _many_ users. The number of available roles is increasing with Execution Environments and so it might be a good time to reassess the experience for adding or modifying _many_ user roles.

When modifying a user's existing access to a resource:
1. It's difficult to know what permissions they already have. Not displayed in the wizard.
2. The UX of Modifying a permission is not ideal because all modifications through the 'Add' button. Many can be added in the wizard, but I need two windows open to keep track of what existing roles already apply.

The two points combine to a bad user experience when an administrator is trying to modify more than one or two user roles at a time to a single user.

Note: applies to Teams as well.

##### STEPS TO REPRODUCE
1. On Org Access screen, view a user A's Org Access roles. i.e. Ad-hoc and Update
2. To *Modify* the User's roles, click the *Add* button.
3. Select User A in Wizard
4. List of all available permissions in Wizard

##### EXPECTED RESULTS
It might make sense to change step 4 above to populate and display already applicable roles. In that case, step 2 becomes add/modify instead of 'Add'

user: unlikelyzero
issue_9294: state: open
title: Warn user about changes to a job template that could cause schedules to fail.
body: There are cases where a user can make changes to a job template that will cause schedules for that job templates, or for associated workflows to fail.  We should attempt to inform the user before they save these changes about schedules and workflows that rely on them.
See https://github.com/ansible/awx/pull/9210#issuecomment-776682415 for more reference
##### ISSUE TYPE
 - Feature Idea

##### SUMMARY


user: AlexSCorey
issue_9292: state: open
title: Support for read-only database replicas
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
It's a common practice to have read-only replicas for databases. This brings benefits in splitting the write operations from read operations, as well giving option for a clever routing of various database operations, e.g. long running analytical queries would be done against read-only replica.

![image](https://user-images.githubusercontent.com/243891/107612201-0312b400-6c46-11eb-928e-12d1e7736496.png)


Read-only replicas are generally available as an option in most cloud providers, for example on AWS https://aws.amazon.com/rds/features/read-replicas/

On Django framework level this is possible by using database routers https://docs.djangoproject.com/en/3.1/topics/db/multi-db/#database-routers and most naive implementation could look like:

```python
class CustomRouter:
    def db_for_read(self, model, **hints):
        return 'replica'
        
    def db_for_write(self, model, **hints):
        return 'master'
```
with following in app configuration

```python
DATABASES = {
    'default': {},
    'primary': {
        'NAME': 'master',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'user',
        'PASSWORD': 'password',
    },
    'replica1': {
        'NAME': 'replica',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'user',
        'PASSWORD': 'password',
    },
}
DATABASE_ROUTERS = ['path.to.CustomRouter']
```

Overall, using read-only replicas could bring benefits for UI/API-related queries (browsing inventory, job templates, old job logs) and analytics. It could help improve performance in certain use cases, in addition to the work in: https://github.com/ansible/awx/issues/9039


user: egmar
issue_9286: state: open
title: AWX seems to lose job events
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - API

##### SUMMARY
AWX seems to lose job events.

##### ENVIRONMENT
* AWX version: 14.1.0
* AWX install method: docker on linux
* Ansible version:  2.9.11
* Operating System: Red Hat Enterprise Linux Server release 7.3 (Maipo)
* Web Browser: Not relevant

##### STEPS TO REPRODUCE

Very hard to reproduce indeed. We encoutered the problem twice in a month, but with no clear context.
No particular load (AWX Capacity around 100) and no special I/O.

##### EXPECTED RESULTS

We were expecting the events (all of them) to arrive at some point and the flag **event_processing_finished** to switch to true.

##### ACTUAL RESULTS

Job is finished, meaning there is an end date, but the flag **event_processing_finished** remains false.
We actually have a component in front of AWX that returns the status RUNNING when a job is still waiting for some events to come.
And in that situation, it's like the job is running forever.

##### ADDITIONAL INFORMATION

The first time, we had to trick PostGreSQL into believing all the events were there and it did the job.
i.e : 
```
update main_jobevent set counter=846,job_id=101416,end_line=452,start_line=435 where id=39544447;
```

We hoped that we would never have to face it again, and but it happened yesterday.

We tried to see if some AWX callback receiver processes were in a zombie state but everything looked fine.
```
LABEL                           USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
-                               root         96  0.2  0.9 619012 148900 ?       Sl   Feb07   7:23 /var/lib/awx/venv/awx/bin/python3 /usr/bin/awx-manage run_callback_receiver
-                               root        107 18.9  1.1 462764 179928 ?       Sl   Feb07 698:16 /var/lib/awx/venv/awx/bin/python3 /usr/bin/awx-manage run_callback_receiver
-                               root        108 18.1  1.0 457432 174552 ?       Sl   Feb07 668:40 /var/lib/awx/venv/awx/bin/python3 /usr/bin/awx-manage run_callback_receiver
-                               root        109 18.8  1.0 459700 176784 ?       Sl   Feb07 693:11 /var/lib/awx/venv/awx/bin/python3 /usr/bin/awx-manage run_callback_receiver
-                               root        110 18.9  1.0 457208 174268 ?       Sl   Feb07 699:17 /var/lib/awx/venv/awx/bin/python3 /usr/bin/awx-manage run_callback_receiver
```

We wonder whether it could be linked to the new Redis-based architecture : as far as we remember, we didn't have that kind of problem with RabbitMQ.
But, as the load is significantly higher now, it'd be inaccurate to point out Redis.

Anyhow, we're worried that it may happen more and more often, so if you could please help us to activate some debug or diagnose the problem, it would be nice.

Thanks.
user: mbutton77
issue_9276: state: open
title: [RFE] Load balance jobs for multiple instance groups
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Ansible Tower calculates job distribution based on isolated nodes' capacity and dispatches jobs among isolated nodes, but does not dispatch jobs equally among 'instance groups". This RFE is to have load balancing which could be configured equally among instances groups.

For example 25% for 4 instances groups (instance group A, B, C, D)
Or manually configurable. 
50% on Instance group A
25% on Instance group B, C, D
user: mdinwoodie
issue_9256: state: open
title: applying group_vars by group_by
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
not sure if its a bug or conceptual change when migration a working Ansible CLI project into AWX.

I have a project pulled from a git source.
Usually for applying group vars I put the host into a group depending on certain host charcteristics or host_vars.
I.e. the host name has a certain pattern or os type or a certain var set in its individual host_vars file.
The inventory looks like that:


site.yml
\environment\
                    hosts
                    \host_vars
                    \group_vars
                                     \all
                                          allhosts.yml
                                     \location1
                                         location1.yml
                                     \location2
                                         location2.yml
                                     \security_zone1
                                           sz1.yml
                                     \security_zone2 
                                           sz2.yml

the hosts are not grouped in the host file!
The grouping happens  at runtime as one of the first playbook tasks using the group_by module.
The key is either the result of a hostname filter or combination of host_vars or facts.
That works fine for Ansible CLI as we use it quite a long time.

How do I have to deal with that in AWX?
When I import the project to AWX and also create the inventory from that source ..... I can't see the groups because there's no static host association yet.
So far so good, but even when I create a template and execute it against that inventory it does not work.
The playbook logs that the host is being grouped as I want it, 

changed: [localhost] => {
    "add_group": "LC_staging",
    "changed": true,
    "parent_groups": [
        "all"
    ]
}


but the vars from the group_vars mentioned above aren't applied and I get
 "msg": "AnsibleUndefinedVariable: 'docker_version' is undefined",
even that variable is definitely defined in the group_vars of the group where the host had been grouped by the task before.

##### ENVIRONMENT
* AWX version: 17.0.1
* AWX install method: docker on linux
* Ansible version: 2.9.17
* Operating System: CentOS7
* Web Browser:

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->

##### EXPECTED RESULTS
I expect that I ca use my inventory with dynamic group association and group_vars application at playbook runtime

##### ACTUAL RESULTS

hosts lack all group_vars  

##### ADDITIONAL INFORMATION



user: tgoehler
issue_9255: state: open
title: Logging to Elasticsearch produces Mapping error
body: ##### ISSUE TYPE
 - Logging

##### SUMMARY
When using the Logstash output or other output some messages cant be indexed because of this error:

`mapping for [event_data.res.diff.before] tried to parse field [before] as object, but found a concrete value`

I think its because when nothing changes it doesn't send null, but an empty string. --> see example

##### ENVIRONMENT
* AWX version: 17.0.1


##### STEPS TO REPRODUCE

Use AWX Logging to Logstash or other.

##### EXPECTED RESULTS

Message gets indexed.

Maybe provide a Template for the Elasticsearch Index.

##### ACTUAL RESULTS

<!-- What actually happened? -->

##### ADDITIONAL INFORMATION
```
"res" : {
      "changed" : true,
      "msg" : "line added",
      "backup" : "",
      "diff" : [ {
        "before" : "",
        "after" : "",
        "before_header" : "/etc/environment (content)",
        "after_header" : "/etc/environment (content)"
      }
```

user: gruselglatz
issue_9245: state: open
title: Possible bug when job fails in tower with syntax error, no notification is generated
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->
A job shows failed in AWX, but no notification was received for its failure.

##### ENVIRONMENT
* AWX version: 11.2.0
* AWX install method: awx-rpm
* Ansible version:  2.9.6
* Operating System: CENTOS7
* Web Browser: CHROME

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->
Scheduled job runs, notification of job start is received.
Job fails due to syntax error as indicated in GUI

##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->
Would have received notification of job failure through set up notification paths.

##### ACTUAL RESULTS

<!-- What actually happened? -->
No notificaiton through any of configured notification templates.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

![Screen Shot 2021-02-05 at 8 34 34 AM](https://user-images.githubusercontent.com/59876267/107047032-fa753600-678c-11eb-943e-4caaa1b5e411.png)

![Screen Shot 2021-02-05 at 8 33 55 AM](https://user-images.githubusercontent.com/59876267/107046990-e92c2980-678c-11eb-893f-35a8ab461ccf.png)



user: weiminmei
labels: sustaining:support: Support prioritized issues
issue_9244: state: open
title: Instance Group Details View: Credential name box responsivity needs fixing
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Details screen credentials box wanders off the right side of the screen when window is downsized.

##### STEPS TO REPRODUCE

Navigate to Instance Groups.
Click on one of the groups to view.
Click on Details.
Slowly shrink screen.

##### EXPECTED RESULTS

All elements on screen would resize appropriately and keep  the design proportions in tact.

##### ACTUAL RESULTS

The credentials box doesn't shrink but instead extends off screen, hiding part of the information contained within it.
![Screen Shot 2021-02-04 at 10 55 15 AM](https://user-images.githubusercontent.com/63685497/107047204-9014c380-6795-11eb-91fa-6c6063ce76d0.png)


user: akus062381
labels: qe:visual: visual defect
issue_9195: state: open
title: User cannot change password
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->

I asked around a bit in irc first, but we were unable to figure this out.

How can a user account (normal, non-ldap, regular plain user account) change their own password?

I want the user to change their password, not the admin to change it for them.

I do not see any option in the UI (AWX 16.0.0).

The API allows for `/api/v2/me` but only `GET` requests. This value returns `41` for the user I'm testing with.
Then we try `POST` to `/api/v2/users/41` with data `{ "password": "testing" }` using `curl --user 'username:password'` and we get the response:

```json
{"detail":"You do not have permission to perform this action."}
```

But... _I'M_ the user! It's my password?!

I also can't change other attributes such as `POST` to `/api/v2/users/41` with data `{ "last_name": "testing" }` with the same response from the API.

How does this work? What's going on here?

##### ENVIRONMENT
* AWX version: 16.0.0
* AWX install method: kubernetes
* Operating System: macos high sierra
* Web Browser: curl (chrome)

##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->

Users have a method to change their password.

##### ACTUAL RESULTS

<!-- What actually happened? -->

Users do not have a method to change their password.
user: hjkatz
issue_9160: state: open
title: [ui_next] Element icons do not appear centered after selection or interaction
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Turning this into a meta-issue due to the number of impacted pages/elements and the number of duplicate issues filed.

https://github.com/ansible/awx/issues/9158
https://github.com/ansible/awx/issues/8851
https://github.com/ansible/awx/issues/7507

##### ENVIRONMENT
* AWX version: 16.0.0

##### STEPS TO REPRODUCE
1. Create a project, click on the sync button

##### EXPECTED RESULTS
Highlighted area to be centered

##### ACTUAL RESULTS

Box is offset

##### ADDITIONAL INFORMATION
![105752571-75c92300-5f15-11eb-9a9f-fe063805c4bb](https://user-images.githubusercontent.com/12446869/105758023-cc862b00-5f1c-11eb-993b-352567382e77.png)

user: unlikelyzero
labels: qe:visual: visual defect
issue_9147: state: open
title: [ui_next] Add Tower Callback URL 'Copy button' to Edit Authentication Forms
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
For Authentication Forms which need the tower callback url, we should make the url visible and copyable.

i.e. Github Enterprise Authorization requires a tower url. This value is https://<url>/sso/complete/github-enterprise-org/ should be copyable from the Github Enterprise Authorization Edit Form

user: unlikelyzero
issue_9144: state: open
title: Upgrade from AWX GIT VERSION 12 to AWX GIT VERSION 17 Fails 
body: 
##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - Installer

##### SUMMARY
During the installation via : ansible-playbook -i inventory install.yml , it fails during Postgres upgrade (from 10 to 12) 

##### ENVIRONMENT
* AWX version: from AWX 12 to latest
* AWX install method: , docker on linux,
* Ansible version: 
ansible 2.9.3
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Aug  7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]


* Operating System: CentOS Linux release 7.7.1908 (Core)
* Web Browser: Chrome

##### STEPS TO REPRODUCE

Standard upgrade from 12 to 17 as described in the installation guide


##### ACTUAL RESULTS

TASK [local_docker : Upgrade Postgres] ********************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": true, "cmd": "docker run --rm  -v /data/postgres/data/10/data:/var/lib/postgresql/10/data  -v /data/postgres/data/12/data:/var/lib/postgresql/12/data  -e PGUSER=awx -e POSTGRES_INITDB_ARGS=\"-U awx\"  tianon/postgres-upgrade:10-to-12 --username=awx\n", "delta": "0:00:03.540644", "end": "2021-01-22 21:01:58.824661", "msg": "non-zero return code", "rc": 1, "start": "2021-01-22 21:01:55.284017", "stderr": "", "stderr_lines": [], "stdout": "Performing Consistency Checks\n
-----------------------------\n
Checking cluster versions                                   ok\n
Checking database user is the install user                  ok\n
Checking database connection settings                       ok\n
Checking for prepared transactions                          ok\n
Checking for reg* data types in user tables                 ok\n
Checking for contrib/isn with bigint-passing mismatch       ok\n
Checking for tables WITH OIDS                               ok\n
Checking for invalid \"sql_identifier\" user columns        ok\n
Creating dump of global objects                             ok\n
Creating dump of database schemas\n  
awx\n  
postgres\n  
template1\n                                                            
ok\n\n
New cluster database \"awx\" is not empty: found relation \"public.django_migrations\"\n
Failure, exiting", "stdout_lines": ["Performing Consistency Checks", "-----------------------------", 
"Checking cluster versions                                   ok", 
"Checking database user is the install user                  ok", 
"Checking database connection settings                       ok", 
"Checking for prepared transactions                          ok", 
"Checking for reg* data types in user tables                 ok", 
"Checking for contrib/isn with bigint-passing mismatch       ok", 
"Checking for tables WITH OIDS                               ok", 
"Checking for invalid \"sql_identifier\" user columns        ok", 
"Creating dump of global objects                             ok", 
"Creating dump of database schemas", "  awx", "  postgres", "  template1", "                                                            ok", "", 
"New cluster database \"awx\" is not empty: found relation \"public.django_migrations\"", "Failure, exiting"]}

-----------------------------
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
3faede61c2e5        awx:12.0.0          "tini -- /usr/bin/la…"   10 seconds ago      Exited (143) 9 seconds ago                       awx_task
6e3cc6a9c0ac        awx:12.0.0          "tini -- /bin/sh -c …"   10 seconds ago      Exited (143) 8 seconds ago                       awx_web
16a2ee248664        postgres:10         "docker-entrypoint.s…"   11 seconds ago      Exited (0) 8 seconds ago                         awx_postgres
bb2c3a19f279        redis               "docker-entrypoint.s…"   9 minutes ago       Exited (0) 8 seconds ago                         awx_redis



user: lcarangelo
issue_9138: state: open
title: AWX does not send Job finish message to awx command line tool
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->

When running Jobs via `awx` command line tool with `--wait` flag, `awx` process never finishes. Job in AWX is long finished but `awx` tool is still waiting.

This bug was not present on version 13.0.0

##### ENVIRONMENT
* AWX version: 15.0.1
* AWX install method: docker on linux
* Ansible version:  2.9.10
* Operating System: CentOS 8 Stream
* Web Browser: Not relevant

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->

* create Job Template
* run job template via `awx` command line tool and add `--wait` flag

##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->

`awx` process to exit when Job finishes, either successfully or not

##### ACTUAL RESULTS

<!-- What actually happened? -->

AWX server does not signal that Job is completed and `awx` process is waiting indefinitely 

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: stanislaw55
issue_9137: state: open
title: Display groups hierarchy of an inventory in a tree view
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

We use groups hierarchy to different levels of configuration of our devices, up to 5 levels of groups. This provides us high granularity on the configuration generalization as well as customization. 

In the inventory, groups tag, all groups are displayed in a list, and there is no visual difference between group levels.

![Screenshot from 2021-01-22 09-42-36](https://user-images.githubusercontent.com/29378521/105467687-52dd0b80-5c96-11eb-9227-e8d1efa4036c.png)

It would be useful to display in some way, that certain group is a child of another one:

- The simplest way may be just write it in a "expanded" view, as with jobs. 
- Other idea is display them in a tree structure, this could be done adding spaces when displaying the name of a group that has a parent. Each nested child could have more indentation:

```
- level 1 
- level 1 
  - level 2
    - level 3
  - level 2
```
How would you suggest to do this quick-view? 


user: jetxeberria
issue_9128: state: open
title: Allow Teams to be granted Org Admin (or create organization_admin role, or allow SAML configuration for org aliases)
body: Hello! We're trying to accomplish the following:
* Create Org Z
* Add Team A to Org Z
* Create Org A
* Allow Team A to administer Org A <-- This is the challenge.

Currently this is not possible, and I would like to discuss potential solutions to this challenge.

## 1. Teams as Org Admins

See PR #6438 which limits the UI from displaying the Admin Role when assigning Team Roles to Organizations.

Why?

The API when POST-ing to `/api/v2/roles/<id>/teams/` (where `<id>` is the `admin` role for an Org) returns

> You cannot assign an Organization participation role as a child role for a Team.

Why not? Could we allow this through some means?

## 2. SAML Org Alias

We are also using SAML to configure the login for our users. Given that we cannot assign `admin` for an Org to a Team (a collection of Users) and instead we must assign this role to each User _individually_ (frustratingly so), we looked around and found the `SOCIAL_AUTH_SAML_ORGANIZATION_ATTR` and `SOCIAL_AUTH_SAML_TEAM_ATTR` settings.

These settings allow us to configure a mapping from users' SAML attributes -> Orgs and Teams. But there's a limitation.

The `SOCIAL_AUTH_SAML_TEAM_ATTR` allows for complex mapping of Team and Org names via `team_alias` and `org_alias` in the `team_org_map` value here: https://github.com/ansible/awx/blob/devel/awx/sso/pipeline.py#L197

This same configuration is not available for `SOCIAL_AUTH_SAML_ORGANIZATION_ATTR` here: https://github.com/ansible/awx/blob/devel/awx/sso/pipeline.py#L173-L175

Why not? Would you accept a PR that adds this functionality?

## 3. We're doing it wrong.

I must also ask myself, "Are we going about this in the wrong way?" Are we?

> Why are you creating Org A and then assigning the Team A roles to Org A? Wtf?

We are providing AWX as a self-service platform where we want each of our groups of users to have their own little space where they can administer all resources (Credentials, Applications, Inventories, Projects, etc...). In order to accomplish this we have decided on the following structure:

* 1 Shared Organization which homes shared Credentials, Inventories, Projects, etc... that is available for all users to interact with
* N Teams under the Shared Org which home our actual Users (populated by `SOCIAL_AUTH_SAML_TEAM_ATTR`)
* N "Team" Orgs (1 per Team under the Shared Org) which home each Team's Credentials, Inventories, Projects, etc...
* We then want to grant _full admin capabilities_ to Team A -> Org for Team A

The last bullet point is where we're running into trouble because there are only the following Team Roles available: 
* https://github.com/ansible/awx/blob/devel/awx/main/models/rbac.py#L34
* Minus: https://github.com/ansible/awx/blob/devel/awx/api/views/__init__.py#L615

We would perhaps like an `organization_admin` Team role made available as a potential solution. Without such a role being available we have no SAML-based method of assigning Users the `admin` role to an Organization where the SAML attributes do not match _exactly_ the name of the Org (which they do not).
user: hjkatz
labels: component:authentication: For issues related to authentication
issue_9108: state: open
title: Disable ability to save machine credential passwords
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Ability to remove the option for a user to save a machine credential instead force the use of prompt on launch, we a use case where security will not allow stored credentials of certain types when connection to machines and would like instead the ability to prompt on launch but not have the option to save a password. 

user: p-avery
issue_9103: state: open
title: Allow setting 'latest' as SCM tag
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

Currently, and thanks to the development driven [this issue](https://github.com/ansible/awx/issues/282?_pjax=%23js-repo-pjax-container>), we can specify the tag that project must checkout to.

- If we specify nothing, it will checkout to last commit
- If we specify a tag, it will checkout to that tag

In our scenario we require a third option:
- Deployments team must use last commit: So, in project description, we set no default SCM Branch/tag
- Validations team must use certain tag: So, in template description, we ask to prompt the SCM Branch/tag
- Almost all times, that tag will be the latest one

However, this way validations team must be aware of the last tag available of the deployments project.

Feature requested: 
Allow the key 'latest' on SCM Branch/tag field, so AWX finds automatically which is the latest tag 

On git, latest tag can be retrieved with: 
```
tag=$(git describe --tags `git rev-list --tags --max-count=1`)
```
user: jetxeberria
issue_9100: state: open
title: Redis/AWX communication
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

AWS Fargate doesn't allow unix socket communication between containers. It would be nice to allow AWX to communicate with Redis using the standard TCP approach. 
user: csamarajeewa
issue_9097: state: open
title: Consider upgrading social-app-django
body: The `social-app-django` folks recently merged a bug fix we care about, that may allow us to remove some gross monkey-patching on our end:

https://github.com/python-social-auth/social-app-django/pull/162

cc @rooftopcellist @fosterseth @chrismeyersfsu 
user: ryanpetrello
issue_9085: state: open
title: Certain playbook output has unexpected delays
body: Run this playbook on an awx install that is doing little or nothing else:

```yaml
---

- hosts: all
  gather_facts: false
  tasks:
    - shell: 'echo "Hello, World" && sleep .1'
      with_sequence: start=0 end=100
```

...observe that none of the events are recorded, nor does any of the stdout show up in the UI *until* the playbook command finishes executing (then everything shows up at the end in a giant burst).
user: ryanpetrello
issue_9033: state: open
title: [FR][WORKFLOWS] Allow user to see jobs logs
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Not sure if it was implemented since i use an old version of AWX, but didn't find any related in awx issues and tower documentation.

I was expecting by give "execution" permission on a workflow to user, to let him only see the workflows he has access.
But unfortunately, event if the workflow seems to works, the user can't see the jobs logs of the workflow playbooks.
The only way i've found to let users see the logs, is to give "read" permission on ALL playbooks but this solution is not reliable in the time :
- the user see playbooks now and not  only the workflows
- it is very long to do when you have many workflows
- if new playbooks are added to the workflows, you need to update the permission regarding this new additions.

A perfect solution would be to propagate "read" permission only on logs concerned by the workflow.

Best regards,
user: rockandska
issue_9027: state: open
title: Exception during Project update triggered from Job launch
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->

When launching a Job that triggers a Project update the Project update (and the original Job) both fail.

There is an exception in the `awx-task` logs:
```
2021-01-06 18:51:19,514 ERROR    awx.main.tasks job 353 (running) Exception occurred while running task
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 1383, in run
    self.pre_run_hook(self.instance, private_data_dir)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 1942, in pre_run_hook
    sync_task.run(local_project_sync.id)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 814, in _wrapped
    return f(self, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 1555, in run
    raise AwxTaskError.TaskError(self.instance, rc)
Exception: project_update 354 (failed) encountered an error (rc=2), please see task stdout for details.
```

The full related output of `awx-task`:
```
2021-01-06 18:50:56,099 DEBUG    awx.main.scheduler Running Tower task manager.
2021-01-06 18:50:56,116 DEBUG    awx.main.scheduler Starting Scheduler
2021-01-06 18:50:56,384 DEBUG    awx.main.scheduler job 353 (waiting) consumed 6 capacity units from Shared ansible repo Docker image with prior total of 0
2021-01-06 18:50:56,385 DEBUG    awx.main.scheduler Finishing Scheduler
2021-01-06 18:50:56,780 DEBUG    awx.main.dispatch task 0dac4555-15ef-400e-a2b7-26717da758c3 starting awx.main.tasks.RunJob(*[353])
2021-01-06 18:50:56,814 DEBUG    awx.main.tasks Launching pod for job 353 (waiting).
2021-01-06 18:50:56,919 DEBUG    awx.main.scheduler Checking for pod awx-job-353. Attempt 1 of 100
2021-01-06 18:50:56,941 DEBUG    awx.main.scheduler Pod awx-job-353 is Pending.



2021-01-06 18:51:01,946 DEBUG    awx.main.scheduler Checking for pod awx-job-353. Attempt 2 of 100
RESULT 2
OKREADY
2021-01-06 18:51:01,967 DEBUG    awx.main.scheduler Pod awx-job-353 is online.
2021-01-06 18:51:02,667 DEBUG    awx.main.tasks Project not available locally, job 353 (running) will sync with remote
2021-01-06 18:51:02,981 WARNING  awx.main.tasks Galaxy role/collection syncing is enabled, but no credentials are configured for Squarespace-1.
2021-01-06 18:51:05,209 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-01-06 18:51:05,209 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-01-06 18:51:06,624 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(3)
2021-01-06 18:51:06,624 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(2)
2021-01-06 18:51:06,624 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(3)
2021-01-06 18:51:06,624 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(2)
2021-01-06 18:51:06,624 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(3)
2021-01-06 18:51:06,624 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(3)
2021-01-06 18:51:06,624 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(3)
2021-01-06 18:51:06,624 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(3)
2021-01-06 18:51:08,222 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(2)
2021-01-06 18:51:08,222 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(2)
2021-01-06 18:51:09,130 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(2)
2021-01-06 18:51:09,130 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(2)
2021-01-06 18:51:09,130 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(2)
2021-01-06 18:51:09,130 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(2)
2021-01-06 18:51:09,236 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(3)
2021-01-06 18:51:09,236 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(3)
2021-01-06 18:51:10,834 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-01-06 18:51:10,834 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-01-06 18:51:10,837 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-01-06 18:51:10,837 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-01-06 18:51:10,837 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-01-06 18:51:10,837 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-01-06 18:51:10,937 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-01-06 18:51:10,937 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-01-06 18:51:15,048 DEBUG    awx.main.dispatch task 2febc4df-8a19-4494-8336-3a3411ba4e11 starting awx.main.tasks.cluster_node_heartbeat(*[])
2021-01-06 18:51:15,049 DEBUG    awx.main.tasks Cluster node heartbeat task.
2021-01-06 18:51:15,100 DEBUG    awx.main.dispatch task 4852e087-1b92-40c7-8845-2a0088f8b18e starting awx.main.tasks.awx_k8s_reaper(*[])
2021-01-06 18:51:15,106 DEBUG    awx.main.dispatch task 4fee5162-862a-489c-8052-71d293e1ce87 starting awx.main.tasks.awx_periodic_scheduler(*[])
2021-01-06 18:51:15,139 DEBUG    awx.main.tasks Starting periodic scheduler
2021-01-06 18:51:15,142 DEBUG    awx.main.tasks Last scheduler run was: 2021-01-06 18:50:45.031597+00:00
Instance Group already registered tower
Instance Group already registered tower
Instance Group already registered tower
Instance Group already registered tower
Instance Group already registered tower
Instance Group already registered tower
Instance Group already registered tower
Instance Group already registered tower
Instance Group already registered tower
Instance Group already registered tower
Instance Group already registered tower
Instance Group already registered tower
Instance Group already registered tower
Instance Group already registered tower
Instance Group already registered tower
Instance Group already registered tower
2021-01-06 18:51:15,161 DEBUG    awx.main.tasks Checking for orphaned k8s pods for Shared ansible repo Docker image-2.
2021-01-06 18:51:15,226 WARNING  awx.main.dispatch scaling up worker pid:12160
2021-01-06 18:51:15,428 DEBUG    awx.main.dispatch task 088ebc38-f24a-4020-9661-cb2d8227cc83 starting awx.main.scheduler.tasks.run_task_manager(*[])
2021-01-06 18:51:15,430 DEBUG    awx.main.scheduler Running Tower task manager.
2021-01-06 18:51:15,452 DEBUG    awx.main.scheduler Starting Scheduler
2021-01-06 18:51:15,628 DEBUG    awx.main.scheduler Finishing Scheduler
2021-01-06 18:51:17,485 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-01-06 18:51:17,485 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-01-06 18:51:17,686 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-01-06 18:51:17,686 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-01-06 18:51:17,686 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-01-06 18:51:17,686 DEBUG    awx.main.commands.run_callback_receiver ProjectUpdateEvent.objects.bulk_create(1)
2021-01-06 18:51:18,076 DEBUG    awx.main.tasks project_update 354 (running) finished running, producing 28 events.
2021-01-06 18:51:18,077 INFO     awx.main.commands.run_callback_receiver Event processing is finished for Job 354, sending notifications
2021-01-06 18:51:18,077 INFO     awx.main.commands.run_callback_receiver Event processing is finished for Job 354, sending notifications
2021-01-06 18:51:18,147 DEBUG    awx.main.dispatch task 1df3998b-3fce-47bf-9510-e59ba9c7c664 starting awx.main.tasks.handle_success_and_failure_notifications(*[354])
2021-01-06 18:51:18,146 WARNING  awx.main.dispatch scaling down worker pid:11514
2021-01-06 18:51:18,177 WARNING  awx.main.dispatch worker exiting gracefully pid:11514
Instance Group already registered tower
Instance Group already registered tower
2021-01-06 18:51:19,514 ERROR    awx.main.tasks job 353 (running) Exception occurred while running task
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 1383, in run
    self.pre_run_hook(self.instance, private_data_dir)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 1942, in pre_run_hook
    sync_task.run(local_project_sync.id)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 814, in _wrapped
    return f(self, *args, **kwargs)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 1555, in run
    raise AwxTaskError.TaskError(self.instance, rc)
Exception: project_update 354 (failed) encountered an error (rc=2), please see task stdout for details.
2021-01-06 18:51:19,516 DEBUG    awx.main.tasks job 353 (running) finished running, producing 0 events.
2021-01-06 18:51:19,629 DEBUG    awx.main.tasks Deleting pod awx-job-353
2021-01-06 18:51:19,690 DEBUG    awx.main.dispatch task c6b30c9a-740e-40ae-9ff3-9b934007f9e5 starting awx.main.tasks.update_inventory_computed_fields(*[26])
2021-01-06 18:51:19,694 WARNING  awx.main.dispatch job 353 (error) encountered an error (rc=None), please see task stdout for details.
2021-01-06 18:51:19,696 DEBUG    awx.main.dispatch task 0dac4555-15ef-400e-a2b7-26717da758c3 starting awx.main.tasks.handle_work_error(*['0dac4555-15ef-400e-a2b7-26717da758c3'])
2021-01-06 18:51:19,697 DEBUG    awx.main.tasks Executing error task id 0dac4555-15ef-400e-a2b7-26717da758c3, subtasks: [{'type': 'job', 'id': 353}]
```

In this case the original Job is 353 and the Project update Job is 354, however, Job 354 _does not exist_ in the API or in the UI, See:
![image](https://user-images.githubusercontent.com/2234516/103809046-ea035b80-5026-11eb-9135-9e13b7b90b14.png)

Notes for this case:
* The Job uses a shared Project and is configured to update the project prior to running
* The Job is prompting for an SCM branch override, and I'm providing a branch that's different than the main branch for the Project
* The Project is using Git and Bitbucket
* The branch for the Project (that the Job requested) was just rebased and `git push --force` before this

##### ENVIRONMENT
* AWX version: 16.0.0
* AWX install method: kubernetes
* Ansible version:  2.9
user: hjkatz
issue_9026: state: open
title: Support - Document & streamline gdb experience
body: When helping a user debug AWX we sometimes need to invoke gdb to get at the python stack trace. This requires installing system level packages like gcc and magic debug symbols. The minimum we should do is document this process. Ideally, we make the process better (i.e. less steps) by maybe including some of the needed packages.
user: chrismeyersfsu
labels: type:feature: prioritized on a feature board
issue_9025: state: open
title: Support - Instrument profiling into all Tower subsytems
body: `settings.AWX_CALLBACK_PROFILE` is an example of profiling for the callback receiver subsystem. We want to have profiling for other AWX subsystem:
* task manager
* dispatcher
* API
* websockets

The profiling should use the generic on/off method that is decided on as a result of https://github.com/ansible/awx/issues/9024
user: chrismeyersfsu
issue_9024: state: open
title: Support - Enable / Disable all existing tracing without restarting Tower
body: `awx-manage profile_sql` is an example where we do not have to restart tower to enable tracing/profiling. Another example is external logging both debug level and enable/disable. `settings.AWX_CALLBACK_PROFILE` is an example of tracing we would like to control without restarting AWX. 

`profile_sql` is nice because it emits a message over the message bus to all AWX nodes to enable the feature. This is wanted for other tracing switching.
user: chrismeyersfsu
labels: type:feature: prioritized on a feature board
issue_9023: state: open
title: Support - Document & streamline existing tooling
body: AWX ships with a set of tools that can aid in debugging production problems. We should document the tools. There is some current documentation here https://github.com/ansible/awx/blob/devel/docs/debugging.md

Tool | Description | Class
-- | -- | --
awx-manage callback_stats | Continuously print the number of events processed in the last minute. | metrics
awx-manage run_wsbroadcast --status | Print the internal state of any running broadcast websocket as well as statistics. | metrics
awx-manage run_dispatcher --status | Print the internal state of any running dispatchers. | deadlock
awx-manage profile_sql | Enable or disable SQL Profiling across all Python processes. Output includes (1) query, (2) time, and (3) python stack trace. | metrics
awx-manage list_instances | List instance(s), grouping data, and their status i.e. last heartbeat, capacity, |  
awx-manage bottleneck | Find the slowest tasks and hosts for a Job Template's most recent runs. |  
settings.AWX_CALLBACK_PROFILE | Turns on a signal handler in the callback receiver. When sent SIGUSR1, enable cProfile for callback receiver loop. Send SIGUSR1 again to disable and output results. | profile metrics
sdb | Socket pdb. | profile deadlock
strace | Observe system calls. | profile
gdb / py-bt | Print python stack | profiledeadlock


user: chrismeyersfsu
issue_9022: state: open
title: Observability and metrics - sosreport-elk reconstruct metrics
body: Take metric(s) files from AWX and feed them into ELK via. elasticsearch filebeat. This will require adding a filebeat module or extending the existing tower module. https://github.com/chrismeyersfsu/sosreport-elk/blob/master/module/tower/tower/ingest/pipeline.yml

By adding support for metrics to sosreport-elk the metrics can be overlayed with the AWX log messages in a time series graph.

https://github.com/chrismeyersfsu/sosreport-elk
user: chrismeyersfsu
labels: type:feature: prioritized on a feature board
issue_9021: state: open
title: Observability and metrics - periodically output metrics to log file
body: We'd like to still extract value from the metrics feature when users don't have Prometheus gathering over time. To this end, we can periodically output the metrics to a file using a circular buffer (or python logging log rotation). The metric logs can be exported from the AWX system via SOSReport of manual copying and fed into sosreport-elk for offline analysis of past metric performance data https://github.com/chrismeyersfsu/sosreport-elk

This periodic task could be a dispatcher job or a separate daemon. It should run about as often as Prometheus would, every 5 seconds. The periodic job should run on every AWX node. You might think that if the feature that broadcasts all metrics to all nodes then we could just run this periodic task on a single AWX node, but that would require some sort of master election and complicate things. Usually metrics are relied on when things go sideways. It would be good to keep this simple and rely on as few other systems as possible.
user: chrismeyersfsu
labels: type:feature: prioritized on a feature board
issue_9018: state: open
title: Install fails during task "image_build : Build AWX distribution using container"
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Install fails during task "image_build : Build AWX distribution using container"

##### ENVIRONMENT
* AWX version: 16.0.0
* AWX install method: docker on linux
* Ansible version:  2.9.6
* Operating System: Ubuntu 20.04.1
* Web Browser: N/A

##### STEPS TO REPRODUCE

I followed the install steps on https://github.com/ansible/awx/blob/devel/INSTALL.md#docker-compose.

##### EXPECTED RESULTS

I expected the installation to finish

##### ACTUAL RESULTS

The install fails with this error:
TASK [image_build : Build AWX distribution using container] **************************************
```fatal: [localhost -> 127.0.0.1]: FAILED! => {"changed": false, "msg": "fatal: not a git repository (or any parent up to mount point /)\nStopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\nnpm --prefix awx/ui_next install\n\n> core-js@2.6.11 postinstall /awx/awx/ui_next/node_modules/core-js\n> node -e \"try{require('./postinstall')}catch(e){}\"\n\n\u001b[96mThank you for using core-js (\u001b[94m https://github.com/zloirock/core-js \u001b[96m) for polyfilling JavaScript standard library!\u001b[0m\n\n\u001b[96mThe project needs your help! Please consider supporting of core-js on Open Collective or Patreon: \u001b[0m\n\u001b[96m>\u001b[94m https://opencollective.com/core-js \u001b[0m\n\u001b[96m>\u001b[94m https://www.patreon.com/zloirock \u001b[0m\n\n\u001b[96mAlso, the author of core-js (\u001b[94m https://github.com/zloirock \u001b[96m) is looking for a good job -)\u001b[0m\n\n\n> core-js-pure@3.6.5 postinstall /awx/awx/ui_next/node_modules/core-js-pure\n> node -e \"try{require('./postinstall')}catch(e){}\"\n\n\u001b[96mThank you for using core-js (\u001b[94m https://github.com/zloirock/core-js \u001b[96m) for polyfilling JavaScript standard library!\u001b[0m\n\n\u001b[96mThe project needs your help! Please consider supporting of core-js on Open Collective or Patreon: \u001b[0m\n\u001b[96m>\u001b[94m https://opencollective.com/core-js \u001b[0m\n\u001b[96m>\u001b[94m https://www.patreon.com/zloirock \u001b[0m\n\n\u001b[96mAlso, the author of core-js (\u001b[94m https://github.com/zloirock \u001b[96m) is looking for a good job -)\u001b[0m\n\n\n> core-js@3.6.5 postinstall /awx/awx/ui_next/node_modules/react-app-polyfill/node_modules/core-js\n> node -e \"try{require('./postinstall')}catch(e){}\"\n\n\u001b[96mThank you for using core-js (\u001b[94m https://github.com/zloirock/core-js \u001b[96m) for polyfilling JavaScript standard library!\u001b[0m\n\n\u001b[96mThe project needs your help! Please consider supporting of core-js on Open Collective or Patreon: \u001b[0m\n\u001b[96m>\u001b[94m https://opencollective.com/core-js \u001b[0m\n\u001b[96m>\u001b[94m https://www.patreon.com/zloirock \u001b[0m\n\n\u001b[96mAlso, the author of core-js (\u001b[94m https://github.com/zloirock \u001b[96m) is looking for a good job -)\u001b[0m\n\n\n> styled-components@4.4.1 postinstall /awx/awx/ui_next/node_modules/styled-components\n> node ./scripts/postinstall.js || exit 0\n\nUse styled-components at work? Consider supporting our development efforts at https://opencollective.com/styled-components\nnpm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.13 (node_modules/webpack-dev-server/node_modules/fsevents):\nnpm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {\"os\":\"darwin\",\"arch\":\"any\"} (current: {\"os\":\"linux\",\"arch\":\"x64\"})\nnpm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.13 (node_modules/jest-haste-map/node_modules/fsevents):\nnpm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {\"os\":\"darwin\",\"arch\":\"any\"} (current: {\"os\":\"linux\",\"arch\":\"x64\"})\nnpm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.1.2 (node_modules/fsevents):\nnpm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.2: wanted {\"os\":\"darwin\",\"arch\":\"any\"} (current: {\"os\":\"linux\",\"arch\":\"x64\"})\n\nadded 1949 packages from 1722 contributors and audited 1954 packages in 44.89s\n\n83 packages are looking for funding\n  run `npm fund` for details\n\nfound 2 vulnerabilities (1 low, 1 high)\n  run `npm audit fix` to fix them, or `npm audit` for details\nnpm --prefix awx/ui_next run extract-strings\n\n> ui_next@0.1.0 extract-strings /awx/awx/ui_next\n> lingui extract\n\n\n  `@babel/polyfill` is deprecated. Please, use required parts of `core-js`\n  and `regenerator-runtime/runtime` separately\nCatalog statistics:\n┌─────────────┬─────────────┬─────────┐\n│ Language    │ Total count │ Missing │\n├─────────────┼─────────────┼─────────┤\n│ en (source) │    1452     │    -    │\n│ ja          │    1452     │  1452   │\n└─────────────┴─────────────┴─────────┘\n\n(use \"npm --prefix awx/ui_next run add-locale <locale>\" to add more locales)\n(use \"npm --prefix awx/ui_next run extract\" to update catalogs with new messages)\n(use \"npm --prefix awx/ui_next run compile\" to compile catalogs for production)\nnpm --prefix awx/ui_next run compile-strings\n\n> ui_next@0.1.0 compile-strings /awx/awx/ui_next\n> lingui compile\n\nCompiling message catalogs…\nDone!\nnpm --prefix awx/ui_next run build\n\n> ui_next@0.1.0 build /awx/awx/ui_next\n> INLINE_RUNTIME_CHUNK=false react-scripts build\n\nCreating an optimized production build...\nCompiled successfully.\n\nFile sizes after gzip:\n\n  443.22 KB  build/static/js/2.a3befcbb.chunk.js\n  255.61 KB  build/static/js/main.8a89804e.chunk.js\n  51.54 KB   build/static/css/2.b5b835f1.chunk.css\n  770 B      build/static/js/runtime-main.a1234c1a.js\n\nThe project was built assuming it is hosted at /.\nYou can control this with the homepage field in your package.json.\n\nThe build folder is ready to be deployed.\nYou may serve it with a static server:\n\n  npm install -g serve\n  serve -s build\n\nFind out more about deployment here:\n\n  bit.ly/CRA-deploy\n\ngit checkout awx/ui_next/src/locales\nfatal: not a git repository (or any parent up to mount point /)\nStopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\nmake: *** [Makefile:478: ui-devel] Error 128\n", "status": 2}```

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: alee-cc
issue_9010: state: open
title: Elements in a row shift on table sort action
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Elements in a row shift on table sort action

##### ENVIRONMENT
* AWX version: 96a7fe0035427774f4eac93983cbb887ab275a42

##### STEPS TO REPRODUCE
1. Navigate to a page with a table view
2. Click on sort
Note: the tables shifts

##### EXPECTED RESULTS
Table not to shift
##### ACTUAL RESULTS
Elements shift

##### ADDITIONAL INFORMATION
![Screen Recording 2021-01-05 at 01 57 35 PM](https://user-images.githubusercontent.com/12446869/103687586-8281d900-4f5e-11eb-820f-1b935e446397.gif)

user: unlikelyzero
labels: qe:regression: it used to work
qe:visual: visual defect
issue_9007: state: open
title: Add HTTP Inventory Source
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Since Custom Inventory Scripts are deprecated, it would be nice to be able to fetch a JSON inventory file from a remote URL

##### SUMMARY
 - Custom Inventory Scripts are deprecated. Adding an inventory file into SCM is an option, but it doesn't quite work in fast changing environments (in fact it works, but it's painful)

user: gmtime
issue_8991: state: open
title: Expose Extra Var information in Jobs List Search
body: ##### ISSUE TYPE
 - Feature Idea


##### COMPONENT NAME
 - UI

##### SUMMARY
Need more columns or options in Jobs to help filter through multiple jobs running the same workflow or template. Currently we have jobs that have failed and not caught for a day or two and then a user has to go through at times pages of Jobs to find their specific failed job. If we could have a column where a specific extra-var could be shown that's unique to each Job, would be helpful. 

##### ENVIRONMENT
* AWX version: 2.9.13
* AWX install method: Docker on Linux
* Ansible version:  2.9.10
* Operating System: Red Hat Enterprise Linux release 8.2 


##### STEPS TO REPRODUCE
Deploy multiple workflows or templates of the same name and then try to easily find a specific job, for a specific object.

##### EXPECTED RESULTS


##### ACTUAL RESULTS


##### ADDITIONAL INFORMATION


user: Griamce0385
issue_8969: state: open
title: Extending installer to use buildah instead of docker build
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
I am trying to build my own custom image on a RHEL machine and that has an ancient version of Docker installed on it which does not support multi stage builds, which is required to build your own AWX Images. So I thought lets use buildah instead.

I did put a bit of effort into building all that is required into the installer of awx and would want to share that. Since there is no buildah module I am using the shell module instead. My two questions are:

1. Are you interested? --and if the answer to 1 is yes,
2. How do I contribute it? 
 
See, this is my first time contributing to OpenSource. I did read the contribution guide but am still a bit lost on the part with the git rebase vs. git merge. So I hope you bare with me and help me out on this:

So my understanding was that I would have to:

git clone https://github.com/ansible/awx.git
do my changes
git commit --signoff

And what would be after that?
cheers,
Sebastian
user: ghost
issue_8966: state: open
title: Error when use EKS policy
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY

When run task that use AWS IAM roles - receive:
> PermissionError: [Errno 13] Permission denied: '/var/run/secrets/eks.amazonaws.com/serviceaccount/token'\n",

Please see my comment:
https://github.com/ansible/awx/commit/8788c904c8dcd6e83521887b3450b09bf7037ca5#r45341893

##### ENVIRONMENT
* AWX version: 16.0.0
* AWX install method: docker
* Ansible version:  2.9.15
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

Run task that need access to IAM roles.

##### EXPECTED RESULTS

pass.

##### ACTUAL RESULTS

failure.

##### ADDITIONAL INFORMATION

```
Traceback (most recent call last):\n  File \"/var/lib/awx/.ansible/tmp/ansible-tmp-1608567548.0239081-25-127186084270128/AnsiballZ_ec2_instance.py\", line 102, in <module>\n    _ansiballz_main()\n  File \"/var/lib/awx/.ansible/tmp/ansible-tmp-1608567548.0239081-25-127186084270128/AnsiballZ_ec2_instance.py\", line 94, in _ansiballz_main\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n  File \"/var/lib/awx/.ansible/tmp/ansible-tmp-1608567548.0239081-25-127186084270128/AnsiballZ_ec2_instance.py\", line 40, in invoke_module\n    runpy.run_module(mod_name='ansible.modules.cloud.amazon.ec2_instance', init_globals=None, run_name='__main__', alter_sys=True)\n  File \"/usr/lib64/python3.6/runpy.py\", line 205, in run_module\n    return _run_module_code(code, init_globals, run_name, mod_spec)\n  File \"/usr/lib64/python3.6/runpy.py\", line 96, in _run_module_code\n    mod_name, mod_spec, pkg_name, script_name)\n  File \"/usr/lib64/python3.6/runpy.py\", line 85, in _run_code\n    exec(code, run_globals)\n  File \"/tmp/ansible_ec2_instance_payload_h7v2h2k0/ansible_ec2_instance_payload.zip/ansible/modules/cloud/amazon/ec2_instance.py\", line 1710, in <module>\n  File \"/tmp/ansible_ec2_instance_payload_h7v2h2k0/ansible_ec2_instance_payload.zip/ansible/modules/cloud/amazon/ec2_instance.py\", line 1681, in main\n  File \"/tmp/ansible_ec2_instance_payload_h7v2h2k0/ansible_ec2_instance_payload.zip/ansible/modules/cloud/amazon/ec2_instance.py\", line 1302, in find_instances\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/paginate.py\", line 322, in search\n    for page in self:\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/paginate.py\", line 255, in __iter__\n    response = self._make_request(current_kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/paginate.py\", line 332, in _make_request\n    return self._method(**current_kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/client.py\", line 357, in _api_call\n    return self._make_api_call(operation_name, kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/client.py\", line 648, in _make_api_call\n    operation_model, request_dict, request_context)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/client.py\", line 667, in _make_request\n    return self._endpoint.make_request(operation_model, request_dict)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/endpoint.py\", line 102, in make_request\n    return self._send_request(request_dict, operation_model)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/endpoint.py\", line 132, in _send_request\n    request = self.create_request(request_dict, operation_model)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/endpoint.py\", line 116, in create_request\n    operation_name=operation_model.name)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/hooks.py\", line 356, in emit\n    return self._emitter.emit(aliased_event_name, **kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/hooks.py\", line 228, in emit\n    return self._emit(event_name, kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/hooks.py\", line 211, in _emit\n    response = handler(**kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/signers.py\", line 90, in handler\n    return self.sign(operation_name, request)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/signers.py\", line 149, in sign\n    auth = self.get_auth_instance(**kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/signers.py\", line 229, in get_auth_instance\n    frozen_credentials = self._credentials.get_frozen_credentials()\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/credentials.py\", line 577, in get_frozen_credentials\n    self._refresh()\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/credentials.py\", line 472, in _refresh\n    self._protected_refresh(is_mandatory=is_mandatory_refresh)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/credentials.py\", line 488, in _protected_refresh\n    metadata = self._refresh_using()\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/credentials.py\", line 629, in fetch_credentials\n    return self._get_cached_credentials()\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/credentials.py\", line 639, in _get_cached_credentials\n    response = self._get_credentials()\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/credentials.py\", line 844, in _get_credentials\n    kwargs = self._assume_role_kwargs()\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/credentials.py\", line 854, in _assume_role_kwargs\n    identity_token = self._web_identity_token_loader()\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/utils.py\", line 1382, in __call__\n    with self._open(self._web_identity_token_path) as token_file:\nPermissionError: [Errno 13] Permission denied: '/var/run/secrets/eks.amazonaws.com/serviceaccount/token'\n",
  "exception": "Traceback (most recent call last):\n  File \"/var/lib/awx/.ansible/tmp/ansible-tmp-1608567548.0239081-25-127186084270128/AnsiballZ_ec2_instance.py\", line 102, in <module>\n    _ansiballz_main()\n  File \"/var/lib/awx/.ansible/tmp/ansible-tmp-1608567548.0239081-25-127186084270128/AnsiballZ_ec2_instance.py\", line 94, in _ansiballz_main\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n  File \"/var/lib/awx/.ansible/tmp/ansible-tmp-1608567548.0239081-25-127186084270128/AnsiballZ_ec2_instance.py\", line 40, in invoke_module\n    runpy.run_module(mod_name='ansible.modules.cloud.amazon.ec2_instance', init_globals=None, run_name='__main__', alter_sys=True)\n  File \"/usr/lib64/python3.6/runpy.py\", line 205, in run_module\n    return _run_module_code(code, init_globals, run_name, mod_spec)\n  File \"/usr/lib64/python3.6/runpy.py\", line 96, in _run_module_code\n    mod_name, mod_spec, pkg_name, script_name)\n  File \"/usr/lib64/python3.6/runpy.py\", line 85, in _run_code\n    exec(code, run_globals)\n  File \"/tmp/ansible_ec2_instance_payload_h7v2h2k0/ansible_ec2_instance_payload.zip/ansible/modules/cloud/amazon/ec2_instance.py\", line 1710, in <module>\n  File \"/tmp/ansible_ec2_instance_payload_h7v2h2k0/ansible_ec2_instance_payload.zip/ansible/modules/cloud/amazon/ec2_instance.py\", line 1681, in main\n  File \"/tmp/ansible_ec2_instance_payload_h7v2h2k0/ansible_ec2_instance_payload.zip/ansible/modules/cloud/amazon/ec2_instance.py\", line 1302, in find_instances\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/paginate.py\", line 322, in search\n    for page in self:\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/paginate.py\", line 255, in __iter__\n    response = self._make_request(current_kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/paginate.py\", line 332, in _make_request\n    return self._method(**current_kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/client.py\", line 357, in _api_call\n    return self._make_api_call(operation_name, kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/client.py\", line 648, in _make_api_call\n    operation_model, request_dict, request_context)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/client.py\", line 667, in _make_request\n    return self._endpoint.make_request(operation_model, request_dict)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/endpoint.py\", line 102, in make_request\n    return self._send_request(request_dict, operation_model)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/endpoint.py\", line 132, in _send_request\n    request = self.create_request(request_dict, operation_model)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/endpoint.py\", line 116, in create_request\n    operation_name=operation_model.name)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/hooks.py\", line 356, in emit\n    return self._emitter.emit(aliased_event_name, **kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/hooks.py\", line 228, in emit\n    return self._emit(event_name, kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/hooks.py\", line 211, in _emit\n    response = handler(**kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/signers.py\", line 90, in handler\n    return self.sign(operation_name, request)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/signers.py\", line 149, in sign\n    auth = self.get_auth_instance(**kwargs)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/signers.py\", line 229, in get_auth_instance\n    frozen_credentials = self._credentials.get_frozen_credentials()\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/credentials.py\", line 577, in get_frozen_credentials\n    self._refresh()\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/credentials.py\", line 472, in _refresh\n    self._protected_refresh(is_mandatory=is_mandatory_refresh)\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/credentials.py\", line 488, in _protected_refresh\n    metadata = self._refresh_using()\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/credentials.py\", line 629, in fetch_credentials\n    return self._get_cached_credentials()\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/credentials.py\", line 639, in _get_cached_credentials\n    response = self._get_credentials()\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/credentials.py\", line 844, in _get_credentials\n    kwargs = self._assume_role_kwargs()\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/credentials.py\", line 854, in _assume_role_kwargs\n    identity_token = self._web_identity_token_loader()\n  File \"/var/lib/awx/venv/ansible/lib/python3.6/site-packages/botocore/utils.py\", line 1382, in __call__\n    with self._open(self._web_identity_token_path) as token_file:\nPermissionError: [Errno 13] Permission denied: '/var/run/secrets/eks.amazonaws.com/serviceaccount/token'
```

user: piotrplenik
issue_8919: state: open
title: Cannot use modifiers like icontains, startswith, etc on notification templates "type" field
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
I _think_ this is a bug (?) but it could also be by design or just a weird quirk.  This field is not useful to search on because it can currently only contain a single value `notification_template`.  The reason why I'm creating an issue is because this field is exposed in the new UI as a search option and this bug was found in testing.  I think it's a low priority issue.

![102129371-021ffa80-3e2e-11eb-95ae-ce7a128c52d2](https://user-images.githubusercontent.com/9889020/102359214-7ec1ee80-3f7e-11eb-824f-fbb38367d4ec.png)

Here's what it looks like in the api browser:

<img width="1678" alt="Screen Shot 2020-12-16 at 9 11 01 AM" src="https://user-images.githubusercontent.com/9889020/102359331-a7e27f00-3f7e-11eb-8bf2-b47073bfd11b.png">

Performing a regular search on this field works fine:

<img width="1679" alt="Screen Shot 2020-12-16 at 9 13 04 AM" src="https://user-images.githubusercontent.com/9889020/102359544-ed06b100-3f7e-11eb-8b9c-c7cf87aedadb.png">

user: mabashian
issue_8858: state: open
title: [ui_next] [ux] Expectation that advanced search queries would replace existing queries and not be additive
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Not a bug, but I was expecting subsequent searches to “replace” the old search, not add on new filters. So if you are searching for something (elapsed time for jobs in my example above), you may realize 20 seconds was too low, then try 100 seconds. I would have to first clear filters, then search 100. 

<img width="641" alt="Screen Shot 2020-12-10 at 6 37 11 PM" src="https://user-images.githubusercontent.com/12446869/101842751-bc55f000-3b16-11eb-970b-1e3de1419f81.png">


user: unlikelyzero
issue_8857: state: open
title: [ui_next] Jobs filter for Job Status 'New' is not well defined.
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
“New” is not a well defined state. It can technically show up, but not through normal job launching. Jobs with “new” status should still show up in the job list, but I think we can remove “new” from the Filter by Status list because it’s misleading.

<img width="610" alt="Screen Shot 2020-12-10 at 6 35 29 PM" src="https://user-images.githubusercontent.com/12446869/101842650-7ef16280-3b16-11eb-960b-f7092bbe7938.png">

##### ENVIRONMENT
* AWX version: 12/10

user: unlikelyzero
issue_8855: state: open
title: [ui_next] Ad-hoc commands don’t have an entry in the “Playbook Run” column
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Ad-hoc commands don’t have an entry in the “Playbook Run” column. 

##### ENVIRONMENT
* AWX version: 12/10

##### STEPS TO REPRODUCE
1. Run ad-hoc command
2. View jobs list
Note: Ad hoc command is visible without entry describing that it was ad-hoc

##### EXPECTED RESULTS
Ad-hoc command description alongside 'Playbook run' description in that column

##### ACTUAL RESULTS
""

##### ADDITIONAL INFORMATION

<img width="624" alt="Screen Shot 2020-12-10 at 6 30 33 PM" src="https://user-images.githubusercontent.com/12446869/101842346-cf1bf500-3b15-11eb-936b-3db0e62eaff1.png">


user: unlikelyzero
issue_8850: state: open
title: [ui_next] Filtering team permissions shifts text enough to be distracting
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Filtering team permissions shifts text enough to be distracting

##### ENVIRONMENT
* AWX version:12/10

##### STEPS TO REPRODUCE
Create a Team
Go to Roles
Click add team permissions
Filter results

##### ADDITIONAL INFORMATION

https://share.getcloudapp.com/d5uPBO9v
user: unlikelyzero
labels: qe:visual: visual defect
issue_8849: state: open
title: [ui_next] Selection + Searching/Filtering within a modal should make it more apparent that the previous selections can be removed
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
For first time users, it's not apparent that searching/filtering for objects within a modal relates to previously selected resources.

```I am creating a new user and associating an org. I selected an org, then searched. Maybe the orgs I have selected should always stay in the results so that I can deselect it?```

<img width="623" alt="Screen Shot 2020-12-10 at 6 04 11 PM" src="https://user-images.githubusercontent.com/12446869/101840452-20c28080-3b12-11eb-870d-33a60aa4248d.png">


##### ENVIRONMENT
* AWX version: 12/10

user: unlikelyzero
issue_8846: state: open
title: [ui_next] Inventory update launched from a schedule does not link to the schedule which launched it
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<img width="626" alt="Screen Shot 2020-12-10 at 5 42 42 PM" src="https://user-images.githubusercontent.com/12446869/101838810-4601bf80-3b0f-11eb-8b00-18cbe05ad5fc.png">

user: unlikelyzero
issue_8845: state: open
title: [ui_next] System Admin should not have an accessible 'Teams' tab if not 'Roles'
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
If I can’t give a system admin roles, then I shouldn’t be able to give him membership to teams.

<img width="412" alt="Screen Shot 2020-12-10 at 5 40 09 PM" src="https://user-images.githubusercontent.com/12446869/101838523-c4119680-3b0e-11eb-8bc2-81eb3e53f8bb.png">


user: unlikelyzero
issue_8844: state: open
title: [ui_next] Implicit read role is shown incorrectly on access list
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Elmo has implicit read role to the team because Elmo is a member of the team. This “implicit” form of permission is mislabeled in “Team Roles”. A team role should be the case when a user is a member of Team A, which has access to Team B. Again, this setup of team-to-team permissions is confusing and should be rare.
I would suggest re-labeling this thing as “Implicit Roles” or something like that.

<img width="627" alt="Screen Shot 2020-12-10 at 5 36 34 PM" src="https://user-images.githubusercontent.com/12446869/101838228-43eb3100-3b0e-11eb-8338-e7029e8368ac.png">

user: unlikelyzero
issue_8843: state: open
title: [ui_next] Inconsistent wording about Access vs Roles vs Permissions
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
First point: consistency of wording
The team page distinguishes between Access and Roles

- Access: give users access to this team
- Roles: give this team access to other things

<img width="432" alt="Screen Shot 2020-12-10 at 5 27 54 PM" src="https://user-images.githubusercontent.com/12446869/101837497-1e115c80-3b0d-11eb-8221-1463dc522ef6.png">


When I go to Access and click through to grant a user access to the team in some way
<img width="220" alt="Screen Shot 2020-12-10 at 5 28 00 PM" src="https://user-images.githubusercontent.com/12446869/101837511-22d61080-3b0d-11eb-81dc-30ec728d1fa7.png">

It uses the wording “Add User Roles”. This is inconsistent use of words, because this is still the task of giving users (some kind of) access to the team.


user: unlikelyzero
issue_8834: state: open
title: [ui_next] Cannot modify user from user to system admin without changing password
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Changing a user to a system admin causes form validation errors on password field.

##### ENVIRONMENT
* AWX version: 12/10

##### STEPS TO REPRODUCE
Weird one: first have an admin user - go in and make them a normal user, hit save, then try to make them an admin user and hit save - then a password error appears.

##### ADDITIONAL INFORMATION
<img width="615" alt="Screen Shot 2020-12-10 at 2 05 31 PM" src="https://user-images.githubusercontent.com/12446869/101817716-c8c75200-3af0-11eb-9b1e-18b745d08607.png">


user: unlikelyzero
issue_8832: state: open
title: [ui_next] [ux] Inconsistent messaging if spaces are added to password
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Space in passwords? Results in a “this field can’t be blank” rather than either accepting spaces or saying “space isn’t a valid password character”.

##### ENVIRONMENT
* AWX version: 12/10

##### STEPS TO REPRODUCE
1. Create a user with spaces in the password

##### EXPECTED RESULTS
"Space isn't a valid password character"

##### ACTUAL RESULTS
"this field can't be blank" error

user: unlikelyzero
issue_8829: state: open
title: [ui_next] Related objects modal could provide a link to add related object if none are found
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
There are a few cases of this, but it would sometimes be nice to have the ability to add a missing resource if one is not already available. This may require some additional thought because you could lose context of your existing resource or have to use multiple tabs.

<img width="632" alt="Screen Shot 2020-12-10 at 1 49 56 PM" src="https://user-images.githubusercontent.com/12446869/101816113-9b79a480-3aee-11eb-880c-d1adff170476.png">

user: unlikelyzero
issue_8818: state: open
title: [ui_next] [UX] List of system admins pollute views of Access tabs
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
We've had many reports in bug bashes that the listing of system admins pollutes the view of 'Access' tabs. In those 'Access' tabs, the user is _only_ interested in non-system admins. When 4 system admins exist on a system, most basic Access views become unusable. A filtered query can be made but we should consider making that filter (or sorted list) by default.

This also applies to permissions in modals.

##### ENVIRONMENT
* AWX version: 12/10

##### EXPECTED RESULTS
As a user trying to understand which users and teams have access to a resource, I'd like to see them listed first! OR only see them with a simple query

##### ACTUAL RESULTS
Access tabs with more than 4 System Admins means that pagination, filtering, and scrolling are required. 

user: unlikelyzero
issue_8814: state: open
title: Job results as matrix/table
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Especially when using non-serial strategy plugins (like host_pinned), the stdout view of a Job is totally useless with many hosts.

I would prefer having a table view of tasks vs. hosts with colored table cells:
![grafik](https://user-images.githubusercontent.com/3628012/101797413-4cda0380-3b0a-11eb-9d9a-00c16a2d7ea1.png)

That actually is a screenshot of some JS that I hacked together as an external HTML page. Would something like that as a PR be integrated into AWX itself?
user: jplitza
issue_8813: state: open
title: [ui_next] Users/n/Tokens view allows a user to filter tokens by description. Tokens don't have descriptions on list view
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Users/n/Tokens view allows a user to filter tokens by description. Tokens don't have descriptions on list view

##### ENVIRONMENT
* AWX version: 12/10

##### STEPS TO REPRODUCE
1. Navigate to your user's token tab.
2. Note the options to search/filter by Name and Description

##### EXPECTED RESULTS
If filtering/searching by description, then show description on list view
user: unlikelyzero
issue_8801: state: open
title: Changing workflow node from a JT that prompts for cred to one that doesn't throws 400
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
For some reason this sounded familiar and I looked back through old issues to see if this was already tracked/expected behavior but I couldn't find anything.

Here's the scenario:

1) Create two job templates.  The first should not have any prompts, the second should prompt for cred but no defaults
2) Create a WFJT
3) Create a single node in the WFJT that points to the JT with cred prompting and provide a credential
4) Save the workflow
5) Edit the workflow and change the node so that it now points to the JT that has no prompts
6) Attempt to save the workflow

Here's the flow in the API browser.  In this scenario, JT with id=11 is the cred prompting JT.  JT with id=10 is the JT without any prompting.

![node_cred_400](https://user-images.githubusercontent.com/9889020/101673063-a6680280-3a24-11eb-9a03-ca653775064e.gif)

The actual error message is:

`{"credentials":["Field is not configured to prompt on launch."]}`

I believe this behavior has been around for a long time.

user: mabashian
issue_8800: state: open
title: Docs "highly recommend" a virtualenv setup that isn't allowed by API
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
The docs for a custom virtualenv specifically recommend using a directory outside of /var/lib/awx/venv for a new virtualenv. If you try to do this, the API won't allow you to register the new virtualenv:

    {"custom_virtualenv":["/opt/my-envs/local-env/ is not a valid virtualenv in /var/lib/awx/venv"]}

##### ENVIRONMENT
* AWX version: 15.0.1
* AWX install method: kubernetes via AWX Operator
* Ansible version:  2.9.14
* Operating System: CentOS 8
* Web Browser: Chrome

##### STEPS TO REPRODUCE

Follow the instructions on https://docs.ansible.com/ansible-tower/latest/html/upgrade-migration-guide/virtualenv.html

##### EXPECTED RESULTS

A second virtualenv to work around issues with azure library versions.

##### ACTUAL RESULTS

    {"custom_virtualenv":["/opt/my-envs/local-env/ is not a valid virtualenv in /var/lib/awx/venv"]}

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: howardjones
issue_8798: state: open
title: Notification webhook test feature sending its own format
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
The "Test Notification" feature does not have an option to send a formatted test message, it simply sends its own formatted request. The problem when using a webhook is that the formatting can determine if the request is rejected by the service, and as such renders the "Test Notification" useless. When setting up a webhook, it is impossible to actually test a notification.

##### ENVIRONMENT
* AWX version: 15.0.1
* AWX install method: docker-compose
* Ansible version:  2.9.15
* Operating System: RHEL 7
* Web Browser: Chrome 87

##### STEPS TO REPRODUCE

Add a new notification using type webhook. I am using Google Chat that simply needs a TARGET URL and Content-Type set. Clicking the "Test Notification" bell will send a statically formatted request that is not customizable.

##### EXPECTED RESULTS

A properly formatted test message body. The format could be specified in CUSTOMIZE MESSAGES... or simply use one of the already customized messages. in my example I need something sent in the format:
{"text": "Ansible Tower Test Notification 4 https://awx.example.com"}

##### ACTUAL RESULTS

{"body": "Ansible Tower Test Notification 4 https://awx.example.com"}

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: haught
issue_8792: state: open
title: Allow to add a new choice for a existing variable in custom credential type after it is already in use
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
I made a form with choices in a custom credential type, this custom credential type is in use in a credential.
if I modify a var name in the INJECTOR, it's fine, but if I want to add a choice for a var already existing I get an error message :

Modifications to inputs are not allowed for credential types that are in use

I could understand if I was trying to modify the field name, as the form is not the same that the one in use, but just adding a choice doesn't modify the fields or the number of fields, nothing really important in fact, but it is blocked

We can't delete all the credential using a credential type, if we just need to add a choice

user: lucas-benedito
issue_8764: state: open
title: ansible-vault variables are imported with extra empty lines
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
I am importing inventory from git repository. I understand that AWX needs to use `__ansible_vault` which is fine. However it changes the input data and adds extra empty lines. If the view is changed to JSON the encrypted string has erroneous `\n` characters embedded.

##### ENVIRONMENT
* AWX version: 15.0.1
* AWX install method: docker on linux
* Ansible version:  2.9.14
* Operating System: Ubuntu 20.04
* Web Browser: Firefox

##### STEPS TO REPRODUCE

Create an inventory with host variable file which has ansible vault encrypted data in a git repository.
```
encrypted_variable: !vault |
  $ANSIBLE_VAULT;1.2;AES256;myvaultid
  37393937383739363161306133623566396530626562373962616235626636383564626631613832
  6534623133626365303931636563346663386335636230350a383832343462313832633464373431
  31346430346364636538353863383966343364316336366430616635643034356365653063636630
  6561336336613637660a343965343137373032636466383566656430663465646335313632363861
  37306136663563376333623031636462323138326639386462363361653234386132303466313439
  32626539656562313165663931323265613063653431633064356633373837313861623037333865
  66326138353530646439653438303463313037616330333964623265303637306239616532666161
  30343539626164366438
```
Import inventory to AWX

##### EXPECTED RESULTS

I expected to see in AWX inventory host variables:
```
encrypted_variable:
  __ansible_vault: |
    $ANSIBLE_VAULT;1.2;AES256;myvaultid
    37393937383739363161306133623566396530626562373962616235626636383564626631613832
    6534623133626365303931636563346663386335636230350a383832343462313832633464373431
    31346430346364636538353863383966343364316336366430616635643034356365653063636630
    6561336336613637660a343965343137373032636466383566656430663465646335313632363861
    37306136663563376333623031636462323138326639386462363361653234386132303466313439
    32626539656562313165663931323265613063653431633064356633373837313861623037333865
    66326138353530646439653438303463313037616330333964623265303637306239616532666161
    30343539626164366438
```

##### ACTUAL RESULTS

Imported data looks like this:
```
encrypted_variable:
  __ansible_vault: >
    $ANSIBLE_VAULT;1.2;AES256;myvaultid

    37393937383739363161306133623566396530626562373962616235626636383564626631613832

    6534623133626365303931636563346663386335636230350a383832343462313832633464373431

    31346430346364636538353863383966343364316336366430616635643034356365653063636630

    6561336336613637660a343965343137373032636466383566656430663465646335313632363861

    37306136663563376333623031636462323138326639386462363361653234386132303466313439

    32626539656562313165663931323265613063653431633064356633373837313861623037333865

    66326138353530646439653438303463313037616330333964623265303637306239616532666161

    30343539626164366438
```

##### ADDITIONAL INFORMATION

I tested by manually modifying the variable to my expected result. It seems to work until I switch between JSON-YAML views in the view. The conversion process adds the extra empty lines and changes the block style.

The JSON view appears as (which seems correct?):
```
 "encrypted_variable": {
  "__ansible_vault": "$ANSIBLE_VAULT;1.2;AES256;myvaultid\n37393937383739363161306133623566396530626562373962616235626636383564626631613832\n6534623133626365303931636563346663386335636230350a383832343462313832633464373431\n31346430346364636538353863383966343364316336366430616635643034356365653063636630\n6561336336613637660a343965343137373032636466383566656430663465646335313632363861\n37306136663563376333623031636462323138326639386462363361653234386132303466313439\n32626539656562313165663931323265613063653431633064356633373837313861623037333865\n66326138353530646439653438303463313037616330333964623265303637306239616532666161\n30343539626164366438\n"
 }
```

It seems like wrong block style is used?
user: yurtesen
issue_8760: state: open
title: Programmatically detect when channels is overloaded
body: There are two ways that I can think of to know that channels are overloaded. (1) log messages start to show up from the channels layer alerting that the queue is overloaded and (2) the receiving side won't get the messages that would overflow the queue. These two methods aren't great and lend themselves to a programmatic detection of overload.

This work may involve reaching into the `channels_redis` internals to determine. Maybe inheriting from `RedisChannelLayer`  https://github.com/django/channels_redis/blob/master/channels_redis/core.py#L196 and then setting `BACKEND` appropriately https://github.com/ansible/awx/blob/devel/awx/settings/defaults.py#L782

The place where an overflow is detected is here https://github.com/django/channels_redis/blob/master/channels_redis/core.py#L710 Note that this is kind of the tail end of the overflow, when the queue is full. Ideally, we would know if things begin to backup or cross a lower watermark.

This work _may_ require submitting a PR upstream to change the `channels_redis` interface to provide some sort of notification/callback interface to allow an observer to know when the sub-system has pressure.
user: chrismeyersfsu
labels: type:feature: prioritized on a feature board
issue_8759: state: open
title: Measure channels maximum performance
body: AWX Websockets relies on Channels + the channels redis connection implementation. What is the performance of this subsystem when considering our job event workload?

To answer this question we should write a simple client/server, without considering awx. Note, it might be easiest to shove this code in AWX but won't consider things like user session/group subscription etc.

With this simple client/server we should send an event-like workload across at a growing rate until the subsystem starts to get behind and falls over. Below is a chart to give an idea of the absolute maximum rate that the hardware can support. The channels performance will surely be less. We want to know how much less. The performance we ascertain here will be the maximum we can expect or hope to get out of AWX.

I will note that it is hard to programmatically determine when channels is overloaded. Maybe https://github.com/ansible/awx/issues/8760 is a precursor to this work.

Tower Nodes | Bandwidth (Gb/s) 15k events/s | Bandwidth (Gb/s) 100k events/s
-- | -- | --
2 | 0.4577636719 | 3.051757813
4 | 0.9155273438 | 6.103515625
8 | 1.831054688 | 12.20703125
16 | 3.662109375 | 24.4140625
32 | 7.32421875 | 48.828125
64 | 14.6484375 | 97.65625
128 | 29.296875 | 195.3125

https://github.com/chrismeyersfsu/channels_redis_debug <-- Channels only with tower removed to performance test channels. Seeing =~ 1,500 events/5 seconds = 300 events/s max
user: chrismeyersfsu
issue_8736: state: open
title: Tower Modules Schedules - Allow multiple days to be selected in a month
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
We would like to create an AWX schedule that complies with the Microsoft monthly patch cycle (Patch Tuesday as it is infamously called).  However, instead of the 2nd Tuesday of each month we would like to schedule the 1st Saturday after the 2nd Tuesday of each month.

In other programs we can create an RRULE using the following:
```
rrule: "DTSTART:20191219T130551Z RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=SA;BYMONTHDAY=12,13,14,15,16,17,18"
```
This will try to execute each month on the days listed but only if they are a Saturday.  We have found that AWX's BYMONTHDAY option does not allow for more than one day number.

We would either like BYMONTHDAY to allow more than one number or if someone can tell us another way to set an AWX schedule to allow the rule we are looking to achieve.
user: jpell958
issue_8735: state: open
title: Display Vault ID on Credential Chip for Vaults
body: Once is resolved https://github.com/ansible/awx/issues/8532 Credential Chips will be able to properly render the vault ID
Blocked until [this](https://github.com/ansible/awx/pull/8399) merges.  Once this merges we will probably need to make an api request to get the credentials related to the resource in question, which will tell us what type of credentials they are. The credential data that comes back in a `readDetail` request does not have this data and the api team is not able to add that data.  

##### ISSUE TYPE
 - Bug

##### SUMMARY

![Screen Shot 2020-12-02 at 3 01 10 PM](https://user-images.githubusercontent.com/39280967/100924939-4e268300-34af-11eb-9ef1-65c9e8bb3fa2.png)

user: AlexSCorey
issue_8734: state: open
title: vSphere Automation SDK not included, vmware tags not supported in inventory
body: ##### ISSUE TYPE
 - Bug Report

SUMMARY

VMware dynamic inventory pulling the tag with empty value 

STEPS TO REPRODUCE

Sync with vcenter 

##### ENVIRONMENT
Ansible 2.9.14
AWX Version 15.1 
vshpere 6.5 

Sources Variables: 

hostnames:
- config.name
keyed_groups:
- key: guest.guestFamily
  prefix: ''
  separator: ''
plugin: community.vmware.vmware_vm_inventory
properties:
- name
- network
- guest
- config
- tag
strict: false
with_nested_properties: true


EXPECTED RESULTS
I expected sync VM with tags value and filter with tag to create inventory by Environments.

ACTUAL RESULTS

i get tags with empty value like these tag: []


![image](https://user-images.githubusercontent.com/20398877/100923440-76c67100-34df-11eb-92ea-96cef2136c93.png)


Thanks for your time .

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->


user: anasskh
issue_8730: state: open
title: [RFE]: Limit users to see only the job logs for there respective Teams/Orgs 
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Currently, when a common job template is shared between multiple teams. All users from the teams have access to see logs for all prior runs. 

Need a way to limit this so users only see runs from there Org/Team.

For e.g. If I have a common patching template: [COMMON] Linux OS Patching and share with the DBA Team and the Test Team:
if user1 from the Test Team uses the template on there VM the DBA Team can see that in the job screen.

Looking to end up with:
User 1 from Test Team runs the  [COMMON] Linux OS Patching and sees the log for that run
User 2 from the DBA Team is unable to know or see that the Test Team ran the template
user: SWADESNA
issue_8725: state: open
title: Syncing of imported inventory file just hangs
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Inventory sync is failing when importing an inventory from a project.

##### ENVIRONMENT
* AWX version: 15.0.1
* AWX install method: docker on linux
* Ansible version:  2.9.14
* Operating System:  Windows 10
* Web Browser:     Chrome

##### STEPS TO REPRODUCE

1.  Create a project to clone a repo
2.  Create an inventory source to import an inventory file from the repo.
3.  Launch inventory sync for the source.

##### EXPECTED RESULTS

I expected sync to complete, and populate the inventory file in AWX.

##### ACTUAL RESULTS

Job hangs indefinitely as follows:

1 2.256 INFO Updating inventory 8: POS-all.inv

2 2.273 DEBUG Using base command: python /usr/bin/ansible-inventory -i /tmp/awx_184_pmnkjr_r/project/hosts/POS/POS-all.inv --playbook-dir /tmp/awx_184_pmnkjr_r/project/hosts/POS -vvvvv

3 2.273 INFO Reading Ansible inventory source: /tmp/awx_184_pmnkjr_r/project/hosts/POS/POS-all.inv

4 2.275 INFO Using VIRTUAL_ENV: /var/lib/awx/venv/ansible

5 2.275 INFO Using PATH: /var/lib/awx/venv/ansible/bin:/var/lib/awx/venv/awx/bin:/usr/pgsql-10/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

6 2.275 INFO Using PYTHONPATH: /var/lib/awx/venv/ansible/lib/python3.6/site-packages:


##### ADDITIONAL INFORMATION

![image](https://user-images.githubusercontent.com/22781653/100777993-b39d4580-33c3-11eb-9833-76b473da31b2.png)



user: dswan2
issue_8717: state: open
title: LDAP map to Team (or organization) using attributes instead of group
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

Currently (except if I've missed something, so please teach me), we can map user to organization or team using LDAP groups.
However, in my use case, the real "team" value is not a LDAP group but a simple attribute.

In other product, called Sonatype Nexus 3, there is a notion of dynamic group that do the stuff:

https://help.sonatype.com/repomanager3/system-configuration/user-authentication/ldap#LDAP-UserandGroupMapping

![Screen Shot 2020-12-01 at 12 25 35](https://user-images.githubusercontent.com/275609/100734683-552a9400-33d0-11eb-8dec-b9981d1a4ad1.png)

I'd like to know if is something you'll accept as new feature?

user: kakawait
labels: component:authentication: For issues related to authentication
issue_8708: state: open
title: Search by role ID does not return roles granted via team
body: If I am on an access list in the UI, I can search by a role ID and get a list back of all of the users granted that role directly, but I do not get back a list of users granted that role via a team. 


##### ISSUE TYPE
 - Bughancement

##### SUMMARY
If I am searching for all users who have admin rights on a JT. I should get back the sys admin, org admin, org jt admin, specific JT admin and I do for individual users. However, if a team had been granted admin rights, the members on that team are not returned with the list.
##### ENVIRONMENT
* AWX version: 14.1.0
* AWX install method: docker for mac
* Ansible version:  2.9.13
* Operating System: Mojave
* Web Browser: Chrome

##### STEPS TO REPRODUCE

1)Create a Job template that has users of all different permissions.
2) Create a team and give that team admin rights on the job template.
3) Go to the access list of that job template.  Search by admin.
see https://github.com/ansible/awx/pull/8640 for reference

##### EXPECTED RESULTS

It returns all the users, including those on a team with admin rights.

##### ACTUAL RESULTS

It excludes users on a team that have admin rights.

##### ADDITIONAL INFORMATION
the UI does not have this functionality so this could probably be tested better in the api gui.

user: AlexSCorey
issue_8701: state: open
title: Installation fails in LXC
body: 
##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug Report

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - Installer

##### SUMMARY
Whenever I install AWX under ProxMox in a Debian 10 LCX container with Docker Compose I get this error message after running the installation playbook
###### Error message:
fatal: [localhost]: FAILED! => {"changed": false, "errors": [], "module_stderr": "Creating awx_web ... \n\u001b[1A\u001b[2K\nCreating awx_web ... \n\u001b[1B", "module_stdout": "", "msg": "Error starting project Encountered errors while bringing up the project."}

##### ENVIRONMENT
* AWX version: 15.0.1
* AWX Linux / Docker Compose
* Ansible version:  X.Y.Z
* Operating System: Linux
* Web Browser: Firefox ESR
user: nickhildebrandt
issue_8698: state: open
title: RFE: Support MS-CHAPv2 for RADIUS authentication
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI
 
##### SUMMARY
Actually, RADIUS authentication uses the PAP protocol.
It would be more secure to use MS-CHAPv2. 
Or even better, to allow the user to choose.

##### ENVIRONMENT
* AWX version: 10.0.0
* AWX install method: docker on linux
* Ansible version:  2.9.15
* Operating System: Debian Buster
* Web Browser: Firefox 68.4.1ESR

##### STEPS TO REPRODUCE
A combo box could be added on the "RADIUS settings" page to choose between PAP, CHAP, and MS-CHAPv2

user: mooky31
labels: component:authentication: For issues related to authentication
issue_8696: state: open
title: Redis socket issue, and work-a-round
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
While trying to run a local AWX instance on my Mac using Docker and Docker compose, the OS was unable to create the socket binding for Redis. It was working without any issue before, and I think the issue started after performing the macOS Catalina upgrade to version 10.15.7 (19H15). Next, I am currently using Docker Engine version 19.03.13.

Long story short I still I have no clue why, and stopped looking for the actual root cause. 
Instead I went for a work-a-round by exposing the Redis socket volume mount point using a Busybox container.

docker-compose.yml (with the busybox work-a-round):
```yaml
version: '2'
services:

  web:
    image: ansible/awx:15.0.1
    container_name: awx_web
    depends_on:
      - redis
      - postgres
    ports:
      - "80:8052"
    hostname: awxweb
    user: root
    restart: unless-stopped
    volumes:
      - supervisor-socket:/var/run/supervisor
      - rsyslog-socket:/var/run/awx-rsyslog/
      - rsyslog-config:/var/lib/awx/rsyslog/
      - "${PWD}/SECRET_KEY:/etc/tower/SECRET_KEY"
      - "${PWD}/environment.sh:/etc/tower/conf.d/environment.sh"
      - "${PWD}/credentials.py:/etc/tower/conf.d/credentials.py"
      - "${PWD}/nginx.conf:/etc/nginx/nginx.conf:ro"
    volumes_from:
      - redis_socket
    environment:
      http_proxy:
      https_proxy:
      no_proxy:

  task:
    image: ansible/awx:15.0.1
    container_name: awx_task
    depends_on:
      - redis
      - web
      - postgres
    command: /usr/bin/launch_awx_task.sh
    hostname: awx
    user: root
    restart: unless-stopped
    volumes:
      - supervisor-socket:/var/run/supervisor
      - rsyslog-socket:/var/run/awx-rsyslog/
      - rsyslog-config:/var/lib/awx/rsyslog/
      - "${PWD}/SECRET_KEY:/etc/tower/SECRET_KEY"
      - "${PWD}/environment.sh:/etc/tower/conf.d/environment.sh"
      - "${PWD}/credentials.py:/etc/tower/conf.d/credentials.py"
    volumes_from:
      - redis_socket
    environment:
      http_proxy:
      https_proxy:
      no_proxy:
      SUPERVISOR_WEB_CONFIG_PATH: '/etc/supervisord.conf'

  redis:
    image: redis:6.0.9-alpine
    container_name: awx_redis
    restart: unless-stopped
    environment:
      http_proxy:
      https_proxy:
      no_proxy:
    command: ["/usr/local/etc/redis/redis.conf"]
    volumes:
      - "${PWD}/redis.conf:/usr/local/etc/redis/redis.conf:ro"
    volumes_from:
      - redis_socket

  redis_socket:
    image: busybox
    command: chmod 777 /var/run/redis && chown 999:1000 /var/run/redis
    volumes:
      - /var/run/redis/

  postgres:
    image: postgres:10
    container_name: awx_postgres
    restart: unless-stopped
    volumes:
      - pgdocker:/var/lib/postgresql/data/pgdata:Z
    environment:
      POSTGRES_USER: awx
      POSTGRES_PASSWORD: awxpass
      POSTGRES_DB: awx
      PGDATA: /var/lib/postgresql/data/pgdata
      http_proxy:
      https_proxy:
      no_proxy:

volumes:
  pgdocker:
  supervisor-socket:
  rsyslog-socket:
  rsyslog-config:

```

When not using the Busybox container and volume mount locally, the Redis container is unable to bind the redis.sock file and fails with the error message below:

Using the default Redis container:
```bash
$ docker-compose up redis
awx_redis is up-to-date
Attaching to awx_redis
awx_redis   | 1:C 26 Nov 2020 13:25:00.284 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
awx_redis   | 1:C 26 Nov 2020 13:25:00.284 # Redis version=6.0.9, bits=64, commit=00000000, modified=0, pid=1, just started
awx_redis   | 1:C 26 Nov 2020 13:25:00.284 # Configuration loaded
awx_redis   | 1:M 26 Nov 2020 13:25:00.290 # Opening Unix socket: bind: Input/output error
```

Using the Alpine Redis container:
```bash
$ docker-compose up redis
Starting awx_redis ... done
Attaching to awx_redis
awx_redis   | 1:C 26 Nov 2020 13:27:17.414 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
awx_redis   | 1:C 26 Nov 2020 13:27:17.414 # Redis version=6.0.9, bits=64, commit=00000000, modified=0, pid=1, just started
awx_redis   | 1:C 26 Nov 2020 13:27:17.414 # Configuration loaded
awx_redis   | 1:M 26 Nov 2020 13:27:17.420 # Opening Unix socket: bind: I/O error
```

Using the Alpine Redis with Busybox container:
```bash
docker-compose up redis
Starting awx_compose_redis_socket_1 ... done
Creating awx_redis                  ... done
Attaching to awx_redis
awx_redis       | 1:C 26 Nov 2020 13:30:12.450 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
awx_redis       | 1:C 26 Nov 2020 13:30:12.450 # Redis version=6.0.9, bits=64, commit=00000000, modified=0, pid=1, just started
awx_redis       | 1:C 26 Nov 2020 13:30:12.450 # Configuration loaded
awx_redis       | 1:M 26 Nov 2020 13:30:12.455 * Running mode=standalone, port=0.
awx_redis       | 1:M 26 Nov 2020 13:30:12.455 # Server initialized
awx_redis       | 1:M 26 Nov 2020 13:30:12.456 * The server is now ready to accept connections at /var/run/redis/redis.sock
```

The redis.conf file:
```
bind 127.0.0.1
port 0
unixsocket /var/run/redis/redis.sock
unixsocketperm 770
```

##### ENVIRONMENT
* AWX version: 15.0.1
* AWX install method: docker for mac
* Ansible version:  n/a
* Operating System: n/a
* Web Browser: n/a

##### STEPS TO REPRODUCE

`docker-compose up redis`

##### EXPECTED RESULTS

Create and share the redis.sock socket across Redis, and AWX task/web containers.

##### ACTUAL RESULTS

The error from the Redis container logs:
`Opening Unix socket: bind: Input/output error` or `Opening Unix socket: bind: Input/output error`

The error/ stacktrace from the AWX web container logs:
```
awx_web     | 2020-11-26 13:26:45,747 WARNING  encountered an error communicating with redis.
awx_web     | Traceback (most recent call last):
awx_web     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/redis/connection.py", line 552, in connect
awx_web     |     sock = self._connect()
awx_web     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/redis/connection.py", line 905, in _connect
awx_web     |     sock.connect(self.path)
awx_web     | FileNotFoundError: [Errno 2] No such file or directory
awx_web     | 
awx_web     | During handling of the above exception, another exception occurred:
awx_web     | 
awx_web     | Traceback (most recent call last):
awx_web     |   File "/var/lib/awx/venv/awx/bin/daphne", line 8, in <module>
awx_web     |     sys.exit(CommandLineInterface.entrypoint())
awx_web     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/daphne/cli.py", line 191, in entrypoint
awx_web     |     cls().run(sys.argv[1:])
awx_web     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/daphne/cli.py", line 252, in run
awx_web     |     application = import_by_path(args.application)
awx_web     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/daphne/utils.py", line 12, in import_by_path
awx_web     |     target = importlib.import_module(module_path)
awx_web     |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_web     |     return _bootstrap._gcd_import(name[level:], package, level)
awx_web     |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_web     |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_web     |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_web     |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_web     |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_web     |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_web     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/asgi.py", line 36, in <module>
awx_web     |     channel_layer = get_default_application()
awx_web     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/channels/routing.py", line 29, in get_default_application
awx_web     |     module = importlib.import_module(path)
awx_web     |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_web     |     return _bootstrap._gcd_import(name[level:], package, level)
awx_web     |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_web     |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_web     |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_web     |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_web     |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_web     |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_web     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/routing.py", line 36, in <module>
awx_web     |     URLRouter(websocket_urlpatterns)
awx_web     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/routing.py", line 25, in __init__
awx_web     |     raise e
awx_web     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/routing.py", line 20, in __init__
awx_web     |     for k in r.scan_iter('asgi:*', 500):
awx_web     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/redis/client.py", line 2097, in scan_iter
awx_web     |     count=count, _type=_type)
awx_web     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/redis/client.py", line 2077, in scan
awx_web     |     return self.execute_command('SCAN', *pieces)
awx_web     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/redis/client.py", line 875, in execute_command
awx_web     |     conn = self.connection or pool.get_connection(command_name, **options)
awx_web     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/redis/connection.py", line 1185, in get_connection
awx_web     |     connection.connect()
awx_web     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/redis/connection.py", line 557, in connect
awx_web     |     raise ConnectionError(self._error_message(e))
awx_web     | redis.exceptions.ConnectionError: Error 2 connecting to unix socket: /var/run/redis/redis.sock. No such file or directory.
```

##### ADDITIONAL INFORMATION


user: velzend
issue_8691: state: open
title: [ui_next] Schedule Details Toggle has odd calculation for tooltip midpoint calc
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Schedule Details Toggle has odd calculation for tooltip midpoint calc

##### ENVIRONMENT
* AWX version: 1e66a977c767fa3a7b5e9960af90afb6875d7015

##### STEPS TO REPRODUCE
1. Navigate to the Schedule Details page for a Resource
2. Hover over the toggle button

##### EXPECTED RESULTS
Calculate the midpoint over the toggle

##### ACTUAL RESULTS
Calculated midpoint over the toggle + text. This becomes an issue with non-english languages

##### ADDITIONAL INFORMATION
<img width="672" alt="Screen Shot 2020-11-25 at 5 50 57 PM" src="https://user-images.githubusercontent.com/12446869/100289647-60507080-2f47-11eb-829b-3d206da6851c.png">


user: unlikelyzero
labels: qe:visual: visual defect
issue_8689: state: open
title: [ui_next] Schedule/details page causes the page to briefly flicker on load
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Adding or Editing a schedule on a resource causes the page to briefly flicker. I think it's rerouting to details by default after attempting another route.

##### ENVIRONMENT
* AWX version: 1e66a977c767fa3a7b5e9960af90afb6875d7015
* Operating System: MacOS 10.15.7
* Web Browser: Chrome 89

##### STEPS TO REPRODUCE
View a Schedule's details page on a resource like /projects/10/schedules/8/details

##### EXPECTED RESULTS
No flicker on initial load

##### ACTUAL RESULTS
Flicker on initial load

##### ADDITIONAL INFORMATION
Cannot capture with a gif

user: unlikelyzero
issue_8688: state: open
title: [ui_next] Host filter lookup modal has Z-Depth issues with the dropdown component
body: #### ISSUE TYPE
 - Bug Report

##### SUMMARY
Host filter lookup modal has Z-Depth issues with the dropdown component

##### ENVIRONMENT
* AWX version: 1b233aa8cc9fe34dd78124d7a049ccbc1e213b23

##### STEPS TO REPRODUCE
1. Create a Smart Inventory
2. On Smart Host Filter Modal, Click on the filter dropdown
Note: may require empty dataset

##### ADDITIONAL INFORMATION
<img width="1269" alt="Screen Shot 2020-11-25 at 3 01 21 PM" src="https://user-images.githubusercontent.com/12446869/100276397-75b9a080-2f2f-11eb-9ca7-442a358a86b9.png">


user: unlikelyzero
labels: qe:visual: visual defect
issue_8664: state: open
title: Add rocket icon to Launch button
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
I have a number of users who are very confused the first time or two with the relationship between the Launch button and the rocket icon used to launch jobs in other places. My suggestion is to tie the two together by adding the icon to the Launch button so that there is an immediate recognition. 
user: gforster
issue_8639: state: open
title: DockerHub Pull Rate Limiting: Add ability to specify alternative registry for Docker CentOS 8 and Redis images
body: ##### ISSUE TYPE

Because DockerHub limits pulls to a client, we're seeing issues in building AWX when Docker attempts pulling CentOS 8 and Redis images. We do have an in-house Artifactory server that does serve as a Docker image registry which we also use to mirror DockerHub and cache images locally. While we can set `dockerhub_base` in inventory to `my.artifactory.instance/docker-official-mirror/ansible`, the CentOS 8 and Redis images are hard-coded to use DockerHub.

To get around this, part of my playbook for building AWX includes:

```yml

    - name: Pull CentOS 8 image from DockerHub via Artifactory
      docker_image:
        name: my.artifactory.instance/docker-official-mirror/centos:8
        state: present
        pull: yes
      register: centos_image_pull

    - name: Pull Redis image from DockerHub via Artifactory
      docker_image:
        name: my.artifactory.instance/docker-official-mirror/redis:latest
        state: present
        pull: yes
      register: redis_image_pull

    - name: Tag CentOS 8 Image
      docker_image:
        name: my.artifactory.instance/docker-official-mirror/centos:8
        repository: centos:8
        pull: no
        state: present
      when: centos_image_pull.changed

    - name: Tag Redis Image
      docker_image:
        name: my.artifactory.instance/docker-official-mirror/redis:latest
        repository: redis:latest
        pull: no
        state: present
      when: redis_image_pull.changed

```

Then during the build stage, Docker just uses the local registry's images. However, it would be easier if we could specify something along the lines of `dockerhub_base_redis`, `dockerhub_base_centos` or just specify a private registry to grab ALL images from.

user: isuftin
issue_8634: state: open
title: Evaluate use singular when deleting only one item
body: 
##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Currently all delete modals are displaying the name of resource to be deleted using plural, even when just one item is selected. Evaluate the usage of singular when just one is being selected to be deleted.

![image](https://user-images.githubusercontent.com/9053044/99608848-bc157980-29dc-11eb-80ed-ff979c0da5a1.png)

![image](https://user-images.githubusercontent.com/9053044/99608885-cd5e8600-29dc-11eb-9da5-83fdb1c861db.png)


user: nixocio
issue_8627: state: open
title: [ui_next] Display of Job Timeout is inconsistent
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Prompt On Launch Job Timeout is inconsistent between Add/Edit Form, Detail View, and POL View. In general, I think we should consider showing 'Disabled' if 0 = Disabled. Also Disabled =/= 0 =/= 0m 0s

##### ENVIRONMENT
* AWX version: 10664d1931d789c281e2c9d3d2f14c0a69cb9e13

##### EXPECTED RESULTS
I would expect the Detail View, Add/Edit Form View, and POL View to all show consistent information about Job Timeout

##### ACTUAL RESULTS
Job Details
<img width="208" alt="Screen Shot 2020-11-18 at 3 25 01 PM" src="https://user-images.githubusercontent.com/12446869/99583909-3e3c7880-29b2-11eb-87dc-0742abdeb8b6.png">
Job Add/Edit
<img width="495" alt="Screen Shot 2020-11-18 at 3 25 33 PM" src="https://user-images.githubusercontent.com/12446869/99583968-514f4880-29b2-11eb-9b74-b45bb468db8e.png">
Prompt on Launch
<img width="239" alt="Screen Shot 2020-11-18 at 3 26 01 PM" src="https://user-images.githubusercontent.com/12446869/99584007-64faaf00-29b2-11eb-9f64-a47b9f4ddc29.png">

user: unlikelyzero
issue_8623: state: open
title: [ui_next] Basic search for 'Name' includes the raw API query language
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Basic search for 'Name' includes the raw API query language. Seems very specific and also gets cut off if too long `(Source Control URL (scm...`

##### ENVIRONMENT
* AWX version: b338da40c534d1b2809b5426b61f13eff7770434

##### STEPS TO REPRODUCE
1. Search for something on a list

When not using an advanced search, the specificity of name__icontains seems unnecessary and causes the chiptext to wrap 

##### ADDITIONAL INFORMATION

![Screen Shot 2020-11-18 at 11 45 07 AM](https://user-images.githubusercontent.com/12446869/99560130-85ffd780-2993-11eb-9923-246590cb13dd.png)


user: unlikelyzero
issue_8621: state: open
title: [ui_next] WF Node Modal renders a resizing window inside a resizing window
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
WF Node Modal renders a resizing window inside a resizing window

##### ENVIRONMENT
* AWX version: https://github.com/ansible/awx/pull/8399 and likely `devel`
* Operating System: Fedora 32
* Web Browser: Chrome 86

##### STEPS TO REPRODUCE
1. Navigate to the WFViz
2. Launch a Node Modal with at least 5 options (like 5 available JTs)
Note the second window frame

##### EXPECTED RESULTS
No resizing window around Modal

##### ACTUAL RESULTS
Resizing window around Modal

##### ADDITIONAL INFORMATION
![Screen Shot 2020-11-18 at 11 31 36 AM](https://user-images.githubusercontent.com/12446869/99558352-a333a680-2991-11eb-98bb-3418375772be.png)

user: unlikelyzero
labels: qe:visual: visual defect
issue_8609: state: open
title: Further separate and plugin-ize notifications, credential plugins, etc for maintainability and extensibility
body: 
##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

With https://github.com/ansible/awx/issues/5157 , we are moving Ansible execution to containerized images, so that if customization of the way Ansible is executed is needed, it is relatively simple to build a new image with those customizations (for both playbook runs and inventory usage).

We still have a few areas where we have 'plugins' that can have arbitrary dependencies:
- notifications
- credential plugins

It may be useful to rearchitect how these are done so that they also can run in the context of a customizable container, and do not require modification of the base application image.


user: wenottingham
issue_8577: state: open
title: Add verify_ssl option for HashiCorp Vault Secret Lookup Credential in Ansible Tower UI
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Currently "verify_ssl" option not available in UI for credential type "HashiCorp Vault Secret Lookup" like OpenShift/Kubernetes credentials type.

**Verify SSL** : Optionally you can check this option to allow Tower to verify the server’s SSL certificate is valid and trusted. Environments that use internal or private CA’s should leave this option unchecked to disable verification.

##### Customer Explanation:
I would like to have a verify_ssl option (type boolean) when I select HashiCorp Vault Secret Lookup from Ansible Tower UI.
user: swatinarvekar
issue_8573: state: open
title: Allow JWT based Authentication for CyberArk vault
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
CyberArk vault currently do not support JWT based authentication.

##### Proposed Feature:
Customer would like to have the JWT based authentication to connect and fetch certificates from CyberArk vault.

##### Customer Explanation:
To secure the access to the CyberArk vault (https://www.cyberark.com) we must use a certificate or JWT (https://jwt.io). Right now, Ansible Tower does not have JWT as a way to secure data transfers. 

user: swatinarvekar
issue_8571: state: open
title: Add User-Friendly Messaging to Tracebacks (Project Updates)
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Per an user's request, they would like to see friendlier messaging around tracebacks, specifically in project updates. The user had a scheduled job that ran during a SCM maintenance window. From the information gathered, it appears Tower (AWX) dispatched the project update to a node that did not have a local clone of the project. As expected, Tower attempted to fetch a clone of the project, however, the attempt failed as the SCM system was offline. Tower reported the following after the update attempt:

~~~
Traceback (most recent call last):
 File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/tasks.py", line 1255, in run self.pre_run_hook(self.instance, private_data_dir)
 File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/tasks.py", line 1761, in pre_run_hook raise RuntimeError(msg)
RuntimeError: The project revision for this job template is unknown due to a failed update.
~~~

Before coming to the possible conclusion, the user had trouble diagnosing what caused the failure, given that the project did not have Update Revision on Launch selected or anything that indicated to dynamically pull from SCM. They're wondering if it's possible to expose potential reason(s) for the traceback. Maybe something like this, if possible (similar to PostgreSQL messaging):

~~~
Traceback (most recent call last):
 File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/tasks.py", line 1255, in run self.pre_run_hook(self.instance, private_data_dir)
 File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/tasks.py", line 1761, in pre_run_hook raise RuntimeError(msg)
RuntimeError: The project revision for this job template is unknown due to a failed update. HINT(S): Is Tower able to access the remote SCM system? If Update Revision on Launch is not selected but Tower still attempted an update, did the execution node have a local clone of the project?
~~~

See: https://www.postgresql.org/docs/current/plpython-util.html
user: imareporter
issue_8569: state: open
title: AWX 15.0.1: AWS EC2 Dynamic Source Inventory is broken 
body: 
##### ISSUE TYPE
 - Bug Report

##### SUMMARY

Using AWS secrets or IAM Roles in AWS and AWX version 14.1.0 (Ansible 2.9.11) we are able to start the sync process and use dynamic inventories.

It seems the exact same setup with AWX version 15.0.1, the dynamic source inventory is broken. The job sync fails and the UI has changed (see the screenshots).

##### ENVIRONMENT
* AWX version: 15.0.1
* AWX install method: Kubernetes
* Ansible version:  2.9.14
* Operating System: Centos
* Web Browser: Chrome

##### STEPS TO REPRODUCE
Under Inventories -> Click on an existnig inventory -> Click on Sources tab -> Create a new source -> Choose Source `Amazon EC2`  -> Save


##### EXPECTED RESULTS

When you start a Sync Process job you should see hosts to be populated in your dynamic inventory.

##### ACTUAL RESULTS

Sync Process job fails
```
2020-11-10 22:09:19,903 INFO     awx.main.commands.inventory_import Updating inventory 4: dynamic inventory ng-xspdev TowerManaged tag
2020-11-10 22:09:19,913 INFO     awx.main.commands.inventory_import Reading Ansible inventory source: /tmp/awx_4_ucw29p7p/aws_ec2.yml
2020-11-10 22:09:19,914 INFO     awx.main.commands.inventory_import Using VIRTUAL_ENV: /var/lib/awx/venv/ansible
2020-11-10 22:09:19,914 INFO     awx.main.commands.inventory_import Using PATH: /var/lib/awx/venv/ansible/bin:/var/lib/awx/venv/awx/bin:/usr/pgsql-10/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
2020-11-10 22:09:19,914 INFO     awx.main.commands.inventory_import Using PYTHONPATH: /var/lib/awx/venv/ansible/lib/python3.6/site-packages:
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/bin/awx-manage", line 8, in <module>
    sys.exit(manage())
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 154, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 1142, in handle
    raise exc
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 1032, in handle
    venv_path=venv_path, verbosity=self.verbosity).load()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 208, in load
    return self.command_to_json(base_args + ['--list'])
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 191, in command_to_json
    self.method, proc.returncode, stdout, stderr))
RuntimeError: ansible-inventory failed (rc=1) with stdout:
stderr:
ansible-inventory 2.9.14
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/var/lib/awx/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible-inventory
  python version = 3.6.8 (default, Apr 16 2020, 01:36:27) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]
Using /etc/ansible/ansible.cfg as config file
[WARNING]:  * Failed to parse /tmp/awx_4_ucw29p7p/aws_ec2.yml with auto plugin:
Failed to describe instances: An error occurred (UnauthorizedOperation) when
calling the DescribeInstances operation: You are not authorized to perform this
operation.
  File "/usr/lib/python3.6/site-packages/ansible/inventory/manager.py", line 280, in parse_source
    plugin.parse(self._inventory, self._loader, source, cache=cache)
  File "/usr/lib/python3.6/site-packages/ansible/plugins/inventory/auto.py", line 58, in parse
    plugin.parse(inventory, loader, path, cache=cache)
  File "/var/lib/awx/vendor/awx_ansible_collections/ansible_collections/amazon/aws/plugins/inventory/aws_ec2.py", line 642, in parse
    results = self._query(regions, filters, strict_permissions)
  File "/var/lib/awx/vendor/awx_ansible_collections/ansible_collections/amazon/aws/plugins/inventory/aws_ec2.py", line 529, in _query
    return {'aws_ec2': self._get_instances_by_region(regions, filters, strict_permissions)}
  File "/var/lib/awx/vendor/awx_ansible_collections/ansible_collections/amazon/aws/plugins/inventory/aws_ec2.py", line 441, in _get_instances_by_region
    raise AnsibleError("Failed to describe instances: %s" % to_native(e))
[WARNING]: Unable to parse /tmp/awx_4_ucw29p7p/aws_ec2.yml as an inventory
source
ERROR! No inventory was parsed, please check your configuration and options.
```

##### ADDITIONAL INFORMATION

**INSTANCE FILTERS** has been renamed to **HOST FILTER**


14.1.0
<img width="1441" alt="Screen Shot 2020-11-10 at 5 33 03 PM" src="https://user-images.githubusercontent.com/2202932/98742002-a5877680-237b-11eb-9c0d-ff2d3d4b8e3d.png">


15.0.1
**REGIONS** has been completely removed
**ENABLE VARIABLE** and **ENABLE VALUE** has been added.

<img width="1454" alt="Screen Shot 2020-11-10 at 5 32 49 PM" src="https://user-images.githubusercontent.com/2202932/98742000-a5877680-237b-11eb-9120-cc779c2746dd.png">


user: nicolas-g
issue_8561: state: open
title: AWX workflow_templates ignore job_template LIMIT after LIMIT field in workflow_template has been changed at least once
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
AWX workflow_templates ignore the LIMIT specified in job_templates if, under certain conditions, LIMIT is set in the corresponding job_template as "Prompt on Launch".

##### ENVIRONMENT
* AWX version: 15.0.0
* AWX install method: docker on linux
* Ansible version:  2.9.14
* Operating System: Debian 10.5
* Web Browser: Firefox 82.0 (64-Bit)

##### STEPS TO REPRODUCE

Create:
- AWX job_template including a LIMIT (during execution, the job_template respects the LIMIT without "prompt on launch" as expected). The job_type does not matter here.
- AWX workflow_template without LIMIT and add the job_template (still including the original LIMIT without "prompt on launch") to the workflow_template.

Execute the workflow_template as follows:
- workflow_template run without LIMIT, job_template with LIMIT (no prompt on launch): job_template LIMIT respected
- set job_template LIMIT checkbox for "prompt on launch"
- workflow_template run without LIMIT, job_template with LIMIT (including prompt on launch): job_template LIMIT respected
- workflow_template run with LIMIT (change to some value), job_template with LIMIT (including prompt on launch): workflow_template LIMIT respected
- change workflow_template LIMIT back to empty and save workflow_template again
- workflow_template run without LIMIT (again!), job template with LIMIT (including prompt on launch): LIMIT set in job_template ignored, playbook is executed on all inventory targets. This means that the workflow_template ignores the LIMIT set in the job_template which it did not do before.

This behavior is only observed when the workflow_template LIMIT has been changed once at least! This is also true for cloned workflow_templates.

##### EXPECTED RESULTS

I expected the workflow_template to respect the LIMIT set in the job_template (job_template including "prompt on launch" for LIMIT) after the LIMIT was removed from the workflow_template again.

##### ACTUAL RESULTS

The workflow_template ignored the LIMIT set in the job_template (including "prompt on launch" for LIMIT)

##### ADDITIONAL INFORMATION

none

user: schober307
issue_8556: state: open
title: Inaccurate error handling on Input Group Integer fields (i.e. Org Max Hosts field)
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Inaccurate error handling on Input Group Integer fields (i.e. Org Max Hosts field)

##### ENVIRONMENT
* AWX version: 0933a94ae72526d020d2e6425d066e394d338960

##### STEPS TO REPRODUCE
1. Navigate to a form field Input Group. (i.e. Org Edit Max Hosts Field)
2. Put in a -1 Value if not allowed.

##### EXPECTED RESULTS
1. Given an accurate number range that does not match the API

##### ACTUAL RESULTS
1. Given an inaccurate number range that does not match the API

##### ADDITIONAL INFORMATION
![98037225-3f35ad80-1de9-11eb-8b27-c13dfcd55922](https://user-images.githubusercontent.com/12446869/98390065-e81b1d00-2022-11eb-8676-f777a2fe9f62.gif)


user: unlikelyzero
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_8553: state: open
title: Allow prompt on launch for custom credential types
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Create custom credential type to prompt for password on launch

A tower credential can be assigned to the custom credential type, but the password does not prompt since there is not the check box for prompt for password like in the machine credential.  I would like to be able to define a custom credential type that prompts for the password and doesn't require it to be stored in tower.


When does the behavior occur? Frequency? Repeatedly? At certain times?
It never prompts with this configuration:
INPUT CONFIGURATION:
fields:
  - id: username
    type: string
    label: ADM Username
  - id: password
    type: string
    label: ADM Password
    secret: true
required:
  - username

INJECTOR CONFIGURATION:
extra_vars:
  f5_password: '{{ password }}'
  f5_user: '{{ username }}'

user: mrmibrown
issue_8533: state: open
title: Logstash fails to parse event_data from job events logger
body: #### ISSUE TYPE
 - Bug Report

##### SUMMARY
Some `event_data` field in the [job event](https://docs.ansible.com/ansible-tower/latest/html/administration/logging.html#job-event-schema) payload, could not be processed by [Logstash json codec filter](https://docs.ansible.com/ansible-tower/latest/html/administration/logging.html#elastic-stack-formerly-elk-stack).

##### ENVIRONMENT
* AWX version: 15.0.1
* AWX install method: docker for mac
* Ansible version:  2.9.14
* Operating System: MacOS 10.15.7
* Web Browser: Chrome

##### STEPS TO REPRODUCE

Install the basic latest elastic stack (7.9.2 [with docker](https://github.com/deviantony/docker-elk))
Add recommended json filter to `message` field [as documented](https://docs.ansible.com/ansible-tower/latest/html/administration/logging.html#elastic-stack-formerly-elk-stack) in the default pipeline (`pipeline/logstash.conf`).
Enable Logstash external logger in AWX like this:
```json
{
    "LOG_AGGREGATOR_HOST": "192.168.0.1",
    "LOG_AGGREGATOR_PORT": 5000,
    "LOG_AGGREGATOR_TYPE": "logstash",
    "LOG_AGGREGATOR_USERNAME": "",
    "LOG_AGGREGATOR_PASSWORD": "",
    "LOG_AGGREGATOR_LOGGERS": [
        "awx",
        "activity_stream",
        "job_events",
        "system_tracking"
    ],
    "LOG_AGGREGATOR_INDIVIDUAL_FACTS": false,
    "LOG_AGGREGATOR_ENABLED": true,
    "LOG_AGGREGATOR_TOWER_UUID": "",
    "LOG_AGGREGATOR_PROTOCOL": "tcp",
    "LOG_AGGREGATOR_TCP_TIMEOUT": 5,
    "LOG_AGGREGATOR_VERIFY_CERT": true,
    "LOG_AGGREGATOR_LEVEL": "INFO",
    "LOG_AGGREGATOR_MAX_DISK_USAGE_GB": 1,
    "LOG_AGGREGATOR_MAX_DISK_USAGE_PATH": "/var/lib/awx",
    "LOG_AGGREGATOR_RSYSLOGD_DEBUG": false
}
```
Start the Demo Job Template, and look at the Logstash container log file.

##### EXPECTED RESULTS

All messages should be processed by Logstash without error message.

##### ACTUAL RESULTS

Logstash error message:
```
2020-11-03T12:52:06,615][WARN ][logstash.outputs.elasticsearch][main][7386f93b5f70d34cd1549ea785e28c2abf574ea94d6dc48a69c3b0d40e44b3a2] Could not index event to Elasticsearch. 
{
    :status=>400, 
    :action=>[
        "index", 
        {
            :_id=>nil, 
            :_index=>"logstash", 
            :routing=>nil, 
            :_type=>"_doc"
        }, 
        #<LogStash::Event:0x615d06dd>], 
        :response=>{
            "index"=>{
                "_index"=>"logstash-2020.11.02-000001", 
                "_type"=>"_doc", 
                "_id"=>"eNIqjnUBmb485M8sHzYQ", 
                "status"=>400, 
                "error"=>{
                    "type"=>"illegal_argument_exception", 
                    "reason"=>"mapper [event_data.res.ansible_facts.ansible_python.version_info] cannot be changed from type [text] to [long]"
                }
            }
        }
    }
}
```

##### ADDITIONAL INFORMATION

This happens only when `gather_facts` is enable on playbook. So, I am wondering why this problem is not occurring with the [system tracking](https://docs.ansible.com/ansible-tower/latest/html/administration/logging.html#scan-fact-system-tracking-data-schema).
It seems to me there's some reformat in case of system tracking, that is not the job events case : https://github.com/ansible/awx/blob/e4e5d65a71b9a1507c229f1ce6d3864d4d717c3f/awx/main/utils/formatters.py#L163-L165

user: rev3r4nt
issue_8527: state: open
title: Consider having links in summary step of workflow node prompt open in a new tab
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<img width="1169" alt="Screen Shot 2020-11-03 at 10 37 02 AM" src="https://user-images.githubusercontent.com/9889020/98006858-bacf3480-1dc0-11eb-9105-d778167d5c60.png">

While you're creating/editing a workflow node with prompts, if you click on one of these links you get navigated to those resources in the current tab.  This means that any progress you've made will immediately be lost.

We could:

1) Make those links open new tabs
2) Add a warning when the user clicks on the link stating that they're about to navigate away from the workflow

user: mabashian
issue_8517: state: open
title: Support date ranges with awxkit --created --modified parameters
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Currently the `--modified` and `--created` options for awxkit are **not useful**, as they require an exact match. I.e. this returns the results of the *one* job modified at exactly this microsecond timestamp:

`awx job list --modified "2020-07-04T03:50:03.895868Z"`

But it is not possible to get a list of jobs created/modified on this _day_. This returns _nothing_:

`awx job list --modified "2020-07-04"`

As far as I can tell there is NO way to list jobs via the CLI in a way that I can just get the most recent x jobs (by count, or hour, or other duration) or the jobs in a general range without getting ALL the jobs and sorting externally. 

Date parameters should support the [ISO 8601 Time intervals](https://en.wikipedia.org/wiki/ISO_8601#Time_intervals) such that:
* `2020-07-04` means "any time on 2020-07-04"
* `2020-07-04T03` means "any time within hour 3 of 2020-07-04"
* `P60M` means "any time within the last 60 minutes"
* `P1H` means "any time within the current hour"
* `2020-07-03/04` means "any time on 2020-07-03 or 2020-07-04"

I realize it may be difficult to fully support the complete time interval specs, but I think the first two in that list (truncation) would be sufficient for most use-cases.
user: philipsd6
issue_8513: state: open
title: When run a job template, put the credential prompt in last place.
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
We use Prompted crendential and Prompted Survey both. But our login method is to use RSA SecureID token which will change in a minute. In currently setting, survey always comes out after crendetial input. If the survey is long, we can't get the ssh connection success. Is it possible to put promted credential in last place? Thanks.
user: maydayuiui
issue_8469: state: open
title: RFE: Separate different system level actions into different permissions
body: ##### ISSUE TYPE
 - Adding additional RBAC controls for environments that are heavily regulated. 

##### SUMMARY

The request is to have two sets of roles.

- security management: managing settings, managing users & groups (a subset of settings, given IdP integration)

- systems admin: managing objects (projects, templates, etc)

Currently, system admin handles both of these, via inherent access to settings, and "access to admin of all objects". The request is to split off that settings access to a role that can be removed from sysadmin, and delegated to a user who has only that role.
user: agilleyrh
issue_8464: state: open
title: CLI import of surveys does not work
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->

##### ENVIRONMENT
* AWX version: 3.7.3.
* AWX install method: docker on linux
* Ansible version:  2.9.14
* Operating System: CentOS
* Web Browser: Firefox

##### STEPS TO REPRODUCE

Install Ansible and AWX and also CLI.  Copy the inventory and the survey.json file in /var/liv/awx/projects/00_NewCustomer of the docker container awx_web.
Enter the following commands via the CLI on the docker container awx_web:

- awx organizations create --name "trustedgate" 
awx users create --username "User" --is_superuser false --is_system_auditor false --password "password"
awx inventory create --name "00_NewCustomerSurvey_Inventory" --organization "trustedgate" 
awx projects create --name "00_NewCustomerSurvey_Project" --local_path @/var/lib/awx/projects/00_NewCustomer --organization "trustedgate"
awx job_templates create --name "00_NewCustomerSurvey_Template" --job_type run --inventory "00_NewCustomerSurvey_Inventory" --project "00_NewCustomerSurvey_Project" --playbook "00_NewCustomerSurvey.yaml" --survey_enabled true

All of these steps work and I can see the templates in the UI. 

If I now try to add a survey to the job_template (same result for both ways)  the survey is not added in the UI and I get the following feedback on the console.

awx job_templates delete --name "00_NewCustomerSurvey_Template" 

awx job_templates create --name "00_NewCustomerSurvey_Template" --job_type run --inventory "00_NewCustomerSurvey_Inventory" --project "00_NewCustomerSurvey_Project" --playbook "00_NewCustomerSurvey.yaml" --
survey_spec '{
  'description': 'A survey',
  'name': 'my survey'
  'spec': [{
      'index': 0,
      'question_name': 'What is your department',
      'required': False,
      'variable': 'department',
      'type': 'password',
      'max': 3
    }],
}' --survey_enabled=true

awx job_templates delete --name "00_NewCustomerSurvey_Template" 

awx job_templates modify --id "00_NewCustomerSurvey_Template" --survey_spec @/var/lib/awx/projects/00_NewCustomer/survey.json --survey_enable=true

The content of survey.json is:

{
  'description': 'A survey',
  'spec': [{
      'index': 0,
      'question_name': 'What is your department',
      'required': False,
      'variable': 'department',
      'type': 'password',
      'max': 3
    }],
  'name': 'my survey'
}



##### EXPECTED RESULTS

I would expect that in both cases the one-question-long survey would be imported to the UI  

##### ACTUAL RESULTS

<!-- What actually happened? -->
The Job Template is created in both cases but no survey is added. The feedback from the console is in both cases the same (see screenshots attached)
![1](https://user-images.githubusercontent.com/72564826/97290255-974c3d00-1848-11eb-8cc2-f4559342be2e.PNG)
![Unbenannt](https://user-images.githubusercontent.com/72564826/97290258-987d6a00-1848-11eb-8cd0-72092c6ae260.PNG)
![2](https://user-images.githubusercontent.com/72564826/97290259-987d6a00-1848-11eb-8f9a-7d93c0ffa79b.PNG)



##### ADDITIONAL INFORMATION

I assume that either I use the commands wrong or the content of the variable survey_spec is not correctly passed to survey_enable. 

user: AnnSopVier
issue_8455: state: open
title: [15.0.1] awx_redis: Fatal error, can't open config file '/usr/local/etc/redis/redis.conf': Permission denied when docker_compose_dir permissions are changed after AWX installation
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
AWX redis container keeps restarting due to the aforementioned error.

##### ENVIRONMENT
* AWX version: 15.0.1
* AWX install method:  docker compose on linux
* Ansible version: 2.10.2
* Operating System: Debian bullseye
* docker-ce: ```5:19.03.13~3-0~debian-buster```
* docker-compose: 1.25.4 or 1.27.3

##### STEPS TO REPRODUCE
0.1. Run inside Python3 virtual env
0.2. Install latest ansible, wheel, docker-compose and redis with pip3
1. Checkout 15.0.1 & create new build branch
2. Modify installer/inventory with:
  - awx_official=true
  - docker_compose_dir=/some/folder
  - host_port=<some_available_port>
  - logging_driver=journald
  - pg_database=awx
  - pg_hostname=<some_private_ip_address>
  - pg_password=some_password
  - pg_port=<<some_pg_used_port>
  - pg_sslmode=require
  - pg_username=awx
  - postgres_data_dir=''
  - project_data_dir=/some/other/folder
  - secret_key=some_password
  - use_docker_compose=true
2. Restart PostgreSQL 10 AWX Cluster
3. Build as non-root with:
```
export awx_version="15.0.1"
cd installer
ansible-playbook -i inventory install.yml
```

##### EXPECTED RESULTS

All AWX docker containers should be created & running smoothly

##### ACTUAL RESULTS
```
# docker ps --all
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS                          PORTS                    NAMES
7af443a35715        ansible/awx:15.0.1   "/usr/bin/tini -- /u…"   7 minutes ago       Up 7 minutes                    8052/tcp                 awx_task
8cc45e4c78dd        ansible/awx:15.0.1   "/usr/bin/tini -- /b…"   7 minutes ago       Up 7 minutes                    0.0.0.0:8000->8052/tcp   awx_web
2a36f8729acf        redis                "docker-entrypoint.s…"   8 minutes ago       Restarting (1) 36 seconds ago                            awx_redis

# docker logs --details -f awx_redis
...
 1:M 26 Oct 2020 11:01:22.670 # Redis is now ready to exit, bye bye...
 1:C 26 Oct 2020 11:01:39.596 # Fatal error, can't open config file '/usr/local/etc/redis/redis.conf': Permission denied
...[Fatal error repeated]
```
user: jean-christophe-manciot
issue_8443: state: open
title: Verify accessibility rules that we can enforce during linting time 
body: 
##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
We already have the https://www.npmjs.com/package/eslint-plugin-jsx-a11y enabled, we need to verify what rules we can enforce during linting time to reduce common accessibility errors.


user: nixocio
labels: component:a11y: Accessibility
issue_8427: state: open
title: awx inplace upgrade to v15 using local docker ... Data migration not happening
body: Inplace upgrade of  AWX from 13.x to latest 15.x  keeps doing a fresh install and does not retain the data/configs that were present on the existing instance prior to upgrade.

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Used the official github instructions to do an inplace upgrade using docker-compose and below is a summary of what was done for the upgrade

- Downloaded the latest awx artifacts from github ( version 15 )
- comment out the dockerhub_base=ansible in the inventory file.
- created a vars file in the installer dir with the key/value pairs that were used for the awx13.x installation. Content of var file below...
project_data_dir: /opt/awx/projects
docker_compose_dir: "/opt/awx/awxcompose"
postgres_data_dir: "/opt/awx/pgdocker"
awx_alternate_dns_servers: "xxxxxxx,xxxxxxx"
ssl_certificate: /opt/awx/ssl/xxxxxxx.cer
ssl_certificate_key: /opt/awx/ssl/xxxxxxx.key
ca_trust_dir: /opt/awx/ssl/ca
admin_password: 'xxxxxxxxx'
pg_password: 'xxxxxxxxxxx'
secret_key: 'xxxxxx'

- added env variable  "PGDATA: /var/lib/postgresql/data/pgdata"  to the xxx/installer/roles/local_docker/templates/docker-compose.yml.j2 file as its missing there. 
- executed 'ansible-playbook -i inventory install.yml -e @vars.yaml'


##### ENVIRONMENT
AWX version: 13.x
AWX install method: docker on linux localhost ( dockercompose )
Ansible version: 2.9.13
Operating System: RHEL8
Web Browser: chrome

##### STEPS TO REPRODUCE

download latest awx artificates from github
create a vars.yaml file populated with the variables/configs used in the existing instance of awx.
execute 'ansible-playbook -i inventory -e @vars.yaml'
login to awx console after install completes and awx_task completes postinstall migrations

##### EXPECTED RESULTS

Configs and objects that prexisted on AWX need to visible from the console and they are wiped out.

##### ACTUAL RESULTS

All existing data is deleted and its a fresh install rather than an upgrade.

##### ADDITIONAL INFORMATION

The awx_task container is supposed to run a task to migrate data from old postgres to new instance but i dont see it in the logs. 

partial snippet of the awx_task logs...

Applying sites.0001_initial... OK
Applying sites.0002_alter_domain_unique... OK
Applying social_django.0001_initial... OK
Applying social_django.0002_add_related_name... OK
Applying social_django.0003_alter_email_max_length... OK
Applying social_django.0004_auto_20160423_0400... OK
Applying social_django.0005_auto_20160727_2333... OK
Applying social_django.0006_partial... OK
Applying social_django.0007_code_timestamp... OK
Applying social_django.0008_partial_timestamp... OK
Applying sso.0001_initial... OK
Applying sso.0002_expand_provider_options... OK
Applying taggit.0003_taggeditem_add_unique_index... OK
Successfully registered instance awx
(changed: True)
Creating instance group tower
(changed: True)
Default organization added.
Demo Credential, Inventory, and Job Template added.
(changed: True)
2020-10-20 16:17:11,658 CRIT Supervisor is running as root. Privileges were not dropped because no user is specified in the config file. If you intend to run as root, you can set user=root in the config file to avoid this message.
2020-10-20 16:17:11,658 CRIT Supervisor is running as root. Privileges were not dropped because no user is specified in the config file. If you intend to run as root, you can set user=root in the config file to avoid this message.
2020-10-20 16:17:11,963 INFO RPC interface 'supervisor' initialized
2020-10-20 16:17:11,963 INFO RPC interface 'supervisor' initialized
2020-10-20 16:17:11,963 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2020-10-20 16:17:11,963 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2020-10-20 16:17:11,963 INFO supervisord started with pid 103
2020-10-20 16:17:11,963 INFO supervisord started with pid 103
2020-10-20 16:17:12,965 INFO spawned: 'awx-config-watcher' with pid 106
2020-10-20 16:17:12,965 INFO spawned: 'awx-config-watcher' with pid 106
2020-10-20 16:17:12,968 INFO spawned: 'dispatcher' with pid 107
2020-10-20 16:17:12,968 INFO spawned: 'dispatcher' with pid 107
2020-10-20 16:17:12,970 INFO spawned: 'callback-receiver' with pid 108
2020-10-20 16:17:12,970 INFO spawned: 'callback-receiver' with pid 108

user: rajivkamath
issue_8423: state: open
title: User type auditor can try to delete inventory groups
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
An auditor user type can try to edit or delete an inventory group on the Group details page

##### ENVIRONMENT
* AWX version: 15.0.0
* AWX install method: docker for mac
* Ansible version:  2.9.13
* Operating System: Catalina
* Web Browser: Chrome

##### STEPS TO REPRODUCE

1. Log as an auditor user
2. Navigate to Inventories
3. Click on the inventory
4. Click on Groups tab
5. Click on the group
6. Try to edit or delete this group

##### EXPECTED RESULTS

The auditor can not edit or delete a group

##### ACTUAL RESULTS

Edit:
Is displayed an text under the save button with the text `Error`

Delete: 
Is displayed a modal error with the text `You do not have permission to perform this action.` 

##### ADDITIONAL INFORMATION


![image](https://user-images.githubusercontent.com/12464858/96649396-6aa79b00-1307-11eb-9d51-3e439934b4e5.png)

![image](https://user-images.githubusercontent.com/12464858/96649427-76935d00-1307-11eb-877c-e93e913de4af.png)



user: tiagodread
issue_8420: state: open
title: Cannot Launch Workflows if POL enabled but left empty
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Cannot Launch Workflows if POL enabled but left empty

##### ENVIRONMENT
* AWX version: devel@10/15

##### STEPS TO REPRODUCE
1. Create a Workflow and enable Prompt on Launch for Limit and SCM Branch
2. Launch Workflow but do not fill in Limit and/or SCM Branch
Note: Error

##### EXPECTED RESULTS
If Prompt on Launch enabled, it should not be required

##### ACTUAL RESULTS
Error thrown

##### ADDITIONAL INFORMATION

![Screen Shot 2020-10-20 at 2 05 33 PM](https://user-images.githubusercontent.com/12446869/96626322-59e22f80-12dd-11eb-841a-d4d33d77f65d.png)


user: unlikelyzero
labels: qe:regression: it used to work
issue_8411: state: open
title: oVirt inventory bad version check
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Inventory Update broken with oVirt inventory

##### SUMMARY
After upgrading to AWX 15.0.0, oVirt inventory source will not update

##### ENVIRONMENT
* AWX version: 15.0.0
* AWX install method: docker
* Ansible version:  2.10.1
* Operating System: CentOS 7.7
* Web Browser: Chrome

##### STEPS TO REPRODUCE

Update oVirt inventory source.  

##### EXPECTED RESULTS

oVirt inventory would update

##### ACTUAL RESULTS

raise AnsibleError('oVirt inventory script requires ovirt-engine-sdk-python >= 4.2.4')
[WARNING]: Unable to parse /tmp/awx_21362_5eexsbl9/ovirt.yml as an inventory
source


##### ADDITIONAL INFORMATION

Configured a custom virtual environment and I am certain I have the latest ovirt-engine-sdk-python installed.  
user: dmatthewsbnd251
issue_8390: state: open
title: Add ability to call notifications as a workflow node
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Could use the ability to call a notification as a workflow node. e.g. when a particular node step fails but is handled/cleaned up with a subsequent node step and you specifically don't want the notification as part of the failed template. In this type of situation having the notification as part of the worklfow won't work, because the workflow would be successful.

How I would use this - I have multiple nightly canary build workflows for VMs. If the build fails, I would like to send a specific notification similar to "Do not build until fixed" to a group of operators separate from the notification to the devs to fix it. In the workflow, I then clean up the failed build. Currently, I am handling this with a separate template just for this notification. I am suggesting it would be more helpful to have notifications as a node type along with the others (template, approval, etc.)
user: gforster
issue_8385: state: open
title: Display what social auth provider was used on User Detail
body: 
##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Display what social auth provider was used. This enhancement was suggested during the code review of https://github.com/ansible/awx/issues/5685.

As per @mabashian suggestion: 

> The only thought I had was that maybe we could expose this attribute:

```json

            "auth": [
                {
                    "provider": "github",
                    "uid": "9999999"
                }
            ]

```

See: https://github.com/ansible/awx/pull/8369#pullrequestreview-507708083
user: nixocio
issue_8365: state: open
title: multiple hosts  enable/disable.
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
 awx -> inventory -> hosts
Only one host can be enabled/disabled, and I would like to have the ability to enable/disable multiple hosts.
user: bgkim0420
issue_8354: state: open
title: Evaluate usage of default values and placeholders
body: 
##### ISSUE TYPE
Evaluate usage of default values and placeholders

##### SUMMARY
Evaluate usage of default values and placeholders

* Verify that the default values provided by the API are being used as default values in the UI default.
* For cases that not default values are provided by the API, for example,  a `dropdown` a placeholder should be used, instead of providing a default value.
* In general we will limit the usage of  `placeholder-text` for:
> Use placeholder text when the requested data type might be unfamiliar or the field requires the user to provide data in a specific format. 
https://www.patternfly.org/v4/components/form/design-guidelines/#placeholder-text

user: nixocio
issue_8349: state: open
title: Explore ways to make modules project_update and inventory_source_update idempotent
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Modules tower_project_update and tower_inventory_source_update both seem to report `changed: true` unconditionally. 
I checked that `modified` does not change on sync and `last_updated` changes every time you hit the sync button even if no change came in. So this might as well be not possible.
But at least for scm projects we could use `scp_revision` before and after to make just this case idempotent.
Or am I late to this discussion?
user: nesanton
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_8329: state: open
title: Azure Government keyvault integration Authentication errors
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Azure Keyvault lookup plugin not working for Azure Government.  Vague "Authentication Error" popup with no details or log.  

The azure keyvault credentials plugin found here:
awx/awx/main/credential_plugins/azure_kv.py

##### ENVIRONMENT
* AWX version: 14.1.0
* AWX install method: docker on linux
* Ansible version:  2.9.11
* Operating System: RHEL 7.7
* Web Browser: Chrome

##### STEPS TO REPRODUCE

Create Microsoft Azure Key Vault credential type. 
Populate details with Azure Government Keyvault and Application registration
Select Cloud Environment "AzureGovernment"
Save credential 
Click Test, Enter Valid Secrete name

##### EXPECTED RESULTS

Microsoft Azure Keyvault:Test Passed!

##### ACTUAL RESULTS

Red Error message
Microsoft Azure Keyvault:
Authentication Error

##### ADDITIONAL INFORMATION 
This issue is related to Feature Idea #5138 I had previously submitted. I was unable to validate functionality before that issues was closed.  

I think the this is failing because the ServicePrincipalCredentials method does not contain cloud_environment=azure_cloud.AZURE_US_GOV_CLOUD 

Or because the KeyVaultClient method is not given the base_url for the government API endpoint.  

On https://docs.microsoft.com/en-us/azure/developer/python/azure-sdk-authenticate?tabs=cmd  
there is a section on Azure Sovereign or national Cloud logons.

user: russelljftw
issue_8317: state: open
title: Telegram notifications from AWX
body:  - Feature Idea
Please add Telegram Notifications to AWX

Now available in AWX 15.0:
email, Grafana, IRC, Mettermost, Pagerduty, Rocket.chat, Slack, Twilio, webhook
user: amg-web
issue_8310: state: open
title: Allow (full) extra variable access in custom notification messages
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
I have a template that is configured to be triggered via (Gitlab) webhook. In the job overview, it's possible to inspect the **EXTRA VARIABLES**, that contain `tower_webhook_payload` (among others). I would like to access this information in a custom notification. I would like to be able to access the information through any of these suggestions:

```yaml
{{ tower_webhook_payload.my_value }}
{{ job.tower_webhook_payload.my_value }}
{{ extra_variables.tower_webhook_payload.my_value }}
{{ job.extra_variables.tower_webhook_payload.my_value }}
{{ extra_variables.my_value }}
{{ job.extra_variables.my_value }}
```
---

Side note: It's not 100% clear to me, how I would access a specific element of a list. Currently, there only seems to be the `summary_fields.labels` attribute that consists of a list. But by including `tower_webhook_payload`, additional ones might be introduced (in my case `commits`). Would it be as easy as to use `commits[0]` and `commits[-1]` for using the first and last values in the list or how could this be achieved?

---
(I am aware that you can't guarantee that these fields exist as they depend on the incoming webhook, but I noticed that using `summary_fields.created_by` with a job triggered by webhook also fails (silently).)

user: christian-steinmeyer
issue_8300: state: open
title: docker-compose install: awx_task does not wait for aws_postgres to finish one-time initialization (race condition)
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When provisioning AWX with docker-compose, the awx_task container can start executing database migrations as soon as aws_postgres is "up".  On fast hardware, migrations can start before the aws_postgres container is completely "ready" (finished first-time initialization). The result is that the DB migrations terminate in a way that makes subsequent resumption impossible , and awx_task gets stuck in an endless loop.

##### ENVIRONMENT
* AWX version: 15.0.0 (also tested 14.1.0)
* AWX install method: docker-compose on linux
* Ansible version:  2.10.1
* Operating System: Ubuntu 20.04
* Fast hardware - e.g. a good amount of cores with NVME storage.

##### STEPS TO REPRODUCE

Starting with a freshly provisioned Ubuntu 20.04 LTS (virtual) server, run docker-compose install with all default settings:

```
apt install docker.io python3-pip -y && pip3 install ansible docker-compose
apt install git -y && git clone -b 15.0.0 https://github.com/ansible/awx.git
cd awx/installer && ansible-playbook -i inventory install.yml 
```

##### EXPECTED RESULTS

awx_task runs all its DB migrations to completion 

##### ACTUAL RESULTS

If my VM has 4 VCPU, 8GB RAM, and NVME storage (as an example...) , the awx_task DB Migrations get stuck in a loop part way through. I'll omit the full log but the key part that is looping is:

```
psycopg2.errors.UndefinedTable: relation "main_instance" does not exist
LINE 1: SELECT (1) AS "a" FROM "main_instance" WHERE "main_instance"...
```

Looking through the start of the log for awx_task I see:

```
Operations to perform:
  Apply all migrations: auth, conf, contenttypes, main, oauth2_provider, sessions, sites, social_django, sso, taggit
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying taggit.0001_initial... OK
  Applying taggit.0002_auto_20150616_2121... OK
  Applying auth.0001_initial... OK
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
psycopg2.OperationalError: server closed the connection unexpectedly
        This probably means the server terminated abnormally
        before or while processing the request.
```

This "server terminated abnormally" error is from the  function `docker_temp_server_stop` being invoked at the end of the postgres container's one-time initialization process -  https://github.com/docker-library/postgres/blob/bfc5d81c8f5647c690f452dc558e64fddb1802f6/10/docker-entrypoint.sh

Since the migrations managed to connect between `docker_temp_server_start` and `docker_temp_server_stop` , and the postgres container's onetime initialization code uses fast shutdown; it somehow manages to screw up the database state in such a manner that the automation cannot recover.

##### ADDITIONAL INFORMATION

To confirm this is caused by a race condition , I introduced a sleep in awx_task's startup:

1. modify `awx/installer/roles/local_docker/templates/docker-compose.yml.j2`:
2. find the launch command for awx_task , which is:
```
  command: /usr/bin/launch_awx_task.sh
```
3. Change it to:
```
  command: /bin/bash -c "sleep 30 && exec /usr/bin/launch_awx_task.sh"
```        

Observe that the migration process doesn't start during the initialization phase of postgres container, thus allowing migrations to run normally.


user: nats
issue_8241: state: open
title: If a user advances through a Wizard Add/Edit Mode fast enough, required fields will not be respected.
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
If a user advances through a Wizard Add/Edit Mode fast enough, required fields will not be respected.

##### ENVIRONMENT
* AWX version: b4d6270eabfe4571733fcaf8ab507fff6918fbc5

##### STEPS TO REPRODUCE
1. Add External Credential lookup to an exiting credential
2. Once the 'External Secret Management System' wizard is open, select a Credential, click 'Next' and immediately click OK.
Note: Form validation fields are ignored.

##### EXPECTED RESULTS
1. Wizard progression should be blocked by validation or necessary network XHR requests

##### ACTUAL RESULTS
1. Invalid Credential Form created

##### ADDITIONAL INFORMATION

https://share.getcloudapp.com/6quPOvOl

user: unlikelyzero
issue_8226: state: open
title: Webhook notification retry option
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Enhancement idea for web-hook type notification.

The goal is to set some retry mechanism for sending web-hook type notification. For example 3 times with 3-5 pause between retries.

We are asking for this feature because right now we struggle with an issue: our ansible jobs executes and sends notification but the target application for this notification,  throws HTTP502 error ("502 Proxy Error") once in a while.  This causes our whole workflow to freeze (target application is waiting for notification from Tower, but as it was rejected for the first time with 502 error, no more notifications will be sent by Tower anymore). 
With a retry mechanism on Tower side next notification would be sent in this case and our workflow would finish correctly/continue to execute.
user: lucas-benedito
issue_8218: state: open
title: RFE: write to: and from: data to a searchable log, such as changes in user type
body: ##### ISSUE TYPE
 - Logging and UI enhancement. 

##### SUMMARY
 - Add the ability to see more granular detail in the Activity Stream and logs. An example would be if a user's role is changed to be able to see what it was and what it is now in the Activity Stream.  
user: agilleyrh
issue_8182: state: open
title: Validate `pod_spec_override` on InstanceGroupSerializer
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Right now there is no validation for `pod_spec_override` on InstanceGroupSerializer. Validate that it is a valid JSON.
user: nixocio
issue_8169: state: open
title: Filters should persist across ui_next
body: Spec document here: https://docs.google.com/document/d/141yuIaGu5gMt0n0mhSVKuOzoCjzQRpc2YrDwVtQqK7U/edit#

Basically, the idea is that we should persist filters as you go across pages in tower that are part of the same resource type.  For example, if you go from the projects list to viewing or editing a project, and then back to the project list by clicking "cancel", the filters you had set up should persist.

I believe the easiest way to tackle is by passing the query params around as you go to these various pages.

For now, we do not need to persist across different resources (i.e. if you use the side nav to navigate from projects to inventories and then back to projects, the projects list should not have any filters), nor do we need to save searches across new tabs/windows (i.e. use local storage).  There _is_ a saved-search feature being worked out and explored by other AAP projects that we will eventually want in awx, but we will need to persists this info to the API to implement that.

It does get complicated when many resources are nested under a main one (such inventories with groups and hosts) that we will need to figure out.

So far as tackling this, we will want to attempt it in one resource (preferably one with complex nesting like inventories) as a POC PR before propagating across all resources in tower.
user: jlmitch5
issue_8142: state: open
title: Support to include a console for ansible-vault encryption/decryption
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - To create a console where developers with controlled access can encrypt/decrypt strings/files without knowing the secret password.

##### SUMMARY
It will be a great idea to have a console where developers with controlled access can encrypt/decrypt strings/files without knowing the secret password.

Currently ansible-vault only allows encryption/decryption via CLI which is not user friendly for some developers. Furthermore, it requires the developers to know the password before encyption/decrypting which is not secure to share with everyone in the team. 

Therefore, with a console to do it via AWX, we can achieve the following practices:

- developers with permission rights can login and access those keys
- keys are not exposed to anyone but stored securely in AWX
- Developers can select the password they want to encrypt without knowing what's the password value.
user: guohaolee
issue_8129: state: open
title: Allow to set enable/disable permissions and edit permission on scheduled jobs
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
It seems as scheduled jobs can only be edited by the creating user, or by a user with admin rights to the template the job was scheduled from. 
We create schedules of templates using a service user, and it would be nice to have the possibility to give other users with execute rights on the template the right to enable/disable these schedules or to edit them, without having to give them admin rights on the template.
user: aptevo
issue_8122: state: open
title: Expose the value of "Execution Node" as a variable when running a job from Ansible Tower.
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Expose the value of "Execution Node" as a variable when running a job from Ansible Tower.

**Example use-case:** Secret lookup which provides access token based on the execution node ip address 
user: lucas-benedito
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_8120: state: open
title: Websocket updates on Instance Group view
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Instance Groups have a series of fields that might benefit from live page updates.
- Running Jobs
- Total Jobs
- Instance Count
- Total Capacity (%)
user: dsesami
issue_8114: state: open
title: dynamic group creation with yaml inventory
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
I use an ec2 dynamic inventory plugin (called from a repository resource), combined with a yaml inventory plugin.

I try to create dynamic parent group . e.g. a monitoring group that is the parent of the elastic group and kibana group.
Described as in https://docs.ansible.com/ansible/latest/plugins/inventory/yaml.html#examples

```
all: 
  vars:
    all_var: whatever
          
  children:
    monitoring:
       vars:
          all_var: override 
      children:
        elastic:
        kibana:

```
It has the 'empty' hosts section. but I thought that issue was fixed quite some time ago ?

##### ENVIRONMENT
* AWX version: 14.0.0
* AWX install method: docker
* Ansible version:  2.9.11
* Operating System: Ubuntu
* Web Browser:


##### EXPECTED RESULTS

- I don't see the 'Monitoring' group created
- I don't see variables defined at sub groups populated. 

[WARNING]: Could not match supplied host pattern, ignoring: monitoring

(but I could do it on 'elastic'


Now when I create different files per group

all.yaml
elastic.yaml
kibana.yaml

I am able to set variables on a different group. 

So how can the inventory file create new groups. 

Or is the yaml inventory plugin not supported?




user: sentient
issue_8106: state: open
title: AzureAD SSO getting incorrect protocol when behind Kubernetes Ingress
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When AWX is set up in a k8s cluster with an Ingress that handles TLS termination, the callback/reply URL that comes from AWX says it's using `http` instead of `https`. AzureAD then rejects the login request because the URL it has stored doesn't match the URL in the request.

##### ENVIRONMENT
* AWX version: 2.9.11
* AWX install method: kubernetes with Ingress
* Ansible version:  playbook 2.9.12
* Operating System: Ubuntu 18.04/Kubernetes 1.17
* Web Browser: Chrome/Vivaldi

##### STEPS TO REPRODUCE

- Change inventory file appropriately and update the `kubernetes_ingress_hostname` and `kubernetes_ingress_tls_secret` settings (secret must exist beforehand).
- Run deploy with standard command from readme
- Setup AzureAD SSO as documented.


##### EXPECTED RESULTS
Successful sign-in with AzureAD SSO process

##### ACTUAL RESULTS
AzureAD throws an error saying the Reply URL and the URL in the request don't match. (AzureAD is set with URL that start with `https://` requested URL starts with `http://`, otherwise they are the same, if AzureAD app is set up properly.)

##### ADDITIONAL INFORMATION
AzureAD only allows SSO Reply URL's that start with `https://`

Attempted fix:
- Add `TOWER_URL_BASE` to the `conf_setting` table in the Postgres database (use `pg_*` settings in inventory file), and restart the service.
- - This only changed the display of the callback URL in the UI. Other than that, it seemed to have no effect.

user: Vacant0mens
issue_8100: state: open
title: Support for composite variables in Workflow Surveys
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Add support for composite variables in Workflow Surveys

##### SUMMARY
It would be really nice to create composite variables when calling Workflows from other Workflows.
In the example below, OMGEVING is a variable defined in the parent Workflow, that should be usable in variable values of child flows.
This is a feature that is supported by Azure DevOps and proves to be very convenient in several use cases.

![2020-09-08 18_56_09-Ansible AWX _ templates editWorkflowJobTemplate workflowMaker](https://user-images.githubusercontent.com/5285435/92508122-5cdf0000-f208-11ea-9d15-f8ba19140ce2.png)


user: stahloss
issue_8096: state: open
title: HashiCorp Vault Signed SSH type credential to support passing vault namespace from UI
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

Few organisation manages there credential using namespace, we should support that feature. Currently awx code/ui does not have option to pass namespace name, I did try. to fix locally on on env and it works!
user: haribhauhud
issue_8088: state: open
title: JT Options are available for users who doesn’t have permission to edit these information
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY

See: https://github.com/ansible/awx/pull/7975
Also: https://github.com/ansible/awx/issues/8077

Users who doesn’t have permission on an Inventory or Project or Credential should be able to select the options `Privilege Escalation Provisioning Callbacks Enable Webhook Concurrently` but trying to save the error message "You do not have permission to perform this action." is displayed:

##### ENVIRONMENT
* AWX version: 14.0.0
* AWX install method: docker for mac
* Ansible version:  2.9.11
* Operating System: Mojave
* Web Browser: Chrome

##### STEPS TO REPRODUCE

Create a user that can edit a JT or WFJT but that does not have access to any Inventory, or Projects, then:

1. Navigate to Job Templates
2. Select a job template
3. Click on Edit button
4. Select the option `Privilege Escalation` and click on Save

##### EXPECTED RESULTS

If the users can’t edit these select inputs, they should be disable.

##### ACTUAL RESULTS

The message "You do not have permission to perform this action." is displayed 

![image](https://user-images.githubusercontent.com/12464858/92268992-b28a7400-eeb9-11ea-99ab-22ef0f9f2dca.png)


user: tiagodread
issue_8083: state: open
title: Add a size limit to credential field file uploads
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
https://github.com/ansible/awx/pull/7960 will add the ability to upload key files to some credential form fields.  Right now there is no upper limit on the size of the upload which can cause the UI to freeze if the file is quite large.  The files uploaded to this form _should_ be quite small.  If we select a sufficiently large upper limit I would hope that users would not run in to it for legitimate uploads.

Here are the dropzone props: https://react-dropzone.js.org/#!/Dropzone

Here's are the PF component props: http://patternfly-react.surge.sh/documentation/react/components/fileupload#props

In this case we'd want to add `dropzoneProps` as a prop on the PF component and include the `maxSize` argument.

Marking this as blocked until #7960 merges.

user: mabashian
issue_8077: state: open
title: Webhook Service RBAC
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

See: https://github.com/ansible/awx/pull/7975

A user that does not have permissions on an Inventory or Project or Credential should not be able to select a webhook service.  Additionally, if a user does not have edit permissions or add permissions should be not able to select a webhook service.  See https://github.com/ansible/awx/blob/devel/awx/ui/client/src/templates/job_templates/job-template.form.js#L410 as a starting point

user: AlexSCorey
issue_8060: state: open
title: Ability to tag logs from UI
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Currently, Tower doesn't provide the ability to tag logs from the UI as syslog does.

https://www.rsyslog.com/doc/v8-stable/configuration/templates.html#generating-json

It could be great to have this possibility from the logger configuration screen.

user: zaskan
issue_8059: state: open
title: Additional modify permissions for objects
body: ##### ISSUE TYPE
 - RFE

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

Tower lacks of some intermediate modify role between read and admin and this is applicable for all kind of objects in tower - projects, credentials, inventories.

Next higher level after read role is an admin. Admin has rights to grant permissions to other users up to admin level. Admin must be so powerful for sure, but current RBAC model really lacks modify role without ability to change permissions. With current  model is very problematic or impossible to design permission scheme with different roles, like operators who uses (operates with) playbooks, and developers, who creates and tests new playbooks.

We want that some users would be able to modify, for example, projects, but want to have control over permission granting for critical objects like project or credentials. Granting admin role for each user, who just needs modify permissions is excess.


user: zaskan
issue_8050: state: open
title: Support Azure DevOps webhooks
body: 
##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

Azure DevOps has code hosting, with its own webhook mechanism. It would be useful if AWX et al supported this.

https://docs.microsoft.com/en-us/azure/devops/service-hooks/services/webhooks?view=azure-devops


user: wenottingham
issue_8034: state: open
title: Adding a Workflow job trace in Job Events
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Add a workflow_job_id_trace array in job events.

Related to issue  #3770

Reason: 
There is currently no way of eficiently keeping tracks of job events emitted within nested workflows (workflow_job_id is replaced by last workflow).

Description:
The idea is to define an array within job events in which each workflow will append its ID so that down the line we have an array of ids of workflows responsible for the launch of any given job events. This allows a much clearer view of workflows executions within each other.

Example:
```json
{
  "job_event": {
    "job": 44,
    "workflow_job_id": 43,
    "workflow_job_id_trace": [41, 42, 43],
    . . .
  }
}
```
By just adding this array we now know that this job event was launched through the execution of workflow job 41 which launched the workflow job 42 which launched the workflow 43 which finally launched the job 44.

Alternative:
If this feature is too complex to implement I guess that adding just the "initiator" workflow job id would already be great because the current properties of job events does not permit to know the "initiator" of a job (in case of nested workflow).
```json
{
  "job_event": {
    "job": 44,
    "workflow_job_id": 43,
    "workflow_initiator_job_id_": 41,
    . . .
  }
}
```
This allows us to group job events by initiator which should be good enough for most people.

Passing an integer down the nested workflows might be just as difficult as an array so it would be better to go with the array so there won't be any related issues in the future.
user: AlexisEgger
issue_8014: state: open
title: Add instance_id to tower_host module
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Per PR #7963 tower_host is missing support for the instance_id API parameter.
user: john-westcott-iv
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_7999: state: open
title: RFE: Allow creation of only smart inventories by non-admins
body: ##### ISSUE TYPE

 - Feature Idea

##### SUMMARY

A customer would like to give individual technical teams the ability to create smart inventories, limiting the source pool to the hosts that they are supposed to see. A simplified example could be "team windows manages all the windows hosts and should not see any linux or aix".

The only permission currently available to unprivileged user is "inventory admin", but while this allows them to create smart inventories, it also allows them to create arbitrary inventories and this is an undesired side effect.
The alternative would be to not give users this permission, which would force them to limit host exclusively by name or group which becomes prohibitive on their scale of thousands of target hosts. Being able to group target hosts by their characteristics as is done with smart inventories is an essential feature for them.

A possible solution could be to split the "inventory admin" role into two - "regular" inventory and smart inventory admin
user: xstasi
issue_7994: state: open
title: /api/v2/hosts/:id/groups returns POST action to system auditor
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY

As an auditor user I can try to associate a host to a group inside `Hosts > foo > Groups` 


##### ENVIRONMENT
* AWX version: 14.0.0
* AWX install method: docker for mac
* Ansible version: 2.9.11
* Operating System: macOS
* Web Browser: Chrome

##### STEPS TO REPRODUCE

Logged in as an Auditor User:

1. Navigate to Hosts
2. Select a host
3. Click on Groups Tab

##### EXPECTED RESULTS

The user shouldn’t be able to add groups to hosts

##### ACTUAL RESULTS

Add button is enabled on screen:
![image](https://user-images.githubusercontent.com/12464858/91219009-56bd2f80-e6f0-11ea-9a84-204e8ef61687.png)

But if I try to add a group I see a 403 (forbidden ) error:
![chrome-capture (2)](https://user-images.githubusercontent.com/12464858/91219193-9c79f800-e6f0-11ea-8ec1-d5cc8e324bbf.gif)


user: tiagodread
labels: qe:visual: visual defect
issue_7972: state: open
title: .prefetch_related('instance_groups') not working
body: Not an issue with current awx, as I don't believe we attempt to prefetch `instance_groups` anywhere in the codebase, but I wanted to document my findings for this as prefetching is used heavily in general.

**why it's needed**
.prefetch_related() is important for reducing database hits. In this case, if we want to grab instance_groups associated with organization _per job_, and there are thousands of jobs, then prefetching `instance_groups` would be straightforward optimization.

**the issue**
e.g. `Organization.objects.all().prefetch_related('instance_groups`)` does not work

The reason why is our custom [`OrderedManyToManyDescriptor`](https://github.com/ansible/awx/blob/2a824fc1d5b5ca48eeff8bf33998c8d909287d0e/awx/main/fields.py#L1024)

```python
def get_queryset(self):
    return super(OrderedManyRelatedManager, self).get_queryset().order_by(
        '%s__position' % self.through._meta.model_name
    )
```

if I get rid of the `.order_by..` filter from the query, `instance_groups` is prefetched as expected.

from Django docs

> Remember that, as always with QuerySets, any subsequent chained methods which imply a different database query will ignore previously cached results, and retrieve data using a fresh database query.

I believe that is what is going on when we add the `.order_by..` filter.

**test setup**
I have 60 Jobs in the database,

```python
p = Job.objects.select_related("organization").prefetch_related("organization__instance_groups")
for i in p:
    H = [x for x in i.organization.instance_groups.all()]
```

Without commenting out `.order_by..`
Number of Queries : 63

Commenting out `.order_by..`
Number of Queries : 3
user: fosterseth
issue_7944: state: open
title: Allow custom credential type injectors to apply extra vars to inventory imports
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
This has merged in Ansible core:

https://github.com/ansible/ansible/pull/70970

Starting with Ansible 2.11 it will be possible to supply `--extra-vars` to `ansible-inventory`, so credential types that define extra vars in their injector configuration should apply those to inventory updates. That is avoided now via:

https://github.com/ansible/awx/blob/d0ac02826537343880b09282666639cf5135779c/awx/main/models/credential/__init__.py#L546

user: AlanCoding
issue_7931: state: open
title: Credential Type definitions in the REST API do not show injector config
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When browsing credential type data via the REST API, i.e. /api/v2/credential_types/, the injector configuration is blank on many ( but not all) credential types. This appears to be inconsistent with the documentation for these credential types

##### ENVIRONMENT
* AWX version: 9.1.1
* AWX install method: rancher
* Ansible version:  2.9
* Operating System: Oracle Linux 7.8
* Web Browser: Chrome 84.0.4147.89

##### STEPS TO REPRODUCE

access awx server REST API with admin account to view credential types:  <server>/api/v2/credential_types/

view the credential types for 'Amazon Web Services' (id:5) and 'Ansible Tower' (id:16). Note the data for the injectors property is an empty dictionary for 'Amazon Web Services' and is populated for 'Ansible Tower'

##### EXPECTED RESULTS

Per the documentation listed here: https://docs.ansible.com/ansible-tower/latest/html/userguide/credentials.html#amazon-web-services I would expect to see an injector configuration that looked like this:

"injectors": {
                "env": {
                    "AWS_ACCESS_KEY_ID": "{{username}}",
                    "AWS_SECRET_ACCESS_KEY": "{{password}}",
                    "AWS_SECURITY_TOKEN": "{{security_token}}"
                }
            }

##### ACTUAL RESULTS

the REST API output has an empty dictionary for the injectors configuration:

"injectors": {}

##### ADDITIONAL INFORMATION

I am assuming this is a cosmetic issue with the API output, and that the credential types themselves are functioning correctly.  That is an assumption as I haven't tested any of them. I have noticed that the API reports the injectors correctly for any of the custom credential types I've created.

user: murrahjm
issue_7927: state: open
title: Identify Tower/Awx node on login screen
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - When using a Load balancer and a Tower/Awx cluster with VIP we are redirected to login screen but we can't know what node we will doing the login.

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
In case of using a Load balancer and a VIP as a front end of Tower for example. It will be very helpful to have an option of show the hostname or other info which identify the node into login screen.
user: rcdlinux
issue_7917: state: open
title: Expand the "LDAP Require Group field" under Settings/Authentication/LDAP to allow for a list of LDAP groups
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Under the Settings page for **Authentication/LDAP** it appears that the **LDAP Require Group** field is limited to a single group.  We would like to see this function expanded to a list of groups.

We would like to list multiple LDAP groups, which we already have in place today, instead of creating and having to populate a new LDAP group specifically for AWX authorized users.

Our POC implementation has proved out this is technically possible by modifying the setting.py file found in /etc/tower/

from django_auth_ldap.config import LDAPGroupQuery 
AUTH_LDAP_REQUIRE_GROUP = (
    LDAPGroupQuery("cn=awx_admin, ou=UXgroups, ou=Groups, ou=Entsys,dc=company.com")
    | LDAPGroupQuery("cn=awx_user, ou=UXgroups, ou=Groups, ou=Entsys,dc=company.com")
)

https://django-auth-ldap.readthedocs.io/en/latest/groups.html#limiting-access

Our use case is that we would use multiple groups to establish authorization level into the system (i.e; Admin, Users, System Auditors,...)  instead of adding a group of all users to AWX a granting individual  access roles.
user: jpell958
labels: component:authentication: For issues related to authentication
issue_7912: state: open
title: Aloow setting proxy for only project update phase
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

It would be very beneficial to have ability to set proxy setting for only 'Project Update' phase of running Job. Example use case:
AWX is placed in network A which is completely isolated from external network. All machines that has to be configured are also placed in this network. However, Git server (Gitea, GitLab) is placed in network B which is isolated from network A. Also, downloading Ansible collection from Ansible Galaxy or any other source is not possible in network A.

By having ability to specify proxy for just 'Project Update' phase, AWX can still be placed in network A, in which it can easily configure machines, but still be able to update project from external source and install collections.
user: stanislaw55
issue_7896: state: open
title: [ui_next] User Tokens Edit
body: b##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Follow-up to https://github.com/ansible/awx/issues/7789

Since we have a details view for user tokens now, we'd like to add an edit page as well. We probably want this to be similar to other resource edits, where we have an edit button in the main user tokens list, as well as an edit button on the details page (the button on the details page exists but is not hooked up). 

[Bonus] As part of this work...when you go to Applications > Tokens for a specific app, you are presented with a list of tokens created by various users. When someone clicks the user link on a token, it should take them to the details view for that token, with the edit button visible on that page. Alternatively, it should go to the tokens tab for that user that created the token.
user: dsesami
issue_7859: state: open
title: [RFE] Allow selection of credential on the workflow level.
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
Can we have an option on workflow "prompt on launch" for credential

##### SUMMARY
This would be similar to the following issue and pull, except it would be for workflow:

https://github.com/ansible/awx/issues/2256
https://github.com/ansible/awx/pull/2342

user: saali2016
issue_7858: state: open
title: Add Editor Only Role
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Add an organization role for users/teams which has the following:
- create jobs, templates and workflows
- edit jobs, templates and workflows
- read jobs, templates and workflows

This role does not have execute permissions.

user: jamesmarshall24
issue_7853: state: open
title: Show more host information in host filter lookup list 
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Spinoff idea from initial host filter lookup PR: https://github.com/ansible/awx/pull/7644#issuecomment-669441224
Also related: https://github.com/ansible/awx/issues/7850 https://github.com/ansible/awx/issues/4208

The host filter modal only displays a list of host "names". Since the purpose of this modal is to help the user filter hosts, we could provide a better user experience by showing more filterable host information in the list view. 

Some ideas include: 
1. Adding more columns to the host list
2. Adding an expandable area with host content 

_Expandable host filter list proof of concept_
![expandable-modal](https://user-images.githubusercontent.com/15881645/89566161-a7c2bd80-d7ed-11ea-9e14-e712a5147d3e.gif)

cc @trahman73 
user: marshmalien
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_7850: state: open
title: Add smart inventory host filter lookup text input
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Expose a simple text input that a user could opt in to when creating a smart inventory host filter where a complete host_filter string could be supplied. This would serve 2 purposes:
1. Users wanting to specify complex/non-ui supported host filter strings could do so in the UI and wouldn't have to go through the API browser
2. If the UI detects a string that we can't parse into consumable search tags then we just show the string in the input.

Example of a host filter string that the user could type into the input:
```
(name=bengal and groups__name=Cat) or (name=vizsla and groups__name=Dog)
```

To retrieve the corresponding list of hosts and display them in the modal, the same filter string above must be url-encoded:
```
/hosts/?host_filter=(name%3Dbengal%20and%20groups__name%3D%22Cat%22)%20or%20(name%3Dvizsla%20and%20groups__name%3DDog)
```

##### ADDITIONAL INFO
Smart host filter docs: https://docs.ansible.com/ansible-tower/latest/html/userguide/inventories.html#smart-host-filter
Initial host filter lookup PR:  https://github.com/ansible/awx/pull/7644

Host filter lookup mockup: https://tower-mockups.testing.ansible.com/patternfly/inventories/inventories-smart-edit-filter/
<img width="1304" alt="Screen Shot 2020-08-06 at 12 37 42 PM" src="https://user-images.githubusercontent.com/15881645/89557986-a390a300-d7e1-11ea-91c3-144e05f997cc.png">

Image below is a mockup of what it could put in the host filter lookup or advanced search
<img width="889" alt="Screen Shot 2020-08-06 at 12 31 09 PM" src="https://user-images.githubusercontent.com/15881645/89557399-be164c80-d7e0-11ea-823e-73131215fa91.png">


user: marshmalien
issue_7844: state: open
title: RFE: Add Tower-managed PostgreSQL replication
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
[Ansible Tower Administration Guide v3.7.2](https://docs.ansible.com/ansible-tower/latest/html/administration/clustering.html#setup-considerations) (i.e. `latest` at the moment of writing):
> PostgreSQL is still a standalone instance and is not clustered. Tower does not manage replica configuration or database failover (if the user configures standby replicas).

This is a request for adding PostgreSQL replication management to Tower.

##### Justification: 

PostgreSQL replication is a must for eliminating SPOF (Single Point Of Failure). However, currently we can have that feature available only if the DB is _not_ managed by Ansible Tower.

In a business context that adds to unnecessary complication of both setting up and upgrading Tower: usually there's a separate team that takes care of the DB setup, and therefore upgrades need to be carefully examined for additional requirements/dependencies.

In short, the upgrade cadence becomes much more cumbersome and prone to mistakes.


##### Downstream links:
[Is Database Replication Supported with an Ansible Tower subscription?](https://access.redhat.com/solutions/3682951) 
[Red Hat Ansible Tower Database Scope of Coverage](https://access.redhat.com/articles/4010491)
 
user: tesseract-rh
issue_7837: state: open
title: Smart Inventory should be a sort option / filter option in the inventory list
body: Currently, with the addition of smart inventory forms, we need more than just the ability to sort by name in the inventory list. We should also add a "Type" or similar sort that allows inventories and smart inventories to be organized separately.
user: dsesami
issue_7828: state: open
title: Add a feature for health checks (readiness and liveness) for Ansible Tower
body: <!-- Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues! -->

##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

Many applications running for long periods of time eventually transition to broken states, and cannot recover except by being restarted. Kubernetes provides liveness probes to detect and remedy such situations. [1]

Here the ask is to provide this to avoid manual operation task such as restart the containers/pods. The current tarball [2] only provides these probes for postgres and not for the other containers (redis, memcached, tower-web, tower-task).

[1] https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
[2] https://releases.ansible.com/ansible-tower/setup_openshift/ansible-tower-openshift-setup-3.7.1-1.tar.gz

user: Saurabh-Thakre
issue_7825: state: open
title: [ui_next] Select All checkbox is out of alignment on lists when the Advanced Search selector is enabled
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Select All checkbox is out of alignment on lists when the Advanced Search selector is enabled.

##### ENVIRONMENT
* AWX version: ui_next

##### STEPS TO REPRODUCE
1. Navigate to a list (like Organizations)
2. Select the 'Advanced Search' Dropdown element.
Note: Select All checkbox is out of alignment but is still functional

##### EXPECTED RESULTS
I would expect the checkbox to be centered in the row

##### ACTUAL RESULTS

Select All checkbox is pushed up and left of center.

##### ADDITIONAL INFORMATION

From https://github.com/ansible/awx/pull/7739

but the spacing gets bad for middle-width views:

![Screen Shot 2020-07-28 at 3 31 30 PM](https://user-images.githubusercontent.com/1342624/88712259-6e03ff80-d0e7-11ea-8bae-a0281e4866bf.png)

Did figure out a workaround for this (https://stackoverflow.com/questions/35578404/giving-wrapped-flexbox-items-vertical-spacing/44523788) but I'm not adding it now in hopes it is fixed on the PF side.  @marshmalien made the discovery that flexbox will allow for a wrapping row gap (hopefully common place soon!) which would solve the problems:

https://developer.mozilla.org/en-US/docs/Web/CSS/gap#Browser_compatibility

The hack that works is:

```
.pf-c-toolbar__content-section {
  margin-top: -20px;
}
.pf-c-toolbar__content-section > * {
  margin-top: 20px;
}
```
user: unlikelyzero
labels: qe:visual: visual defect
issue_7781: state: open
title: When trying to run the installer on MacOS (Catalina) the installer tries to use powershell to gather facts
body: Issues are for **concrete, actionable bugs and feature requests** only - if you're just asking for debugging help or technical support, please use:

- http://webchat.freenode.net/?channels=ansible-awx
- https://groups.google.com/forum/#!forum/awx-project

We have to limit this because of limited volunteer time to respond to issues!

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Running the installer tries to run powershell to gather facts, even if when using bash or zsh.

##### ENVIRONMENT
* AWX version: 13.0.0
* AWX install method:  docker for mac
* Ansible version:  2.9.10
* Operating System: MacOS Catalina 10.15.5
* Web Browser: Brave 1.11.104
* Python Version: 3.8.5

##### STEPS TO REPRODUCE
1. Set up as in the attached inventory
1. Run `ansible-playbook -i inventory install.yml`

##### EXPECTED RESULTS
The playbook will build the AWX Server completely

##### ACTUAL RESULTS
Ansible errors out:
```
┌[kiwish-4.2]-(awx/installer)-[git:13_installer*]-[71%]
└> ansible-playbook -u markh --ask-become-pass -i inventory install.yml -vvv
ansible-playbook 2.9.11
  config file = /Users/mhorninger/projects/dominion-solutions/awx/installer/ansible.cfg
  configured module search path = ['/Users/mhorninger/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/site-packages/ansible
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.8.5 (default, Jul 21 2020, 10:48:26) [Clang 11.0.3 (clang-1103.0.32.62)]
Using /Users/mhorninger/projects/dominion-solutions/awx/installer/ansible.cfg as config file
BECOME password: 
host_list declined parsing /Users/mhorninger/projects/dominion-solutions/awx/installer/inventory as it did not pass its verify_file() method
script declined parsing /Users/mhorninger/projects/dominion-solutions/awx/installer/inventory as it did not pass its verify_file() method
auto declined parsing /Users/mhorninger/projects/dominion-solutions/awx/installer/inventory as it did not pass its verify_file() method
Parsed /Users/mhorninger/projects/dominion-solutions/awx/installer/inventory inventory source with ini plugin
statically imported: /Users/mhorninger/projects/dominion-solutions/awx/installer/roles/local_docker/tasks/upgrade_postgres.yml
[DEPRECATION WARNING]: docker_service is kept for backwards compatibility but usage is discouraged. The module documentation details page may explain more about this rationale.. This feature will be removed in a future release. Deprecation warnings can be disabled by setting 
deprecation_warnings=False in ansible.cfg.
statically imported: /Users/mhorninger/projects/dominion-solutions/awx/installer/roles/local_docker/tasks/set_image.yml
statically imported: /Users/mhorninger/projects/dominion-solutions/awx/installer/roles/local_docker/tasks/compose.yml

PLAYBOOK: install.yml ****************************************************************************************************************************************************************************************************************************************************************
1 plays in install.yml

PLAY [Build and deploy AWX] **********************************************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ***************************************************************************************************************************************************************************************************************************************************************
task path: /Users/mhorninger/projects/dominion-solutions/awx/installer/install.yml:2
<192.168.88.10> ESTABLISH SSH CONNECTION FOR USER: markh
<192.168.88.10> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="markh"' -o ConnectTimeout=10 -o ControlPath=/Users/mhorninger/.ansible/cp/ad227640a4 192.168.88.10 '/usr/bin/env sh -c '"'"'echo ~markh && sleep 0'"'"''
<192.168.88.10> (0, b'/home/markh\n', b'')
<192.168.88.10> ESTABLISH SSH CONNECTION FOR USER: markh
<192.168.88.10> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="markh"' -o ConnectTimeout=10 -o ControlPath=/Users/mhorninger/.ansible/cp/ad227640a4 192.168.88.10 '/usr/bin/env sh -c '"'"'( umask 77 && mkdir -p "` echo /home/markh/.ansible/tmp `"&& mkdir /home/markh/.ansible/tmp/ansible-tmp-1596146711.863554-7419-192905090132564 && echo ansible-tmp-1596146711.863554-7419-192905090132564="` echo /home/markh/.ansible/tmp/ansible-tmp-1596146711.863554-7419-192905090132564 `" ) && sleep 0'"'"''
<192.168.88.10> (0, b'ansible-tmp-1596146711.863554-7419-192905090132564=/home/markh/.ansible/tmp/ansible-tmp-1596146711.863554-7419-192905090132564\n', b'')
Using module file /usr/local/lib/python3.8/site-packages/ansible/modules/~indows/setup.ps1
<192.168.88.10> PUT /Users/mhorninger/.ansible/tmp/ansible-local-7414h1gg4dh5/tmp0y39g0t5 TO /home/markh/.ansible/tmp/ansible-tmp-1596146711.863554-7419-192905090132564/AnsiballZ_setup.ps1
<192.168.88.10> SSH: EXEC sftp -b - -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="markh"' -o ConnectTimeout=10 -o ControlPath=/Users/mhorninger/.ansible/cp/ad227640a4 '[192.168.88.10]'
<192.168.88.10> (0, b'sftp> put /Users/mhorninger/.ansible/tmp/ansible-local-7414h1gg4dh5/tmp0y39g0t5 /home/markh/.ansible/tmp/ansible-tmp-1596146711.863554-7419-192905090132564/AnsiballZ_setup.ps1\n', b'')
<192.168.88.10> ESTABLISH SSH CONNECTION FOR USER: markh
<192.168.88.10> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="markh"' -o ConnectTimeout=10 -o ControlPath=/Users/mhorninger/.ansible/cp/ad227640a4 192.168.88.10 '/usr/bin/env sh -c '"'"'chmod u+x /home/markh/.ansible/tmp/ansible-tmp-1596146711.863554-7419-192905090132564/ /home/markh/.ansible/tmp/ansible-tmp-1596146711.863554-7419-192905090132564/AnsiballZ_setup.ps1 && sleep 0'"'"''
<192.168.88.10> (0, b'', b'')
<192.168.88.10> ESTABLISH SSH CONNECTION FOR USER: markh
<192.168.88.10> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="markh"' -o ConnectTimeout=10 -o ControlPath=/Users/mhorninger/.ansible/cp/ad227640a4 -tt 192.168.88.10 '/usr/bin/env sh -c '"'"'powershell /home/markh/.ansible/tmp/ansible-tmp-1596146711.863554-7419-192905090132564/AnsiballZ_setup.ps1 && sleep 0'"'"''
<192.168.88.10> (127, b'sh: powershell: not found\r\n', b'Shared connection to 192.168.88.10 closed.\r\n')
<192.168.88.10> Failed to connect to the host via ssh: Shared connection to 192.168.88.10 closed.
<192.168.88.10> ESTABLISH SSH CONNECTION FOR USER: markh
<192.168.88.10> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="markh"' -o ConnectTimeout=10 -o ControlPath=/Users/mhorninger/.ansible/cp/ad227640a4 192.168.88.10 '/usr/bin/env sh -c '"'"'rm -f -r /home/markh/.ansible/tmp/ansible-tmp-1596146711.863554-7419-192905090132564/ > /dev/null 2>&1 && sleep 0'"'"''
<192.168.88.10> (0, b'', b'')
fatal: [192.168.88.10]: FAILED! => {
    "ansible_facts": {},
    "changed": false,
    "failed_modules": {
        "setup": {
            "failed": true,
            "module_stderr": "Shared connection to 192.168.88.10 closed.\r\n",
            "module_stdout": "sh: powershell: not found\r\n",
            "msg": "The module failed to execute correctly, you probably need to set the interpreter.\nSee stdout/stderr for the exact error",
            "rc": 127
        }
    },
    "msg": "The following modules failed to execute: setup\n"
}

PLAY RECAP ***************************************************************************************************************************************************************************************************************************************************************************
192.168.88.10              : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0 
```

##### ADDITIONAL INFORMATION
Inventory file:
```
#localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python3" gather_facts=false
192.168.88.10 ansible_python_interpreter="/usr/bin/python3"

[all:vars]

# Remove these lines if you want to run a local image build
# Otherwise the setup playbook will install the official Ansible images. Versions may
# be selected based on: latest, 1, 1.0, 1.0.0, 1.0.0.123
# by default the base will be used to search for ansible/awx
dockerhub_base=ansible
dockerhub_version=13.0.0

# Common Docker parameters
awx_task_hostname=awx
awx_web_hostname=awxweb
postgres_data_dir="/opt/awx/postgres"
host_port=80
host_port_ssl=443
#ssl_certificate=
# Optional key file
#ssl_certificate_key=
docker_compose_dir="~/.awx/awxcompose"

# Required for Openshift when building the image on your own
# Optional for Openshift if using Dockerhub or another prebuilt registry
# Required for Docker Compose Install if building the image on your own
# Optional for Docker Compose Install if using Dockerhub or another prebuilt registry
# Define if you want the image pushed to a registry. The container definition will also use these images
# docker_registry=172.30.1.1:5000
# docker_registry_repository=awx
# docker_registry_username=developer


# Set pg_hostname if you have an external postgres server, otherwise
# a new postgres service will be created
# pg_hostname=postgresql
pg_username=awx
# pg_password should be random 10 character alphanumeric string, when postgresql is running on kubernetes
# NB: it's a limitation of the "official" postgres helm chart
pg_password=3emoJLigId
pg_database=awx
pg_port=5432
#pg_sslmode=require

# The following variable is only required when using the provided
# containerized postgres deployment on OpenShift
# pg_admin_password=postgrespass

# Use a local distribution build container image for building the AWX package
# This is helpful if you don't want to bother installing the build-time dependencies as
# it is taken care of already.
# NOTE: IMPORTANT: If you are running a mininshift install, using this container might not work
#                  if you are using certain drivers like KVM where the source tree can't be mapped
#                  into the build container.
#                  Thus this setting must be set to False which will trigger a local build. To view the
#                  typical dependencies that you might need to install see:
#                  installer/image_build/files/Dockerfile.sdist
# use_container_for_build=true

# This will create or update a default admin (superuser) account in AWX, if not provided
# then these default values are used
admin_user=admin
admin_password=DxsYms3ceF

# Whether or not to create preload data for demonstration purposes
create_preload_data=True

# AWX Secret key
# It's *very* important that this stay the same between upgrades or you will lose the ability to decrypt
# your credentials
secret_key=Aw5mRtzIHO

# Build AWX with official logos
# Requires cloning awx-logos repo as a sibling of this project.
# Review the trademark guidelines at https://github.com/ansible/awx-logos/blob/master/TRADEMARKS.md
awx_official=true

# Proxy
#http_proxy=http://proxy:3128
#https_proxy=http://proxy:3128
#no_proxy=mycorp.org

# Container networking configuration
# Set the awx_task and awx_web containers' search domain(s)
#awx_container_search_domains=example.com,ansible.com
# Alternate DNS servers
#awx_alternate_dns_servers="10.1.2.3,10.2.3.4"

# AWX project data folder. If you need access to the location where AWX stores the projects
# it manages from the docker host, you can set this to turn it into a volume for the container.
#project_data_dir=/var/lib/awx/projects

# AWX custom virtual environment folder. Only usable for local install.
#custom_venv_dir=/opt/my-envs/

# CA Trust directory. If you need to provide custom CA certificates, supplying
# this variable causes this directory on the host to be bind mounted over
# /etc/pki/ca-trust in the awx_task and awx_web containers.
# If you are deploying on openshift or kubernetes, set the variable to /etc/pki/ca-trust instead,
# as the awx_web and awx_task containers will not run the `update-ca-trust` command.
#ca_trust_dir=/etc/pki/ca-trust/source/anchors

# Include /etc/nginx/awx_extra.conf
# Note the use of glob pattern for nginx
# which makes include "optional" - i.e. not fail
# if file is absent
#extra_nginx_include="/etc/nginx/awx_extra[.]conf"

# Docker compose explicit subnet. Set to avoid overlapping your existing LAN networks.
#docker_compose_subnet="172.17.0.1/16"
#
# Allow for different docker logging drivers
# By Default; the logger will be json-file, however you can override
# that by uncommenting the docker_logger below.
# Be aware that journald may rate limit your log messages if you choose it.
# See: https://docs.docker.com/config/containers/logging/configure/
# docker_logger=journald
```
user: spam-n-eggs
issue_7780: state: open
title: Notification job_metadata as dict
body: ##### ISSUE TYPE
Currently job_metadata is a string and makes it hard to pull information out to make the notification more readable.
Partly because some of the jinja methods are blocked in the GUI for security reasons.
Lastly some of the info is also available in host_status_counts, however this is limited to a single host.


##### SUMMARY
In order to create more readable notification e-mails, is it possible to add a dict with the same information as job_metadata, or have host_status_counts expanded to include all hosts?


Kind Regards,
user: user419
issue_7779: state: open
title: Error during SAML Login - Call to /api/v2/users/26/admin_of_organizations/ failed. GET returned status: 400.
body: 

##### ISSUE TYPE
 - Bug Report

##### SUMMARY
First time of each day we log to AWX using SAML, the login FAILED with this message : ERROR! Call to /api/v2/users/2/admin_of_organizations/ failed. GET returned status: 400. The request could not be understood by the server.

##### ENVIRONMENT
* AWX version: 13.0.0
* AWX install method: docker on linux
* Ansible version:  2.9.10
* Operating System: Centos 7
* Web Browser: Chrome: 83.0.4103.116

##### STEPS TO REPRODUCE

Login to AWX using SAML. It happens usually the morning, or after several hours after the last login 

##### EXPECTED RESULTS

Logged. Home page.

##### ACTUAL RESULTS

Login Failed with an error 400.

##### ADDITIONAL INFORMATION

It only happens once, the next login succeed. Log off/log on also succeed

Here some logs :

10.68.51.166 - - [31/Jul/2020:06:36:41 +0000] "GET /api/v2/ HTTP/1.1" 400 74 "https://test-awx.XXXXX/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36" "-"
2020-07-31 06:36:41,884 ERROR    django.security.SuspiciousOperation The request's session was deleted before the request completed. The user may have logged out in a concurrent request, for example.
2020-07-31 06:36:41,886 WARNING  django.request Bad Request: /api/v2/
2020-07-31 06:36:41,886 WARNING  django.request Bad Request: /api/v2/
[pid: 91|app: 0|req: 486/2588] 10.68.51.166 () {56 vars in 2638 bytes} [Fri Jul 31 06:36:41 2020] GET /api/v2/ => generated 63 bytes in 70 msecs (HTTP/1.1 400) 3 headers in 100 bytes (1 switches on core 0)
2020-07-31 06:36:41,947 ERROR    django.security.SuspiciousOperation The request's session was deleted before the request completed. The user may have logged out in a concurrent request, for example.
2020-07-31 06:36:41,949 WARNING  django.request Bad Request: /api/v2/organizations/
2020-07-31 06:36:41,949 WARNING  django.request Bad Request: /api/v2/organizations/
10.68.51.166 - - [31/Jul/2020:06:36:41 +0000] "GET /api/v2/organizations/?role_level=notification_admin_role HTTP/1.1" 400 74 "https://test-awx.XXXX/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36" "-"
[pid: 88|app: 0|req: 241/2589] 10.68.51.166 () {54 vars in 2713 bytes} [Fri Jul 31 06:36:41 2020] GET /api/v2/organizations/?role_level=notification_admin_role => generated 63 bytes in 169 msecs (HTTP/1.1 400) 3 headers in 100 bytes (1 switches on core 0)
2020-07-31 06:36:41,955 ERROR    django.security.SuspiciousOperation The request's session was deleted before the request completed. The user may have logged out in a concurrent request, for example.
2020-07-31 06:36:41,956 WARNING  django.request Bad Request: /api/v2/users/26/admin_of_organizations/
2020-07-31 06:36:41,956 WARNING  django.request Bad Request: /api/v2/users/26/admin_of_organizations/
[pid: 243|app: 0|req: 158/2590] 10.68.51.166 () {54 vars in 2680 bytes} [Fri Jul 31 06:36:41 2020] GET /api/v2/users/26/admin_of_organizations/ => generated 63 bytes in 177 msecs (HTTP/1.1 400) 3 headers in 100 bytes (1 switches on core 0)
10.68.51.166 - - [31/Jul/2020:06:36:41 +0000] "GET /api/v2/users/26/admin_of_organizations/ HTTP/1.1" 400 74 "https://test-XXXX/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36" "-"


![Capture](https://user-images.githubusercontent.com/36628449/89009640-38d8f680-d30d-11ea-8d91-c2c2c816c6bd.PNG)
![Capture1](https://user-images.githubusercontent.com/36628449/89009643-3bd3e700-d30d-11ea-866a-bb8884c806f5.PNG)

user: mick1627
issue_7773: state: open
title: Evaluate disable form submit buttons per PF guidance
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
PF doc: https://www.patternfly.org/v4/design-guidelines/usage-and-behavior/forms#enabling-and-disabling-buttons


> "Form submit buttons should be disabled until a user starts filling out the form or edits it in any way."
user: nixocio
issue_7760: state: open
title: Relaunch with Parameters should use Original Parameters
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
If you want to rerun a completed job, you can go to your job template, look up its completed job and then hit the rocket ship relaunch button. When clicking this button it seems like it will use the original parameters for the corresponding job run, but it rather uses the current job templates parameters. The point of going back to that completed job is find the exact configuration that was run before, not repeat the current saved config. 
user: humzam96
issue_7723: state: open
title: Allow synchronization of LDAP directory data with RADIUS authentication
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Similar to issue 308, allow users authenticated via RADIUS to be authorized via LDAP group membership, as well as allowing team and organization mapping using LDAP attributes.

A good use case example is that LDAP (such as active directory) already contains all of the team and organization mappings, as well as the authorization groups, which currently cannot be derived from RADIUS, while still allowing the stronger authentication methods that RADIUS can provide.  

user: monorailpilot
labels: component:authentication: For issues related to authentication
issue_7717: state: open
title: Record any changes or disablement in External Logger settings into logs before applying 
body: 
##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI
 
##### SUMMARY
For security auditing purposes it would be ideal for the External Logger to record any changes, especially disablement along with username info, into the said logs before performing the action.

##### ENVIRONMENT
* AWX version: >=12.0.0
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  >=2.9.9
* Operating System: ANY
* Web Browser: ANY

##### STEPS TO REPRODUCE

Make a change to the External Logger settings, click save.

##### EXPECTED RESULTS
 Ideally pending changes along with user info should be recorded into the said logging facility.


##### ACTUAL RESULTS

Changes are committed without indication of what changed.

##### ADDITIONAL INFORMATION

None

user: tgates81
issue_7699: state: open
title: Can't install project using docker-compose on Mac from devel or 13.0.0
body: ##### ISSUE TYPE

 - Bug Report

##### SUMMARY

I've tried cloning the project and following the [Docker Compose installation instructions](https://github.com/ansible/awx/blob/devel/INSTALL.md#docker-compose) for both `devel` and `13.0.0`, and neither version results in a working installation on my Mac.

##### ENVIRONMENT
* AWX version: `13.0.0` or `devel`
* AWX install method: docker for mac
* Ansible version: 2.9.10
* Operating System: macOS (10.15.5)
* Web Browser: Safari

##### STEPS TO REPRODUCE

  1. `git clone https://github.com/ansible/awx.git`
  2. `cd awx/installer`
  3. `ansible-playbook -i inventory install.yml`

##### EXPECTED RESULTS

After some time for database migration to complete, the AWX installation should be accessible at http://localhost/

##### ACTUAL RESULTS

  1. The page http://localhost/ remains stuck at 'Server Error' indefinitely (waited 20 minutes).
  1. The awx_task and awx_web container logs show:

     ```
     django.db.utils.OperationalError: FATAL:  no pg_hba.conf entry for host "172.24.0.5", user "awx", database "awx", SSL off
     ```

  1. The awx_posgres container logs show:

     ```
     2020-07-21 20:43:10.990 UTC [1466] FATAL:  no pg_hba.conf entry for host "172.24.0.5", user "awx", database "awx", SSL off
     ```

##### ADDITIONAL INFORMATION

Related issue: https://github.com/ansible/awx/issues/4736

Full initial startup log of the postgres container (using `docker logs awx_postgres`):

```
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /var/lib/postgresql/data/pgdata ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default timezone ... Etc/UTC
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... 
PostgreSQL Database directory appears to contain a database; Skipping initialization

2020-07-21 21:54:15.512 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2020-07-21 21:54:15.512 UTC [1] LOG:  listening on IPv6 address "::", port 5432
2020-07-21 21:54:15.516 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2020-07-21 21:54:15.571 UTC [29] LOG:  database system was shut down at 2020-07-21 21:54:11 UTC
2020-07-21 21:54:15.593 UTC [1] LOG:  database system is ready to accept connections
2020-07-21 21:54:15.735 UTC [36] LOG:  incomplete startup packet
2020-07-21 21:54:15.738 UTC [37] LOG:  incomplete startup packet
2020-07-21 21:54:16.726 UTC [38] FATAL:  no pg_hba.conf entry for host "172.28.0.4", user "awx", database "postgres", SSL off
2020-07-21 21:54:16.726 UTC [39] FATAL:  no pg_hba.conf entry for host "172.28.0.2", user "awx", database "postgres", SSL off
2020-07-21 21:54:19.370 UTC [40] FATAL:  no pg_hba.conf entry for host "172.28.0.4", user "awx", database "awx", SSL off
...
```

##### WORKAROUND

I reset the entire environment using:

```
cd ~/.awx/awxcompose
docker-compose down -v
cd ~
rm -rf ~/.awx
```

Then I initialized the environment again. Same issue. But then I deleted the local `pgdocker` directory and restarted the postgres container, and it seems on second try, the database was initialized correctly:

```
cd ~/.awx/awxcompose
rm -rf ~/.awx/pgdocker
docker-compose restart postgres
```

At this point, the 'AWX is upgrading' message starts appearing when I access http://localhost/, and the initialization process works correctly, resulting in a running AWX installation.
user: geerlingguy
issue_7687: state: open
title: Blocklist/Allowlist SAML Users From Being Created
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Per an user's request, they're wondering if it's possible to blacklist/whitelist users who are authenticating via SAML. Could this be implemented by specifying an attribute to lookup in the response?
user: imareporter
labels: component:authentication: For issues related to authentication
issue_7686: state: open
title: Add an Organizational "Use" Role
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Per an user's request, they would like the addition of an "Use" role on an organizational level. The organizational "Use" role should give access to all of the resources within the configured organization.
user: imareporter
issue_7684: state: open
title: When Specifying ignore_unreachable: yes in a Task, AWX Inventory Host View Should Reflect Unreachable Hosts as Successful
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
When specifying `ignore_unreachable: yes` in a playbook task, any hosts that were unreachable at the time show as `unreachable` and `skipped`, but not `failed`. 

However, when you look in the AWX host inventory view, hosts that were unreachable but didn't essentially fail show as failing:

![image](https://user-images.githubusercontent.com/25699347/67393872-40df5b00-f571-11e9-8d0b-7c1566b1214d.png)

In the preceding example, CentOS1 was unreachable while CentOS2 was reachable. The playbook task had `ignore_unreachable: yes` included. The `PLAY RECAP` shows CentOS1 being unreachable and skipped, but not failed:

~~~
PLAY RECAP *********************************************************************
CentOS1                    : ok=0    changed=0    unreachable=1    failed=0    skipped=1    rescued=0    ignored=0   
CentOS2                    : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
~~~

Oddly though, in `awx-manage shell_plus`, CentOS1 is showing active failures:

~~~
>>> r = Host.objects.filter(id=34)
>>> for x in r:
...     print(x.has_active_failures)
... 
True
~~~

As a test, I went into `psql` and manually updated `main_host` to change `has_active_failures` to `False`. After doing this, I verified the change via `awx-manage shell_plus` and re-ran the same job template.

~~~
>>> r = Host.objects.filter(id=34)
>>> for x in r:
...     print(x.has_active_failures)
... 
False
~~~

As I would expect, the job template was successful, however, CentOS1 was still marked as a failed node, even though no failures were reported in the `PLAY RECAP`.

I verified the reversion via `awx-manage shell_plus`:

~~~
>>> r = Host.objects.filter(id=34)
>>> for x in r:
...     print(x.has_active_failures)
... 
True
~~~

Per an user's request, they would like to see hosts that were marked `unreachable` and `skipped`, but not `failed` as successful in the AWX inventory host view.
user: imareporter
issue_7667: state: open
title: AWX Does Not Update User Object Permissions When LDAP User Flags By Group Is Removed
body: ##### ISSUE TYPE
 - Feature Request

##### SUMMARY

An user was wondering how AWX handles a change in LDAP Team Mapping (e.g. If the `is_superuser` mapping is removed, does AWX update the user objects?).

I observed the following:

If the `LDAP User Flags by Group` is removed, pre-existing users in AWX do not update according to the changes made. 

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->
1. Create a LDAP connection from AWX.
2. Specify a `LDAP User Flags by Group` parameter.
3. Login with a LDAP user and verify its creation within AWX.
4. Verify the user has the proper permissions.
5. Change the `LDAP User Flags by Group` to no longer reflect the user.

##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->
I would expect the user object within AWX to update itself based on the LDAP mapping specified.

##### ACTUAL RESULTS

<!-- What actually happened? -->
It looks like the user object has to be manually updated in order for the permissions to update. If `is_superuser` is granted to many users in a LDAP group and the mapping has to change, this could be an undesired behavior.
user: imareporter
labels: component:authentication: For issues related to authentication
issue_7666: state: open
title: Ability to Add Custom Validation for Survey Answers
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Per an user's request, they would like to be able to specify their own conditions on acceptable survey answers (i.e. regular expressions). 

In the user's environment, they would like to validate an IP address in the survey answer. This could also extend out to other use cases (e.g. If an user has a naming convention for assets, systems, etc., the user can populate information in order to verify the provided answer is considered acceptable.)

user: imareporter
issue_7659: state: open
title: Scheduler/Dispatcher does not honor all schedules
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
We are testing AWX/Ansible Tower as a scalable central Deployment-Method & Technical Workflow Handler and ran into an issue with schedules.
We have a colocated kubernetes cluster of 15 AWX instances (1485 capacity) & dedicated DB.
For testing we've made several testjobs.
While trying 100 scheduled Jobs per minute, we've been experiencing Database-Locks (330 seconds while updating "Last Job ID" on Templates) when using the same project, job-template & inventory.

So we've split and reduced it to:
- 8 projects
  - each project has one inventory
  - each project has one job template
    - each job template is run 6 times per minute (0, 10, 20, 30, 40, 50)

Scheduler should therefore start 48 Jobs per minute.

But it only starts around 10-30 Jobs per minute.

We've couldn't find any errors in logs.


##### ENVIRONMENT
* AWX version: 13.0.0
* AWX install method: minishift
* Ansible version:  2.9.10
* Operating System: CentOS8
* Web Browser: Firefox, Chromium

##### STEPS TO REPRODUCE

Enable SSH Pipelining in ansible.cfg

Create Playbook to simulate workload:
- creates tempdir
- pulls ansible/awx into tempdir
- writes 100 lines via ansible loop into a file (jep, not efficient, but it shouldn't be, just take some time)
- wait 10s
- remove tempdir

Create Resources:
- 8 projects
  - one inventory per project with 15 hosts
  - one inventory per job template with 15 forks
    - 6 schedules per job template, run once per minute für seconds: 0, 10, 20, 30, 40, 50

##### EXPECTED RESULTS

48 Jobs per minute

##### ACTUAL RESULTS

10-30 Jobs per minute, even with a lot of remaining capacity (~75%)

##### ADDITIONAL INFORMATION

Made a simple script to log job counts. Example output:
```
Date | Queued Jobs | Queued Diff | Running Jobs | Finished Jobs (not canceled) | Finished Jobs Diff
2020-07-20T15:41:22+02:00 | 41 | 33 | 19 | 625169 | 12
2020-07-20T15:42:23+02:00 | 10 | -31 | 23 | 625204 | 35
2020-07-20T15:43:25+02:00 | 14 | 4 | 11 | 625225 | 21
2020-07-20T15:44:26+02:00 | 14 | 0 | 11 | 625244 | 19
2020-07-20T15:45:27+02:00 | 2 | -12 | 19 | 625267 | 23
2020-07-20T15:46:28+02:00 | 4 | 2 | 15 | 625288 | 21
2020-07-20T15:47:30+02:00 | 13 | 9 | 33 | 625320 | 32
2020-07-20T15:48:31+02:00 | 40 | 27 | 19 | 625337 | 17
2020-07-20T15:49:32+02:00 | 21 | -19 | 19 | 625363 | 26
2020-07-20T15:50:33+02:00 | 15 | -6 | 15 | 625379 | 16
2020-07-20T15:51:35+02:00 | 9 | -6 | 13 | 625405 | 26
2020-07-20T15:52:36+02:00 | 2 | -7 | 17 | 625424 | 19
2020-07-20T15:53:38+02:00 | 32 | 30 | 19 | 625443 | 19
2020-07-20T15:54:39+02:00 | 3 | -29 | 26 | 625478 | 35
2020-07-20T15:55:40+02:00 | 1 | -2 | 12 | 625502 | 24
2020-07-20T15:56:41+02:00 | 2 | 1 | 12 | 625520 | 18
2020-07-20T15:57:42+02:00 | 1 | -1 | 9 | 625537 | 17
2020-07-20T15:58:44+02:00 | 27 | 26 | 11 | 625551 | 14
2020-07-20T15:59:45+02:00 | 3 | -24 | 39 | 625579 | 28
2020-07-20T16:00:46+02:00 | 17 | 14 | 45 | 625604 | 25
2020-07-20T16:01:47+02:00 | 10 | -7 | 53 | 625641 | 37
2020-07-20T16:02:48+02:00 | 6 | -4 | 30 | 625668 | 27
2020-07-20T16:03:50+02:00 | 6 | 0 | 14 | 625693 | 25
2020-07-20T16:04:51+02:00 | 4 | -2 | 14 | 625713 | 20
2020-07-20T16:05:52+02:00 | 9 | 5 | 19 | 625730 | 17
```

A lot of capacity is remaining:
```json
{
    (...)
    "name": "tower",
    (...)
    "capacity": 1485,
    "committed_capacity": 0,
    "consumed_capacity": 310,
    "percent_capacity_remaining": 79.12,
    (...)
}
```
user: moonrail
issue_7649: state: open
title: RFE: Track the user token and alert the user in advance to create a new token before it expires.
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Currently, there is no way to let the user know that the token is about to expire.

##### Customer Explanation:

- Is there any add-on or plugin where we can have the notification or alert mechanism to each user on his token expiry in Tower. By default, validity is 1000 years. As per Organization best practices, we have set to few days. However, we see there is no option in Ansible Tower to send the email or any alert notification to user in advance.
- We see this usage of token in most of API usage and during some workflow process like CI-CD pipeline in DevOps. Workflow process fails due this Token expiry and users are complaining on no notification sent.

user: swatinarvekar
issue_7646: state: open
title: Allow Project Admins to Configure the Project's Ansible Environment
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Per an user's request, Project Admins should be able to configure which Python virtual environment is used within a Project. Currently, only System/Organization Administrators have this ability.
user: imareporter
issue_7639: state: open
title: Add the Ability to Lookup Last Time a Credential Was Utilized
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Per a customer's request, they would like to be able to review the last time a Credential was utilized.

Credentials show a modified date/time:
~~~
"modified": "2019-05-28T20:01:05.156590Z"
~~~

In the same way a Credential is modified, they would like to see a "last-utilized" timestamp.
user: imareporter
issue_7638: state: open
title: Add the Ability to Lookup Last Time an Inventory Was Utilized
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Per an user's request, they would like to be able to review the last time an Inventory was utilized.

Inventories show a modified date/time:
~~~
"modified": "2019-05-28T20:00:24.252273Z"
~~~

In the same way an Inventory is modified, they would like to see a "last-utilized" timestamp.
user: imareporter
issue_7637: state: open
title: Allow Users With Update Role on Inventory to Add/Remove Hosts
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
- UI

Ansible Tower currently does not have the ability to allow a Normal User to add/remove hosts from an Inventory (unless you're a Tower admin or admin of an Inventory). Per an user's request, they would like to be able to give a normal user the **Update** role and then have the normal user add/remove hosts from the Inventory (without giving them full admin rights or full rights on the Inventory).
user: imareporter
issue_7632: state: open
title: job host details modal changes position unexpectedly when changing tabs
body: ##### ISSUE TYPE
 - Bug Report

##### STEPS TO REPRODUCE
- open the host details modal on a job
- change to different tabs

##### EXPECTED RESULTS
- The modal should expand in one direction (down). Top edge position should be fixed.

##### ACTUAL RESULTS
- The modal expands in two directions


##### ADDITIONAL INFORMATION
![host_details](https://user-images.githubusercontent.com/9753817/87708276-774cae00-c770-11ea-9481-e0e112a25d78.gif)

user: jakemcdermott
labels: qe:regression: it used to work
qe:visual: visual defect
issue_7599: state: open
title: AWX Brand Logos - Incorrect Path - Image Build
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When you tray to build a local image with AWX Brand Logos, the main.yml task copy the logos to "../awx/ui/client/", but the website show the logos from this path: "../awx/ui/static/assets", so you can't see the AWX Brand Logos and you see the Potato.

##### ENVIRONMENT
* AWX version: 13.0.0
* AWX install method: docker on linux
* Ansible version:  2.9.9
* Operating System: CentOS 7
* Web Browser: Any

##### STEPS TO REPRODUCE
Modify the inventory to build the image locally.

##### EXPECTED RESULTS
See the AWX Brand Logos.

##### ACTUAL RESULTS
The Potato Logo appears on the website.

##### ADDITIONAL INFORMATION
I modify the main.yml in this path ~/awx/installer/roles/image_build/tasks/main.yml to replace the logos inside this folder: ../awx/ui/static.

Also, I have to modify the owner of the folder ../awx/ui/static.

After that, I rebuild the docker image and the AWX Brand Logos appears.

user: gabiancofiore
issue_7593: state: open
title: awxkit: awx cli inventory_sources create fails with Inventory Admin permissions
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY

If users have Inventory Admin permissions, then they are not allowed to create inventory sources.

##### ENVIRONMENT
* AWX version: 11.2.0
* AWX install method: docker
* Ansible version:  2.9.9
* Operating System: Debian 9
* Web Browser: Firefox 74

##### STEPS TO REPRODUCE

```
GET /api/v2/users/76
{
    "id": 76,
    "type": "user",
    "url": "/api/v2/users/76/",
    "related": {
        ...
    },
    "summary_fields": {
        "user_capabilities": {
            "edit": true,
            "delete": true
        }
    },
    "created": "2019-12-11T17:26:44.744286Z",
    "username": "myuser",
    "first_name": "Service User",
    "last_name": "myuser",
    "email": myuser@example.com",
    "is_superuser": false,
    "is_system_auditor": false,
    "ldap_dn": "",
    "last_login": "2020-07-09T14:46:16.679122Z",
    "external_account": null,
    "auth": []
}
```
```
GET /api/v2/users/76/roles/
{
    "count": 4,
    "next": null,
    "previous": null,
    "results": [
        {
            "id": 1305,
            "type": "role",
            "url": "/api/v2/roles/1305/",
            "related": {
                "users": "/api/v2/roles/1305/users/",
                "teams": "/api/v2/roles/1305/teams/",
                "credential": "/api/v2/credentials/75/"
            },
            "summary_fields": {
                "user_capabilities": {
                    "unattach": true
                },
                "resource_name": "mycredential",
                "resource_type": "credential",
                "resource_type_display_name": "Credential"
            },
            "name": "Use",
            "description": "Can use the credential in a job template"
        },
        {
            "id": 233,
            "type": "role",
            "url": "/api/v2/roles/233/",
            "related": {
                "users": "/api/v2/roles/233/users/",
                "teams": "/api/v2/roles/233/teams/",
                "organization": "/api/v2/organizations/6/"
            },
            "summary_fields": {
                "user_capabilities": {
                    "unattach": true
                },
                "resource_name": "myorga",
                "resource_type": "organization",
                "resource_type_display_name": "Organization"
            },
            "name": "Member",
            "description": "User is a member of the organization"
        },
        {
            "id": 227,
            "type": "role",
            "url": "/api/v2/roles/227/",
            "related": {
                "users": "/api/v2/roles/227/users/",
                "teams": "/api/v2/roles/227/teams/",
                "organization": "/api/v2/organizations/6/"
            },
            "summary_fields": {
                "user_capabilities": {
                    "unattach": true
                },
                "resource_name": "myorga",
                "resource_type": "organization",
                "resource_type_display_name": "Organization"
            },
            "name": "Inventory Admin",
            "description": "Can manage all inventories of the organization"
        },
        {
            "id": 1382,
            "type": "role",
            "url": "/api/v2/roles/1382/",
            "related": {
                "users": "/api/v2/roles/1382/users/",
                "teams": "/api/v2/roles/1382/teams/",
                "project": "/api/v2/projects/166/"
            },
            "summary_fields": {
                "user_capabilities": {
                    "unattach": true
                },
                "resource_name": "myproject",
                "resource_type": "project",
                "resource_type_display_name": "Project"
            },
            "name": "Use",
            "description": "Can use the project in a job template"
        }
    ]
}
```



##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->

```
awx --conf.host https://awx.example.com --conf.token mytoken inventory_sources create --inventory 238 --name foobar --source scm --credential 75 --source_project 166 --source_path inventory.py
{
     "id": 684,                                                                                                                        
     "type": "inventory_source",                                                                                                       
     "url": "/api/v2/inventory_sources/684/",
    ...
}
```

##### ACTUAL RESULTS

<!-- What actually happened? -->
```
awx --conf.host https://awx.example.com --conf.token mytoken inventory_sources create --inventory 238 --name foobar --source scm --credential 75 --source_project 166 --source_path inventory.py
usage: awx inventory_sources [-h] action ...

positional arguments:
  action
    list
    get
    modify
    delete
    update
    associate
    disassociate

optional arguments:
  -h, --help    show this help message and exit

awx inventory_sources: argument action: invalid choice: 'create' (choose from 'list', 'get', 'modify', 'delete', 'update', 'associate', 'disassociate')
```

##### ADDITIONAL INFORMATION

Assigning OrgAdmin permissions to the user helps, but this shouldn't be necessary.

user: anxstj
issue_7589: state: open
title: LDAP connection fails
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
LDAP integration fails because of certificate validation. I have on my awx hosts the certificates in /etc/pki/ca-trust/source/anchors. This dir is mounted and if I check the containers I can see the certificates there. If I do an ldapsearch from the hosts, it successfully connects and retrieves the data.

But if i try to login to awx with an ldap user I see in the logs:

`2020-07-09 10:23:19,088 DEBUG    django_auth_ldap Initiating TLS
2020-07-09 10:23:19,111 WARNING  django_auth_ldap Caught LDAPError while authenticating a.addu01: SERVER_DOWN({'desc': "Can't contact LDAP server", 'info': 'error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed (self signed certificate in certificate chain)'},)
2020-07-09 10:23:19,118 WARNING  awx.api.generics Login failed for user a.addu01 from 10.244.0.1
2020-07-09 10:23:19,126 WARNING  django.request Unauthorized: /api/login/
2020-07-09 10:23:19,126 WARNING  django.request Unauthorized: /api/login/`

##### ENVIRONMENT
* AWX version: 13.0.0
* AWX install method: k8s
* Ansible version:  2.9.9
* Operating System: CentOS 7.7
* Web Browser: Chrome

##### STEPS TO REPRODUCE

1. Configure the LDAP integration
2. Try to login with ldap user

##### EXPECTED RESULTS

Login successful. 

##### ACTUAL RESULTS

Connectivity to the ldap server fails with cert validation.

##### ADDITIONAL INFORMATION

I'm not sure if this is related, but I also see a lot of these errors in the awx-web logs:
`2020-07-09 10:23:23,150 ERROR    django.security.DisallowedHost Invalid HTTP_HOST header: '_:443'. The domain name provided is not valid according to RFC 1034/1035.
2020-07-09 10:23:23,156 WARNING  django.request Bad Request: /
2020-07-09 10:23:23,156 WARNING  django.request Bad Request: /
[pid: 85|app: 0|req: 329/1643] 10.244.0.1 () {28 vars in 288 bytes} [Thu Jul  9 10:23:23 2020] GET / => generated 3884 bytes in 43 msecs ( 400) 4 headers in 155 bytes (1 switches on core 0)
10.244.0.1 - - [09/Jul/2020:10:23:23 +0000] "GET /" 400 3884 "-" "-" "-"
2020-07-09 10:23:26,311 ERROR    django.security.DisallowedHost Invalid HTTP_HOST header: '_:443'. The domain name provided is not valid according to RFC 1034/1035.
2020-07-09 10:23:26,318 WARNING  django.request Bad Request: /
2020-07-09 10:23:26,318 WARNING  django.request Bad Request: /`

user: AdrianDutu
issue_7588: state: open
title: Intermittent GET -1 errors in UI - ERR_CONTENT_LENGTH_MISMATCH
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Intermittent errors retrieving data from the api through the user interface. Sometimes it's even impossible to access the settings page because of the ERR_CONTENT_LENGTH_MISMATCH. 

##### ENVIRONMENT
* AWX version: 13.0.0 and 12.0.0
* AWX install method: docker on linux
* Ansible version:  2.9.10
* Operating System: CentOS 7
* Web Browser: Chrome, Firefox, Edge

##### STEPS TO REPRODUCE

Use AWX normally -> Errors occur intermittantly everywhere (from the login, home, settings page to specific job runs).

##### EXPECTED RESULTS

I expect the pages to load successfully as it's rather annoying getting error messages every couple of clicks :) 

##### ACTUAL RESULTS

![image](https://user-images.githubusercontent.com/65527456/87008230-b8b6e980-c1c3-11ea-995e-41870dc4f7cf.png)
![image](https://user-images.githubusercontent.com/65527456/87014521-8eb5f500-c1cc-11ea-99b9-0079d4d301f7.png)

##### ADDITIONAL INFORMATION

The are no errors inside the container itself, just the content length in the response is set incorrectly which leads to the browsers not loading/displaying the data. 

user: zigaSRC
issue_7581: state: open
title: API does not have a text size limit on the "Description" field for user tokens and descriptions for custom credential types.
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
The Users > Tokens > description for the token doesn't have a character limit. EDIT: it also doesn't have one for custom credential type descriptions. an audit should be done of all description char limits.
![Screenshot from 2020-07-08 14-51-16](https://user-images.githubusercontent.com/19942822/86959327-9ec9c800-c12b-11ea-9cdd-9aa3fb0ac0a8.png)

##### STEPS TO REPRODUCE
1. Get a user, go to the tokens tab.
2. Create a token with a very, very long description. 
3. Save

##### EXPECTED RESULTS
It doesn't let you do that.

##### ACTUAL RESULTS
It lets a very long string go through without issues.
user: dsesami
issue_7579: state: open
title: Change inventory_sources_with_failures to a list of ids
body: ##### ISSUE TYPE
 - Feature Idea / Improvement

##### SUMMARY
Currently:

When fetching Inventories, the value `inventory_sources_with_failures` is currently a count of sources with failures. From a UI perspective, this effectively acts as a boolean (0 or non-zero) to indicate whether the Inventory has a successful (green) sync status or not. When a websocket event shows that an inventory source is updated with a success/failure sync status, the UI does not have enough information to know whether this means the inventory as a whole is now green or red, and additional API calls are required to keep the UI in sync.

Proposed change:

Change `inventory_sources_with_failures` to list of ids, rather than a count. The UI would be able to add/remove ids to this list in the client and display the Inventory status accurately without making successive calls to the API.

Alternatively, a separate key could be added to the response that includes the list of ids, to avoid a breaking change.

user: keithjgrant
issue_7565: state: open
title: Redirect users away from routes when they don't have permission but attempt to directly access
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
In the old app, if a user does not have permission to, for example, add a team but they attempt to access that route directly via URL manipulation then we'll redirect them back out to the Teams list and throw a modal saying they don't have permissions to add a team:

![team_add_redirect](https://user-images.githubusercontent.com/9889020/86794281-52528f80-c03a-11ea-8690-a2f4e3da7316.gif)

In the new app, we display the form and an error isn't shown until the user attempts to add the team.

Perhaps there are other ways to handle this situation.  The purpose of this issue is to document the current difference in case we want to act on it.

user: mabashian
labels: type:feature: prioritized on a feature board
issue_7558: state: open
title: awx workflow_jobs monitor does not show approval nodes
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->
while testing out https://github.com/ansible/awx/pull/6790 I noticed that a workflow that has a approval node does not show this in the monitor output.

```
 awx workflow_jobs monitor 33
------Starting Standard Out Stream------
Launching foo...
 ↳ 34 - ansible-examples.git (git) successful
 ↳ 36 - JobTemplate - AgentBuyer鈑 successful
 ↳ 35 - inventory-aws - inventory-aws successful
------End of Standard Out Stream--------
```

hangs out until the approval nodes does exit either by approving, denying or timing out (probably because workflow itself shows itself as not done) but does not show that it is waiting on an approval node.
user: kdelee
issue_7541: state: open
title: awxkit: selecting inventory by name fails if name is a number
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY

If an inventory or an inventory_source name consists only of numbers then this inventory or inventory_source can not be selected by name. But this is stated in the help description.

```
usage: awx inventory get [-h] [-f {json,yaml,jq,human}] [--filter TEXT] [--conf.color BOOLEAN] [-v] id

positional arguments:
  id                    the ID (or unique name) of the resource
```

I'm in the progress of porting a script from tower-cli to awxkit and now I'm in a situation where I can not select any inventory or inventory_source because all these are named as customer numbers. This is probably a corner case, but in this case awxkit behaves differently than tower-cli.

##### ENVIRONMENT
* AWX version: 11.2.0
* AWX install method: docker
* Ansible version:  2.9.9
* Operating System: Fedora 32
* Web Browser: Firefox 74

##### STEPS TO REPRODUCE

```
awx --conf.host https://awx.example.com --conf.token mytoken --conf.insecure inventory create --name 123 --organization 1
{
     "id": 10,
     ...
     "name": "123",
     "description": "",
     "organization": 1,
}

awx --conf.host https://awx.example.com --conf.token mytoken --conf.insecure inventory get 123
{"detail": "Not found."}
```

##### EXPECTED RESULTS

The awx cli should be able to find inventories explicitly by name as tower-cli was doing it:

```
tower-cli inventory get -n 123 --insecure -t mytoken -h awx.example.com
{
  "id": 10,
  ...
}
```
tower-cli uses an additional parameter instead of the positional argument.

##### ACTUAL RESULTS

The awx cli failes to find the inventory with name "123"

```
awx --conf.host https://awx.example.com --conf.token mytoken --conf.insecure inventory get 123
{"detail": "Not found."}
```


user: anxstj
issue_7531: state: open
title: "Multiple hosts matched the request!" - issue with reverse proxy for ansible Tower Provisioning Callback
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
If reverse proxy host(name or IP) is in inventory of Tower and run curl, I get {"msg":"Multiple hosts matched the request!"} error message.

##### ENVIRONMENT
* Ansible Tower version: 3.7.0
* Operating System: RHEL 7.7

##### STEPS TO REPRODUCE

Our infrastructure: 3 hosts
1) external tester host (run curl for the callbacks) : 172.31.1.55
2) reverse proxy host : 172.31.8.131
3) internal tester host (Tower run on this host) : 172.31.4.170

If the reverse proxy host(name or IP) is in inventory of Tower on internal tester host and run curl on external tester host, I get {"msg":"Multiple hosts matched the request!"} error message.
Confirmed that Provisioning Callback does not work if reverse proxy host(name or IP) is in inventory of Tower.
However, If I remove the reverse proxy host(name or IP) from the inventory of Tower and rerun curl for Provisioning Callback, I don’t see the error message.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[root@ip-172-31-1-55 ~]# curl -kvvv -H "X-Forwarded-For: 172.31.8.131" -d "host_config_key=c239daf4-fd15-40da-a562-71d08a41b620" https://172.31.4.170/api/v2/job_templates/14/callback/ -v
* About to connect() to 172.31.4.170 port 443 (#0)
*   Trying 172.31.4.170...
* Connected to 172.31.4.170 (172.31.4.170) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* skipping SSL peer certificate verification
* SSL connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
* Server certificate:
* 	subject: CN=localhost
* 	start date: Jul 01 00:27:36 2020 GMT
* 	expire date: Oct 03 00:27:36 2022 GMT
* 	common name: localhost
* 	issuer: CN=localhost
> POST /api/v2/job_templates/14/callback/ HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 172.31.4.170
> Accept: */*
> X-Forwarded-For: 172.31.8.131
> Content-Length: 52
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 52 out of 52 bytes
< HTTP/1.1 400 Bad Request
< Server: nginx
< Date: Thu, 02 Jul 2020 00:38:29 GMT
< Content-Type: application/json
< Content-Length: 45
< Connection: keep-alive
< Vary: Accept, Accept-Language, Origin, Cookie
< Allow: GET, POST, HEAD, OPTIONS
< X-API-Product-Version: 3.7.1
< X-API-Product-Name: Red Hat Ansible Tower
< X-API-Node: localhost
< X-API-Time: 0.089s
< Content-Language: en
< X-API-Total-Time: 0.118s
< 
* Connection #0 to host 172.31.4.170 left intact
{"msg":"Multiple hosts matched the request!"}[root@ip-172-31-1-55 ~]# 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       
![Screenshot from 2020-07-02 10-41-54](https://user-images.githubusercontent.com/58404577/86304002-dbd81b00-bc50-11ea-8647-c8423093cbda.png)

    
##### EXPECTED RESULTS
Even if a reverse proxy host(name or IP) is in inventory of Tower, it may need to be successfully run curl for Provisioning Callback. 

##### ACTUAL RESULTS
If reverse proxy host(name or IP) is in inventory of Tower and run curl, I get {"msg":"Multiple hosts matched the request!"} error message.

##### ADDITIONAL INFORMATION
None

user: garamirseokim
issue_7523: state: open
title: Improve import/export usability when dealing with secrets
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
When exporting entities that have encrypted fields such as passwords and other sensitive information, the exported data does not include any indication if a encrypted field had a value during export time. This is problematic because there are some entities like the SSH credentials that can have multiple variations of encrypted data, for example, it can have username/password or username/ssh key or username/ssh key/ssh key passphrase... Considering the exported SSH credential example below:

```json
    {
      "credential_type": {
        "kind": "scm",
        "name": "Source Control",
        "type": "credential_type"
      },
      "description": "SCM credential for git@github.com",
      "inputs": {
        "ssh_key_data": "",
        "username": "git"
      },
      "name": "git@github.com",
      "natural_key": {
        "credential_type": {
          "kind": "scm",
          "name": "Source Control",
          "type": "credential_type"
        },
        "name": "git@github.com",
        "organization": null,
        "type": "credential"
      },
      "organization": null,
      "user": {
        "type": "user",
        "username": "eng_user"
      }
    },
```

It has the `ssh_key_data` input field which indicates that it was filled but it is set to an empty string and by just taking the export command output and/or the exported data we can't tell if that field information should be replaced/update.

With all that said it would be great that the import/export process would offer a better way to identify what should be updated before importing. By default, the API returns encrypted fields' values as `$encrypted$`. The export could leave that information in there so one could easily find which places sensitive information should be provided. (Or a different placeholder that would make easy to search/replace). Then the import wouldn't do anything until the data provided doesn't contain any placeholder value.
user: elyezer
issue_7518: state: open
title: User -> Access list does not group Roles correctly
body: 
![image](https://user-images.githubusercontent.com/722880/86280548-015e1980-bbaa-11ea-9655-173c2c604d9a.png)

Roles for the same related resource should live on the same line. From the above screenshot I expected only 2 rows, not 4. Each row should have roles `admin, read`
user: chrismeyersfsu
issue_7494: state: open
title: RFE: Expanding the Keystone v3 support for OpenStack Credential
body: ##### ISSUE TYPE
 - Enhancement

##### COMPONENT NAME
- API
- UI

##### SUMMARY
- Keystone v3 requires user_domain_name  to authenticate, but AWX openstack credential doesn't provide / request those in the credential templating.

Currently when the cloud.yml file is generated it is populated with:

```
clouds:
  devstack:
    auth:
      auth_url: 
      domain_name: 
      password:
      project_name:
      username:

```
Instead for v3 this should include "user_domain_name" & "project_domain_name" :
```
clouds:
  devstack:
    auth:
      auth_url: 
      domain_name:
      password:
      project_name:
      project_domain_name:
      username: 
      user_domain_name:
```
##### STEPS TO REPRODUCE
- No steps needed as it's a feature request.
user: SWADESNA
issue_7459: state: open
title: Jira Service Desk automation webhook support
body: ##### ISSUE TYPE
 - Add webhook service support for Jira Service Desk automation

##### SUMMARY
My small engineering team would like to use Jira Service Desk (JSD) automation rules to facilitate user self-service for common, low-risk requests. Most of our requests are already automated using Ansible playbooks and roles, however, we currently have to use Jenkins to provide self-service. The desired goal would be to trigger a job template from a JSD webhook payload. The final step of the role/playbook would be to update the Jira issue via API with success or failure. To that end, we need the contents of the JSD payload available to playbooks and roles so we can execute based upon custom fields for each request type.

For example, say a developer wants to pull production down to stage. The JSD request type requires approval from a member of QA so any ongoing work in our test environment does not get blown away. Once that approval is received, JSD sends a POST webhook containing the standard issue payload containing two custom fields (eg. source and target). The webhook triggers a job template which passes the payload to Ansible as a known variable, say perhaps tower_webhook_payload, which can then be used as needed. At that point we'd have the Jira issue id and could post back to Jira REST api to update the status of the issue.

https://developer.atlassian.com/server/jira/platform/jira-service-desk-webhooks/

Payload details:
```
{
    "issue" : {
        "id": "18001",
        "self": "https://mycompany.atlassian.net/rest/api/2/issue/18001",
        "key": "IT-4",
        "fields": {
            "summary" : "I cannot get my second screen to work",
            "description" : "Have tried multiple ports, cables, but no luck",
            "status" : {
                "name" : "Waiting for Support",
                ...
            },
            "reporter" : {
                "name" : "jsmith",
                ...
            },
            ...
        }
    },
    "timestamp" : 1462941258113 // Time when webhook was fired - UTC milliseconds from epoch
}
```

user: jjtroberts
issue_7453: state: open
title: SyntaxError: EOF while scanning triple-quoted string literal: PIP Module fails in Container Group when setting executable parameter
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When running a playbook with the pip module from a container group where the executable parameter is set, job errors out with encrypted playbook response and error:

```shell
SyntaxError: EOF while scanning triple-quoted string literal
command terminated with exit code 1
", "module_stdout": "", "msg": "MODULE FAILURE
See stdout/stderr for the exact error", "rc": 1} PLAY RECAP ********************************************************************* awx-job-29124 : ok=3 changed=2 unreachable=0 failed=1 skipped=1 rescued=0 ignored=
```

##### ENVIRONMENT
* AWX version: 9.3.0
* AWX install method: docker
* Ansible version:  2.9.5
* Operating System: CentOS 7
* Web Browser: Firefox 

##### STEPS TO REPRODUCE
Playbook task as below using Python3 interpreter.

```yaml
    - name: Install Openshift Python Library
      pip:
        name: openshift
        executable: pip3
```

##### EXPECTED RESULTS

Job to run and pip to install while forwarding errors to the output window.

##### ACTUAL RESULTS

Job executes on target k8s cluster, pod gets created then terminates after 45 seconds. Job in AWX Errors with encrypted error details and SyntaxError: EOF while scanning triple-quoted string literal at the end.


##### ADDITIONAL INFORMATION

Job executes on leaf node using direct SSH without issue, error only occurs when using container groups.

I was originally running the hardcoded executable parameter when it was using the auto_legacy interpreter discovery. When using python2 it, understandably, fails due to my node not having setuptools for python2 installed.  Job executes successfully in all scenarios tested if the executable parameter is not declared.

user: gen2fish
issue_7448: state: open
title: Bug with inventory import - Use python 3.8 in AWX containers
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
There is a strange behavior in python 3.6 with the inventory import. The hostname "10-1" will result to "9".
This behavior is not in the python version 3.8

Is it possible to bump AWX python version to 3.8 ?

See also mailing list problem discussion: https://groups.google.com/d/topic/ansible-project/d_PAEWt5abM/discussion
user: CWollinger
issue_7446: state: open
title: Prometheus Metrics Best Practices 
body: ##### ISSUE TYPE
 - Make sure that exported metrics conform with Prometheus best practices

##### SUMMARY
I have made a PR at Prometheus docs to add AWX as a software exposing Prometheus metrics (https://github.com/prometheus/docs/pull/1685#issuecomment-649323355) and after a quick peek at AWX metrics code from @brian-brazil, he appointed a few things to change. I have see a few others open issues about metrics too, so maybe a check with a guideline or something like that can benefit AWX monitoring.

NOTE: I am not familiar with any of the code bases of the projects, I am simply messenger interested in both projects.


user: bryanasdev000
issue_7414: state: open
title: [RFE] awx-cli: add support for adding workflow job template nodes while specifying the 'run' behavior
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
When creating a workflow job template and adding nodes using awx-cli, add ability to specify the 'run' behavior ("always", "on success", or "on failure") of the node.
user: mdinwoodie
issue_7406: state: open
title: Permission problems after upgrading from 11.2.0 to 12.0.0
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When upgrading from AWX 11.2.0 to 12.0.0 we get permission denied with API-request with the admin account. 

```
[22/Jun/2020:13:48:35 +0000] "GET /api/v2/settings/all/ HTTP/1.1" 200 11354 "-" "python-requests/2.23.0" "-"
2020-06-22 13:48:35,685 INFO     awx.api.authentication User admin performed a OPTIONS to /api/v2/settings/all/ through the API
2020/06/22 13:48:36 [crit] 89#0: *7 open() "/var/lib/nginx/tmp/uwsgi/1/00/0000000001" failed (13: Permission denied) while reading upstream, client: **OMITTED**, server: _, request: "OPTIONS /api/v2/settings/all/ HTTP/1.1", upstream: "uwsgi://127.0.0.1:8050", host: **"OMITTED"**
```
Running `chown -R nginx:nginx /var/lib/nginx` on the `awx_web` container fixes the issue (Though I doubt this is the recommended way of solving it?)

##### ENVIRONMENT
* AWX version: 12.0.0
* AWX install method: docker on linux
* Ansible version:  2.9.9
* Operating System: CentOS 8
* Web Browser: n/a

##### STEPS TO REPRODUCE

Run a tower-cli command with admin account in tower-cli config

##### EXPECTED RESULTS

on 11.2.0 the command admin had access to run the command setting any setting.

##### ACTUAL RESULTS

Permission denied

##### ADDITIONAL INFORMATION



user: tonyhogsten
issue_7382: state: open
title: Tweak functionality of Applications List search/sort
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
From https://github.com/ansible/awx/issues/7233#issuecomment-646262137

Regarding the applications page in ui_next:

> It's weird to me that you can search by description, but description isn't visible in the list. Maybe we can consider making an issue about making the description visible in the list via toggle (simple/expanded view).
> 
> Also, we should enable searching by org name, since that's provided in the list fields. We should also add "Last Modified" to the sort (not search) options, in a similar vein.
> 

#### ACCEPTANCE CRITERIA:
- [ ] Application list is searchable by org name
- [ ] Application list can be sortable by date (Last Modified)
- [ ] Application descriptions can become visible via a compact/expanded view toggle in the list.
user: dsesami
issue_7374: state: open
title: Default value for webhook_service is not listed
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY

Related to #5099

Current `OPTIONS` for `job_templates` output doesn't have default listed as `"default": ""` for `webhook_service`, which have `required: false`.

Default is expected to be listed within the API since it is not required - 
```json
            "webhook_service": {
                "type": "choice",
                "required": false,
                "label": "Webhook service",
                "help_text": "Service that webhook requests will be accepted from",
                "filterable": true,
                "choices": [
                    [
                        "",
                        "---------"
                    ],
                    [
                        "github",
                        "GitHub"
                    ],
                    [
                        "gitlab",
                        "GitLab"
                    ]
                ]
            },
```

##### ENVIRONMENT

AWX version: 11.2.0
AWX install method: N/A
Ansible version: N/A
Operating System:
Web Browser:


user: sumkincpp
issue_7373: state: open
title: Implement "run at" feature
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Right now when you want to perform ad-hoc or one-time scheduled execution of a task you have to:

* click schedules
* create new schedule
* define the time frame and that you want to run it only once
* click prompt
* fill in all values
* wait for it to be executed
* delete it

I'd like to replace this tedious work-flow with just some option in launch form where you would check "run at" or chose if you want to run it "now" or at specified time, so you would pick for example "run in 3 hours" or "run at 20:00" and click launch and that way you would schedule the task. Schedule would be auto-deleted after execution of task.

user: benapetr
issue_7362: state: open
title: Cannot restrict groups with Azure AD Authentication
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
I successfully activated the Azure AD authentication for awx. This works fine, the only issue is that there is no way (Or it is not documented) how I can restrict logins via Azure Active directory groups. 

I'm pretty sure that it needs to be placed somewhere in AZURE AD OAUTH2 ORGANIZATION MAP or AZURE AD OAUTH2 TEAM MAP.


##### ENVIRONMENT
* AWX version: 11.2.0
* AWX install method: docker
* Ansible version: 2.9.0
* Operating System: Ubuntu
* Web Browser: Chrome

##### STEPS TO REPRODUCE

Follow: https://docs.ansible.com/ansible-tower/latest/html/administration/ent_auth.html#azure-active-directory-ad


##### EXPECTED RESULTS

I would expect that I can restrict the type of users that I can login based on a azure group
Example: 
Organization "A" has groups awx_operator and awx_admins

How can I map these groups to awx admins and to awx operators.. 

##### ACTUAL RESULTS
No Docs how to map groups 

user: jomach
labels: component:authentication: For issues related to authentication
issue_7361: state: open
title: AWX SSO + Vault JWT integration credential_plugin
body: Originally reported here: https://github.com/ansible/awx/issues/6905. Opening a new ticket because from a security perspective, this is a desired flow compared to the current model of putting all credentials on AWX. Hope this will be addressed some time in future.

##### ISSUE TYPE
Problem:
To run playbooks through AWX, currently we need to fetch the token from Vault and paste it to Vault Signed SSH credential plugin (AWX UI https://docs.ansible.com/ansible-tower/3.5.0/html/administration/credential_plugins.html#hashicorp-vault-signed-ssh). Though this works, the user has to frequently update this token on AWX UI by running vault command (on terminal). IMO, this is not a good user experience, and is painful to the users.


##### SUMMARY
Proposed solution:

We would like to use the Azure AD (SSO) issued id_token (OIDC/JWT token) to connect and fetch SSH certificates from Vault and run Ansible playbooks. (ref: https://www.vaultproject.io/api/auth/jwt). In this model, AWX Vault Signed SSH credential_plugin use requesting user's id_token received as part of SSO to fetch SSH certificates to run playbooks. When the id_token expires, AWX SSO re-login automatically refreshes id_token. From a security perspective, this method is better than storing some long-lived credentials/keys in AWX, and more streamlined that token-paste model.

The same mechanism can be extended for AWS as well (AssumeRoleWithWebIdentity) and in fact
this can be used with any service that supports OIDC auth.

I've kind of made progress with caching the id_token, but now stuck with this issue.

Appreciate your response, and hope we can find some ways to address this.

user: prbinu
issue_7346: state: open
title: make_local_copy opt-out git clone in favor of tree copy
body: https://github.com/ansible/awx/blob/241931309e134bc3ffb3b2badf358d62690f5452/awx/main/tasks.py#L2330
[The git clone made by make_local_copy](https://github.com/ansible/awx/blob/241931309e134bc3ffb3b2badf358d62690f5452/awx/main/tasks.py#L2330-L2355) makes it impossible to use tools that need an initial setup, like [git crypt](https://www.agwa.name/projects/git-crypt/).
It would be great if there was a way to completely disable `git clone` here.
Besides, all other scm types will just make a plain copy of the project tree, which works well in that use case.

Another approach would be to be able to run a custom playbook on update_project, but i'm not sure it's simpler.

user: kapouer
issue_7345: state: open
title: Allow certificate authentication when LOG_AGGREGATOR_PROTOCOL is "tcp"
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Request to add a flag to control enable/disable of certificate verification when LOG_AGGREGATOR_PROTOCOL is "tcp".

Currently certificate verification option is only applicable to HTTPS log aggregator protocol.

Customer Explaination:
As part of our setup, we ship user activity logs to syslog-ng. This is working fine with UDP and the "other" logging aggregator. However our preferred syslog configuration is to use TCP with a certificate but no such option is available in ansible tower.
 * HTTPS log aggregator protocol:
![http_protocol](https://user-images.githubusercontent.com/30921032/84733294-7979ec00-afbb-11ea-9149-9923c545fcce.png)

*  TCP log aggregator protocol:
![tcp_protocol](https://user-images.githubusercontent.com/30921032/84733300-7ed73680-afbb-11ea-894a-dc6f2346a307.png)

user: swatinarvekar
issue_7344: state: open
title: Nested workflows lose outer surveys/extra vars
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
In AWX I can create a workflow template containing another workflow template, which in turn contains a job template. I can set surveys and extra-vars on the inner workflow template and they will be available to the playbook that runs from the job template. However, if I set surveys or extra-vars on the outer workflow template, they are not passed on to the playbook.

##### ENVIRONMENT
* AWX version: 9.1.1
* AWX install method: openshift
* Ansible version:  2.9.4
* Operating System: Ubuntu Linux
* Web Browser: Chromium

##### STEPS TO REPRODUCE

- Create a playbook:
```yaml
- name: Debug
  hosts: localhost
  gather_facts: no
  tasks:
    - debug:
        msg: "xxx is {{ xxx }}"
      ignore_errors: true
    - debug:
        msg: "yyy is {{ yyy }}"
      ignore_errors: true
    - debug:
        msg: "zzz is {{ zzz }}"
      ignore_errors: true
```

- Create a job template that runs that playbook, and set an extra-variable: 
```yaml
xxx: "job template extra var"
```

- Create a workflow template (call it "inner") which runs the job template above. In this workflow template set two extra variables:
```yaml
xxx: "inner extra vars"
yyy: "inner extra vars"
```

- Create another workflow template (call it "outer") which runs the workflow template above. In this workflow template set three extra variables:
```yaml
xxx: "outer extra vars"
yyy: "outer extra vars"
zzz: "outer extra vars"
```

- Run the "outer" workflow template.

##### EXPECTED RESULTS

The playbook runs, printing
```
xxx is outer extra vars
yyy is outer extra vars
zzz is outer extra vars
```

##### ACTUAL RESULTS

The playbook runs, and prints
```
xxx is inner extra vars
yyy is inner extra vars
fatal: [localhost]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'zzz' is undefined [...]
```



user: lxop
issue_7310: state: open
title: Even better support for Redis
body: Recently 🐰 mq and memcached were replaced with Redis and it is a good choice.
However, AWX is using Redis via hardcoded unix socket.

Please add a support for the minimal configuration options such as REDIS_HOST, REDIS_PORT and REDIS_PASSWORD.

Thanks!
user: roman-vynar
issue_7307: state: open
title: DB migration exception when upgrading from v8 to v11.2
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->

##### ENVIRONMENT
* AWX version: 11.2.0
* AWX install method: docker on linux
* Ansible version:  2.9.6
* Operating System: CentOS 7
* Web Browser: Firefox

##### STEPS TO REPRODUCE

Install 11.2.0 over 8.0.0 - I don't think this can be easily reproduced

##### EXPECTED RESULTS

Flawless update

##### ACTUAL RESULTS

This exception in awx_task container

```
2020-06-09 20:55:33,374 DEBUG    rbac_migrations Migrating workflowapproval to new organization field
2020-06-09 20:55:33,374 DEBUG    rbac_migrations Class workflowapproval has no organization migration
2020-06-09 20:55:33,374 INFO     rbac_migrations Unified organization migration completed in 1.4625 seconds
2020-06-09 20:55:35,445 DEBUG    rbac_migrations Removed from parents of roles {148, 149} of JobTemplate object (28)
2020-06-09 20:55:35,677 DEBUG    rbac_migrations Removed from parents of roles {344, 345} of JobTemplate object (53)
2020-06-09 20:55:36,209 DEBUG    rbac_migrations Removed from parents of roles {765, 766} of JobTemplate object (126)
2020-06-09 20:55:36,663 DEBUG    rbac_migrations Removed from parents of roles {2150, 2151} of JobTemplate object (245)
2020-06-09 20:55:37,789 DEBUG    rbac_migrations No changes to role parents for 171 resources
2020-06-09 20:55:37,789 DEBUG    rbac_migrations Added parents to 0 roles
2020-06-09 20:55:37,790 DEBUG    rbac_migrations Removed parents from 8 roles
2020-06-09 20:55:37,790 INFO     rbac_migrations Updated implicit parents of 4 resources
2020-06-09 20:55:37,790 INFO     rbac_migrations Rebuild parentage completed in 2.555782 seconds
2020-06-09 20:55:38,008 DEBUG    rbac_migrations Setting admin_role on jt 28 for users [47, 26, 23, 37, 16, 24, 190] via inventory.organization 2
2020-06-09 20:55:38,023 DEBUG    rbac_migrations Setting admin_role on jt 53 for users [47, 26, 23, 37, 24, 190] via inventory.organization 2
2020-06-09 20:55:38,038 DEBUG    rbac_migrations Setting admin_role on jt 126 for users [47, 26, 23, 37, 16, 24, 190] via inventory.organization 2
2020-06-09 20:55:38,052 DEBUG    rbac_migrations Setting admin_role on jt 245 for users [47, 26, 23, 37, 24, 190] via inventory.organization 2
2020-06-09 20:55:38,059 INFO     rbac_migrations Added explicit JT permission for 26 users in 0.0690 seconds
2020-06-09 20:55:39,135 INFO     awx.main.migrations Automatically created uuid4 identifier for 91 workflow nodes
Operations to perform:
  Apply all migrations: auth, conf, contenttypes, main, oauth2_provider, sessions, sites, social_django, sso, taggit
Running migrations:
  Applying main.0099_v361_license_cleanup... OK
  Applying main.0100_v370_projectupdate_job_tags... OK
  Applying main.0101_v370_generate_new_uuids_for_iso_nodes... OK
  Applying main.0102_v370_unifiedjob_canceled... OK
  Applying main.0103_v370_remove_computed_fields... OK
  Applying main.0104_v370_cleanup_old_scan_jts... OK
  Applying main.0105_v370_remove_jobevent_parent_and_hosts... OK
  Applying main.0106_v370_remove_inventory_groups_with_active_failures... OK
  Applying main.0107_v370_workflow_convergence_api_toggle... OK
  Applying main.0108_v370_unifiedjob_dependencies_processed... OK
  Applying main.0109_v370_job_template_organization_field... OK
  Applying main.0110_v370_instance_ip_address... OK
  Applying main.0111_v370_delete_channelgroup... OK
  Applying main.0112_v370_workflow_node_identifier... OK
  Applying main.0113_v370_event_bigint... OK
  Applying main.0114_v370_remove_deprecated_manual_inventory_sources... OK
  Applying taggit.0003_taggeditem_add_unique_index... OK
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "auth_user_username_key"
DETAIL:  Key (username)=(admin) already exists.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 8, in <module>
    sys.exit(manage())
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 152, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/commands/shell.py", line 92, in handle
    exec(sys.stdin.read())
  File "<string>", line 1, in <module>
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/contrib/auth/models.py", line 162, in create_superuser
    return self._create_user(username, email, password, **extra_fields)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/contrib/auth/models.py", line 145, in _create_user
    user.save(using=self._db)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/contrib/auth/base_user.py", line 66, in save
    super().save(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/base.py", line 741, in save
    force_update=force_update, update_fields=update_fields)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/base.py", line 779, in save_base
    force_update, using, update_fields,
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/base.py", line 870, in _save_table
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/base.py", line 908, in _do_insert
    using=using, raw=raw)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/query.py", line 1186, in _insert
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1375, in execute_sql
    cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
django.db.utils.IntegrityError: duplicate key value violates unique constraint "auth_user_username_key"
DETAIL:  Key (username)=(admin) already exists.
An organization is already in the system, exiting.
(changed: False)
Instance already registered awx
Instance Group already registered tower
2020-06-09 20:56:00,723 CRIT Supervisor is running as root.  Privileges were not dropped because no user is specified in the config file.  If you intend to run as root, you can set user=root in the config file to avoid this message.
2020-06-09 20:56:00,728 INFO RPC interface 'supervisor' initialized
```


##### ADDITIONAL INFORMATION
AWX however did start up and was probably operational to certain degree, I don't know if it was safe to continue with DB which clearly failed to upgrade, so I rolled back the VM snapshot

I would love some feedback on this exception, if it can be ignore or if it's something to fix. I also noted that after upgrade there was massive SQL traffic, about 200MB/s writes to disks caused by some massive inserts and deletes, which kept lasting until I killed the VM. SQL storage grew by few GB.

user: benapetr
issue_7297: state: open
title: Allow customizing how authentication sources appear on the login dialog
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Allow setting a custom description and/or icon.

user: wenottingham
labels: component:authentication: For issues related to authentication
issue_7285: state: open
title: Notification received after successful workflow execution should have schedule reference
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
When we receive the notification after successful workflow execution, it should have schedule reference as well because it was triggered by the schedule

Below details received as notification.
{
    "id": 10470,
    "name": "Ajit test workflow",
    "url": "https://towerhost/#/workflows/10470",
    "created_by": "awxadmin",
    "started": "2020-06-08T07:21:16.908279+00:00",
    "finished": "2020-06-08T07:21:37.150384+00:00",
    "status": "successful",
    "traceback": "",
    "body": "Workflow job summary:\n\n- node #3300 spawns job #10472, \"Ajit Return Value\", which finished with status successful.\n- node #3299 spawns job #10471, \"Ajit Job Template - Create Directory\", which finished with status successful."
}, {'host_status_counts': {}, 'id': 10470, 'type': 'workflow_job', 'url': '/api/v2/workflow_jobs/10470/', 'created': datetime.datetime(2020, 6, 8, 7, 21, 15, 734597, tzinfo=<UTC>), 'modified': datetime.datetime(2020, 6, 8, 7, 21, 37, 166299, tzinfo=<UTC>), 'name': 'Ajit test workflow', 'description': '', 'limit': None, 'launch_type': 'relaunch', 'status': 'successful', 'failed': False, 'started': '2020-06-08T07:21:16.908279Z', 'finished': '2020-06-08T07:21:37.150384Z', 'elapsed': 20.242, 'job_explanation': '', 'allow_simultaneous': False, 'scm_branch': None, 'summary_fields': {'unified_job_template': {'id': 141, 'name': 'Ajit test workflow', 'description': '', 'unified_job_type': 'workflow_job'}, 'created_by': {'id': 1, 'username': 'awxadmin', 'first_name': '', 'last_name': ''}, 'labels': {'count': 0, 'results': []}}}

When I call the API to get the workflow details, it is showing the schedule object into "summary_fields". can it be added onto the notifications as well

Below data received through API
{
    "id": 10467,
    "type": "workflow_job",
    "url": "/api/v2/workflow_jobs/10467/",
    "related": {
        "unified_job_template": "/api/v2/workflow_job_templates/141/",
        "schedule": "/api/v2/schedules/250/",
        "workflow_job_template": "/api/v2/workflow_job_templates/141/",
        "notifications": "/api/v2/workflow_jobs/10467/notifications/",
        "workflow_nodes": "/api/v2/workflow_jobs/10467/workflow_nodes/",
        "labels": "/api/v2/workflow_jobs/10467/labels/",
        "activity_stream": "/api/v2/workflow_jobs/10467/activity_stream/",
        "relaunch": "/api/v2/workflow_jobs/10467/relaunch/",
        "cancel": "/api/v2/workflow_jobs/10467/cancel/"
    },
    "summary_fields": {
        "organization": {
            "id": 6,
            "name": "SDI",
            "description": ""
        },
        "workflow_job_template": {
            "id": 141,
            "name": "Ajit test workflow",
            "description": ""
        },
        "schedule": {
            "id": 250,
            "name": "AjitWFTest",
            "description": "every day for 1 time"
        },
        "unified_job_template": {
            "id": 141,
            "name": "Ajit test workflow",
            "description": "",
            "unified_job_type": "workflow_job"
        },
        "user_capabilities": {
            "delete": true,
            "start": true
        },
        "labels": {
            "count": 0,
            "results": []
        }
    },
    "created": "2020-06-08T07:20:10.754313Z",
    "modified": "2020-06-08T07:20:11.933544Z",
    "name": "Ajit test workflow",
    "description": "",
    "unified_job_template": 141,
    "launch_type": "scheduled",
    "status": "successful",
    "failed": false,
    "started": "2020-06-08T07:20:11.933251Z",
    "finished": "2020-06-08T07:20:34.683411Z",
    "canceled_on": null,
    "elapsed": 22.75,
    "job_args": "",
    "job_cwd": "",
    "job_env": {},
    "job_explanation": "",
    "result_traceback": "",
    "workflow_job_template": 141,
    "extra_vars": "{}",
    "allow_simultaneous": false,
    "job_template": null,
    "is_sliced_job": false,
    "inventory": null,
    "limit": null,
    "scm_branch": null,
    "webhook_service": "",
    "webhook_credential": null,
    "webhook_guid": ""
}

Thanks in advance

Regards,
Ajit
user: ajitkumartanwade
issue_7282: state: open
title: Workflow_job event should have schedule reference
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Currently, the events received after the execution of the scheduled workflow job not showing any reference to schedule. Please see below screenshots.

Schedule event:
{
            "object2" => "",
            "changes" => {
        "enabled" => [
            [0] false,
            [1] true
        ]
    },
     "summary_fields" => {
                     "schedule" => [
            [0] {
                         "id" => 8,
                       "name" => "Ajit SCH test",
                   "next_run" => "2020-06-03T16:00:00Z",
                "description" => "every day for 1 time"
            }
        ],
        "workflow_job_template" => [
            [0] {
                         "id" => 10,
                       "name" => "Workflow Test - TTT",
                "description" => ""
            }
        ],
                        "actor" => {
            "first_name" => "",
              "username" => "admin",
                    "id" => 1,
             "last_name" => ""
        }
    },
              "level" => "INFO",
          "operation" => "update",
         "tower_uuid" => nil,
            "object1" => "schedule",
           "@version" => "1",
         "stack_info" => nil,
       "relationship" => "",
         "@timestamp" => 2020-06-03T15:59:38.364Z,
            "message" => "Activity Stream update entry for schedule",
              "actor" => "admin",
            "headers" => {
              "http_host" => "10.107.100.50:8080",
           "content_type" => "application/json; charset=utf-8",
        "http_user_agent" => nil,
            "http_accept" => "*/*",
         "content_length" => "724",
           "http_version" => "HTTP/1.1",
           "request_path" => "/",
         "request_method" => "POST"
    },
        "logger_name" => "awx.analytics.activity_stream",
               "host" => "10.0.182.16",
    "cluster_host_id" => "awx-84786965d-sztrh"
}

Workflow Job event:
{
            "object2" => "",
            "changes" => {
           "allow_simultaneous" => false,
                "is_sliced_job" => false,
                 "webhook_guid" => "",
              "webhook_service" => "",
                        "limit" => nil,
           "webhook_credential" => nil,
                  "description" => "",
                           "id" => 291,
                   "extra_vars" => "{}",
                         "name" => "Workflow Test - TTT",
        "workflow_job_template" => "Workflow Test - TTT-10",
                    "inventory" => nil,
                 "job_template" => nil,
                   "scm_branch" => nil
    },
     "summary_fields" => {
        "workflow_job" => [
            [0] {
                         "id" => 291,
                       "name" => "Workflow Test - TTT",
                "description" => ""
            }
        ]
    },
              "level" => "INFO",
          "operation" => "create",
         "tower_uuid" => nil,
            "object1" => "workflow_job",
           "@version" => "1",
         "stack_info" => nil,
       "relationship" => "",
         "@timestamp" => 2020-06-03T16:00:01.718Z,
            "message" => "Activity Stream update entry for workflow_job",
              "actor" => nil,
            "headers" => {
              "http_host" => "10.107.100.50:8080",
           "content_type" => "application/json; charset=utf-8",
        "http_user_agent" => nil,
            "http_accept" => "*/*",
         "content_length" => "826",
           "http_version" => "HTTP/1.1",
           "request_path" => "/",
         "request_method" => "POST"
    },
        "logger_name" => "awx.analytics.activity_stream",
               "host" => "10.0.182.16",
    "cluster_host_id" => "awx-84786965d-sztrh"
}


user: ajitkumartanwade
issue_7278: state: open
title: OSError: [Errno 90] Message too long
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY

The awx_task container logs a traceback:

```--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib64/python3.6/logging/handlers.py", line 936, in emit
    self.socket.send(msg)
OSError: [Errno 90] Message too long
```
I stumbled on it while examining the logs and found it worth reporting.

##### ENVIRONMENT
* AWX version: 11.2.0
* AWX install method:docker
* Ansible version:  2.9.7
* Operating System: Debian 10
* Web Browser: Firefox 75

##### STEPS TO REPRODUCE

Actually I don't know how to reproduce this.

##### EXPECTED RESULTS

No traceback.

##### ACTUAL RESULTS

A traceback is logged.

##### ADDITIONAL INFORMATION

```
2020-06-08 06:00:24,531 DEBUG    awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(1)
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib64/python3.6/logging/handlers.py", line 936, in emit
    self.socket.send(msg)
OSError: [Errno 90] Message too long

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib64/python3.6/logging/handlers.py", line 940, in emit
    self.socket.send(msg)
OSError: [Errno 90] Message too long
Call stack:
  File "/usr/bin/awx-manage", line 8, in <module>
    sys.exit(manage())
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 152, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/run_callback_receiver.py", line 24, in handle
    queues=[getattr(settings, 'CALLBACK_QUEUE', '')],
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/worker/base.py", line 54, in __init__
    self.pool.init_workers(self.worker.work_loop)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/pool.py", line 219, in init_workers
    self.up()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/pool.py", line 231, in up
    worker.start()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/pool.py", line 69, in start
    self.process.start()
  File "/usr/lib64/python3.6/multiprocessing/process.py", line 105, in start
    self._popen = self._Popen(self)
  File "/usr/lib64/python3.6/multiprocessing/context.py", line 223, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "/usr/lib64/python3.6/multiprocessing/context.py", line 277, in _Popen
    return Popen(process_obj)
  File "/usr/lib64/python3.6/multiprocessing/popen_fork.py", line 19, in __init__
    self._launch(process_obj)
  File "/usr/lib64/python3.6/multiprocessing/popen_fork.py", line 73, in _launch
    code = process_obj._bootstrap()
  File "/usr/lib64/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/usr/lib64/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/worker/callback.py", line 71, in work_loop
    return super(CallbackBrokerWorker, self).work_loop(*args, **kw)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/worker/base.py", line 184, in work_loop
    self.perform_work(body, *args)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/worker/callback.py", line 154, in perform_work
    event = cls.create_from_data(**body)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/models/events.py", line 415, in create_from_data
    event._update_from_event_data()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/models/events.py", line 373, in _update_from_event_data
    extra=dict(python_objects=dict(job_event=self))
  File "/usr/lib64/python3.6/logging/__init__.py", line 1308, in info
    self._log(INFO, msg, args, **kwargs)
  File "/usr/lib64/python3.6/logging/__init__.py", line 1444, in _log
    self.handle(record)
  File "/usr/lib64/python3.6/logging/__init__.py", line 1454, in handle
    self.callHandlers(record)
  File "/usr/lib64/python3.6/logging/__init__.py", line 1516, in callHandlers
    hdlr.handle(record)
  File "/usr/lib64/python3.6/logging/__init__.py", line 865, in handle
    self.emit(record)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/utils/handlers.py", line 22, in emit
    return super(RSysLogHandler, self).emit(msg)
Message: 'Event data saved.'
Arguments: ()
2020-06-08 06:00:25,901 DEBUG    awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(1)
2020-06-08 06:00:25,901 DEBUG    awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(1)
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib64/python3.6/logging/handlers.py", line 936, in emit
    self.socket.send(msg)
OSError: [Errno 90] Message too long

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib64/python3.6/logging/handlers.py", line 940, in emit
    self.socket.send(msg)
OSError: [Errno 90] Message too long
Call stack:
  File "/usr/bin/awx-manage", line 8, in <module>
    sys.exit(manage())
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 152, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/run_callback_receiver.py", line 24, in handle
    queues=[getattr(settings, 'CALLBACK_QUEUE', '')],
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/worker/base.py", line 54, in __init__
    self.pool.init_workers(self.worker.work_loop)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/pool.py", line 219, in init_workers
    self.up()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/pool.py", line 231, in up
    worker.start()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/pool.py", line 69, in start
    self.process.start()
  File "/usr/lib64/python3.6/multiprocessing/process.py", line 105, in start
    self._popen = self._Popen(self)
  File "/usr/lib64/python3.6/multiprocessing/context.py", line 223, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "/usr/lib64/python3.6/multiprocessing/context.py", line 277, in _Popen
    return Popen(process_obj)
  File "/usr/lib64/python3.6/multiprocessing/popen_fork.py", line 19, in __init__
    self._launch(process_obj)
  File "/usr/lib64/python3.6/multiprocessing/popen_fork.py", line 73, in _launch
    code = process_obj._bootstrap()
  File "/usr/lib64/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/usr/lib64/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/worker/callback.py", line 71, in work_loop
    return super(CallbackBrokerWorker, self).work_loop(*args, **kw)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/worker/base.py", line 184, in work_loop
    self.perform_work(body, *args)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/worker/callback.py", line 154, in perform_work
    event = cls.create_from_data(**body)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/models/events.py", line 415, in create_from_data
    event._update_from_event_data()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/models/events.py", line 373, in _update_from_event_data
    extra=dict(python_objects=dict(job_event=self))
  File "/usr/lib64/python3.6/logging/__init__.py", line 1308, in info
    self._log(INFO, msg, args, **kwargs)
  File "/usr/lib64/python3.6/logging/__init__.py", line 1444, in _log
    self.handle(record)
  File "/usr/lib64/python3.6/logging/__init__.py", line 1454, in handle
    self.callHandlers(record)
  File "/usr/lib64/python3.6/logging/__init__.py", line 1516, in callHandlers
    hdlr.handle(record)
  File "/usr/lib64/python3.6/logging/__init__.py", line 865, in handle
    self.emit(record)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/utils/handlers.py", line 22, in emit
    return super(RSysLogHandler, self).emit(msg)
Message: 'Event data saved.'
Arguments: ()
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib64/python3.6/logging/handlers.py", line 936, in emit
    self.socket.send(msg)
OSError: [Errno 90] Message too long

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib64/python3.6/logging/handlers.py", line 940, in emit
    self.socket.send(msg)
OSError: [Errno 90] Message too long
Call stack:
  File "/usr/bin/awx-manage", line 8, in <module>
    sys.exit(manage())
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 152, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/run_callback_receiver.py", line 24, in handle
    queues=[getattr(settings, 'CALLBACK_QUEUE', '')],
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/worker/base.py", line 54, in __init__
    self.pool.init_workers(self.worker.work_loop)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/pool.py", line 219, in init_workers
    self.up()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/pool.py", line 231, in up
    worker.start()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/pool.py", line 69, in start
    self.process.start()
  File "/usr/lib64/python3.6/multiprocessing/process.py", line 105, in start
    self._popen = self._Popen(self)
  File "/usr/lib64/python3.6/multiprocessing/context.py", line 223, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "/usr/lib64/python3.6/multiprocessing/context.py", line 277, in _Popen
    return Popen(process_obj)
  File "/usr/lib64/python3.6/multiprocessing/popen_fork.py", line 19, in __init__
    self._launch(process_obj)
  File "/usr/lib64/python3.6/multiprocessing/popen_fork.py", line 73, in _launch
    code = process_obj._bootstrap()
  File "/usr/lib64/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/usr/lib64/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/worker/callback.py", line 71, in work_loop
    return super(CallbackBrokerWorker, self).work_loop(*args, **kw)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/worker/base.py", line 184, in work_loop
    self.perform_work(body, *args)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/worker/callback.py", line 154, in perform_work
    event = cls.create_from_data(**body)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/models/events.py", line 415, in create_from_data
    event._update_from_event_data()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/models/events.py", line 373, in _update_from_event_data
    extra=dict(python_objects=dict(job_event=self))
  File "/usr/lib64/python3.6/logging/__init__.py", line 1308, in info
    self._log(INFO, msg, args, **kwargs)
  File "/usr/lib64/python3.6/logging/__init__.py", line 1444, in _log
    self.handle(record)
2020-06-08 06:00:26,150 DEBUG    awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(2)
2020-06-08 06:00:26,150 DEBUG    awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(2)
  File "/usr/lib64/python3.6/logging/__init__.py", line 1454, in handle
    self.callHandlers(record)
  File "/usr/lib64/python3.6/logging/__init__.py", line 1516, in callHandlers
    hdlr.handle(record)
  File "/usr/lib64/python3.6/logging/__init__.py", line 865, in handle
    self.emit(record)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/utils/handlers.py", line 22, in emit
    return super(RSysLogHandler, self).emit(msg)
Message: 'Event data saved.'
Arguments: ()
2020-06-08 06:00:26,156 DEBUG    awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(2)
2020-06-08 06:00:26,156 DEBUG    awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(2)
2020-06-08 06:00:26,174 DEBUG    awx.main.commands.run_callback_receiver JobEvent.objects.bulk_create(1)
```

user: anxstj
issue_7227: state: open
title: OpsGenie notification proposal
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
I am trying to find a way, how to integrate AWX notifications with OpsGenie using API.
It can be done using https://docs.opsgenie.com/docs/alert-api, I have to only find a way how to create a payload.

But anyway if AWX has already PagerDuty notification type, it would be also nice to have the same with OpsGenie with a native notification type.

user: dzinek
issue_7218: state: open
title: RFE: Ability to add multiple external logging systems
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Add the ability to set up multiple external log aggregators in the UI. Currently, you can only set up one. 

There is a desire to do this per-category.

user: agilleyrh
issue_7209: state: open
title: awx cli prompt for password
body: ##### ISSUE TYPE
 - Awx cli tool should have the option to prompt a user for their password to avoid entering a password in plain visible text on the command line.

##### SUMMARY
The awx cli tool can take a password as a command line argument or an environment variable. Both options require a user to enter and possibly store their password in plain text. 
This not only poses a security concern, it makes it difficult to properly escape special characters if present. 
An option to prompt a user to enter their password in a manner that won't be echoed to the terminal should alleviate this.

I personally got around this by modifying the awxkit/cli/client.py with the following:
```
from getpass import getpass
...
    def get_config(self, key):
        """Helper method for looking up the value of a --conf.xyz flag"""
        if key == 'password':
            if getattr(self.args, 'conf.{}'.format(key)) == 'ask':
                password = getpass("Enter your password: ")
                return password
            else: 
               return getattr(self.args, 'conf.{}'.format(key))
        else:
            return getattr(self.args, 'conf.{}'.format(key))
```
I don't think the method above is ideal, but it works for my immediate needs. And has the desired effect on the command line.

edit to include conditional return when key == 'password' and is not set to 'ask'
user: jongoneok
issue_7207: state: open
title: Restrict the ability to have same named credentials of the same type in same org
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Restrict the ability to have two credentials in an organization with the same name and of the same type as there is no way to distinguish the 2 when choosing for job template 

user: rh-dluong
issue_7198: state: open
title: RFE: WF Branching Strategy + Explicit Stop Node
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

**Branching Strategy**
"Branching Strategy" will allow more flexible control over further workflow steps execution. Beyond `always`, `success` and `failure`  there might be "named" branches, which will correspond to other specific Job Nodes linked to current Node within Workflow.

One of the named branches may be "stop" branch. With that, there is no a need to introduction of the **Explicit Stop Node**(below). This branch successfully stops WF execution after current Job finishes. Possible problems: proper operation with convergence nodes.

Job which want to use branching decision should finish successfully and signalize WF Runner about
it's furher branch branching decision.

Possible implementation may use set_stats. Via set_stats ansible developer needs to specify some artifact variable, i.e. "awx_next_branch" to indicate WF Runner that branch selection action should be performed. This artifact is removed in next Job, so that further Job Nodes can have it's own branching decisions.

**Explicit Stop Node**
Special node which will explicitly stop Workflow execution with Success status based on some condition.

**Current Workaround**
As a current workaround, it's possible to split one Job/JT playbook to 2 JT - first calculate provisioning operation parameters. Second node based on set_stats either always fails when further actions should not be performed or always succeeds when further actions should be performed. Fail branch needs to have successful termination node.

user: sumkincpp
issue_7187: state: open
title: AWX HA: deployment across openshift/kubernate clusters
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
It might be nice if awx supports deployment across different openshift/kubernate clusters. 
For example, some awx instances are deployed on ocp cluster A and some on cluster B, both connected to the same standalone database. When cluster A breaks we could use load balancer or else to direct user to the nodes on cluster B.

I did try awx (latest version, in which rabbitmq is deprecated) deployment across different ocp clusters. One issue I can see is that, when I launch tower template on cluster A and the job is executed on the node of cluster B, the job will not get a real-time update (because the communication across nodes in different clusters is not established). After refreshing the tower job page I could see the job running results are loaded. 


user: xding2020
issue_7174: state: open
title: Add Oauth2 authentication option to webhook notifications
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
A request to add an Oauth2 authentication option to webhook notifications.  

Customer explanation:
"The configuration options for Tower's webhook notification only supports Basic Authorization, providing input fields for a user and password, to go along with the url and headers prompts.   To connect to an endpoint which requires oauth2 authentication, we ended up creating some separate shell scripts to refresh an oauth access token, then push the auth code into the notification template's headers section with awx-cli tool..."

user: mrmibrown
issue_7136: state: open
title: Launching jobs based on job_templates through API is slow
body: ##### ISSUE TYPE
 - Bug Report
 - Performance problem
 - Configuration problem?

##### SUMMARY
Job launching through job_template API is slow. Initially I have observed this when using awx.awx.tower_job_launch. It appears that the job launching rate is ~ 1 job/second. 
Initially I attributed this to the initial slowness of ansible when it comes to execution of single tasks due to the overhead. 

However, to confirm this I wrote a small python program that connects submits the POST requests to /api/v2/job_templates/{id}/launch/ endpoint. 
To be absolutely clear I do not expect the jobs to be executed immediately but I was expecting that launching a job should be in millisecond range, enabling queuing tens or even hundreds of jobs per second.  Please note that this is observed on an empty non-clustered environment. 

##### ENVIRONMENT
* AWX version: 11.2.0
* AWX install method: docker on linux
* Ansible version:  2.9.7
* Operating System: CentOS 8
* Web Browser: irrelevant for the issue

##### STEPS TO REPRODUCE

1. create a "simple" playbook with just single debug task output and prompt on extra_vars
2. execute the following bash script, adjust: username/password, HOST and ID of the job
```
 for i in {1..100}; do curl -d '{ "extra_vars": { "username": "some_username" }}' -H "Content-Type: application/json" http://admin:password@HOST/api/v2/job_templates/ID/launch/; done
```
The issue arises on 2 tested environments:
- openstack cluster
- VirtualBox VM on my own PC, (VM has 8 GB, 4 cores, SSD, Host has 8 cores, 32 GB)

##### EXPECTED RESULTS

100 jobs get launched (not executed) within up to 10 seconds.
Please comment on what is the expected throughput based on your own experience, since we also suspect we are missing something in our setup. 

##### ACTUAL RESULTS

It takes ~ 100 seconds, due to the 1 job/second rate.

##### ADDITIONAL INFORMATION

- systems were freshly installed
- no other jobs were running at the time

user: momcilo78
issue_7132: state: open
title: Lock local user accounts after multiple failed login attempts
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
This is a request to implement an account lock-out threshold so that after X number of failed login attempts the account would be locked. Enabling a lockout threshold would help to ensure that local user account passwords cannot be guessed using brute force attacks.
user: mdinwoodie
issue_7111: state: open
title: Change favicon depinding on job-status
body: ##### ISSUE TYPE
 - Change the favicon depending on job-status.

##### SUMMARY
This is a feature existing in Rundeck.

When a job is done, the favicon get changed to a green icon,
indicating that the job went fine, this would be a nice addition to awx.

I'm guessing many of us live in a world of to many tabs, and the only thing we see is the favicon.

user: SebastianThorn
issue_7091: state: open
title: move inventory source configuration to `credentials` list 
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
The current UI uses the unitary `credential` field when configuring inventory sources.

The UI rewrite should use the `credentials` list and associate credential(s), if it doesn't already.

user: wenottingham
issue_7067: state: open
title: Better inventory errors
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
See an example in #7052 
An inventory update failed, producing the following output:
```
Traceback (most recent call last):
File "/var/lib/awx/venv/awx/bin/awx-manage", line 8, in
sys.exit(manage())
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/init.py", line 152, in manage
execute_from_command_line(sys.argv)
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/init.py", line 381, in execute_from_command_line
utility.execute()
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/init.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
self.execute(*args, **cmd_options)
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute
output = self.handle(*args, **options)
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 1139, in handle
raise exc
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 1029, in handle
venv_path=venv_path, verbosity=self.verbosity).load()
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 215, in load
return self.command_to_json(base_args + ['--list'])
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 198, in command_to_json
self.method, proc.returncode, stdout, stderr))
RuntimeError: ansible-inventory failed (rc=1) with stdout:
stderr:
ansible-inventory 2.9.7
config file = /etc/ansible/ansible.cfg
configured module search path = ['/var/lib/awx/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.6/site-packages/ansible
executable location = /usr/bin/ansible-inventory
python version = 3.6.8 (default, Nov 21 2019, 19:31:34) [GCC 8.3.1 20190507 (Red Hat 8.3.1-4)]
Using /etc/ansible/ansible.cfg as config file
[WARNING]: * Failed to parse /tmp/awx_1072_i0i4h5_1/vmware_vm_inventory.yml
with auto plugin: Invalid empty host name provided: None
File "/usr/lib/python3.6/site-packages/ansible/inventory/manager.py", line 280, in parse_source
plugin.parse(self._inventory, self._loader, source, cache=cache)
File "/usr/lib/python3.6/site-packages/ansible/plugins/inventory/auto.py", line 58, in parse
plugin.parse(inventory, loader, path, cache=cache)
File "/var/lib/awx/vendor/inventory_collections/ansible_collections/community/vmware/plugins/inventory/vmware_vm_inventory.py", line 606, in parse
cacheable_results = self._populate_from_source()
File "/var/lib/awx/vendor/inventory_collections/ansible_collections/community/vmware/plugins/inventory/vmware_vm_inventory.py", line 689, in _populate_from_source
self._populate_host_properties(host_properties, host)
File "/var/lib/awx/vendor/inventory_collections/ansible_collections/community/vmware/plugins/inventory/vmware_vm_inventory.py", line 720, in _populate_host_properties
self.inventory.add_host(host)
File "/usr/lib/python3.6/site-packages/ansible/inventory/data.py", line 230, in add_host
raise AnsibleError("Invalid empty host name provided: %s" % host)
[WARNING]: Unable to parse /tmp/awx_1072_i0i4h5_1/vmware_vm_inventory.yml as an
inventory source
ERROR! No inventory was parsed, please check your configuration and options.
```

Every part of that error before:
```
[WARNING]: * Failed to parse /tmp/awx_1072_i0i4h5_1/vmware_vm_inventory.yml
with auto plugin: Invalid empty host name provided: None
```

could be elided without losing context.

This may require ansible changes.

user: wenottingham
issue_7049: state: open
title: After restart docker, awx not avalible
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
After succesful build and start awx in docker container, then i restart docker service, or docker-compose, or system, web page awx is not avalible, Internal server error 500

##### ENVIRONMENT
* AWX version: 9.2.0
* AWX install method: docker on linux
* Ansible version:  2.7.8
* Operating System: centos 7
* Web Browser:

docker-compose version 1.25.4, build unknown
docker-py version: 4.2.0
CPython version: 3.6.8
OpenSSL version: OpenSSL 1.0.2k-fips  26 Jan 2017
##### STEPS TO REPRODUCE
sudo docker-compouse up -d
sudo docker-compouse stop
sudo docker-compouse start

##### EXPECTED RESULTS

IT'S Working

##### ACTUAL RESULTS

Internal server error 500

##### ADDITIONAL INFORMATION

awx_web      | 127.0.0.1 | SUCCESS => {
awx_web      |     "ansible_facts": {
awx_web      |         "discovered_interpreter_python": "/usr/libexec/platform-python"
awx_web      |     },
awx_web      |     "changed": false,
awx_web      |     "elapsed": 10,
awx_web      |     "match_groupdict": {},
awx_web      |     "match_groups": [],
awx_web      |     "path": null,
awx_web      |     "port": 5672,
awx_web      |     "search_regex": null,
awx_web      |     "state": "started"
awx_web      | }
awx_task     | Using /etc/ansible/ansible.cfg as config file
awx_web      | Using /etc/ansible/ansible.cfg as config file
awx_task     | 127.0.0.1 | SUCCESS => {
awx_task     |     "ansible_facts": {
awx_task     |         "discovered_interpreter_python": "/usr/libexec/platform-python"
awx_task     |     },
awx_task     |     "changed": false,
awx_task     |     "db": "awx"
awx_task     | }
awx_web      | 127.0.0.1 | SUCCESS => {
awx_web      |     "ansible_facts": {
awx_web      |         "discovered_interpreter_python": "/usr/libexec/platform-python"
awx_web      |     },
awx_web      |     "changed": false,
awx_web      |     "db": "awx"
awx_web      | }
awx_task     | Traceback (most recent call last):
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_task     |     include(settings_file, optional(settings_files), scope=locals())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_task     |     raise IOError('No such file: {0}'.format(pattern))
awx_task     | OSError: No such file: /etc/tower/settings.py
awx_task     |
awx_task     | During handling of the above exception, another exception occurred:
awx_task     |
awx_task     | Traceback (most recent call last):
awx_task     |   File "/usr/bin/awx-manage", line 8, in <module>
awx_task     |     sys.exit(manage())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 136, in manage
awx_task     |     prepare_env()
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_task     |     if not settings.DEBUG: # pragma: no cover
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_task     |     self._setup(name)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_task     |     self._wrapped = Settings(settings_module)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_task     |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_task     |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_task     |     return _bootstrap._gcd_import(name[level:], package, level)
awx_task     |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_task     |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_task     |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_task     |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_task     |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_task     |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_task     |     raise ImproperlyConfigured(msg)
awx_task     | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_task     | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_web      | Traceback (most recent call last):
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_web      |     include(settings_file, optional(settings_files), scope=locals())
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_web      |     raise IOError('No such file: {0}'.format(pattern))
awx_web      | OSError: No such file: /etc/tower/settings.py
awx_web      |
awx_web      | During handling of the above exception, another exception occurred:
awx_web      |
awx_web      | Traceback (most recent call last):
awx_web      |   File "/usr/bin/awx-manage", line 8, in <module>
awx_web      |     sys.exit(manage())
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 136, in manage
awx_web      |     prepare_env()
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_web      |     if not settings.DEBUG: # pragma: no cover
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_web      |     self._setup(name)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_web      |     self._wrapped = Settings(settings_module)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_web      |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_web      |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_web      |     return _bootstrap._gcd_import(name[level:], package, level)
awx_web      |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_web      |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_web      |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_web      |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_web      |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_web      |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_web      |     raise ImproperlyConfigured(msg)
awx_web      | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_web      | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_task     | Traceback (most recent call last):
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_task     |     include(settings_file, optional(settings_files), scope=locals())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_task     |     raise IOError('No such file: {0}'.format(pattern))
awx_task     | OSError: No such file: /etc/tower/settings.py
awx_task     |
awx_task     | During handling of the above exception, another exception occurred:
awx_task     |
awx_task     | Traceback (most recent call last):
awx_task     |   File "/usr/bin/awx-manage", line 8, in <module>
awx_task     |     sys.exit(manage())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 136, in manage
awx_task     |     prepare_env()
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_task     |     if not settings.DEBUG: # pragma: no cover
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_task     |     self._setup(name)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_task     |     self._wrapped = Settings(settings_module)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_task     |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_task     |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_task     |     return _bootstrap._gcd_import(name[level:], package, level)
awx_task     |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_task     |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_task     |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_task     |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_task     |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_task     |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_task     |     raise ImproperlyConfigured(msg)
awx_task     | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_task     | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_web      | 2020-05-16 20:48:10,417 CRIT Supervisor is running as root.  Privileges were not dropped because no user is specified in the config file.  If you intend to run as root, you can set user=root in the config file to avoid this message.
awx_web      | 2020-05-16 20:48:10,725 INFO RPC interface 'supervisor' initialized
awx_web      | 2020-05-16 20:48:10,725 CRIT Server 'unix_http_server' running without any HTTP authentication checking
awx_web      | 2020-05-16 20:48:10,725 INFO supervisord started with pid 111
awx_task     | Traceback (most recent call last):
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_task     |     include(settings_file, optional(settings_files), scope=locals())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_task     |     raise IOError('No such file: {0}'.format(pattern))
awx_task     | OSError: No such file: /etc/tower/settings.py


awx_web      | During handling of the above exception, another exception occurred:
awx_web      |
awx_web      | Traceback (most recent call last):
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/wsgi.py", line 9, in <module>
awx_web      |     prepare_env()
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_web      |     if not settings.DEBUG: # pragma: no cover
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_web      |     self._setup(name)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_web      |     self._wrapped = Settings(settings_module)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_web      |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_web      |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_web      |     return _bootstrap._gcd_import(name[level:], package, level)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_web      |     raise ImproperlyConfigured(msg)
awx_web      | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_web      | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_web      | unable to load app 0 (mountpoint='') (callable not found or import error)
awx_web      | *** no app loaded. going in full dynamic mode ***
awx_web      | Traceback (most recent call last):
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_web      |     include(settings_file, optional(settings_files), scope=locals())
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_web      |     raise IOError('No such file: {0}'.format(pattern))
awx_web      | OSError: No such file: /etc/tower/settings.py
awx_web      |
awx_web      | During handling of the above exception, another exception occurred:
awx_web      |
awx_web      | Traceback (most recent call last):
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/wsgi.py", line 9, in <module>
awx_web      |     prepare_env()
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_web      |     if not settings.DEBUG: # pragma: no cover
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_web      |     self._setup(name)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_web      |     self._wrapped = Settings(settings_module)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_web      |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_web      |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_web      |     return _bootstrap._gcd_import(name[level:], package, level)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_web      |     raise ImproperlyConfigured(msg)
awx_web      | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_web      | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_web      | unable to load app 0 (mountpoint='') (callable not found or import error)
awx_web      | *** no app loaded. going in full dynamic mode ***
awx_web      | Traceback (most recent call last):
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_web      |     include(settings_file, optional(settings_files), scope=locals())
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_web      |     raise IOError('No such file: {0}'.format(pattern))
awx_web      | OSError: No such file: /etc/tower/settings.py
awx_web      |
awx_web      | During handling of the above exception, another exception occurred:
awx_web      |
awx_web      | Traceback (most recent call last):
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/wsgi.py", line 9, in <module>
awx_web      |     prepare_env()
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_web      |     if not settings.DEBUG: # pragma: no cover
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_web      |     self._setup(name)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_web      |     self._wrapped = Settings(settings_module)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_web      |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_web      |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_web      |     return _bootstrap._gcd_import(name[level:], package, level)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_web      |     raise ImproperlyConfigured(msg)
awx_web      | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_web      | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_web      | unable to load app 0 (mountpoint='') (callable not found or import error)
awx_web      | *** no app loaded. going in full dynamic mode ***
awx_web      | Traceback (most recent call last):
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_web      |     include(settings_file, optional(settings_files), scope=locals())
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_web      |     raise IOError('No such file: {0}'.format(pattern))
awx_web      | OSError: No such file: /etc/tower/settings.py
awx_web      |
awx_web      | During handling of the above exception, another exception occurred:
awx_web      |
awx_web      | Traceback (most recent call last):
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/wsgi.py", line 9, in <module>
awx_web      |     prepare_env()
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_web      |     if not settings.DEBUG: # pragma: no cover
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_web      |     self._setup(name)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_web      |     self._wrapped = Settings(settings_module)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_web      |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_web      |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_web      |     return _bootstrap._gcd_import(name[level:], package, level)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_web      |     raise ImproperlyConfigured(msg)
awx_web      | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_web      | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_web      | unable to load app 0 (mountpoint='') (callable not found or import error)
awx_web      | *** no app loaded. going in full dynamic mode ***
awx_web      | Traceback (most recent call last):
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_web      |     include(settings_file, optional(settings_files), scope=locals())
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_web      |     raise IOError('No such file: {0}'.format(pattern))
awx_web      | OSError: No such file: /etc/tower/settings.py
awx_web      |
awx_web      | During handling of the above exception, another exception occurred:
awx_web      |
awx_web      | Traceback (most recent call last):
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/wsgi.py", line 9, in <module>
awx_web      |     prepare_env()
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_web      |     if not settings.DEBUG: # pragma: no cover
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_web      |     self._setup(name)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_web      |     self._wrapped = Settings(settings_module)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_web      |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_web      |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_web      |     return _bootstrap._gcd_import(name[level:], package, level)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_web      |     raise ImproperlyConfigured(msg)
awx_web      | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_web      | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_web      | unable to load app 0 (mountpoint='') (callable not found or import error)
awx_web      | *** no app loaded. going in full dynamic mode ***
awx_web      | Traceback (most recent call last):
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_web      |     include(settings_file, optional(settings_files), scope=locals())
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_web      |     raise IOError('No such file: {0}'.format(pattern))
awx_web      | OSError: No such file: /etc/tower/settings.py
awx_web      |
awx_web      | During handling of the above exception, another exception occurred:
awx_web      |
awx_web      | Traceback (most recent call last):
awx_web      |   File "/var/lib/awx/venv/awx/bin/daphne", line 8, in <module>
awx_web      |     sys.exit(CommandLineInterface.entrypoint())
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/daphne/cli.py", line 144, in entrypoint
awx_web      |     cls().run(sys.argv[1:])
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/daphne/cli.py", line 174, in run
awx_web      |     channel_layer = importlib.import_module(module_path)
awx_web      |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_web      |     return _bootstrap._gcd_import(name[level:], package, level)
awx_web      |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_web      |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_web      |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_web      |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_web      |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_web      |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/asgi.py", line 9, in <module>
awx_web      |     prepare_env() # NOQA
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_web      |     if not settings.DEBUG: # pragma: no cover
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_web      |     self._setup(name)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_web      |     self._wrapped = Settings(settings_module)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_web      |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_web      |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_web      |     return _bootstrap._gcd_import(name[level:], package, level)
awx_web      |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_web      |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_web      |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_web      |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_web      |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_web      |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_web      |     raise ImproperlyConfigured(msg)
awx_web      | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_web      | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_task     | Traceback (most recent call last):
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_task     |     include(settings_file, optional(settings_files), scope=locals())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_task     |     raise IOError('No such file: {0}'.format(pattern))
awx_task     | OSError: No such file: /etc/tower/settings.py
awx_task     |
awx_task     | During handling of the above exception, another exception occurred:
awx_task     |
awx_task     | Traceback (most recent call last):
awx_task     |   File "/usr/bin/awx-manage", line 8, in <module>
awx_task     |     sys.exit(manage())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 136, in manage
awx_task     |     prepare_env()
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_task     |     if not settings.DEBUG: # pragma: no cover
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_task     |     self._setup(name)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_task     |     self._wrapped = Settings(settings_module)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_task     |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_task     |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_task     |     return _bootstrap._gcd_import(name[level:], package, level)
awx_task     |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_task     |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_task     |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_task     |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_task     |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_task     |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_task     |     raise ImproperlyConfigured(msg)
awx_task     | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_task     | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_web      | 2020-05-16 20:48:13,719 INFO exited: daphne (exit status 1; not expected)
awx_task     | 2020-05-16 20:48:14,097 CRIT Supervisor is running as root.  Privileges were not dropped because no user is specified in the config file.  If you intend to run as root, you can set user=root in the config file to avoid this message.
awx_task     | 2020-05-16 20:48:14,403 INFO RPC interface 'supervisor' initialized
awx_task     | 2020-05-16 20:48:14,404 CRIT Server 'unix_http_server' running without any HTTP authentication checking
awx_task     | 2020-05-16 20:48:14,404 INFO supervisord started with pid 125
awx_web      | 2020-05-16 20:48:14,725 INFO spawned: 'daphne' with pid 130
awx_task     | 2020-05-16 20:48:15,408 INFO spawned: 'awx-config-watcher' with pid 128
awx_task     | 2020-05-16 20:48:15,412 INFO spawned: 'dispatcher' with pid 129
awx_task     | 2020-05-16 20:48:15,416 INFO spawned: 'callback-receiver' with pid 130
awx_task     | 2020-05-16 20:48:15,420 INFO spawned: 'channels-worker' with pid 131
awx_task     | READY
awx_web      | Traceback (most recent call last):
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_web      |     include(settings_file, optional(settings_files), scope=locals())
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_web      |     raise IOError('No such file: {0}'.format(pattern))
awx_web      | OSError: No such file: /etc/tower/settings.py
awx_web      |
awx_web      | During handling of the above exception, another exception occurred:
awx_web      |
awx_web      | Traceback (most recent call last):
awx_web      |   File "/var/lib/awx/venv/awx/bin/daphne", line 8, in <module>
awx_web      |     sys.exit(CommandLineInterface.entrypoint())
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/daphne/cli.py", line 144, in entrypoint
awx_web      |     cls().run(sys.argv[1:])
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/daphne/cli.py", line 174, in run
awx_web      |     channel_layer = importlib.import_module(module_path)
awx_web      |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_web      |     return _bootstrap._gcd_import(name[level:], package, level)
awx_web      |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_web      |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_web      |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_web      |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_web      |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_web      |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/asgi.py", line 9, in <module>
awx_web      |     prepare_env() # NOQA
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_web      |     if not settings.DEBUG: # pragma: no cover
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_web      |     self._setup(name)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_web      |     self._wrapped = Settings(settings_module)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_web      |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_web      |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_web      |     return _bootstrap._gcd_import(name[level:], package, level)
awx_web      |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_web      |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_web      |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_web      |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_web      |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_web      |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_web      |     raise ImproperlyConfigured(msg)
awx_web      | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_web      | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_web      | 2020-05-16 20:48:15,797 INFO success: daphne entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
awx_web      | 2020-05-16 20:48:15,797 INFO exited: daphne (exit status 1; not expected)
awx_task     | Traceback (most recent call last):
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_task     |     include(settings_file, optional(settings_files), scope=locals())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_task     |     raise IOError('No such file: {0}'.format(pattern))
awx_task     | OSError: No such file: /etc/tower/settings.py
awx_task     |
awx_task     | During handling of the above exception, another exception occurred:
awx_task     |
awx_task     | Traceback (most recent call last):
awx_task     |   File "/usr/bin/awx-manage", line 8, in <module>
awx_task     |     sys.exit(manage())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 136, in manage
awx_task     |     prepare_env()
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_task     |     if not settings.DEBUG: # pragma: no cover
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_task     |     self._setup(name)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_task     |     self._wrapped = Settings(settings_module)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_task     |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_task     |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_task     |     return _bootstrap._gcd_import(name[level:], package, level)
awx_task     |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_task     |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_task     |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_task     |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_task     |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_task     |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_task     |     raise ImproperlyConfigured(msg)
awx_task     | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_task     | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_task     | 2020-05-16 20:48:16,282 INFO exited: channels-worker (exit status 1; not expected)
awx_task     | Traceback (most recent call last):
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_task     |     include(settings_file, optional(settings_files), scope=locals())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_task     |     raise IOError('No such file: {0}'.format(pattern))
awx_task     | OSError: No such file: /etc/tower/settings.py
awx_task     |
awx_task     | During handling of the above exception, another exception occurred:
awx_task     |
awx_task     | Traceback (most recent call last):
awx_task     |   File "/usr/bin/awx-manage", line 8, in <module>
awx_task     |     sys.exit(manage())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 136, in manage
awx_task     |     prepare_env()
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_task     |     if not settings.DEBUG: # pragma: no cover
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_task     |     self._setup(name)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_task     |     self._wrapped = Settings(settings_module)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_task     |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_task     |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_task     |     return _bootstrap._gcd_import(name[level:], package, level)
awx_task     |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_task     |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_task     |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_task     |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_task     |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_task     |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_task     |     raise ImproperlyConfigured(msg)
awx_task     | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_task     | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_task     | Traceback (most recent call last):
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_task     |     include(settings_file, optional(settings_files), scope=locals())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_task     |     raise IOError('No such file: {0}'.format(pattern))
awx_task     | OSError: No such file: /etc/tower/settings.py
awx_task     |
awx_task     | During handling of the above exception, another exception occurred:
awx_task     |
awx_task     | Traceback (most recent call last):
awx_task     |   File "/usr/bin/awx-manage", line 8, in <module>
awx_task     |     sys.exit(manage())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 136, in manage
awx_task     |     prepare_env()
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_task     |     if not settings.DEBUG: # pragma: no cover
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_task     |     self._setup(name)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_task     |     self._wrapped = Settings(settings_module)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_task     |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_task     |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_task     |     return _bootstrap._gcd_import(name[level:], package, level)
awx_task     |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_task     |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_task     |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_task     |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_task     |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_task     |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_task     |     raise ImproperlyConfigured(msg)
awx_task     | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_task     | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_task     | 2020-05-16 20:48:16,360 INFO exited: dispatcher (exit status 1; not expected)
awx_task     | 2020-05-16 20:48:16,363 INFO exited: callback-receiver (exit status 1; not expected)
awx_web      | 2020-05-16 20:48:16,801 INFO spawned: 'daphne' with pid 132
awx_task     | 2020-05-16 20:48:17,364 INFO success: awx-config-watcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
awx_task     | 2020-05-16 20:48:17,367 INFO spawned: 'dispatcher' with pid 135
awx_task     | 2020-05-16 20:48:17,371 INFO spawned: 'callback-receiver' with pid 136
awx_task     | 2020-05-16 20:48:17,375 INFO spawned: 'channels-worker' with pid 137
awx_web      | Traceback (most recent call last):
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_web      |     include(settings_file, optional(settings_files), scope=locals())
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_web      |     raise IOError('No such file: {0}'.format(pattern))
awx_web      | OSError: No such file: /etc/tower/settings.py
awx_web      |
awx_web      | During handling of the above exception, another exception occurred:
awx_web      |
awx_web      | Traceback (most recent call last):
awx_web      |   File "/var/lib/awx/venv/awx/bin/daphne", line 8, in <module>
awx_web      |     sys.exit(CommandLineInterface.entrypoint())
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/daphne/cli.py", line 144, in entrypoint
awx_web      |     cls().run(sys.argv[1:])
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/daphne/cli.py", line 174, in run
awx_web      |     channel_layer = importlib.import_module(module_path)
awx_web      |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_web      |     return _bootstrap._gcd_import(name[level:], package, level)
awx_web      |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_web      |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_web      |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_web      |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_web      |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_web      |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/asgi.py", line 9, in <module>
awx_web      |     prepare_env() # NOQA
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_web      |     if not settings.DEBUG: # pragma: no cover
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_web      |     self._setup(name)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_web      |     self._wrapped = Settings(settings_module)
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_web      |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_web      |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_web      |     return _bootstrap._gcd_import(name[level:], package, level)
awx_web      |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_web      |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_web      |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_web      |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_web      |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_web      |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_web      |     raise ImproperlyConfigured(msg)
awx_web      | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_web      | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_web      | 2020-05-16 20:48:17,880 INFO success: daphne entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
awx_web      | 2020-05-16 20:48:17,880 INFO exited: daphne (exit status 1; not expected)
awx_task     | Traceback (most recent call last):
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_task     |     include(settings_file, optional(settings_files), scope=locals())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_task     |     raise IOError('No such file: {0}'.format(pattern))
awx_task     | OSError: No such file: /etc/tower/settings.py
awx_task     |
awx_task     | During handling of the above exception, another exception occurred:
awx_task     |
awx_task     | Traceback (most recent call last):
awx_task     |   File "/usr/bin/awx-manage", line 8, in <module>
awx_task     |     sys.exit(manage())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 136, in manage
awx_task     |     prepare_env()
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_task     |     if not settings.DEBUG: # pragma: no cover
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_task     |     self._setup(name)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_task     |     self._wrapped = Settings(settings_module)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_task     |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_task     |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_task     |     return _bootstrap._gcd_import(name[level:], package, level)
awx_task     |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_task     |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_task     |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_task     |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_task     |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_task     |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_task     |     raise ImproperlyConfigured(msg)
awx_task     | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_task     | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_task     | Traceback (most recent call last):
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_task     |     include(settings_file, optional(settings_files), scope=locals())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_task     |     raise IOError('No such file: {0}'.format(pattern))
awx_task     | OSError: No such file: /etc/tower/settings.py
awx_task     |
awx_task     | During handling of the above exception, another exception occurred:
awx_task     |
awx_task     | Traceback (most recent call last):
awx_task     |   File "/usr/bin/awx-manage", line 8, in <module>
awx_task     |     sys.exit(manage())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 136, in manage
awx_task     |     prepare_env()
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_task     |     if not settings.DEBUG: # pragma: no cover
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_task     |     self._setup(name)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_task     |     self._wrapped = Settings(settings_module)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_task     |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_task     |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_task     |     return _bootstrap._gcd_import(name[level:], package, level)
awx_task     |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_task     |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_task     |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_task     |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_task     |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_task     |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_task     |     raise ImproperlyConfigured(msg)
awx_task     | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_task     | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_task     | Traceback (most recent call last):
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_task     |     include(settings_file, optional(settings_files), scope=locals())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_task     |     raise IOError('No such file: {0}'.format(pattern))
awx_task     | OSError: No such file: /etc/tower/settings.py
awx_task     |
awx_task     | During handling of the above exception, another exception occurred:
awx_task     |
awx_task     | Traceback (most recent call last):
awx_task     |   File "/usr/bin/awx-manage", line 8, in <module>
awx_task     |     sys.exit(manage())
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 136, in manage
awx_task     |     prepare_env()
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 95, in prepare_env
awx_task     |     if not settings.DEBUG: # pragma: no cover
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 79, in __getattr__
awx_task     |     self._setup(name)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 66, in _setup
awx_task     |     self._wrapped = Settings(settings_module)
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/conf/__init__.py", line 157, in __init__
awx_task     |     mod = importlib.import_module(self.SETTINGS_MODULE)
awx_task     |   File "/var/lib/awx/venv/awx/lib64/python3.6/importlib/__init__.py", line 126, in import_module
awx_task     |     return _bootstrap._gcd_import(name[level:], package, level)
awx_task     |   File "<frozen importlib._bootstrap>", line 994, in _gcd_import
awx_task     |   File "<frozen importlib._bootstrap>", line 971, in _find_and_load
awx_task     |   File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
awx_task     |   File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
awx_task     |   File "<frozen importlib._bootstrap_external>", line 678, in exec_module
awx_task     |   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
awx_task     |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 106, in <module>
awx_task     |     raise ImproperlyConfigured(msg)
awx_task     | django.core.exceptions.ImproperlyConfigured: No AWX configuration found at /etc/tower/settings.py.
awx_task     | Define the AWX_SETTINGS_FILE environment variable to specify an alternate path.
awx_task     | 2020-05-16 20:48:18,202 INFO exited: callback-receiver (exit status 1; not expected)
awx_task     | 2020-05-16 20:48:18,204 INFO exited: dispatcher (exit status 1; not expected)
awx_task     | 2020-05-16 20:48:18,237 INFO exited: channels-worker (exit status 1; not expected)
awx_web      | 2020-05-16 20:48:18,884 INFO spawned: 'daphne' with pid 134
awx_web      | 2020-05-16 20:48:19,886 INFO success: daphne entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
awx_web      | Traceback (most recent call last):
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/settings/production.py", line 84, in <module>
awx_web      |     include(settings_file, optional(settings_files), scope=locals())
awx_web      |   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/split_settings/tools.py", line 93, in include
awx_web      |     raise IOError('No such file: {0}'.format(pattern))
awx_web      | OSError: No such file: /etc/tower/settings.py


user: TidalPoo
issue_7037: state: open
title: Inconsistent capitalization across ui-next 
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Capitalization is inconsistent throughout ui-next. The end goal is CONSISTENCY. This will require an audit across the UI. Feel free to break this up into multiple issues or address it all in this issue. 
cc @trahman73 

PatternFly Guideline: https://www.patternfly.org/v4/ux-writing/capitalization
>Similar to PatternFly, sentence case is the standard across Red Hat products. However, capitalization will vary depending on each product area's context. In general, follow these guidelines:
>
>* Write navigation items and their corresponding page titles in title case.
>* Write all other areas (like menu items, button text, form field labels, and empty state headings) in sentence case.
>* Capitalize proper nouns, acronyms, initialisms, product names, services, and features.
>
>Capitalize Red Hat feature names when they’re used as proper nouns or when they refer to a capitalized UI term (like a navigation item). Write them in lowercase when they’re used to describe generic concepts.
>
>1. Navigation: Navigation items are in title case.
>2. Menu: Menu items are in sentence case.


##### Capitalization Types
**Title case** capitalizes only the first letter of each word in a sentence except for smaller words like articles and conjunctions that have fewer than four letters.
>"PatternFly Design Resources With Tips and Best Practices"

**Sentence case** only capitalizes the first letter of the first word in a title, heading, subtitle, or subheading except for proper nouns, product names, acronyms, and initialisms.
> “PatternFly’s design resources with tips and best practices”


user: marshmalien
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_7021: state: open
title: Support multiple replicas in the installer
body: ##### ISSUE TYPE
 - add new variable "replicas" to define more than one replica for awx pod during installation time

##### SUMMARY
we need to have multiple replicas of awx pod running on Kubernetes for high availability, is it possible to have this configurable during installation time?
user: mo-saeed
issue_7010: state: open
title: awx collection tower_group: append to existing host list
body: **SUMMARY**
When using hosts parameter to add hosts to a group, all existing hosts are deleted.

**ISSUE TYPE**
Enhancement

**COMPONENT NAME**
tower_group

**ADDITIONAL INFORMATION**
Add an overwrite parameter to prevent deletion of existing hosts.
user: fxmick
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_7008: state: open
title: Add copy option to awx collection modules
body: ##### ISSUE TYPE
 - AWX collection modules  only support from scratch creation


##### SUMMARY
Add an option in the module parameters : 
from: existingItemName

This feature already exists for all kind of items using REST API :
POST
/api/v2/job_templates/{id}/copy/

Fail if "from item" does not exist

user: fxmick
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_7002: state: open
title: Errors due to having % characters in password in config file
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Some config files seems to cause the tower modules to error. Exact details still not completely uncelar.

##### STEPS TO REPRODUCE

Seems to be specific to installing Ansible in a python3 / RHEL8 environment from pip. It looks like it happens when using the config file without the `[general]` header.

##### EXPECTED RESULTS

Parses config file.

##### ACTUAL RESULTS

get traceback

```
Traceback (most recent call last):
  File "/tmp/ansible_tower_organization_payload_3v6k9sri/ansible_tower_organization_payload.zip/ansible_collections/awx/awx/plugins/module_utils/tower_api.py", line 147, in load_config
  File "/var/lib/awx/venv/python3_tower_modules/lib/python3.6/site-packages/yaml/__init__.py", line 114, in load
    return loader.get_single_data()
  File "/var/lib/awx/venv/python3_tower_modules/lib/python3.6/site-packages/yaml/constructor.py", line 49, in get_single_data
    node = self.get_single_node()
  File "/var/lib/awx/venv/python3_tower_modules/lib/python3.6/site-packages/yaml/composer.py", line 39, in get_single_node
    if not self.check_event(StreamEndEvent):
  File "/var/lib/awx/venv/python3_tower_modules/lib/python3.6/site-packages/yaml/parser.py", line 98, in check_event
    self.current_event = self.state()
  File "/var/lib/awx/venv/python3_tower_modules/lib/python3.6/site-packages/yaml/parser.py", line 174, in parse_document_start
    self.peek_token().start_mark)
yaml.parser.ParserError: expected '<document start>', but found '<scalar>'
  in "<unicode string>", line 2, column 1:
    host = https://ec2-18-206-224-12 ... 
    ^

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/tmp/ansible_tower_organization_payload_3v6k9sri/ansible_tower_organization_payload.zip/ansible_collections/awx/awx/plugins/module_utils/tower_api.py", line 172, in load_config
  File "/usr/lib64/python3.6/configparser.py", line 800, in get
    d)
  File "/usr/lib64/python3.6/configparser.py", line 394, in before_get
    self._interpolate_some(parser, option, L, value, section, defaults, 1)
  File "/usr/lib64/python3.6/configparser.py", line 444, in _interpolate_some
    "found: %r" % (rest,))
configparser.InterpolationSyntaxError: '%' must be followed by '%' or '(', found: '<redacted, password with % in it>'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/tmp/ansible_tower_organization_payload_3v6k9sri/ansible_tower_organization_payload.zip/ansible_collections/awx/awx/plugins/module_utils/tower_api.py", line 111, in load_config_files
  File "/tmp/ansible_tower_organization_payload_3v6k9sri/ansible_tower_organization_payload.zip/ansible_collections/awx/awx/plugins/module_utils/tower_api.py", line 177, in load_config
ansible_collections.awx.awx.plugins.module_utils.tower_api.ConfigFileException: An unknown exception occured trying to ini load config file: '%' must be followed by '%' or '(', found: '%viG5v#MS]<r2HQ'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/root/.ansible/tmp/ansible-tmp-1589300028.911883-31299-24841853381059/AnsiballZ_tower_organization.py", line 116, in <module>
    _ansiballz_main()
  File "/root/.ansible/tmp/ansible-tmp-1589300028.911883-31299-24841853381059/AnsiballZ_tower_organization.py", line 108, in _ansiballz_main
    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)
  File "/root/.ansible/tmp/ansible-tmp-1589300028.911883-31299-24841853381059/AnsiballZ_tower_organization.py", line 54, in invoke_module
    runpy.run_module(mod_name='ansible_collections.awx.awx.plugins.modules.tower_organization', init_globals=None, run_name='__main__', alter_sys=True)
  File "/usr/lib64/python3.6/runpy.py", line 205, in run_module
    return _run_module_code(code, init_globals, run_name, mod_spec)
  File "/usr/lib64/python3.6/runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "/usr/lib64/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/tmp/ansible_tower_organization_payload_3v6k9sri/ansible_tower_organization_payload.zip/ansible_collections/awx/awx/plugins/modules/tower_organization.py", line 129, in <module>
  File "/tmp/ansible_tower_organization_payload_3v6k9sri/ansible_tower_organization_payload.zip/ansible_collections/awx/awx/plugins/modules/tower_organization.py", line 94, in main
  File "/tmp/ansible_tower_organization_payload_3v6k9sri/ansible_tower_organization_payload.zip/ansible_collections/awx/awx/plugins/module_utils/tower_api.py", line 65, in __init__
  File "/tmp/ansible_tower_organization_payload_3v6k9sri/ansible_tower_organization_payload.zip/ansible_collections/awx/awx/plugins/module_utils/tower_api.py", line 113, in load_config_files
TypeError: fail_json() takes 1 positional argument but 2 were given
```

##### ADDITIONAL INFORMATION

Looks like the call pattern is incorrect here:

https://github.com/ansible/awx/blob/c3afe3f815b4be870ac71cea4bbb45cb01c11401/awx_collection/plugins/module_utils/tower_api.py#L113

That's not the _only_ problem here.

This is related to https://github.com/ansible/awx/issues/6983 in some ways, but not completely the same.

Also note:

```
>>> isinstance(yaml.parser.ParserError, yaml.YAMLError)
False
```

So where we catch the yaml error (which is already problematic), we don't catch all yaml errors.
user: AlanCoding
labels: component:awx_collection: issues related to the collection for controlling AWX
issue_6973: state: open
title: Saving a new JT with webhooks enabled in certain conditions causes incorrect behavior
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Visit a new JT form. If you fill it out and enable webhooks, but don't choose a service (github or gitlab), then saving the form will 200, but the page won't redirect and will show an error about an 'id' of 'undefined'. Because the 200 went through, a second click will say that the JT already exists. 

This bug should be fixed by either defaulting to github when webhooks are enabled, or putting validation so that the user chooses either github or gitlab when configuring webhooks.

##### STEPS TO REPRODUCE
1. Start a JT form (new one)
2. Fill out the required fields
3. Enable webhooks, but don't select github or gitlab.
4. Save

##### EXPECTED RESULTS
The JT saves and redirects to the details page. 

##### ACTUAL RESULTS
No redirect, a message about an undefined ID, but the JT does save under the hood.
user: dsesami
issue_6972: state: open
title: Support searches for resource name/type on User -> Roles tab
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
There is a PR #6968 up for User Access List, which allows the user to search by Resource role.  However, it would also be good to allow the user to search by Resource Type and Resource Name.  
user: AlexSCorey
issue_6961: state: open
title: Provisioning Callback API, POST message without the application/json header
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
I have a network device that I would like to provisiong from which I would like to push the POST message to the job which has a callback URL to trigger the job. The device in fact has a curltool which doesn't have a lot of features/parameter to define:

> curltool: -r <GET|POST> -u <URI(http://XXXXXXX> [-a <User Agent>] [-p <POST parameters>] [                                                                                                -o (output filename)] -h
         -r Request     : Send a GET or POST request
         -u URI : Uniform Resource Identifier (protocole + server + param)
                http://www.stormshield.eu/mapage.html?param1=value1&param2=value2...)
         -a User Agent  : User Agent useed for this request
                Default agent is:EVA1-VMSNSX00C1204A9 : curltool (1.0):
         -p The POST parameters : post_param1=post_value1&post_param2=post_value2...
         -o Output File : Path to file for storing the output (!!! file is overwrite !!!)
         -h Help        : Display this help

As you can see I can't define the header parameter (is it mandatory?). After the testing command I get timeouts:
```
VMSNSX00C1204A9>curltool -r POST -u http://10.0.0.137:80/api/v2/job_templates/10/callback/ -p host_config_key=c5fd0a9e-8b48-482b-8fe2-d4605b9e0a96
Error code:(28): Timeout was reached
```
or 
```
`VMSNSX00C1204A9>curltool -r POST -u http://10.0.0.137:80/api/v2/job_templates/10/callback/ -p '{"host_config_key": "c5fd0a9e-8b48-482b-8fe2-d4605b9e0a96"}'
Error code:(268): HTTP server error (!= 200)`
```

So, when I push the POST message from the curl from the linux agent it looks like this:
`curl -v -k -s -i -X POST -H 'Content-Type:application/json' --data '{"host_config_key": "c5fd0a9e-8b48-482b-8fe2-d4605b9e0a96"}' http://awx_ip:80/api/v2/job_templates/10/callback/`
And it works, it triggers the job.

The question is whether is it possible to push the POST to the AWX with the features that gives me the network device with this curltool? I guess it is all about the Content-Type which I can't define in curltool.

This is what I collect from GET:
```
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
X-API-Node: awx
X-API-Time: 0.122s

{
    "host_config_key": "c5fd0a9e-8b48-482b-8fe2-d4605b9e0a96",
    "matching_hosts": []
}
```

##### ENVIRONMENT
* AWX version: 11.0.0
* AWX install method: docker
* Ansible version:  2.9.5
* Operating System: CentOS7
* Web Browser:



user: mareckis
issue_6959: state: open
title: Add prompt to all credential types 
body: ##### ISSUE TYPE
Problem with awx is security. I dont understand why prompt is only on machine credentials.

##### SUMMARY
Please add prompt possibility on all credential types like it is on machine type. I don't get the point why this is only on machine type and not on all of them. Most of the time i need it for vmware but it would be very usefull for any kind of credential, for sure.

user: michalss
issue_6958: state: open
title: Test option in the credential section 
body: ##### ISSUE TYPE
 Test option in the credential section 

##### SUMMARY
I think having a test option when we add credentials of any type in Ansible AWX/Tower will be very handy . 

For example , If one adds Azure creentials or AWS credentials , having a option to test if those credentials work fine will be very handy. 

I am thinking something similar on this line 

https://octopus.com/docs/infrastructure/deployment-targets/azure#add-service-principal-account 

Click SAVE AND TEST to confirm the account can interact with Azure. Octopus will then attempt to use the account credentials to access the Azure Resource Management (ARM) API and list the Resource Groups in that subscription. You may need to whitelist the IP Addresses for the Azure Data Center you are targeting. See deploying to Azure via a Firewall for more details.

user: imlight
issue_6951: state: open
title: Unable to run `git describe` on localhost for current running template
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->
git commands for currently used repo are unavailable. Unable to run `git describe` on localhost for current running template

##### ENVIRONMENT
* AWX version: 9.3.0
* AWX install method: openshift
* Ansible version:  2.9.1
* Operating System: RHEL 7.6
* Web Browser: firefox

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->
Run the following tasks:
  - name: get last git tag
    command: git describe
    delegate_to: localhost
    register: output
 
  - debug: msg="{{ output }}"

##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->
v1.3.0-5-5c1f940

##### ACTUAL RESULTS

<!-- What actually happened? -->
TASK get last git tag] ***************************************
fatal: [my-test-host -> localhost]: FAILED! => {"changed": true, "cmd": ["git", "describe"], "delta": "0:00:00.010565", "end": "2020-05-06 17:34:22.161630", "msg": "non-zero return code", "rc": 128, "start": "2020-05-06 17:34:22.151065", "stderr": "fatal: No names found, cannot describe anything.", "stderr_lines": ["fatal: No names found, cannot describe anything."], "stdout": "", "stdout_lines": []}
##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: gforster
issue_6945: state: open
title: Ignore warnings option for job templates
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Toggle that allow you to suppress all or certain warnings that Ansible normally generates, easily available from job template so that user is not required to mess up with ansible.cfg to suppress them

user: benapetr
issue_6907: state: open
title: Permission denied error on importer.py after play is done
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
After running a job in AWX there is an error appearing in `importer.py` Not sure what is causing it. 

##### ENVIRONMENT
* AWX version: 11.1.0
* AWX install method: kubernetes
* Ansible version:  2.9.6
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

Run a job and wait to finish it

##### EXPECTED RESULTS

No Error

##### ACTUAL RESULTS

```
awx-ddfcd87cf-j5h6s awx-task 2020-04-29 11:56:03,429 ERROR    awx.main.tasks job 65882 (running) Exception occurred while running task
awx-ddfcd87cf-j5h6s awx-task Traceback (most recent call last):
awx-ddfcd87cf-j5h6s awx-task   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 1481, in run
awx-ddfcd87cf-j5h6s awx-task     res = ansible_runner.interface.run(**params)
awx-ddfcd87cf-j5h6s awx-task   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/ansible_runner/interface.py", line 178, in run
awx-ddfcd87cf-j5h6s awx-task     r.run()
awx-ddfcd87cf-j5h6s awx-task   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/ansible_runner/runner.py", line 265, in run
awx-ddfcd87cf-j5h6s awx-task     _delete()
awx-ddfcd87cf-j5h6s awx-task   File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/ansible_runner/runner.py", line 256, in _delete
awx-ddfcd87cf-j5h6s awx-task     shutil.rmtree(self.config.process_isolation_path_actual)
awx-ddfcd87cf-j5h6s awx-task   File "/var/lib/awx/venv/awx/lib64/python3.6/shutil.py", line 486, in rmtree
awx-ddfcd87cf-j5h6s awx-task     _rmtree_safe_fd(fd, path, onerror)
awx-ddfcd87cf-j5h6s awx-task   File "/var/lib/awx/venv/awx/lib64/python3.6/shutil.py", line 424, in _rmtree_safe_fd
awx-ddfcd87cf-j5h6s awx-task     _rmtree_safe_fd(dirfd, fullname, onerror)
awx-ddfcd87cf-j5h6s awx-task   File "/var/lib/awx/venv/awx/lib64/python3.6/shutil.py", line 424, in _rmtree_safe_fd
awx-ddfcd87cf-j5h6s awx-task     _rmtree_safe_fd(dirfd, fullname, onerror)
awx-ddfcd87cf-j5h6s awx-task   File "/var/lib/awx/venv/awx/lib64/python3.6/shutil.py", line 424, in _rmtree_safe_fd
awx-ddfcd87cf-j5h6s awx-task     _rmtree_safe_fd(dirfd, fullname, onerror)
awx-ddfcd87cf-j5h6s awx-task   [Previous line repeated 1 more time]
awx-ddfcd87cf-j5h6s awx-task   File "/var/lib/awx/venv/awx/lib64/python3.6/shutil.py", line 444, in _rmtree_safe_fd
awx-ddfcd87cf-j5h6s awx-task     onerror(os.unlink, fullname, sys.exc_info())
awx-ddfcd87cf-j5h6s awx-task   File "/var/lib/awx/venv/awx/lib64/python3.6/shutil.py", line 442, in _rmtree_safe_fd
awx-ddfcd87cf-j5h6s awx-task     os.unlink(name, dir_fd=topfd)
awx-ddfcd87cf-j5h6s awx-task PermissionError: [Errno 13] Permission denied: 'importer.py'
```

##### ADDITIONAL INFORMATION

- External RDS Postgresql Database

user: stokkie90
issue_6901: state: open
title: RFE Kerberos SSO Login to the Web UI
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
I'd like to see kerberos supported as an auth method for the web UI, much like satellite supports kerberos SSO for their web UI. 

I realize there is kerberos support for winrm, that is not what I am talking about here. I want as a user, to be able to go to my awx/tower instance in my web browser which is properly configured to expose kerberos credentials, and just be logged in. 

user: erinn
labels: component:authentication: For issues related to authentication
issue_6892: state: open
title: Dynamic Inventory of hosts from OpenStack: ansible_ssh_host is private IP and not floating
body: ##### ISSUE TYPE
 - Documentation
##### COMPONENT NAME
 - API
##### SUMMARY
Hi,
I'm during the synchronization of OpenStack and AWX. I made a dynamic inventory of hosts that are deployed on my OpenStack cloud using the appriopriate credentials. The hosts are detected correctly, and doing job templates manually works, but I will be in need of making an API callbacks and SSH using floating ips of the virtual machines. So, right now I can see in AWX, in the host variables that these parameters are the private-networks IPs:
ansible_host: 192.168.100.11
ansible_ssh_host: 192.168.100.11
I can see that both IPs are discovered:
addresses:
    private:
      - 'OS-EXT-IPS-MAC:mac_addr': 'fa:16:3e:19:9f:fb'
        'OS-EXT-IPS:type': fixed
        addr: 192.168.100.11
        version: 4
      - 'OS-EXT-IPS-MAC:mac_addr': 'fa:16:3e:19:9f:fb'
        'OS-EXT-IPS:type': floating
        addr: 10.0.0.147
        version: 4

For this inventory job I use the venv: /var/lib/awx/venv/ansible
I can't find out in the docs, how I can change the script to take the floating IPs from an inventory as an assible_ssh_host parameter.. In this case 10.0.0.147

##### ENVIRONMENT
* AWX version: 11.0.0
* AWX install method: docker
* Ansible version:  2.9.5
* Operating System: CentOS7

##### STEPS TO REPRODUCE

<!-- For new features, show how the feature would be used. For bugs, please show
exactly how to reproduce the problem. Ideally, provide all steps and data needed
to recreate the bug from a new awx install. -->

##### EXPECTED RESULTS

ansible_ssh_host: 10.0.0.147 <-- floating ip from OpenStack

##### ACTUAL RESULTS

ansible_ssh_host: 192.168.100.11 <-- right now i collect private ip from OpenStack

##### ADDITIONAL INFORMATION


user: mareckis
issue_6891: state: open
title: 11.2.0 installer : No module named 'docker' on python2 host
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Installer 

##### ENVIRONMENT
* AWX version: 11.2.0
* AWX install method: docker on linux
* Ansible version:  2.9.7
* Operating System: debian10/buster
* Web Browser: N/A

##### STEPS TO REPRODUCE

Run the installer

##### EXPECTED RESULTS

As for the 11.1.0 installer just work the same way with the same options, 11.2.0 should work too.

##### ACTUAL RESULTS

Error on task `Start the containers`
-or-
Error on task `image_build : Build sdist builder image` when trying to build
```
Failed to import the required Python library (Docker SDK for Python: docker (Python >= 2.7) or docker-py (Python 2.6)) on <host>'s Python /usr/bin/python3. Please read module documentation and install in the appropriate location. If the required library is installed, but Ansible is using the wrong Python interpreter, please consult the documentation on ansible_python_interpreter, for example via `pip install docker` or `pip install docker-py` (Python 2.6). The error was: No module named 'docker'
```

##### ADDITIONAL INFORMATION

- python2 only on this host
- no `docker-py` package conflict
- docker==3.7.3 (also tested with 4.2.0)
- docker-compose==1.24.1 (also tested with 1.25.5)

Could be related to https://github.com/ansible/ansible/issues/63180 (was hoping to be fixed in ansible 2.9.7)
user: vin-c
issue_6886: state: open
title: AWX 11.2.0: create_preload_data seems not to work anymore for openshift setup
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Although I set create_preload_data=False in my inventory demo data is still created.

##### ENVIRONMENT
* AWX version: 11.2.0
* AWX install method: openshift
* Ansible version:  2.8.11
* Operating System: Ubuntu 18.04
* Web Browser:

##### STEPS TO REPRODUCE

Just set create_preload_data=False and run ansible-playbook -i YOUR_INVENTORY installer/install.yml

##### EXPECTED RESULTS

There should be no demo data in the resulting AWX installation (Demo Project, Demo Credentials, Demo Job Template, ...)

##### ACTUAL RESULTS

There is demo data in the resulting AWX installation.

##### ADDITIONAL INFORMATION



user: peterloeffler
issue_6884: state: open
title: Using AWS SSO with MS AD, After SAML Authentication, AWX redirects to /login: Error social'subject'
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Trying to configure AWX with SAML Authentication to work against AWS SSO.
Can log in to the SSO page, but when I select the AWX app, login appears to work, but gets redirected to the login page.

awx_web log indicates: ERROR social 'Subject'
Guidance required regarding the setting of attr_user_permanent_id and mapping in AWS SSO

##### ENVIRONMENT
* AWX version: 9.2.0
* AWX install method: docker on linux
* Ansible version:  2.9.3
* Operating System: Ubuntu 18.04
* Web Browser: Chrome

##### STEPS TO REPRODUCE

Have configured AWS SSO with a Microsoft AD server as per AWS Landing Zone.
Created AWX Application in AWS SSO:

With Attribute mappings:

```
Subject : ${user:subject} format=unspecified 
User.Email : ${user:email} format=unspecified 
User.FirstName: ${user.givenName} format=unspecified 
User.LastName: ${user.familyName} format=unspecified 
```

AWX SAML Configured with:
SAML Enabled Identity Providers:
```
{
 "amazon": {
  "entity_id": "https://portal.sso.eu-west-2.amazonaws.com/saml/assertion/<id here>",
  "attr_last_name": "User.LastName",
  "attr_first_name": "User.FirstName",
  "x509cert": "<cert here>",
  "attr_username": "User.Email",
  "attr_user_permanent_id": "Subject",
  "attr_email": "User.Email",
  "url": "https://portal.sso.eu-west-2.amazonaws.com/saml/assertion/<id here>"
 }
}
```

Went to AWX login page. Selected S option for SAML.

##### EXPECTED RESULTS

Got redirected to AWX as logged user:

##### ACTUAL RESULTS

login failure:

```
10.0.0.136 - - [29/Apr/2020:22:09:38 +0000] "GET /api/ HTTP/1.1" 200 186 "https://awx.bright-env.co.uk/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36" "109.207.29.2"
[pid: 1054|app: 0|req: 67/164] 10.0.0.136 () {56 vars in 1064 bytes} [Wed Apr 29 22:09:38 2020] GET /api/v2/auth/ => generated 296 bytes in 28 msecs (HTTP/1.1 200) 8 headers in 231 bytes (1 switches on core 0)
10.0.0.136 - - [29/Apr/2020:22:09:38 +0000] "GET /api/v2/auth/ HTTP/1.1" 200 296 "https://awx.bright-env.co.uk/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36" "109.207.29.2"
[pid: 1054|app: 0|req: 68/165] 10.0.0.136 () {36 vars in 410 bytes} [Wed Apr 29 22:09:40 2020] GET / => generated 11361 bytes in 27 msecs (HTTP/1.1 200) 5 headers in 169 bytes (1 switches on core 0)
10.0.0.136 - - [29/Apr/2020:22:09:40 +0000] "GET / HTTP/1.1" 200 11361 "-" "ELB-HealthChecker/1.0" "-"
[pid: 1058|app: 0|req: 49/166] 10.0.0.136 () {58 vars in 1210 bytes} [Wed Apr 29 22:09:41 2020] GET /sso/login/saml/?idp=amazon => generated 0 bytes in 38 msecs (HTTP/1.1 302) 10 headers in 1327 bytes (1 switches on core 0)
10.0.0.136 - - [29/Apr/2020:22:09:41 +0000] "GET /sso/login/saml/?idp=amazon HTTP/1.1" 302 0 "https://awx.bright-env.co.uk/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36" "109.207.29.2"
[pid: 1058|app: 0|req: 50/167] 10.0.0.79 () {36 vars in 409 bytes} [Wed Apr 29 22:09:41 2020] GET / => generated 11361 bytes in 28 msecs (HTTP/1.1 200) 5 headers in 169 bytes (1 switches on core 0)
10.0.0.79 - - [29/Apr/2020:22:09:41 +0000] "GET / HTTP/1.1" 200 11361 "-" "ELB-HealthChecker/1.0" "-"
10.0.0.136 - - [29/Apr/2020:22:09:43 +0000] "GET /websocket/ HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36" "109.207.29.2"
2020-04-29 22:09:44,371 ERROR    social 'Subject'.
[pid: 1058|app: 0|req: 51/168] 10.0.0.136 () {64 vars in 1301 bytes} [Wed Apr 29 22:09:44 2020] POST /sso/complete/saml/ => generated 0 bytes in 55 msecs (HTTP/1.1 302) 8 headers in 356 bytes (1 switches on core 0)
10.0.0.136 - - [29/Apr/2020:22:09:44 +0000] "POST /sso/complete/saml/ HTTP/1.1" 302 0 "https://d-9c67284071.awsapps.com/start" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36" "109.207.29.2"
10.0.0.136 - - [29/Apr/2020:22:09:44 +0000] "GET /sso/error/ HTTP/1.1" 301 0 "https://d-9c67284071.awsapps.com/start" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36" "109.207.29.2"
[pid: 1054|app: 0|req: 69/169] 10.0.0.136 () {58 vars in 1237 bytes} [Wed Apr 29 22:09:44 2020] GET /sso/error/ => generated 0 bytes in 40 msecs (HTTP/1.1 301) 8 headers in 373 bytes (1 switches on core 0)
[pid: 1058|app: 0|req: 52/170] 10.0.0.136 () {58 vars in 1217 bytes} [Wed Apr 29 22:09:44 2020] GET / => generated 11361 bytes in 32 msecs (HTTP/1.1 200) 7 headers in 334 bytes (1 switches on core 0)
10.0.0.136 - - [29/Apr/2020:22:09:44 +0000] "GET / HTTP/1.1" 200 11361 "https://d-9c67284071.awsapps.com/start" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36" "109.207.29.2"
```

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: dojones1
issue_6879: state: open
title: Custom credential types per organization
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

###### OPTION 1

Right now, the administrator for our AWX instance doesn't want to give out administrator privileges to organization owners. This means I can't create custom credential types. I'd like to be able to set environment variables using credentials, but doesn't seem possible in our current setup.

A fix could be to allow custom credential types to optionally exist in an organization so an organization owner can define their own credential types.

###### OPTION 2

This option might be easier.

There could also be a credential type of ENVIRONMENT VARIABLE. Where you can set the name of the environment variable and it's value that will get set prior to running the playbook.

user: iridian-ks
issue_6874: state: open
title: AWX takes 4-5 min to start with external Postgres instance
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug Report

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - Installer

##### SUMMARY
<!-- Briefly describe the problem. -->
AWX takes 4-5 min to start first time with external Postgres instance. Checked logs nothing strange just waiting (awx_web) and after 5 min, works well. Do you have any ideas? there is a timeout ?
##### ENVIRONMENT
* AWX version: 9.2.0
* AWX install method: docker on linux
* Ansible version:  2.8
* Operating System: Ubuntu 18
* Web Browser: firefox

##### STEPS TO REPRODUCE

<!-- For new features, show how the feature would be used. For bugs, please show
exactly how to reproduce the problem. Ideally, provide all steps and data needed
to recreate the bug from a new awx install. -->

##### EXPECTED RESULTS

<!-- For bug reports, what did you expect to happen when running the steps
above? -->

##### ACTUAL RESULTS

<!-- For bug reports, what actually happened? -->

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: bouluad
issue_6872: state: open
title: Feature: Support OAuth on Bitbucket Cloud
body: ##### ISSUE TYPE
Support OAuth on Bitbucket Cloud

##### SUMMARY
In nowadays platform already supports `Azure AD`, `Github`, `Google Oauth2` and others...

Atlassian products have a wide general adoption among many companies and would be great to have support to use [OAuth with Bitbucket](https://confluence.atlassian.com/bitbucket/oauth-on-bitbucket-cloud-238027431.html)

It's a good feature to add?
user: js-max
labels: component:authentication: For issues related to authentication
issue_6858: state: open
title: [ui_next] Schedules, values for 'FrequencyDetailSubform__RunEveryLabel' and 'Detail__DetailName: Repeat Frequency', needs to be marked for translations
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
With Japanese (dummy translation) google-chrome, values for 'FrequencyDetailSubform__RunEveryLabel' and 'Detail__DetailName: Repeat Frequency', at  'Templates > JT > Schedules > {Edit and Schedule} Details' screen, appears in English (instead of Japanese)
<!-- Briefly describe the problem. -->


##### ENVIRONMENT
* AWX version: 10.0.0
* AWX install method: docker on linux
* Ansible version:  2.10.0.dev0
* Operating System: Fedora 31
* Web Browser: google-chrome

##### STEPS TO REPRODUCE
1. Do a successful login to the ui_next interface in the preferred language (say Japanese)
2. Navigate to breadcrumb 'Templates > Demo Job Template > Schedules > Run Demo JT 5 Times > {Edit and Schedule} Details'
3. Observe respective values for 'FrequencyDetailSubform__RunEveryLabel' and 'Detail__DetailName: Repeat Frequency'

<!-- Please describe exactly how to reproduce the problem. -->

##### EXPECTED RESULTS
Content should appear in Japanese
<!-- What did you expect to happen when running the steps above? -->

##### ACTUAL RESULTS
1. 'weeks' | 'months' 

2. 'Every week on Monday, Wednesday, Friday for 5 times' | 'Every month on Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday until October 27, 2020'
<!-- What actually happened? -->

##### ADDITIONAL INFORMATION
1. Screenshot higlighting respective values for 'FrequencyDetailSubform__RunEveryLabel' and 'Detail__DetailName: Repeat Frequency', appearing in English, with Japanese google-chrome:

Run every 1 months:
![output_months](https://user-images.githubusercontent.com/12151785/80513569-dfbf9680-899c-11ea-878e-5ea9c467cbc9.gif)

Run every 1 weeks:
![output_weeks](https://user-images.githubusercontent.com/12151785/80513586-e51ce100-899c-11ea-85b0-220747a61e41.gif)

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->
user: sshedmake
labels: component:l10n: localization, translation, japanese, french
issue_6843: state: open
title: Define approve permissions for each approve instead of the whole workflow 
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Currently I can only define permissions "approve" for a whole "workflow".  
But sometimes it is important that different persons or teams can approve multiple approve-steps in one workflow.  
For example team1 is responsible to approve the 1st task, team2 is responsible to approve the 2nd task.
So there is the need to have a more detailed permission schema for approvals.

user: Slm0n87
issue_6842: state: open
title: "Playbook not found for project" error when the playbook exist but is invalid 
body: ##### ISSUE TYPE
When a playbook is not valid but its filename is specified using a rest api enpoint, (e.g using job_templates endpoint) the system returns "Playbook not found for project".

##### SUMMARY
Error "Playbook not found for project", suggest users that yaml file doesn't exist at specified playbook path. In this particular situation error message like "Playbook specified doesn't contain any plays" or "Playbook specified is not a valid playbook" would clearly suggest user where problem lies.

user: zaskan
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_6813: state: open
title: if awx_server != localhost in local_docker role, db upgrade fails ( not adjusted for non_local )
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY

Installer suggest to update awx_server from localhost to remote server, if you want to install to remote server. This is how I installed previous ( 7 ) version of AWX.
Now when Upgrading to 10+ it wants to upgrade postgres db.

Problem is, file lookup and db upgrade tasks are looking for **local** files, even if you change inventory to be non-local. 


##### ENVIRONMENT
* AWX version: latest github repo
* AWX install method: docker on linux, role local_docker
* Ansible version:  2.9.6
* Operating System: Ubuntu 18.04 
* Web Browser: Firefox

##### STEPS TO REPRODUCE

Change `awx_server` to external server, not localhost

##### EXPECTED RESULTS

It will fail in lookup for old postgres version ( searching locally, not remotely ). 
And continue to fail if you just manually set variable:

```
- name: Determine whether to upgrade postgres
  set_fact:
    upgrade_postgres: yes
```

because it's still working on local directories during db migration, not remote directories.

user: i4o
issue_6805: state: open
title: [ui_next] Broken Job Templates should be highlighted in the workflow visualizer + currently hide 400 errors
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
In the old UI, workflow nodes that were broken -- for example, a job template with a now-deleted project -- had no way of showing that they were broken from the workflow view. It was greyed-out if you went to the details of the node, yes, but no further information was given. Showing the actual details of what is broken is covered by some of the work in https://github.com/ansible/awx/issues/6530. 

This issue centers around putting some kind of error indication here:
![Screenshot_20200422_133714](https://user-images.githubusercontent.com/19942822/80018215-b1751f00-84a3-11ea-8d68-490610f49548.png)

- [ ] This node is missing a project, but it should have some red exclamation mark or a red border to indicate that it's broken.
- [ ] Selecting the job template should also be disabled or have a red exclamation mark when adding it from the node list
- [ ] Clicking save generates a 400 when the JT is broken, but does not show a generalized error message anywhere.
user: dsesami
issue_6799: state: open
title: [ui_next] Few DetailName(s) at the ~/credentials 'details' screen, needs to be marked for translations
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
With Japanese (dummy translation) google-chrome, few DetailName(s) at the ~/credentials 'details' screen, appears in English (instead of Japanese)
<!-- Briefly describe the problem. -->

##### ENVIRONMENT
* AWX version: 10.0.0
* AWX install method: docker on linux
* Ansible version:  2.10.0.dev0
* Operating System: Fedora 31
* Web Browser: google-chrome

##### STEPS TO REPRODUCE
1. Do a successfull login to the ui_next interface in the preferred language (say Japanese)
2. Navigate to ~/credentials 'details' screen 
<!-- Please describe exactly how to reproduce the problem. -->

##### EXPECTED RESULTS
All the DetailName(s) should appear in Japanese
<!-- What did you expect to happen when running the steps above? -->

##### ACTUAL RESULTS
Few DetailName(s) appears in English
<!-- What actually happened? -->

##### ADDITIONAL INFORMATION
1. Screenshot showing ~/credentials 'details' screen with Japanese (dummy translation) google-chrome, highlighting DetailName(s), appearing in English:

![testcase 04_step 06_ja_1587522874704_1](https://user-images.githubusercontent.com/12151785/80009498-c6bf6d00-84e6-11ea-97d7-30496cde78d3.png)
<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->
user: sshedmake
labels: component:l10n: localization, translation, japanese, french
issue_6797: state: open
title: Authentication - AWS Cognito support
body: ##### ISSUE TYPE
 - Feature Idea
Add native AWS Cognito support to AWX

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

Together with other authentication mechanisms it would be useful if AWX could support AWS Cognito.
To get some lightweight support, we are currently having to jerry rig a solution with:
AWX authenticates with Azure AD 
Azure AD has AWS Cognito has an identity provider.

This is less than ideal as it requires us to maintain two Identity systems across two cloud providers.
It would be preferable if AWX could directly support Cognito.

user: dojones1
labels: component:authentication: For issues related to authentication
issue_6793: state: open
title: Allow multiple stage workflows where hosts can follow different paths (was: Unified workflow)
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
# Unified workflow

**TL;DR**: Possibility to concatenate multiple templates, treating them as one unit. Plus adding support for error handling on per host basis in a workflow. 

## Problem

 Todays workflow job templates (WFJT) are not usable in a large scale deployment environment with multiple teams writing their own playbooks for installing different platforms

Apart from being awesome it'd make AWX a better contender to other automation platforms **cough***vRA***cough** as engine for deploying virtual machines.

## Example
Run a multiple stage vm deployment (with a cleanup node for failed hosts) against an inventory of new hosts. If one of these hosts fails in a node the full inventory will be sent to the fail link of that node and even if the desired outcome is run the fail node on all hosts, the node will exit on a success and not mark the WFJT as failed.



- Team 1 are in charge of creating virtual machines, they create the playbooks "Clone", "Destroy" and "Add disk".
- Team 2 are in charge of server tuning and baseline installations, they create the playbooks "Server tuning", "Add interface", "Create and mount disk" contained in "New server installation". 
- Team 3 are the network guys. They create the playbooks "Get IP from IPAM" and "Delete from IPAM". 
- Team 4 are consumers of the playbooks above. Using a UWFT they create a simple vm with one root disk and two interfaces to later on add their own platform on top of it.
- Team 5 adds their application on.

````
Team 4: New server installation 
Team 1:  |       |---> Clone
Team 2:  |              |-----------------> Add interface (eth0)
Team 3:  |                                        |------------> Get IP from IPAM.
Team 2:  |-----------------> Server tuning.
Team 4:  |-----------------> Add interface (eth1).
Team 3:  |                         |------------> Get IP from IPAM.
Team 4:  |-----------------> Template: run `package` module
         |
         |---> <All above successful?>
         |       - Yes: ------------------------|
         |       - No:                          |
         |         | ----> Notify team 2 and 4. |
         |         | -----> Destoy machine.     |
         |                  |------> Fail host. |
Team 5:  |                                      | -> Install application
         |                                              |--> <OK?>
         |                                                    - No: Notify team 4 and 5, keep host.
         |---> Notify team 5.

````

In a single-host inventory this would not pose a problem since all (one) hosts should fail. But if one were to deploy a multi server app were there are more consumers such as `team 4`, one failed host would destroy all other hosts and they all would have to be rebuilt because (for instance) something as as simple as a upstream webserver being unavailable. 

## Propsal

* UWFT should override the inventory set in template **or** only work on templates set to blank inventory (and thus checked 'Prompt on launch').
* UWFT should inherit surveys from workflow/templates.
* Variables from one survey should be able to be mapped in a subsequent survey variable. 
* UFWT nodes links should have at least two (optimal three) selections: "Only failed", "Only successful" (, and "Only changed"), making it possible to do cleanups and streamlining workflows.
* New node type: Notification. Use a existing notification in AWX as a node. 
* New node type: Fail. Used when any type node has run successfully to fail the host and/or (workflow) template. Failed host can be removed from inventory. For instance: delete and cleanup dns from failed host ran ok -> fail host, do not include in following nodes.

user: planeturban
issue_6774: state: open
title: Tooltip does not update when a schedule is disabled
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When a schedule is disabled, the tooltip for the toggle still says `Schedule is active`

##### STEPS TO REPRODUCE

1. go to a job template
2. go to the schedules tab
3. create a new schedule
4. disable the schedule
5. observe the tooltip for the toggle
##### EXPECTED RESULTS

The tooltip should contain text like `Schedule is stopped`

##### ACTUAL RESULTS

![Screen Shot 2020-04-20 at 4 10 55 PM](https://user-images.githubusercontent.com/11617351/79880697-5a494e80-83be-11ea-88a7-dfec9291416d.png)

user: appuk
issue_6767: state: open
title: Improve slack workflow approval 
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
When using AWX 10.0 there is the approval process when using workflows. 

It seems that for the slack integration there is limited variables for the approval process compared to the message process (success message, error message etc.) 

Also, you are unable to add a new line for the approval process (WORKFLOW APPROVED MESSAGE, WORKFLOW DENIED MESSAGE, WORKFLOW PENDING APPROVAL MESSAGE, WORKFLOW TIMED OUT MESSAGE) making the slack messages not very customisable. 

- It would be good to be able to add new lines 
- Have more variables accessible as currently they are limited for the approval. 
- Able to approve workflows via a slack button, and to also have more information about the request inside of slack, to make the approval via a button possible so users are not approving blindly. 

user: tom0010
issue_6749: state: open
title: net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Can't selectively use the web UI

##### ENVIRONMENT
* AWX version: 10.0.0
* AWX install method: docker on linux
* Ansible version:  2.9.6
* Operating System: CentOS 7
* Web Browser: OperaGX,Chrome Latest,Firefox Latest, Microsoft Edge(web kit based)

##### STEPS TO REPRODUCE

Can't really describe how to reproduce because it happened after updating from 6.1.0 to 10.0.0

##### ADDITIONAL INFORMATION

getting net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK)
trying to open:

1. Setting
2. Running jobs
3. Just randomly browsing templates

Tried to include custom nginx config disabling proxy buffer and increasing client body, didn't help.

seems similar to https://github.com/ansible/awx/issues/5496
user: BrotherLavarius
issue_6719: state: open
title: Add Client Credentials Grant oauth2 authorization type
body: ##### ISSUE TYPE
 - Add Client Credentials Grant oauth2 authorization

##### SUMMARY
Currently, if I want to connect an application to AWX API for machine to machine connections, I need to use password grant type authentication.  It's probably possible to use authorization code or personal access tokens but they are not designed for machine to machine.  

Using Password Grant is not recommended for machine to machine for security reasons.    
Client Credentials Grant oauth2 authorization is what is recommended for machine to machine.
https://tools.ietf.org/html/rfc6749#section-1.3.3

user: sdwru
issue_6711: state: open
title: Bulk retrieve host facts
body: ##### ISSUE TYPE
 - Feature Idea

We'd like the ability to retrieve facts from multiple hosts with a single API call

##### SUMMARY
We have several thousand devices managed with AWX and would like a more performant way of retrieving host facts from AWX.

user: strawgate
issue_6708: state: open
title: 500 Error generated when attempting to delete schedules
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
This occurred when trying to delete in the `ui_next` project, but am unsure if it's doable elsewhere.
Under certain conditions, deleting multiple schedules from a job template results in a 500 error.

The schedule fails to delete, and still exists. A second attempt to delete the schedule succeeded without issue.

##### STEPS TO REPRODUCE
I have made this occur twice, but am unable to get consistent steps. Here is what I do know:
1. Two schedules were created and toggled on/off a few times.
2. Both schedules had high interval counts (like repeating once every 99999999 days)
3. Both were deleted in a bulk-delete, that is clicking the select-all button and deleting the list of schedules on the job template. The API receives two DELETE requests in succession when this happens.

##### EXPECTED RESULTS
Successful deletion.

##### ACTUAL RESULTS
 ```
IntegrityError
  at /api/v2/schedules/12/
insert or update on table "main_unifiedjobtemplate"; violates foreign key constraint 

"main_unifiedjobtempl_next_schedule_id_955ff55d_fk_main_sche"
DETAIL:  Key (next_schedule_id)=(13) is not present in table "main_schedule"
```

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: dsesami
labels: needs_refinement: Apply to items in 'Backlog' that need refinement.
issue_6680: state: open
title: Need a better way to control job event growth for large jobs
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Large jobs (both in number of managed hosts and number of tasks) can swamp the user with a lot of detail and blow up the size of the job events table. It would seem to be a good idea to have an optional flag that can be enabled on a job template that will restrict the types of events that are recorded. The default would be `all` but it could be further limited to `error` events or `none` where Only the section headers and final job summary are shown.

user: matburt
issue_6667: state: open
title: Base URL of the Tower Host mismatch in Slack notifications
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->
When I configure AWX the base url of the tower host was **www.examp.com**. After that, I created Templates and integrated Notifications with Slack to a particular Slack channel. 

Later I figured out that the Base URL of the tower host is wrong. Hence, I went to AWX Settings > System > Base URL of Tower Host and did the necessary changes to the host i.e. **www.example.com**

Now, when the slack notification appears in the slack channel, some time the Template job url will be,
https://**examp.com**/#/jobs/playbook/1
another time the url will be, 
https://**example.com**/#/jobs/playbook/1

How to fix this issue? Request your assistance in this regards


##### ENVIRONMENT
* AWX version: 9.0.1
* AWX install method: docker on linux
* Ansible version:  
* Operating System: Ubuntu
* Web Browser: Chrome

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->
Mistype Base URL of Tower Host in AWX Settings > System > Base URL Tower Host block
Then, enable Slack notifications. Found the typo error.

Later, change the url to the correct one in the AWX Settings > System.
Even after changing the base url, the slack notification gets typo url

##### EXPECTED RESULTS
I expect the Base url of Tower host is correct one in Slack notification.

##### ACTUAL RESULTS
Slack notification should have the correct base url 

##### ADDITIONAL INFORMATION
I tried removing the Slack Integration/Notification completely in AWX and created a new Slack integration, but the issue prevails.

Request your assistance in this regards. 

~Mithun
user: viewmithun
issue_6666: state: open
title: SAML integration behind reverse proxy : wrong ACS URL in SAMLrequest
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Hello,
I run an AWX behind a httpd reverse proxy. We have non ssl http between reverse proxy and awx_web and clients access are https.
I setup the built-in SAML authentication and there is a difference in assertions consummer url between admin panel and SAMLrequest generated by AWX.

##### ENVIRONMENT
* AWX version: 9.0.1.0
* AWX install method: docker on linux with ansible playbook
* Ansible version:  2.8.5
* Operating System: Red Hat 7.7
* Web Browser: Firefox 68.7ESR 

##### STEPS TO REPRODUCE
Need a reverse proxy in front of AWX. Clients use https on 443 with proxy and proxy use http on 80 with AWX.
In SAML admin panel, ACS URL is auto generated and cant be modify. This URL seems good and have this format : https://<my_app>/sso/complete/saml/.
Setup one or more identity provider, exchange metadata with service provider and identity provider. Then test (plugin samltracer maybe usefull).

##### EXPECTED RESULTS
Identity provider look into metadata in request assertion consommer url exist, do the authentication and send SAMLresponse to service provider.

##### ACTUAL RESULTS
When AWX send SAMLrequest, assertion consummer url mismatch the one setup in admin panel, use the wrong protocol (http instead of https). 
```
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
                    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
                    ID="ONELOGIN_d49724618111881c963be5d17a07d242995d7042"
                    Version="2.0"
                    ProviderName="<my_app>"
                    IssueInstant="2020-04-09T12:43:53Z"
                    Destination="https://<my_identity_proivder>/idp/profile/SAML2/Redirect/SSO"
                    ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                    AssertionConsumerServiceURL="http://<my_app>/sso/complete/saml/"
                    >
    <saml:Issuer>https://<my_app>/sp</saml:Issuer>
    <samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"
                        AllowCreate="true"
                        />
</samlp:AuthnRequest>
```

##### ADDITIONAL INFORMATION
I try to overwrite them in field "SAML SERVICE PROVIDER EXTRA CONFIGURATION DATA" with a JSON like this :
```
{
 "sp": {
  "assertionConsumerService": {
   "url": "https://<my_app>/sso/complete/saml/",
   "binding": "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
  }
 }
}
```

I try with the http version of ACS declared in identity provider metadata, SAMLrequest and authN work but i have a new error rise by AWX :
```
Authentication failed: SAML login failed: ['invalid_response'] (The response was received at http://<my_app>:8052/sso/complete/saml/ instead of http://<my_app>/sso/complete/saml/).
```

In awx_web, we found this :
```
[pid: 126|app: 0|req: 121/413] <reverse_proxy_ip_address> () {50 vars in 1748 bytes} [Thu Apr  9 13:06:10 2020] GET /sso/login/saml/?idp=<my_idp> => generated 0 bytes in 49 msecs (HTTP/1.1 302) 10 headers in 1088 bytes (1 switches on core 0)
<reverse_proxy_ip_address> - - [09/Apr/2020:13:06:10 +0000] "GET /sso/login/saml/?idp=<my_idp> HTTP/1.1" 302 0 "https://<my_app>/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0" "10.251.146.2"
func=xmlSecOpenSSLX509StoreVerify:file=x509vfy.c:line=341:obj=x509-store:subj=unknown:error=71:certificate verification failed:X509_verify_cert: subject=/C=FR/L=LLL/O=OOOO/CN=<my_app>; issuer=/C=FR/L=LLL/O=OOO/CN=<my_app>; err=18; msg=self signed certificate
func=xmlSecOpenSSLX509StoreVerify:file=x509vfy.c:line=380:obj=x509-store:subj=unknown:error=71:certificate verification failed:subject=/C=FR/L=LLL/O=OOOO/CN=<my_app>; issuer=/C=FR/L=LLL/O=OOO/CN=<my_app>; err=18; msg=self signed certificate
The response was received at http://<my_app>:8052/sso/complete/saml/ instead of http://<my_app>/sso/complete/saml/
2020-04-09 13:06:13,866 ERROR    social Authentication failed: SAML login failed: ['invalid_response'] (The response was received at http://<my_app>:8052/sso/complete/saml/ instead of http://<my_app>/sso/complete/saml/).
```
For information, self signed x509 is used for SAML, not for HTTPS.

My reverse proxy configuration is very simple :
```
        # Reverse proxy
        ProxyPreserveHost On
        ProxyPass / http://<awx_pivate_address>:80/
        ProxyPassReverse / http://<awx_pivate_address>:80/
```

I hope the information i provide is complete and clear.
Have a nice day, Gilian.
user: ggambini
labels: component:authentication: For issues related to authentication
issue_6650: state: open
title: UI RFE: Inventory Sync "Many" on Inventories List Page
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

Make inventory sync more simpler, by adding individual inventory "Sync" and "Sync All" buttons on Inventories Page.

Something like this :
![image](https://user-images.githubusercontent.com/738925/78786910-2cbdd780-79b2-11ea-9ce5-a35b3331f278.png)

For Demo-Inventory/Static inventory Sync Button(like in Example) is not applicable and can be greyed out, but for every other dynamic inventory it significantly simplifies it's usage.

user: sumkincpp
issue_6626: state: open
title: Single URL for Webhooks + Custom Webhook Secret
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
We're setting up webhooks into AWS from Github. We currently proxy webhooks into our org - we send the webhooks to a Lambda function in AWS, then "re-send" them after validation to our CI/CD tools (over a VPN) - our CI/CD tools are not internet-accessible.

We use Jenkins heavily - Jenkins allows us to have a single webhook URL for our instance, and because the webhook metadata contains the info about what Github repo is sending the request, and so does the Jenkins job, Jenkins itself can match the inbound webhook to the correct job.

It would be super nice with AWX if there was a similar concept - one webhook URL for the entire instance, and AWX figured out which job(s) to call based on the JSON data (which repo + branch triggered the webhook).

Similarly - I'd love if we could log a single webhook secret for all webhook integrations.

I do have this working and functional now with the current functionality - this would just make integrations like this much easier.

Thanks for all the work on AWX. Cheers.

user: rayterrill
issue_6587: state: open
title: awx CLI command "awx unified_jobs get" does not work as expected
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->

##### ENVIRONMENT
- Ansible Tower version 3.6.3
- AWX cli version 3.6.3

##### STEPS TO REPRODUCE

- #### # awx unified_job_templates list -f human
id name                           
== ============================== 
9  AWS-Source                     
2  Cleanup Activity Stream        
5  Cleanup Expired OAuth 2 Tokens 
4  Cleanup Expired Sessions       
1  Cleanup Job Details            
7  Demo Job Template              
6  Demo Project                   
8  Git-Project                    
10 Test-1                         
11 Test-wf-1   
- #### # awx unified_job_templates get 11

##### EXPECTED RESULTS

- The output should successfully provide details of workflow id 11.

##### ACTUAL RESULTS

- {"detail": "The requested resource could not be found."}

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: SWADESNA
issue_6557: state: open
title: awx-cli workflow_job launch cannot specify inventory
body: ##### ISSUE TYPE
- feature parity

##### SUMMARY
 - workflows now allow to prompt for inventory (and credentials) at launch time. the `workflow_job launch` construct has no option to pass an inventory or credential to the workflow being invoked using awx-cli at launch time. 

user: faraz
issue_6555: state: open
title: Make it possible to easily launch multiple jobs by middle clicking rocket icon
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Right now when you click rocket icon it moves you to newly launched job, so if you are in the list of jobs and want to run let's say 3 jobs in a list of templates you can't right click -> open in new tab

<img width="1395" alt="image" src="https://user-images.githubusercontent.com/1560121/78344871-4a97d080-759d-11ea-95c8-eac9a8d42d34.png">

There is no option open in new tab, so only way is to click the icon which closes the current view, you have to navigate back, search again, etc. very annoying

user: benapetr
issue_6540: state: open
title: Job Template Description API character limit does not seem to exist
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
You can make a job template description that is 23000 characters long. This seems a bit excessive. It would be nice to have the API enforce a character limit.

##### REPRODUCTION STEPS
1. Open a new job template form
2. Make an absurdly long description with copy/paste

Expected: A limit of like, 100-200 characters
Actual:
![giphy (5)](https://user-images.githubusercontent.com/19942822/78257809-5c5b7400-74c8-11ea-8c8a-d06a9f391148.gif)

user: dsesami
issue_6539: state: open
title: AWX is Upgrading..... Issue
body: ##### ISSUE TYPE
 - AWX is Upgrading... (from Browser)

##### SUMMARY
<!-- Briefly describe the problem. -->

AWX is Upgrading... and it is taking a very long time, for more than a day now and still not finished.

##### ENVIRONMENT
* AWX version: 10.0.0
* AWX install method: docker
* Ansible version:  2.9.3
* Operating System: CentOS7
* Web Browser: Firefox in Ubuntu 18.4

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->

When Accessing the AWX GUI — It’s stuck in AWX is Upgrading state. I’m not sure when it will be completely upgraded, It’s been a day now.

##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->

AWX GUI Login Prompt

##### ACTUAL RESULTS

Stuck in “AWX is Upgrading”

<!-- What actually happened? -->

Unable to Login to AWX GUI because it is stuck in AWX is Upgrading state

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: codesupremo
issue_6534: state: open
title: Job Details Intermittently Missing Output lines
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When checking the job output you can see that the job is sometimes missing lines

##### ENVIRONMENT
* AWX version: 10.0.0
* AWX install method: openshift
* Ansible version:  Any (2.4.3.0, 2.7.6, 2.9.0)
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

Run a job a few times and check output

##### EXPECTED RESULTS

Able to see all the lines

##### ACTUAL RESULTS

Sometimes lines don't appear;

![image](https://user-images.githubusercontent.com/35037942/78239375-8a938080-74d5-11ea-952f-5c5c0b3caab1.png)


##### ADDITIONAL INFORMATION


user: grahamn-gr
issue_6529: state: open
title: Add support for Gogs webhooks
body: ##### ISSUE TYPE
 - Feature request

##### SUMMARY
Add support for webhooks from [Gogs](https://gogs.io/).  
[Gogs webhooks](https://gogs.io/docs/features/webhook) are quite similar to github ones, except the  signature use hmac-sha256.

user: darknao
issue_6523: state: open
title: Workflow Details improvements
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
This comprises of three small style issues:
![Screenshot from 2020-04-01 10-53-42](https://user-images.githubusercontent.com/19942822/78151986-38842980-7407-11ea-9ad2-06b8bb4e0edf.png)

Follow-up to https://github.com/ansible/awx/issues/5814

1. The options list isn't very intuitive in the WF Details page. It feels like this should say something like "Concurrent Jobs Enabled" or "Webhooks Enabled", or alternatively, some sort of check mark or something to indicate the state of the option.
2. Wrapping is weird. This might be related to something simiilar to #6351 but I'm unsure. An example:
![Screenshot from 2020-04-01 10-58-41](https://user-images.githubusercontent.com/19942822/78152431-c9f39b80-7407-11ea-8ad1-95d1932c333a.png)
3. Something about the way URLs (and webhook keys) are displayed (see first screenshot) feels like it needs to be cleaned up. The old UI had a fixed-size text box with a button to copy the text. We should have something similar if possible.
user: dsesami
issue_6519: state: open
title: Add more default search filters to schedules list
body: ##### ISSUE TYPE
 - Feature-ish bug

##### SUMMARY
Follow up to #5857 
@mabashian:
> Yea there probably are other fields that a user might want to search on. Maybe enabled/disabled, searching on the various dates (created, edited, start datetime, etc). It may also be helpful to give them a quick filter to show schedules that will never run again (end datetime is < now).

@jlmitch5:
> +1 those all sound like great search keys @mabashian
> the date ones may? be blocked by #6214 currently the search does not implement the date input element (but could be made as an enhancement). that maybe should be a follow-up issue? up to you

This should apply to schedule lists for JTs, WFJTs, Projects, and the overall schedules page.
user: dsesami
issue_6518: state: open
title: Backlink when clicking a schedule should be aware of previous context
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Follow-up to https://github.com/ansible/awx/issues/5857
1. Visit the "Schedules" link from the navbar.
When you click a specific schedule, it offers to take you "Back to Schedules", but it takes you to the schedules tab for that Job Template, as opposed to the overall schedules list. 

This shouldbe a "smart" backlink that distinguishes the two.
user: dsesami
issue_6502: state: open
title: [DOC] Missing information about "inputs" and ssh_key_unlock
body: Hello,

i'm trying to user the API, but some info seems to be missing about what "inputs" is suppose to contain.

https://docs.ansible.com/ansible-tower/latest/html/towerapi/api_ref.html#/Credentials/Credentials_credentials_create
and
https://docs.ansible.com/ansible-tower/latest/html/towerapi/api_ref.html#/Organizations/Organizations_organizations_credentials_create

both say "Enter inputs using either JSON or YAML syntax. Refer to the Ansible Tower documentation for example syntax. (json, default={})"

The text should say where to find it,
https://docs.ansible.com/ansible-tower/latest/html/towerapi/api_ref.html#/Credential_Types/Credential_Types_credential_types_list
This does not really help that mush either.

Seems like you need an actual api to get the info:
http://awx-address/api/v2/credential_types/2/
has the info:
    "inputs": {
        "fields": [
            {
                "id": "username",
                "label": "Username",
                "type": "string"
            },
            {
                "id": "password",
                "label": "Password",
                "type": "string",
                "secret": true
            },
            {
                "id": "ssh_key_data",
                "label": "SCM Private Key",
                "type": "string",
                "format": "ssh_private_key",
                "secret": true,
                "multiline": true
            },
            {
                "id": "ssh_key_unlock",
                "label": "Private Key Passphrase",
                "type": "string",
                "secret": true
            }
        ],
        "dependencies": {
            "ssh_key_unlock": [
                "ssh_key_data"
            ]
        }
    },

Br Sebastian Thörn
user: SebastianThorn
issue_6501: state: open
title: Centralize verbosity string/id map
body: ##### ISSUE TYPE
 - Task

##### SUMMARY
When the api gives us back a verbosity it's an integer from 0 to 4.  In several places we manually define a map like:

```
const verbosityOptions = {
    0: i18n._(t`0 (Normal)`),
    1: i18n._(t`1 (Verbose)`),
    2: i18n._(t`2 (More Verbose)`),
    3: i18n._(t`3 (Debug)`),
    4: i18n._(t`4 (Connection Debug)`),
}
```

It's pretty likely that this map will be needed in more components to come.  Perhaps we should explore storing this map in a single place and importing it where needed.

Maybe something like: https://github.com/ansible/awx/blob/devel/awx/ui_next/src/constants.js?

We'd have to figure out the i18n portion of this though as we'll want those strings to be translated.

user: mabashian
issue_6478: state: open
title: Add support for the psrp connection plugin to the default awx venv
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
In order to embrace the Windows ecosystem even further, adding support for psrp in the default awx Virtual Environment would benefit the management of said systems.

Using psrp over WinRM offers the added feature of Just Enough Administration (think sudo), which is becoming the standard in many (Enterprise) environments, due to the possibility to harden it.

Currently all required pip packages to support WinRM connectivity are included.
In order to enable psrp one needs to copy the existing venv and add the required python modules using well known methods.

Adding the pypsrp pip packages by default would omit the need to install them manually and provide a more complete and supported method of managing (Enterprise) Windows systems.





user: bushvin
issue_6427: state: open
title: Holding down a key in a form when the OS supports repeat-key-on-hold freezes the application
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Several operating systems support (both by default and not-by-default) holding down a key to repeat the key-press. For example, holding down "a" will produce "aaaaaaaaaaaaaaa".

Doing this within the add form in AWX PF, which uses field validation + `formik`, does not render the keys that were pressed until after the key is released, which then causes CPU usage to spike for a moment before the rendering finishes.

Doing the above mechanism for 4-5 seconds will completely freeze AWX. The current guess @mabashian and I have is that validation occurs on _every_ character change in the form, and holding down the key produces a large stack of validation calls, of which the render() function is at the very back.
user: dsesami
issue_6418: state: open
title: Ability to Generate a Failed Host Summary Using Notification Attributes
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
An user is requesting the ability to generate a failed host summary using notification attributes (https://docs.ansible.com/ansible-tower/latest/html/installandreference/notification_parameters_supported.html). The failed host summary would be sent via email.

Ideally, they want a structure similar to this:

~~~
Failed Hosts:
<HOSTNAME> failed <TASK_NAME> in <PLAYBOOK_NAME>
~~~

There is a `job_metadata` attribute, which includes all target hosts and their status.

EXAMPLE:
~~~
{
  "test1.example.com": {
    "failed": true,
    "changed": 0,
    "dark": 1,
    "failures": 0,
    "ok": 0,
    "processed": 1,
    "skipped": 0,
    "rescued": 0,
    "ignored": 0
  },
  "test2.example.com": {
    "failed": true,
    "changed": 0,
    "dark": 1,
    "failures": 0,
    "ok": 0,
    "processed": 1,
    "skipped": 0,
    "rescued": 0,
    "ignored": 0
  }
}
~~~

However, it appears you can't query deeper into the JSON body with filters and grab the necessary information. At this point, all metadata about the job is displayed.

Is it possible to implement a failed host summary with the preceding structure? If not, is it possible to generate a new notification attribute with just failed host information?

Maybe something like this:

EXAMPLE BODY:
~~~
Failed Hosts:

{{ job_failed_hosts }}
~~~

JSON BODY:
~~~
{
  "failed_hosts": {
    "test1.example.com": {
      "failed_task_name": "Gathering Info",
      "playbook": "test.yml"
    },
    "test2.example.com": {
      "failed_task_name": "Gathering Data",
      "playbook": "test.yml"
    }
  }
}
~~~

EXAMPLE RENDERED EMAIL:

~~~
Failed Hosts:

{
  "failed_hosts": {
    "test1.example.com": {
      "failed_task_name": "Gathering Info",
      "playbook": "test.yml"
    },
    "test2.example.com": {
      "failed_task_name": "Gathering Data",
      "playbook": "test.yml"
    }
  }
}
~~~

Any guidance is much appreciated!
user: imareporter
issue_6412: state: open
title: Global toggle for schedules, notifications, etc.
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
As an admin of several well-loved towers and awx instances used by people to do work in the past, I've often wished for a simple way to turn off all notifications and/or scheduled jobs globally.

Example scenarios:

- A job or workflow has started unexpectedly failing and I want to debug the playbooks in production. To avoid spamming the team's slack channels, emails, etc. with repeat failure notifications while I shamelessly hack my way to a solution, I need to sign in and manually disable every single notification related to any job template in my workflows before iterating.  I also need to _remember_ to turn everything back on once I'm done.

- I'm running a backup-restore (or export-import) procedure to preview some new changes or set up a development, test, or staging environment with rich data copied over from a live tower or awx instance. Unless I immediately sign in and delete all schedules, the timed jobs on the copied instance will attempt to run at their scheduled times, likely creating unexpected and potentially disastrous results like duplicate jobs from both the source and destination instances executing against the same hosts at the same time.


**Proposed idea**

1. Add a global toggle switch to the system settings (sysadmins only) for disabling all notifications and scheduled jobs. 

2. Also add an option to installers and restore playbooks that disable these things as part of the post-install or post-restore process.












user: jakemcdermott
issue_6406: state: open
title: Request API endpoint to query single instance of /ping 
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
currently when we query /api/v2/ping/ we get the health-check for all the instances in the cluster we need is way to query he API and only display the information of that instance.
e.g
~~~
curl -s 'https://<myserver1>/api/v2/ping/?active_node_only=true'

{
      "version": "3.6.0",
      "capacity": 19,
      "heartbeat": "2020-03-24T21:13:15.271164Z",
      "uuid": "xxx-xxxx-xxx-xxxx-xxxx",
      "node": "tower1"
    },
~~~

user: saali2016
issue_6402: state: open
title: Add the ability to select multiple days with monthly repeat frequency in the JT scheduler
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
"We need to schedule a template to run automatically five days every month. We need to know how to do this without having to create 5 different schedules, one for each day. "

user: mrmibrown
issue_6400: state: open
title: RFE:  With SAML auth, do not create users with random username suffix/hash
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
If a user has authenticated through another external mechanism such as LDAP, a SAML IdP initiated login for the same user results in a new user created with a random suffix hash.

For example if LDAP auth is configured and a user `bob.test` is authenticated via LDAP that user account is created.  If SAML auth is also configured where the username `bob.test`, as mapped in the SAML config to the assertion, matches the LDAP username a new user is created for the SAML login in the form `bob.test87687678687687` with a hash appended.  

This can lead to confusion in the UI and create management issues as these users will need to be cleaned up. 

I would propose either having SAML logins fail if the username is already present as an LDAP user or to replace/re-flag the existing user as social.

user: mpetrive-rh
labels: component:authentication: For issues related to authentication
issue_6303: state: open
title: Schedule a Job to run at specific time and date from survery
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Schedule a Job to run at specific time and date from survey

"When executing a Ansible Tower Job the survey prompt pop up.  I want to define a specific date and time to run this job once without creating a scheduler.
A team is only allowed to execute the job, but cannot/should not be able to create schedulers and at the same time they must be able to execute the job at a specific time."
user: mrmibrown
issue_6255: state: open
title: Routable webhooks that only run on the changed resource
body:  - Feature Idea

SUMMARY

Add a new check box to templates that allows the template to run with if the underlying playbook get's updated. The big advantage of this approach would be we don't need to have a Jenkins job to do this. 

Furthermore if we have 200 Playbooks that we want to trigger with CI/CD we need to create mapping lists or group change sets on Jenkins to be able to identify which playbook to trigger.  Or is there a better way to trigger playbooks that have being change my a commit? 

As AWX already have the git credentials it could pull the repository and trigger the playbooks that were changed. 

user: jomach
issue_6224: state: open
title: Add LDAP inventory source
body: ##### ISSUE TYPE
- Add LDAP inventory source with capability of fine grained control about objects and attributes
- Follow RFC2307bis and implement nested groups

- Eg. use device or computer objects for hosts and groupOfNames for groups and group memberships

##### SUMMARY
Leveraging LDAP/Active Directory for device/computer discovery/inventory source

user: sspreitzer
issue_6223: state: open
title: Add Kerberos Keytab Credential Type
body: ##### ISSUE TYPE
 - There should be a Kerberos Keytab Credential Type that should allow supplying a Kerberos Keytab file
- Authentication to Machines and SCMs could be able via that Keytab (OS independent)
- Access protocols able to handle Kerberos, should be able to utilize a Keytab. Eg. SSH, HTTP, etc..

##### SUMMARY
As of today Kerberos authentication is not managed by Ansible or AWX. There is some control through the winrm module, however Kerberos can be used for authentication in general and is agnostic.

I wish to be able to supply a Keytab for authentication. To access Linux+Windows systems via Keytab and SCMs via Keytab (eg. git+ssh or http://...)

user: sspreitzer
issue_6213: state: open
title: Error running a job: DistutilsFileError: cannot copy tree /var/lib/awx/projects/XXX_Project
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY

Error Details
Traceback (most recent call last): File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 1275, in run self.pre_run_hook(self.instance, private_data_dir) File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 1879, in pre_run_hook job.project.scm_type, job_revision File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 2271, in make_local_copy copy_tree(project_path, destination_folder) File "/usr/lib64/python3.6/distutils/dir_util.py", line 124, in copy_tree "cannot copy tree '%s': not a directory" % src) distutils.errors.DistutilsFileError: cannot copy tree '/var/lib/awx/projects/XXX_Project': not a directory 


##### ENVIRONMENT
* AWX version: 9.2.0
* AWX install method: kubernetes
* Kubernetes Cluster - Ansible version:  2.9.5
* Kubernetes Cluster - Operating System: Fedora 31
user: mvrk69
issue_6199: state: open
title: Job run fails with traceback if project update fails
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY

If a Job fails to update its project (or project dependencies) then the error details will show a traceback as error message.

![grafik](https://user-images.githubusercontent.com/51952982/76071090-fb5a8200-5f95-11ea-8b97-5569540e9446.png)

##### ENVIRONMENT
* AWX version: 9.2.0
* AWX install method: docker
* Ansible version:  2.9.4
* Operating System: Debian 9
* Web Browser: Firefox 69

##### STEPS TO REPRODUCE

* Create a Git repo with a roles/requirements.yml
* The requirements.yml should contain a repository which is not accessible (not existent or missing permissions)
* Create a sample playbook (must not do anything, but syntax must be correct)
* Create a Project in AWX and select the Git repo from above as source
* Create a Job Template in AWX and select the AWX project as project. Select the playbook, an inventory
* Run the Job Template


##### EXPECTED RESULTS

The job should fail with a meaningful error message. (e.g. "The project update has failed. See job id 12345 for details.")

##### ACTUAL RESULTS

The job fails with a stack trace.

```
Traceback (most recent call last):\n  File \"/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py\", line 1275, in run\n    self.pre_run_hook(self.instance, private_data_dir)\n  File \"/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py\", line 1858, in pre_run_hook\n    sync_task.run(local_project_sync.id)\n  File \"/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py\", line 698, in _wrapped\n    return f(self, *args, **kwargs)\n  File \"/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py\", line 1440, in run\n    raise AwxTaskError.TaskError(self.instance, rc)\nException: project_update 29219 (failed) encountered an error (rc=2), please see task stdout for details.\n
```

##### ADDITIONAL INFORMATION

api/v2/jobs/29218/:
```
{
    "id": 29218,
    "type": "job",
    "url": "/api/v2/jobs/29218/",
    "related": {
        "created_by": "/api/v2/users/2/",
        "labels": "/api/v2/jobs/29218/labels/",
        "inventory": "/api/v2/inventories/223/",
        "project": "/api/v2/projects/560/",
        "extra_credentials": "/api/v2/jobs/29218/extra_credentials/",
        "credentials": "/api/v2/jobs/29218/credentials/",
        "unified_job_template": "/api/v2/job_templates/566/",
        "stdout": "/api/v2/jobs/29218/stdout/",
        "job_events": "/api/v2/jobs/29218/job_events/",
        "job_host_summaries": "/api/v2/jobs/29218/job_host_summaries/",
        "activity_stream": "/api/v2/jobs/29218/activity_stream/",
        "notifications": "/api/v2/jobs/29218/notifications/",
        "create_schedule": "/api/v2/jobs/29218/create_schedule/",
        "job_template": "/api/v2/job_templates/566/",
        "cancel": "/api/v2/jobs/29218/cancel/",
        "project_update": "/api/v2/project_updates/29219/",
        "relaunch": "/api/v2/jobs/29218/relaunch/"
    },
    "summary_fields": {
        "inventory": {
            "id": 223,
            "name": "nventory",
            "description": "",
            "has_active_failures": true,
            "total_hosts": 12,
            "hosts_with_active_failures": 2,
            "total_groups": 9,
            "has_inventory_sources": true,
            "total_inventory_sources": 1,
            "inventory_sources_with_failures": 0,
            "organization_id": 32,
            "kind": ""
        },
        "project": {
            "id": 560,
            "name": "website",
            "description": "",
            "status": "successful",
            "scm_type": "git"
        },
        "project_update": {
            "id": 29219,
            "name": "website",
            "description": "",
            "status": "failed",
            "failed": true
        },
        "job_template": {
            "id": 566,
            "name": "Playbook: test.yml",
            "description": ""
        },
        "unified_job_template": {
            "id": 566,
            "name": "Playbook: test.yml",
            "description": "",
            "unified_job_type": "job"
        },
        "instance_group": {
            "id": 1,
            "name": "tower",
            "is_containerized": false
        },
        "created_by": {
            "id": 2,
            "username": "foobar",
            "first_name": "foo",
            "last_name": "bar"
        },
        "user_capabilities": {
            "delete": true,
            "start": true
        },
        "labels": {
            "count": 0,
            "results": []
        },
        "extra_credentials": [],
        "credentials": [
            {
                "id": 86,
                "name": "root",
                "description": "host access after bootstrapping",
                "kind": "ssh",
                "cloud": false
            }
        ]
    },
    "created": "2020-03-06T08:58:10.932797Z",
    "modified": "2020-03-06T08:58:11.215703Z",
    "name": "Playbook: test.yml",
    "description": "",
    "job_type": "run",
    "inventory": 223,
    "project": 560,
    "playbook": "test.yml",
    "scm_branch": "",
    "forks": 0,
    "limit": "",
    "verbosity": 0,
    "extra_vars": "{}",
    "job_tags": "",
    "force_handlers": false,
    "skip_tags": "",
    "start_at_task": "",
    "timeout": 0,
    "use_fact_cache": false,
    "unified_job_template": 566,
    "launch_type": "relaunch",
    "status": "error",
    "failed": true,
    "started": "2020-03-06T08:58:11.324897Z",
    "finished": "2020-03-06T08:58:16.725877Z",
    "canceled_on": null,
    "elapsed": 0.0,
    "job_args": "",
    "job_cwd": "",
    "job_env": {},
    "job_explanation": "Previous Task Failed: {\"job_type\": \"project_update\", \"job_name\": \"website\", \"job_id\": \"29219\"}",
    "execution_node": "awx",
    "controller_node": "",
    "result_traceback": "Traceback (most recent call last):\n  File \"/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py\", line 1275, in run\n    self.pre_run_hook(self.instance, private_data_dir)\n  File \"/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py\", line 1858, in pre_run_hook\n    sync_task.run(local_project_sync.id)\n  File \"/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py\", line 698, in _wrapped\n    return f(self, *args, **kwargs)\n  File \"/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py\", line 1440, in run\n    raise AwxTaskError.TaskError(self.instance, rc)\nException: project_update 29219 (failed) encountered an error (rc=2), please see task stdout for details.\n",
    "event_processing_finished": true,
    "job_template": 566,
    "passwords_needed_to_start": [],
    "allow_simultaneous": false,
    "artifacts": {},
    "scm_revision": "",
    "instance_group": 1,
    "diff_mode": false,
    "job_slice_number": 0,
    "job_slice_count": 1,
    "webhook_service": "",
    "webhook_credential": null,
    "webhook_guid": "",
    "host_status_counts": {},
    "playbook_counts": {
        "play_count": 0,
        "task_count": 0
    },
    "custom_virtualenv": null
}
```

api/v2/project_updates/29219/:
```
{
    "id": 29219,
    "type": "project_update",
    "url": "/api/v2/project_updates/29219/",
    "related": {
        "credential": "/api/v2/credentials/122/",
        "unified_job_template": "/api/v2/projects/560/",
        "stdout": "/api/v2/project_updates/29219/stdout/",
        "project": "/api/v2/projects/560/",
        "cancel": "/api/v2/project_updates/29219/cancel/",
        "scm_inventory_updates": "/api/v2/project_updates/29219/scm_inventory_updates/",
        "notifications": "/api/v2/project_updates/29219/notifications/",
        "events": "/api/v2/project_updates/29219/events/"
    },
    "summary_fields": {
        "project": {
            "id": 560,
            "name": "website",
            "description": "",
            "status": "successful",
            "scm_type": "git"
        },
        "credential": {
            "id": 122,
            "name": "website deploy key (ro)",
            "description": "",
            "kind": "scm",
            "cloud": false,
            "kubernetes": false,
            "credential_type_id": 2
        },
        "unified_job_template": {
            "id": 560,
            "name": "website",
            "description": "",
            "unified_job_type": "project_update"
        },
        "instance_group": {
            "id": 1,
            "name": "tower",
            "is_containerized": false
        },
        "user_capabilities": {
            "delete": true,
            "start": true
        }
    },
    "created": "2020-03-06T08:58:11.456097Z",
    "modified": "2020-03-06T08:58:11.456111Z",
    "name": "website",
    "description": "",
    "local_path": "_560__ansible",
    "scm_type": "git",
    "scm_url": "...website.git",
    "scm_branch": "",
    "scm_refspec": "",
    "scm_clean": true,
    "scm_delete_on_update": true,
    "credential": 122,
    "timeout": 0,
    "scm_revision": "e138ee5b70aece5c25d5a277e5528044fe8b68cc",
    "unified_job_template": 560,
    "launch_type": "sync",
    "status": "failed",
    "failed": true,
    "started": "2020-03-06T08:58:11.455444Z",
    "finished": "2020-03-06T08:58:16.690922Z",
    "canceled_on": null,
    "elapsed": 5.235,
    "job_args": "[\"ansible-playbook\", \"-t\", \"install_roles\", \"-i\", \"/tmp/awx_29219_jlk1b4l9/inventory/hosts\", \"-e\", \"@/tmp/awx_29219_jlk1b4l9/env/extravars\", \"project_update.yml\"]",
    "job_cwd": "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/playbooks",
    "job_env": {
        "LC_ALL": "en_US.UTF-8",
        "LANG": "en_US.UTF-8",
        "HOSTNAME": "awx-task-a8n",
        "PWD": "/home/awx",
        "HOME": "/var/lib/awx",
        "SHLVL": "2",
        "LANGUAGE": "en_US.UTF-8",
        "PATH": "/var/lib/awx/venv/ansible/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        "_": "/usr/local/bin/supervisord",
        "SUPERVISOR_ENABLED": "1",
        "SUPERVISOR_SERVER_URL": "unix:///tmp/supervisor.sock",
        "SUPERVISOR_PROCESS_NAME": "dispatcher",
        "SUPERVISOR_GROUP_NAME": "tower-processes",
        "LC_CTYPE": "en_US.UTF-8",
        "DJANGO_SETTINGS_MODULE": "awx.settings.production",
        "DJANGO_LIVE_TEST_SERVER_ADDRESS": "localhost:9013-9199",
        "TZ": "UTC",
        "ANSIBLE_FORCE_COLOR": "True",
        "ANSIBLE_HOST_KEY_CHECKING": "False",
        "ANSIBLE_INVENTORY_UNPARSED_FAILED": "True",
        "ANSIBLE_PARAMIKO_RECORD_HOST_KEYS": "False",
        "ANSIBLE_VENV_PATH": "/var/lib/awx/venv/ansible",
        "AWX_PRIVATE_DATA_DIR": "/tmp/awx_29219_jlk1b4l9",
        "VIRTUAL_ENV": "/var/lib/awx/venv/ansible",
        "PYTHONPATH": "/var/lib/awx/venv/ansible/lib/python3.6/site-packages:",
        "ANSIBLE_RETRY_FILES_ENABLED": "False",
        "ANSIBLE_ASK_PASS": "False",
        "ANSIBLE_BECOME_ASK_PASS": "False",
        "DISPLAY": "",
        "TMP": "/tmp",
        "PROJECT_UPDATE_ID": "29219",
        "ANSIBLE_CALLBACK_PLUGINS": "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/plugins/callback",
        "ANSIBLE_GALAXY_SERVER_GALAXY_URL": "https://galaxy.ansible.com",
        "ANSIBLE_GALAXY_SERVER_LIST": "galaxy",
        "ANSIBLE_STDOUT_CALLBACK": "awx_display",
        "AWX_ISOLATED_DATA_DIR": "/tmp/awx_29219_jlk1b4l9/artifacts/29219",
        "RUNNER_OMIT_EVENTS": "False",
        "RUNNER_ONLY_FAILED_EVENTS": "False"
    },
    "job_explanation": "",
    "execution_node": "awx",
    "result_traceback": "",
    "event_processing_finished": true,
    "project": 560,
    "job_type": "run",
    "job_tags": "install_roles",
    "host_status_counts": {
        "failures": 1
    },
    "playbook_counts": {
        "play_count": 2,
        "task_count": 2
    }
}
```
api/v2/project_updates/29219/stdout/?format=txt:
```
PLAY [Update source tree if necessary] *****************************************

PLAY [Install content with ansible-galaxy command if necessary] ****************

TASK [detect requirements.yml] *************************************************
ok: [localhost]

TASK [fetch galaxy roles from requirements.yml] ********************************
fatal: [localhost]: FAILED! => {"changed": false, "cmd": ["ansible-galaxy", "install", "-r", "requirements.yml", "-p", "/tmp/awx_29218_3nyoftwk/requirements_roles"], "delta": "0:00:00.634267", "end": "2020-03-06 08:58:16.252183", "msg": "non-zero return code", "rc": 1, "start": "2020-03-06 08:58:15.617916", "stderr": "[WARNING]: - myrole was NOT installed successfully: -\\ncommand /usr/bin/git clone git@example.com:myrole.git myrole failed in\\ndirectory /var/lib/awx/.ansible/tmp/ansible-local-16920s4fktw85/tmp_q2x71sw\\n(rc=128)\\nERROR! - you can use --ignore-errors to skip failed roles and finish processing the list.", "stderr_lines": ["[WARNING]: - myrole was NOT installed successfully: -", "command /usr/bin/git clone git@example.com:myrole.git myrole failed in", "directory /var/lib/awx/.ansible/tmp/ansible-local-16920s4fktw85/tmp_q2x71sw", "(rc=128)", "ERROR! - you can use --ignore-errors to skip failed roles and finish processing the list."], "stdout": "", "stdout_lines": []}

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0 
```
api/v2/projects/560/:
```
{
    "id": 560,
    "type": "project",
    "url": "/api/v2/projects/560/",
    [...]
    "name": "website",
    "description": "",
    "local_path": "_560__ansible",
    "scm_type": "git",
    "scm_url": "git@example.com:website.git",
    "scm_branch": "",
    "scm_refspec": "",
    "scm_clean": true,
    "scm_delete_on_update": true,
    "credential": 109,
    "timeout": 0,
    "scm_revision": "cb76d3c3009f1240bf8ca607bcbea7e019ca6fcf",
    "last_job_run": "2020-03-06T09:09:15.029262Z",
    "last_job_failed": false,
    "next_job_run": null,
    "status": "successful",
    "organization": 32,
    "scm_update_on_launch": false,
    "scm_update_cache_timeout": 0,
    "allow_override": true,
    "custom_virtualenv": "",
    "last_update_failed": false,
    "last_updated": "2020-03-06T09:09:15.029262Z"
}
```
user: anxstj
issue_6173: state: open
title: Repeat Frequency Field UX in Schedule Detail
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<img width="1361" alt="Screen Shot 2020-03-04 at 5 27 15 PM" src="https://user-images.githubusercontent.com/9889020/75928995-9d1a8b80-5e3d-11ea-9081-9f477bb66380.png">

For the sake of simplicity, rather than attempting to display all of these fields (we'd have to pull all of this out of rrule):

<img width="1485" alt="Screen Shot 2020-03-04 at 5 30 00 PM" src="https://user-images.githubusercontent.com/9889020/75929104-d652fb80-5e3d-11ea-901b-9bad4d5f6cc5.png">

I decided to use https://www.npmjs.com/package/rrule#rruleprototypetotextgettext-language to generate a human readable string that would generally capture what all those fields mean.

The one exception to this is if a job is only scheduled to run one time (we show `None (Run Once)` rather than `getText()`'s `run daily for 1 time`).

This issue is meant to track a couple of different things:

1) Do we want to change this UX in some way?
2) If we don't want to change this UX then we need to:
  - Translate this string (which should be possible from reading the docs though I haven't seen a concrete example of it).
  - Update the date format to match whatever the rest of the dates look like in a user's browser.  This _is_ available (see this issue: https://github.com/jakubroztocil/rrule/issues/312 and this pr: https://github.com/jakubroztocil/rrule/pull/313) but the api seems a bit cumbersome and I'm not 100% sure how this would work.

user: mabashian
issue_6140: state: open
title: Ansible facts from AWX fact cache are flushed itself
body: ##### ISSUE TYPE
 - Ansible facts from AWX fact cache are flushed itself for many servers in inventory.


##### SUMMARY
We are using "ENABLE FACT CACHE" to cache facts for all servers in AWX inventory.
However we noticed twice that facts were no longer present for many servers but available for only few servers and our scheduled job starts failing.


##### ENVIRONMENT
* AWX version: 9.1.0
* AWX install method: docker on linux
* Ansible version:  2.8.5
* Operating System: 8.0.1905 (Core)
* Web Browser: N/A



##### STEPS TO REPRODUCE
We have recently upgraded AWX from 6.1.0 to 9.1.0 and postgres DB from 9.6 to 10.
It has occurred twice where facts are gone missing for many servers where as cache time out is set to 0.  We gather facts from all servers once in every 24 hours and facts are cached with option "ENABLE FACT CACHE". Also we store custom facts once ansible facts are captured.

Under Settings --> Job --> PER-HOST ANSIBLE FACT CACHE TIMEOUT is set to 0

Servers on which ansible facts are missing, we can only see "discovered_interpreter_python = /usr/bin/python" in fact cache for that host and rest ansible facts were missing.


##### EXPECTED RESULTS

Ansible facts from Fact Cache should never be flushed by itself.



##### ACTUAL RESULTS

Facts for many servers missing from fact cache.




##### ADDITIONAL INFORMATION

bash-4.4# ansible --version
ansible 2.8.5
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/awx/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, Nov 21 2019, 19:31:34) [GCC 8.3.1 20190507 (Red Hat 8.3.1-4)]

bash-4.4# cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)
bash-4.4#


[root@server ~]# docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                 NAMES
d37406e2d894        ansible/awx_task:9.1.0       "/tini -- /bin/sh -c…"   7 weeks ago         Up 12 days          8052/tcp                                              awx_task
ce7b6a2059e9        ansible/awx_web:9.1.0        "/tini -- /bin/sh -c…"   7 weeks ago         Up 12 days          0.0.0.0:8443->8052/tcp                                awx_web
b03a2c903396        postgres:10                  "docker-entrypoint.s…"   7 weeks ago         Up 7 weeks          5432/tcp                                              awx_postgres
e6abe2607a89        proxy                        "nginx -g 'daemon of…"   2 months ago        Up 7 weeks          0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp              r_proxy
d476262f278d        memcached:alpine             "docker-entrypoint.s…"   4 months ago        Up 7 weeks          11211/tcp                                             awx_memcached
d3e9bb379b81        ansible/awx_rabbitmq:3.7.4   "docker-entrypoint.s…"   4 months ago        Up 7 weeks          4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp   awx_rabbitmq
user: ghost
issue_6136: state: open
title: AWX 9.2 - VMware dynamic inventory error on refresh
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When running the vCenter dynamic inventory job to refresh the inventory objects within AWX and error occurs.

##### ENVIRONMENT
* AWX version: 9.2.0
* AWX install method: docker on linux
* Ansible version:  2.9.3
* Operating System: RHEL 7.7
* Web Browser: Chrome, Firefox, IE

##### STEPS TO REPRODUCE

When running Dynamic inventory job to update the vCenter inventory form our vCenter we are getting job failure.

##### EXPECTED RESULTS

We expect the job to finish without issues.

##### ACTUAL RESULTS

The following error were observed:
```
    1.971 INFO     Updating inventory 3: vCenter-DI
    2.386 DEBUG    Using base command: python /usr/bin/ansible-inventory -i /var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/plugins/inventory/vmware_inventory.py --playbook-dir /var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/plugins/inventory -vvvvv
    2.386 INFO     Reading Ansible inventory source: /var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/plugins/inventory/vmware_inventory.py
    2.388 INFO     Using VIRTUAL_ENV: /var/lib/awx/venv/ansible
    2.388 INFO     Using PATH: /var/lib/awx/venv/ansible/bin:/var/lib/awx/venv/awx/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    2.388 INFO     Using PYTHONPATH: /var/lib/awx/venv/ansible/lib/python3.6/site-packages:
 1580.088 ERROR    ansible-inventory 2.9.3
 1580.088 ERROR      config file = /etc/ansible/ansible.cfg
 1580.088 ERROR      configured module search path = ['/var/lib/awx/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
 1580.088 ERROR      ansible python module location = /usr/lib/python3.6/site-packages/ansible
 1580.088 ERROR      executable location = /usr/bin/ansible-inventory
 1580.088 ERROR      python version = 3.6.8 (default, Nov 21 2019, 19:31:34) [GCC 8.3.1 20190507 (Red Hat 8.3.1-4)]
 1580.088 ERROR    Using /etc/ansible/ansible.cfg as config file
 1580.088 ERROR    setting up inventory plugins
 1580.088 ERROR    Parsed /var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/plugins/inventory/vmware_inventory.py inventory source with script plugin
 1580.088 ERROR    [WARNING]: No setting was provided for required configuration plugin_type:
 1580.088 ERROR    cache plugin: redis setting: _uri
 1580.088 ERROR    
 1580.788 DEBUG    Finished loading from source: /var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/plugins/inventory/vmware_inventory.py
 1580.788 INFO     Processing JSON output...
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "main_host_name_inventory_id_45aecd68_uniq"
DETAIL:  Key (name, inventory_id)=(fcebsdbdev01_clone, 3) already exists.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django_pglocks/__init__.py", line 74, in advisory_lock
    yield acquired
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/utils/pglock.py", line 14, in advisory_lock
    yield internal_lock
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 898, in load_into_database
    self._create_update_hosts()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 772, in _create_update_hosts
    self._update_db_host_from_mem_host(db_host, mem_host)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 708, in _update_db_host_from_mem_host
    db_host.save(update_fields=update_fields)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/models/inventory.py", line 597, in save
    super(Host, self).save(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/models/base.py", line 319, in save
    super(PrimordialModel, self).save(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/models/base.py", line 164, in save
    super(CreatedModifiedModel, self).save(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/base.py", line 741, in save
    force_update=force_update, update_fields=update_fields)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/base.py", line 779, in save_base
    force_update, using, update_fields,
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/base.py", line 851, in _save_table
    forced_update)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/base.py", line 900, in _do_update
    return filtered._update(values) > 0
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/query.py", line 760, in _update
    return query.get_compiler(self.db).execute_sql(CURSOR)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1462, in execute_sql
    cursor = super().execute_sql(result_type)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1133, in execute_sql
    cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
django.db.utils.IntegrityError: duplicate key value violates unique constraint "main_host_name_inventory_id_45aecd68_uniq"
DETAIL:  Key (name, inventory_id)=(srv01_clone, 3) already exists.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/bin/awx-manage", line 8, in <module>
    sys.exit(manage())
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 152, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 1157, in handle
    raise exc
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 1092, in handle
    self.load_into_database()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 900, in load_into_database
    self._create_update_group_hosts()
  File "/usr/lib64/python3.6/contextlib.py", line 99, in __exit__
    self.gen.throw(type, value, traceback)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/utils/pglock.py", line 14, in advisory_lock
    yield internal_lock
  File "/usr/lib64/python3.6/contextlib.py", line 99, in __exit__
    self.gen.throw(type, value, traceback)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django_pglocks/__init__.py", line 80, in advisory_lock
    cursor.execute(command)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 79, in _execute
    self.db.validate_no_broken_transaction()
  File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/base/base.py", line 438, in validate_no_broken_transaction
    "An error occurred in the current transaction. You can't "
django.db.transaction.TransactionManagementError: An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block.
```

##### ADDITIONAL INFORMATION

No additional details were provided by the job output.

user: linuxcube
issue_6118: state: open
title: Feature: Add Gitea OAuth2
body: ##### ISSUE TYPE
 - Feature Idea
##### COMPONENT NAME
- UI
- API

##### SUMMARY
I think that can be a good idea add support for Gitea OAuth2 (exactly like GitHub or Google)
user: danielepesciallo
issue_6105: state: open
title: RFE: Need for survey type supporting YAML
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

We are an international company using Tower for network automation (RH contract).
We are in the process of pushing all our plays to templates in tower, we want to extensively use the survey feature to let users input data for specific variables. So far so good.

More precisely, we want to use survey to have list of dictionnaries as input variable for specific playbooks. However, the only type of survey that can allow that, the textarea, is not processed as YAML. This forces our developers to pretask all those manual playbooks with:
````
set_fact:  user_input_var="{{ user_input_var | from_yaml }}"
````

The reason to do so, if I understand correctly, is because the variable is set as:
````
user_input_var: |-
````
The hyphen here creates the trouble, as we only need:
````
user_input_var: |
````

If I use the GUI extra var in the template and set it as "user_input_var: |" the data is processed as YAML and all is fine, a data structure such as the one below works:
````
user_input_var: |
  - { key1: val1,
      key2: val2
    }
  - { key1: val3,
      key2: val4
    }
````
=> we would like to suggest the addition of another type of survey:
textarea (YAML)

Where we can input a multiple line YAML variables (a list of dict) the same we do via group_vars or host_vars.
Basically, it is the same as the existing textarea except that it's processed by "| from_yaml" so that we can keep the consistency between how ansible works in CLI and via tower (if somehow tower is not reachable when we need it - disaster recovery or else - we want to make sure CLI and GUI works with the same data structure).
user: r1k0
issue_6102: state: open
title: [Feedback] User Form Name fields should prevent invalid entry (character limit)
body: ##### ISSUE TYPE
 - Bughancement

##### SUMMARY
Limiting users first name to 30 chars and last name to 150 chars (seems like possibly intended behavior but maybe bad behavior?)

##### ENVIRONMENT
* AWX version: 9.next

##### STEPS TO REPRODUCE
1. Go to User Add/Edit Form
2. Add more than 30 characters to an entry field
3. Save
Note error text

##### EXPECTED RESULTS
Not able to enter incorrect character limit into the field itself. The First Name field should not let the user enter for than 30 characters.
The Last Name field should not the user end 151 characters

##### ACTUAL RESULTS
User is able to enter invalid form data which fails in a basic way

##### ADDITIONAL INFORMATION
<img width="721" alt="Screen Shot 2020-02-26 at 5 39 18 PM" src="https://user-images.githubusercontent.com/12446869/75394785-efe4c800-58be-11ea-8e24-c840ba35647b.png">


user: unlikelyzero
issue_6094: state: open
title: [Feedback] Need additional visual feedback when a form field fails validation
body: ##### ISSUE TYPE
 - Enhancement

##### SUMMARY
Need additional visual feedback when a form field fails validation. At the moment, only un-animated, non-bold text is set inline with the problematic form fields. 

##### ENVIRONMENT
* AWX version: 9.next

##### STEPS TO REPRODUCE
1. Enter an incorrect field entry on a JT and click save

##### EXPECTED RESULTS
It would be nice if the missing elements provided additional visual feedback on save. Maybe a highlighted form element or animation of some sort. Even just bolder text might help.

##### ADDITIONAL INFORMATION
<img width="621" alt="Screen Shot 2020-02-26 at 4 10 47 PM" src="https://user-images.githubusercontent.com/12446869/75388209-95456f00-58b2-11ea-8b97-cdf069e2951d.png">


user: unlikelyzero
issue_6082: state: open
title: [Feedback] Disable Save button until form validation errors are fixed
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Disable Save button until form validation errors are fixed. If a user doesn't fill out a form correctly, they get visual feedback that they need correct fields with inline error text. *This becomes important on "long" forms like JTs where in-line error text may appear off screen.*

##### ENVIRONMENT
* AWX version: 9.next

##### STEPS TO REPRODUCE
1. Fill out a form with a missing required field
2. Save

##### EXPECTED RESULTS
1. Fill out a form with a missing required field
2. Save
3. Visual feedback that they have not completed the changes necessary to fix the errors (like a disabled save button)
4. Once all form fields are correctly entered, save button appears

##### ACTUAL RESULTS
1. Fill out a form with a missing required field
2. Save
3. Visual feedback that the user has corrected some or all of a form.

##### ADDITIONAL INFORMATION

<img width="610" alt="Screen Shot 2020-02-26 at 10 42 52 AM" src="https://user-images.githubusercontent.com/12446869/75361111-cb6bfa00-5884-11ea-8423-c13a5ae36b23.png">


user: unlikelyzero
issue_6056: state: open
title: Implement awx hosts associate/disassociate group functionality
body: ISSUE TYPE
 - Feature Idea

SUMMARY
'tower-cli host' can associate/disassociate a group to/from a host
We should figure out a way to do the same with awx, the new official command-line client for AWX and Red Hat Ansible Tower
user: DidierTHEILLAC
issue_6047: state: open
title: Awx not parsing properly a path set in vars
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug Report

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI


##### SUMMARY
<!-- Briefly describe the problem. -->
Awx seems to not parse properly a path set in vars
##### ENVIRONMENT
* AWX version: 9.2.0
* AWX install method: kubernetes
* Ansible version:  X.Y.Z
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

<!-- For bugs, please show exactly how to reproduce the problem. For new
features, show how the feature would be used.  -->
I have a role to add ssh user keys, basically the role is like this:
- name: Add User SSH Keys
  authorized_key:
    user: "{{ item.name }}"
    key: "{{ lookup('file', '{{ item.key_directory }}{{ item.name }}.pub') }}"
    state: present
  with_items:
  - "{{ users.accounts }}"
  when: item.state == "present"

the var file is like this:
users:
  home_directory_mask: 27
  groups:
…
…
…
  accounts:
…
…
    - {name: test-automation, uid: 1011, groups: [‘automation’, 'docker'], shell: /bin/bash, key_directory: '{{inventory_dir}}/../shared/public_keys/', state: present }

when i execute a playbook with that role i'm getting this error:

{
    "msg": "An unhandled exception occurred while running the lookup plugin 'file'. Error was a <class 'ansible.errors.AnsibleError'>, original message: could not locate file in lookup: /var/lib/awx/projects/_6__alan/environments/test/../shared/public_keys/test-automation.pub",
    "_ansible_no_log": false
}
 but the file is definitely there and the path is correct; i've double checked on the celery container;

i have an extra variable set on the template for the inventory_dir var:
inventory_dir: /var/lib/awx/projects/_6__alan/environments/test


Any tips?



##### EXPECTED RESULTS

<!-- For bug reports, what did you expect to happen when running the steps
above? -->

##### ACTUAL RESULTS

<!-- For bug reports, what actually happened? -->

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: alancivita
issue_6043: state: open
title: Bleed and Queue Jobs
body: ##### ISSUE TYPE
 - Provide an option to queue incoming jobs for maintenance, or bleed them off, or kill them off and run them again once maintenance is done.

##### SUMMARY
Provide some kind of maintenance mode option wherein if we need to rebuild the pod for any reason it doesn't just fail all of the jobs running on the pod. This could be as simple as adding a feature in that takes everything and kills it, but puts it into some kind of not launched job templates area, that way we can have another pod pick up the work and execute it. As playbooks should be idempotent this should just allow for individuals to re-execute the playbook without any problems. Or if we had some kind of option where we stick the pod in maintenance mode, and it just runs all the existing jobs until completion, but then removes itself from available pods once all the jobs are done running, an the pod during that time accepts no new requests for jobs.

user: sonofalder
issue_6042: state: open
title: Allow Concurrent Jobs With a Delay and Throttle
body: ##### ISSUE TYPE
 - In addition to allowing concurrent jobs to execute, provide an option to have a delay time between actual execution. Also offer an option to throttle a number of concurrent jobs. Only allow 5 jobs to be spawned from this template at any given time.

##### SUMMARY
The idea behind this would be to allow a job to execute or run at the same time, however it would force that if 10 requests to the same job came in at the same time, there would be a delay of n seconds before allowing the next job to run, that way none of them are being initiated at the same exact time, however they can execute concurrently.

user: sonofalder
issue_6041: state: open
title: Enable/Disable Templates
body: ##### ISSUE TYPE
 - Add an option on the Template to have it enabled/disabled, this would also control anything that calls into the template i.e. schedules.

##### SUMMARY
Right now if someone calls into a template externally, there is no way to stop someone from running it. Ideally it would not only be cool to offer an option to either disable or enable a template, but would be cool to have an option to have the template queued for release once the template is no longer disabled. The model might look something like this

State - enable | disabled - Reject call | disabled - Build queue

user: sonofalder
issue_6020: state: open
title: House workflow visualizer and output in PF Topology view
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
http://patternfly-react.surge.sh/documentation/react/components/topology

Not sure how this would fit but created an issue to track it.

Marking this as low priority for now since we already have a functioning workflow implementation.

user: mabashian
issue_6004: state: open
title: AWX, proxy and environment variables
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Basically same as described on https://github.com/ansible/awx/issues/1532


##### ENVIRONMENT
* AWX version: 9.1.1 
* AWX install method: openshift
* Ansible version:  whatever version ships with 9.1.1 
* Operating System: Centos
* Web Browser: FF

##### STEPS TO REPRODUCE

I have a project that uses a `requirement.yml` to fetch roles. This is failing as it doesnt use the specified proxy.

In ` SETTINGS / JOBS / Extra Environment Variables ` I have the following:

```
{
 "HOME": "/var/lib/awx",
 "HTTP_PROXY": "http://proxy.domain:8080/",
 "HTTPS_PROXY": "http://proxy.domain:8080/",
 "NO_PROXY": "127.0.0.1,localhost,10.0.0.0/8,.domain"
}
```

##### EXPECTED RESULTS

Expect AWX to use the proxy, even when fetching roles.

##### ACTUAL RESULTS
Job fails with the below error:

```
Traceback (most recent call last): File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 1243, in run self.pre_run_hook(self.instance, private_data_dir) File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 1822, in pre_run_hook sync_task.run(local_project_sync.id) File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 683, in _wrapped return f(self, *args, **kwargs) File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 1408, in run raise AwxTaskError.TaskError(self.instance, rc) Exception: project_update 1537 (failed) encountered an error (rc=2), please see task stdout for details. 
```
##### ADDITIONAL

It seems AWX is using the proxy when fetching projects from git (eg, github). But when fetching a role it is not.


user: magick93
issue_6000: state: open
title: Browsable API view very slow, seems to be the parser that formats the json that is crawling
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->
When viewing the browsable api via https://mytower.com/api/v2/jobs/, it is incredibly slow and my browser asks me if I want to keep waiting.

Viewing the data raw does not show this slow response, e.g. https://mytower.com/api/v2/jobs/?format=json

Waited over 2 min and still did not finish loading jobs (less than 100 jobs on tower)

![slow_browsable_api](https://user-images.githubusercontent.com/29239279/74873296-f0181d00-532c-11ea-811f-52967ee0a0e9.gif)
![browsable_api_timeout](https://user-images.githubusercontent.com/29239279/74873289-edb5c300-532c-11ea-8bf2-9d98c9ba1288.gif)
![Screenshot from 2020-02-19 15-30-56](https://user-images.githubusercontent.com/29239279/74873308-f4dcd100-532c-11ea-9488-22800f2b83f1.png)

@ryanpetrello mentioned he thinks may just be some ancient javascript lib that is being used that is kneeling under pressure of parsing the json and formatting it/doing highlighting

user: kdelee
issue_5995: state: open
title: Workflow node/link hover action mouse path
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<img width="472" alt="Screen Shot 2020-02-19 at 9 22 37 AM" src="https://user-images.githubusercontent.com/9889020/74843299-b679ee80-52f9-11ea-9448-c64cf8b888f6.png">

In order to interact with the action menu of the node you have to keep your mouse inside the above bounds.

A mouse path like this won't work:

<img width="472" alt="Screen Shot 2020-02-19 at 9 22 37 AM" src="https://user-images.githubusercontent.com/9889020/74843449-ea551400-52f9-11ea-9798-f5d855500245.png">

A couple of ideas on how to fix this:

1) We could add a debounce on hiding the action buttons to give the user enough time to get their mouse over to the action buttons.  This has some drawbacks though (like the fact that the action buttons would be hidden on a delay when you mouse out of a node normally).
2) We could try to add some triangular elements to the dom structure above and below the node to help fill in the gaps.  Mousing over those triangular elements would keep the action menu open.  These elements would need to be dynamically sized based on the height of the action button holder.

user: mabashian
issue_5994: state: open
title: Zoom/pan workflow as nodes are added/removed
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
When the workflow visualizer is initially loaded we zoom/pan the workflow to try to fit as much of it as possible on the screen.  In cases where you're first starting to build a workflow this means the workflow will be zoomed all the way in.  As new nodes are created, the user is force to zoom out/pan over to continue building.

To solve this problem we could dynamically attempt to zoom/pan the workflow.  Maybe we try to put the newly created node in the middle of the svg?

This will probably require a lot of thought to cover all the corner cases that could arise.  We also may want the ability to turn this functionality off.  Maybe the visualizer behaves like this _until_ the user manually intervenes and zooms/pans themselves?

user: mabashian
issue_5993: state: open
title: Icon-only node types in workflow visualizer
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
This is something that came up in discussions with @marshmalien when talking about translating the node type letters:

<img width="188" alt="Screen Shot 2020-02-19 at 9 13 47 AM" src="https://user-images.githubusercontent.com/9889020/74842296-28e9cf00-52f8-11ea-8f9f-7acd5cd205f3.png">

If we mark these strings (`JT`, `W`, `I`, etc) for translation I'm not sure that they would make contextual sense.

It would be ideal if we could come up for icons for each of these different node types.  If that were the case we would no longer need to worry about translations.

Alternatively we could keep the icons the same and not mark them for translation.

user: mabashian
labels: component:l10n: localization, translation, japanese, french
issue_5984: state: open
title: Handle Azure_RM Inventory and Credentials differently
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

Currently in order to use an Azure-RM inventory you have to create an Azure-RM Credential giving it a subscription.  That credential can potentially see many subscriptions though. Then you create an inventory source which refers to that credential.  

That inventory source appears to be limited to only looking at the credential's known subscription.  It would be nice if that inventory source could be given a subscription id to limit it to just the given subscription, or no subscription id and would then iterate through all subscriptions known to that ID.  

I currently have access to 154 subscriptions, this means creating 154 copies of essentially the same credential with different subscription ids, then creating 154 inventory sources, each one linked to one of those credentials.  At the very least linking the inventory sources to an individual subscription would mean I could use one credential for 154 inventory sources.  Alternatively allowing the inventory source to examine all subscriptions would allow me to create one source, one credential, and do any filtering at the inventory level.

user: AdamMorris23
issue_5977: state: open
title: Details Views Chip/ChipGroup should use PF Labels
body: ##### ISSUE TYPE

- Bug Report

##### SUMMARY
Currently in many details views we show chip and/or chip group to show things like credentials, organizations, and and other items that should link out to other resources.  We need to switch out those chips for PF Labels that link out to the resource they represent.  Currently patternfly does not have the concept for Label Groups, but we might be able to use the inline List.  The developer who picks up this issue will have to audit the views to see whether they need to be updated.  

Click the link below....all the blue Labels should be linkable labels.
https://tower-mockups.testing.ansible.com/patternfly/templates/templates-detail/
user: AlexSCorey
issue_5967: state: open
title: Dropdown selector boxes are highlighted when selected which causes issues when two boxes are directly adjacent
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Dropdown selector boxes are highlighted when selected which causes issues when two boxes are directly adjacent.

<img width="420" alt="Screen Shot 2020-02-17 at 4 17 43 PM" src="https://user-images.githubusercontent.com/12446869/74687050-4eb09000-51a1-11ea-8f4e-1307d54217ac.png">

We should change this by adjusting the distance bewtween the filter selection boxes or adjust the selection highlighting
user: unlikelyzero
labels: qe:visual: visual defect
issue_5952: state: open
title: Hoverover or selection of Node links in WFViz obscures nearby node links
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Hoverover or selection of Node links in WFViz obscures nearby node links

##### ENVIRONMENT
* AWX version: 9.next
* Operating System: macOS Catalina
* Web Browser: Chrome 80

##### STEPS TO REPRODUCE
1. Create a WFJT with convergences
2. On the "fan out node", select the nearest node link.
Note that the node link selection obscures the other node links

##### EXPECTED RESULTS
1. All node links to be visible and not obscured by background mask

##### ACTUAL RESULTS
1. Background mask is a bit off

##### ADDITIONAL INFORMATION
<img width="410" alt="Screen Shot 2020-02-16 at 2 09 08 PM" src="https://user-images.githubusercontent.com/12446869/74611035-6a933380-50c6-11ea-8a35-03c635001f34.png">


user: unlikelyzero
labels: qe:visual: visual defect
issue_5951: state: open
title: Default WFViz zoom does not leave enough space for hoverover actions
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
WFViz allows for hoverover actions on a node (edit, details, delete, etc). On the default zoom, the hoverover actions are obscured and rendered out of the browser window

##### ENVIRONMENT
* AWX version: 9.next
* Operating System: macOS Catalina
* Web Browser: Chrome 80

##### STEPS TO REPRODUCE
1. Open Workflow Viz on a WFJT with 2 Nodes
2. Open hoverover action list.
Note that the hoverover action list is obscured

##### EXPECTED RESULTS
1. Hoverover action list is fully visible on screen

##### ACTUAL RESULTS
1. Hoverover action list is partially visible on screen

##### ADDITIONAL INFORMATION
<img width="822" alt="Screen Shot 2020-02-16 at 1 08 02 PM" src="https://user-images.githubusercontent.com/12446869/74610088-07050800-50be-11ea-9374-31fe1fef4ca2.png">


user: unlikelyzero
issue_5942: state: open
title: sourced script inventory failure, no retry or useful info
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug Report


##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI

##### SUMMARY
<!-- Briefly describe the problem. -->

Update inventory fails for sourced script, without retry and without an useful message.

##### ENVIRONMENT
* AWX version: 9.1.1
* AWX install method: docker on linux
* Ansible version:  2.8.5

##### STEPS TO REPRODUCE

<!-- For bugs, please show exactly how to reproduce the problem. For new
features, show how the feature would be used.  -->

- Add a job template with an inventory source that uses a script sourced from a project with
the box "Update on launch" ticked
- Run the job template

##### EXPECTED RESULTS

<!-- For bug reports, what did you expect to happen when running the steps
above? -->

The inventory should be updated, if not the update should retry for
some times and display an useful message about the cause of failure.

##### ACTUAL RESULTS

<!-- For bug reports, what actually happened? -->

- The update inventory job sometimes (1 every 5) fails.
- There is no retry or ignore option, and the job template will fail to start.
- There is no useful indication about the reason of the failure.
- The stdout mentioned is empty or not shown in the web interface, even with the debug verbosity (that is the maximum level of verbosity).
- The useless error message is the following:

```
Traceback (most recent call last): File
"/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py",
line 1243, in run self.pre_run_hook(self.instance, private_data_dir)
File
"/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py",
line 2532, in pre_run_hook sync_task.run(local_project_sync.id) File
"/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py",
line 683, in _wrapped return f(self, *args, **kwargs) File
"/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py",
line 1408, in run raise AwxTaskError.TaskError(self.instance, rc)
Exception: project_update 508 (failed) encountered an error (rc=254),
please see task stdout for details.
```

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

The job template and inventory are custom for a project, but I can
create a dummy project to reproduce this bug.  Please give me some
pointer on the best practices for integrating a test case.
user: dancn
issue_5940: state: open
title: RFE: store config for awx cli
body: ##### ISSUE TYPE

 - Feature Idea (or maybe a Bug Report?)

##### SUMMARY

The previous version of `tower-cli` stored credentials and other configuration in `~/.tower-cli.cfg` by default. From my understanding, the replacement tool `awx` does not have anything like it (e.g. you need to export TOKEN and ingest this TOKEN to all of the subsequent commands).

##### ENVIRONMENT

* Tower CLI version: `3.6.2`

```text
rpm -qi ansible-tower-cli
Name        : ansible-tower-cli
Version     : 3.6.2
Release     : 1.el8at
Architecture: x86_64
Install Date: Fri 14 Feb 2020 10:40:10 AM AEST
Group       : Development/Libraries
Size        : 611620
License     : Commercial, see https://www.redhat.com/en/about/red-hat-end-user-license-agreements and https://www.redhat.com/en/about/licenses
Signature   : RSA/SHA256, Sat 14 Dec 2019 05:06:36 AM AEST, Key ID 199e2f91fd431d51
Source RPM  : ansible-tower-3.6.2-1.el8at.src.rpm
Build Date  : Sat 14 Dec 2019 03:46:22 AM AEST
Build Host  : x86-vm-01.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor      : Red Hat, Inc.
URL         : http://ansible.github.com
Summary     : Package for the Ansible Tower CLI
Description :
Package for the Ansible Tower CLI
```

* Tower install method: [Official Tower-CLI installation method](https://docs.ansible.com/ansible-tower/latest/html/towercli/usage.html#installation)
* Ansible version: `2.9.1`
* Operating System: RHEL8

##### STEPS TO REPRODUCE

1. `awx login -k --conf.host https://<IP_ADDRESS> --conf.username <ADMIN> --conf.password <PASSWORD> -v`
2. `awx config`

##### EXPECTED RESULTS

Previous command `1.` stores the credentials and `verify_ssl false` to the local config file somewhere. Command `2.` will then display this previously stored information.

##### ACTUAL RESULTS

"Empty" config is returned:

```json
{
     "base_url": "https://127.0.0.1:443",
     "token": "",
     "use_sessions": false,
     "credentials": {
          "default": {
               "username": "admin",
               "password": "password"
          }
     }
}
```

##### ADDITIONAL INFORMATION

Customer is asking why this functionality was removed.
user: luckylittle
issue_5925: state: open
title: Add support for Git with Kerberos authentication for SCM project.
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
We have a use case from a customer where they want to use Git with Kerberos authentication. We tested the following workaround which is working fine.

* Manually create a  ticket for the Kerberos user from the awx user on all the Tower nodes.
* Add a project on Tower with the SCM URL.without attaching any cred.
* Disable job isolation and run the project sync.
* The job will use the Kerberos ticket that was manually created for project sync.

The issue here is that we need to disable isolation, ticket needs to be created manually on all the nodes. Also we cannot specify a user from the SCM project for which a ticket will be created on the fly. 
user: IshwarKanse
issue_5911: state: open
title: Allow multiple instances of the same custom credential
body: ##### ISSUE TYPE
 - Allow multiple instances of the same custom credential to be used in the same playbook
##### SUMMARY
Currently, if we create a generic custom credential named "REST API Credential" that injects `api_username` and `api_password` and `api_base_url` into the extravars and/or environment, we can only use that to deal with _one_ API, because there can be only one extravar of `api_username`, etc.

For example, I cannot use such a custom credential type to create credentials for ServiceOne and ServiceTwo _and_ work with both in the same playbook. So the only way to manage this is to create a custom credential for ServiceOne and another for ServiceTwo. But then, what if I want to create two ServiceOne credentials for two accounts? Back to the original problem. 

We should be able to create multiple credentials of the same custom type, and use each of them in the playbooks. Obviously there must be a way to distinguish between them then. I'm sure there is more than one way to model this, but what I wanted to do was this:

**Input Configuration**
```yaml
fields:
  - type: string
    id: api_username
    label: Username
  - secret: true
    type: string
    id: api_password
    label: Password
  - type: string
    id: api_baseurl
    label: Base URL
  - type: string
    id: prefix
    label: Credential Prefix
required:
  - api_username
  - api_password
  - api_baseurl
```
**Injector Configuration**
```yaml
extra_vars:
  "{{ [prefix, 'api_username'] | join('_') }}": "{{ api_username }}"
  "{{ [prefix, 'api_password'] | join('_') }}": "{{ api_password }}"
  "{{ [prefix, 'api_baseurl'] | join('_') }}": "{{ api_baseurl }}"
```
With a prefix of "one", I'd expect to be able to use `one_api_username`, etc... in my playbooks. But of course I can't do that, because injector keys are not evaluated as Jinja2. Or is there a better way to achieve my goals with Credentials?
user: philipsd6
issue_5891: state: open
title: Refactor Credential Chip to display Credential Type name instead of Credential Kind
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Credential chip should display the credential type name instead of the credential kind before the colon
##### ENVIRONMENT
* AWX version: 9.1.1
* AWX install method:  docker for mac
* Ansible version:  2.10
* Operating System: Mojave
* Web Browser:Chrome

##### STEPS TO REPRODUCE

Go to a JT or WFJT with credentials.

##### EXPECTED RESULTS

Credential Chips to display Credential Type name 
##### ACTUAL RESULTS

It displays the credential type kind before the colon.
##### ADDITIONAL INFORMATION

user: AlexSCorey
issue_5855: state: open
title: Support Vault credential at Ad Hoc command
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
In the inventory there are different usernames and passwords stored encrypted for the connections. In the job template a vault credential is provided to decrypt at the job execution. This is not possible for Ad Hoc command. You can only use credential from the kind `Machine`. 

It would be good to use other credentials types e.g. `Vault` for the Ad Hoc commands, if no key authentication is possible. Command for CLI would be `ansible -m command all -a 'ls /root' --ask-vault-pass`
user: CWollinger
issue_5849: state: open
title: $HOME not set
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Installed AWX with the installer on k8s. SCM Project Update ends up with an error:

{
    "unreachable": true,
    "msg": "Authentication or permission failure. In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\". Failed command was: ( umask 77 && mkdir -p \"` echo /.ansible/tmp/ansible-tmp-1581112133.6957202-167543623179566 `\" && echo ansible-tmp-1581112133.6957202-167543623179566=\"` echo /.ansible/tmp/ansible-tmp-1581112133.6957202-167543623179566 `\" ), exited with result 1",
    "changed": false
}
##### ENVIRONMENT
* AWX version: 9.1.1
* AWX install method: kubernetes
* Ansible version:  3.6.8
* Operating System: opensuse tumbleweed
* Web Browser: firefox

##### STEPS TO REPRODUCE

- git clone this repo
- run the installer
- create git credentials
- create project with scm type git
- run: "get latest git revision"

 kubernetes]$ kubectl -n linux-dev exec awx-0 -it -- /bin/bash
bash-4.4$ env |grep HOME
HOME=/home/awx

##### EXPECTED RESULTS

git repository sync success

##### ACTUAL RESULTS

permission denied error when trying to create tmp dir. seems $HOME is now known on /var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/playbooks/project_update.yml 

    "msg": "Authentication or permission failure. In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\". Failed command was: ( umask 77 && mkdir -p \"` echo /.ansible/tmp/ansible-tmp-1581112133.6957202-167543623179566 `\" && echo ansible-tmp-1581112133.6957202-167543623179566=\"` echo /.ansible/tmp/ansible-tmp-1581112133.6957202-167543623179566 `\" ), exited with result 1",

##### ADDITIONAL INFORMATION

JOB STDOUT:

Identity added: /home/awx/.ansible/tmp/awx_30_whjke4mu/artifacts/30/ssh_key_data (/home/awx/.ansible/tmp/awx_30_whjke4mu/artifacts/30/ssh_key_data)
ansible-playbook 2.8.5
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/awx/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 3.6.8 (default, Oct  7 2019, 17:58:22) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]
Using /etc/ansible/ansible.cfg as config file
host_list declined parsing /home/awx/.ansible/tmp/awx_30_whjke4mu/inventory/hosts as it did not pass it's verify_file() method
script declined parsing /home/awx/.ansible/tmp/awx_30_whjke4mu/inventory/hosts as it did not pass it's verify_file() method
auto declined parsing /home/awx/.ansible/tmp/awx_30_whjke4mu/inventory/hosts as it did not pass it's verify_file() method
Parsed /home/awx/.ansible/tmp/awx_30_whjke4mu/inventory/hosts inventory source with ini plugin
PLAYBOOK: project_update.yml ***************************************************
2 plays in project_update.yml
PLAY [Update source tree if necessary] *****************************************
META: ran handlers
TASK [update project using git] ************************************************
task path: /var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/playbooks/project_update.yml:33
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: 1000
<127.0.0.1> EXEC /bin/sh -c 'echo ~1000 && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /.ansible/tmp/ansible-tmp-1581112133.6957202-167543623179566 `" && echo ansible-tmp-1581112133.6957202-167543623179566="` echo /.ansible/tmp/ansible-tmp-1581112133.6957202-167543623179566 `" ) && sleep 0'
fatal: [localhost]: UNREACHABLE! => {
    "changed": false,
    "msg": "Authentication or permission failure. In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\". Failed command was: ( umask 77 && mkdir -p \"` echo /.ansible/tmp/ansible-tmp-1581112133.6957202-167543623179566 `\" && echo ansible-tmp-1581112133.6957202-167543623179566=\"` echo /.ansible/tmp/ansible-tmp-1581112133.6957202-167543623179566 `\" ), exited with result 1",
    "unreachable": true
}
PLAY RECAP *********************************************************************
localhost                  : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0   


user: generalpax
issue_5839: state: open
title: Add support for Webhooks from Gitea
body: ##### ISSUE TYPE
Add webhook support for [Gitea](https://gitea.io/en-us/)

##### SUMMARY
In addition to webhooks for Gitlab and Github, support the Gitea [Webhook](https://docs.gitea.io/en-us/webhooks/) format

user: ptoal
issue_5830: state: open
title: using awx (client program 9.1.1) unable to associate label to job_template
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
with the older tower-cli I could issue a command like ;

` tower-cli job_template associate_label --job-template "$name" --label ${label}`

With awx there is no `associate_label` action.  there is a simple `associate` but that only allows associating various notifications (start, success and failure) and credentials.  

So unsure if there is a method using awx cli to associate a label to a job_template.

##### ENVIRONMENT
* AWX version: 9.1.1
* AWX install method: docker on linux 
* Ansible version:  2.8.5
* Operating System: RedHat 7
* Web Browser: Chrome

##### STEPS TO REPRODUCE
The old syntax would have been 

`awx --conf.host https://hostname --conf.password xxx --conf.username yyy job_template associate_label --job-template "a_template_name" --label a_label`

The only thing that appears close would be to use the associate action, or something like

`awx --conf.host https://hostname --conf.password xxx --conf.username yyy job_template associate  "a_template_name" --label a_label`

##### EXPECTED RESULTS

You would expect to successfully associate the label to the job_template

##### ACTUAL RESULTS

You will get a syntax error.  

In the first case there is no associate_label action  for job_template.

In the second case the associate action doesn't have an additional argument to support labels (only notifications and credentials)

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: paulbhart
issue_5818: state: open
title: Writing out a rendered j2 template to my roles directory fails; works when executing Playbook via CLI
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When executing a j2 template rendering Playbook role from AWX, the Playbook runs without error, but the rendered file is never written out to the directory. If you run the Playbook from the CLI, it runs without error and will write out the file correctly.

##### ENVIRONMENT
* AWX version: 9.1.1
* AWX install method: Docker Compose
* Ansible version:  AWX v2.8.5; CLI environment 2.9.4; have downgraded the CLI to 2.8.5 and no change in behavior.
* Operating System: Ubuntu 18.04.4 LTS 
* Web Browser: Chrome

##### STEPS TO REPRODUCE

Simply execute the Playbook role from CLI - successful. Execute within AWX - successful but no rendered template file is written.

##### EXPECTED RESULTS

Expect the template to render and show Change=1 as the completed status. Running the job once more should result in Change=0 due to idempotency.

##### ACTUAL RESULTS

No matter how many times the Playbook is ran in AWX, it still shows Change=1 (idempotency is indicating that the rendered file and existing file don't match).

##### ADDITIONAL INFORMATION

Job output:


ansible-playbook 2.8.5
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/var/lib/awx/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 3.6.8 (default, Oct  7 2019, 17:58:22) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]
Using /etc/ansible/ansible.cfg as config file
host_list declined parsing /tmp/awx_84_bala34n2/tmp0xedd_js as it did not pass it's verify_file() method
Parsed /tmp/awx_84_bala34n2/tmp0xedd_js inventory source with script plugin

PLAYBOOK: render-config-template.yaml ******************************************
1 plays in render-config-template.yaml
skipping vars_file 'roles/ansible-role_leaf-spine-demo/vars/{{ inventory_hostname }}.yaml' due to an undefined variable
skipping vars_file 'roles/ansible-role_leaf-spine-demo/vars/{{ inventory_hostname }}.yaml' due to an undefined variable
skipping vars_file 'roles/ansible-role_leaf-spine-demo/vars/{{ inventory_hostname }}.yaml' due to an undefined variable

PLAY [Render device configuration from Jinja2 template] ************************
META: ran handlers
Read vars_file 'roles/ansible-role_leaf-spine-demo/vars/{{ inventory_hostname }}.yaml'

TASK [include_role : ansible-role_leaf-spine-demo] *****************************
task path: /tmp/awx_84_bala34n2/project/render-config-template.yaml:21
Read vars_file 'roles/ansible-role_leaf-spine-demo/vars/{{ inventory_hostname }}.yaml'
skipping vars_file 'roles/ansible-role_leaf-spine-demo/vars/{{ inventory_hostname }}.yaml' due to an undefined variable
skipping vars_file 'roles/ansible-role_leaf-spine-demo/vars/{{ inventory_hostname }}.yaml' due to an undefined variable
Read vars_file 'roles/ansible-role_leaf-spine-demo/vars/{{ inventory_hostname }}.yaml'
Read vars_file 'roles/ansible-role_leaf-spine-demo/vars/{{ inventory_hostname }}.yaml'

TASK [ansible-role_leaf-spine-demo : Render L3 configuration from Jinja2 template] ***
task path: /tmp/awx_84_bala34n2/project/roles/ansible-role_leaf-spine-demo/tasks/main.yaml:2
skipping: [as1-lsdemo] => {
    "changed": false,
    "skip_reason": "Conditional result was False"
}
Read vars_file 'roles/ansible-role_leaf-spine-demo/vars/{{ inventory_hostname }}.yaml'
Read vars_file 'roles/ansible-role_leaf-spine-demo/vars/{{ inventory_hostname }}.yaml'

TASK [ansible-role_leaf-spine-demo : Render L2 configuration from Jinja2 template] ***
task path: /tmp/awx_84_bala34n2/project/roles/ansible-role_leaf-spine-demo/tasks/main.yaml:9
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: root
<localhost> EXEC /bin/sh -c 'echo ~root && sleep 0'
<localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-tmp-1580760189.131988-38741190511676 `" && echo ansible-tmp-1580760189.131988-38741190511676="` echo /root/.ansible/tmp/ansible-tmp-1580760189.131988-38741190511676 `" ) && sleep 0'
Using module file /usr/lib/python3.6/site-packages/ansible/modules/files/stat.py
<localhost> PUT /var/lib/awx/.ansible/tmp/ansible-local-31196m1gfm4/tmpgkos3sf8 TO /root/.ansible/tmp/ansible-tmp-1580760189.131988-38741190511676/AnsiballZ_stat.py
<localhost> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-tmp-1580760189.131988-38741190511676/ /root/.ansible/tmp/ansible-tmp-1580760189.131988-38741190511676/AnsiballZ_stat.py && sleep 0'
<localhost> EXEC /bin/sh -c '/usr/libexec/platform-python /root/.ansible/tmp/ansible-tmp-1580760189.131988-38741190511676/AnsiballZ_stat.py && sleep 0'
<localhost> PUT /var/lib/awx/.ansible/tmp/ansible-local-31196m1gfm4/tmpmrdlc_xr/as1-lsdemo.j2 TO /root/.ansible/tmp/ansible-tmp-1580760189.131988-38741190511676/source
<localhost> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-tmp-1580760189.131988-38741190511676/ /root/.ansible/tmp/ansible-tmp-1580760189.131988-38741190511676/source && sleep 0'
Using module file /usr/lib/python3.6/site-packages/ansible/modules/files/copy.py
<localhost> PUT /var/lib/awx/.ansible/tmp/ansible-local-31196m1gfm4/tmpdki9jp7_ TO /root/.ansible/tmp/ansible-tmp-1580760189.131988-38741190511676/AnsiballZ_copy.py
<localhost> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-tmp-1580760189.131988-38741190511676/ /root/.ansible/tmp/ansible-tmp-1580760189.131988-38741190511676/AnsiballZ_copy.py && sleep 0'
<localhost> EXEC /bin/sh -c '/usr/libexec/platform-python /root/.ansible/tmp/ansible-tmp-1580760189.131988-38741190511676/AnsiballZ_copy.py && sleep 0'
<localhost> EXEC /bin/sh -c 'rm -f -r /root/.ansible/tmp/ansible-tmp-1580760189.131988-38741190511676/ > /dev/null 2>&1 && sleep 0'
changed: [as1-lsdemo -> localhost] => {
    "changed": true,
    "checksum": "99c96d22daace5401612c85791e2c0d066bee316",
    "dest": "roles/ansible-role_leaf-spine-demo/compiled/as1-lsdemo.confg",
    "diff": [],
    "gid": 0,
    "group": "root",
    "invocation": {
        "module_args": {
            "_original_basename": "as1-lsdemo.j2",
            "attributes": null,
            "backup": false,
            "checksum": "99c96d22daace5401612c85791e2c0d066bee316",
            "content": null,
            "delimiter": null,
            "dest": "roles/ansible-role_leaf-spine-demo/compiled/as1-lsdemo.confg",
            "directory_mode": null,
            "follow": false,
            "force": true,
            "group": null,
            "local_follow": null,
            "mode": null,
            "owner": null,
            "regexp": null,
            "remote_src": null,
            "selevel": null,
            "serole": null,
            "setype": null,
            "seuser": null,
            "src": "/root/.ansible/tmp/ansible-tmp-1580760189.131988-38741190511676/source",
            "unsafe_writes": null,
            "validate": null
        }
    },
    "md5sum": "6ebf870727c6671d2f2daa4902353960",
    "mode": "0644",
    "owner": "root",
    "size": 1283,
    "src": "/root/.ansible/tmp/ansible-tmp-1580760189.131988-38741190511676/source",
    "state": "file",
    "uid": 0
}
META: ran handlers
META: ran handlers

PLAY RECAP *********************************************************************
as1-lsdemo                 : ok=1    changed=1    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   


user: nk9b
issue_5816: state: open
title: Automation Analytics: Obfuscate IP Addresses and Host Names
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Use a consistent mapping between customer local IP addresses and imaginary addresses when uploading data to Automation Analytics.     Do the same for customer local host names.   This can prevent leaking host name data by never uploading it to begin with.     This will require either storing that mapping in the database or use a deterministic heuristic to have consistent mapping between uploads.

See:  https://access.redhat.com/articles/2047593
user: benthomasson
issue_5807: state: open
title: Extra vars per user
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Hello,
is it possible to add the setup on a set of extra vars in the user panel? When the user runs a template, the user's extra vars are merged with the job's extra vars. I would like it in order to use personal token for the interaction with our internal systems.

Thank you,

G.S.
user: Gianlu
issue_5792: state: open
title: Mark template as favorite
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
It would be great if individual users could mark some items (such as templates) as favorite, so they wouldn't need to repetitively look for them in template list. Probably applicable for other items than templates as well (inventories, projects)

user: benapetr
issue_5791: state: open
title: Unnecessary locking while installing roles
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Having a template linked with a project NOT marked for update on launch.

If this project have the file ``roles/requirements.yml`` it [is forced](https://github.com/ansible/awx/blob/42c45367a0f70156f9272df57e2aacd36e5935c3/awx/main/tasks.py#L1795) to run the update playbook.

In f64d0dde5 were introduced some tags to only do the roles install, avoiding having to update the project (because it is marked not to).

At this point, only the [block](https://github.com/ansible/awx/blob/42c45367a0f70156f9272df57e2aacd36e5935c3/awx/playbooks/project_update.yml#L132) to run ``ansible-galaxy`` will be executed, reading the file ``PROJECT_PATH/roles/requirements.yml`` and installing the roles in ``JOB_PRIVATE_DATA_DIR/requirements_roles``.

The update job is scheduled.

The [run() method](https://github.com/ansible/awx/blob/42c45367a0f70156f9272df57e2aacd36e5935c3/awx/main/tasks.py#L1251) calls the [pre_run_hook() of the RunProjectUpdate task](https://github.com/ansible/awx/blob/42c45367a0f70156f9272df57e2aacd36e5935c3/awx/main/tasks.py#L2204) which tries to adquire a lock for the project folder:

```python
class RunProjectUpdate(BaseTask):
    ...
    def pre_run_hook(self, instance, private_data_dir):
        ...
        self.acquire_lock(instance)
```

This lock will be a file like ``/var/lib/awx/projects/_1__project_foo205016.lock``, avoiding changes in the project dir while some project update job is running.

But this case is not going to modify the project path, only download roles in the tempdir, so I think the lock is unnecessary.

The [file pointed](https://github.com/ansible/awx/blob/42c45367a0f70156f9272df57e2aacd36e5935c3/awx/playbooks/project_update.yml#L141) by ``ansible-galaxy`` should be the copy of ``requirements.yml`` in the tempdir, avoding race conditions when the project is updated.

I am not sure if the copy of the project folder to the tempdir is done after or before the execution of the ``project_update.yml`` playbook.

##### ENVIRONMENT
* AWX version: devel

##### STEPS TO REPRODUCE

Create project with a roles/requirements.yml file.

Mark the project as not be updated on launch.

Create a template linked to that project.

Run several jobs of that template.

##### EXPECTED RESULTS

Jobs should run concurrently.

##### ACTUAL RESULTS

Jobs are run sequentially because they are stuck trying to get the lock to run the ``project_update.yml`` template.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: adrianlzt
issue_5789: state: open
title: suppressing long job output like `selective` stdout callback
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Web UI can fold/expand icon though, API cannot retrieve a partial job output.  Unused job output needs to be suppressed in advance.

user: sugitk
issue_5774: state: open
title: [RFE] Do not expose VMware credentials during runtime
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
When using the dynamic inventory script for vmWare, the credentials are exposed in the runtime directory at `/tmp/awx_(job id)_mzy7mgdf/artifacts/(job_id)`. While this is only readable by root/awx and is deleted after the sync, we should mask these in job_env similar to AWS secret key. 
user: msilmser
issue_5758: state: open
title: Add a proxy configuration at project level
body: ##### ISSUE TYPE
 - Feature Idea

Add proxy configuration at project level for SCM.

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

It could be useful in order to ease the SCM proxy configuration and also in order to support organizations having different proxies.
user: zaskan
issue_5738: state: open
title: Remove restriction that disallows assigning credentials to teams across Orgs.
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

Currently the only way to assign a team to a credential not in their Org is to temporarily assign that credential to the Org to which the team belongs, then remove the Org after adding a team. 
It would be beneficial to allow superusers and org admins(assuming they've got permissions to both orgs) the ability to assign a team to a credential owned by a different organization.

user: gamuniz
issue_5716: state: open
title: Job Failure Threshold Based on Host Status
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
- Calculate job success/failure based on collective host status in playbook run
- Create a check box in job template UI to mark "partial failures"
- Input pane to set number of hosts as an upper limit required to fail for determining "Failed" or "Partially Failed" job status
user: jamesmarshall24
issue_5704: state: open
title: Mattermost notification failed because of custom CA
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
I'm unable to use Mattermost notification because my custom CA is not trusted

##### ENVIRONMENT
* AWX version: 9.2.0
* AWX install method: docker on linux
* Ansible version:  2.9.3
* Operating System: Windows
* Web Browser: Chrome

##### STEPS TO REPRODUCE

Create a notification for Mattermost (Mattermost must have custom CA)
Test the notification

##### EXPECTED RESULTS

Notification have to work with custom CA

##### ACTUAL RESULTS

<!-- What actually happened? -->
![image](https://user-images.githubusercontent.com/14820052/72713506-6fb79e00-3b6d-11ea-8e3f-c4c2bd988b86.png)




user: craph
issue_5692: state: open
title: Inventory update based on project and not job
body: 

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug Report

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI

##### SUMMARY
We are using AWX 9.1.1
We defined a project named : DEPLOY_DEV
for this project, we allowed branch override, and we have not specified any branch.

We defined a job template : DEPLOY_DEV_AUTO
this job template ask for branch on launch, which will point to the branch SCM where we have our playbook and our inventory.

We defined an invenotry named: INVENTORY_DEV
this inventory is supposed to point to the same branch SCM as job template on run.

Expected Behaviour : 
When we launch a job based on job template DEPLOY_DEV_AUTO and specify branch "V1" , DEPLOY_DEV and INVENTORY_DEV should be synchronized with branch "V1", then the job is launched

Actual Behaviour : 
When we launch a job based on job template DEPLOY_DEV_AUTO and specify branch "V1" , DEPLOY_DEV is synchronized with branch "V1",INVENTORY_DEV is synchronized with "master" (since the field branch in project is empty) . it fails, which is normal since it's looking for inventory in master branch.
We don't want to put anything in branch field for project since we have a new branch for every job, so a new inventory and a new playbook.

##### ENVIRONMENT
* AWX version: 9.1.1



user: Giusepe92
issue_5691: state: open
title: awx installation fails when using external postgres due to missing maintenance_db parameter in /usr/bin/launch_awx.sh
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
This is closely related to #5221, since that time, now the postgres_db module of ansible has the maintenance_db option, but it's missing from the /usr/bin/launch_awx(_task).sh  script.

The problem is the same, as in the previous ticket: when an external postgres db is used, it will try to connect first to the 'postgres' db as it's the default of the maintenance_db variable.

`bash-4.2$ source /etc/tower/conf.d/environment.sh`

`bash-4.2$ ANSIBLE_REMOTE_TEMP=/tmp ANSIBLE_LOCAL_TEMP=/tmp ansible -i "127.0.0.1," -c local -v -m postgresql_db --become-user $DATABASE_USER -a "name=$DATABASE_NAME owner=$DATABASE_USER login_user=$DATABASE_USER login_host=$DATABASE_HOST login_password=$DATABASE_PASSWORD port=$DATABASE_PORT" all`

`Using /etc/ansible/ansible.cfg as config file
An exception occurred during task execution. To see the full traceback, use -vvv. The error was:
OperationalError: FATAL:  no pg_hba.conf entry for host "172.22.0.5", user "awx_test", database
"postgres", SSL off
127.0.0.1 | FAILED! => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "msg": "unable to connect to database: FATAL:  no pg_hba.conf entry for host \"172.22.0.5\", user
\"awx_test\", database \"postgres\", SSL off\n"
}
`

##### ENVIRONMENT
* AWX version: 9.1.0
* AWX install method: docker on linux
* Ansible version:  2.8.4
* Operating System: Centos7
* Web Browser: N/A

##### STEPS TO REPRODUCE
1. Set an external postgresql server in the environment.sh config file:
DATABASE_USER=awx_test
DATABASE_NAME=awx_test
DATABASE_HOST=XXXXX
DATABASE_PORT=5432
DATABASE_PASSWORD=XXXXX

2. Start the awx_web containers

##### EXPECTED RESULTS

The reconfiguration of the containers is done without problems.

##### ACTUAL RESULTS

The initial reconfiguration will fail, as it can't connect to the maintenance_db (postgres by default)

##### ADDITIONAL INFORMATION


Possible Solution:
Following file should be changed:
installer/roles/image_build/files/launch_awx.sh

From:
ANSIBLE_REMOTE_TEMP=/tmp ANSIBLE_LOCAL_TEMP=/tmp ansible -i "127.0.0.1," -c local -v -m postgresql_db --become-user $DATABASE_USER -a "name=$DATABASE_NAME owner=$DATABASE_USER login_user=$DATABASE_USER login_host=$DATABASE_HOST login_password=$DATABASE_PASSWORD port=$DATABASE_PORT" all

To:
ANSIBLE_REMOTE_TEMP=/tmp ANSIBLE_LOCAL_TEMP=/tmp ansible -i "127.0.0.1," -c local -v -m postgresql_db --become-user $DATABASE_USER -a "name=$DATABASE_NAME owner=$DATABASE_USER login_user=$DATABASE_USER login_host=$DATABASE_HOST login_password=$DATABASE_PASSWORD port=$DATABASE_PORT **maintenance_db=$DATABASE_NAME**" all


Or define a DATABASE_MAINTENANCE_DB variable in environment.sh and make it to default to the database name.

Thanks 





user: kovaxur
issue_5660: state: open
title: Denote Job Errors vs Playbook Errors Differently
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Errors resulting in failed Tower services should be discernible in the UI. Currently both playbook failures and failures as a result of AWX/Tower service failures both show a red circle with a white exclamation mark.

A different visual cue or indicator for playbook vs service failures would help administrators prioritize which issues to look into first. We would also like to see specific failures outlined in the cues that are discernible from a top down level.

For example, jobs failed as a result of a project update, inventory update, or service failure should all have different visual cues on the UI. From the "jobs" page, you could then see if the job failed based on one of those three categories by looking at the status marker rather than having to click into each job to verify.
user: jamesmarshall24
issue_5629: state: open
title: add search keys to not yet implemented lists/filters not working w api
body: The following lists either aren't implemented, or when I attempted to add the keys they didn't work with the api:

---

Instances of jobs list include:
  - Host completed jobs list (not implemented yet)
  - Smart Inventory completed jobs list (not implemented yet)
  - JT completed jobs list (not implemented yet)

**Organization list**
  - Team name (of a team in the org) - search is ?teams__name=ansible (doesn't work in api)
  - Username (of a user in the org) - search is ?users__username=johndoe (doesn't work in api)

Instances of orgs list include:
  - User orgs list (not implemented yet)
  - Lookup on Credential (not implemented yet)
  - User access add wizard list (not implemented yet)
  - Team access add wizard list (not implemented yet)

**Instance Groups list**
  - eventual "type" select field (not yet implemented on the model)

Instance of instance groups list include:
  - Instance Groups list (not implemented yet)

**Users list**
  - (if not superfluous, would not include on Team users list) Team Name - search is ?teams__name=team_of_john_does (note API issue: User has no field named "teams")
  - (only for access or permissions list) Role Name - search is ?roles__name=Admin (note API issue: Role has no field "name")
  - (if not superfluous, would not include on Organization users list) Org Name - search is ?organizations__name=org_of_jhn_does (note API Issue: Organization has no field "name")
  - Search filter by external type (i.e. LDAP) - need to check with api team on this.  Currently not filterable.

Instance of user lists include:
  - Team add users list (not yet implemented)

Instance of team lists include:
  - User team list (not yet implemented)

Instance of credential lists include:
  - Credential list (not yet implemented)
  - User access add wizard list (not yet implemented)
  - Team access add wizard list (not yet implemented)

Instance of project lists include:
  - User access add wizard list (not yet implemented)
  - Team access add wizard list (not yet implemented)

Instance of template lists include:
  - Project Templates list (not yet implemented)

Instance of inventory lists include:
  - User access add wizard list (not yet implemented)
  - Team access add wizard list (not yet implemented)
user: jlmitch5
issue_5620: state: open
title: Feature: Set notification recipient on launch or set to "person who launched job"
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Right now the recipient of notifications is set on the notification template, and can not be modified at launch time. 

Instead, make it so that the: 
- notification recipient can be set on launch, perhaps w/ default
- Consider for email letting it be "user who launched job" as we have emails associated w/ users
user: kdelee
issue_5608: state: open
title: Add survey_spec modification functionality to the awx cli
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Add the ability to modify the survey_spec of a job template using the awx cli.

user: mrmibrown
issue_5573: state: open
title: Add launch button to schedules
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Using the prompt button, the scheduled jobs are able to remember the values of the surveys. In the cases of templates with complex surveys it could be useful to add a launch button in the scheduled job in order to no need to remember the content of the survey if you need to launch the template manually.

It could be a "rocket" button in the actions field of the schedules table.

![image](https://user-images.githubusercontent.com/24324312/71522985-42a60180-28c7-11ea-9c5d-efbffff06973.png)

user: zaskan
issue_5568: state: open
title: awx command line: implement -Q 'order_by' (like tower-cli did)
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
awx command line does not seem to implement -Q (specifically 'order_by')
With tower-cli I could run:
tower-cli job list -J ${job_template_id} -Q order_by -finished
and *quickly get the status of the last page of runs of a specific job_template (which is very useful for monitoring).  But with the 'awx' command line utility that is replacing tower-cli there is no such option.  With thousands of runs of a job_template the '--all' option just hangs.  The '--all' search doesn't make sense when I only want the status of the last page of runs.


user: trabacct
issue_5567: state: open
title: Performance Issue with large inventory with large cache and concurrent jobs
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY

When launching a job template with fact cache enabled concurrently (200-400 jobs), AWX will fetch retrieve the entire inventory of host facts, for each jobs and stores them into AWX file system and memcached.  This becomes problematic when each hosts in the inventory has a larger facts cached on the database.

For the main_host table size of 300MB,  we see repeatability the following queries made to the database by running SQL Profiler

![image](https://user-images.githubusercontent.com/16950383/71367375-dea3d600-2572-11ea-99f7-f02194c14ddc.png)

Code:

https://github.com/ansible/awx/blob/c6dc69c68b9bb3a3dfcdced9b6f774039451c97f/awx/main/tasks.py#L1252-L1256


https://github.com/ansible/awx/blob/c6dc69c68b9bb3a3dfcdced9b6f774039451c97f/awx/main/models/jobs.py#L780-L802

##### ENVIRONMENT
* AWX version: 5.0
* AWX install method: docker on linux
* Ansible version:  2.8
* Operating System: RHEL 7
* Web Browser: Chrome/ Firefox

##### STEPS TO REPRODUCE

1. create a medium-ish inventory ( 2000 hosts)
2. populate each host with 50KB of  ansible_facts data ( we can just postgres sql to do this)
3. create a job template and enable concurrent jobs and enable fact facting
4. launch 200-400 jobs

##### EXPECTED RESULTS

Job response time  should be clustered and within less than 5 seconds. this is without fact caching enable:

![image](https://user-images.githubusercontent.com/16950383/71367621-9c2ec900-2573-11ea-8752-e573f36f8e8c.png)



##### ACTUAL RESULTS


jobs should be executed quick but response time for a job is a stepper function not to mention about 300MB x 200 = 6GB ansible_facts of data transferred. Note a lot of jobs was harakiri-ed  if the response took longer than 120second. 

![image](https://user-images.githubusercontent.com/16950383/71367564-76a1bf80-2573-11ea-85fa-c03b4c307577.png)

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: dnguyen9
issue_5564: state: open
title: Identify changed jobs from high-level
body: ##### ISSUE TYPE
identify changes from highlevel

##### SUMMARY
we are new to AWX - we think it would make sense for the template/job indicator to show yellow instead of green when there is a change and to show green when there are no changes and red when job fails unless I am missing something -?
![image](https://user-images.githubusercontent.com/20629911/71320790-48ce5500-2465-11ea-86e9-0a4ab2f03307.png)
or maybe green + yellow when there is a change.

user: hs-hub-world
issue_5539: state: open
title: source sync doesn't update ansible_host when changing ovirt4.py
body: 
##### ISSUE TYPE

 - Bug Report


##### COMPONENT NAME

 - UI


##### SUMMARY
oVirt/RHV integration uses the latest vnic name to bind to ansible_host variable.
With Vms with more than one vnic, typically this doesn't reflect to a resolvable ip and a job template fails with message of unreachable host
So I try to change ansoble_host in ovirt4.py to match vm.fqdn

##### ENVIRONMENT
* AWX version: 9.0.1.0
* AWX install method: docker on linux
* Ansible version:  2.8.5 (in web container, correct?)
* Operating System: CentOS 7.7
* Web Browser: Google Chrome


##### STEPS TO REPRODUCE

I change my /var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/plugins/inventory/ovirt4.py

from
    return {
        'id': vm.id,
        'name': vm.name,
...
        'devices': dict(
            (device.name, [ip.address for ip in device.ips]) for device in devices if device.ips
        ),
        'ansible_host': next((device.ips[0].address for device in devices if device.ips), None)
    }

to:
    return {
        'id': vm.id,
        'name': vm.name,
...
        'devices': dict(
            (device.name, [ip.address for ip in device.ips]) for device in devices if device.ips
        ),
        'ansible_host': vm.fqdn
    }


##### EXPECTED RESULTS

A manual resync of source to update the ansible_host value for the VM


##### ACTUAL RESULTS

The ansible_host value remains unchanged, even if I selected all the "update options":
OVERWRITE
OVERWRITE VARIABLES
UPDATE ON LAUNCH


##### ADDITIONAL INFORMATION



user: gcecchi
issue_5535: state: open
title: AWX 9.0.1 Not able to create OpenStack dynamic inventory when sourced from GIT
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->

##### ENVIRONMENT
* AWX version: X.Y.Z
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  X.Y.Z
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->

I want to create a dynamic openstack inventory. When I use a custom script as an inventory source it works as expected. But when the same script is sourced from GIT as a project, the following error occurs

    2.578 INFO     Updating inventory 9: CNI-UNDERCLOUD
    3.096 DEBUG    Using base command: python /usr/bin/ansible-inventory -i /tmp/awx_158_36ca2aqh/project/openstack.py --playbook-dir /tmp/awx_158_36ca2aqh/project -vvvvv
    3.096 INFO     Reading Ansible inventory source: /tmp/awx_158_36ca2aqh/project/openstack.py
    3.098 INFO     Using VIRTUAL_ENV: /var/lib/awx/venv/ansible
    3.098 INFO     Using PATH: /var/lib/awx/venv/ansible/bin:/var/lib/awx/venv/awx/bin:/var/lib/awx/venv/awx/bin:/var/lib/awx/venv/awx/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    3.098 INFO     Using PYTHONPATH: /var/lib/awx/venv/ansible/lib/python3.6/site-packages:
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==9.0.1.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 158, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 1153, in handle
    raise exc
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 1043, in handle
    venv_path=venv_path, verbosity=self.verbosity).load()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 214, in load
    return self.command_to_json(base_args + ['--list'])
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 197, in command_to_json
    self.method, proc.returncode, stdout, stderr))
RuntimeError: ansible-inventory failed (rc=1) with stdout:
stderr:
ansible-inventory 2.8.5
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/var/lib/awx/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible-inventory
  python version = 3.6.8 (default, Oct  7 2019, 17:58:22) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]
Using /etc/ansible/ansible.cfg as config file
setting up inventory plugins
host_list declined parsing /tmp/awx_158_36ca2aqh/project/openstack.py as it did not pass it's verify_file() method
auto declined parsing /tmp/awx_158_36ca2aqh/project/openstack.py as it did not pass it's verify_file() method
yaml declined parsing /tmp/awx_158_36ca2aqh/project/openstack.py as it did not pass it's verify_file() method
toml declined parsing /tmp/awx_158_36ca2aqh/project/openstack.py as it did not pass it's verify_file() method
 [WARNING]:  * Failed to parse /tmp/awx_158_36ca2aqh/project/openstack.py with
script plugin: Inventory script (/tmp/awx_158_36ca2aqh/project/openstack.py)
had an execution error: Traceback (most recent call last):   File
"/tmp/awx_158_36ca2aqh/project/openstack.py", line 64, in <module>     import
openstack as sdk   File "/tmp/awx_158_36ca2aqh/project/openstack.py", line 65,
in <module>     from openstack.cloud import inventory as sdk_inventory
ModuleNotFoundError: No module named 'openstack.cloud'; 'openstack' is not a
package
  File "/usr/lib/python3.6/site-packages/ansible/inventory/manager.py", line 268, in parse_source
    plugin.parse(self._inventory, self._loader, source, cache=cache)
  File "/usr/lib/python3.6/site-packages/ansible/plugins/inventory/script.py", line 161, in parse
    raise AnsibleParserError(to_native(e))
 [WARNING]:  * Failed to parse /tmp/awx_158_36ca2aqh/project/openstack.py with
ini plugin: /tmp/awx_158_36ca2aqh/project/openstack.py:54: Expected key=value
host variable assignment, got: argparse
  File "/usr/lib/python3.6/site-packages/ansible/inventory/manager.py", line 268, in parse_source
    plugin.parse(self._inventory, self._loader, source, cache=cache)
  File "/usr/lib/python3.6/site-packages/ansible/plugins/inventory/ini.py", line 138, in parse
    raise AnsibleParserError(e)
 [WARNING]: Unable to parse /tmp/awx_158_36ca2aqh/project/openstack.py as an
inventory source
ERROR! No inventory was parsed, please check your configuration and options.



##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->

##### ACTUAL RESULTS

<!-- What actually happened? -->

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: artuja
issue_5533: state: open
title: AWX 9.0.1 Dynamic Inventory - Foreman source HTTPS warnings
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Getting a bunch of Warning pertaining to HTTPS, but the objects get loaded into AWX from foreman.

##### ENVIRONMENT
* AWX version: 9.0.1
* AWX install method: docker on linux
* Ansible version:  2.8.5
* Operating System: RHEL 8.0
* Web Browser: Chrome

##### STEPS TO REPRODUCE
Run the sync for Dynamic inventory from source foreman, getting the following Warnings upon completion:

 /var/lib/awx/venv/ansible/lib/python3.6/site-
  231.740 ERROR    packages/urllib3/connectionpool.py:847: InsecureRequestWarning: Unverified
  231.740 ERROR    HTTPS request is being made. Adding certificate verification is strongly
  231.740 ERROR    advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-
  231.740 ERROR    warnings   InsecureRequestWarning)
  231.740 ERROR    /var/lib/awx/venv/ansible/lib/python3.6/site-
  231.740 ERROR    packages/urllib3/connectionpool.py:847: InsecureRequestWarning: Unverified
  231.741 ERROR    HTTPS request is being made. Adding certificate verification is strongly
  231.741 ERROR    advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-
  231.741 ERROR    warnings   InsecureRequestWarning)

##### EXPECTED RESULTS

Clean output of STDOUT

##### ACTUAL RESULTS

 /var/lib/awx/venv/ansible/lib/python3.6/site-
  231.740 ERROR    packages/urllib3/connectionpool.py:847: InsecureRequestWarning: Unverified
  231.740 ERROR    HTTPS request is being made. Adding certificate verification is strongly
  231.740 ERROR    advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-
  231.740 ERROR    warnings   InsecureRequestWarning)
  231.740 ERROR    /var/lib/awx/venv/ansible/lib/python3.6/site-
  231.740 ERROR    packages/urllib3/connectionpool.py:847: InsecureRequestWarning: Unverified
  231.741 ERROR    HTTPS request is being made. Adding certificate verification is strongly
  231.741 ERROR    advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-
  231.741 ERROR    warnings   InsecureRequestWarning)

##### ADDITIONAL INFORMATION

Are there parameters that need to be adjusted to suppress these warning/errors? PLease advise.

user: linuxcube
issue_5527: state: open
title: LDAP Org-Admins are not allowed to grant permissions to other LDAP users
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Our organizations, teams and users are mapped from LDAP. I would expect that a organization admin is allowed to grant organization permission to other LDAP users. But that's not possible. The organization admin can only manage non-LDAP users.

##### ENVIRONMENT
* AWX version: 9.0.1
* AWX install method: docker on linux
* Ansible version:  2.9.2
* Operating System: Debian 9
* Web Browser: Firefox 70

##### STEPS TO REPRODUCE

Add LDAP as authentication method and add an organization mapping, e.g.

```
{
 "org1": {
  "users": [
   "cn=org1,ou=departments,ou=company,ou=Groups,ou=example,dc=coml"
  ],
  "remove_users": true,
  "remove_admins": false,
  "admins": false
 },
  ...
```
Assign one user of the org1 organization as org-admin. Then login with that user and try to grant permissions to an other user of the same organization. You won't be able to choose the user in the permissions dialog. Instead it says "You do not have permission to manage this user"

##### EXPECTED RESULTS

The org-admin is able to grant permission to other LDAP users which are member of their organization.

##### ACTUAL RESULTS

"You do not have permission to manage this user"

##### ADDITIONAL INFORMATION

![awx_grant_org_permissions_error](https://user-images.githubusercontent.com/51952982/71006147-2cd55700-20e5-11ea-8234-61344a615585.jpg)


user: anxstj
labels: component:authentication: For issues related to authentication
issue_5524: state: open
title: No error is received when user schedules a job in past date.
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
No error is received when user schedules a job in past date.

##### ENVIRONMENT
AWX version: 9.0.1
AWX install method: doocker
Operating System: rhel7.4
Web Browser: Chrome 78.0.3904.108

##### STEPS TO REPRODUCE
1. Login to AWX  dashboard with admin user 
2. Now click on inventory panel to create a new inventory.
3. Select group tab in inventory and add hosts to it.
4. Now click on credential panel to create credential with type as 
 "machine" and provide username and password of machines added in  inventory.
5. Click on project panel and create a new project.
6. Now click on Templates panel to create a new job templates.
7. Now click on Schedule panel to create a job schedule at a past date. 

##### EXPECTED RESULTS
User should not be able to create schedule in past date 

##### ACTUAL RESULTS
Schedule is created at a "Past Date" or "Past Time" when "End Parameter" is set to "Never/OnDate",


user: soniya20
issue_5513: state: open
title: Determine the keys to use for filtering in `host_filter`
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

As we move to the new search flow in ui_next where there is a starting set of keys for easier filtering, we should determine how we would want to do this in the host_filter for smart inventory, and if we would want to populate keys based on specific ansible fact names (e.g., `ansible_system`, `ansible_distribution_version`, `ansible_os_family`, etc.)

user: wenottingham
issue_5482: state: open
title: Allow webhook endpoints to function as CI checks
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Our initial implementation of webhooks will launch a job for every single event that is caught. For example, enabling webhook events from Pull Request updates will send events for: 

> `assigned`, `unassigned`, `review_requested`, `review_request_removed`, `labeled`, `unlabeled`, `opened`, `edited`, `closed`, `ready_for_review`, `locked`, `unlocked`, `or reopened`. 

This may sometimes be the desired behavior, however there seems to be a use case for a feature that augments the behavior in opinionated ways to play nicely as a CI check in GitHub or GitLab.

At a high level, a job should only launch when a pull request is opened or the code has changed. We may also need a whitelist of labels to respond to if we wish to keep our `mergeit` behavior.
user: shanemcd
issue_5481: state: open
title: Invalid search term entered. GET returned: 504
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Post patching, AWX containers came up, but users are getting 504 errors when clicking "Templates"
Invalid search term entered. GET returned: 504

##### ENVIRONMENT
* AWX version: 9.0.1.0
* AWX install method: docker
* Ansible version:  2.9.1
* Operating System: Linux
* Web Browser: Multiple

##### STEPS TO REPRODUCE

After patching the host server and restarting the platform 

##### EXPECTED RESULTS

Templates should open :)

##### ACTUAL RESULTS

`RESULT 2
OKREADY
2019/12/10 19:29:42 [error] 123#0: *159 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 192.168.1.1, server: _, request: "GET /api/v2/unified_job_templates/?page_size=20&order_by=name&type=workflow_job_template,job_template HTTP/1.1", upstream: "uwsgi://127.0.0.1:8050", host: "myserver.mydomain.com:8081", referrer: "http://myserver.mydomain.com:8081/"
192.168.1.1 - - [10/Dec/2019:19:29:42 +0000] "GET /api/v2/unified_job_templates/?page_size=20&order_by=name&type=workflow_job_template,job_template HTTP/1.1" 504 578 "http://myserver.mydomain.com:8081/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36" "-"
Tue Dec 10 19:29:43 2019 - *** HARAKIRI ON WORKER 5 (pid: 128, try: 1) ***
Tue Dec 10 19:29:43 2019 - HARAKIRI !!! worker 5 status !!!
Tue Dec 10 19:29:43 2019 - HARAKIRI [core 0] 192.168.1.1 - GET /api/v2/unified_job_templates/?page_size=20&order_by=name&type=workflow_job_template,job_template since 1576006062
Tue Dec 10 19:29:43 2019 - HARAKIRI !!! end of worker 5 status !!!
DAMN ! worker 5 (pid: 128) died, killed by signal 9 :( trying respawn ...
Respawned uWSGI worker 5 (new pid: 195)
WSGI app 0 (mountpoint='') ready in 3 seconds on interpreter 0x251b460 pid: 195 (default app)
RESULT 2
OKREADY`
##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: cpare
issue_5476: state: open
title: AWX uses wrong user for SSH connection
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
I have an interesting behaviour in AWX: I started implementing playbooks and stuff from existing configuration in AWX and ran those playbooks using a credential and therefore a distinct user which worked fine. I then wanted to use another user so I created a new credential containing a different user name and ssh key, along with the passphrase and become password. When I try to launch a job from a template using this credential it fails. Enabling connection debug output shows that Ansible is still using the former user which fails to connect via SSH.

I can not find any hints to that user in any configuration, neither in the inventories, nor in the playbooks or roles. Even on the filesystem level of the docker host I can not find anything helpful.

My current workaround is to set the `ansible_user` variable in the job template. This works but can not be the solution.

##### ENVIRONMENT
* AWX version: 9.0.1.0
* AWX install method: docker on linux
* Ansible version:  2.9.2 (Python 2.7.16)
* Operating System: Debian 10.2
* Web Browser: Firefox 70.0.1 (64-bit)

##### STEPS TO REPRODUCE

See summary.

##### EXPECTED RESULTS

The user set through the credential should be used, as no other configuration tells otherwise.

##### ACTUAL RESULTS

A formerly used user gets used.
user: thorian93
issue_5446: state: open
title: validate LDAP configuration more tightly
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Proxying from an email where group mappings were not working properly:
....
Looks like the culprit was the group dn had a space after the "cn=" in the team mapping for the team that wasn't working correctly
i.e. "cn= groupname,ou=group,dc=example,dc=com"

The syntax check doesn't complain about the space, so looks like that's how it slipped through
...

Assuming a leading space is invalid, we should catch this.

##### ENVIRONMENT
* AWX version: current

user: wenottingham
labels: component:authentication: For issues related to authentication
issue_5433: state: open
title: Move our custom AutoSchema class to use DRF utilities for this
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
In https://github.com/ansible/awx/pull/5407 we are updating Django REST framework.

But in doing that, we are setting this to a old / deprecated kind of class

https://github.com/ansible/awx/blob/e70c7ab458b46402e182bf1b66517021f7482394/awx/api/swagger.py#L10

```python
    'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.AutoSchema',
```

We actually have our own `AutoSchema` class, which we conditionally inject into our views.

https://github.com/ansible/awx/blob/e70c7ab458b46402e182bf1b66517021f7482394/awx/api/swagger.py#L27-L58

Compare...

DRF now wants to use `rest_framework.schemas.openapi.AutoSchema` by default:

https://www.django-rest-framework.org/api-guide/schemas/

https://github.com/encode/django-rest-framework/blob/7c3477dcdae558b40acfa116ed08eeb5700818eb/rest_framework/schemas/coreapi.py#L336

So our auto schema class is very specifically written for the old DRF schema class, and then takes it and does swagger stuff. There's a new class which already does swagger stuff. We should switch to that one, rewriting our custom class so that we have to maintain less of the logic ourselves.

Exactly how much we need to do is unclear.

user: AlanCoding
issue_5428: state: open
title: Some facts missing from foreman_facts when importing inventory (Satellite/Foreman)
body: ##### ISSUE TYPE
- Bug

##### SUMMARY
- When running Inventory Sync with Satellite/Foreman plugin via foreman.py script some foreman_facts are missing on some hosts.

##### ENVIRONMENT
* AWX version: 7.0.0
* AWX install method: awx-rpm
* Ansible version:  2.8.6
* Operating System: CentOS 7.7.1908
* Web Browser: Chromium
* Foreman verision: 1.22.0

##### STEPS TO REPRODUCE
1) Run inventory sync via Satellite/Foreman plugin
![image](https://user-images.githubusercontent.com/849525/70059051-55872800-15e0-11ea-82b6-3c7a14d94d3f.png)

2) Task ends successfully.

3) Check foreman fact on foreman:
![Istantanea_2019-12-03_15-21-47](https://user-images.githubusercontent.com/849525/70059437-17d6cf00-15e1-11ea-99c2-24edcbc58073.png)

4) Check foreman_fact on awx:
![Istantanea_2019-12-03_15-26-32](https://user-images.githubusercontent.com/849525/70059627-68e6c300-15e1-11ea-922b-da9aaa124260.png)


##### EXPECTED RESULTS
- All foreman_facts should be imported on AWX.
Like this one:
![Istantanea_2019-12-03_15-29-08](https://user-images.githubusercontent.com/849525/70060153-40ab9400-15e2-11ea-8f7b-199ea40f4e58.png)

##### ACTUAL RESULTS
- See 4) in steps to reproduce

##### ADDITIONAL INFORMATION

Same facts are present on Foreman for both hosts but some facts (like those in the picture) are missing in AWX only for some hosts).

Thanks!

user: aquilinux
issue_5417: state: open
title: Mark templates as favorite, display them on dashboard.
body: ##### Feature Request
 - Mark templates as favorite, and show them on the dashboard page.

##### SUMMARY

It would be nice if there was a feature where you could mark a template as a favorite. 
Favored templates should be displayed on the dashboard. 
I think it would be a better view to have instead of the Recently Used Templates box, where all sorts of templates show up. 

The implementation could be as simple as a clickable star icon on the templates index page next the the rocket icon. 

![awx_icons](https://user-images.githubusercontent.com/7337795/69864232-bfc96100-129e-11ea-9872-d2d9b1bc3254.png)

user: Emusp
issue_5416: state: open
title: Performance issue with many hosts in inventory
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When any job starts in AWX it spends about one minute doing many requests to PGSQL
It happens if inventory filled up (1 inventory, 79809 hosts, 6 groups).
But if inventory is small job works well.

##### ENVIRONMENT
* AWX version: 7.0.0.
* AWX install method: docker on linux
* Ansible version:  2.8.4
* Operating System: CentOS 7.6.1810 (x86_64)
* Web Browser: Chrome 78.0.3904.108
* Database: PostgreSQL 11 (Which is external. Not in dockers)

##### STEPS TO REPRODUCE

Just use some script to create many hosts in inventory and run simple job.
My job is simplest ansible file:

---
- hosts: localhost
  gather_facts: no
  tasks:
    - debug:
        msg: "Nothing to do"

##### EXPECTED RESULTS
Such simple job should work quite fast but it spends about minute to work.
Sometime when system load is low (night time) worktime is about 20-30 seconds.

In 'Actual Results' chapter I put parts of strace log and docker logs when job is working

##### ACTUAL RESULTS
This is strace log of python process which spends about 100% cpu:
```
lstat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0755, st_size=77, ...}) = 0
lstat("/tmp/awx_3250_eiduj6wd", {st_mode=S_IFDIR|0700, st_size=78, ...}) = 0

lstat("/tmp/awx_3250_eiduj6wd/artifacts", {st_mode=S_IFDIR|0700, st_size=18, ...}) = 0

lstat("/tmp/awx_3250_eiduj6wd/artifacts/3250", {st_mode=S_IFDIR|0700, st_size=95, ...}) = 0

lstat("/tmp/awx_3250_eiduj6wd/artifacts/3250/fact_cache", {st_mode=S_IFDIR|0700, st_size=6, ...}) = 0

lstat("/tmp/awx_3250_eiduj6wd/artifacts/3250/fact_cache/BO-Y867", 0x7ffee5bd8c60) = -1 ENOENT (No such file or directory)

stat("/tmp/awx_3250_eiduj6wd/artifacts/3250/fact_cache/BO-Y867", 0x7ffee5bd90f0) = -1 ENOENT (No such file or directory)

sendto(20, "Q\0\0\0017SELECT \"conf_setting\".\"id\","..., 312, MSG_NOSIGNAL, NULL, 0) = 312

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "T\0\0\0\230\0\6id\0\0\0Uw\0\1\0\0\0\27\0\4\377\377\377\377\0\0crea"..., 16384, 0, NULL, NULL) = 173

sendto(20, "Q\0\0\0018SELECT \"conf_setting\".\"id\","..., 313, MSG_NOSIGNAL, NULL, 0) = 313

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "T\0\0\0\230\0\6id\0\0\0Uw\0\1\0\0\0\27\0\4\377\377\377\377\0\0crea"..., 16384, 0, NULL, NULL) = 291

sendto(20, "Q\0\0\2=SELECT \"main_host\".\"id\", \"m"..., 574, MSG_NOSIGNAL, NULL, 0) = 574

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "T\0\0\2>\0\22id\0\0\0V\233\0\1\0\0\0\27\0\4\377\377\377\377\0\0crea"..., 16384, 0, NULL, NULL) = 818

sendto(20, "Q\0\0\0hSELECT \"main_host\".\"id\", \"m"..., 105, MSG_NOSIGNAL, NULL, 0) = 105

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "T\0\0\0009\0\2id\0\0\0V\233\0\1\0\0\0\27\0\4\377\377\377\377\0\0desc"..., 16384, 0, NULL, NULL) = 107

sendto(20, "Q\0\0\3\323SELECT \"main_inventory\".\"id"..., 980, MSG_NOSIGNAL, NULL, 0) = 980

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "T\0\0\3e\0\32id\0\0\0V\273\0\1\0\0\0\27\0\4\377\377\377\377\0\0crea"..., 16384, 0, NULL, NULL) = 1265

sendto(20, "Q\0\0\0dSELECT \"main_host\".\"id\", \"m"..., 101, MSG_NOSIGNAL, NULL, 0) = 101

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "T\0\0\0005\0\2id\0\0\0V\233\0\1\0\0\0\27\0\4\377\377\377\377\0\0enab"..., 16384, 0, NULL, NULL) = 96

sendto(20, "Q\0\0\0hSELECT \"main_host\".\"id\", \"m"..., 105, MSG_NOSIGNAL, NULL, 0) = 105

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "T\0\0\0009\0\2id\0\0\0V\233\0\1\0\0\0\27\0\4\377\377\377\377\0\0inst"..., 16384, 0, NULL, NULL) = 99

sendto(20, "Q\0\0\0fSELECT \"main_host\".\"id\", \"m"..., 103, MSG_NOSIGNAL, NULL, 0) = 103

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "T\0\0\0007\0\2id\0\0\0V\233\0\1\0\0\0\27\0\4\377\377\377\377\0\0vari"..., 16384, 0, NULL, NULL) = 127

sendto(20, "Q\0\0\1\4UPDATE \"main_host\" SET \"mod"..., 261, MSG_NOSIGNAL, NULL, 0) = 261

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "C\0\0\0\rUPDATE 1\0Z\0\0\0\5I", 16384, 0, NULL, NULL) = 20

lstat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0755, st_size=77, ...}) = 0

lstat("/tmp/awx_3250_eiduj6wd", {st_mode=S_IFDIR|0700, st_size=78, ...}) = 0

lstat("/tmp/awx_3250_eiduj6wd/artifacts", {st_mode=S_IFDIR|0700, st_size=18, ...}) = 0

lstat("/tmp/awx_3250_eiduj6wd/artifacts/3250", {st_mode=S_IFDIR|0700, st_size=95, ...}) = 0

lstat("/tmp/awx_3250_eiduj6wd/artifacts/3250/fact_cache", {st_mode=S_IFDIR|0700, st_size=6, ...}) = 0

lstat("/tmp/awx_3250_eiduj6wd/artifacts/3250/fact_cache/BO-Y868", 0x7ffee5bd8c60) = -1 ENOENT (No such file or directory)

stat("/tmp/awx_3250_eiduj6wd/artifacts/3250/fact_cache/BO-Y868", 0x7ffee5bd90f0) = -1 ENOENT (No such file or directory)

sendto(20, "Q\0\0\0017SELECT \"conf_setting\".\"id\","..., 312, MSG_NOSIGNAL, NULL, 0) = 312

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "T\0\0\0\230\0\6id\0\0\0Uw\0\1\0\0\0\27\0\4\377\377\377\377\0\0crea"..., 16384, 0, NULL, NULL) = 173

sendto(20, "Q\0\0\0018SELECT \"conf_setting\".\"id\","..., 313, MSG_NOSIGNAL, NULL, 0) = 313

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "T\0\0\0\230\0\6id\0\0\0Uw\0\1\0\0\0\27\0\4\377\377\377\377\0\0crea"..., 16384, 0, NULL, NULL) = 291

sendto(20, "Q\0\0\2=SELECT \"main_host\".\"id\", \"m"..., 574, MSG_NOSIGNAL, NULL, 0) = 574

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "T\0\0\2>\0\22id\0\0\0V\233\0\1\0\0\0\27\0\4\377\377\377\377\0\0crea"..., 16384, 0, NULL, NULL) = 820

sendto(20, "Q\0\0\0hSELECT \"main_host\".\"id\", \"m"..., 105, MSG_NOSIGNAL, NULL, 0) = 105

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "T\0\0\0009\0\2id\0\0\0V\233\0\1\0\0\0\27\0\4\377\377\377\377\0\0desc"..., 16384, 0, NULL, NULL) = 107

sendto(20, "Q\0\0\3\323SELECT \"main_inventory\".\"id"..., 980, MSG_NOSIGNAL, NULL, 0) = 980

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "T\0\0\3e\0\32id\0\0\0V\273\0\1\0\0\0\27\0\4\377\377\377\377\0\0crea"..., 16384, 0, NULL, NULL) = 1265

sendto(20, "Q\0\0\0dSELECT \"main_host\".\"id\", \"m"..., 101, MSG_NOSIGNAL, NULL, 0) = 101

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "T\0\0\0005\0\2id\0\0\0V\233\0\1\0\0\0\27\0\4\377\377\377\377\0\0enab"..., 16384, 0, NULL, NULL) = 96

sendto(20, "Q\0\0\0hSELECT \"main_host\".\"id\", \"m"..., 105, MSG_NOSIGNAL, NULL, 0) = 105

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "T\0\0\0009\0\2id\0\0\0V\233\0\1\0\0\0\27\0\4\377\377\377\377\0\0inst"..., 16384, 0, NULL, NULL) = 99

sendto(20, "Q\0\0\0fSELECT \"main_host\".\"id\", \"m"..., 103, MSG_NOSIGNAL, NULL, 0) = 103

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "T\0\0\0007\0\2id\0\0\0V\233\0\1\0\0\0\27\0\4\377\377\377\377\0\0vari"..., 16384, 0, NULL, NULL) = 129

sendto(20, "Q\0\0\1\4UPDATE \"main_host\" SET \"mod"..., 261, MSG_NOSIGNAL, NULL, 0) = 261

poll([{fd=20, events=POLLIN|POLLERR}], 1, -1) = 1 ([{fd=20, revents=POLLIN}])

recvfrom(20, "C\0\0\0\rUPDATE 1\0Z\0\0\0\5I", 16384, 0, NULL, NULL) = 20
```

This is output of docker logs

```
RESULT 2

OKREADY

[2019-11-25 20:31:01,226: DEBUG/Process-1] publish awx.main.tasks.cluster_node_heartbeat(9a398c6e-32ef-4ea6-b90e-a5434b20fbaf, queue=msk-dpro-apl365)

2019-11-25 20:31:01,253 DEBUG    awx.main.dispatch delivered 9a398c6e-32ef-4ea6-b90e-a5434b20fbaf to worker[214] qsize 0

2019-11-25 20:31:01,259 DEBUG    awx.main.dispatch task 9a398c6e-32ef-4ea6-b90e-a5434b20fbaf starting awx.main.tasks.cluster_node_heartbeat(*[])

2019-11-25 20:31:01,261 DEBUG    awx.main.dispatch publish awx.main.tasks.awx_periodic_scheduler(75c22c63-7a28-447f-a433-39c903c1c95b, queue=awx_private_queue)

2019-11-25 20:31:01,269 DEBUG    awx.main.tasks Cluster node heartbeat task.

[2019-11-25 20:31:01,261: DEBUG/Process-1] publish awx.main.tasks.awx_periodic_scheduler(75c22c63-7a28-447f-a433-39c903c1c95b, queue=awx_private_queue)

2019-11-25 20:31:01,280 DEBUG    awx.main.dispatch task 9a398c6e-32ef-4ea6-b90e-a5434b20fbaf is finished

2019-11-25 20:31:01,280 DEBUG    awx.main.dispatch delivered 75c22c63-7a28-447f-a433-39c903c1c95b to worker[209] qsize 0

2019-11-25 20:31:01,286 DEBUG    awx.main.dispatch task 75c22c63-7a28-447f-a433-39c903c1c95b starting awx.main.tasks.awx_periodic_scheduler(*[])

2019-11-25 20:31:01,462 DEBUG    awx.main.tasks Starting periodic scheduler

2019-11-25 20:31:01,466 DEBUG    awx.main.tasks Last scheduler run was: 2019-11-25 20:30:31.339906+00:00

2019-11-25 20:31:01,477 DEBUG    awx.main.dispatch task 75c22c63-7a28-447f-a433-39c903c1c95b is finished

2019-11-25 20:31:06,623 DEBUG    awx.main.dispatch publish awx.main.scheduler.tasks.run_task_manager(985dd432-6ca1-4104-b5d2-f26103c00284, queue=awx_private_queue)

[2019-11-25 20:31:06,623: DEBUG/Process-1] publish awx.main.scheduler.tasks.run_task_manager(985dd432-6ca1-4104-b5d2-f26103c00284, queue=awx_private_queue)

2019-11-25 20:31:06,814 DEBUG    awx.main.dispatch delivered 985dd432-6ca1-4104-b5d2-f26103c00284 to worker[209] qsize 0

2019-11-25 20:31:06,834 DEBUG    awx.main.dispatch task 985dd432-6ca1-4104-b5d2-f26103c00284 starting awx.main.scheduler.tasks.run_task_manager(*[])

2019-11-25 20:31:06,844 DEBUG    awx.main.scheduler Running Tower task manager.

2019-11-25 20:31:06,851 DEBUG    awx.main.scheduler Starting Scheduler

2019-11-25 20:31:06,872 DEBUG    awx.main.dispatch task 985dd432-6ca1-4104-b5d2-f26103c00284 is finished

2019-11-25 20:31:26,634 DEBUG    awx.main.dispatch publish awx.main.scheduler.tasks.run_task_manager(fb57d65b-83ed-4a28-8d3d-8e803e0aab2c, queue=awx_private_queue)

[2019-11-25 20:31:26,634: DEBUG/Process-1] publish awx.main.scheduler.tasks.run_task_manager(fb57d65b-83ed-4a28-8d3d-8e803e0aab2c, queue=awx_private_queue)

2019-11-25 20:31:26,655 DEBUG    awx.main.dispatch delivered fb57d65b-83ed-4a28-8d3d-8e803e0aab2c to worker[211] qsize 0

2019-11-25 20:31:26,661 DEBUG    awx.main.dispatch task fb57d65b-83ed-4a28-8d3d-8e803e0aab2c starting awx.main.scheduler.tasks.run_task_manager(*[])

2019-11-25 20:31:26,841 DEBUG    awx.main.scheduler Running Tower task manager.

2019-11-25 20:31:26,849 DEBUG    awx.main.scheduler Starting Scheduler

2019-11-25 20:31:26,870 DEBUG    awx.main.dispatch task fb57d65b-83ed-4a28-8d3d-8e803e0aab2c is finished

2019-11-25 20:31:31,262 DEBUG    awx.main.dispatch publish awx.main.tasks.awx_periodic_scheduler(d8d0b40a-444d-41ec-becb-159b3c7963d3, queue=awx_private_queue)

[2019-11-25 20:31:31,262: DEBUG/Process-1] publish awx.main.tasks.awx_periodic_scheduler(d8d0b40a-444d-41ec-becb-159b3c7963d3, queue=awx_private_queue)

2019-11-25 20:31:31,282 DEBUG    awx.main.dispatch delivered d8d0b40a-444d-41ec-becb-159b3c7963d3 to worker[211] qsize 0

2019-11-25 20:31:31,288 DEBUG    awx.main.dispatch task d8d0b40a-444d-41ec-becb-159b3c7963d3 starting awx.main.tasks.awx_periodic_scheduler(*[])

2019-11-25 20:31:31,299 DEBUG    awx.main.tasks Starting periodic scheduler

2019-11-25 20:31:31,303 DEBUG    awx.main.tasks Last scheduler run was: 2019-11-25 20:31:01.465228+00:00

2019-11-25 20:31:31,313 DEBUG    awx.main.dispatch task d8d0b40a-444d-41ec-becb-159b3c7963d3 is finished

2019-11-25 20:31:46,634 DEBUG    awx.main.dispatch publish awx.main.scheduler.tasks.run_task_manager(c8e68a4d-de29-4bb6-83de-a046fa15a5c8, queue=awx_private_queue)

[2019-11-25 20:31:46,634: DEBUG/Process-1] publish awx.main.scheduler.tasks.run_task_manager(c8e68a4d-de29-4bb6-83de-a046fa15a5c8, queue=awx_private_queue)

2019-11-25 20:31:46,668 DEBUG    awx.main.dispatch delivered c8e68a4d-de29-4bb6-83de-a046fa15a5c8 to worker[214] qsize 0

2019-11-25 20:31:46,840 DEBUG    awx.main.dispatch task c8e68a4d-de29-4bb6-83de-a046fa15a5c8 starting awx.main.scheduler.tasks.run_task_manager(*[])

2019-11-25 20:31:47,017 DEBUG    awx.main.scheduler Running Tower task manager.

2019-11-25 20:31:47,024 DEBUG    awx.main.scheduler Starting Scheduler

2019-11-25 20:31:47,045 DEBUG    awx.main.dispatch task c8e68a4d-de29-4bb6-83de-a046fa15a5c8 is finished

RESULT 2

OKREADY
```
##### ADDITIONAL INFORMATION
I have 1 Inventory which contains 79809 hosts, 6 groups.
user: kirill-ratkin
issue_5400: state: open
title: AWX Upgrade (postgres 9.6 to 10) 7.0.0 to 9.0.1 fails
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->
The following part in /awx/installer/roles/local_docker/main/tasks/main.yml fails:

```
- name: Upgrade Postgres
  shell: |
    docker run --rm \
      -v {{ postgres_data_dir }}/pgdata:/var/lib/postgresql/9.6/data \
      -v {{ postgres_data_dir }}/10/data:/var/lib/postgresql/10/data \
      -e PGUSER={{ pg_username }} -e POSTGRES_INITDB_ARGS="-U {{ pg_username }}" \
      tianon/postgres-upgrade:9.6-to-10 --username={{ pg_username }}
  when: upgrade_postgres | bool
```

##### ENVIRONMENT
* AWX version: 9.0.1
* AWX install method: docker on linux
* Ansible version:  2.9

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->
Upgrading from AWX 7.0.0 to AWX 9.0.1.

Folder permissions (auto generated).
```
[root@awx2 pgdocker]# ll
total 4
drwxr-xr-x.  3 root    root   18 Nov 26 10:48 10
drwx------. 22 polkitd root 4096 Nov 26 10:53 pgdata
```

##### ACTUAL RESULTS

<!-- What actually happened? -->

1. First error shown below. **I was able fix this adding drive letter to both volume mount points** `-v {{ postgres_data_dir }}/pgdata:/var/lib/postgresql/9.6/data:Z`

```
["chown: cannot read directory '/var/lib/postgresql/9.6/data': Permission denied", "chown: cannot read directory '/var/lib/postgresql/10/data': Permission denied"]
```

2. Next error I got shown below.

```
TASK [local_docker : Upgrade Postgres] *************************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": true, "cmd": "docker run --rm  -v /opt/pgdocker/pgdata:/var/lib/postgresql/9.6/data/upgrade:Z  -v /opt/pgdocker/10/data:/var/lib/postgresql/10/data/upgrade:Z  -e PGUSER=awx -e POSTGRES_INITDB_ARGS=\"-U awx\"  tianon/postgres-upgrade:9.6-to-10 --username=awx\n", "delta": "0:00:26.392647", "end": "2019-11-26 10:49:49.574819", "msg": "non-zero return code", "rc": 1, "start": "2019-11-26 10:49:23.182172", "stderr": "Unable to find image 'tianon/postgres-upgrade:9.6-to-10' locally\nTrying to pull repository docker.io/tianon/postgres-upgrade ... \n9.6-to-10: Pulling from docker.io/tianon/postgres-upgrade\nd599a449871e: Already exists\neadd55e4a4ae: Already exists\n17eea069a47f: Already exists\n22b703021b03: Already exists\n5fa72174baec: Already exists\n338e0b17322b: Already exists\n05fd528a5e36: Already exists\nc224328d751f: Already exists\nf4319784a7ce: Pulling fs layer\n6b0ef024e116: Pulling fs layer\n5bc4176bd4c3: Pulling fs layer\n79c29b3c031a: Pulling fs layer\n63b5329afa6d: Pulling fs layer\n55f0468f4dda: Pulling fs layer\nc4ff909e34cd: Pulling fs layer\n8d9339e0f627: Pulling fs layer\n240ab916af1f: Pulling fs layer\nc6a7751c19c9: Pulling fs layer\n79c29b3c031a: Waiting\n63b5329afa6d: Waiting\n55f0468f4dda: Waiting\nc4ff909e34cd: Waiting\n8d9339e0f627: Waiting\n240ab916af1f: Waiting\nc6a7751c19c9: Waiting\n5bc4176bd4c3: Verifying Checksum\n5bc4176bd4c3: Download complete\n6b0ef024e116: Verifying Checksum\n6b0ef024e116: Download complete\n79c29b3c031a: Verifying Checksum\n79c29b3c031a: Download complete\n63b5329afa6d: Verifying Checksum\n63b5329afa6d: Download complete\n55f0468f4dda: Verifying Checksum\n55f0468f4dda: Download complete\nc4ff909e34cd: Verifying Checksum\nc4ff909e34cd: Download complete\n240ab916af1f: Download complete\nc6a7751c19c9: Verifying Checksum\nc6a7751c19c9: Download complete\n8d9339e0f627: Verifying Checksum\n8d9339e0f627: Download complete\nf4319784a7ce: Verifying Checksum\nf4319784a7ce: Download complete\nf4319784a7ce: Pull complete\n6b0ef024e116: Pull complete\n5bc4176bd4c3: Pull complete\n79c29b3c031a: Pull complete\n63b5329afa6d: Pull complete\n55f0468f4dda: Pull complete\nc4ff909e34cd: Pull complete\n8d9339e0f627: Pull complete\n240ab916af1f: Pull complete\nc6a7751c19c9: Pull complete\nDigest: sha256:2d6b609fcbf7e41e874108dde69345a896b43450875477a74d8548614eba97bd\nStatus: Downloaded newer image for docker.io/tianon/postgres-upgrade:9.6-to-10\ninitdb: directory \"/var/lib/postgresql/10/data\" exists but is not empty\nIf you want to create a new database system, either remove or empty\nthe directory \"/var/lib/postgresql/10/data\" or run initdb\nwith an argument other than \"/var/lib/postgresql/10/data\".", "stderr_lines": ["Unable to find image 'tianon/postgres-upgrade:9.6-to-10' locally", "Trying to pull repository docker.io/tianon/postgres-upgrade ... ", "9.6-to-10: Pulling from docker.io/tianon/postgres-upgrade", "d599a449871e: Already exists", "eadd55e4a4ae: Already exists", "17eea069a47f: Already exists", "22b703021b03: Already exists", "5fa72174baec: Already exists", "338e0b17322b: Already exists", "05fd528a5e36: Already exists", "c224328d751f: Already exists", "f4319784a7ce: Pulling fs layer", "6b0ef024e116: Pulling fs layer", "5bc4176bd4c3: Pulling fs layer", "79c29b3c031a: Pulling fs layer", "63b5329afa6d: Pulling fs layer", "55f0468f4dda: Pulling fs layer", "c4ff909e34cd: Pulling fs layer", "8d9339e0f627: Pulling fs layer", "240ab916af1f: Pulling fs layer", "c6a7751c19c9: Pulling fs layer", "79c29b3c031a: Waiting", "63b5329afa6d: Waiting", "55f0468f4dda: Waiting", "c4ff909e34cd: Waiting", "8d9339e0f627: Waiting", "240ab916af1f: Waiting", "c6a7751c19c9: Waiting", "5bc4176bd4c3: Verifying Checksum", "5bc4176bd4c3: Download complete", "6b0ef024e116: Verifying Checksum", "6b0ef024e116: Download complete", "79c29b3c031a: Verifying Checksum", "79c29b3c031a: Download complete", "63b5329afa6d: Verifying Checksum", "63b5329afa6d: Download complete", "55f0468f4dda: Verifying Checksum", "55f0468f4dda: Download complete", "c4ff909e34cd: Verifying Checksum", "c4ff909e34cd: Download complete", "240ab916af1f: Download complete", "c6a7751c19c9: Verifying Checksum", "c6a7751c19c9: Download complete", "8d9339e0f627: Verifying Checksum", "8d9339e0f627: Download complete", "f4319784a7ce: Verifying Checksum", "f4319784a7ce: Download complete", "f4319784a7ce: Pull complete", "6b0ef024e116: Pull complete", "5bc4176bd4c3: Pull complete", "79c29b3c031a: Pull complete", "63b5329afa6d: Pull complete", "55f0468f4dda: Pull complete", "c4ff909e34cd: Pull complete", "8d9339e0f627: Pull complete", "240ab916af1f: Pull complete", "c6a7751c19c9: Pull complete", "Digest: sha256:2d6b609fcbf7e41e874108dde69345a896b43450875477a74d8548614eba97bd", "Status: Downloaded newer image for docker.io/tianon/postgres-upgrade:9.6-to-10", "initdb: directory \"/var/lib/postgresql/10/data\" exists but is not empty", "If you want to create a new database system, either remove or empty", "the directory \"/var/lib/postgresql/10/data\" or run initdb", "with an argument other than \"/var/lib/postgresql/10/data\"."], "stdout": "The files belonging to this database system will be owned by user \"postgres\".\nThis user must also own the server process.\n\nThe database cluster will be initialized with locale \"en_US.utf8\".\nThe default database encoding has accordingly been set to \"UTF8\".\nThe default text search configuration will be set to \"english\".\n\nData page checksums are disabled.", "stdout_lines": ["The files belonging to this database system will be owned by user \"postgres\".", "This user must also own the server process.", "", "The database cluster will be initialized with locale \"en_US.utf8\".", "The default database encoding has accordingly been set to \"UTF8\".", "The default text search configuration will be set to \"english\".", "", "Data page checksums are disabled."]}

PLAY RECAP *****************************************************************************************************************************************************************************************************************
localhost                  : ok=8    changed=0    unreachable=0    failed=1    skipped=1    rescued=0    ignored=0   
```

However, running the docker run command manually worked fine and I was able to upgrade succesfully.

```
docker run --rm -v /opt/pgdocker/pgdata:/var/lib/postgresql/9.6/data:Z -v /opt/pgdocker/pgdatanew:/var/lib/postgresql/10/data:Z -e PGUSER=awx -e POSTGRES_INITDB_ARGS="-U awx" tianon/postgres-upgrade:9.6-to-10 --username=awx
```

So in order to get the upgrade working I have to skip the ansible playbook upgrade part and run the above docker run command manually.

user: nicolaibaralmueller
issue_5380: state: open
title: Playbooks ran as command inside other playbooks give garbage stdout characters
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Extremely strange behavior is observed in event stdout for a task that runs an ansible-playbook command

##### ENVIRONMENT
* AWX version: 9.0.1
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  2.9
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

Run a job using this playbook

https://github.com/AlanCoding/test-playbooks/blob/nested/nested_debug.yml

view the stdout for the only task in the playbook

##### EXPECTED RESULTS

same as CLI results

```
    "delta": "0:00:01.160476",
    "end": "2019-11-21 20:00:57.208672",
    "invocation": {
        "module_args": {
            "_raw_params": "ansible-playbook -i localhost, debug.yml",
            "_uses_shell": false,
            "argv": null,
            "chdir": null,
            "creates": null,
            "executable": null,
            "removes": null,
            "stdin": null,
            "stdin_add_newline": true,
            "strip_empty_ends": true,
            "warn": true
        }
    },
    "rc": 0,
    "start": "2019-11-21 20:00:56.048196",
    "stderr": "",
    "stderr_lines": [],
    "stdout": "\nPLAY [all] *********************************************************************\n\nTASK [debug] *******************************************************************\nok: [localhost] => {\n    \"msg\": \"hello\"\n}\n\nPLAY RECAP *********************************************************************\nlocalhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   ",
    "stdout_lines": [
        "",
        "PLAY [all] *********************************************************************",
        "",
        "TASK [debug] *******************************************************************",
        "ok: [localhost] => {",
        "    \"msg\": \"hello\"",
        "}",
        "",
        "PLAY RECAP *********************************************************************",
        "localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   "
    ]
}
META: ran handlers
META: ran handlers

PLAY RECAP ******************************************************************************************************************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   


```

##### ACTUAL RESULTS

<img width="1397" alt="Screen Shot 2019-11-21 at 8 07 48 PM" src="https://user-images.githubusercontent.com/1385596/69389635-9d31b980-0c9a-11ea-8c97-c24092aaa013.png">


##### ADDITIONAL INFORMATION

leaky environment stuff from ansible-runner, just wanted to get a concrete test case established here.

user: AlanCoding
issue_5376: state: open
title: RFE: make "is_containerized" a filterable field on instance group list page
body: ##### ISSUE TYPE
 - Feature Idea
Right now we cannot filter the instance groups list based on `is_containerized`

e.g. when I do `https://127.0.0.1:8043/api/v2/instance_groups/?is_containerized=false` I get this error:
```
HTTP 400 Bad Request
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
X-API-Node: awx
X-API-Query-Count: 0
X-API-Query-Time: 0.000s
X-API-Time: 0.011s

{
    "detail": "InstanceGroup has no field named 'is_containerized'"
}
```

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Allow API clients to filter results of `GET` to `api/v2/instance_groups` based upon the `is_containerized` field.

@appuk noticed this
user: kdelee
issue_5369: state: open
title: Beautify workflow node links in workflow visualiser
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Idea


##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI

##### SUMMARY
As an AWX user I should be seeing cleaner looking links between the nodes in workflow visualiser when I have a workflow with higher number of nodes

##### ENVIRONMENT
* AWX version: 3.5.2

##### STEPS TO REPRODUCE

Create a workflow which has multiple branches and is long enough to make it ugly

##### EXPECTED RESULTS

More standard looking links. For example rather than connecting two nodes in _'Eucliedian'_ manner, maybe something which takes a _'Manhattan'_ distance to make it look more natural and avoid the _ node links _ to go being the nodes crossing other _ node links _


user: Uttam92477
issue_5353: state: open
title: Allow for exportable version of Workflow Visualizer.
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
It would be nice to be able to export the images to be used in reports, wiki pages, or documentation of specific workflows. 

eg. as a Graphviz dot, NROFF pic or SVG
user: gamuniz
issue_5347: state: open
title: Allow showing additional information based on variables in list of Jobs
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
The Jobs page currently lists all Job executions but you're unable to see which particular extra variables a Job was executed with. For instance, imagine you have a deployment Job that's just called `Deployment` but there's also a survey associated with the Job that allows users to specify which application they want to deploy.

It would be nice to see which application was deployed in the list of Jobs but currently you'd only see:

- `Deployment`
- `Deployment`
- `Deployment`
- `Deployment`
- `Deployment`

but that's not super useful. It would be nice to be able to choose extra variables that'd be displayed on this list. It'd then look like this:

- `Deployment (app_name: "a")`
- `Deployment (app_name: "b")`
- `Deployment (app_name: "c")`
- `Deployment (app_name: "d")`
- `Deployment (app_name: "e")`

I think it'd be fairly easy to implement but also very useful.
user: svenstaro
issue_5323: state: open
title: Implement some kind of webhook filtering
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

While trying to make use of our initial webhook implementation, I am struggling with getting GitHub's events to do the Expected Thing™ in AWX.

There is the option to "Send me everything." or "Let me select individual events.", but unfortunately the latter option does not behave intuitively in a(t least one) key way: Checking "Pull requests" will send you events for:

> Pull request opened, closed, reopened, edited, assigned, unassigned, review requested, review request removed, labeled, unlabeled, synchronized, ready for review, locked, or unlocked.

Note the absence of "comment" here. In order to receive a webhook when someone comments on a Pull request, you must select "Issue comments". This would mean we launch a job for every comment, whether or not it is on an Issue or Pull request. Ouch.

The more I explore this feature, it seems to me that we need some type of pre-launch filtering to allow AWX (or the user via configuration?) to decide whether or not we launch a job for any given event. It would be great to be able to check "Send me everything" and have AWX be smart enough to launch a job or ignore it, as I don't think the example I've provided here will be the only scenario where we need this type of functionality.
user: shanemcd
issue_5322: state: open
title: Can't authenticate with pubkey to remote hosts
body: ##### ISSUE TYPE
 - Bug Report
- Feature Idea

##### SUMMARY
I have upgraded from 6.1.0 to 9.0.1. Now I can't authenticate to my remote hosts with a DSA key. After troubleshooting, I discovered that the ssh-client in the new awx-celery image was upgraded to 7.8 from 6.x. This version doesn't like DSA keys. I went inside the container and edited the ssh_config file and added:

`Host *
User s.a.awx
HostKeyAlgorithms +ssh-dss
PubkeyAcceptedKeyTypes +ssh-dss`

Now from the shell, I can ssh to my remote hosts. So I tried to add these to the ansible config file in the ssh_args variable.

`ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s -o Host=* -o User=s.a.awx -o HostKeyAlrogithms=+ssh-dss -o PubkeyAcceptedTypes=+ssh-dss`

The problem is I'm not sure which ansible.cfg file I need to modify since there are a bunch. I tried:
/etc/ansible/ansible.cfg
/var/lib/awx/projects/_10__automation_ansible/ansible.cfg (_10_automation_ansible is my project name so I assumed this would be a cfg just for that project).

It didn't work. If I debug my job in awx I can't see that the args I've added are sent. This is what it sends:

`SSH: EXEC ssh -vvv -o ControlMaster=auto -o ControlPersist=60s -o PreferredAuthentications=publickey -o StrictHostKeyChecking=no -o Port=22 -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="s.a.awx"' -o ConnectTimeout=10 -o ControlPath=/tmp/ansible-ssh-%h-%p-%r`

Where is the ansible.cfg file that I need to modify in order for this to work? 
Also, please expose the ansible related configurations at installation because digging through the venvs in the container is pretty cumbersome as you can see. So the ansible.cfg and vault-pw files would be nice.

##### ENVIRONMENT
* AWX version: 9.0.1
* AWX install method: kubernetes
* Ansible version:  2.8.5
* Operating System: CentOS7

##### STEPS TO REPRODUCE

1. Configure a Machine Type credential in AWX and use a DSA key
2. Run any job that uses that credential on any host

##### EXPECTED RESULTS

Connection succeeding and running the play.

##### ACTUAL RESULTS

The public key is refused during authentication.



user: AdrianDutu
issue_5283: state: open
title: Perf stats gathering doesn't work in containerized execution
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Due to the way that it uses cgroups, it doesn't work in containers (nested cgroups with different Linux versions) We need to solve this in a proper manner.

##### ENVIRONMENT
* AWX version: current

user: wenottingham
issue_5282: state: open
title: please provide msg of debug module on standard output without whole json
body: ##### ISSUE TYPE
 - Feature Idea

please provide msg of debug module on standard output without whole json

ISSUE TYPE
Feature Idea
when calling
```
debug:
  msg:  " disk is {{ item.disk_size }}
```
I want to see only msg on standard output, not whole json of item. Currently in Tower I can see only json



ADDITIONAL INFORMATION

with several playbooks we getting huge json, where msg: is somewhere in the middle. this is completely anti-user-friendly. all we want is msg output

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

user: peterducai
issue_5258: state: open
title: unable to install 9.0.1
body: ##### ISSUE TYPE
I'm trying to upgrade my AWX installation to 9.0.1

##### SUMMARY
I'm trying to ugrade an existing AWX which has been installed in a local docker from self built images (to have https), and the process fails with this error:

TASK [local_docker : Stop AWX before upgrading postgres] *********************************************************************************************
[DEPRECATION WARNING]: The 'docker_service' module has been renamed to 'docker_compose'.. This feature will be removed in version 2.12. Deprecation 
warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
fatal: [localhost]: FAILED! => {"changed": false, "errors": [], "module_stderr": "", "module_stdout": "", "msg": "Error starting project 404 Client Error: Not Found (\"pull access denied for awx_web, repository does not exist or may require 'docker login': denied: requested access to the resource is denied\")"}
##### ENVIRONMENT
* AWX version: 9.0.1
* AWX install method: docker on linux
* Ansible version:  2.9.0
* Operating System: openSUSE Leap 15.1

##### STEPS TO REPRODUCE

git pull https://github.com/ansible/awx 9.0.1
cd awx/installer
(edit inventory for the paths and certificates i'm using)
ansible-playbook -i ../../inventory.mine install.yml 


##### EXPECTED RESULTS

I expect a working AWX

##### ACTUAL RESULTS

Install died, see above for error.


user: lemmy04
issue_5257: state: open
title: Search while typing
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Real-time search while typing for templates, credentials, projects, inventories, etc.

The current implementation of the searching works as type->submit->search, which may be changed to search while typing. Finding something specific would be faster and more comfortable for the user.

It is known as "*Incremental search*".
user: europ
issue_5245: state: open
title: Support for PUT'ing a list of related ids to a related endpoint
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
I'll use Job Templates as an example because that resource probably has the most related resources hanging off of it where this would be helpful.

Scenario:  Edit a job template and add 5 new instance groups.  Right now, the UI has to make 6 different REST calls to achieve this.  The first is a GET request on the instance groups to get the latest list of instance groups to compare our current list against.  After that, 5 POST requests (one for each changed IG).

What we're asking for is the ability to make a single request (PUT?) to `/api/v2/job_templates/:id/instance_groups` with an array of id's to completely overwrite the list of related resources.  

I've used instance groups as an example but the hope is that this pattern can be applied to other related resources as well.

Note: the expectation is that the existing associate/disassociate pattern for related resources will remain intact.  This solution would be an alternative to that pattern whereby a consumer of the API could provide a definitive list of related id's.

Something that we'll have to think about is error handling.  If a consumer of the API attempts to pass an ID that does not exist or that they don't have access to: What's the expected behavior?  We may already have a pattern for this type of thing :shrug:

As far as usage in the UI the expectation here would be this would be used in ui_next and not the existing AWX UI.

user: mabashian
issue_5237: state: open
title: Satellite 6 inventory source unable to update after upgrade from 7.0.0
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
After upgrading I am unable to sync my inventory from satellite.

##### ENVIRONMENT
* AWX version: 9.0.1
* AWX install method: docker on linux
* Ansible version:  2.8.5
* Operating System: RHEL 7.7
* Web Browser: Chrome 78.0.3904.87

##### STEPS TO REPRODUCE

Clicked refresh for "Red Hat Satellite 6" source.

##### EXPECTED RESULTS

Expected the inventory to be refreshed.

##### ACTUAL RESULTS

Got an error: 
HTTPS request is being made. Adding certificate verification is strongly
advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-
warnings   InsecureRequestWarning) Traceback (most recent call last):   File
"/var/lib/awx/venv/awx/lib64/python3.6/site-
packages/awx/plugins/inventory/foreman.py", line 462, in <module>
sys.exit(not ForemanInventory().run())   File
"/var/lib/awx/venv/awx/lib64/python3.6/site-
packages/awx/plugins/inventory/foreman.py", line 456, in run
self.get_inventory()   File "/var/lib/awx/venv/awx/lib64/python3.6/site-
packages/awx/plugins/inventory/foreman.py", line 404, in get_inventory
self.update_cache()   File "/var/lib/awx/venv/awx/lib64/python3.6/site-
packages/awx/plugins/inventory/foreman.py", line 352, in update_cache
self.facts[dns_name] = self._get_facts(host)   File
"/var/lib/awx/venv/awx/lib64/python3.6/site-
packages/awx/plugins/inventory/foreman.py", line 244, in _get_facts     ret =
self._get_facts_by_id(host['id'])   File
"/var/lib/awx/venv/awx/lib64/python3.6/site-
packages/awx/plugins/inventory/foreman.py", line 221, in _get_facts_by_id
return self._get_json(url)   File "/var/lib/awx/venv/awx/lib64/python3.6/site-
packages/awx/plugins/inventory/foreman.py", line 186, in _get_json
ret.raise_for_status()   File "/var/lib/awx/venv/ansible/lib/python3.6/site-
packages/requests/models.py", line 940, in raise_for_status     raise
HTTPError(http_error_msg, response=self) requests.exceptions.HTTPError: 500
Server Error: Internal Server Error for url: https://<satellite-server>/api/v2/hosts/840/facts?per_page=250&page=1


File "/usr/lib/python3.6/site-packages/ansible/inventory/manager.py", line 268, in parse_source
    plugin.parse(self._inventory, self._loader, source, cache=cache)
  File "/usr/lib/python3.6/site-packages/ansible/plugins/inventory/script.py", line 161, in parse
    raise AnsibleParserError(to_native(e))
 [WARNING]: Unable to parse /var/lib/awx/venv/awx/lib64/python3.6/site-
packages/awx/plugins/inventory/foreman.py as an inventory source
ERROR! No inventory was parsed, please check your configuration and options.


user: jschilen
issue_5230: state: open
title: Invalid search term entered. GET returned: -1 when trying to access Jobs list.
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Clicking on web ui elements after remaining idle on the current page for around 2 minutes, produces `Invalid search term entered. GET returned: -1`.

Docker container awx_web shows the following error message:

```
x.x.x.x - - [04/Nov/2019:16:04:10 +0000] "OPTIONS /api/v2/unified_jobs/ HTTP/1.1" 200 10336 "https://awx.local/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0" "x.x.x.x"
[pid: 131|app: 0|req: 282/1127] x.x.x.x () {48 vars in 2502 bytes} [Mon Nov  4 16:04:09 2019] OPTIONS /api/v2/unified_jobs/ => generated 10336 bytes in 382 msecs (HTTP/1.1 200) 10 headers in 398 bytes (1 switches on core 0)
2019/11/04 16:04:11 [crit] 126#0: *1416 open() "/var/lib/nginx/tmp/uwsgi/2/03/0000000032" failed (13: Permission denied) while reading upstream, client: x.x.x.x, server: _, request: "GET /api/v2/unified_jobs/?page_size=20&order_by=-finished&not__launch_type=sync HTTP/1.1", upstream: "uwsgi://127.0.0.1:8050", host: "awx.local", referrer: "https://awx.local/"
x.x.x.x - - [04/Nov/2019:16:04:11 +0000] "GET /api/v2/unified_jobs/?page_size=20&order_by=-finished&not__launch_type=sync HTTP/1.1" 200 47895 "https://awx.local/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0" "x.x.x.x"
[pid: 130|app: 0|req: 246/1128] x.x.x.x () {48 vars in 2590 bytes} [Mon Nov  4 16:04:09 2019] GET /api/v2/unified_jobs/?page_size=20&order_by=-finished&not__launch_type=sync => generated 85316 bytes in 1535 msecs (HTTP/1.1 200) 8 headers in 233 bytes (1 switches on core 0)
```

It seems to only happen when you are on the job template page and you want to navigate to the job list afterwards.
A full refresh of the website: Dashboard and ctrl + f5 seems to fix the problem.

##### ENVIRONMENT
* AWX version: 9.0.0
* AWX install method: docker-compose
* Ansible version:  2.8.5
* Operating System: Ubuntu 16.04
* Web Browser: Firefox/Chrome

##### STEPS TO REPRODUCE

clicking on Job Templates -> Waiting around 1-2 minutes -> clicking on Jobs

##### EXPECTED RESULTS

Navigating through the web ui is working correctly.

##### ACTUAL RESULTS

Navigating after remaining on the web ui without any action produces the error.

##### ADDITIONAL INFORMATION

![grafik](https://user-images.githubusercontent.com/21036205/68136824-32585280-ff26-11e9-9001-944b37e2708f.png)


user: jon-rei
issue_5223: state: open
title: Organizations admin is unable to add users to organizations
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Unable to add users to organizations with Admin access to organizations. Only system administrator is able to add users to organizations.

##### ENVIRONMENT
* AWX version: 8.0.0
* AWX install method: docker
* Ansible version: 2.8.5
* Operating System: RHEL 7
* Web Browser: Google Chrome

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->

##### EXPECTED RESULTS

I was able to add users to organizations in AWX 2.X.X version

##### ACTUAL RESULTS

<!-- What actually happened? -->

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: balaramr
issue_5219: state: open
title: awxkit: name__in filter returns empty when key contains whitespaces even though value is present
body: ##### ISSUE TYPE

 - Bug Report

##### SUMMARY

When a key specified in a `name__in` filter contains whitespace, then nothing is returned even though the key exists.

##### ENVIRONMENT

  - N/A

##### STEPS TO REPRODUCE

Example: `inv_source.get_related('groups', name__in='foo bar').results` will fail even though `foo bar` is present.

##### EXPECTED RESULTS

  - Proper value to be returned when `name__in` key contains whitespace

##### ACTUAL RESULTS

  - Empty value

##### ADDITIONAL INFORMATION

  - N/A
user: Spredzy
issue_5214: state: open
title: AWX fails to upgrade DB when upgrading to 8.0.0+
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
AWX fails to upgrade DB when upgrading to 8.0.0

##### ENVIRONMENT
* AWX version: 8.0.0
* AWX install method: docker
* Ansible version:  2.8.5
* Operating System: CentOS 7.7
* Web Browser: Safari

##### STEPS TO REPRODUCE

I have a pre-existing version of AWX, installed around 1.x, and upgraded to each major release from 2.x to 7.x

Now when upgrading to 8.0.0, the following error in thrown :

```
{  
   "changed":true,
   "cmd":"docker run --rm  -v /var/lib/pgdocker/pgdata:/var/lib/postgresql/9.6/data  -v /var/lib/pgdocker/10/data:/var/lib/postgresql/10/data  -e PGUSER=awx -e POSTGRES_INITDB_ARGS=\"-U awx\"  tianon/postgres-upgrade:9.6-to-10 --username=awx\n",
   "delta":"0:00:18.502387",
   "end":"2019-11-02 23:15:58.742763",
   "msg":"non-zero return code",
   "rc":1,
   "start":"2019-11-02 23:15:40.240376",
   "stderr":"Unable to find image 'tianon/postgres-upgrade:9.6-to-10' locally\nTrying to pull repository docker.io/tianon/postgres-upgrade ... \n9.6-to-10: Pulling from docker.io/tianon/postgres-upgrade\n80369df48736: Already exists\nb18dd0a6efec: Already exists\n5c20c5b8227d: Already exists\nc5a7f905c8ec: Already exists\n5a3f55930dd8: Already exists\nffc097878b09: Already exists\n3106d02490d4: Already exists\n88d1fc513b8f: Already exists\nf19250dffc5e: Pulling fs layer\n756351b7a443: Pulling fs layer\n0d24b08575ba: Pulling fs layer\n31babd3be108: Pulling fs layer\n16f2724dc303: Pulling fs layer\n69802daaa561: Pulling fs layer\n438bfdc24a14: Pulling fs layer\nfa98d6d574b2: Pulling fs layer\n5ad633827764: Pulling fs layer\n6a047a7ec007: Pulling fs layer\n31babd3be108: Waiting\n16f2724dc303: Waiting\n69802daaa561: Waiting\n438bfdc24a14: Waiting\nfa98d6d574b2: Waiting\n5ad633827764: Waiting\n6a047a7ec007: Waiting\n0d24b08575ba: Verifying Checksum\n0d24b08575ba: Download complete\n756351b7a443: Verifying Checksum\n756351b7a443: Download complete\n31babd3be108: Verifying Checksum\n31babd3be108: Download complete\n16f2724dc303: Verifying Checksum\n16f2724dc303: Download complete\nf19250dffc5e: Verifying Checksum\nf19250dffc5e: Download complete\n69802daaa561: Verifying Checksum\n69802daaa561: Download complete\n438bfdc24a14: Verifying Checksum\n438bfdc24a14: Download complete\nfa98d6d574b2: Verifying Checksum\nfa98d6d574b2: Download complete\n6a047a7ec007: Verifying Checksum\n6a047a7ec007: Download complete\n5ad633827764: Verifying Checksum\n5ad633827764: Download complete\nf19250dffc5e: Pull complete\n756351b7a443: Pull complete\n0d24b08575ba: Pull complete\n31babd3be108: Pull complete\n16f2724dc303: Pull complete\n69802daaa561: Pull complete\n438bfdc24a14: Pull complete\nfa98d6d574b2: Pull complete\n5ad633827764: Pull complete\n6a047a7ec007: Pull complete\nDigest: sha256:15e1a8cd6426d8f312f29c973d48ff98b246a1392756495f819bbcc9e84080c6\nStatus: Downloaded newer image for docker.io/tianon/postgres-upgrade:9.6-to-10",
   "stderr_lines":[  
      "Unable to find image 'tianon/postgres-upgrade:9.6-to-10' locally",
      "Trying to pull repository docker.io/tianon/postgres-upgrade ... ",
      "9.6-to-10: Pulling from docker.io/tianon/postgres-upgrade",
     [...]
      "Digest: sha256:15e1a8cd6426d8f312f29c973d48ff98b246a1392756495f819bbcc9e84080c6",
      "Status: Downloaded newer image for docker.io/tianon/postgres-upgrade:9.6-to-10"
   ],
   "stdout":"Performing Consistency Checks\n-----------------------------\nChecking cluster versions                                   ok\nChecking database user is the install user                  \ndatabase user \"awx\" is not the install user\nFailure, exiting",
   "stdout_lines":[  
      "Performing Consistency Checks",
      "-----------------------------",
      "Checking cluster versions                                   ok",
      "Checking database user is the install user                  ",
      "database user \"awx\" is not the install user",
      "Failure, exiting"
   ]
}
```

##### EXPECTED RESULTS

Database should upgrade successfully

##### ACTUAL RESULTS

Database upgrade fails

user: ybizeul
issue_5209: state: open
title: Add Support for BitBucket webhooks
body: ##### ISSUE TYPE
- Feature Request

##### SUMMARY
Restore commit 885841caeaea0f7c86d39d6e7a66b960124289c2 to add support for BitBucket webhooks, since Server edition supports signed payloads and Cloud edition suggests IP Whitelists ([manage webhooks](https://confluence.atlassian.com/bitbucket/manage-webhooks-735643732.html) and [ip whitelist](https://confluence.atlassian.com/bitbucket/what-are-the-bitbucket-cloud-ip-addresses-i-should-use-to-configure-my-corporate-firewall-343343385.html))

@jbradberry 
user: bkmeneguello
issue_5133: state: open
title: Remember last active view type (Compact/Expanded) in all lists
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
The Compact / Expanded selection in the Jobs tab/view resets after leaving the page. I'd like it to be saved for each user as per last preference.

user: svenstaro
issue_5097: state: open
title: [RFE] Add "retries" to Tower Workflows
body: Add the ability to easily run re-tries of jobs through workflows rather than having to program those into playbooks.
user: pgozart
issue_5096: state: open
title: [RFE] Dynamically populate workflows with child job templates
body: Please add dynamic aggregation/population of workflow surveys with the required answers from child job templates of the workflow.
user: pgozart
issue_5094: state: open
title: Fresh install of AWX 8.0.0 - cannot authenticate with password defined in inventory
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Unable to authenticate with a fresh install of AWX 8.0.0 using password defined in inventory file - special characters in filename.

##### ENVIRONMENT
* AWX version: 8.0.0
* AWX install method: docker on linux
* Ansible version:  2.8.6
* Operating System: Ubuntu 18.04.3 Server
* Web Browser: Chrome on Windows 10

##### STEPS TO REPRODUCE

1. Build a fresh install of Ubuntu 18.04.3 Server.
2. Install Docker CE, Ansible 2.8.6, python-docker, docker-compose (binary + Python module from pip).
3. Clone awx and awx-logos repos side by side.
4. Complete awx/installer/inventory - set admin password to something with special characters. I can't share our actual password, but it began with a "\" and ended with a ";" - there were other non-alphanumeric in there too. The same password was used on AWX 6.1.0 successfully.
5. Build containers from scratch to enable SSL cert additions.
6. It is impossible to log into the newly created instance with the admin user and password specified in the installation inventory.

##### EXPECTED RESULTS

AWX installs and it is possible to log in using the admin user and associated password from the installation inventory.

##### ACTUAL RESULTS

AWX returns an authentication failure. No errors report in any of the container logs.

##### ADDITIONAL INFORMATION

Could do with a documented method to reset the admin password in this instance. All the documentation I can find on the Internet requires tools like ```awx-manage```, or uses ```tower-cli``` (which implicitly assumes that authentication is already set up and working). ```tower-cli``` tested and cannot authenticate either.
user: jamesfreeman959
issue_5091: state: open
title: RFE: Adding custom links other than SUCCESS/FAILURE/ALWAYS
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Customer request:

Tower workflows are lacking a key feature of adding custom links. Today, user can only choose SUCCESS, FAILURE & ALWAYS. But there is no way to have custom defined links. Users want to define custom link name and build workflows using those links. If Job template output is 405, it should take branch A, if Job template output is 407, it should take branch B,  so on...
user: msilmser
issue_5087: state: open
title: Unsupported browser check and advertisement
body: ##### ISSUE TYPE
 - Add an unsupported browser advertisement if applies on Tower login screen

##### SUMMARY
A lot of our support cases are regarding the browser compatibility. 
I would like to suggest to add this check before of logging on Tower.

Thanks.

user: zaskan
issue_5076: state: open
title: [RFE] Allow Approle and LDAP/AD Auth Mechanisms for AWX/Hashicorp Vault Token Integration
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Currently, only static tokens are allowed as the inputs to integrate Hashicorp Vault with AWX.  Customer wants the following:

For Approle:
Input approle_id (which exists on the Hashicorp Vault side) in a Vault Signed SSH and Vault Secrets credential.  The resultant output of this will be the Secret Token being filled in and returned from the API call to Hashicorp Vault.
Docs >>>>> https://www.vaultproject.io/docs/auth/approle.html

For AD/LDAP:
Input username and password (AD/LDAP integration exists on the Hashicorp Vault side) in a Vault Signed SSH and Vault Secrets credential.  The resultant output of this will be the Secret Token being filled in and returned from the API call to Hashicorp Vault.
Docs >>>>> https://www.vaultproject.io/docs/auth/ldap.html

Each time the credential is used, this API call should be made and the secret token should be updated.  This will allow for short-lived TTLs on secret tokens and reduces the amount of manual effort to update secret tokens. 

user: hiyokotaisa
issue_5073: state: open
title: Add sparkline to inventory list rows for jobs that recently ran against inventory
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
The idea here is that we could replace this icon:

<img width="1486" alt="Screen Shot 2019-10-22 at 2 45 20 PM" src="https://user-images.githubusercontent.com/9889020/67319233-a8969700-f4da-11e9-9d0b-1d00639840e4.png">
<img width="1487" alt="Screen Shot 2019-10-22 at 2 45 26 PM" src="https://user-images.githubusercontent.com/9889020/67319235-a8969700-f4da-11e9-9120-0973f779a8f9.png">

With a sparkline of recent jobs (the same thing we show in the popover currently).  I don't think this will be possible without some API help though as we don't get this level of information from the API currently on the `inventories` endpoint.  We currently make an extra request when the user clicks on the circular status icon in order to fetch recent jobs.

user: mabashian
issue_5071: state: open
title: Allow specifying playbook directory via ansible.cfg in inventory imports
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
When an inventory import is ran, the CLI option `--playbook-dir` is added to the `ansible-inventory` call with the directory that the inventory is in (or the directory itself if given a directory instead of a file).

Starting in Ansible 2.9, users can specify a custom playbook directory via the config.

https://github.com/ansible/ansible/blob/74f981688585ba611f4a625147068d20dc60cdb6/lib/ansible/config/base.yml#L1691-L1698

In order for this to be usable in AWX, we need to _not_ apply `--playbook-dir` if the config file has that `playbook_dir` setting.

Very similar issue to https://github.com/ansible/awx/issues/5019, but slightly different with no API interface or UI changes.

user: AlanCoding
issue_5060: state: open
title: Specify extra environment variables for job template
body: ##### ISSUE TYPE
 - Feature Idea/Question

##### SUMMARY
Is there any way to currently specify extra environment variables for a job template? I can specify extra environment variables for all jobs under `Settings -> Jobs`, but I haven't been able to find any way of doing this only for a single job or job template. More specifically I would like to specify the `display_skipped_hosts`-setting for a single job template without affecting the rest of the jobs.

user: dagstuan
issue_5041: state: open
title: ipv6 hosts not working with AWX Ansible container solution 
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug Report
 - Feature Idea
 - Documentation

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI
 - Installer

##### SUMMARY
<!-- Briefly describe the problem. -->

##### ENVIRONMENT
* AWX version: X.Y.Z
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  X.Y.Z
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

<!-- For bugs, please show exactly how to reproduce the problem. For new
features, show how the feature would be used.  -->

##### EXPECTED RESULTS

<!-- For bug reports, what did you expect to happen when running the steps
above? -->

##### ACTUAL RESULTS

<!-- For bug reports, what actually happened? -->

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: achhabr1
issue_5019: state: open
title: Allow specifying relative playbook directory path for inventory sources
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
As a follow up to [this discussion](https://github.com/ansible/awx/issues/3113#issuecomment-542775656), I think it makes sense to avoid having some kind of special logic to determine value for `--playbook-dir` option for inventory sources, when sourced from project, and simply allow users to put that value in relative to project root, same as you would do in cli. This is also consistent with how you can input a relative path for the inventory source file itself.

user: megakoresh
issue_5016: state: open
title: Reboot module fails by timeout
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Reboot module timeouts from AWX, but the same playbook run sucessfully from CLI.

##### ENVIRONMENT
* AWX version: 6.1.0
* AWX install method: docker compose
* Ansible version: 2.8.5 (Python version is upgraded to 3.6.8)
* Operating System: CentOS 7
* Web Browser: Google Chrome

##### STEPS TO REPRODUCE

Run a simple playbook from AWX as follows:
```
- name: reboot
  reboot:
```

##### EXPECTED RESULTS

The playbook ran successfully without timeout.

##### ACTUAL RESULTS

The playbook fails by timeout.
```
TASK [XXX : reboot] ************************************************************
fatal: [XXX]: FAILED! => {"changed": false, "elapsed": 608, "msg": "Timed out waiting for last boot time check (timeout=600)", "rebooted": true}
```

##### ADDITIONAL INFORMATION

When the log level is debug, the following log is displayed many times:
```
reboot: attempting to get system boot time
<XXX> ESTABLISH SSH CONNECTION FOR USER: XXX
<XXX> SSH: EXEC ssh -o ControlMaster=auto -o ControlPersist=10m -o ControlPath=/tmp/ansible-ssh-%h-%p-%r -o ConnectionAttempts=3 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="XXX"' -o ConnectTimeout=10 -tt XXX '/bin/sh -c '"'"'sudo -H -S -n  -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-uzfkugngjniiaztnoyghqeixtehheusb ; cat /proc/sys/kernel/random/boot_id'"'"'"'"'"'"'"'"' && sleep 0'"'"''
<XXX> (141, b'', b'Shared connection to XXX closed.\\r\\n')
<XXX> Failed to connect to the host via ssh: Shared connection to XXX closed.
```
user: aajisaka
issue_5014: state: open
title: Jobs get scheduled after schedule time when awx stucks in that time
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Today we learned that AWX will schedule jobs after the initial schedule time. This happens when AWX isn't able to schedule any jobs (in our case no space left on device).

What did happen exactly: Over the night we had scheduled jobs which should update some production systems. A few hours before the disk space was full so AWX stopped working, no jobs where scheduled. 

In the morning we saw the problem and freed some disk space. But then AWX started all jobs which were scheduled for the night and so ansible did its job well on shutting down systems for upgrades.

The only thing we could have done to avoid this is to immediately cancel all jobs manual but this would still caused outage because the jobs starting very quickly. (which is good by the way)

Is there any way to solve this issue or prevent that from happening? 
I did some testing if the tasks where in some of rabbitmq queue, then I could limit those with the TTL set. But thats not the case, AWX schedules jobs just 2 Hours later.

 
##### ENVIRONMENT
* AWX version: 6.1.0
* AWX install method: docker on linux
* Ansible version:  2.8.2
* Operating System: Redhat 7
* Web Browser: Chrome on Mac

##### STEPS TO REPRODUCE

Schedule a job over the next 15min. 
Fill up disk space `dd if=/dev/zero of=/var/lib/wasteofspace .....`
AWX is not scheduling anything.

Free the space on the disk again after 20min and then your last schedule will run out of schedule.

##### EXPECTED RESULTS

No job schedule should be executed after the last schedule time.

user: mkayontour
issue_5011: state: open
title: Activity stream entry for ad hoc command creation has no links
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Ad hoc commands in the UI do not link to anything, but they should logically link to:

 - the ad hoc command itself
 - the inventory for the ad hoc command

##### ENVIRONMENT
* AWX version: 7.0.0
* AWX install method: docker for mac
* Ansible version:  N/A
* Operating System: Mac OS
* Web Browser: Chrome

##### STEPS TO REPRODUCE

Run an ad hoc command

find this action via the "all activity" in the activity stream heartbeat icon link from the dashboard

##### EXPECTED RESULTS

Links

##### ACTUAL RESULTS

no links

![Screen Shot 2019-10-14 at 2 06 56 PM](https://user-images.githubusercontent.com/1385596/66773120-53c8a000-ee8c-11e9-8745-3d56b298ce66.png)

##### ADDITIONAL INFORMATION

API data for this entry:

```json
{
    "id": 7361,
    "type": "activity_stream",
    "url": "/api/v2/activity_stream/7361/",
    "related": {
        "actor": "/api/v2/users/1/",
        "ad_hoc_command": [
            "/api/v2/ad_hoc_commands/443/"
        ]
    },
    "summary_fields": {
        "ad_hoc_command": [
            {
                "id": 443,
                "name": "ping",
                "status": "successful",
                "limit": ""
            }
        ],
        "actor": {
            "id": 1,
            "username": "admin",
            "first_name": "",
            "last_name": ""
        }
    },
    "timestamp": "2019-10-14T18:03:03.001087Z",
    "operation": "create",
    "changes": {
        "job_type": "run",
        "inventory": "Inventory - ShapeMedia돻-101",
        "limit": "",
        "credential": "Credential - StandMapﮈ-145",
        "module_name": "ping",
        "module_args": "",
        "forks": 0,
        "verbosity": 0,
        "extra_vars": "",
        "become_enabled": false,
        "diff_mode": false,
        "id": 443
    },
    "object1": "ad_hoc_command",
    "object2": "",
    "object_association": "",
    "action_node": "awx",
    "object_type": ""
}
```

You can see the inventory info is missing, so the API will have to furnish this in order to link to the inventory.

The data needed to link to the ad hoc command, itself, is there.

user: AlanCoding
issue_5008: state: open
title: Cannot see all playbooks in project base directory
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
I cannot see all the playbooks in /var/lib/awx/projects

##### ENVIRONMENT
* AWX version: 7.0.0
* AWX install method: Direct installation
* Ansible version:  2.8.5
* Operating System: CentOS 7
* Web Browser: Chrome

##### STEPS TO REPRODUCE

I setup a root folder and inside that root folder made different directories with 

ansible-galaxy init test-role-1 

And then put my playbooks in there in tasks

##### EXPECTED RESULTS

I expected that all my playbooks would be visible

##### ACTUAL RESULTS

I only see the playbook inside test and test.yml Even If I copy that to other places and rename it I do not see it. It doesnt seem to be a syntax issue and I  also checked if it was permissions but they have the same as the test folder and the test.yml file

##### ADDITIONAL INFORMATION

Please ask if you need additional information
user: riahc3
issue_4982: state: open
title: change UI websocket deadbanding from hardcoded 5 seconds to a config option
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Right now, when we get websocket updates, we band requires so that we only do a REST query to refresh data at most once every 5 seconds.  This should actually be a defined option that can be tweaked (5 seconds is a fine default).


user: wenottingham
issue_4916: state: open
title: Set `external_account` to be filterable in the API
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Allow the `external_account` field to be filtered via the API. This will allow admins to filter out a list of local users vs external users inside of Tower.
user: msilmser
issue_4904: state: open
title: Login failure on fresh installs under specific conditions
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
This occurs when using CI container debug mode on a fresh install (see https://github.com/ansible/awx/tree/devel/awx/ui/test/e2e#ci-container-debugging) for details.

Essentially, when the E2E suite begins, a call with the GET here: https://github.com/ansible/awx/blob/devel/awx/ui/client/src/login/authenticationServices/authentication.service.js#L143 which calls `/me`. 

For some reason, in this scenario, and only on fresh runs of awx, this results in an exception thrown. So far, I've been unable to catch the error. Notable that sometimes it manifests itself on the api end with a 403 CSRF failure, and other times it just looks like a normal login, but the user is then immediately logged out thanks to exception handling in `https://github.com/ansible/awx/blob/9e778b24c72d474097e927326a4689f7c572681c/awx/ui/client/src/login/loginModal/loginModal.controller.js#L148`. 

I'd like an answer as to why this fails out, but haven't found one yet.

##### ENVIRONMENT
* AWX version: latest
* Web Browser: Chrome

##### STEPS TO REPRODUCE
Build a totally fresh awx (fresh database, etc). 
Run the npm command here, and fill in your username and password values:
 
```
docker-compose -f "awx/ui/test/e2e/cluster/docker-compose.yml" -f "awx/ui/test/e2e/cluster/docker-compose.devel-override.yml" -f "awx/ui/test/e2e/cluster/docker-compose.debug-override.yml" run -e AWX_E2E_CLUSTER_HOST="hub" -e AWX_E2E_CLUSTER_PORT="4444" -e AWX_E2E_URL="https://awx:8043" -e AWX_E2E_USERNAME="username" -e AWX_E2E_PASSWORD="password" e2e --verbose
```
use a VNC viewer like tigerVNC or similar, once the cluster_hub container starts, and visit localhost:5900 with it. password is the default value `secret`. If successful, you should see an ubuntu logo background as a default background for the viewer IF you're using tigerVNC.

The containers will take time to build, and roughly half the time, you will see the error manifest like this:

![Screenshot from 2019-10-03 09-46-41](https://user-images.githubusercontent.com/19942822/66157402-bbabfa80-e5f1-11e9-9d40-43fdafa515f2.png)

##### EXPECTED RESULTS
Login works

##### ACTUAL RESULTS
See screenshot
user: dsesami
issue_4902: state: open
title: Add pam2 support for secrets management
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Add pam2 support for secret management so that centrify secrets can be imported into the AWX/Tower DB via the centrify API.

user: mrmibrown
issue_4884: state: open
title: Different Expiration times for PAT & App tokens
body: ##### ISSUE TYPE
 - Enhancement/Feature

##### SUMMARY
More backstory here: https://github.com/ansible/awx/issues/2277

OAuth2 Token Expiration times should have different default values for personal access tokens (PAT) and application tokens as they are used in different ways.  

Personal access tokens should be long-lived, if not infinite, as they don't have refresh tokens and are meant for personal integrations.  

Application tokens should be should lived (1 hour) by default, and should have a refresh token which expires by default 1 month after the expiration of the associated access token.  This will inherently be the more secure way to set up an app integration with tower.  

Ref: https://tools.ietf.org/html/rfc6749

For context, this is similar to how GitHub implemented PAT's and App tokens.  


##### ADDITIONAL INFORMATION

1. On creation, make PAT's live forever, no expiration.  (1000 years or no expiration if possible, like GitHub)
2. Make sure the `ACCESS_TOKEN_EXPIRE_SECONDS` only applies to app tokens - use the same token model if possible
3. Bump version of DOT to 1.2.0 if possible, now that Django 2.2.4 is being used by AWX
4. We will want some tests for this.
user: rooftopcellist
issue_4876: state: open
title: Adding vault KV backed machine credential and prompting for ssh key unlock process is awkward and painful
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->
The process to create and configure a machine credential programmatically is kind of awkward. As I understand it, one must:
- Create a Vault KV credential (must use awx cli, or curl directly)
- Create a machine credential with minimal data (name, kind, description, org, username) (can use `tower_credential`, awx cli, or curl directly)
- Update the machine credential to set `credential_input_sources` to use the previously created Vault KV credential (must use awx cli or curl directly)
- Update the machine credential to prompt for ssh key passphrase

This can all work via automation (Ansible itself) the first time though, and it results in a functional credential set. However the trouble is with the second run of the automation (hey it should be able to be run a bunch of times right?). The second step from above is ran and results in attempting to edit the machine credential, and seems to attempt to remove the  "prompt for ssh key passphrase" setting, but does not remove the configured input source for ssh_key data. This throws an error: `Response: {\"inputs\":{\"ssh_key_unlock\":[\"must be set when SSH key is encrypted.\"]}}`

##### ENVIRONMENT
* AWX version: 7.0.0 (patched with https://github.com/ansible/awx/pull/4807 )
* AWX install method: docker on linux
* Ansible version:  2.8.4
* Operating System: Debian Stretch
* Web Browser: Safari

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->

See the above summary.

##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->

I would like to be able to automate creation and updating of these credentials. I'd prefer not to have to jump through a bunch of hoops, checking to see if the credential exists before creating it for the first time with empty data.

##### ACTUAL RESULTS

<!-- What actually happened? -->

Errors, unless I only do the initial creation once.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

I realize that this is new feature and functionality, and that I'm making it more complicated by wanting to prompt for the SSH key unlock passphrase. I'm happy to work with developers on testing possible solutions. I can share my automation too if desired, once scrubbed of sensitive data.

user: omgjlk
issue_4870: state: open
title: Add option for exit 0 on entity already existing when using awx cli to create
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
I'd like to rely on some idempotence of the awx CLI for automating some setup of my AWX installs. In particular I have some automation to create credentials. I have to resort to the awx cli to create the credentials as they use a credential type that's not supported by the `tower_credential` module, and I also will need to make use of `credential_input_sources`. 

The problem I have is that after a credential is created, subsequent calls to create it fail with a message that the credential already exists. This makes crafting the task quite a bit awkward. I have to capture the output and process the strings to see if it is a real failure or just an "already exists".

Either custom return codes, or an option to return 0 on Duplicate would be appreciated here.

(neither of these solve the issue of UPDATING some of the data that goes into a credential, that will require some additional shenanigans)

user: omgjlk
issue_4855: state: open
title: VMWare Sync: Uniq ID DB issue
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Restored VM's cause uniq id failure

##### ENVIRONMENT
* AWX version: 6.1.0
* AWX install method:  docker on linux
* Ansible version:  2.8.3
* Operating System: Linux
* Web Browser: Chrome

##### STEPS TO REPRODUCE

When restoring a vm from a nightly backup image

##### EXPECTED RESULTS

postgres would be able to handle multiple key entries since vmware allows for such a thing.

##### ACTUAL RESULTS

Inventory Sync job is failing with the following message (hostname removed to protect the innocent):

```564.434 INFO     Processing JSON output...
  564.475 INFO     Loaded 31 groups, 1583 hosts
  564.517 WARNING  Host "SF-RH_7_Oracle_Single_420ebb40-de77-4552-5360-bdfccbddf55c" has no "config.instanceuuid" variable
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
psycopg2.IntegrityError: duplicate key value violates unique constraint "main_host_name_inventory_id_45aecd68_uniq"
DETAIL:  Key (name, inventory_id)=(<HOSTNAME>_420e3f78-7963-1524-9bd5-483f4779b877, 2) already exists.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django_pglocks/__init__.py", line 74, in advisory_lock
    yield acquired
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/utils/pglock.py", line 14, in advisory_lock
    yield internal_lock
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 893, in load_into_database
    self._create_update_hosts()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 771, in _create_update_hosts
    self._update_db_host_from_mem_host(db_host, mem_host)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 707, in _update_db_host_from_mem_host
    db_host.save(update_fields=update_fields)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/models/inventory.py", line 759, in save
    super(Host, self).save(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/models/base.py", line 316, in save
    super(PrimordialModel, self).save(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/models/base.py", line 164, in save
    super(CreatedModifiedModel, self).save(*args, **kwargs)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/db/models/base.py", line 741, in save
    force_update=force_update, update_fields=update_fields)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/db/models/base.py", line 779, in save_base
    force_update, using, update_fields,
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/db/models/base.py", line 851, in _save_table
    forced_update)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/db/models/base.py", line 900, in _do_update
    return filtered._update(values) > 0
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/db/models/query.py", line 760, in _update
    return query.get_compiler(self.db).execute_sql(CURSOR)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/db/models/sql/compiler.py", line 1429, in execute_sql
    cursor = super().execute_sql(result_type)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/db/models/sql/compiler.py", line 1100, in execute_sql
    cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
django.db.utils.IntegrityError: duplicate key value violates unique constraint "main_host_name_inventory_id_45aecd68_uniq"
DETAIL:  Key (name, inventory_id)=(pw1jiralink1001_420e3f78-7963-1524-9bd5-483f4779b877, 2) already exists.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/var/lib/awx/venv/awx/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==6.1.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 142, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 364, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 1148, in handle
    raise exc
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 1083, in handle
    self.load_into_database()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/inventory_import.py", line 895, in load_into_database
    self._create_update_group_hosts()
  File "/usr/lib64/python3.6/contextlib.py", line 99, in __exit__
    self.gen.throw(type, value, traceback)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/utils/pglock.py", line 14, in advisory_lock
    yield internal_lock
  File "/usr/lib64/python3.6/contextlib.py", line 99, in __exit__
    self.gen.throw(type, value, traceback)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django_pglocks/__init__.py", line 80, in advisory_lock
    cursor.execute(command)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/db/backends/utils.py", line 67, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/db/backends/utils.py", line 79, in _execute
    self.db.validate_no_broken_transaction()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/db/backends/base/base.py", line 438, in validate_no_broken_transaction
    "An error occurred in the current transaction. You can't "
django.db.transaction.TransactionManagementError: An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block.```


##### ADDITIONAL INFORMATION

Can provide on request.

user: mattch3wie
issue_4840: state: open
title: Remove 'variables' section from inventories/ api endpoint
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

If using the UI to manage top level inventory variables having a large list of variables can cause performance issues across the network. In some cases the calls are generating 7.2 MB worth of data on every job launch prompt. 

This data is already provided in the related section and is extraneous on the inventories/ endpoint
user: gamuniz
issue_4830: state: open
title: vault data syntax not accepted/honored in web gui
body: there was an issue but its closed.
i added two comments on it indicating that there might be insufficient justification for this state.
https://github.com/ansible/awx/issues/1992

any thoughts? maybe i am missing something in this respect - can it be the tools version i am using? but i dont think so for now.
user: AlexanderStohr
issue_4805: state: open
title: dashboard job connection monitoring.
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
A customer would like the ability to monitor a job for what system it is currently running on and how long it had been running on that system.  They have run into an issue where one system will not do what its supposed to, then "hang" the playbook for an extended period of time before failing and not hitting the remaining systems in the play.

They are looking for something similar to the following:

More of a dashboard that would update showing …

<Active JOB #>
<servername with active connection>                   <time its been working on the server>
<servername with active connection>                   <time its been working on the server>
<servername with active connection>                   <time its been working on the server>

<Active JOB #>
<servername with active connection>                   <time its been working on the server>
<servername with active connection>                   <time its been working on the server>
<servername with active connection>                   <time its been working on the server>

<Active JOB #>
<servername with active connection>                   <time its been working on the server>
<servername with active connection>                   <time its been working on the server>

Currently to check this they do the following:
#ps –ef | grep ansible
#netstat –ap

Cross reference the ansible job pid with the netstat connections it has.

Thanks you,
--James McD
user: jammcder
issue_4764: state: open
title: AWX Docker-Compose installation failed with Configuration error
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
command 
`ansible-playbook -i inventory install.yml`
failed with error:
```
TASK [local_docker : Stop AWX before upgrading postgres] *****************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Configuration error - \n        Can't find a suitable configuration file in this directory or any\n        parent. Are you in the right directory?\n\n        Supported filenames: docker-compose.yml, docker-compose.yaml\n        "}
```
inventory is localhost 

##### ENVIRONMENT
* AWX version: 7.0.0
* AWX install method: docker on linux
* Ansible version:  2.8.5
* docker-compose version: 1.24.1
* Operating System:  Debian GNU/Linux 9.4 (stretch)

##### STEPS TO REPRODUCE

git clone https://github.com/ansible/awx.git
cd awx/installer/
ansible-playbook -i inventory install.yml

##### EXPECTED RESULTS

AWX docker images to build successfully

##### ACTUAL RESULTS

```
PLAY [Build and deploy AWX] ***************************************************************************************************************

TASK [Gathering Facts] ***************************************************************************************************************
ok: [localhost]

TASK [check_vars : include_tasks] ***************************************************************************************************************
skipping: [localhost]

TASK [check_vars : include_tasks] ***************************************************************************************************************
included: /root/awx/awx/installer/roles/check_vars/tasks/check_docker.yml for localhost

TASK [check_vars : postgres_data_dir should be defined] ******************************************************************************************************
ok: [localhost] => {
    "changed": false, 
    "msg": "All assertions passed"
}

TASK [check_vars : host_port should be defined] **************************************************************************************************************
ok: [localhost] => {
    "changed": false, 
    "msg": "All assertions passed"
}

TASK [image_build]   # ALL ***************************************************************************************************************
ok: [localhost]
# with https://github.com/ansible/awx/issues/4759#issuecomment-532005413

TASK [image_push]   # ALL ***************************************************************************************************************
skipping: [localhost]


TASK [kubernetes]   # ALL ***************************************************************************************************************
skipping: [localhost]


TASK [local_docker : Check for existing Postgres data] *******************************************************************************************************
ok: [localhost]

TASK [local_docker : Record Postgres version] ****************************************************************************************************************
ok: [localhost]

TASK [local_docker : Determine whether to upgrade postgres] **************************************************************************************************
ok: [localhost]

TASK [local_docker : Set up new postgres paths pre-upgrade] **************************************************************************************************
ok: [localhost] => (item=/tmp/pgdocker/10/data)

TASK [local_docker : Stop AWX before upgrading postgres] *****************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Configuration error - \n        Can't find a suitable configuration file in this directory or any\n        parent. Are you in the right directory?\n\n        Supported filenames: docker-compose.yml, docker-compose.yaml\n        "}
        to retry, use: --limit @/root/.ansible-retry/install.retry

PLAY RECAP ***************************************************************************************************************
localhost                  : ok=8    changed=0    unreachable=0    failed=1   
```

##### ADDITIONAL INFORMATION

user: Lokks
issue_4763: state: open
title: Users - restrict user view
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
The current behavior is, that a normal user can see all other users, even those who are not in the same team. For security reasons it would be better to limit the view to team members.
user: Nemental
issue_4757: state: open
title: inventory localhost python
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
The inventory script defines the Python interpreter as `/usr/bin/env python` https://github.com/ansible/awx/blob/devel/installer/inventory#L1 which seems wrong to me. If you are calling Ansible and you want to use the Python that invokes Ansible then it should be set to `ansible_python_interpreter={{ansible_playbook_python}}`. Relying on the env vars could result in a different Python being used altogether and is a different behaviour from how Ansible itself works.

Happy for you to close the issue if you disagree but I wanted to at least let you know about `ansible_playbook_python`.

##### ENVIRONMENT
N/A
user: jborean93
issue_4698: state: open
title: [CLI] RFE: associate/dissociate instance groups to objects that use them
body: ##### ISSUE TYPE
 - Feature Idea

Currently we have associate/dissociate for notifications and credentials on job_templates.
Do not have this for instance groups.

Things that can have instance groups (may be more than this):
```
job_templates
inventories
organizations
```

##### MORE INFORMATION
<!-- Briefly describe the problem or desired enhancement. -->
It would show up as an option along side these other options;
```
awx job_templates associate
usage: awx job_templates associate [-h]
                                   (--start_notification  | --failure_notification  | --success_notification  | --credential )
                                   id

positional arguments:
  id

optional arguments:
  -h, --help            show this help message and exit
  --start_notification 
                        The ID (or name) of the notification_template to
                        associate
  --failure_notification 
                        The ID (or name) of the notification_template to
                        associate
  --success_notification 
                        The ID (or name) of the notification_template to
                        associate
  --credential          The ID (or name) of the credential to associate
```
user: kdelee
issue_4696: state: open
title: Resizing Custom Logo in Login Screen
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Currently, the only way to resize custom logo is by editing `app.XXXXXXXX.css` file under ~/awx/public/static/css/ but after every upgrade, the resized value is restored to the default one which is expected and the purpose of this RFE is to make sure that that resized vale is not changed even after an upgrade.
user: Ompragash
issue_4638: state: open
title: EKS cluster creation failing error "aws_eks_cluster module requires botocore >= 1.10.32"
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Trying to run ansible playbook to create aws eks cluster using aws_eks_cluster module, this I'm trying to run on latest version of awx i.e 6.1.0 having ansible version 2.8.2, this playbook works fine locally but on awx it gives error: "msg": "aws_eks_cluster module requires botocore >= 1.10.32"

##### ENVIRONMENT
* AWX version: 6.1.0
* AWX install method: kubernetes, and ubuntu server
* Ansible version:  2.8.2
* Operating System: ubuntu
* Web Browser: crome

##### STEPS TO REPRODUCE

Trying to run playbook via awx console

##### EXPECTED RESULTS

It should create eks cluster on AWS platform
 
##### ACTUAL RESULTS

"msg": "aws_eks_cluster module requires botocore >= 1.10.32"

##### ADDITIONAL INFORMATION
using aws_eks_cluster ansible module to create a cluster
user: deepti-cloudibility
issue_4575: state: open
title: RFE for CLI: Add short description from OPTIONS to "awx <resource> --help"
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Right now there is not much info about WHAT exactly each base resource is.

We have this information available from the `description` on the OPTIONS of the base object.
"description" from OPTIONS is alot of info though.

Perhaps this could be available if you pass
```
awx <resource> --help -v
```
OR....maybe there is a way we could add a `short_description` to the OPTIONS and provide this instead.

@ryanpetrello assigning you, but as we discussed this may punted to a later time. Feel free to un-assign if you want to wait on it.
user: kdelee
issue_4555: state: open
title: RFE: Allow `>` and `<` operators with EC2 Source Instance Filters
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Attempting to add an instance filter for `launch-time` in an EC2 source can be done similar to the following:

`launch-time=2019-08*`

This will import all hosts with a launch time in August of 2019, as expected. However, if you want to filter all hosts launched after that:

`launch-time=>2019-08*`

This will import 0 hosts. It seems any formatting with the greater than or less than conditionals will import 0 hosts. It would be helpful to be able to filter using these operators.
user: msilmser
issue_4552: state: open
title: It's time to lose some sleep..
body: [This sleep](https://github.com/jladdjr/awx/commit/b0a89f03a418a1bdc717722cd15b3c507bf0cd42#commitcomment) got us in trouble [once](https://github.com/ansible/awx/issues/4536#issuecomment-523681467). Making an issue so I don't forget to follow-up on this.

Also creating an issue b/c we're not entirely sure what kind of fallout might happen if we pull this out. (My sense is that the worse case scenario would be that the notifications with a body - e.g. webhooks - may have incomplete job summary info, but maybe the scope is larger than that).

Marking as bughancement.


user: jladdjr
issue_4543: state: open
title: Multiple choice order in survey
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
The actual behavior in a survey when we select elements in a list with multiple choices is to sort them alphabetically. It would be nice to have the possibility to sort them manually, by selecting them in the order we want for example.

Actual behavior :
![1](https://user-images.githubusercontent.com/22099779/63435685-a5722280-c427-11e9-935c-8455341e3bed.png)

Desired behavior :
![2](https://user-images.githubusercontent.com/22099779/63435707-aefb8a80-c427-11e9-93aa-6e92fbce9dd7.PNG)

user: keliansb
issue_4539: state: open
title: Cannot create a custom notification message with {{ job.extra_vars }} in message
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Cannot create a custom notification message with {{ job.extra_vars }} in message

##### STEPS TO REPRODUCE
1. Attempt to create a custom notification Start Message with `{{ job.extra_vars }}` in the body

##### EXPECTED RESULTS
Can save and use NT

##### ACTUAL RESULTS
400 Error on Save

##### ADDITIONAL INFORMATION
![Screen Shot 2019-08-20 at 7 14 03 PM](https://user-images.githubusercontent.com/12446869/63390917-b155da00-c37e-11e9-8109-384e7758b70f.png)


user: unlikelyzero
issue_4486: state: open
title: Create Users in AWX Without Requiring Password
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Would like to be able to create a new user account in AWX, without requiring a password. The goal here is to be able to create/pre-provision a user that is managed by an external service (LDAP), then when they log in for the first time, AWX will see they already have an account created, and simply authenticate them with LDAP and update their account details from LDAP.
user: mdinwoodie
labels: component:authentication: For issues related to authentication
issue_4470: state: open
title: Bulk add hosts to inventory via Web UI
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
It would be great if there was an easy way to bulk-add hosts for manual projects in AWX. We'd love the ability to provide a CSV, an inventory file or something similar and have AWX turn that one-off inventory file into a set of hosts in the inventory.
user: strawgate
issue_4466: state: open
title: GCE Dynamic Inventory with machine auth
body: ##### ISSUE TYPE
 - Feature Idea
GCE Dynamic Inventory should be able to use machineaccount to authenticate.


##### SUMMARY
GCE Dynamic Inventory should be able to use machineaccount to authenticate.
Right now only serviceaccount can be used.
https://github.com/ansible/awx/blob/6.1.0/awx/main/models/credential/injectors.py
user: ai13f
issue_4450: state: open
title: Consider more conditions for marking a job template as invalid
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
The UI has a big red ❗️ that it will put next to job templates when certain conditions are met.

This is a feature request to mark job templates with the red exclamation mark in the following conditions:

 - Job template has a `playbook` field which is not in the listed playbooks for the project
   - with the branch-on-JT feature, this condition will change to not mark invalid cases of allow_override
 - Job template uses a project for which its last update was failed

The first case cannot be saved normally, and is expected to fail when ran.

The second case might be savable, but is expected to fail when ran.
user: AlanCoding
issue_4449: state: open
title: RFE: Gantt chart for scheduled jobs
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
The ability to have some sort of graphical view on scheduled jobs per day/week/month/year. One example would be a Gantt chart.

The idea behind is to have a better overview when jobs are scheduled and to find busy or non busy spots. If the job has run before you could use the average execution time for the job length estimation in the diagram.

user: sandrich
issue_4447: state: open
title: Incorrect URL being used for Red Had Insights project synchronisation
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
insights.py default url: /api/remediations/v1/remediations. this not expected.

##### ENVIRONMENT
* AWX version: 6.1.0
* AWX install method:  docker on linux
* Ansible version:  2.8.2
* Operating System: Redhat
* Web Browser:

##### STEPS TO REPRODUCE

Install awx 6.1.0 and ansible version 2.8.2

##### EXPECTED RESULTS

Expected: url = '{}/r/insights/v3/maintenance?ansible=true'.format(insights_url)

##### ACTUAL RESULTS

"msg": "Expected /api/remediations/v1/remediations to return a status code of 200 but returned status code \"404\" instead with content \"<!doctype html>\n<html>\n<head>\n    <title>Example Domain</title>\n\n    <meta charset=\"utf-8\" />\n    <meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <style type=\"text/css\">\n    body {\n        background-color: #f0f0f2;\n        margin: 0;\n        padding: 0;\n        font-family: \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n        \n    }\n    div {\n        width: 600px;\n        margin: 5em auto;\n        padding: 50px;\n        background-color: #fff;\n        border-radius: 1em;\n    }\n    a:link, a:visited {\n        color: #38488f;\n        text-decoration: none;\n    }\n    @media (max-width: 700px) {\n        body {\n            background-color: #fff;\n        }\n        div {\n            width: auto;\n            margin: 0 auto;\n            border-radius: 0;\n            padding: 1em;\n        }\n    }\n    </style>    \n</head>\n\n<body>\n<div>\n    <h1>Example Domain</h1>\n    <p>This domain is established to be used for illustrative examples in documents. You may use this\n    domain in examples without prior coordination or asking for permission.</p>\n    <p><a href=\"http://www.iana.org/domains/example\">More information...</a></p>\n</div>\n</body>\n</html>\n\".",
    "changed": false
}


##### ADDITIONAL INFORMATION

insights.py has to update to correct insight url = '{}/r/insights/v3/maintenance?ansible=true'.format(insights_url), or provide option to use custom url.

user: Bahu2016
issue_4445: state: open
title: specify source for docker_image tasks
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
A warning is produced when running installer/build.yml:

    [WARNING]: The value of the "source" option was determined to be "pull". Please set the "source" option explicitly. Autodetection will be removed in Ansible 2.12.

(This is also the cause of later errors.)

##### ENVIRONMENT
* AWX version: 6.1.0
* AWX install method: docker-compose on linux
* Ansible version:  2.8.2
* Operating System: CentOS 7
* Web Browser: N/A

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->

    ansible-playbook -i inventory build.yml

##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->
I expected the build playbook to complete successfully.

##### ACTUAL RESULTS

<!-- What actually happened? -->
    [WARNING]: The value of the "source" option was determined to be "pull". Please set the "source" option explicitly. Autodetection will be removed in Ansible 2.12.

    failed: [localhost -> localhost] (item=latest) => {"ansible_loop_var": "item", "changed": false, "item": "latest", "msg": "Error pushing image 172.30.1.1:5000/awx/awx_web: Get https://172.30.1.1:5000/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)"}
    failed: [localhost -> localhost] (item=6.1.0) => {"ansible_loop_var": "item", "changed": false, "item": "6.1.0", "msg": "Error pushing image 172.30.1.1:5000/awx/awx_web: Get https://172.30.1.1:5000/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)"}

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->
By editing `awx/installer/roles/image_push/tasks/main.yml` and adding `source: local` to the _Tag and Push Container Images_ and _Tag and push task image to registry_, and running the build.yml playbook again I was able to run it to completion.
user: cherdt
issue_4434: state: open
title: AWS Credential: Add support for STS assume role
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
AWS credentials could support a role ARN and call STS Assume Role service to obtain temporary credentials.
I know the STS Token allow me to do this from outside AWX, but this could be a feature.

https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html 
user: bkmeneguello
issue_4424: state: open
title: Forks should take 'limit' into account when calculating available capacity
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Currently, utilization of capacity is taken as the lesser of the number of the hosts in the inventory, or the number of configured forks for the job template.  So if there are 5 hosts in an inventory and a template has 10 forks set, it will utilize 5+1 for the parent process, or in this case, a capacity of 6.

This calculation does not take limits into account.  So if a template has a limit set to allow it to act against 1 host, in the above scenario it will still utilize 6 units of capacity, instead of the correct limit of 2.

user: mrmibrown
issue_4422: state: open
title: Allow hosts to be removed from a locked inventory
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Allow hosts to be removed from an inventory when current jobs are being run against that inventory in the case where all jobs running have limits set and the host being removed is not in any of those limits.  

Currently if an inventory has 100 hosts, and a job is run against a single host, all 100 are locked out from being removed.

user: mrmibrown
issue_4412: state: open
title: RFE: Prevent users from modifying LDAP managed resources
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Currently, if you attempt to modify an existing LDAP created resource (org/team), it will leave the existing resource and create a new one with the modified specs. We have a request to prevent all users from being able to manage these via the UI. 
user: msilmser
labels: component:authentication: For issues related to authentication
issue_4361: state: open
title: Inventory update source type should be visible in the expanded cards in jobs list
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Inventory updates are very scant on information in the UI expanded view.

![Screen Shot 2019-07-22 at 1 53 19 PM](https://user-images.githubusercontent.com/1385596/61653415-39fe2f00-ac88-11e9-9c69-3b95416b8dee.png)

The first entry there is an EC2 inventory update, and the 2nd is an Azure inventory update. The names that it shows for credentials are user-provided names, so they will likely not contain any information about type (although they might just happen to sometimes).

Ideally, in the expanded cards, the UI would give an indication of the type of update that was ran.

Also consider consolidating the RFEs for more information in these cards. Another similar issue: https://github.com/ansible/awx/issues/4359
user: AlanCoding
issue_4356: state: open
title: Documentation response codes wrong for endpoint "POST /inventories/{id}/update_inventory_sources/"  
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
The API endpoint ` POST /inventories/{id}/update_inventory_sources/`  documentation in the API reference is wrong. In the API reference it is documented that it returns only 201. However based on the AWX documentation found on github here: https://github.com/ansible/awx/blob/d8c4f118c23fde9f59f38334974381264d22f120/awx/api/templates/api/inventory_inventory_sources_update.md

![image](https://user-images.githubusercontent.com/31369413/61574419-22784800-aac8-11e9-9dc4-cf6c15e5bac5.png)

The endpoint returns the following response codes which are all <b>missing</b> from the API reference:
- 200 if all inventory source updates were successful
- 202 if some inventory source updates were successful, but some failed
- 400 if all of the inventory source updates failed
- 400 if there are no inventory sources in the inventory

##### ENVIRONMENT
* AWX version: 3.5.1
* Web Browser: chrome

##### STEPS TO REPRODUCE

Go to the documentation here: https://docs.ansible.com/ansible-tower/latest/html/towerapi/api_ref.html#/Inventories/Inventories_inventories_update_inventory_sources_create

##### EXPECTED RESULTS

See all response codes with a description for each one:
- 200 if all inventory source updates were successful
- 202 if some inventory source updates were successful, but some failed
- 400 if all of the inventory source updates failed
- 400 if there are no inventory sources in the inventory

##### ACTUAL RESULTS

See only 201 response code for POST /inventories/{id}/update_inventory_sources
user: NivLipetz
issue_4341: state: open
title: No nodes to spawn workflow_job
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
I have some scheduled jobs and workflows in the AWX instance, but over time they are stuck in pending. 

The Workflow is running and at the last task before finishing and the logs provide this message:
```
2019-07-16 09:07:01,449 DEBUG    awx.main.dispatch publish awx.main.scheduler.tasks.run_task_manager(3058a95c-8670-4588-8440-8ff64ead7d48, queue=awx_private_queue)
[2019-07-16 09:07:01,449: DEBUG/Process-1] publish awx.main.scheduler.tasks.run_task_manager(3058a95c-8670-4588-8440-8ff64ead7d48, queue=awx_private_queue)
2019-07-16 09:07:01,465 DEBUG    awx.main.dispatch delivered 3058a95c-8670-4588-8440-8ff64ead7d48 to worker[12297] qsize 0
2019-07-16 09:07:01,469 DEBUG    awx.main.dispatch task 3058a95c-8670-4588-8440-8ff64ead7d48 starting awx.main.scheduler.tasks.run_task_manager(*[])
2019-07-16 09:07:01,472 DEBUG    awx.main.scheduler Running Tower task manager.
2019-07-16 09:07:01,483 DEBUG    awx.main.scheduler Starting Scheduler
2019-07-16 09:07:01,534 DEBUG    awx.main.scheduler No nodes to spawn for workflow_job 3592 (running)
2019-07-16 09:07:01,545 DEBUG    awx.main.dispatch task 3058a95c-8670-4588-8440-8ff64ead7d48 is finished)
```

All other Jobs are running fine, except for this one workflow.

##### ENVIRONMENT
* AWX version: 5.0.0.0
* AWX install method: docker on linux
* Ansible version:  2.8.1
* Operating System: Rhel 7.6
* Web Browser: Google Chrome

##### STEPS TO REPRODUCE

Not reproduceable, over time the workflow will eventually stuck.

user: mkayontour
issue_4308: state: open
title: Off center virtualenvs
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI
 - API

##### SUMMARY
<!-- Briefly describe the problem. -->
It would be a good idea to centralize the definition of virtual environments to execute job templates. This is a good idea to maintain the same packages into a venv between different Tower hosts to reduce error chance.


user: ivangonzalezz
issue_4307: state: open
title: Date/Time Survey Answer Type
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Add a built-in answer type for date and time that translates to a usable timestamp string for job runs
user: jamesmarshall24
issue_4270: state: open
title: [RFE] Password Manager Pro for its credential vault
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
A customer wants to use `Password Manager Pro` for its credential vault.
https://www.manageengine.com/products/passwordmanagerpro/

user: sugitk
issue_4255: state: open
title: AWX 5.0.0 Install : Database Migration Failure 
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->

##### ENVIRONMENT
* AWX version: 5.0.0
* AWX install method: openshift3.7
* Ansible version:  2.0.8
* Operating System: RHEL 7
* Web Browser: N/A

##### STEPS TO REPRODUCE

Install Awx on Dedicated Openshift 3.7 with the playbook , and an external PostgreSQL Database

Command : ansible-playbook -i inventory install.yml -e openshift_token=$(oc whoami -t)


##### EXPECTED RESULTS

Migration Should be done

All the 02 pods  and containers are created but fail to start because of the database migration

##### ACTUAL RESULTS

ValueError: Unable to configure handler 'fact_receiver': [Errno 13] Permission denied: '/var/log/tower/fact_receiver.log

TASK [kubernetes : Migrate database] **************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": true, "cmd": "oc --config=/tmp/awx-config/.kube/config -n gcloud-services-test-middleware exec ansible-tower-management --  bash -c \"awx-manage migrate --noinput\"\n", "delta": "0:00:01.687839", "end": "2019-07-02 17:07:54.133670", "msg": "non-zero return code", "rc": 1, "start": "2019-07-02 17:07:52.445831", "stderr": "Traceback (most recent call last):\n  File \"/usr/bin/awx-manage\", line 9, in <module>\n    load_entry_point('awx==1.0.5.24', 'console_scripts', 'awx-manage')()\n  File \"/usr/lib/python2.7/site-packages/awx/__init__.py\", line 109, in manage\n    execute_from_command_line(sys.argv)\n  File \"/var/lib/awx/venv/awx/lib/python2.7/site-packages/django/core/management/__init__.py\", line 364, in execute_from_command_line\n    utility.execute()\n  File \"/var/lib/awx/venv/awx/lib/python2.7/site-packages/django/core/management/__init__.py\", line 338, in execute\n    django.setup()\n  File \"/var/lib/awx/venv/awx/lib/python2.7/site-packages/django/__init__.py\", line 22, in setup\n    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)\n  File \"/var/lib/awx/venv/awx/lib/python2.7/site-packages/django/utils/log.py\", line 75, in configure_logging\n    logging_config_func(logging_settings)\n  File \"/usr/lib64/python2.7/logging/config.py\", line 803, in dictConfig\n    dictConfigClass(config).configure()\n  File \"/usr/lib64/python2.7/logging/config.py\", line 585, in configure\n    '%r: %s' % (name, e))\nValueError: Unable to configure handler 'fact_receiver': [Errno 13] Permission denied: '/var/log/tower/fact_receiver.log'\ncommand terminated with exit code 1", "stderr_lines": ["Traceback (most recent call last):", "  File \"/usr/bin/awx-manage\", line 9, in <module>", "    load_entry_point('awx==1.0.5.24', 'console_scripts', 'awx-manage')()", "  File \"/usr/lib/python2.7/site-packages/awx/__init__.py\", line 109, in manage", "    execute_from_command_line(sys.argv)", "  File \"/var/lib/awx/venv/awx/lib/python2.7/site-packages/django/core/management/__init__.py\", line 364, in execute_from_command_line", "    utility.execute()", "  File \"/var/lib/awx/venv/awx/lib/python2.7/site-packages/django/core/management/__init__.py\", line 338, in execute", "    django.setup()", "  File \"/var/lib/awx/venv/awx/lib/python2.7/site-packages/django/__init__.py\", line 22, in setup", "    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)", "  File \"/var/lib/awx/venv/awx/lib/python2.7/site-packages/django/utils/log.py\", line 75, in configure_logging", "    logging_config_func(logging_settings)", "  File \"/usr/lib64/python2.7/logging/config.py\", line 803, in dictConfig", "    dictConfigClass(config).configure()", "  File \"/usr/lib64/python2.7/logging/config.py\", line 585, in configure", "    '%r: %s' % (name, e))", "ValueError: Unable to configure handler 'fact_receiver': [Errno 13] Permission denied: '/var/log/tower/fact_receiver.log'", "command terminated with exit code 1"], "stdout": "", "stdout_lines": []}


##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: famantanantsoaandry
issue_4197: state: open
title: Openstack inventory don't load any group or host
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - inventories management

##### SUMMARY
I'm not able to add hosts from openstack source

##### ENVIRONMENT
* AWX version: 5.0.0.0
* AWX install method: docker on linux
* Ansible version:  2.8.1
* Operating System: Debian9
* Web Browser: Chrome/Safari

##### STEPS TO REPRODUCE

1. Add your openstack credentials to AWX and select type "Openstack" 
<img width="1422" alt="Capture d’écran 2019-07-01 à 19 04 29" src="https://user-images.githubusercontent.com/216474/60454053-1fa9d600-9c33-11e9-95ed-aaeec7197fce.png">

2. go to inventory and add an openstack inventory using these credentials
<img width="1409" alt="Capture d’écran 2019-07-01 à 19 04 43" src="https://user-images.githubusercontent.com/216474/60454060-23d5f380-9c33-11e9-88d1-da34031944b4.png">

3. clic on "start sync" button

##### EXPECTED RESULTS

hosts from openstack must be integrated into awx

##### ACTUAL RESULTS

  ```
  1.891 INFO     Updating inventory 7: openstack
    2.278 DEBUG    Using base command: python /usr/bin/ansible-inventory -i /tmp/awx_168_p5pex3g_/openstack.yml --playbook-dir /tmp/awx_168_p5pex3g_ -vvvvv
    2.278 INFO     Reading Ansible inventory source: /tmp/awx_168_p5pex3g_/openstack.yml
    2.280 INFO     Using VIRTUAL_ENV: /var/lib/awx/venv/ansible
    2.280 INFO     Using PATH: /var/lib/awx/venv/ansible/bin:/var/lib/awx/venv/awx/bin:/var/lib/awx/venv/awx/bin:/var/lib/awx/venv/awx/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    2.280 INFO     Using PYTHONPATH: /var/lib/awx/venv/ansible/lib/python2.7/site-packages:
    3.525 ERROR    ansible-inventory 2.8.1
    3.526 ERROR      config file = /etc/ansible/ansible.cfg
    3.526 ERROR      configured module search path = [u'/var/lib/awx/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
    3.526 ERROR      ansible python module location = /usr/lib/python2.7/site-packages/ansible
    3.526 ERROR      executable location = /usr/bin/ansible-inventory
    3.526 ERROR      python version = 2.7.5 (default, Apr  9 2019, 14:30:50) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
    3.526 ERROR    Using /etc/ansible/ansible.cfg as config file
    3.526 ERROR    setting up inventory plugins
    3.526 ERROR    Parsed /tmp/awx_168_p5pex3g_/openstack.yml inventory source with auto plugin
    3.527 DEBUG    Finished loading from source: /tmp/awx_168_p5pex3g_/openstack.yml
    3.527 INFO     Processing JSON output...
    3.527 DEBUG    Loaded group: all
    3.528 INFO     Loaded 0 groups, 0 hosts
    3.540 DEBUG    Inventory variables unmodified
2019-07-01 16:50:22,371 DEBUG    awx.main.models.inventory Going to update inventory computed fields, pk=7
2019-07-01 16:50:22,482 DEBUG    awx.main.models.inventory Finished updating inventory computed fields, pk=7, in 0.101 seconds
    3.661 INFO     Inventory import completed for openstack in 1.8s
```


user: shark09
issue_4195: state: open
title: Support for AWS IAM Cross Account Roles for Dynamic Inventories
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Some of the challenges we are seeing is the lack of support for AWS IAM Cross Account Roles for Dynamic Inventories as well as playbook credential management for operational tasks. Currently we manage 8 AWS Accounts and are going to grow to over 20 very shortly in the next year.  

We have AWS Accounts that share several project teams within the account. Due to the lack of support we have to create an IAM Access Key for each project for operational playbooks such as reboot/start/stop instance, etc. Due to our requirements for Key Rotation every 365 days (AWS recommends every 90) we are having to coordinate credential rotation consistently.  

It would be useful to have one master IAM key for Ansible Tower and then scope EC2 inventories and Playbooks to utilize the Role associated for a project. This would allow us to only have to rotate one credential per Ansible Tower per year.  

This has been brought up to the GitHub repo as we are not the only ones looking for this at an enterprise level: https://github.com/ansible/ansible/issues/24740  

```What matthewapeters has raised, this is a blocker for enterprise users and given Ansible is now with RedHat who have enterprise customers this I would love to see being implemented. I keep coming across this for enterprise customers for more than 3 years now and was hoping this would have been resolved by now```
--



user: msilmser
issue_4186: state: open
title: choose the venv with a custom dynamic inventory script
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
We are pulling data from a mysql database to create an inventory. This script uses the mysql-connector to connect to the mysql database. We already have a custom venv mounted inside every container with all our needed python modules and we would also like to use this custom venv in our custom dynamic inventory scripts. This would allow us to not need to rebuild the awx task and web containers.
user: Mikey032
issue_4177: state: open
title: Add Support for SAML Claim URLs in addition to Attributes (Azure AD)
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
When setting up SAML with AzureAD, if a user has too many group associations, the XML returned will contain a link to the claim in Azure rather than the list of attributes. For example:

```<samlp:Response Destination="https://towerd.example.com/sso/complete/saml/"
    ID="_baf9ca3b-7d7a-4ea6-8c46-931e7bf52937"
    InResponseTo="ONELOGIN_8d309fe692d5d23d30f4cfdda273f83a51f3f522"
    IssueInstant="2019-06-27T14:22:29.455Z" Version="2.0"
    xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
    <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://sts.windows.net/22da2fa9-f8e7-4f8c-a588-a72b6896d459/</Issuer>
    <samlp:Status><samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/></samlp:Status>
    <Assertion ID="_46e11da4-49e6-4b93-871e-da560fdb0800" IssueInstant="2019-06-27T14:22:29.440Z"
        Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
        <Issuer>https://sts.windows.net/22da2fa9-f8e7-4f8c-a588-a72b6896d459/</Issuer>
        <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
            <SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
                <Reference URI="#_46e11da4-49e6-4b93-871e-da560fdb0800">
                    <Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
                    <DigestValue>5WCFnC7CQLxYlqQfUMnUj7yZeIWXmIAskY4sYSJ7gpQ=</DigestValue>
                </Reference>
            </SignedInfo>
            <SignatureValue>cOzei/SkrjcwhnWgJaWmrbY2OzJt+qn41/+4swj9zX+kGulbtChhBe+pNbWuC0E7eUPt+obqg2X667JAcAwnHSB077na84R1h1wZHZ7cDd7WMYueWjOpgSgyWA3a8KaRHekFjwtPp4favUdTKAmEsm31dHZ7ZI0OMSIrdtuNFWP8PK4vgqGrE/HUYUYW3sFL1uhQcqUlbDBJRPOLnwxUnaeoFtq7TQ9HLOgihpfTJApoguN05G8TbQV7TUcybGUrF2atlMUDW6ZJ9LSpl9SyrFCv423CIlqc3b3cVlbnM/VbgdBPQnv/hXe98+KizDY02/Hg8fONs9dPdj1iF2hxhA==</SignatureValue>
            <KeyInfo>
                <X509Data>
                    <X509Certificate>MIIC8DCCAdigAwIBAgIQZILpTyw2/pJF+ooVgEus6jANBgkqhkiG9w0BAQsFADA0MTIwMAYDVQQDEylNaWNyb3NvZnQgQXp1cmUgRmVkZXJhdGVkIFNTTyBDZXJ0aWZpY2F0ZTAeFw0xOTA2MDMxNzU5MzBaFw0yMjA2MDMxNzU5MzBaMDQxMjAwBgNVBAMTKU1pY3Jvc29mdCBBenVyZSBGZWRlcmF0ZWQgU1NPIENlcnRpZmljYXRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqBC7JnxvCR+bJz7sX/1MSrwH/IHVHXjdGcSaWv928OZPIuuWfxnK7Nc5jMZFU1G4GQiP52pjiWCqsT+LlLZEGPU2Lwi8CZWg0F8TphV7pkE5gZ1Xdgy2UvWzqXj3GYn4gFHBEhTQ9uMAT8kXyNHbDjFzG+ZQhmY/g4zL6v3gUDity1J/6NfJP/o2j5Xx6ijCMEEz7euHOeEHxFnzv8Igu+eJ017fpM0wTOXUOdP/s9YTcXmPMtJKas4rIttXdjhUoCUq0XTP3p6Fop2KLLdZ7CJtW02NjgLeViKNirye0Ah4gif1AFAT3qWRBYwmqKprB148rvZHSucKPOs3PLKllwIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQAwV8kaT4y93Bx/wBmTXMtM9cidCIjZQU20YJTT6TlqPvhVnLAfyZP4sGVMS/GAngbylY3WTwKUKSFzYPMdS4LX1d8SPjj2/1StFmeOGdKi2YhTpI1rpL7hv6mMK6tKn/ix0OWnGQGD3lxv/6FLsSYhf+3zqkEw5xxCzgiSnZQjg0Wj/NnvCdb7VEJyKAI8I0XbP5XuyE3dIsqhxWhmls1e4A+OEIobvjK6R9Opi7naMmws5GqRonZkeKh04lNCpFxIn77c8VO2fJM8EAFcFudsepT1gfBEdQriTZjCYP9HttFQbAKP/uT81NbVLIbEWiVj3vLYAjpBWDTn8Fv+gEDU</X509Certificate>
                </X509Data>
            </KeyInfo>
        </Signature>
        <Subject>
            <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">admin@example.com</NameID>
            <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"><SubjectConfirmationData InResponseTo="ONELOGIN_8d309fe692d5d23d30f4cfdda273f83a51f3f522"
                NotOnOrAfter="2019-06-27T14:27:29.440Z" Recipient="https://towerd.example.com/sso/complete/saml/"/></SubjectConfirmation>
        </Subject>
        <Conditions NotBefore="2019-06-27T14:17:29.440Z" NotOnOrAfter="2019-06-27T15:22:29.440Z">
            <AudienceRestriction>
                <Audience>https://towerd.example.com</Audience>
            </AudienceRestriction>
        </Conditions>
        <AttributeStatement>
            <Attribute Name="http://schemas.microsoft.com/identity/claims/tenantid">
                <AttributeValue>22da2fa9-f8e7-4f8c-a588-a72b6896d459</AttributeValue>
            </Attribute>
            <Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier">
                <AttributeValue>0669f6df-d1a7-4e41-93a2-74aa78792053</AttributeValue>
            </Attribute>
            <Attribute Name="http://schemas.microsoft.com/identity/claims/displayname">
                <AttributeValue>Test (ADM), Admin W</AttributeValue>
            </Attribute>
            <Attribute Name="http://schemas.microsoft.com/claims/groups.link">
                <AttributeValue>https://graph.windows.net/22da2fa9-f8e7-4f8c-a588-a72b6896d459/users/0669f6df-d1a7-4e41-93a2-74aa78792053/getMemberObjects</AttributeValue>
            </Attribute>
            <Attribute Name="http://schemas.microsoft.com/identity/claims/identityprovider">
                <AttributeValue>https://sts.windows.net/22da2fa9-f8e7-4f8c-a588-a72b6896d459/</AttributeValue>
            </Attribute>
            <Attribute Name="http://schemas.microsoft.com/claims/authnmethodsreferences">
                <AttributeValue>http://schemas.microsoft.com/ws/2008/06/identity/authenticationmethod/windows</AttributeValue>
                <AttributeValue>http://schemas.microsoft.com/claims/multipleauthn</AttributeValue>
            </Attribute>
            <Attribute Name="http://schemas.microsoft.com/ws/2008/06/identity/claims/role">
                <AttributeValue>Tower_Admins</AttributeValue>
            </Attribute>
            <Attribute Name="http://schemas.microsoft.com/ws/2008/06/identity/claims/wids">
                <AttributeValue>62e90394-69f5-4237-9190-012177145e10</AttributeValue>
            </Attribute>
            <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname">
                <AttributeValue>Admin</AttributeValue>
            </Attribute>
            <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname">
                <AttributeValue>Test (ADM)</AttributeValue>
            </Attribute>
            <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress">
                <AttributeValue>admin@example.com</AttributeValue>
            </Attribute>
            <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
                <AttributeValue>admin@example.com</AttributeValue>
            </Attribute>
            <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/memberOf">
                <AttributeValue>Tower_Admins</AttributeValue>
            </Attribute>
            <Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/administrator-Of">
                <AttributeValue>Tower_Admins</AttributeValue>
            </Attribute>
        </AttributeStatement>
        <AuthnStatement AuthnInstant="2019-06-27T14:21:20.160Z"
            SessionIndex="_46e11da4-49e6-4b93-871e-da560fdb0800">
            <AuthnContext>
                <AuthnContextClassRef>urn:federation:authentication:windows</AuthnContextClassRef>
            </AuthnContext>
        </AuthnStatement>
    </Assertion>
</samlp:Response>
```

AWX/Tower will not follow the claim links in order to obtain the list of attributes.
user: msilmser
labels: component:authentication: For issues related to authentication
issue_4171: state: open
title: Detect possible inventory plugin files
body: ##### SUMMARY
AWX ignores inventory plugin files when choosing inventory files from a Project source. This PR lets yaml and json files slip through after a very basic check for a couple of keywords that would be in a yaml or json inventory file or an inventory plugin file.

related #3491

##### ISSUE TYPE
 - New or Enhanced Feature

##### COMPONENT NAME
 - UI

##### AWX VERSION
<!--- Paste verbatim output from `make VERSION` between quotes below -->
```
awx: 5.0.0
```

##### ADDITIONAL INFORMATION


user: philipsd6
issue_4157: state: open
title: Logical collection for environment like PROD, DEV to make grouping credentials, playbook and other items
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
For workflow template and survey, a customer often wants to select PROD/DEV.
I propose a new feature like `Environment` under `Organizations` to make a group for those PROD/DEV deployments.

`Environment` has these materials:
- credentials (for example, grouping credentials for each env [PROD_SSH, PROD_A, PROD_B] and [DEV_SSH, DEV_A, DEV_B])
- extra variables
- inventories
- playbooks (like #526)

Then the same workflow template and job template can be used and be switched easily between PROD and DEV.


user: sugitk
issue_4143: state: open
title: Disable Basic Auth by default
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
OAuth 2 token authentication should be used instead of basic auth when integrating with the API.  We should disable basic auth by default.  

```
AUTH_BASIC_ENABLED = False
```

Users can still enable this by changing the setting to True.  We need to ensure that for upgrades, the existing value is kept so there are no surprises for current users.  
user: rooftopcellist
issue_4133: state: open
title: Cleanup job details based on job name 
body: ##### ISSUE TYPE
 - Feature Idea
The standard cleanup job schedule clean ups jobs older than x days.
We have some maintenanance jobs which we want to cleanup every 10 days or something.
So I would be fine if you could specify job names with wildcards to cleanup

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

user: daemenseth
issue_4092: state: open
title: UI Improvement for suppressing `ok` from the result of job output
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
When a very huge job output, I would like to see only `changed` and `failed` without `ok` tasks.

In the upper left of the box there is a `+` / `-` icon, how about `changed` button or icon like that?

user: sugitk
issue_4089: state: open
title: Allow Vault Credentials for Project SCM Type Inventories to process encrypted vault files
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Inventories sourced from project SCM do not currently support vault credentials. When using inventory plugins with secrets within the yaml spec files, there is no way to cleanly decrypt the vaulted file to allow the plugin to run its course.

Custom credentials are also not an option as AWX/Tower reserves all environment variables starting with `ANSIBLE_`, so there is no clear way to dynamically create a passwords file for vault from a custom credential.
user: jamesmarshall24
issue_4081: state: open
title: Add Prompt on Launch Checkbox for Machine Credential Username
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Add a prompt on launch option for username within machine credentials
user: jamesmarshall24
issue_4068: state: open
title: Add Org/Team Mapping to RADIUS/TACACS
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Add organization, team, and RBAC mapping to RADIUS/TACACS auth provider.
user: jamesmarshall24
labels: component:authentication: For issues related to authentication
issue_4067: state: open
title: HTTP 302 on OpenShift
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->

After initialising AWX on an OpenShift cluster using install.yml, I only get HTTP 302 responses

##### ENVIRONMENT
* AWX version: 4.0.0
* AWX install method: openshift
* Ansible version:  2.8.1 (also tried on 2.5.2)
* Operating System: Linux
* Web Browser: Firefox and Chrome

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->

1) Create Provisioned Services postgresql
 
2) Standard Ansible installation (with 2 ignored errors)

With following inventory:
```
localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python" no_log=false
[all:vars]
# Remove these lines if you want to run a local image build
# Otherwise the setup playbook will install the official Ansible images. Versions may
# be selected based on: latest, 1, 1.0, 1.0.0, 1.0.0.123
# by default the base will be used to search for ansible/awx_web and ansible/awx_task
dockerhub_base=ansible
dockerhub_version=4.0.0
no_log=false
# Openshift Install
# Will need to set -e openshift_password=developer -e docker_registry_password=$(oc whoami -t)
openshift_host=REDACTED
openshift_project=awx
openshift_user=REDACTED
openshift_skip_tls_verify=true
# Kubernetes Install
# kubernetes_context=test-cluster
# kubernetes_namespace=awx
# Kubernetes and Openshift Install Resource Requests
# This is the request value for a pod's "task" container, which is the container
# used to run jobs. The other containers have a fixed resource request. The total amount
# of requested resources for a pod is the sum of all resources requested by all containers
# in the pod
# A cpu_request of 1500 is 1.5 cores for the task container
# A mem_request of 2 is for 2 gigabytes of memory for the task container
# task_cpu_request=1500
# task_mem_request=2
# Common Docker parameters
postgres_data_dir=/tmp/pgdocker
host_port=80
# Docker Compose Install
use_docker_compose=false
# The docker_compose.yml file will be created in this directory
# The name of the directory (here "awx") will be the prefix of the docker containers
# docker_compose_dir=/var/lib/awx
# Required for Openshift when building the image on your own
# Optional for Openshift if using Dockerhub or another prebuilt registry
# Required for Standalone Docker Install if building the image on your own
# Optional for Standalone Docker Install if using Dockerhub or another prebuilt registry
# Required for Docker Compose Install if building the image on your own
# Optional for Docker Compose Install if using Dockerhub or another prebuilt registry
# Define if you want the image pushed to a registry. The container definition will also use these images
#docker_registry=172.30.1.1:5000
#docker_registry_repository=awx
#docker_registry_username=
#openshift_token=
# Docker_image will not attempt to push to remote if the image already exists locally
# Set this to true to delete images from docker on the build host so that they are pushed to the remote repository
# docker_remove_local_images=False
# Set pg_hostname if you have an external postgres server, otherwise
# a new postgres service will be created
# pg_hostname=postgresql
pg_username=userRUO
pg_password=REDACTED
pg_database=sampledb
pg_port=5432
# Use a local distribution build container image for building the AWX package
# This is helpful if you don't want to bother installing the build-time dependencies as
# it is taken care of already.
# NOTE: IMPORTANT: If you are running a mininshift install, using this container might not work
#                  if you are using certain drivers like KVM where the source tree can't be mapped
#                  into the build container.
#                  Thus this setting must be set to False which will trigger a local build. To view the
#                  typical dependencies that you might need to install see:
#                  installer/image_build/files/Dockerfile.sdist
# use_container_for_build=true
# This will create or update a default admin (superuser) account in AWX, if not provided
# then these default values are used
admin_user=admin
admin_password=REDACTED
# AWX Secret key
# It's *very* important that this stay the same between upgrades or you will lose the ability to decrypt
# your credentials
secret_key=REDACTED
# RabbitMQ Configuration
rabbitmq_password=REDACTED
rabbitmq_erlang_cookie=REDACTED
# Whether or not to create preload data for demonstration purposes
create_preload_data=False
# Build AWX with official logos
# Requires cloning awx-logos repo into the project root.
# Review the trademark guidelines at https://github.com/ansible/awx-logos/blob/master/TRADEMARKS.md
# awx_official=false
# Proxy
#http_proxy=http://proxy:3128
#https_proxy=http://proxy:3128
#no_proxy=mycorp.org
# Container networking configuration
# Set the awx_task and awx_web containers' search domain(s)
#awx_container_search_domains=example.com,ansible.com
# Alternate DNS servers
#awx_alternate_dns_servers="10.1.2.3,10.2.3.4"
# AWX project data folder. If you need access to the location where AWX stores the projects
# it manages from the docker host, you can set this to turn it into a volume for the container.
#project_data_dir=/var/lib/awx/projects
# CA Trust directory. If you need to provide custom CA certificates, supplying
# this variable causes this directory on the host to be bind mounted over
# /etc/pki/ca-trust in the awx_task and awx_web containers.
# NOTE: only obeyed in local_docker install
#ca_trust_dir=/etc/pki/ca-trust

```

##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->

Access to the WebUI

##### ACTUAL RESULTS

<!-- What actually happened? -->

I get an HTTP 302 response.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

HTTP Stream (obtained from Wireshark):
```
GET / HTTP/1.1
Host: awx-web-svc-awx.exemple.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
DNT: 1
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
X-Forwarded-Port: 443
X-Forwarded-Proto: https
X-Forwarded-For: REDACTED

HTTP/1.1 302 Found
Cache-Control: no-cache
Content-length: 0
Location: https://awx-web-svc-awx.exemple.com/
```
I also get the following in a loop in awx-rabbit's logs
```
2019-06-12 20:48:38.329 [info] <0.18163.0> accepting AMQP connection <0.18163.0> (127.0.0.1:59930 -> 127.0.0.1:5672)
2019-06-12 20:48:38.331 [info] <0.18163.0> connection <0.18163.0> (127.0.0.1:59930 -> 127.0.0.1:5672): user 'awx' authenticated and granted access to vhost 'awx'
2019-06-12 20:48:38.334 [info] <0.18163.0> closing AMQP connection <0.18163.0> (127.0.0.1:59930 -> 127.0.0.1:5672, vhost: 'awx', user: 'awx')
```

And the following in a loop in awx-celery:
```
2019-06-12 20:50:08,321 DEBUG    awx.main.dispatch publish awx.main.tasks.awx_periodic_scheduler(a538b855-1ff6-40a4-ba65-bc17b5395d10, queue=awx_private_queue)
[2019-06-12 20:50:08,321: DEBUG/Process-1] publish awx.main.tasks.awx_periodic_scheduler(a538b855-1ff6-40a4-ba65-bc17b5395d10, queue=awx_private_queue)
2019-06-12 20:50:08,335 DEBUG    awx.main.dispatch delivered a538b855-1ff6-40a4-ba65-bc17b5395d10 to worker[171] qsize 0
2019-06-12 20:50:08,336 DEBUG    awx.main.dispatch task a538b855-1ff6-40a4-ba65-bc17b5395d10 starting awx.main.tasks.awx_periodic_scheduler(*[])
2019-06-12 20:50:08,346 DEBUG    awx.main.tasks Starting periodic scheduler
2019-06-12 20:50:08,350 DEBUG    awx.main.tasks Last scheduler run was: 2019-06-12 20:49:38.346071+00:00
2019-06-12 20:50:08,364 DEBUG    awx.main.dispatch task a538b855-1ff6-40a4-ba65-bc17b5395d10 is finished
2019-06-12 20:50:18,360 DEBUG    awx.main.dispatch publish awx.main.scheduler.tasks.run_task_manager(f8697012-6c84-428a-87ea-029045ed6eb7, queue=awx_private_queue)
[2019-06-12 20:50:18,360: DEBUG/Process-1] publish awx.main.scheduler.tasks.run_task_manager(f8697012-6c84-428a-87ea-029045ed6eb7, queue=awx_private_queue)
2019-06-12 20:50:18,374 DEBUG    awx.main.dispatch delivered f8697012-6c84-428a-87ea-029045ed6eb7 to worker[171] qsize 0
2019-06-12 20:50:18,375 DEBUG    awx.main.dispatch task f8697012-6c84-428a-87ea-029045ed6eb7 starting awx.main.scheduler.tasks.run_task_manager(*[])
2019-06-12 20:50:18,375 DEBUG    awx.main.scheduler Running Tower task manager.
2019-06-12 20:50:18,397 DEBUG    awx.main.scheduler Starting Scheduler
2019-06-12 20:50:18,430 DEBUG    awx.main.dispatch task f8697012-6c84-428a-87ea-029045ed6eb7 is finished
2019-06-12 20:50:38,325 DEBUG    awx.main.dispatch publish awx.main.tasks.awx_periodic_scheduler(abfb887d-437c-41bd-9ca0-03afde410773, queue=awx_private_queue)
[2019-06-12 20:50:38,325: DEBUG/Process-1] publish awx.main.tasks.awx_periodic_scheduler(abfb887d-437c-41bd-9ca0-03afde410773, queue=awx_private_queue)
2019-06-12 20:50:38,340 DEBUG    awx.main.dispatch delivered abfb887d-437c-41bd-9ca0-03afde410773 to worker[170] qsize 0
2019-06-12 20:50:38,341 DEBUG    awx.main.dispatch task abfb887d-437c-41bd-9ca0-03afde410773 starting awx.main.tasks.awx_periodic_scheduler(*[])
2019-06-12 20:50:38,351 DEBUG    awx.main.tasks Starting periodic scheduler
2019-06-12 20:50:38,354 DEBUG    awx.main.tasks Last scheduler run was: 2019-06-12 20:50:08.346997+00:00
2019-06-12 20:50:38,360 DEBUG    awx.main.dispatch publish awx.main.scheduler.tasks.run_task_manager(0df7f526-3c51-4e27-881f-0a5a113031f4, queue=awx_private_queue)
[2019-06-12 20:50:38,360: DEBUG/Process-1] publish awx.main.scheduler.tasks.run_task_manager(0df7f526-3c51-4e27-881f-0a5a113031f4, queue=awx_private_queue)
2019-06-12 20:50:38,369 DEBUG    awx.main.dispatch task abfb887d-437c-41bd-9ca0-03afde410773 is finished
2019-06-12 20:50:38,374 DEBUG    awx.main.dispatch delivered 0df7f526-3c51-4e27-881f-0a5a113031f4 to worker[170] qsize 0
2019-06-12 20:50:38,374 DEBUG    awx.main.dispatch task 0df7f526-3c51-4e27-881f-0a5a113031f4 starting awx.main.scheduler.tasks.run_task_manager(*[])
2019-06-12 20:50:38,375 DEBUG    awx.main.scheduler Running Tower task manager.
2019-06-12 20:50:38,375 DEBUG    awx.main.dispatch publish awx.main.tasks.cluster_node_heartbeat(8211beea-0bb6-4ca9-98a8-848cdfe9b7b6, queue=awx-0)
[2019-06-12 20:50:38,375: DEBUG/Process-1] publish awx.main.tasks.cluster_node_heartbeat(8211beea-0bb6-4ca9-98a8-848cdfe9b7b6, queue=awx-0)
2019-06-12 20:50:38,393 DEBUG    awx.main.scheduler Starting Scheduler
2019-06-12 20:50:38,395 DEBUG    awx.main.dispatch delivered 8211beea-0bb6-4ca9-98a8-848cdfe9b7b6 to worker[171] qsize 0
2019-06-12 20:50:38,396 DEBUG    awx.main.dispatch task 8211beea-0bb6-4ca9-98a8-848cdfe9b7b6 starting awx.main.tasks.cluster_node_heartbeat(*[])
2019-06-12 20:50:38,396 DEBUG    awx.main.tasks Cluster node heartbeat task.
2019-06-12 20:50:38,420 DEBUG    awx.main.dispatch task 8211beea-0bb6-4ca9-98a8-848cdfe9b7b6 is finished
2019-06-12 20:50:38,437 DEBUG    awx.main.dispatch task 0df7f526-3c51-4e27-881f-0a5a113031f4 is finished
2019-06-12 20:50:58,370 DEBUG    awx.main.dispatch publish awx.main.scheduler.tasks.run_task_manager(6f759d25-6919-4fa2-8ac6-eaab4527c41d, queue=awx_private_queue)
[2019-06-12 20:50:58,370: DEBUG/Process-1] publish awx.main.scheduler.tasks.run_task_manager(6f759d25-6919-4fa2-8ac6-eaab4527c41d, queue=awx_private_queue)
2019-06-12 20:50:58,385 DEBUG    awx.main.dispatch delivered 6f759d25-6919-4fa2-8ac6-eaab4527c41d to worker[172] qsize 0
2019-06-12 20:50:58,386 DEBUG    awx.main.dispatch task 6f759d25-6919-4fa2-8ac6-eaab4527c41d starting awx.main.scheduler.tasks.run_task_manager(*[])
2019-06-12 20:50:58,386 DEBUG    awx.main.scheduler Running Tower task manager.
2019-06-12 20:50:58,406 DEBUG    awx.main.scheduler Starting Scheduler
2019-06-12 20:50:58,442 DEBUG    awx.main.dispatch task 6f759d25-6919-4fa2-8ac6-eaab4527c41d is finished
RESULT 2
OKREADY 
```

And the following in a loop in awx-web:
```
RESULT 2
OKREADY 
```

UPDATE: In OpenShift, unchecking the `Secure Route` in the route configuration seems to have solved the problem. Hence I am not sure if it's a bug at all, or just a misconfiguration from me. And if it is a bug, is it an AWX one or an Ansible one ? 




user: jdorel
issue_4066: state: open
title: RFE: Schedule jobs based on other scheduled job
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Add the ability to schedule a job to run based on the run of another job. See the following use case:
```
I have scheduled a job to run every 2nd Tuesday of the month within tower. 
Then I'm looking to run  a job against my test servers the following Saturday so T+4 days
Then a job the week after - T+11 days
And last a job two weeks after the previous - T+25days
```
The current ability to use 2nd or 3rd days of the week do not allow the flexibility this model does because in some instances, the 2nd Saturday may come after the 2nd Tuesday.
user: msilmser
issue_4055: state: open
title: IOError: [Errno 2] No such file or directory: '/var/lib/awx/.azure/azureProfile.json'
body: When run this command it works:
`sudo ansible-playbook -i hosts create-vm-azure.yml --extra-vars "vm_name=test flavor=Standard_D2s_v3 resource_group=nebula user_vm=nebula pass_vm=Password" -vvvv`

But whit run the job at AWX doesn´t works....

**Output:
ansible-playbook 2.7.7
config file = /var/lib/awx/projects/_6__github_jhon/ansible.cfg
configured module search path = [u'/var/lib/awx/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible-playbook
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
Using /var/lib/awx/projects/_6__github_jhon/ansible.cfg as config file

{
"_ansible_parsed": false,
"vm_name": "j",
"exception": "Traceback (most recent call last):\n File "/root/.ansible/tmp/ansible-tmp-1560352088.55-6858242544000/AnsiballZ_azure_rm_virtualmachine.py", line 113, in \n _ansiballz_main()\n File "/root/.ansible/tmp/ansible-tmp-1560352088.55-6858242544000/AnsiballZ_azure_rm_virtualmachine.py", line 105, in _ansiballz_main\n invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n File "/root/.ansible/tmp/ansible-tmp-1560352088.55-6858242544000/AnsiballZ_azure_rm_virtualmachine.py", line 48, in invoke_module\n imp.load_module('main', mod, module, MOD_DESC)\n File "/tmp/ansible_azure_rm_virtualmachine_payload_Sjg_wZ/main.py", line 1795, in \n File "/tmp/ansible_azure_rm_virtualmachine_payload_Sjg_wZ/main.py", line 1791, in main\n File "/tmp/ansible_azure_rm_virtualmachine_payload_Sjg_wZ/main.py", line 771, in init\n File "/tmp/ansible_azure_rm_virtualmachine_payload_Sjg_wZ/ansible_azure_rm_virtualmachine_payload.zip/ansible/module_utils/azure_rm_common.py", line 301, in init\n File "/tmp/ansible_azure_rm_virtualmachine_payload_Sjg_wZ/ansible_azure_rm_virtualmachine_payload.zip/ansible/module_utils/azure_rm_common.py", line 956, in init\n File "/tmp/ansible_azure_rm_virtualmachine_payload_Sjg_wZ/ansible_azure_rm_virtualmachine_payload.zip/ansible/module_utils/azure_rm_common.py", line 1142, in _get_credentials\n File "/tmp/ansible_azure_rm_virtualmachine_payload_Sjg_wZ/ansible_azure_rm_virtualmachine_payload.zip/ansible/module_utils/azure_rm_common.py", line 1096, in _get_azure_cli_credentials\n File "/var/lib/awx/venv/ansible/lib/python2.7/site-packages/azure/common/credentials.py", line 46, in get_azure_cli_credentials\n profile = get_cli_profile()\n File "/var/lib/awx/venv/ansible/lib/python2.7/site-packages/azure/common/credentials.py", line 28, in get_cli_profile\n ACCOUNT.load(os.path.join(azure_folder, 'azureProfile.json'))\n File "/var/lib/awx/venv/ansible/lib/python2.7/site-packages/azure/cli/core/_session.py", line 42, in load\n self.save()\n File "/var/lib/awx/venv/ansible/lib/python2.7/site-packages/azure/cli/core/_session.py", line 46, in save\n with codecs_open(self.filename, 'w', encoding=self._encoding) as f:\n File "/usr/lib64/python2.7/codecs.py", line 881, in open\n file = builtin.open(filename, mode, buffering)\nIOError: [Errno 2] No such file or directory: '/var/lib/awx/.azure/azureProfile.json'\n",
"changed": false,
"_ansible_item_label": "j",
"_ansible_delegated_vars": {
"ansible_delegated_host": "localhost",
"ansible_host": "localhost"
},
"module_stderr": "Traceback (most recent call last):\n File "/root/.ansible/tmp/ansible-tmp-1560352088.55-6858242544000/AnsiballZ_azure_rm_virtualmachine.py", line 113, in \n _ansiballz_main()\n File "/root/.ansible/tmp/ansible-tmp-1560352088.55-6858242544000/AnsiballZ_azure_rm_virtualmachine.py", line 105, in _ansiballz_main\n invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n File "/root/.ansible/tmp/ansible-tmp-1560352088.55-6858242544000/AnsiballZ_azure_rm_virtualmachine.py", line 48, in invoke_module\n imp.load_module('main', mod, module, MOD_DESC)\n File "/tmp/ansible_azure_rm_virtualmachine_payload_Sjg_wZ/main.py", line 1795, in \n File "/tmp/ansible_azure_rm_virtualmachine_payload_Sjg_wZ/main.py", line 1791, in main\n File "/tmp/ansible_azure_rm_virtualmachine_payload_Sjg_wZ/main.py", line 771, in init\n File "/tmp/ansible_azure_rm_virtualmachine_payload_Sjg_wZ/ansible_azure_rm_virtualmachine_payload.zip/ansible/module_utils/azure_rm_common.py", line 301, in init\n File "/tmp/ansible_azure_rm_virtualmachine_payload_Sjg_wZ/ansible_azure_rm_virtualmachine_payload.zip/ansible/module_utils/azure_rm_common.py", line 956, in init\n File "/tmp/ansible_azure_rm_virtualmachine_payload_Sjg_wZ/ansible_azure_rm_virtualmachine_payload.zip/ansible/module_utils/azure_rm_common.py", line 1142, in _get_credentials\n File "/tmp/ansible_azure_rm_virtualmachine_payload_Sjg_wZ/ansible_azure_rm_virtualmachine_payload.zip/ansible/module_utils/azure_rm_common.py", line 1096, in _get_azure_cli_credentials\n File "/var/lib/awx/venv/ansible/lib/python2.7/site-packages/azure/common/credentials.py", line 46, in get_azure_cli_credentials\n profile = get_cli_profile()\n File "/var/lib/awx/venv/ansible/lib/python2.7/site-packages/azure/common/credentials.py", line 28, in get_cli_profile\n ACCOUNT.load(os.path.join(azure_folder, 'azureProfile.json'))\n File "/var/lib/awx/venv/ansible/lib/python2.7/site-packages/azure/cli/core/_session.py", line 42, in load\n self.save()\n File "/var/lib/awx/venv/ansible/lib/python2.7/site-packages/azure/cli/core/_session.py", line 46, in save\n with codecs_open(self.filename, 'w', encoding=self._encoding) as f:\n File "/usr/lib64/python2.7/codecs.py", line 881, in open\n file = builtin.open(filename, mode, buffering)\nIOError: [Errno 2] No such file or directory: '/var/lib/awx/.azure/azureProfile.json'\n",
"_ansible_item_result": true,
"module_stdout": "",
"rc": 1,
"msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
"_ansible_ignore_errors": null,
"_ansible_no_log": false
}

FILE EXIST:
ansibleadmin@Ansible-Server:~$ cat /var/lib/awx/.azure/azureProfile.json
{
"cloudName": "AzureCloud",
"id": "ID",
"isDefault": true,
"name": "Pago por uso",
"state": "Enabled",
"tenantId": "TENANTID",
"client": "CLIENT",
"secret": "SERCRET",
"user": {
"name": "USER@outlook.com",
"type": "user"
}
}

PLAYBOOK

    name: Creando una VM en Azure componentes por defecto
    hosts: all
    tasks:
        name: Create VM with defaults
        azure_rm_virtualmachine:
          auth_source: cli
          resource_group: "{{ resource_group }}"
          admin_username: "{{ user_vm }}"
          admin_password: "{{ pass_vm }}"
          name: "{{ vm_name }}"
          vm_size: "{{ flavor }}"
          managed_disk_type: Standard_LRS
          open_ports: 8443
          image:
            offer: CentOS
            publisher: OpenLogic
            sku: '7.6'
            version: latest
        loop: "{{ vm_name_list }}"
        loop_control:
          loop_var: vm_name
        delegate_to: localhost

    Feature Request:

In host:
ansible 2.8.1
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/ansibleadmin/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.5/dist-packages/ansible
executable location = /usr/local/bin/ansible
python version = 3.5.2 (default, Nov 12 2018, 13:43:14) [GCC 5.4.0 20160609]


When set ansible_python_interpreter=/usr/bin/python3 get the follow error:

    An exception occurred during task execution. To see the full traceback, use -vvv. The error was: AttributeError: module 'enum' has no attribute 'IntFlag'


user: jhonjcastroh
issue_4031: state: open
title: Remove old v1 kind semantics from credential and add summary field with CredentialType namespace
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Currently, a Credential has a `kind` field that maps to what used to be known as the `kind` on the CredentialType, but is now known as `namespace` on the CredentialType (whereas `kind` onthe CredentialType is something else).

Additionally, attempting to filter on credential.kind does not work/is broken.

Proposal:
- [ ] Remove `kind` attribute from Credential
- [ ] Add summary field of CredentialType to Credential
     - [ ] Include `namespace` in this summary field
- [ ] Add to any release notes that users that want to filter Credentials by what used to be known as `kind` should now use `Credential.summary_fields.credential_type.namespace` (or however that should actually be written in the query)

Additional work:
- [ ] Update any calls in UI to use this new semantic
user: kdelee
issue_4028: state: open
title: Feature: Ability to import disconnected job results into Tower automatically or via an API
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

Background:

With an operations manager machine on network 1. That system is a single pane of glass management system for all other networks and machines (BM, VM, etc.). We would like to log into Tower and execute or schedule a job to run against an inventory. So far, nothing special.

However, network 2, network 3, network n, etc., are all on the other side of one or more one-way guard devices or in field locations with inconsistent connectivity or both. We need the ability to run scheduled jobs, on demand jobs and/or issue ad-hoc CLI playbooks against those systems from the Ops Mgr Tower.

Now we know that we could have Tower create a CSV file as part of the job that gets picked up in a watch folder, moved across the guard and to a location that performs the job on whatever machine on whatever network. That's not a concern.

The trick is getting the results of those jobs back into the Ops Mgr Tower on network 1. We can tell the jobs via the playbook to parse the logs or output of the jobs to text files, JSON, whatever. We can get those files back across the one-way guards.

Request:

We need the ability to import disconnected job results into Tower automatically or via an API so that the Ops Mgr Tower can remain the single pane of glass for jobs and results. Even when Tower cannot talk to the target machines directly. We are running additional Tower servers on each network, but want the Ops Mgr Tower to be the broker / primary / source of truth.
user: tra7nce
issue_4023: state: open
title: Project updates do not show credential in list view
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Briefly describe the problem. -->
When testing https://github.com/ansible/awx/issues/2891 I noticed that project updates do not show credential in the expanded list view.

![Screenshot from 2019-06-06 16-50-04](https://user-images.githubusercontent.com/29239279/59066123-4ebf6880-887c-11e9-9c19-9da5fbd7ee74.png)

1st item is project update with scm credential
2nd item is inventory with credential
3rd item is job from JT with credential.

##### ENVIRONMENT
* AWX version: devel
* AWX install method: local docker on linux

##### STEPS TO REPRODUCE
<!-- Please describe exactly how to reproduce the problem. -->
Create a SCM credential
Create a project and use the SCM credential.
Run an update
Go to Jobs list view.
Click on expanded list view.

##### EXPECTED RESULTS
<!-- What did you expect to happen when running the steps above? -->
Shows credentials like other jobs

##### ACTUAL RESULTS
<!-- What actually happened? -->
Not shown

##### ADDITIONAL INFORMATION
<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->
I do want to note it IS shown on the project update itself.
![Screenshot from 2019-06-06 17-01-00](https://user-images.githubusercontent.com/29239279/59066287-acec4b80-887c-11e9-883f-4cbd15aaa4b6.png)

user: kdelee
issue_4016: state: open
title: Usage of AND operator in Org,team LDAP mapping 
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
We are missing the possibility to use AND operator in specification of LDAP TEAM MAPPING. 

##### USE CASE
We have 2 AD groups (linuxadmin and restricted) and we would like to give access to team within AWX called "restricted" only to users, who are members of both groups.

LDAP TEAM MAP example:
 ```
{
 "restricted": {
  "organization": "Company",
  "users": [ 
    "CN=linuxadmin,OU=Admin,DC=example,DC=com" **AND**
    "CN=restricted,OU=Admin,DC=example,DC=com"
  ],
  "remove": true
```

AWX version 4.0.0
user: OndraLipo
labels: component:authentication: For issues related to authentication
issue_4015: state: open
title: venv for Ansible and Python3 with AWX build 4.0.0
body: ##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug Report

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI


##### SUMMARY
/usr/bin/awx-manage inventory_import in a playbook fails 

Cause: AWX 4.0.0 has pre-installed venv for Python3(AWX) and Python2(Ansible), but requires venv for Python3(Ansible). 

I have installed the venv for Python3(Ansible) and this fixes the problem but it should be pre-installed to enable std functionality. so I don't have to manually install on awx-task and awx-web images. 

I would like the venv for Python3(Ansible) pre-installed with the images.

##### ENVIRONMENT
* AWX version: 4.0.0
* AWX install method:docker on linux, 
* Ansible version:  2.7.9
* Operating System: RHEL 7


##### STEPS TO REPRODUCE

local_action: command /usr/bin/awx-manage inventory_import --source /tmp/Patching_Inventories_updates/"{{ Inventory_Name }}".txt --inventory-name "{{ Inventory_Name }}"

##### EXPECTED RESULTS

inventory is imported

##### ACTUAL RESULTS

Inventory import fails.
After I install the venv for Python3(Ansible) and select the ANSIBLE ENVIRONMENT in the Template, it works.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: cbutler65
issue_3988: state: open
title: Jobs canceled before starting should not show a "finished" time
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Confusing UI if you cancel a job while it is still in "pending" state, caused by API behavior.

##### ENVIRONMENT
* AWX version: 4.0.0
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  X.Y.Z
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

Launch a job that is blocked by some other job, so it remains in "pending" (or send to an instance group with no capacity), and then cancel it.

##### EXPECTED RESULTS

Mostly null fields related to started, finished, etc.

The job never started and never finished.

##### ACTUAL RESULTS

The UI shows that the job finished, see 7844

![Screen Shot 2019-06-03 at 8 50 50 AM](https://user-images.githubusercontent.com/1385596/58803296-12baa800-85dd-11e9-999f-a678ce860c2e.png)


##### ADDITIONAL INFORMATION

Caused by the API fields.

```json
    "scm_type": "git",
    "scm_url": "https://github.com/ansible/test-playbooks.git",
    "scm_branch": "",
    "scm_clean": false,
    "scm_delete_on_update": false,
    "credential": null,
    "timeout": 0,
    "unified_job_template": 3838,
    "launch_type": "manual",
    "status": "canceled",
    "failed": true,
    "started": null,
    "finished": "2019-06-03T12:39:05.272329Z",
    "elapsed": 0.0,
    "job_args": "",
    "job_cwd": "",
    "job_env": {},
    "job_explanation": "",
    "execution_node": "",
    "result_traceback": "",
    "event_processing_finished": true,
    "project": 3838,
    "job_type": "check",
```

Expectation is that the `finished` field should remain null.

Previously @ryanpetrello made the suggestion

> Seems like if we really wanted to have accurate data, we'd want another column to record the "canceled_on" datestamp.

This issue also makes the argument for an independent field to track canceled time. (but we may prefer to track that as a separate enhancement)
user: AlanCoding
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_3986: state: open
title: add_host module in awx does not behave the same as in ansible command line 
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY

Ansible moudle "add_host" does not behave as expect in awx

##### ENVIRONMENT
* AWX version: 4.0.0.0
* AWX install method: docker
* Ansible version:  2.7.9
* Operating System: CentOS Linux release 7.6.1810 (Core)
* Web Browser: 74.0.3729.169 (Official Build) (64-bit)

##### STEPS TO REPRODUCE

Here is my playbook, I want to add host to inventory in memory during ansible runtime, and I will run some tasks in the host I add.

```
- hosts: all
  gather_facts: false
  tasks:
    - add_host:
        hostname: TEMP_HOST
        ansible_host: "this is an ip address"
        ansible_port: 22

    - debug: 
        var: ansible_play_hosts

- hosts: TEMP_HOST
  gather_facts: false
  tasks:
    - shell: hostname
```

##### EXPECTED RESULTS

In command line, I use 'ansible-playbook' to run this playbook. I get the result:
```
TASK [add temp salt master host] *************************************************
changed: [iZbp1hwphs251f396vkufpZ]

TASK [debug] *********************************************************************
ok: [iZbp1hwphs251f396vkufpZ] => {
    "ansible_play_hosts": [
        "TEMP_HOST",
        "iZbp1hwphs251f396vkufpZ"
    ]
}

PLAY [TEMP_HOST] *****************************************************************

TASK [get hostname] **************************************************************
changed: [TEMP_HOST]
```
The host `TEMP_HOST` is added to ansible inventory in memory sucessfully.
And I can use it later in the playbook.

##### ACTUAL RESULTS

When I use the playbook in awx, I get different result.

```
PLAY [all] *********************************************************************
TASK [add temp salt master host] ***********************************************
changed: [iZbp1hwphs251f396vkufpZ]
TASK [debug] *******************************************************************
ok: [iZbp1hwphs251f396vkufpZ] => {
    "ansible_play_hosts": [
        #  we miss the TEMP_HOST
        "iZbp1hwphs251f396vkufpZ"
    ]
}
PLAY [TEMP_HOST] ***************************************************************
skipping: no hosts matched
```

The TEMP_HOST does not add to ansible_play_hosts and we could not match it. The behavior is out of our expect.

I can not find any document or other issues about this situation. Did i use it in a wrong way? Or this is an expected behavior in AWX?

##### ADDITIONAL INFORMATION

None
user: xuyixin1996
issue_3985: state: open
title: automatically create surveys
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
It would be a great enhancement, if imported playbooks to AWX/Tower would create a survey of all variables automatically.

At the moment, you have to import your playbook (or one from galaxy) as a project, create templates and create a survey with every variable you have.
user: pwe123345
issue_3959: state: open
title: No instance found with the current cluster host id Exceptions after clean install with Docker
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
AWX is spaming the logs after clean install

##### ENVIRONMENT
* AWX version: 4.0.0.
* AWX install method: docker on linux
* Ansible version:  2.8.0
* Operating System: Debian Stretch
* Web Browser: Chrome

##### STEPS TO REPRODUCE
after ansible-playbook -i inventory install.yml and a check if all is working like mentioned in the install guide with docker logs -f awx_task i get this log spamings

` File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:01:53,534 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:01:54,537 INFO spawned: 'dispatcher' with pid 810
2019-05-28 19:01:55,538 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:01:56,245 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:01:57,247 INFO spawned: 'dispatcher' with pid 816
2019-05-28 19:01:58,249 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:01:58,931 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:01:59,934 INFO spawned: 'dispatcher' with pid 822
2019-05-28 19:02:00,936 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
RESULT 2
OKREADY
2019-05-28 19:02:01,774 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:02,777 INFO spawned: 'dispatcher' with pid 828
2019-05-28 19:02:03,779 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:04,442 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:05,445 INFO spawned: 'dispatcher' with pid 834
2019-05-28 19:02:06,446 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:07,183 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:08,185 INFO spawned: 'dispatcher' with pid 840
2019-05-28 19:02:09,187 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:09,871 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:10,873 INFO spawned: 'dispatcher' with pid 846
2019-05-28 19:02:11,875 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:12,518 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:13,520 INFO spawned: 'dispatcher' with pid 852
2019-05-28 19:02:14,522 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:15,187 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:16,189 INFO spawned: 'dispatcher' with pid 858
2019-05-28 19:02:17,191 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:17,881 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:18,883 INFO spawned: 'dispatcher' with pid 864
2019-05-28 19:02:19,885 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:20,560 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:21,562 INFO spawned: 'dispatcher' with pid 870
2019-05-28 19:02:22,564 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:23,239 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:24,242 INFO spawned: 'dispatcher' with pid 876
2019-05-28 19:02:25,243 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:25,917 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:26,919 INFO spawned: 'dispatcher' with pid 882
2019-05-28 19:02:27,921 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:28,666 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:29,669 INFO spawned: 'dispatcher' with pid 888
2019-05-28 19:02:30,670 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:31,319 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:32,322 INFO spawned: 'dispatcher' with pid 894
2019-05-28 19:02:33,323 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:33,995 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:34,998 INFO spawned: 'dispatcher' with pid 900
2019-05-28 19:02:35,999 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:36,684 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:37,686 INFO spawned: 'dispatcher' with pid 906
2019-05-28 19:02:38,688 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:39,391 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:40,394 INFO spawned: 'dispatcher' with pid 912
2019-05-28 19:02:41,395 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:42,045 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:43,048 INFO spawned: 'dispatcher' with pid 918
2019-05-28 19:02:44,049 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:44,694 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:45,696 INFO spawned: 'dispatcher' with pid 924
2019-05-28 19:02:46,698 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:47,358 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:48,360 INFO spawned: 'dispatcher' with pid 930
2019-05-28 19:02:49,362 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:50,019 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:51,021 INFO spawned: 'dispatcher' with pid 936
2019-05-28 19:02:52,023 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:52,666 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:53,668 INFO spawned: 'dispatcher' with pid 942
2019-05-28 19:02:54,670 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:55,319 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:56,321 INFO spawned: 'dispatcher' with pid 948
2019-05-28 19:02:57,323 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:02:58,498 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:02:59,500 INFO spawned: 'dispatcher' with pid 954
2019-05-28 19:03:00,502 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
RESULT 2
OKREADY
2019-05-28 19:03:01,169 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:03:02,172 INFO spawned: 'dispatcher' with pid 960
2019-05-28 19:03:03,174 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:03:03,934 INFO exited: dispatcher (exit status 1; not expected)
2019-05-28 19:03:04,937 INFO spawned: 'dispatcher' with pid 966
2019-05-28 19:03:05,938 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
Traceback (most recent call last):
  File "/usr/bin/awx-manage", line 11, in <module>
    load_entry_point('awx==4.0.0.0', 'console_scripts', 'awx-manage')()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/__init__.py", line 140, in manage
    execute_from_command_line(sys.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/django/core/management/base.py", line 330, in execute
    output = self.handle(*args, **options)
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 121, in handle
    reaper.reap()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/dispatch/reaper.py", line 36, in reap
    me = instance or Instance.objects.me()
  File "/var/lib/awx/venv/awx/lib64/python3.6/site-packages/awx/main/managers.py", line 116, in me
    raise RuntimeError("No instance found with the current cluster host id")
RuntimeError: No instance found with the current cluster host id
2019-05-28 19:03:06,666 INFO exited: dispatcher (exit status 1; not expected)
`

##### EXPECTED RESULTS

clean logs 

##### ACTUAL RESULTS

log with exceptions every second

##### ADDITIONAL INFORMATION

inventory:
`localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python3"

[all:vars]

dockerhub_base=ansible
dockerhub_version=latest

# Common Docker parameters
awx_task_hostname=awx.domain
awx_web_hostname=awx.domain
postgres_data_dir=/home/pgdocker
host_port=10880
docker_compose_dir=/home/awxcompose


# Set pg_hostname if you have an external postgres server, otherwise
# a new postgres service will be created
# pg_hostname=postgresql
pg_username=awx
# pg_password should be random 10 character alphanumeric string, when postgresql is running on kubernetes
# NB: it's a limitation of the "official" postgres helm chart
pg_password=lllllllllllllll
pg_database=awx
pg_port=5432
#pg_sslmode=require

# RabbitMQ Configuration
rabbitmq_password=jjjjjjjjjj
rabbitmq_erlang_cookie=cookiemonster

admin_user=secretuser
admin_password=secretpw
create_preload_data=True
secret_key=verysecret


awx_container_search_domains=own.domain
awx_alternate_dns_servers="10.8.0.59,8.8.8.8"
project_data_dir=/var/lib/awx/projects
`

user: nixmomo
issue_3958: state: open
title: CRL and OCSP Revocation
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Include the ability to check CRL and OCSP for integrations associated to AWX/Tower. For example, validate based on CRL when connecting to log aggregator endpoints.
user: jamesmarshall24
issue_3956: state: open
title: Error starting project unknown cause
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
AWX Installation failed with unknow error

##### ENVIRONMENT
* AWX version: 4.0.0
* AWX install method: docker on linux
* Ansible version:  2.8.0
* Operating System: CentOS 7.6.1810
* Web Browser: Chrome

##### STEPS TO REPRODUCE

I had AWX 3.0.1 running and then I tried to install AWX 4.0.0 on top, the same procedure worked fine to upgrade AWX 3.0.0. to AWX 3.0.1

```
`# ansible-playbook -i inventory install.yml -vvvv

.
.
TASK [local_docker : Start the containers] **************************************************************************************************************************************************************************************************
task path: /root/awx-4/installer/roles/local_docker/tasks/compose.yml:25
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: root
<localhost> EXEC /bin/sh -c 'echo ~root && sleep 0'
<localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-tmp-1559049469.25-220943567830274 `" && echo ansible-tmp-1559049469.25-220943567830274="` echo /root/.ansible/tmp/ansible-tmp-1559049469.25-220943567830274 `" ) && sleep 0'
Using module file /usr/lib/python2.7/site-packages/ansible/modules/cloud/docker/_docker_service.py
<localhost> PUT /root/.ansible/tmp/ansible-local-60293Nj0BSi/tmpiVJnh7 TO /root/.ansible/tmp/ansible-tmp-1559049469.25-220943567830274/AnsiballZ__docker_service.py
<localhost> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-tmp-1559049469.25-220943567830274/ /root/.ansible/tmp/ansible-tmp-1559049469.25-220943567830274/AnsiballZ__docker_service.py && sleep 0'
<localhost> EXEC /bin/sh -c '/usr/bin/env python /root/.ansible/tmp/ansible-tmp-1559049469.25-220943567830274/AnsiballZ__docker_service.py && sleep 0'
<localhost> EXEC /bin/sh -c 'rm -f -r /root/.ansible/tmp/ansible-tmp-1559049469.25-220943567830274/ > /dev/null 2>&1 && sleep 0'
The full traceback is:
WARNING: The below traceback may *not* be related to the actual failure.
  File "/tmp/ansible_docker_service_payload_Dj9vLs/__main__.py", line 764, in cmd_up
    timeout=self.timeout)
  File "/usr/lib/python2.7/site-packages/compose/project.py", line 559, in up
    'Encountered errors while bringing up the project.'

[DEPRECATION WARNING]: The 'docker_service' module has been renamed to 'docker_compose'.. This feature will be removed in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
fatal: [localhost]: FAILED! => {
    "changed": false,
    "errors": [],
    "invocation": {
        "module_args": {
            "api_version": "auto",
            "build": false,
            "ca_cert": null,
            "client_cert": null,
            "client_key": null,
            "debug": false,
            "definition": null,
            "dependencies": true,
            "docker_host": "unix://var/run/docker.sock",
            "files": null,
            "hostname_check": false,
            "nocache": false,
            "project_name": null,
            "project_src": "/var/lib/awx",
            "pull": false,
            "recreate": "smart",
            "remove_images": null,
            "remove_orphans": false,
            "remove_volumes": false,
            "restarted": false,
            "scale": null,
            "services": null,
            "ssl_version": null,
            "state": "present",
            "stopped": false,
            "timeout": 10,
            "tls": false,
            "tls_hostname": "localhost",
            "validate_certs": false
        }
    },
    "module_stderr": "Creating awx_web ... \r\n\r\u001b[1B",
    "module_stdout": "",
    "msg": "Error starting project unknown cause"
}

PLAY RECAP **********************************************************************************************************************************************************************************************************************************
localhost                  : ok=8    changed=0    unreachable=0    failed=1    skipped=77   rescued=0    ignored=0
```
`

more dockers are created:
```
`# docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                 NAMES
6b20e23a0be7        ansible/awx_rabbitmq:3.7.4   "docker-entrypoint.s…"   7 minutes ago       Up 6 seconds        4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp   awx_rabbitmq
5d25e036cd96        memcached:alpine             "docker-entrypoint.s…"   7 minutes ago       Up 6 seconds        11211/tcp                                             awx_memcached
695c8aa6d2b7        postgres:9.6                 "docker-entrypoint.s…"   7 minutes ago       Up 5 seconds        5432/tcp                                              awx_postgres
8246270599a5        ansible/awx_task:3.0.1       "/tini -- /bin/sh -c…"   About an hour ago   Up 4 seconds        8052/tcp                                              awx_task
cb18997147ae        ansible/awx_web:3.0.1        "/tini -- /bin/sh -c…"   About an hour ago   Up 4 seconds        0.0.0.0:8052->8052/tcp                                awx_web
1580ef93f47d        memcached:alpine             "docker-entrypoint.s…"   21 hours ago        Up 6 seconds        11211/tcp                                             memcached
97c10bb0b7ac        ansible/awx_rabbitmq:3.7.4   "docker-entrypoint.s…"   21 hours ago        Up 6 seconds        4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp   rabbitmq
4c527a00794b        postgres:9.6                 "docker-entrypoint.s…"   21 hours ago        Up 6 seconds        5432/tcp                                              postgres`
```


##### EXPECTED RESULTS

AWX Installed successfully

##### ACTUAL RESULTS
```

    "module_stderr": "Creating awx_web ... \r\n\r\u001b[1B",
    "module_stdout": "",
    "msg": "Error starting project unknown cause"
```

##### ADDITIONAL INFORMATION

```
`# cat inventory
localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python"

[all:vars]

# Remove these lines if you want to run a local image build
# Otherwise the setup playbook will install the official Ansible images. Versions may
# be selected based on: latest, 1, 1.0, 1.0.0, 1.0.0.123
# by default the base will be used to search for ansible/awx_web and ansible/awx_task
dockerhub_base=ansible

# Openshift Install
# Will need to set -e openshift_password=developer -e docker_registry_password=$(oc whoami -t)
#           or set -e openshift_token=TOKEN
# openshift_host=127.0.0.1:8443
# openshift_project=awx
# openshift_user=developer
# openshift_skip_tls_verify=False
# openshift_pg_emptydir=True

# Kubernetes Install
# kubernetes_context=test-cluster
# kubernetes_namespace=awx
# tiller_namespace=kube-system
# Optional Kubernetes Variables
# pg_persistence_storageClass=StorageClassName
# pg_cpu_limit=1000
# pg_mem_limit=2

# Kubernetes and Openshift Install Resource Requests
# This are the request and limit values for a pod's container for task/web/rabbitmq/memcached/management.
# The total amount of requested resources for a pod is the sum of all
# resources requested by all containers in the pod
# A cpu_request of 1500 is 1.5 cores for the container to start out with.
# A cpu_limit defines the maximum cores that that container can reserve.
# A mem_request of 2 is for 2 gigabytes of memory for the container
# A mem_limit defines the maximum memory that that container can reserve.
# Default values for these entries can be found in ./roles/kubernetes/defaults/main.yml
# task_cpu_request=1500
# task_mem_request=2
# task_cpu_limit=2000
# task_mem_limit=4
# web_cpu_limit=1000
# web_mem_limit=2
# rabbitmq_cpu_limit=1000
# rabbitmq_mem_limit=3
# memcached_cpu_limit=1000
# memcached_mem_limit=2
# management_cpu_limit=2000
# management_mem_limit=2

# Common Docker parameters
awx_task_hostname=awx
awx_web_hostname=awxweb
postgres_data_dir=/ansible/pgdocker
host_port=8052

# Docker Compose Install
# use_docker_compose=false
# The docker_compose.yml file will be created in this directory
# The name of the directory (here "awx") will be the prefix of the docker containers
docker_compose_dir=/var/lib/awx

# Required for Openshift when building the image on your own
# Optional for Openshift if using Dockerhub or another prebuilt registry
# Required for Standalone Docker Install if building the image on your own
# Optional for Standalone Docker Install if using Dockerhub or another prebuilt registry
# Required for Docker Compose Install if building the image on your own
# Optional for Docker Compose Install if using Dockerhub or another prebuilt registry
# Define if you want the image pushed to a registry. The container definition will also use these images
# docker_registry=172.30.1.1:5000
# docker_registry_repository=awx
# docker_registry_username=developer


# Docker_image will not attempt to push to remote if the image already exists locally
# Set this to true to delete images from docker on the build host so that they are pushed to the remote repository
# docker_remove_local_images=False

# Set pg_hostname if you have an external postgres server, otherwise
# a new postgres service will be created
# pg_hostname=postgresql
pg_username=xxxx
# pg_password should be random 10 character alphanumeric string, when postgresql is running on kubernetes
# NB: it's a limitation of the "official" postgres helm chart
pg_password=xxxx$$
pg_database=xxxx_db
pg_port="5432"

# RabbitMQ Configuration
rabbitmq_password=XXXX
rabbitmq_erlang_cookie=XXXX

# Use a local distribution build container image for building the AWX package
# This is helpful if you don't want to bother installing the build-time dependencies as
# it is taken care of already.
# NOTE: IMPORTANT: If you are running a mininshift install, using this container might not work
#                  if you are using certain drivers like KVM where the source tree can't be mapped
#                  into the build container.
#                  Thus this setting must be set to False which will trigger a local build. To view the
#                  typical dependencies that you might need to install see:
#                  installer/image_build/files/Dockerfile.sdist
# use_container_for_build=true

# This will create or update a default admin (superuser) account in AWX, if not provided
# then these default values are used
admin_user=admin
admin_password=XXXXX

# Whether or not to create preload data for demonstration purposes
create_preload_data=True

# AWX Secret key
# It's *very* important that this stay the same between upgrades or you will lose the ability to decrypt
# your credentials
secret_key=XXXXX

# Build AWX with official logos
# Requires cloning awx-logos repo into the project root.
# Review the trademark guidelines at https://github.com/ansible/awx-logos/blob/master/TRADEMARKS.md
# awx_official=false

# Proxy
#http_proxy=http://proxy:3128
#https_proxy=http://proxy:3128
#no_proxy=mycorp.org

# Container networking configuration
# Set the awx_task and awx_web containers' search domain(s)
#awx_container_search_domains=example.com,ansible.com
# Alternate DNS servers
#awx_alternate_dns_servers="10.1.2.3,10.2.3.4"

# AWX project data folder. If you need access to the location where AWX stores the projects
# it manages from the docker host, you can set this to turn it into a volume for the container.
#project_data_dir=/var/lib/awx/projects
project_data_dir=/ansible/projects

# CA Trust directory. If you need to provide custom CA certificates, supplying
# this variable causes this directory on the host to be bind mounted over
# /etc/pki/ca-trust in the awx_task and awx_web containers.
# NOTE: only obeyed in local_docker install
#ca_trust_dir=/etc/pki/ca-trust/source/anchors

# Include /etc/nginx/awx_extra.conf
# Note the use of glob pattern for nginx
# which makes include "optional" - i.e. not fail
# if file is absent
#extra_nginx_include="/etc/nginx/awx_extra[.]conf"`
```
user: ssaammoo
issue_3939: state: open
title: Failed to update project: 4. PUT status: 400
body: EDIT: I have uncomment this line like it's said and relaunch install and I have the exact same issue
`#project_data_dir=/var/lib/awx/projects`
##### ISSUE TYPE
Cannot save project
##### SUMMARY

I have done what it is explained on issue 857 but it doesn't work

##### ENVIRONMENT
* Ubuntu bionic
* AWX install method:  docker on linux
* Ansible version: ansible 2.8.0
* Operating System:  Ubuntu 18.04.2 LTS
* Web Browser: Chrome

##### STEPS TO REPRODUCE

I have added line like said in issue reported : 857 but after reinstall web GUI doesn't work. 
I have added lines in local_docker/main.yml

```
- import_tasks: set_image.yml
- import_tasks: compose.yml

- name: Activate AWX Web Container
  docker_container:
    name: awx_web
    state: started
    restart_policy: unless-stopped
    image: "{{ awx_web_docker_actual_image }}"
    volumes: "{{ project_data_dir }}:/var/lib/awx/projects:rw"

- name: Activate AWX Task Container
  docker_container:
    name: awx_task
    state: started
    restart_policy: unless-stopped
    image: "{{ awx_task_docker_actual_image }}"
    volumes: "{{ project_data_dir }}:/var/lib/awx/projects:rw"
```

When I comment line and reinstall it's work fine.

I have added in inventory But I have still the issue.
`project_data_dir=/opt/awx_projects `


I can see folder created test folder in /opt/awx_projects  
```
ls /opt/awx_projects/
_6__demo_project145956  _6__demo_project145956.lock  test  test2
```
But I cannot save the project after selected one When I click on save I have the issue : Failed to update project: 6. PUT status: 400

I have change rigth to 777 for awx_project folder

```
/opt$ ls -lrt
total 12
drwxr-xr-x 3 root root 4096 May 16 16:51 snow
drwx--x--x 4 root root 4096 May 17 16:38 containerd
drwxrwxrwx 6 root root 4096 May 21 17:04 awx_projects
```


##### EXPECTED RESULTS

Create manual project

##### ACTUAL RESULTS

Mount volume and web GUI page not found

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: ghost
issue_3935: state: open
title: An incorrect folder tree is created during roles download
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - UI

##### SUMMARY
A strange folder tree appears once the roles are downloaded.. 

##### ENVIRONMENT
* AWX version: 4.0.0
* AWX install method: docker on linux
* Ansible version:  2.8.0
* Operating System: Ubuntu eoan/Debian buster
* Web Browser: chrome Version 74.0.3729.157 (Official Build) (64-bit)

##### STEPS TO REPRODUCE
- Settings/Jobs/Enable Role Download: ON
![Roles download enabled](https://user-images.githubusercontent.com/13176858/57763788-70588480-7702-11e9-96e7-818cf049374a.png)
- create playbooks project:
  + playbooks SCM type: git
  + playbooks SCM URL: valid private URL (not hosted on ansible galaxy)
  + playbooks SCM Update Options:
    * Clean
    * Delete on Update
    * Update Revision on Launch
  + playbooks git repository contains ```roles/requirements.yml```
  ```
  - src: <roles SCM private URL>
    scm: git
  ```

##### EXPECTED RESULTS

1) playbooks git repository cloned
2) roles downloaded from ```<roles SCM private URL>```
3) the folder tree of the downloaded roles should exactly match the folder tree of the roles within the repository:
```
├── roles/
│   ├── role-name-1
│   ├── role-name-2
│   ├── ...
│   └── requirements.yml
```

##### ACTUAL RESULTS

1) playbooks git repository cloned, including the file ```roles/requirements.yml```
2) roles are downloaded
3) the folder tree of the downloaded roles does not exactly match the folder tree of the roles within the repository:
```
├── roles
│   ├── git-Roles ------------------> name of the parent folder hosting the git roles repository
│   │   ├── git-Roles --------------> all roles are downloaded except the 'cgit' role
│   │   │   ├── role-name-1
│   │   │   ├── role-name-2
│   │   │   ├── ...
│   │   ├── handlers --------------> from the 'cgit' role
│   │   │   └── main.yml
│   │   ├── meta ------------------> from the 'cgit' role
│   │   │   └── main.yml
│   │   ├── README.md -------------> from the 'cgit' role
│   │   ├── tasks -----------------> from the 'cgit' role
│   │   │   └── main.yml
│   │   ├── tests -----------------> from the 'cgit' role
│   │   │   ├── inventory
│   │   │   └── test.yml
│   │   ├── .travis.yml -----------> from the 'cgit' role
│   │   └── vars ------------------> from the 'cgit' role
│   │       └── main.yml
│   └── requirements.yml
```

##### SUGGESTION:
The roles should be cloned within ```<playbook-dir>/roles``` with ```"git clone <roles SCM URL> ."``` instead of ```"git clone <roles SCM URL>"```

##### ADDITIONAL INFORMATION:
Private git repositories are located on the host running the AWX containers

user: jean-christophe-manciot
issue_3915: state: open
title: Admin password is always reset during install
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When running multiple times the installer, the admin password is always reset. If I have changed the password from the web, after running the installer, the password is reset to the default.

##### ENVIRONMENT
* AWX version: 4.0.0
* AWX install method: kubernetes (microk8s)
* Ansible version:  ansible 2.7.10
* Operating System: Ubuntu 18.04 x64
* Web Browser: Firefox 66

##### STEPS TO REPRODUCE

* Run the installer
* Change the admin password from the web UI
* Run the installer again (for an upgrade, testing, etc)

##### EXPECTED RESULTS

Keep the password changed in the web UI.

##### ACTUAL RESULTS

The password is reset with the one in the inventory.

user: okelet
issue_3879: state: open
title: Web UI not working when running AWX behind reverse proxy on a subdomain 
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
When running AWX behind a reverse proxy on a subdomain, the UI is broken due to wrong URL in links to static assets. The API is working okay.
see #631 but that not resolved me issue.

##### ENVIRONMENT
* AWX version: 4.0.0.0
* AWX install method: docker on linux
* Ansible version:  2.7.9
* Operating System: Ubuntu 18.04.2 LTS
* Web Browser:

##### STEPS TO REPRODUCE
configure nginx with :
```bash
# locations.conf
...
location /awx/ {
        proxy_pass http://awx_web_ip:80/;
        proxy_http_version 1.1;
        proxy_set_header   Host               $host;
        proxy_set_header   X-Real-IP          $remote_addr;
        proxy_set_header   X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto  $scheme;
        proxy_set_header   Upgrade            $http_upgrade;
        proxy_set_header   Connection         "upgrade";
      }
```

##### EXPECTED RESULTS

login page an navigation work well

##### ACTUAL RESULTS
all assets are not loaded, references to static is write in 
header to '/static/'

see index:
```html
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="shortcut icon" href="/static/assets/favicon.ico?v=4.0.0.0" />
    <script>
        var $basePath = '/static/';
        window.liveUpdates = "True" === "False" ? false : true;
    </script>
    
        <link href="/static/css/vendor.8778ab7be905d20927b3.css" rel="stylesheet" />
    
        <link href="/static/css/app.bd927cc14dd2d4bf0c9a.css" rel="stylesheet" />
    
    
        <script src="/static/js/vendor.8778ab7be905d20927b3.js"></script>
    
        <script src="/static/js/app.bd927cc14dd2d4bf0c9a.js"></script>
    
</head>
```


##### ADDITIONAL INFORMATION

all works well if I put location / but I have many other website behind nginx.

user: Climberdav
issue_3847: state: open
title: Allow for configurable ciphers for encrypting values in the database.
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

Some organizations would prefer to use CTR rather than CBC.
user: gamuniz
issue_3836: state: open
title: SAML Login - 502 Bad Gateway - upstream sent too big header
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
I am trying to login with SAML and although my user logs in successfully I am receiving 502 error. Same thing does not happen with other users.

Logs Sample:
```
2019-05-06 09:11:40,603 INFO     awx.sso.views User **** logged in
2019/05/06 09:11:40 [error] 136#0: *2704 upstream sent too big header while reading response header from upstream, client: 172.19.0.7, server: _, request: "GET /sso/complete/ HTTP/1.1", upstream: "uwsgi://127.0.0.1:8050", host: "*******", referrer: "*****" [pid: 140|app: 0|req: 400/1218] 172.19.0.7 () {54 vars in 1863 bytes} [Mon May  6 09:11:40 2019] GET /sso/complete/ => generated 0 bytes in 92 msecs (HTTP/1.1 301) 10 headers in 5267 bytes (1 switches on core 0)
```

##### ENVIRONMENT
* AWX version: 4.0.0
* AWX install method: docker on linux
* Ansible version:  2.5.1
* Operating System: Ubuntu 18.04
* Web Browser: Firefox, Chromium

##### ADDITIONAL INFORMATION
Based on Google search I am suspecting that  an increase in `proxy_buffer_size` is required to nginx configuration of awx_web, but I am opening the issue to be sure.
user: skatsaounis
labels: component:authentication: For issues related to authentication
issue_3819: state: open
title: Permission error on relaunch job_templates with Execute permissions
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
A user has Execute permission on a job_template. 
This user is permitted to run a job_templates.
This user is not permitted to relaunch this job_templates.

##### ENVIRONMENT
* AWX version: 3.0.1
* AWX install method: docker on linux
* Ansible version:  2.7.7
* Operating System: centos7
* Web Browser: Chrome v63.0

##### STEPS TO REPRODUCE

Create a user with Execute permission on a job_template. 
![Capture3](https://user-images.githubusercontent.com/26538843/57136134-1ecc0380-6dac-11e9-950d-f3e8e317d7e6.PNG)


Run a template that failed
relaunch this template
![Capture1](https://user-images.githubusercontent.com/26538843/57136159-32776a00-6dac-11e9-838a-b767144c4d1f.PNG)

a popup is displayed
##### EXPECTED RESULTS

The job_template is supposed to be executed 

##### ACTUAL RESULTS

![Capture2](https://user-images.githubusercontent.com/26538843/57136169-3dca9580-6dac-11e9-9f85-5dd91050e3f4.PNG)



##### ADDITIONAL INFORMATION



user: tota45
issue_3817: state: open
title: AWX V4.0.0 : Missing job outputs
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
<!-- Missing job outputs . -->

##### ENVIRONMENT
* AWX version: 4.0.0
* AWX install method:  docker on linux
* Ansible version:  2.7
* Operating System: Centos 7
* Web Browser: Firefox

##### STEPS TO REPRODUCE
 I have AWX 4.0.1 running in the Docker containers, everything worked just fine but the problem is that when i run a job nothing is showing !! thanks.

user: Mohamed095
issue_3792: state: open
title: Investigate SCIM support
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

SCIM allows social-auth users (SAML, etc.) to automatically be provisioned *and deprovisioned* when necessary, allowing for more secure usage of social auth.

django lib here: https://github.com/15five/django-scim2

user: wenottingham
labels: component:authentication: For issues related to authentication
issue_3784: state: open
title: Possible to move a host from one inventory to another
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
Using the API, a client can move a host from one inventory to another.

This leaves in place links to groups and inventory sources, pointing to the old inventory. This leaves the server in a very degenerate state.

##### ENVIRONMENT
* AWX version: 4.0.0
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  X.Y.Z
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

Create 2 inventories.

Inside the first inventory, create a host and a group, make the host a child of the group.

Get the pk of the host and the pk of the second inventory

```
POST
/api/v2/inventories/<pk of second inventory>/hosts/
{"id": <pk of host in first inventory>}
```

##### EXPECTED RESULTS

400 you should not be able to do this action

You cannot perform this action as a PUT or PATCH on `/api/v2/hosts/<pk of host in first inventory>`

##### ACTUAL RESULTS

204 response code and host is now moved to 2nd inventory

##### ADDITIONAL INFORMATION

Even though the host is in the 2nd inventory, it remains a child of the group in the 1st inventory. What will the inventory given to `ansible-playbook` look like? 🤷‍♂ 

user: AlanCoding
issue_3781: state: open
title: Make Info Metrics more easy to query
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY

Currently `awx_system_info` and `awx_instance_info` metrics are returned as labels with values, which makes it difficult to query just the value of one key.  As a result, you can't query individual key's for their values in prometheus, for example: `awx_system_info{anisble_version}`.  This has already been fixed for licenses.  

We should make the rest of these individual metrics so that they can be individually queried.  i.e.: "I am a customer who likes to see my Ansible version and tower version in Dashboard for Tower in Grafana"


##### ENVIRONMENT
* AWX version: 4.0.0
user: rooftopcellist
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_3780: state: open
title: Support Direct Role Execution
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

Allow creating and executing Roles (possibly via the ad-hoc interface) and via Workflows.

Where Roles are possibly sourced via Collections.
user: matburt
issue_3776: state: open
title: Support Ansible collections as a top level object
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

Ansible Collections (see https://github.com/ansible/ansible/projects/30#card-13708579 and specifically https://github.com/ansible/ansible/pull/52194) are a means of gathering Ansible content beyond simple Roles that Galaxy supports today.

On the AWX side, we're likely to implement this at the Project level as it is most analagous to the Collection concept and would allow sourcing collections from a variety of different places.

A major change that may need to be implemented here is adding multi-project support to Job Template definitions to bring in multiple collections for job execution. This will also require utilizing the directory isolation feature from `ansible-runner`. This is a tough one because the one hard-and-fast linkage for Job Templates is an association with a single project and playbook. It may be necessary to identify a Project as a `collection` specifically in order to treat it differently but this may make things more difficult to understand on the user side.

This may also necessitate having a specific organization tied to a job template rather than inferring it from an inventory/project.

Alternatively we could consider a new Collections top level object, but there are a lot of overlapping similarities to Projects themselves.

For RBAC considerations, I don't see anything really beyond normal project permissions and the changes that may need to be made for multi-projects on job templates.

We've also heard in the past about being able to whitelist sources for this kind of content.

It's also possible that Collections could come from official places like just Ansible galaxy necessitating the building of new project source locations.

Some other ideas:
Organization default collections,  used by job templates under the org.
Select job templates using the collection from the project admin interface

Related:
https://github.com/ansible/awx/issues/282



user: matburt
issue_3773: state: open
title: Resource lock on inventory while trying to delete a host.
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
The lock should be on host instead of the inventory.

##### ENVIRONMENT
* AWX version: 2.1.2.0
* AWX install method: docker on linux
* Ansible version:  2.7.4
* Operating System: CentOS 7.4
* Web Browser: Chrome

##### STEPS TO REPRODUCE

Trying to delete a host in an inventory which has running jobs on **other hosts**, the delete operation fails with following information.

{"active_jobs":[{"type":"job","id":4356},{"type":"job","id":4353},{"type":"job","id":4350},{"type":"job","id":4355}],"error":"Resource is being used by running jobs."}

##### EXPECTED RESULTS

Host should be deleted successfully. 

##### ACTUAL RESULTS

A 204 delete fail response return which shows conflict.

##### ADDITIONAL INFORMATION

I guess the lock is on the inventory. It should be on the host which has running jobs.

user: SpikeShen
issue_3770: state: open
title: Include Workflow ID Into Job_Events
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Include the workflow job ID within the job_events data. This allows users to track not only the resulting task details from the job, but also the workflow ID that spawned the job.
user: jamesmarshall24
issue_3769: state: open
title: Change how multiple inventory sources are synced
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

Currently, if you have multiple inventory sources for an inventory, they are synced individually.
This leads to:
- confusing (and potentially deadlock-y) behavior
- a difference to how multiple inventory sources are used when you do it on the command line

We should move to not doing individual inventory source syncs. Instead, we should, when an inventory is synced, run a single `ansible-inventory` process passing all inventory sources.

Note: this *will* be a behavior change that will change how inventory is computed. It will also change the mechanism such that "overwrite" and "overwrite vars" should not be used for individual sources.

user: wenottingham
issue_3757: state: open
title: django_auth_ldap search not working properly
body: ##### ISSUE TYPE
 - Bug Report

##### SUMMARY
the ldap search is not working properly because the query includes the Distinguished Name instead of the uid only

##### ENVIRONMENT
* AWX version: 4.0.0
* AWX install method: docker on linux
* Ansible version:  2.7.10-1.el7.noarch
* Operating System: centos-release-7-4.1708.el7.centos.x86_64
* Web Browser: Chrome

##### STEPS TO REPRODUCE
Type Group Ldap: MemberDNGroupType

Ldap group Search 

```
[
 "ou=Groups,dc=sis,dc=core,dc=net,dc=py",
 "SCOPE_SUBTREE",
 "(objectClass=posixGroup)"
]
```
LDAP User Flags by Group
```
{
 "is_superuser": [
  "cn=css,ou=Sistemas,ou=SSO,ou=Groups,dc=sis,dc=core,dc=net,dc=py"
 ]
}
```

##### EXPECTED RESULTS

The expect result I am able to login with super user privilege because I am member of cn=css

##### ACTUAL RESULTS
I can log in without superuser privilege. My container's logs shows I am not part of that group.

```

019-04-23 18:39:33,090 DEBUG    django_auth_ldap Initiating TLS
2019-04-23 18:39:33,261 DEBUG    django_auth_ldap search_s('ou=People,dc=sis,dc=core,dc=net,dc=py', 2, '(uid=%(user)s)') returned 1 objects: uid=sgonzalez,ou=sistemas,ou=sso,ou=people,dc=sis,dc=core,dc=net,dc=py
2019-04-23 18:39:33,474 DEBUG    django_auth_ldap Creating Django user sgonzalez
2019-04-23 18:39:33,475 DEBUG    django_auth_ldap Populating Django user sgonzalez
2019-04-23 18:39:34,292 DEBUG    django_auth_ldap uid=sgonzalez,ou=sistemas,ou=sso,ou=people,dc=sis,dc=core,dc=net,dc=py is not a member of cn=css,ou=sistemas,ou=sso,ou=groups,dc=sis,dc=core,dc=net,dc=py
2019-04-23 18:39:34,302 DEBUG    django_auth_ldap search_s('ou=Groups,dc=sis,dc=core,dc=net,dc=py', 2, '(&(objectClass=posixGroup)(memberuid=uid=sgonzalez,ou=sistemas,ou=sso,ou=people,dc=sis,dc=core,dc=net,dc=py))') returned 0 objects:
2019-04-23 18:39:34,515 DEBUG    django_auth_ldap uid=sgonzalez,ou=sistemas,ou=sso,ou=people,dc=sis,dc=core,dc=net,dc=py is not a member of cn=css,ou=sistemas,ou=sso,ou=groups,dc=sis,dc=core,dc=net,dc=py
2019-04-23 18:39:34,518 DEBUG    django_auth_ldap uid=sgonzalez,ou=sistemas,ou=sso,ou=people,dc=sis,dc=core,dc=net,dc=py is not a member of cn=css,ou=sistemas,ou=sso,ou=groups,dc=sis,dc=core,dc=net,dc=py
2019-04-23 18:39:34,636 DEBUG    django_auth_ldap uid=sgonzalez,ou=sistemas,ou=sso,ou=people,dc=sis,dc=core,dc=net,dc=py is not a member of cn=sep,ou=sep,ou=sso,ou=groups,dc=sis,dc=core,dc=net,dc=py
2019-04-23 18:39:34,700 DEBUG    django_auth_ldap uid=sgonzalez,ou=sistemas,ou=sso,ou=people,dc=sis,dc=core,dc=net,dc=py is not a member of cn=css,ou=sistemas,ou=sso,ou=groups,dc=sis,dc=core,dc=net,dc=py
2019-04-23 18:39:34,753 DEBUG    django_auth_ldap uid=sgonzalez,ou=sistemas,ou=sso,ou=people,dc=sis,dc=core,dc=net,dc=py is not a member of cn=sep,ou=sep,ou=sso,ou=groups,dc=sis,dc=core,dc=net,dc=py
2019-04-23 18:39:34,798 INFO     awx.api.generics User sgonzalez logged in.
 ```
the query should only include the uid not the DN

2019-04-23 18:39:34,302 DEBUG    django_auth_ldap search_s('ou=Groups,dc=sis,dc=core,dc=net,dc=py', 2, '(&(objectClass=posixGroup)(memberuid=**uid=sgonzalez,ou=sistemas,ou=sso,ou=people,dc=sis,dc=core,dc=net,dc=py**))') returned 0 objects:

##### ADDITIONAL INFORMATION

Using ldapsearch with the right query I am able to get all of my groups

```
 ldapsearch -x -D "cn=Directory Manager" -h localhost -p 389   -b dc=sis,dc=core,dc=net,dc=py '(&(objectClass=posixGroup)(memberuid=sgonzalez))'

# search result
search: 2
result: 0 Success

# numResponses: 5
# numEntries: 4

```



user: shgonzalez
labels: component:authentication: For issues related to authentication
issue_3727: state: open
title: API documentation marks /api/v2/workflow_job_templates/ required field as optional
body: ##### ISSUE TYPE
The API documentation for /api/v2/workflow_job_templates/ shows only the 'name' field as required but the UI marks both 'name' and 'organization' as required.

##### SUMMARY
The API documentation for /api/v2/workflow_job_templates/ shows only the 'name' field as required. Submitting a requiest with just '{ "name": "Template Name"}' to /api/v2/workflow_job_templates/ returns {"detail": "You do not have permission to perform this action."} even though the user does have the correct permissions.

Adding 'organization' to the API call '{ "name": "Template Name", 'organization': "1"}' creates the workflow template as expected.

```
 "POST": {
            "name": {
                "type": "string",
                "required": true,
                "label": "Name",
                "max_length": 512,
                "help_text": "Name of this workflow job template.",
                "filterable": true
            },
            "organization": {
                "type": "field",
                "required": false,
                "label": "Organization",
                "filterable": true
            },
```

##### ENVIRONMENT
* AWX version: 4.0.0
* AWX install method: docker on linux
* Ansible version:  Included in container
* Operating System: RHEL 7
* Web Browser: Safari/Insomnia

##### STEPS TO REPRODUCE

Create API call to /api/v2/workflow_job_templates/
Body in JSON - {"name": "Automation Test Workflow"}

##### EXPECTED RESULTS

JSON return indicating creation of workflow and ID.

##### ACTUAL RESULTS

Permissions error
user: mhurron
issue_3693: state: open
title: RFE: canceled_by field in activity stream
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
Add a `canceled_by` field in the activity stream to identify the user who canceled a job.
user: msilmser
issue_3679: state: open
title: RFE: Allow reordering instance groups without having to remove and re-add them
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
- Customer request

- Customer would like to be able to set a "Default" IG for job template runs rather than individually specifying specific IGs to be available for job templates.
- This would set a "preferred" IG for job template runs, and only get distributed to a different instance group if the default was at max capacity.
- This comes from a job template being inadvertently launched against an isolated instance group, rather than a standard group. This caused the job template to fail.

- An alternative solution to this would be to weight the instance groups so a job will only launch against an isolated node if either there is no remaining capacity at any other instance group, or it was intentionally specified.
user: msilmser
issue_3677: state: open
title: Add ability to prevent normal user's permission to create credentials.
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

It would be nice to have the ability to toggle normal users ability to create credentials. Currently any normal user can create their own credentials.
user: gamuniz
issue_3655: state: open
title: Authentication - Azure AD - Org / Team Mapping
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI

##### SUMMARY
Is it possible to disable case sensitive for org / team mapping while the user is authenticated? 

The email address needs to be exactly match. For example, once the user information has created after SSO and if the email address [ abc.def@test.com / ghi.jkl@test.com ] and mapping are like this, then it is failing to add that user under respective Org / Team. This is eventually getting difficult to manage when it has mapped with '**n**' number of users. We have to go and check what are the email address populated under User area in AWX, and update the exact mapping over here. 

```json
{
 "Test Org": {
  "remove_admins": true,
  "admins": [
   "Abc.Def@test.com"
  ],
  "users": [
   "Ghi.Jkl@test.com"
  ]
 }
}
```

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: sujiar37
labels: component:authentication: For issues related to authentication
issue_3600: state: open
title: Add team assignable team permissions to UI
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->

 - UI


##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Currently team read access is only accessible via the api and assignable the same way. Please allow for adding a team read permission assignment via the UI(to teams and users).
##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: gamuniz
issue_3561: state: open
title: Allow RBAC on Credential_type
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Allow RBAC on Credential_type

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: mrmibrown
issue_3560: state: open
title: Allow Org Admins the Ability to Create Credential Types
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
- API
 - UI

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Organization admins need the ability to create credential types.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: mrmibrown
issue_3521: state: open
title: Workflow node deletion activity stream does not link to workflow (and other workflow node activity stream weirdness)
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI

##### SUMMARY
When a node is deleted on a workflow the link to the workflow is not shown on the activity stream, see the screenshot on the additional information section.

This should make https://github.com/ansible/awx/issues/2760 more complete since https://github.com/ansible/awx/pull/3447 is now merged.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->
![Screenshot from 2019-03-22 15-04-31](https://user-images.githubusercontent.com/48132/54847094-d8b35880-4cb3-11e9-9361-1db80eb1d9ff.png)

user: elyezer
issue_3491: state: open
title: Suggested inventories from scm project filter out yml files that could be plugin configs
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API

##### SUMMARY
<!-- Briefly describe the problem. -->
Inventory plugins are configured via `.yml` or `.yaml` files. The UI hits the `api/v2/projects/<id>/inventories/` endpoint and this offers a filtered down list of files that could be used for inventories. While in the past it may have made sense to filter out yaml files, now it does not because that is how one uses inventory plugins.

##### ENVIRONMENT
* AWX version: devel

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->
Create project with .yml inventory plugin config files.
Create an inventory source that uses the project as SCM source.

##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->
The inventory plugin config files show up when you make a scm sourced inventory source.

##### ACTUAL RESULTS
Files did not show up in UI.

While you can specify it via `source_path` on the inventory source with a POST to the API, this file not showing up in the list prevents users from specifying it through UI.
<!-- What actually happened? -->

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->
@AlanCoding says we need to clarify what we want to do.
Hypothetically we could only accept files that match the core distributed inventory plugins, but this would prevent users from using cusom plugins, which we want them to be able to do. Seems like we might have to just let `.yml` and `.yaml` files through.
user: kdelee
issue_3489: state: open
title: External logging (splunk) sends "job_events" only for some of the hosts per task, not for all
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - API

##### SUMMARY
I am using the splunk external logging. I have noticed, that the "awx.analytics.job_events" events get sent to Splunk HEC only for some of the hosts (containing their results) and not for all of them.

Example, following job output in AWX UI:
```
TASK [Gathering Facts] ********************************************************* 14:03:49
ok: [host1]
ok: [host2]
ok: [host3]
ok: [host4]
ok: [host5]
 [WARNING]: flush_handlers task does not support when conditional
```

In Splunk, I can do the following search:
```
index=ansible sourcetype=ansible:awx_events logger_name="awx.analytics.job_events" job="836" task="Gathering facts"
```
...and I find 4 events:
- one with event="playbook_on_task_start" which just says "task has started"
- one with event="runner_on_ok", stdout="OK: host3"
- one with event="runner_on_ok", stdout="OK: host4"
- one with event="warning", stdout="Warning: flush_handlers task does not support when conditional"

This is just one example. I am having this behavior (missing runner_on_ok and also missing runner_on_failed events) for almost ALL tasks. This leads to totally wrong statistics. For example, in the play run above, all five hosts have failed at one task, but AWX only sent back errors for two of them (this time, host1 and host4).

To make sure it's not an issue with Splunk rejecting or losing messages, I have set up Charles Proxy and AWX to push all HTTP requests through Charles proxy. This way, I have been able to see every HTTP request issued by all AWX related docker containers. I have seen exactly the events shown up in Splunk, not more, and also no rejected requests or such.

I have no clue what to do to analyze this further...

##### ENVIRONMENT
* AWX version: 3.0.1.0
* AWX install method: docker on linux
* Ansible version:  2.7.7
* Operating System: CentOS
* Web Browser: Safari, Chrome

##### STEPS TO REPRODUCE
Set up External logging to splunk for loggers: awx, activity_stream, job_events, system_tracking
start a job containing at least 5 hosts and 5 tasks,
view results in splunk

##### EXPECTED RESULTS
for the above mentioned test case, a total of 5 events of type "runner_on_ok", one for each host, should be sent to Splunk.

##### ACTUAL RESULTS
missing events, only some events are being received by Splunk

user: fibbs
issue_3479: state: open
title: Workflow should allow to select survey question on the fly when that particular template is being started.
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Workflow should allow to select survey question on the fly when that particular template is being started.
Currently survey question needs to be predefined/answered while creating a WF.  
##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: jainshagun
issue_3476: state: open
title: User has access to JOBS he has not run
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - UI


##### SUMMARY
When user has USE permission on job template, it sees all jobs and thus job logging, survey data, etc, from all other users having access to this job template as well. This is seen as information leakage. Auditors and security officers do not like this. Users should see job info only for jobs it has permission to see. This includes his own jobs, and, though some RBAC control(s) jobs from other users.

##### ENVIRONMENT
* AWX version: 3.4.1
* AWX install method: non-docker
* Ansible version:  2.7.0
* Operating System: RHEL7
* Web Browser: Firefox 66

##### STEPS TO REPRODUCE
As user1, create a JT and give USE permission to user2 and user3
As user1, run the JT
As user2, run the JT
As user3, run the JT
As user3, look at jobs

##### EXPECTED RESULTS
As user1, I see only my own jobs
As user2, I see only my own jobs
As user3, I see only my own jobs

##### ACTUAL RESULTS
As userx, I see jobs from user1, user2 and user3

##### ADDITIONAL INFORMATION
Sometimes it would be usefull to see JOBS on JT ran by another user/team. No recommendation on how RBAC should be set up to allow that.
Files as a bug and not as a feature request on purpose.
user: fvzwieten
issue_3824: state: open
title: Add Perf Stats Times Stats to Analytics
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API


##### SUMMARY

Mainly, we would like insights to be able to answer the question: "Are there anomalies in automation time for certain hosts, or certain playbooks?"

The performance plugin work @jladdjr has been working on will give us insight on how long each task runs for, which should be useful for this.  We need to identify only the data needed, and package it up with the rest of the analytics data.  

##### ADDITIONAL INFORMATION

user: rooftopcellist
issue_3418: state: open
title: Challenges scaling PostgreSQL to higher instance counts
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Documentation

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI
 - Installer

##### SUMMARY
I'm running into challenges getting AWX scaled up in Kubernetes to higher instance counts, specifically that it is overwhelming our PostgreSQL 9.6 external database with connections. Our target instance count is 16, and we're seeing PostgreSQL connection counts climbing the hundreds until we hit `max_connections`. With PostgreSQL being so heavy connection-wise, we're trying to keep the number of connections to a reasonable number.

I've tried multiplexing connections via pgbouncer. In `session` pool mode there doesn't seem to be much change other than AWX creating more and more connections until they get queued instead of refused.

 In `transaction`pool mode the cluster heartbeat tasks intermittently fail due to the use of advisory locks, so it seems the usual methods of multiplexing connections are non-starters.

I've also tried using persistent connections (`CONN_MAX_AGE: None`) and closing connections immediately (`CONN_MAX_AGE: 0`) in combination with session pool_mode, but I'm not coming across a configuration that prevents connections from continuing to grow and grow until they either queue or are refused. 

Is there any documentation or design guidance around scaling to higher instance counts for the PostgreSQL side of the equation?

##### ENVIRONMENT
* AWX version: 2.1.2
* AWX install method: kubernetes with external PGSQL db
* Ansible version:  latest (multiple venvs)

##### STEPS TO REPRODUCE

Configure external PostgreSQL database, scale up number of AWX instances until PostgreSQL `max_connections` is reached. The connections are idle most of the time.

##### EXPECTED RESULTS

AWX re-uses one database connection per container when `CONN_MAX_AGE: None`, will close the connection when `CONN_MAX_AGE: 0` for re-use by the pool,  or can handle pgbouncer multiplexing in `transaction` pool mode. I would expect a max of 64 db connections for 16 instances * 4 containers per instance.

##### ACTUAL RESULTS

For 16 instances, and more connections were desired by AWX at the time of this query.
```
awx=# SELECT  * FROM
(SELECT count(*) used, state FROM pg_stat_activity GROUP BY 2) q1,
(SELECT setting::INT res_for_super FROM pg_settings WHERE name=$$superuser_reserved_connections$$) q2,
(SELECT setting::INT max_conn FROM pg_settings WHERE name=$$max_connections$$) q3;
 used | state  | res_for_super | max_conn 
------+--------+---------------+----------
    1 | active |             3 |      200
  196 | idle   |             3 |      200
```

##### ADDITIONAL INFORMATION

On three instances, here is our current connection count:

```
awx=# SELECT  * FROM
(SELECT count(*) used, state FROM pg_stat_activity GROUP BY 2) q1,
(SELECT setting::INT res_for_super FROM pg_settings WHERE name=$$superuser_reserved_connections$$) q2,
(SELECT setting::INT max_conn FROM pg_settings WHERE name=$$max_connections$$) q3;
 used | state  | res_for_super | max_conn 
------+--------+---------------+----------
    1 | active |             3 |      100
   31 | idle   |             3 |      100
```

user: batemanst
issue_3388: state: open
title: Notify the awx and tower user of new releases in the UI
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY
Notify the awx and tower user of new releases in the UI. If we notify users of awx and tower of our new releases within the UI:
- We can encourage users to keep up with development
- Increase general awareness of our new release cadence
- Encourage users to migrate away from deprecated versions of Tower

##### ADDITIONAL INFORMATION

We could do this through pendo guides or a navbar item. Maybe a notification bell?
This could double as a way to inform users that their version of tower is out of date or about to hit EOL.

user: unlikelyzero
issue_3384: state: open
title: Add validation for host names and group names
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API

##### SUMMARY
See https://github.com/ansible/ansible/pull/52748

Ansible core is moving to a default behavior where group name characters which are not alphanumeric get automatically replaced with underscores.

In this world, we should not allow users to enter names with such characters.

Inventory sources, those should be covered by Ansible core behavior. Manually entered names should be validated.

##### ADDITIONAL INFORMATION

We have also hesitated to valid host names, even though many syntaxes will break playbooks. I figure I would throw that in here, but we can separate it.

user: AlanCoding
issue_3383: state: open
title: Associating AWS credential to job template is not idempotent 
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API

##### SUMMARY
the [tower_job_template](https://docs.ansible.com/ansible/latest/modules/tower_job_template_module.html) module today does not have the ability to use any credential type, and I need to be able to use AWS.

I register the result from the tower_credential module and I register the result from the tower_job_template module to get the id for the credential and job template, I then use the URI module to associate the AWS module to the correct job template.  This works, but only works one time, if I re-run the Playbook the tower API is not happy, it doesn't see it already has a matching credential in there.  The full Playbook is [located here](https://gist.github.com/IPvSean/6074d7a77ee2e39cd180f6fb0be5b4a6)

##### ADDITIONAL INFORMATION
task that will fail

```
    - name: ASSOCIATE AWS CREDENTIAL TO JOB TEMPLATE
      uri:
        url: "https://{{host}}/api/v2/job_templates/{{create_first_job.id}}/credentials/"
        user: "{{username}}"
        password: "{{password}}"
        method: POST
        validate_certs: False
        force_basic_auth: yes
        body_format: json
        body: ' {"id": {{credential.id}}}'
        status_code:
          - 200
          - 204
```

first time works!

2nd time does this->
```    error: Cannot assign multiple Amazon Web Services credentials.```



rull error is here->
```
TASK [ASSOCIATE AWS CREDENTIAL TO JOB TEMPLATE] *****************************************************************************************************************************************
fatal: [localhost]: FAILED! => changed=false
  allow: GET, POST, HEAD, OPTIONS
  connection: close
  content: '{"error":"Cannot assign multiple Amazon Web Services credentials."}'
  content_language: en
  content_length: '67'
  content_type: application/json
  date: Thu, 07 Mar 2019 15:27:45 GMT
  json:
    error: Cannot assign multiple Amazon Web Services credentials.
  msg: 'Status code was 400 and not [200, 204]: HTTP Error 400: Bad Request'
  redirected: false
  server: nginx/1.12.2
  status: 400
  url: https://ansible.rhdemo.io/api/v2/job_templates/75/credentials/
  vary: Accept, Accept-Language, Cookie
  x_api_node: localhost
  x_api_time: 0.083s
  x_api_total_time: 0.101s
	to retry, use: --limit @/Users/sean/Documents/GitHub/IPvSean/linklight-local/provisioner/tests/setup_tower.retry
```
user: IPvSean
issue_3289: state: open
title: Cancel all jobs of the same job template
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
Request for adding a cancel all jobs in a template feature. This because we once had to cancel over 20k jobs due to some misconfiguration and cancelling them one by one takes a lot of time, even with a script. 
user: Mikey032
issue_3285: state: open
title: Specify Instance Group when using RUN COMMAND on the inventory
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
When using RUN COMMAND (ad-hoc) on the inventory, we cannot specify the Instance Group like Job Template. It would be great if it can be specified.

##### ADDITIONAL INFORMATION
I confirmed AWX 3.0.1.0 cannot specify the Instance Group.
![awx_screenshot](https://user-images.githubusercontent.com/4246532/53213513-9551d400-368c-11e9-974b-fc1c81ebb4d1.jpg)


<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: hiyokotaisa
issue_3259: state: open
title: RFE: Option to map multiple attributes in SOCIAL_AUTH_SAML_TEAM_ATTR
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Allow the mapping of multiple attributes (saml_attr) in SOCIAL_AUTH_SAML_TEAM_ATTR to support team mapping for Orgs that have the same Team names.

##### ADDITIONAL INFORMATION
<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->
Currently only one attribute can be mapped  which will add users to the same team name in multiple organizations:

For Example:
```
"SOCIAL_AUTH_SAML_TEAM_ATTR": {
        "saml_attr": "roles",
        "remove": true,
        "team_org_map": [
            {
                "organization": "Org1",
                "team": "developer"
            },
            {
                "organization": "Org1",
                "team": "auditor"
            },
            {
                "organization": "Org2",
                "team": "developer"
            },
            {
                "organization": "Org2",
                "team": "auditor"
            }
        ]
    }
}
```

user: benjdudas
labels: component:authentication: For issues related to authentication
issue_3249: state: open
title: RFE: Hide artifacts values in workflow job
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
Using workflow job template, user wants to pass secret values with set_stats, but `artifacts` and `extra_vars` are not able to mask those values.
For the security reason, users want to mask these variables from the `artifacts` and `extra_vars` in the UI / API if necessary.

##### ADDITIONAL INFORMATION

1. Create a workflow job template: JOB1(test1.yml) --"RUN: on succee" --> JOB2(test2.yml)
2. We will see `SECRET VALUE` as a plain text in `artifacts` of JOB1 and `extra_vars` in JOB2 as well, even if we use no_log: True in both of playbooks

- test1.yml

```
---
- hosts: localhost
  no_log: True

  tasks:
    - set_stats:
        data:
          message: "SECRET VALUE"
```

- test2.yml

```
---
- hosts: localhost
  no_log: True

  tasks:
    - debug:
        msg: "{{ message }}"
```
user: saito-hideki
issue_3170: state: open
title: Logging order not correct
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME 
 - UI


##### SUMMARY
When I run playbook with long log output, the lines order is getting wrong and it is not usable.

##### ENVIRONMENT
* AWX version: 2.1.2.0
* AWX install method:  docker on linux
* Ansible version: 2.7.4
* Operating System: Windows 2008 R2 but see this on more windows sytems
* Web Browser: Mozilla Firefox

##### STEPS TO REPRODUCE

Running a playbook with loops gies incorrect logging. Used strategy host_pinned

##### EXPECTED RESULTS

I should be able to see the lines in correct orderr

##### ACTUAL RESULTS

The order of the lines is corrupted and it is not usable

##### ADDITIONAL INFORMATION
Loop code used:
````
- name: Start Windows Updates
  include_tasks: wsus-install.yml
  loop:
    - 1
    - 2
    - 3
    - 4
    - 5
  loop_control:
    loop_var: outer_item

 wsus-install.yml
- name: Check for missing updates Loop {{ outer_item }}.
  win_updates: state=searched
  register: update_count
#- debug: var=update_count
- name: WSUS - Detect Now
  win_shell: wuauclt.exe /detectnow /reportnow
  args:
    executable: cmd
````


![](https://i.imgur.com/CTatp2L.png)

user: daemenseth
issue_3163: state: open
title: Add back schedule button on templates list view
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY
With older versions of AWX there used to be a calendar icon on the job templates view page that would allow you to schedule a job without having to go into the edit mode. It would be useful to add this back 

##### ADDITIONAL INFORMATION



user: grahamneville
issue_3127: state: open
title: Clicking on XYZ should filter
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY

The page: `#/inventories/inventory/N/hosts`

The view:

![ff](https://user-images.githubusercontent.com/5208768/52083349-2f7e9a80-256d-11e9-9145-00f84aee40b4.png)

All the related groups for a host are show as tags.

I can click the `X` to potentially remove the association. But it would be useful if clicking on the text of the tags adds it as a filter for the view. A la:

![screenshot from 2019-01-31 15-33-50](https://user-images.githubusercontent.com/5208768/52083532-afa50000-256d-11e9-96ca-50c0a22fab17.png)



##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: wenottingham
issue_3072: state: open
title: RFE: NOTIFICATIONS through HTTP/HTTPS proxy
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
`NOTIFICATIONS` needs HTTP/HTTPS proxy settings for each notification type

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

From support team.
Customer wants to specify `http_proxy`, `https_proxy` and `no_proxy` settings from `NOTIFICATIONS > CREATE NOTIFICATION TEMPLATE` UI.  They use the proxy settings only for notification.

user: sugitk
issue_3060: state: open
title: weekly dashboard view does not have sufficient granularity
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - UI
- API (maybe)

##### SUMMARY

The dashboard has date-based granularity:
- in monthly view, there is a tick for each day
- in weekly view, there is a tick for each day
- in daily view, there is a tick for each hour

This means that the monthly and daily views have enough ticks to produce a reasonable graph... but the weekly view really does not.

##### ENVIRONMENT
* AWX version: current

##### ADDITIONAL INFORMATION


user: wenottingham
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_3028: state: open
title: Add support to filter all data in menus for specific organization
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY
It would be nice to have organization dropdown  (probably position in top right corner, similar to AWS regions), by default it can be "All" which means that resources of all organizations are showed, user can specify any of organization from dropdown, after that every page of UI shows only resource from selected organization.

##### ADDITIONAL INFORMATION

Example:
If user is admin, or involved in multiple project, it ends up that this user has dozens/hundreds of everything (job templates, projects, credentials....) and user has to query in search field, to filter by organization, each time he switch the page (from one type of resources to another)

user: boris-42
issue_3022: state: open
title: Pressing enter on an input field of a option settings does not save it
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - UI

##### SUMMARY
Pressing enter on an input field when editing settings does not save the settings but flips the first switch option on the page. For example editing any input on the system settings and then pressing enter will update the `Enable Administrator Alerts` switch instead of saving the options (expected behavior for any form on a web UI)

##### ENVIRONMENT
* AWX version: devel
* AWX install method: docker
* Ansible version:  X.Y.Z
* Operating System: Fedora 29 (Linux)
* Web Browser: Chrome

##### STEPS TO REPRODUCE

1. Navigate to Settings > System (or any other settings page
2. Click on any input field and press enter
3. Watch the first switch  (on/off) on the page and it will be updated

##### EXPECTED RESULTS

The page or the options that is being edited would be saved

##### ACTUAL RESULTS

Only the switch is being updated, not the option being edited.
user: elyezer
labels: component:a11y: Accessibility
issue_2981: state: open
title: schedule UI cannot make some rrule
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI


##### SUMMARY
make it possible to make rrule such as `rrule(MINUTELY, interval=30,byhour=range(9,17), byminute=(0,30),dtstart=parse("20190110T090000"))`
which runs every `30` minutes, every day from `9AM` to `5PM` 

##### ADDITIONAL INFORMATION

user: changsijay
issue_2980: state: open
title: Allow users to specify order of hosts in an inventory in Tower
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI
 - Inventory

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
This request was sort of posted under #2952, but was not properly described by the original poster (the RedHat support person who was trying to address my support case).  I'm reposting it here for clarity.

Hosts added to an inventory in Ansible Tower are automatically sorted by hostname.  When the order of the hosts matters (such as when using the order: keyword), this is a problem. Contrast this to Ansible Core where hosts in inventory files exist in the order specified by the author of the inventory.

As such, this enhancement request is to allow Ansible Tower inventories to have hosts listed in the order specified by the user. This would involve an option to disable the automatic sorting and perhaps a way to allow the user to drag hosts to reorder them within the inventory.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

Here is a specific use case to help explain the need for this enhancement:

We have a set of servers; let's call them hq1, hq2, dr1, and dr2. They run proprietary software and the high availability (HA) works such that the flow of replication is hq1 -> hq2 -> dr1 -> dr2. In order to perform some maintenance operations, the HA needs to be disabled in reverse order (dr2, dr1, hq2, h1); this is where I want to use a play with `order: reverse_inventory`. The maintenance can then be performed on all hosts. Finally, HA needs to be enabled in forward order (hq1, hq2, dr1, dr2); this is where I want to use a play with `order: inventory` (the default).

When I create the inventory in Tower, the hosts get lexically ordered as dr1, dr2, hq1, hq2, which prevents the playbook from working as intended.

user: rocklob
issue_2978: state: open
title: Workflow template issue - Workflow got stuck even after successful completion of a failed job template
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI

##### SUMMARY
I have workflow template with 9 job templates (JT), it has failed at JT-6. So I clicked on details on failed JT-6 due to a timeout in executing a task, so I relaunch the JT-6 by going into details and click relaunch button. It was successful after relaunch, however Ansible did not resume the workflow even after the failed JT-6’s successful completion after rerun.

##### ENVIRONMENT
* AWX version: 1.0.4.0
* AWX install method: docker on linux
* Ansible version:  2.6.4
* Operating System: Linux
* Web Browser: Chrome

##### STEPS TO REPRODUCE
1. Create a workflow template with more than 2 job templates and some extra variables in Survey
2. Have a failure condition in JT-2 on purpose
3. Launch the workflow template
4. Once JT-2 is failed,
5. Remove the failure condition from the playbook, so that when it be played next time it should run fine
6. Click on details on failed JT-2 from the workflow
7. Relaunch the JT-2 by clickin on launch button
8. JT-2 is successful now
9. Navigate back to the Workflow status page
10. Workflow still shows the JT-2 in failed state in Red colour, it wouldnt turn into Green
11. And workflow would not resume to execute the remianing JTs in the wokflow.

##### EXPECTED RESULTS
Workflow should resume and complete all the JTs after rerunning the failed JT-2 successfully.

##### ACTUAL RESULTS
Workflow gets stuck even after successful completion of a failed JT-2 upon rerun

##### ADDITIONAL INFORMATION
This workflow is for application deployment, which consists of multiple steps, so i have created a JT for each task to identify which step failed. All these JTs are coded to run on a single host.
And the target host is a Windows Server 2012 R2

user: jyothscupid
issue_2968: state: open
title: Saved prompt on launch extra variables / survey answers for Workflow nodes are shown in the API even after removal of JT survey / prompt on launch option.
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Documentation/Issue

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API

##### SUMMARY
<!-- Briefly describe the problem. -->
All the nodes of the received workflow is showing additional entries called extra_data with 2 variables. There is no survey or extra variables in associated nodes. Survey only exist at workflow level and that survey does not have these 2 variables. Any idea where this data could be coming from ?

Sample Below

 "workflow_nodes": [
        {
          "name": "node0", 
          "unified_job_type": "job", 
          "success_nodes": [
            "node4"
          ], 
          "failure_nodes": [], 
          "unified_job_name": "Checkout_Feature_ATLAS-Automated-Service", 
          **"extra_data": {
            "srcUsername": "admin", 
            "srcAtlasIP": "A.B.C.D"
          },** 
          "always_nodes": []
        }, 

##### ENVIRONMENT
* Tower CLI 3.3.0
* API v2
* Ansible Tower 3.3.3
* Ansible 2.7.0

##### STEPS TO REPRODUCE

<!-- For bugs, please show exactly how to reproduce the problem. For new
features, show how the feature would be used.  -->

tower-cli receive --workflow Project_Backup_Workflow

##### EXPECTED RESULTS

<!-- For bug reports, what did you expect to happen when running the steps
above? -->

Do not expect extra_data to exist in received json.

##### ACTUAL RESULTS

<!-- For bug reports, what actually happened? -->

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: ghost
issue_2965: state: open
title: Slack notifications with color fails
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - UI

##### SUMMARY
When using the slack notifier, if a color is defined, the notification will fail with an error from the slack APIs saying "not_in_channel".

##### ENVIRONMENT
* AWX version: 2.7.4
* AWX install method: docker on linux

##### STEPS TO REPRODUCE
Create a slack notification (including the bot user as directed by the AWX/Tower docs).  Then create a slack notification and add #f00 to the "Notification Color" field.

##### EXPECTED RESULTS
A message to be sent to the channel with the defined color.

##### ACTUAL RESULTS
Notification fails with "not_in_channel" error.

user: drwahl
issue_2962: state: open
title: RFE: Allow Job Template Creator or Create User Role to Add Any User for Job Template Roles
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Add the ability to allow job template authors full admin to a created job template. This would include the ability for the job template author to add use/admin access to any job template they authored. Not just team members.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->
A team member can currently share their playbook with a team, but not specific users.

user: jamesmarshall24
issue_2941: state: open
title: Enhanced options for sliced jobs; use sliced jobs to handle multiple inventories
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
1. Slice by number of hosts or percentage of hosts, rather than by number of slices
1. Select multiple inventories, and slice by inventory
1. Prompt on launch for slicing/slice parameter

##### ADDITIONAL INFORMATION


user: wenottingham
issue_2940: state: open
title: Add job type to job status websocket channel messages
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API

##### SUMMARY
In working on https://github.com/ansible/awx/pull/2938 we on the UI team realized that it would be tremendously convenient for the job type to be present in job status socket messages.  It's particularly useful for the workflow results view where we need to build a static DETAILS link that would take the user out to the details of that particular job.  In the past, we've looked at the node's unified_job_type to do this but with the introduction of sjt's this is no longer enough information.  To get around this for now we've added a static redirect route which performs a GET request on the unified job and then redirects the user to the correct output view.  This solution could be removed if type were present in the message since we could use that to generate the link.

user: mabashian
issue_2910: state: open
title: Help text of instance_filters is wrong
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - API

##### SUMMARY
Instance filters help text claims that it only applies to EC2 sources. The code disagrees.

##### ENVIRONMENT
* AWX version: X.Y.Z
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  X.Y.Z
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

OPTIONS for inventory source or inventory update, field `instance_filters`

##### ACTUAL RESULTS

help text gives

> Comma-separated list of filter expressions (EC2 only). Hosts are imported when ANY of the filters match.

##### EXPECTED RESULTS

Allowed for VMWare & tower types

https://github.com/ansible/awx/blob/271bd10b475312d586951d5ccd4a3a61b0d26824/awx/main/models/inventory.py#L1370-L1371

used for both

https://github.com/ansible/awx/blob/271bd10b475312d586951d5ccd4a3a61b0d26824/awx/main/tasks.py#L1898-L1899

https://github.com/ansible/awx/blob/271bd10b475312d586951d5ccd4a3a61b0d26824/awx/main/tasks.py#L2069

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: AlanCoding
issue_2905: state: open
title: View playbooks in AWX
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY

While playbooks should live in source control and not be edited from AWX, it could be useful to *view* them, especially when trying to determine what playbook a job template should use just from a filename.

Likely has some conflict with https://github.com/ansible/awx/issues/282.


##### ADDITIONAL INFORMATION


user: wenottingham
issue_2893: state: open
title: Sliced Job Template creates number of jobs as per the slicing count for the limited host
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI

##### SUMMARY
<!-- Briefly describe the problem. -->

SJT creates number of jobs as per the slicing count for the limited hosts.

##### ENVIRONMENT

* AWX version: X.Y.Z
* AWX install method: docker on linux
* Ansible version:  2.7.1
* Operating System: CentOS
* Web Browser: Google Chrome(Latest)

##### STEPS TO REPRODUCE

<!-- Please describe exactly how to reproduce the problem. -->
Create a Inventory with multiple hosts
Create a SJT with multiple slices and select the above created Inventory
Now, Limit the SJT for one of the hosts from the provided Inventory
Launch the SJT

##### EXPECTED RESULTS

<!-- What did you expect to happen when running the steps above? -->
Only one job is created for the limited hosts even if the Job Slicing value is >1.

##### ACTUAL RESULTS

<!-- What actually happened? -->
Multiple jobs are created for the limited hosts as per the Job Slicing count.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->
Even if multiple jobs are created, only one succeeds rest everything fails with `ERROR! Specified hosts and/or --limit does not match any hosts`.
![sjt-2](https://user-images.githubusercontent.com/21008429/49691050-47830080-fb60-11e8-8536-864926d6c108.png)
![sjt-3](https://user-images.githubusercontent.com/21008429/49691051-4a7df100-fb60-11e8-820b-fa706104cdfc.png)

![sjt-1](https://user-images.githubusercontent.com/21008429/49691047-3f2ac580-fb60-11e8-9060-9c802a72bcb4.png)

user: Ompragash
issue_2881: state: open
title: Support workflow e2e tests with nodes that use duplicate resource names
body: ##### ISSUE TYPE
 - Task more so than a feature

##### COMPONENT NAME
 - API (maybe)
 - UI

##### SUMMARY
The problem that we're running into here is that the UI isn't applying ID's to workflow nodes in a deterministic way.  The UI currently iterates over the array of all the nodes and applies unique ID's to each in an arbitrary order.  The order of the ID's doesn't actually matter to us we just need something unique on each node.  The problem with this approach is that it makes e2e testing a bit tricky because the tests need a repeatable way to identify a specific node in the workflow every time.  We got around this initially by selecting the node with text that matched a particular string rather than attempting to use any sort of ID.  This approach limits the scope of tests though because initial setup requires nodes with completely unique resource names.  @unlikelyzero @dsesami and I had some discussions around what can be done to remove this restriction and came up with a few ideas.

Options:
1. API adds an ID that is unique to the workflow, not the system.  This is basically an ID that would track the order in which nodes were created.  First node would get 1, second 2, etc.  
or
2. UI builds map by grabbing the node id's (from the api) at the beginning of the test.  If the UI POSTs the nodes in a specific order we can leverage that to identify our nodes deterministically.  For example, in a workflow that looks like:

<img width="1658" alt="screen shot 2018-12-06 at 10 29 27 am" src="https://user-images.githubusercontent.com/9889020/49593558-d960f280-f941-11e8-9374-20cc7246096b.png">

When the UI creates this workflow for the test it would need to POST the nodes in a specific order.  Lets say: Foo, then Bar, then Baz in this case.  That would ensure that the ID given to the Foo node by the API would be less than the ID given to Bar which would be less than Baz.  THEN, the UI would need to start including these ID's somewhere in the node's DOM structure so that the tests can have access to them.  The tests would then need to be updated to initially grab all nodes and sort them by the ID's.  We would know that the lowest node ID would correspond to the Foo node and so on.  The tests would have to maintain a mapping if ID's -> nodes.

I'm leaning very heavily towards the second option as the best option in this scenario but am happy to discuss alternatives.
user: mabashian
issue_2874: state: open
title: Set capacity of protected group to zero when all controller nodes are down.
body: ##### ISSUE TYPE
 - Feature Idea / Bughancement

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
If all controller nodes for an isolated node or group of isolated nodes are down, we cannot communicate with the isolated nodes nor run jobs on them. Therefore, we should set the capacity to 0 of the isolated nodes while the controller nodes are down.
user: kdelee
issue_2828: state: open
title: Include "Status of the job" and "Start and End time of job" in "activity_stream"
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API

##### SUMMARY
Currently, We are not sending the following fields to the "awx.analytics.activity_stream" logger:

 - Start and End time of job.
 - Status of the job. 

user: cesarfn4
issue_3828: state: open
title: Activity Stream descriptions not translated
body: As per https://github.com/ansible/tower/issues/2061#issuecomment-416343623 , https://github.com/ansible/tower/issues/2061#issuecomment-417378475, https://github.com/ansible/tower/issues/2061#issuecomment-417419818 opening remaining issue as separate ticket.

i.e.

Post second round of translations, tested this bug report with Japanese google-chrome.

Now, most of the bullets (as listed in comment zero of this bug report) appear localized in Japanese, except for the following screen(s) (appear in English):


and 

as per https://github.com/ansible/tower/issues/2061#issuecomment-401374808 , i request to re-consider the screenshots attached towards following bullets (as UI appears in English for the said screens):

> (4) Tower Dashboard and interface -> Activity Stream window



-> all Actions in EVENT column:

![screenshot from 2018-06-28 12-04-03](https://user-images.githubusercontent.com/12151785/42093700-df154f36-7bca-11e8-8c87-ec5c66c6a20a.png)


-> at the right side pagination, ITEMS  1 - 20 of 99 VIEW PER PAGE ( '**of**' needs to be gettext-ed):
![screenshot from 2018-06-29 07-29-38](https://user-images.githubusercontent.com/12151785/42105085-b642ab2c-7bec-11e8-9c2d-eaa933cbfaaa.png)


_Originally posted by @sshedmake in https://github.com/ansible/tower/issues/2061#issuecomment-416343623_

user: sshedmake
labels: component:l10n: localization, translation, japanese, french
issue_2752: state: open
title: copying credential with really long name causes 500
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - API

##### SUMMARY
If you try to copy a credential with a really long name you get a 500 error

##### ENVIRONMENT
* AWX version: devel

##### STEPS TO REPRODUCE

1. create aws credential with name "awsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsawsaw"
2. click the copy button in the ui next to the credential.

##### EXPECTED RESULTS

Copied credential is created

##### ACTUAL RESULTS

500 error

```
Traceback:  

File "/venv/awx/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "./awx/wsgi.py" in _legacy_get_response
  71.         return super(AWXWSGIHandler, self)._legacy_get_response(request)

File "/venv/awx/lib/python2.7/site-packages/django/core/handlers/base.py" in _legacy_get_response
  249.             response = self._get_response(request)

File "/venv/awx/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/venv/awx/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/venv/awx/lib/python2.7/site-packages/django/utils/decorators.py" in inner
  185.                     return func(*args, **kwargs)

File "/venv/awx/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
  58.         return view_func(*args, **kwargs)

File "/venv/awx/lib/python2.7/site-packages/django/views/generic/base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)

File "./awx/api/generics.py" in dispatch
  328.         return super(APIView, self).dispatch(request, *args, **kwargs)

File "/venv/awx/lib/python2.7/site-packages/rest_framework/views.py" in dispatch
  494.             response = self.handle_exception(exc)

File "/venv/awx/lib/python2.7/site-packages/rest_framework/views.py" in handle_exception
  454.             self.raise_uncaught_exception(exc)

File "/venv/awx/lib/python2.7/site-packages/rest_framework/views.py" in dispatch
  491.             response = handler(request, *args, **kwargs)

File "./awx/api/generics.py" in post
  974.             copy_name=serializer.validated_data.get('name', '')

File "./awx/api/generics.py" in copy_model_obj
  918.         new_obj = model.objects.create(**create_kwargs)

File "/venv/awx/lib/python2.7/site-packages/django/db/models/manager.py" in manager_method
  85.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

File "/venv/awx/lib/python2.7/site-packages/django/db/models/query.py" in create
  394.         obj.save(force_insert=True, using=self.db)

File "./awx/main/models/credential/__init__.py" in save
  383.         super(Credential, self).save(*args, **kwargs)

File "./awx/main/models/base.py" in save
  198.         super(PasswordFieldsModel, self).save(*args, **kwargs)

File "./awx/main/models/base.py" in save
  316.         super(PrimordialModel, self).save(*args, **kwargs)

File "./awx/main/models/base.py" in save
  164.         super(CreatedModifiedModel, self).save(*args, **kwargs)

File "/venv/awx/lib/python2.7/site-packages/django/db/models/base.py" in save
  808.                        force_update=force_update, update_fields=update_fields)

File "/venv/awx/lib/python2.7/site-packages/django/db/models/base.py" in save_base
  838.             updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)

File "/venv/awx/lib/python2.7/site-packages/django/db/models/base.py" in _save_table
  924.             result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)

File "/venv/awx/lib/python2.7/site-packages/django/db/models/base.py" in _do_insert
  963.                                using=using, raw=raw)

File "/venv/awx/lib/python2.7/site-packages/django/db/models/manager.py" in manager_method
  85.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

File "/venv/awx/lib/python2.7/site-packages/django/db/models/query.py" in _insert
  1079.         return query.get_compiler(using=using).execute_sql(return_id)

File "/venv/awx/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql
  1112.                 cursor.execute(sql, params)

File "/venv/awx/lib/python2.7/site-packages/django/db/backends/utils.py" in execute
  79.             return super(CursorDebugWrapper, self).execute(sql, params)

File "/venv/awx/lib/python2.7/site-packages/django/db/backends/utils.py" in execute
  64.                 return self.cursor.execute(sql, params)

File "/venv/awx/lib/python2.7/site-packages/django/db/utils.py" in __exit__
  94.                 six.reraise(dj_exc_type, dj_exc_value, traceback)

File "/venv/awx/lib/python2.7/site-packages/django/db/backends/utils.py" in execute
  64.                 return self.cursor.execute(sql, params)

Exception Type: DataError at /api/v2/credentials/5/copy/
Exception Value: value too long for type character varying(512)
```

user: jlmitch5
issue_2685: state: open
title: Indication of deleted nodes needs to be clearer in WF visualizer.
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY
With very complex workflows, it is very difficult to see which nodes contain templates that have been deleted and need to be reassigned-- the dotted line border is nice but very subtle, and lack of colored highlighting at all obscures visibility, especially when zoomed out. The visual could be made clearer here.

![screenshot from 2018-11-14 11-12-55](https://user-images.githubusercontent.com/19942822/48495694-8ee6cd00-e7fe-11e8-9838-24b316474499.png)
user: dsesami
issue_2678: state: open
title: RFE: Customize job listings with extra fields or vars from the job template or job
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI
 

##### SUMMARY
It would be nice to customize the job listings to see from the list view a specific field or variable that was set set along with the job.

##### ADDITIONAL INFORMATION
Example: see the limit parameter to know what machines a specific playbook ran against. That custom field would be added to the list of fields seen the Job List screenshot below.

(Customer request)


<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->
![image](https://user-images.githubusercontent.com/35307769/48451432-687e4e80-e778-11e8-87e2-115db205b41a.png)


user: e-tienne
issue_2655: state: open
title: UI: Hosts/Groups Inventory view with custom column values
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY
A killer-feature that will help customizing inventory view by exposing data in separate columns for each hosts/group. 

Some of the examples :
 -  Template based value with column name "Management IP" and value  "{{ ansible_ssh_host }}"
 -  Template based value with column name "Role" and value  "{{ role }}"
user: sumkincpp
issue_2654: state: open
title: RFE: Allow summary fields for permissions to be searchable
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
- API

##### SUMMARY
Summary fields are not searchable using the filters provided in AWX/Tower.

For example, when a user has a long list of permissions, it may be helpful for admins to be able to search permissions on a user by name, or type rather than just ID. At this time, this is not filterable:
```
 "summary_fields": {
                "type": "object",
                "label": "Summary fields",
                "help_text": "Data structure with name/description for related resources.",
                "filterable": false
```
##### ADDITIONAL INFORMATION
This could potentially get lumped into https://github.com/ansible/awx/issues/402

user: msilmser
issue_2637: state: open
title: Allow another logging driver such as journald/syslog/splunk
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - Installer

##### SUMMARY
By default, the logging driver is ```json-file``` and destroying a container will also remove logs. 
Changing it to ```journald``` for instance would allow us to access the logs of destroyed containers, on top of everything that is already possible with the default logging driver. In particular, the ```docker logs``` command remains available with ```journald``` (and only that one).
This feature can be made **optional** in ```installer/inventory``` with an option within the ```[all:vars]``` section:
```
logging_driver=journald
```
The user could even choose another logging driver such as ```syslog``` or ```splunk``` (the whole list of supported logging drivers is available [here](https://docs.docker.com/config/containers/logging/configure/#supported-logging-drivers)), if the user is notified somewhere that the ```docker logs``` command does NOT remain available for any other logging driver than ```journald```.

##### ADDITIONAL INFORMATION
This feature is enabled in the ```docker-compose.yml``` file for ```journald``` for instance with:
```
  web:
    logging:
        driver: journald
...
  task:
    logging:
        driver: journald
...
  rabbitmq:
    logging:
        driver: journald
...
  memcached:
    logging:
        driver: journald
...
  postgres:
    logging:
        driver: journald
...
```
The last entry depends on whether postgresql server is internal or external.
user: jean-christophe-manciot
issue_2633: state: open
title: Add job timeout tracking feature to local logs and external log aggregators
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
If we set timeout to the job template and launch it and when it failed with the timeout error, we can confirm the cause of this from the `job_explanation` value from the Jobs API endpoint, but there is no way to confirm it from log files.
Also even if we use logging aggregation, there is no information about this timeout error and It would be ideal to more easily identify the cause of job failure are currently being acted upon.

It would be ideal to more easily identify the cause of job failure are currently being acted upon from Tower's local logs and external logging aggregation system.

##### ADDITIONAL INFORMATION

I think it would be better if we can add an `rc` for these jobs, Or we can append `job_explanation` to the logs that we export to the external logging aggregators.
user: saito-hideki
issue_2599: state: open
title: Erroneous error trying to remove someone's permission to private credential
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - API

##### SUMMARY
Error:

> You cannot grant private credential access to another user

happens on disassociation as well as association

##### ENVIRONMENT
* AWX version: X.Y.Z
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  X.Y.Z
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

In the UI, create a new private credential as a non-superuser

attempt to remove your own permission to this thing

##### EXPECTED RESULTS

error message that makes sense

##### ACTUAL RESULTS

> You cannot grant private credential access to another user

In API response

##### ADDITIONAL INFORMATION

will file UI issue as a separate issue.

user: AlanCoding
issue_2597: state: open
title: RFE: Add Option to Skip Vault Variables in Inventory Import
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Add check box to skip vaulted variables and variable files when importing inventory into AWX using an SCM inventory or similar

user: jamesmarshall24
issue_2576: state: open
title: UI shows disassociation button for indirect parents
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - UI

##### SUMMARY
UI shows the ❌ button for some groups that can't be removed (disassociated), this results in a UX that ignores user requests.

##### ENVIRONMENT
* AWX version: X.Y.Z
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  X.Y.Z
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

Create an inventory, and add these hosts and groups.

 - make group `g1`
 - make group `g2`
 - make `g2` a child of `g1`
 - make host `h1`
 - make `h1` a child of `g1`
 - now, remove `g1` from the list of groups for `h1`

##### EXPECTED RESULTS

It's a trick. You can't do that.

Either the UI should:

 - not show `g1` in the list, because it is not a direct parent, and thus cannot be disassociated
 - not show the ❌  next to `g1`, and give sufficient guidance to the user to indicate that indirect ancestors are being presented as items in the list.

##### ACTUAL RESULTS

The x is shown next to the grandparent, `g1`

<img width="911" alt="screen shot 2018-11-02 at 9 38 50 am" src="https://user-images.githubusercontent.com/1385596/47918650-8f3cab00-de83-11e8-848c-2d7eba4d6c48.png">

The list obtains the groups from this endpoint, I believe:

`/api/v2/hosts/22373/all_groups/?page_size=20&order_by=name`

Now, observe the user experience that results from this:

![grandparent_dis](https://user-images.githubusercontent.com/1385596/47918840-0e31e380-de84-11e8-921f-f680d4114534.gif)


##### ADDITIONAL INFORMATION

This is really a re-emergence of https://github.com/ansible/awx/issues/1904, although via `all_groups`, instead of `root_groups`

user: AlanCoding
issue_2575: state: open
title: Get rid of internal field survey_passwords
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API

##### SUMMARY
Since survey answers are now encrypted inside of their entry, we do not need the corresponding survey_passwords field to track which values should be redacted

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: AlanCoding
issue_2573: state: open
title: RFE: Add host tracking feature in Job details.
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI
 
##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

In some cases long run jobs may hang on specific hosts and it would be ideal to more easily identify which hosts are currently being acted upon. 

##### ADDITIONAL INFORMATION
Currently the only way to debug problem hosts is to go to the command line and check for processes which are still active with hosts.

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: gamuniz
issue_2570: state: open
title: Unicode query filters (including some search filters) not working
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - API

##### SUMMARY
Can't search with unicode

##### ENVIRONMENT
* AWX version: X.Y.Z
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  X.Y.Z
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

Create an inventory

Name it 

> 뜓

Search activity stream and inventory list for this inventory

##### EXPECTED RESULTS

Searches get hits.

##### ACTUAL RESULTS

0 results

lots of details to report here...

 - `/api/v2/inventories/?name=뜓`  1 result (good)
 - `/api/v2/inventories/?search=뜓` 1 result (good)
 - `/api/v2/activity_stream/?search=ub713`  > 1 result (umm...)
 - `/api/v2/activity_stream/?search=뜓`  0 result (bad)
 - `/api/v2/activity_stream/?changes__icontains=뜓` 0 result (bad)

##### ADDITIONAL INFORMATION

In shell

```
In [1]: Inventory.objects.filter(name=u'\ub713')
Out[1]: <QuerySet [<Inventory: 뜓-581>]>

In [2]: ActivityStream.objects.filter(changes__icontains=u'\ub713')
Out[2]: <QuerySet []>

In [14]: ActivityStream.objects.filter(changes__icontains='\ub713').count()
Out[14]: 56

In [15]: ActivityStream.objects.filter(changes__icontains=u'\ub713').count()
Out[15]: 0
```

user: AlanCoding
issue_2561: state: open
title: Potentially reap obsolete schedules
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY

Schedules can have an end-by date, or an "end after 20 runs" configuration.

It may be useful to have a process (management job?) that automatically deletes all "expired" schedules.

##### ADDITIONAL INFORMATION


user: wenottingham
issue_2541: state: open
title: Resource Locks
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
It would be nice if job templates and workflow job templates could specify a "resource lock"

Ex.
I have 10 jobs that can do operations on one F5 pool. 
I only want one of those to be able to run at a time. 
I can create a "resource lock" and assign it to each job. 
When any job runs, it grabs the lock and the other jobs have to wait.
user: stobias123
issue_2535: state: open
title: Notification template junk activity stream entry on creation
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - API

##### SUMMARY
creating NT makes 2 entries where a user would probably prefer 1

##### ENVIRONMENT
* AWX version: X.Y.Z
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  X.Y.Z
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

Create notification template with some private data

view activity stream

##### EXPECTED RESULTS

just a creation entry

##### ACTUAL RESULTS

some examples, including a copy action

<img width="1221" alt="screen shot 2018-10-26 at 9 14 58 am" src="https://user-images.githubusercontent.com/1385596/47568718-db29a600-d8ff-11e8-967d-415c47472233.png">

As you click on one of the 2nd entries in UI:

```json
{
 "notification_configuration": [
  "{\"username\": \"fooooooo\", \"sender\": \"asdf@invalid.com\", \"recipients\": [\"foo@invaid.com\"], \"use_tls\": false, \"host\": \"foo.invalid\", \"use_ssl\": false, \"password\": \"\", \"port\": 8888}",
  "{\"username\": \"fooooooo\", \"sender\": \"asdf@invalid.com\", \"recipients\": [\"foo@invaid.com\"], \"use_tls\": false, \"host\": \"foo.invalid\", \"use_ssl\": false, \"password\": \"$encrypted$\", \"port\": 8888}"
 ]
}
```

Better to not create this entry

##### ADDITIONAL INFORMATION

Kinda related https://github.com/ansible/awx/issues/1500

user: AlanCoding
issue_2527: state: open
title: Name Validation should be reinforced with a character maximum in AWX
body: ##### ISSUE TYPE
 - Enhancement

##### COMPONENT NAME
 - UI

##### SUMMARY
Currently, when adding a new user (and across other form fields where character maximums are only passively reinforced), you can flood the text field with characters, but then an error message appears after creating the user fails: 
![screenshot from 2018-10-25 09-36-07](https://user-images.githubusercontent.com/19942822/47504499-5cb70080-d83a-11e8-83f0-0ee5771ba7cf.png)

It would be good to either:

1. Show this message automatically when the character count goes past the limit on these fields
or
2. restrict the character count inside the box, preventing the user from typing past that limit at all.

In my opinion, option 1 is clearer to the user. 
user: dsesami
issue_2524: state: open
title: Display how variables are assigned to a host, and from where
body: ##### ISSUE TYPE
- The current UI makes it difficult to track variables set on GROUPS in an INVENTORY. It would be helpful if groups were presented as a tree to visualize group and subgroup relationships.

##### COMPONENT NAME
 - UI

##### SUMMARY
 Ansible Tower allows the user to create groups and associate groups with other groups from the UI. It is difficult to track down a nodes variables when it belongs to multiple groups. For example if I have a group called 'linux' and multiple sub-groups below that with overriding variables it is difficult to tell which groups are subgroups of 'linux' which would inherit any variable set on the 'linux' group. A current workaround is to put the parent names in the name of the group( ie linux_webservers). This becomes even more challenging at more than 2 levels of groups.



user: mjhermanson
issue_2519: state: open
title: No way to obtain text from extra long inventory update event
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
If an inventory update emits an incredibly long single line (>1000 characters), then the API & UI will show a "..." character. This is fine for the overall standard out page, but it turns out there's no way to obtain the hidden text in the "..."

##### ADDITIONAL INFORMATION

Job events will show full standard out in the detail view (but not the list view)

Inventory update events have no detail view. The API part of this can probably be resolved by adding it.

user: AlanCoding
issue_2516: state: open
title: Allow applying a role as a workflow step
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI


##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
When you import roles into AWX, you need to run the playbook that calls each role. The result is that every roles output is displayed in the stdout window.

It would be great if we could take all roles under the `roles:` heading and split them into Workflows. This would provide a more user friendly experience and make troubleshooting much easier.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->
If we look at the role deployment file:
~~~
- hosts: status_up 
  become: True
  become_method: sudo
  vars_files:
    - base_config/vars/main.yml
    - ntp_clients/vars/main.yml
    - snmp_hosts/vars/main.yml
    - zabbix_clients/vars/main.yml

  roles:
    - foreman_clients
    - base_config
    - ntp_clients
    - snmp_hosts
    - zabbix_clients
~~~

We can see that this playbook calls the roles specified under `roles:`

If I manually break them up into individual playbooks, I'm able to create a workflow within AWX that looks much better:
![image](https://user-images.githubusercontent.com/5205987/47397302-02526d00-d772-11e8-8b93-3bb87a16b8a9.png)


If we could provide the user with an option to do this within the UI. I believe it would improve user experience with AWX.
user: r3d3mpt10n
issue_2481: state: open
title: Update project when creating a new project sourced inventory
body: ##### ISSUE TYPE
The option of updating the project when a project based inventory is manually synced (added or otherwise). 

##### COMPONENT NAME
 - UI

##### SUMMARY
The current functionality allows for project change -> update inventory, but when adding a new inventory (or updating it), the the sync fails until the project is otherwise updated. Adding the option allows for the add inventory -> update project (to see the actual inventory). This is probably mostly useful adding new project sources inventories and wanting to make sure they are pulled in correctly before using them in a job. Reduces the manual step/process (remembering) to update the project first before validating the newly added project sources inventory

##### ADDITIONAL INFORMATION


user: bspencer168
issue_2477: state: open
title: RFE: Add the status of a scheduled run from the schedules view
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI

##### SUMMARY
We would like to see the status, success or failed, of a scheduled run for a template from the schedules view. 
##### ADDITIONAL INFORMATION

This would make is easier to identify which scheduled jobs, when there are multiple jobs for the same template with varying parameters, needs attention.

(Customer request)

user: e-tienne
issue_2459: state: open
title: Add a graceful AWX cluster shutdown
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY

Currently, if you want to drain a cluster, you need to:
- disable instances
- wait for jobs to drain
- hope new ones don't get submitted
- once done, shut it down (for upgrades, etc.)

Ideally, there is a "one-stop" option for draining a cluster, that *also* involves not letting new jobs be submitted in the interim.

##### ADDITIONAL INFORMATION


user: wenottingham
issue_2448: state: open
title: RFE: Additional field on user details to be able to choose authentication type.
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY
Be able to convert user authentication method from UI after migrating the user that is authenticating via AD/LDAP from old AWX instance to new AWX instance.

- when you sync a user that is authenticating via AD/LDAP using tower-cli from one instance to another and that user don't exists on the destination instance the user will be sync but created as local user with default password. We need a feature that could convert that user back to authenticating via AD/LDAP without deleting it so that there permission on the other assets are retained.

- create something like a drop down field in the user details section (like the USER TYPE drop down) to choose the AUTHENTICATION TYPE either local or the current external authentication that is configured in AWX.

##### ADDITIONAL INFORMATION

Additional field in (e.g. AUTHENTICATION TYPE):

![screen shot 2018-10-16 at 3 41 06 pm](https://user-images.githubusercontent.com/10410660/47000078-04a53d80-d15a-11e8-812c-1478b810e5b3.png)

user: ryan012880
labels: component:authentication: For issues related to authentication
issue_2446: state: open
title: Terrible API validation response when Dict expected in tower settings
body: To reproduce, set this form value to valid json in the settings/auth form and save:

<img width="295" alt="screen shot 2018-10-15 at 6 11 19 pm" src="https://user-images.githubusercontent.com/1342624/46981326-d403cc00-d0a5-11e8-800b-2fe1c296028f.png">

### Expected
* A more details error message

### Actual
* Error message that makes the user thing the json dict they sent somehow contains unicode.
`"Expected a dictionary of items but got type \"unicode\"."`

<img width="1075" alt="screen shot 2018-10-15 at 6 11 27 pm" src="https://user-images.githubusercontent.com/1342624/46981389-1927fe00-d0a6-11e8-9544-f6f91717e58a.png">

user: jlmitch5
issue_2441: state: open
title: Enhancement: Validate "choices" for surveys
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Add validation code when a user/the UI submits a survey to the API
While some validation for survey items has been added, the correct format for `choices` has yet to be set in stone, so correct validation code has yet to land on `devel`

##### Acceptance Criteria:
- [ ] We decide and document exactly what acceptable formats are
  - currently there are instances of `\n` delimited strings, `,` delimited strings, and actual lists `[]`
- [ ] We are backwards compatible with any clients/cli/UI usage of the `choices` feild
- [ ] We validate `choices` and return an informative message if the data does not comply with requirements

#### Additional info:
https://github.com/ansible/awx/pull/2440
https://github.com/ansible/awx/pull/1911
user: kdelee
issue_2434: state: open
title: create a new 'Client Certificate' credential type
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY

Metadata:
- name: Client Certificate (feel free to come up with something better)
- description: A client certificate and its corresponding private key

inputs:
```
 {
                "fields": [
                    {
                        "label": "Client Certificate",
                        "secret": true,
                        "multiline": true,
                        "help_text": "Paste the contents of the client certificate",
                        "type": "string",
                        "id": "client_cert"
                    },
                    {
                        "label": "Private Key",
                        "secret": true,
                        "multiline": true,
                        "help_text": "Paste the contents of the private key for the certificate",
                        "type": "string",
                        "id": "priv_key"
                    }
                ],
                "required": [
                    "client_cert",
                    "priv_key"
                ]
},
                "fields": [
                    {
                        "label": "Private Key",
                        "secret": true,
                        "multiline": true,
                        "help_text": "Paste the contents of the private key for the certificate",
                        "type": "string",
                        "id": "priv_key"
                    }
                ],
                "required": [
                    "priv_key"
                ]
            },
```

injector:
```
                "file": {
                    "template.cert": "{{ client_cert }}"
                    "template.key": "{{ priv_key }}"
                },
                "env": {
                    "CLIENT_CERTIFICATE": "{{ tower.filename.cert }}"
                    "CLIENT_KEY": "{{ tower.filename.key }}"
                }
}
```

##### ADDITIONAL INFORMATION


user: wenottingham
issue_2421: state: open
title: RFE: Allow to relaunch a job and modify input parameters
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI


##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
Make relaunching more flexible as sometimes the users want to relaunch the same job with only a few input modifications from the original job.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: jolly-green
issue_2419: state: open
title: RFE: Enable to set predefined lists of promptable items
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
Add functionality to manage a predefined list of inventories in a job template.  This would limit the inventories in which a job template can be executed.

##### ADDITIONAL INFORMATION

In a organization/group with a large number of inventories which cannot be more limited by RBAC, this feature would help to speed up the "inventory selection" process during the execution as well as avoid possible mistakes caused by selecting the wrong inventory.

The execution of a job template (even with the option ask for inventory when executed) becomes difficult to manage and causes to easily make an mistakes (as executing a job template in wrong set of hosts).

(Customer request)
user: b0urn3
issue_2399: state: open
title: For relaunched jobs, show a link to the original job
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAM
 - API
 - UI

##### SUMMARY
User should be able to click on a link to navigate to the original job if they are on the page for a relaunched job.

##### ADDITIONAL INFORMATION

needs the API to show the information, and then the UI to display it.

I suggest that this field should be a foreign key on the UnifiedJob model, but turn off the DB index for this field: https://code.djangoproject.com/ticket/13730
user: AlanCoding
issue_2362: state: open
title: 504 Gateway Time-out on provisioning callback when integrated with Satellite 6.2
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - API

##### SUMMARY
504 Gateway Time-out on provisioning callback when integrated with Satellite 6.2

##### ENVIRONMENT
* AWX version:  1.0.8.0
* AWX install method: docker on linux
* Ansible version:  2.6.4
* Operating System: RHEL 7.5
* Web Browser:

##### STEPS TO REPRODUCE
1) Integrate AWX with Satellite with a dynamic inventory

    Credential: 	The credential you created for Satellite Server.
    Overwrite: 	Selected
    Upgrade on Launch: 	Selected
    Cache Timeout: 	90

    NB: Inventory syncronization take some minutes to finish!

2) Create a template for provisioning job and enable callback

3) Call the callback from a machine in the Satellite that is still not been syncronized as host in the Satellite inventory
    /usr/bin/curl -k -s --data "host_config_key=xxxxxxxxxxxxxxx" https://awxhost/api/v2/job_templates/16/callback/

##### EXPECTED RESULTS

The execution of the provisioning job after inventory resync.

##### ACTUAL RESULTS
The inventory resync finishes fine but the provisioning job doesn't work. On the machine callin the callback after 120s we get:
`	<html>
	<head><title>504 Gateway Time-out</title></head>
	<body bgcolor="white">
	<center><h1>504 Gateway Time-out</h1></center>
	<hr><center>nginx/1.12.2</center>
	</body>
	</html>`

##### ADDITIONAL INFORMATION
Looking at the log the problem seems to be related to the harakiri timeout:


ct  3 13:25:55 itasz0 journal: [2018-10-03 11:25:55,410: INFO/Beat] Scheduler: Sending due task task_manager (awx.main.scheduler.tasks.run_task_manager)
Oct  3 13:25:55 itasz0 journal: [2018-10-03 11:25:55,412: DEBUG/Beat] awx.main.scheduler.tasks.run_task_manager sent. id->543e9a7d-427a-4fd4-be56-3ff9610d627c
Oct  3 13:25:55 itasz0 journal: [2018-10-03 11:25:55,413: DEBUG/Beat] beat: Waking up in 15.61 seconds.
Oct  3 13:25:55 itasz0 journal: [2018-10-03 11:25:55,418: INFO/MainProcess] Received task: awx.main.scheduler.tasks.run_task_manager[543e9a7d-427a-4fd4-be56-3ff9610d627c] expires:[2018-10-03 11:26:15.411588+00:00]
Oct  3 13:25:55 itasz0 journal: [2018-10-03 11:25:55,418: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7fab20209320> (args:(u'awx.main.scheduler.tasks.run_task_manager', u'543e9a7d-427a-4fd4-be56-3ff9610d627c', [], {}, {u'utc': True, u'is_eager': False, u'chord': None, u'group': None, u'args': [], u'retries': 0, u'delivery_info': {u'priority': 0, u'redelivered': False, u'routing_key': u'awx_private_queue', u'exchange': u'awx_private_queue'}, u'expires': u'2018-10-03T11:26:15.411588+00:00', u'hostname': 'celery@awx', u'task': u'awx.main.scheduler.tasks.run_task_manager', u'callbacks': None, u'correlation_id': u'543e9a7d-427a-4fd4-be56-3ff9610d627c', u'errbacks': None, u'timelimit': [None, None], u'taskset': None, u'kwargs': {}, u'eta': None, u'reply_to': u'1352fc63-6300-3aa9-99b8-aabe871f9a2b', u'id': u'543e9a7d-427a-4fd4-be56-3ff9610d627c', u'headers': {}}) kwargs:{})
Oct  3 13:25:55 itasz0 journal: [2018-10-03 11:25:55,421: DEBUG/MainProcess] Task accepted: awx.main.scheduler.tasks.run_task_manager[543e9a7d-427a-4fd4-be56-3ff9610d627c] pid:253
Oct  3 13:25:55 itasz0 journal: 2018-10-03 11:25:55,442 DEBUG    awx.main.scheduler Running Tower task manager.
Oct  3 13:25:55 itasz0 journal: 2018-10-03 11:25:55,457 DEBUG    awx.main.scheduler Starting Scheduler
Oct  3 13:25:55 itasz0 journal: [2018-10-03 11:25:55,507: INFO/MainProcess] Task awx.main.scheduler.tasks.run_task_manager[543e9a7d-427a-4fd4-be56-3ff9610d627c] succeeded in 0.0869208549848s: None
Oct  3 13:25:57 itasz0 journal: 2018-10-03 11:25:57,985 DEBUG    awx.main.models.inventory Going to update inventory computed fields
Oct  3 13:25:58 itasz0 journal: 2018-10-03 11:25:58,011 DEBUG    awx.main.models.inventory Finished updating inventory computed fields
Oct  3 13:25:58 itasz0 journal: 2018-10-03 11:25:58.035 [info] <0.6793.6> accepting AMQP connection <0.6793.6> (172.17.0.5:48994 -> 172.17.0.4:5672)
Oct  3 13:25:58 itasz0 journal: 2018-10-03 11:25:58.041 [info] <0.6793.6> connection <0.6793.6> (172.17.0.5:48994 -> 172.17.0.4:5672): user 'guest' authenticated and granted access to vhost 'awx'
Oct  3 13:25:58 itasz0 journal: [2018-10-03 11:25:58,049: INFO/MainProcess] Received task: awx.main.scheduler.tasks.run_job_launch[6f766022-d12d-4d86-8ce2-40f6d9b52f77]
Oct  3 13:25:58 itasz0 journal: [2018-10-03 11:25:58,049: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7fab20209320> (args:(u'awx.main.scheduler.tasks.run_job_launch', u'6f766022-d12d-4d86-8ce2-40f6d9b52f77', [39], {}, {u'utc': True, u'is_eager': False, u'chord': None, u'group': None, u'args': [39], u'retries': 0, u'delivery_info': {u'priority': 0, u'redelivered': False, u'routing_key': u'awx_private_queue', u'exchange': u'awx_private_queue'}, u'expires': None, u'hostname': 'celery@awx', u'task': u'awx.main.scheduler.tasks.run_job_launch', u'callbacks': None, u'correlation_id': u'6f766022-d12d-4d86-8ce2-40f6d9b52f77', u'errbacks': None, u'timelimit': [None, None], u'taskset': None, u'kwargs': {}, u'eta': None, u'reply_to': u'71bb69d4-e51b-3154-a936-0c6b3d35b47a', u'id': u'6f766022-d12d-4d86-8ce2-40f6d9b52f77', u'headers': {}}) kwargs:{})
Oct  3 13:25:58 itasz0 journal: [2018-10-03 11:25:58,054: DEBUG/MainProcess] Task accepted: awx.main.scheduler.tasks.run_job_launch[6f766022-d12d-4d86-8ce2-40f6d9b52f77] pid:252
Oct  3 13:25:58 itasz0 journal: 2018-10-03 11:25:58.059 [info] <0.6793.6> closing AMQP connection <0.6793.6> (172.17.0.5:48994 -> 172.17.0.4:5672, vhost: 'awx', user: 'guest')
Oct  3 13:25:58 itasz0 journal: 2018-10-03 11:25:58,081 DEBUG    awx.main.scheduler Starting Scheduler
Oct  3 13:25:58 itasz0 journal: 2018-10-03 11:25:58,084 DEBUG    awx.main.scheduler Failing inconsistent running jobs.
Oct  3 13:25:58 itasz0 journal: 2018-10-03 11:25:58.141 [info] <0.6807.6> accepting AMQP connection <0.6807.6> (172.17.0.6:57140 -> 172.17.0.4:5672)
Oct  3 13:25:58 itasz0 journal: [2018-10-03 11:25:58,151: DEBUG/Worker-3] Start from server, version: 0.9, properties: {u'information': u'Licensed under the MPL.  See http://www.rabbitmq.com/', u'product': u'RabbitMQ', u'copyright': u'Copyright (C) 2007-2018 Pivotal Software, Inc.', u'capabilities': {u'exchange_exchange_bindings': True, u'connection.blocked': True, u'authentication_failure_close': True, u'direct_reply_to': True, u'basic.nack': True, u'per_consumer_qos': True, u'consumer_priorities': True, u'consumer_cancel_notify': True, u'publisher_confirms': True}, u'cluster_name': u'rabbit@74fb39f734bc', u'platform': u'Erlang/OTP 20.1.7', u'version': u'3.7.4'}, mechanisms: [u'PLAIN', u'AMQPLAIN'], locales: [u'en_US']
Oct  3 13:25:58 itasz0 journal: 2018-10-03 11:25:58.157 [info] <0.6807.6> connection <0.6807.6> (172.17.0.6:57140 -> 172.17.0.4:5672): user 'guest' authenticated and granted access to vhost 'awx'
Oct  3 13:25:58 itasz0 journal: [2018-10-03 11:25:58,157: DEBUG/Worker-3] Open OK!
Oct  3 13:25:58 itasz0 journal: [2018-10-03 11:25:58,157: DEBUG/Worker-3] using channel_id: 1
Oct  3 13:25:58 itasz0 journal: [2018-10-03 11:25:58,159: DEBUG/Worker-3] Channel open
Oct  3 13:25:58 itasz0 journal: [2018-10-03 11:25:58,177: DEBUG/MainProcess] pidbox received method dump_active(safe=False) [reply_to:{u'routing_key': u'd8021da0-8d22-3de2-9bc4-21e6914f45e0', u'exchange': u'reply.celery.pidbox'} ticket:01d73179-1fd3-4c60-9c5b-0e7f8c1008f8]
Oct  3 13:25:58 itasz0 journal: [pid: 137|app: 0|req: 77/296] 172.17.0.7 () {50 vars in 2696 bytes} [Wed Oct  3 11:25:58 2018] GET /api/v2/dashboard/graphs/jobs/?period=month&job_type=all => generated 1091 bytes in 194 msecs (HTTP/1.1 200) 10 headers in 375 bytes (1 switches on core 0)
**Oct  3 13:25:58 itasz0 journal: 172.17.0.7 - - [03/Oct/2018:11:25:58 +0000] "GET /api/v2/dashboard/graphs/jobs/?period=month&job_type=all HTTP/1.1" 200 1091 "https://itasz0.intra.infotn.it/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0" "172.26.7.15"
Oct  3 13:25:58 itasz0 journal: 172.26.7.15 - - [03/Oct/2018:11:25:58 +0000] "GET /api/v2/dashboard/graphs/jobs/?period=month&job_type=all HTTP/1.1" 200 1091 "https://itasz0.intra.infotn.it/"** "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0"
Oct  3 13:25:58 itasz0 journal: 172.17.0.7 - - [03/Oct/2018:11:25:58 +0000] "GET /api/v2/unified_jobs/?page_size=20&order_by=-finished&not__launch_type=sync HTTP/1.1" 200 43875 "https://itasz0.intra.infotn.it/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0" "172.26.7.15"
Oct  3 13:25:58 itasz0 journal: 172.26.7.15 - - [03/Oct/2018:11:25:58 +0000] "GET /api/v2/unified_jobs/?page_size=20&order_by=-finished&not__launch_type=sync HTTP/1.1" 200 43875 "https://itasz0.intra.infotn.it/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0"
Oct  3 13:25:58 itasz0 journal: [pid: 134|app: 0|req: 45/297] 172.17.0.7 () {50 vars in 2734 bytes} [Wed Oct  3 11:25:58 2018] GET /api/v2/unified_jobs/?page_size=20&order_by=-finished&not__launch_type=sync => generated 43875 bytes in 889 msecs (HTTP/1.1 200) 10 headers in 376 bytes (1 switches on core 0)
Oct  3 13:25:59 itasz0 journal: [2018-10-03 11:25:59,193: DEBUG/Worker-3] Closed channel #1
Oct  3 13:25:59 itasz0 journal: 2018-10-03 11:25:59.200 [info] <0.6807.6> closing AMQP connection <0.6807.6> (172.17.0.6:57140 -> 172.17.0.4:5672, vhost: 'awx', user: 'guest')
Oct  3 13:25:59 itasz0 journal: 2018-10-03 11:25:59,295 DEBUG    awx.main.scheduler Starting inventory_update 39 (pending) in group tower instance awx (remaining_capacity=17)
Oct  3 13:25:59 itasz0 journal: 2018-10-03 11:25:59,324 INFO     awx.main.scheduler Submitting inventory_update 39 (waiting) to <instance group, instance> <1,awx>.
Oct  3 13:25:59 itasz0 journal: 2018-10-03 11:25:59,367 DEBUG    awx.main.models.inventory Going to update inventory computed fields
Oct  3 13:25:59 itasz0 journal: [2018-10-03 11:25:59,367: DEBUG/Worker-3] Going to update inventory computed fields
Oct  3 13:25:59 itasz0 journal: 2018-10-03 11:25:59,395 DEBUG    awx.main.models.inventory Finished updating inventory computed fields
Oct  3 13:25:59 itasz0 journal: [2018-10-03 11:25:59,395: DEBUG/Worker-3] Finished updating inventory computed fields
Oct  3 13:25:59 itasz0 journal: 2018-10-03 11:25:59,398 DEBUG    awx.main.scheduler inventory_update 39 (waiting) consumed 1 capacity units from tower with prior total of 0
Oct  3 13:25:59 itasz0 journal: 2018-10-03 11:25:59.499 [info] <0.6827.6> accepting AMQP connection <0.6827.6> (172.17.0.6:57146 -> 172.17.0.4:5672)
Oct  3 13:25:59 itasz0 journal: [2018-10-03 11:25:59,501: DEBUG/Worker-3] Start from server, version: 0.9, properties: {u'information': u'Licensed under the MPL.  See http://www.rabbitmq.com/', u'product': u'RabbitMQ', u'copyright': u'Copyright (C) 2007-2018 Pivotal Software, Inc.', u'capabilities': {u'exchange_exchange_bindings': True, u'connection.blocked': True, u'authentication_failure_close': True, u'direct_reply_to': True, u'basic.nack': True, u'per_consumer_qos': True, u'consumer_priorities': True, u'consumer_cancel_notify': True, u'publisher_confirms': True}, u'cluster_name': u'rabbit@74fb39f734bc', u'platform': u'Erlang/OTP 20.1.7', u'version': u'3.7.4'}, mechanisms: [u'PLAIN', u'AMQPLAIN'], locales: [u'en_US']
Oct  3 13:25:59 itasz0 journal: 2018-10-03 11:25:59.504 [info] <0.6827.6> connection <0.6827.6> (172.17.0.6:57146 -> 172.17.0.4:5672): user 'guest' authenticated and granted access to vhost 'awx'
Oct  3 13:25:59 itasz0 journal: [2018-10-03 11:25:59,505: DEBUG/Worker-3] Open OK!
Oct  3 13:25:59 itasz0 journal: [2018-10-03 11:25:59,505: DEBUG/Worker-3] using channel_id: 1
Oct  3 13:25:59 itasz0 journal: [2018-10-03 11:25:59,507: DEBUG/Worker-3] Channel open
Oct  3 13:25:59 itasz0 journal: [2018-10-03 11:25:59,514: DEBUG/Worker-3] Closed channel #1
Oct  3 13:25:59 itasz0 journal: [2018-10-03 11:25:59,514: INFO/MainProcess] Received task: awx.main.tasks.run_inventory_update[74b12ff2-bfde-4b6d-b5cd-ded459c1d335]
Oct  3 13:25:59 itasz0 journal: [2018-10-03 11:25:59,515: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7fab20209320> (args:(u'awx.main.tasks.run_inventory_update', u'74b12ff2-bfde-4b6d-b5cd-ded459c1d335', [39], {}, {u'utc': True, u'is_eager': False, u'chord': None, u'group': None, u'args': [39], u'retries': 0, u'delivery_info': {u'priority': None, u'redelivered': False, u'routing_key': u'awx', u'exchange': u'awx'}, u'expires': None, u'hostname': 'celery@awx', u'task': u'awx.main.tasks.run_inventory_update', u'callbacks': [{u'chord_size': None, u'task': u'awx.main.tasks.handle_work_success', u'args': [], u'immutable': False, u'subtask_type': None, u'kwargs': {u'task_actual': {u'type': u'inventory_update', u'id': 39}}, u'options': {}}], u'correlation_id': u'74b12ff2-bfde-4b6d-b5cd-ded459c1d335', u'errbacks': [{u'chord_size': None, u'task': u'awx.main.tasks.handle_work_error', u'args': [], u'immutable': False, u'subtask_type': None, u'kwargs': {u'subtasks': [{u'type': u'inventory_update', u'id': 39}]}, u'options': {}}], u'timelimit': [None, None], u'taskset': None, u'kwargs': {}, u'eta': None, u'reply_to':... kwargs:{})
Oct  3 13:25:59 itasz0 journal: [2018-10-03 11:25:59,520: DEBUG/MainProcess] Task accepted: awx.main.tasks.run_inventory_update[74b12ff2-bfde-4b6d-b5cd-ded459c1d335] pid:254
Oct  3 13:25:59 itasz0 journal: 2018-10-03 11:25:59.518 [info] <0.6827.6> closing AMQP connection <0.6827.6> (172.17.0.6:57146 -> 172.17.0.4:5672, vhost: 'awx', user: 'guest')
Oct  3 13:25:59 itasz0 journal: [2018-10-03 11:25:59,531: INFO/MainProcess] Task awx.main.scheduler.tasks.run_job_launch[6f766022-d12d-4d86-8ce2-40f6d9b52f77] succeeded in 1.47918982204s: None
Oct  3 13:25:59 itasz0 journal: 2018-10-03 11:25:59,642 DEBUG    awx.main.models.inventory Going to update inventory computed fields
Oct  3 13:25:59 itasz0 journal: [2018-10-03 11:25:59,642: DEBUG/Worker-5] Going to update inventory computed fields
Oct  3 13:25:59 itasz0 journal: 2018-10-03 11:25:59,671 DEBUG    awx.main.models.inventory Finished updating inventory computed fields
Oct  3 13:25:59 itasz0 journal: [2018-10-03 11:25:59,671: DEBUG/Worker-5] Finished updating inventory computed fields
Oct  3 13:26:00 itasz0 journal: [pid: 136|app: 0|req: 33/298] 172.17.0.7 () {50 vars in 2696 bytes} [Wed Oct  3 11:26:00 2018] GET /api/v2/dashboard/graphs/jobs/?period=month&job_type=all => generated 1091 bytes in 385 msecs (HTTP/1.1 200) 10 headers in 375 bytes (1 switches on core 0)
Oct  3 13:26:00 itasz0 journal: 172.26.7.15 - - [03/Oct/2018:11:26:00 +0000] "GET /api/v2/dashboard/graphs/jobs/?period=month&job_type=all HTTP/1.1" 200 1091 "https://itasz0.intra.infotn.it/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0"
Oct  3 13:26:00 itasz0 journal: 172.17.0.7 - - [03/Oct/2018:11:26:00 +0000] "GET /api/v2/dashboard/graphs/jobs/?period=month&job_type=all HTTP/1.1" 200 1091 "https://itasz0.intra.infotn.it/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0" "172.26.7.15"
Oct  3 13:26:00 itasz0 journal: RESULT 2
Oct  3 13:26:00 itasz0 journal: OKREADY
Oct  3 13:26:00 itasz0 journal: 172.17.0.7 - - [03/Oct/2018:11:26:00 +0000] "GET /api/v2/dashboard/graphs/jobs/?period=month&job_type=all HTTP/1.1" 200 1091 "https://itasz0.intra.infotn.it/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0" "172.26.7.15"
Oct  3 13:26:00 itasz0 journal: 172.26.7.15 - - [03/Oct/2018:11:26:00 +0000] "GET /api/v2/dashboard/graphs/jobs/?period=month&job_type=all HTTP/1.1" 200 1091 "https://itasz0.intra.infotn.it/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0"
Oct  3 13:26:00 itasz0 journal: [pid: 133|app: 0|req: 29/299] 172.17.0.7 () {50 vars in 2696 bytes} [Wed Oct  3 11:26:00 2018] GET /api/v2/dashboard/graphs/jobs/?period=month&job_type=all => generated 1091 bytes in 439 msecs (HTTP/1.1 200) 10 headers in 375 bytes (1 switches on core 0)
Oct  3 13:26:01 itasz0 journal: [pid: 134|app: 0|req: 46/300] 172.17.0.7 () {50 vars in 2734 bytes} [Wed Oct  3 11:26:00 2018] GET /api/v2/unified_jobs/?page_size=20&order_by=-finished&not__launch_type=sync => generated 43949 bytes in 1202 msecs (HTTP/1.1 200) 10 headers in 376 bytes (1 switches on core 0)
Oct  3 13:26:01 itasz0 journal: 172.17.0.7 - - [03/Oct/2018:11:26:01 +0000] "GET /api/v2/unified_jobs/?page_size=20&order_by=-finished&not__launch_type=sync HTTP/1.1" 200 43949 "https://itasz0.intra.infotn.it/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0" "172.26.7.15"
Oct  3 13:26:01 itasz0 journal: 172.26.7.15 - - [03/Oct/2018:11:26:01 +0000] "GET /api/v2/unified_jobs/?page_size=20&order_by=-finished&not__launch_type=sync HTTP/1.1" 200 43949 "https://itasz0.intra.infotn.it/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0"
Oct  3 13:26:01 itasz0 journal: RESULT 2
Oct  3 13:26:01 itasz0 journal: OKREADY
Oct  3 13:26:01 itasz0 journal: [pid: 137|app: 0|req: 78/301] 172.17.0.7 () {50 vars in 2734 bytes} [Wed Oct  3 11:26:00 2018] GET /api/v2/unified_jobs/?page_size=20&order_by=-finished&not__launch_type=sync => generated 43949 bytes in 1537 msecs (HTTP/1.1 200) 10 headers in 376 bytes (1 switches on core 0)
Oct  3 13:26:01 itasz0 journal: 172.26.7.15 - - [03/Oct/2018:11:26:01 +0000] "GET /api/v2/unified_jobs/?page_size=20&order_by=-finished&not__launch_type=sync HTTP/1.1" 200 43949 "https://itasz0.intra.infotn.it/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0"
Oct  3 13:26:01 itasz0 journal: 172.17.0.7 - - [03/Oct/2018:11:26:01 +0000] "GET /api/v2/unified_jobs/?page_size=20&order_by=-finished&not__launch_type=sync HTTP/1.1" 200 43949 "https://itasz0.intra.infotn.it/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Firefox/60.0" "172.26.7.15"
Oct  3 13:26:05 itasz0 journal: 2018-10-03 11:26:05.791 [info] <0.6841.6> accepting AMQP connection <0.6841.6> (172.17.0.6:57188 -> 172.17.0.4:5672)
Oct  3 13:26:05 itasz0 journal: 2018-10-03 11:26:05.797 [info] <0.6841.6> connection <0.6841.6> (172.17.0.6:57188 -> 172.17.0.4:5672): user 'guest' authenticated and granted access to vhost 'awx'
Oct  3 13:26:05 itasz0 journal: [2018-10-03 11:26:05,794: DEBUG/Worker-5] Start from server, version: 0.9, properties: {u'information': u'Licensed under the MPL.  See http://www.rabbitmq.com/', u'product': u'RabbitMQ', u'copyright': u'Copyright (C) 2007-2018 Pivotal Software, Inc.', u'capabilities': {u'exchange_exchange_bindings': True, u'connection.blocked': True, u'authentication_failure_close': True, u'direct_reply_to': True, u'basic.nack': True, u'per_consumer_qos': True, u'consumer_priorities': True, u'consumer_cancel_notify': True, u'publisher_confirms': True}, u'cluster_name': u'rabbit@74fb39f734bc', u'platform': u'Erlang/OTP 20.1.7', u'version': u'3.7.4'}, mechanisms: [u'PLAIN', u'AMQPLAIN'], locales: [u'en_US']
Oct  3 13:26:05 itasz0 journal: [2018-10-03 11:26:05,798: DEBUG/Worker-5] Open OK!
Oct  3 13:26:05 itasz0 journal: [2018-10-03 11:26:05,799: DEBUG/Worker-5] using channel_id: 1
Oct  3 13:26:05 itasz0 journal: [2018-10-03 11:26:05,801: DEBUG/Worker-5] Channel open
Oct  3 13:26:11 itasz0 journal: [2018-10-03 11:26:11,030: INFO/Beat] Scheduler: Sending due task tower_scheduler (awx.main.tasks.awx_periodic_scheduler)
Oct  3 13:26:11 itasz0 journal: [2018-10-03 11:26:11,033: DEBUG/Beat] awx.main.tasks.awx_periodic_scheduler sent. id->8d5815d8-0f00-45d7-8162-06905d0d80f2
Oct  3 13:26:11 itasz0 journal: [2018-10-03 11:26:11,033: DEBUG/Beat] beat: Waking up in 4.37 seconds.
Oct  3 13:26:11 itasz0 journal: [2018-10-03 11:26:11,038: INFO/MainProcess] Received task: awx.main.tasks.awx_periodic_scheduler[8d5815d8-0f00-45d7-8162-06905d0d80f2] expires:[2018-10-03 11:26:31.031577+00:00]
Oct  3 13:26:11 itasz0 journal: [2018-10-03 11:26:11,039: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7fab20209320> (args:(u'awx.main.tasks.awx_periodic_scheduler', u'8d5815d8-0f00-45d7-8162-06905d0d80f2', [], {}, {u'utc': True, u'is_eager': False, u'chord': None, u'group': None, u'args': [], u'retries': 0, u'delivery_info': {u'priority': None, u'redelivered': False, u'routing_key': u'awx_private_queue', u'exchange': u'awx_private_queue'}, u'expires': u'2018-10-03T11:26:31.031577+00:00', u'hostname': 'celery@awx', u'task': u'awx.main.tasks.awx_periodic_scheduler', u'callbacks': None, u'correlation_id': u'8d5815d8-0f00-45d7-8162-06905d0d80f2', u'errbacks': None, u'timelimit': [None, None], u'taskset': None, u'kwargs': {}, u'eta': None, u'reply_to': u'1352fc63-6300-3aa9-99b8-aabe871f9a2b', u'id': u'8d5815d8-0f00-45d7-8162-06905d0d80f2', u'headers': {}}) kwargs:{})
Oct  3 13:26:11 itasz0 journal: [2018-10-03 11:26:11,044: DEBUG/MainProcess] Task accepted: awx.main.tasks.awx_periodic_scheduler[8d5815d8-0f00-45d7-8162-06905d0d80f2] pid:251
Oct  3 13:26:11 itasz0 journal: 2018-10-03 11:26:11,066 DEBUG    awx.main.tasks Last scheduler run was: 2018-10-03 11:25:41.063583+00:00
Oct  3 13:26:11 itasz0 journal: [2018-10-03 11:26:11,107: INFO/MainProcess] Task awx.main.tasks.awx_periodic_scheduler[8d5815d8-0f00-45d7-8162-06905d0d80f2] succeeded in 0.0664546310436s: None
Oct  3 13:26:15 itasz0 journal: 2018-10-03 11:26:15.295 [info] <0.6852.6> accepting AMQP connection <0.6852.6> (172.17.0.6:57196 -> 172.17.0.4:5672)
Oct  3 13:26:15 itasz0 journal: 2018-10-03 11:26:15.301 [info] <0.6852.6> connection <0.6852.6> (172.17.0.6:57196 -> 172.17.0.4:5672): user 'guest' authenticated and granted access to vhost 'awx'
Oct  3 13:26:15 itasz0 journal: [2018-10-03 11:26:15,314: DEBUG/MainProcess] pidbox received method ping() [reply_to:{u'routing_key': u'b1b71947-0897-3c6e-82df-b00dda7c02c4', u'exchange': u'reply.celery.pidbox'} ticket:ad406a29-bbd6-4e2a-b738-ae1692015962]
Oct  3 13:26:15 itasz0 journal: 2018-10-03 11:26:15.325 [info] <0.6852.6> closing AMQP connection <0.6852.6> (172.17.0.6:57196 -> 172.17.0.4:5672, vhost: 'awx', user: 'guest')
Oct  3 13:26:15 itasz0 journal: [2018-10-03 11:26:15,412: INFO/Beat] Scheduler: Sending due task task_manager (awx.main.scheduler.tasks.run_task_manager)
Oct  3 13:26:15 itasz0 journal: [2018-10-03 11:26:15,414: DEBUG/Beat] awx.main.scheduler.tasks.run_task_manager sent. id->3b093d84-400f-4e6e-8198-1203996f692c
Oct  3 13:26:15 itasz0 journal: [2018-10-03 11:26:15,415: DEBUG/Beat] beat: Waking up in 19.47 seconds.
Oct  3 13:26:15 itasz0 journal: [2018-10-03 11:26:15,418: INFO/MainProcess] Received task: awx.main.scheduler.tasks.run_task_manager[3b093d84-400f-4e6e-8198-1203996f692c] expires:[2018-10-03 11:26:35.413602+00:00]
Oct  3 13:26:15 itasz0 journal: [2018-10-03 11:26:15,418: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7fab20209320> (args:(u'awx.main.scheduler.tasks.run_task_manager', u'3b093d84-400f-4e6e-8198-1203996f692c', [], {}, {u'utc': True, u'is_eager': False, u'chord': None, u'group': None, u'args': [], u'retries': 0, u'delivery_info': {u'priority': 0, u'redelivered': False, u'routing_key': u'awx_private_queue', u'exchange': u'awx_private_queue'}, u'expires': u'2018-10-03T11:26:35.413602+00:00', u'hostname': 'celery@awx', u'task': u'awx.main.scheduler.tasks.run_task_manager', u'callbacks': None, u'correlation_id': u'3b093d84-400f-4e6e-8198-1203996f692c', u'errbacks': None, u'timelimit': [None, None], u'taskset': None, u'kwargs': {}, u'eta': None, u'reply_to': u'1352fc63-6300-3aa9-99b8-aabe871f9a2b', u'id': u'3b093d84-400f-4e6e-8198-1203996f692c', u'headers': {}}) kwargs:{})
Oct  3 13:26:15 itasz0 journal: [2018-10-03 11:26:15,423: DEBUG/MainProcess] Task accepted: awx.main.scheduler.tasks.run_task_manager[3b093d84-400f-4e6e-8198-1203996f692c] pid:253
Oct  3 13:26:15 itasz0 journal: 2018-10-03 11:26:15,442 DEBUG    awx.main.scheduler Running Tower task manager.
Oct  3 13:26:15 itasz0 journal: 2018-10-03 11:26:15,456 DEBUG    awx.main.scheduler Starting Scheduler
Oct  3 13:26:15 itasz0 journal: [2018-10-03 11:26:15,540: INFO/MainProcess] Task awx.main.scheduler.tasks.run_task_manager[3b093d84-400f-4e6e-8198-1203996f692c] succeeded in 0.119942312944s: None
Oct  3 13:26:34 itasz0 journal: [2018-10-03 11:26:34,898: INFO/Beat] Scheduler: Sending due task cluster_heartbeat (awx.main.tasks.cluster_node_heartbeat)
Oct  3 13:26:34 itasz0 journal: [2018-10-03 11:26:34,900: DEBUG/Beat] awx.main.tasks.cluster_node_heartbeat sent. id->27a07880-0be0-4b89-b6c7-9951ad91d93f
Oct  3 13:26:34 itasz0 journal: [2018-10-03 11:26:34,901: DEBUG/Beat] beat: Waking up now.
Oct  3 13:26:34 itasz0 journal: [2018-10-03 11:26:34,904: INFO/MainProcess] Received task: awx.main.tasks.cluster_node_heartbeat[27a07880-0be0-4b89-b6c7-9951ad91d93f] expires:[2018-10-03 11:27:24.899572+00:00]
Oct  3 13:26:34 itasz0 journal: [2018-10-03 11:26:34,905: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7fab20209320> (args:(u'awx.main.tasks.cluster_node_heartbeat', u'27a07880-0be0-4b89-b6c7-9951ad91d93f', [], {}, {u'utc': True, u'is_eager': False, u'chord': None, u'group': None, u'args': [], u'retries': 0, u'delivery_info': {u'priority': 0, u'redelivered': False, u'routing_key': u'awx', u'exchange': u'awx'}, u'expires': u'2018-10-03T11:27:24.899572+00:00', u'hostname': 'celery@awx', u'task': u'awx.main.tasks.cluster_node_heartbeat', u'callbacks': None, u'correlation_id': u'27a07880-0be0-4b89-b6c7-9951ad91d93f', u'errbacks': None, u'timelimit': [None, None], u'taskset': None, u'kwargs': {}, u'eta': None, u'reply_to': u'1352fc63-6300-3aa9-99b8-aabe871f9a2b', u'id': u'27a07880-0be0-4b89-b6c7-9951ad91d93f', u'headers': {}}) kwargs:{})
Oct  3 13:26:34 itasz0 journal: [2018-10-03 11:26:34,910: DEBUG/MainProcess] Task accepted: awx.main.tasks.cluster_node_heartbeat[27a07880-0be0-4b89-b6c7-9951ad91d93f] pid:252
Oct  3 13:26:34 itasz0 journal: 2018-10-03 11:26:34,928 DEBUG    awx.main.tasks Cluster node heartbeat task.
Oct  3 13:26:35 itasz0 journal: [2018-10-03 11:26:35,219: INFO/MainProcess] Task awx.main.tasks.cluster_node_heartbeat[27a07880-0be0-4b89-b6c7-9951ad91d93f] succeeded in 0.312109655992s: None
Oct  3 13:26:35 itasz0 journal: [2018-10-03 11:26:35,413: INFO/Beat] Scheduler: Sending due task task_manager (awx.main.scheduler.tasks.run_task_manager)
Oct  3 13:26:35 itasz0 journal: [2018-10-03 11:26:35,416: DEBUG/Beat] awx.main.scheduler.tasks.run_task_manager sent. id->d5191dcb-3cf3-4d65-bef5-2519d0f8fa88
Oct  3 13:26:35 itasz0 journal: [2018-10-03 11:26:35,418: DEBUG/Beat] beat: Waking up in 5.60 seconds.
Oct  3 13:26:35 itasz0 journal: [2018-10-03 11:26:35,419: INFO/MainProcess] Received task: awx.main.scheduler.tasks.run_task_manager[d5191dcb-3cf3-4d65-bef5-2519d0f8fa88] expires:[2018-10-03 11:26:55.414847+00:00]
Oct  3 13:26:35 itasz0 journal: [2018-10-03 11:26:35,420: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7fab20209320> (args:(u'awx.main.scheduler.tasks.run_task_manager', u'd5191dcb-3cf3-4d65-bef5-2519d0f8fa88', [], {}, {u'utc': True, u'is_eager': False, u'chord': None, u'group': None, u'args': [], u'retries': 0, u'delivery_info': {u'priority': 0, u'redelivered': False, u'routing_key': u'awx_private_queue', u'exchange': u'awx_private_queue'}, u'expires': u'2018-10-03T11:26:55.414847+00:00', u'hostname': 'celery@awx', u'task': u'awx.main.scheduler.tasks.run_task_manager', u'callbacks': None, u'correlation_id': u'd5191dcb-3cf3-4d65-bef5-2519d0f8fa88', u'errbacks': None, u'timelimit': [None, None], u'taskset': None, u'kwargs': {}, u'eta': None, u'reply_to': u'1352fc63-6300-3aa9-99b8-aabe871f9a2b', u'id': u'd5191dcb-3cf3-4d65-bef5-2519d0f8fa88', u'headers': {}}) kwargs:{})
Oct  3 13:26:35 itasz0 journal: [2018-10-03 11:26:35,422: DEBUG/MainProcess] Task accepted: awx.main.scheduler.tasks.run_task_manager[d5191dcb-3cf3-4d65-bef5-2519d0f8fa88] pid:251
Oct  3 13:26:35 itasz0 journal: 2018-10-03 11:26:35,440 DEBUG    awx.main.scheduler Running Tower task manager.
Oct  3 13:26:35 itasz0 journal: 2018-10-03 11:26:35,456 DEBUG    awx.main.scheduler Starting Scheduler
Oct  3 13:26:35 itasz0 journal: [2018-10-03 11:26:35,534: INFO/MainProcess] Task awx.main.scheduler.tasks.run_task_manager[d5191dcb-3cf3-4d65-bef5-2519d0f8fa88] succeeded in 0.113091918989s: None
Oct  3 13:26:41 itasz0 journal: [2018-10-03 11:26:41,031: INFO/Beat] Scheduler: Sending due task tower_scheduler (awx.main.tasks.awx_periodic_scheduler)
Oct  3 13:26:41 itasz0 journal: [2018-10-03 11:26:41,033: DEBUG/Beat] awx.main.tasks.awx_periodic_scheduler sent. id->7e56347e-d86c-4a73-9399-c34a336f9fb5
Oct  3 13:26:41 itasz0 journal: [2018-10-03 11:26:41,034: DEBUG/Beat] beat: Waking up in 14.37 seconds.
Oct  3 13:26:41 itasz0 journal: [2018-10-03 11:26:41,038: INFO/MainProcess] Received task: awx.main.tasks.awx_periodic_scheduler[7e56347e-d86c-4a73-9399-c34a336f9fb5] expires:[2018-10-03 11:27:01.032250+00:00]
Oct  3 13:26:41 itasz0 journal: [2018-10-03 11:26:41,039: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7fab20209320> (args:(u'awx.main.tasks.awx_periodic_scheduler', u'7e56347e-d86c-4a73-9399-c34a336f9fb5', [], {}, {u'utc': True, u'is_eager': False, u'chord': None, u'group': None, u'args': [], u'retries': 0, u'delivery_info': {u'priority': None, u'redelivered': False, u'routing_key': u'awx_private_queue', u'exchange': u'awx_private_queue'}, u'expires': u'2018-10-03T11:27:01.032250+00:00', u'hostname': 'celery@awx', u'task': u'awx.main.tasks.awx_periodic_scheduler', u'callbacks': None, u'correlation_id': u'7e56347e-d86c-4a73-9399-c34a336f9fb5', u'errbacks': None, u'timelimit': [None, None], u'taskset': None, u'kwargs': {}, u'eta': None, u'reply_to': u'1352fc63-6300-3aa9-99b8-aabe871f9a2b', u'id': u'7e56347e-d86c-4a73-9399-c34a336f9fb5', u'headers': {}}) kwargs:{})
Oct  3 13:26:41 itasz0 journal: [2018-10-03 11:26:41,042: DEBUG/MainProcess] Task accepted: awx.main.tasks.awx_periodic_scheduler[7e56347e-d86c-4a73-9399-c34a336f9fb5] pid:253
Oct  3 13:26:41 itasz0 journal: 2018-10-03 11:26:41,063 DEBUG    awx.main.tasks Last scheduler run was: 2018-10-03 11:26:11.063665+00:00
Oct  3 13:26:41 itasz0 journal: [2018-10-03 11:26:41,107: INFO/MainProcess] Task awx.main.tasks.awx_periodic_scheduler[7e56347e-d86c-4a73-9399-c34a336f9fb5] succeeded in 0.0667069129995s: None
Oct  3 13:26:55 itasz0 journal: [2018-10-03 11:26:55,420: INFO/Beat] Scheduler: Sending due task task_manager (awx.main.scheduler.tasks.run_task_manager)
Oct  3 13:26:55 itasz0 journal: [2018-10-03 11:26:55,423: DEBUG/Beat] awx.main.scheduler.tasks.run_task_manager sent. id->52f3e20d-d4e5-4cba-a5ae-a7dee8c72409
Oct  3 13:26:55 itasz0 journal: [2018-10-03 11:26:55,424: DEBUG/Beat] beat: Waking up in 15.60 seconds.
Oct  3 13:26:55 itasz0 journal: [2018-10-03 11:26:55,427: INFO/MainProcess] Received task: awx.main.scheduler.tasks.run_task_manager[52f3e20d-d4e5-4cba-a5ae-a7dee8c72409] expires:[2018-10-03 11:27:15.421860+00:00]
Oct  3 13:26:55 itasz0 journal: [2018-10-03 11:26:55,427: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7fab20209320> (args:(u'awx.main.scheduler.tasks.run_task_manager', u'52f3e20d-d4e5-4cba-a5ae-a7dee8c72409', [], {}, {u'utc': True, u'is_eager': False, u'chord': None, u'group': None, u'args': [], u'retries': 0, u'delivery_info': {u'priority': 0, u'redelivered': False, u'routing_key': u'awx_private_queue', u'exchange': u'awx_private_queue'}, u'expires': u'2018-10-03T11:27:15.421860+00:00', u'hostname': 'celery@awx', u'task': u'awx.main.scheduler.tasks.run_task_manager', u'callbacks': None, u'correlation_id': u'52f3e20d-d4e5-4cba-a5ae-a7dee8c72409', u'errbacks': None, u'timelimit': [None, None], u'taskset': None, u'kwargs': {}, u'eta': None, u'reply_to': u'1352fc63-6300-3aa9-99b8-aabe871f9a2b', u'id': u'52f3e20d-d4e5-4cba-a5ae-a7dee8c72409', u'headers': {}}) kwargs:{})
Oct  3 13:26:55 itasz0 journal: [2018-10-03 11:26:55,433: DEBUG/MainProcess] Task accepted: awx.main.scheduler.tasks.run_task_manager[52f3e20d-d4e5-4cba-a5ae-a7dee8c72409] pid:252
Oct  3 13:26:55 itasz0 journal: 2018-10-03 11:26:55,454 DEBUG    awx.main.scheduler Running Tower task manager.
Oct  3 13:26:55 itasz0 journal: 2018-10-03 11:26:55,471 DEBUG    awx.main.scheduler Starting Scheduler
Oct  3 13:26:55 itasz0 journal: [2018-10-03 11:26:55,551: INFO/MainProcess] Task awx.main.scheduler.tasks.run_task_manager[52f3e20d-d4e5-4cba-a5ae-a7dee8c72409] succeeded in 0.121312379022s: None
Oct  3 13:27:01 itasz0 journal: RESULT 2
Oct  3 13:27:01 itasz0 journal: OKREADY
Oct  3 13:27:01 itasz0 journal: RESULT 2
Oct  3 13:27:01 itasz0 journal: OKREADY
Oct  3 13:27:11 itasz0 journal: [2018-10-03 11:27:11,032: INFO/Beat] Scheduler: Sending due task tower_scheduler (awx.main.tasks.awx_periodic_scheduler)
Oct  3 13:27:11 itasz0 journal: [2018-10-03 11:27:11,035: DEBUG/Beat] awx.main.tasks.awx_periodic_scheduler sent. id->a2ed4f9d-d42c-46df-834a-3e22a77373b8
Oct  3 13:27:11 itasz0 journal: [2018-10-03 11:27:11,035: DEBUG/Beat] beat: Waking up in 4.38 seconds.
Oct  3 13:27:11 itasz0 journal: [2018-10-03 11:27:11,039: INFO/MainProcess] Received task: awx.main.tasks.awx_periodic_scheduler[a2ed4f9d-d42c-46df-834a-3e22a77373b8] expires:[2018-10-03 11:27:31.033692+00:00]
Oct  3 13:27:11 itasz0 journal: [2018-10-03 11:27:11,040: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7fab20209320> (args:(u'awx.main.tasks.awx_periodic_scheduler', u'a2ed4f9d-d42c-46df-834a-3e22a77373b8', [], {}, {u'utc': True, u'is_eager': False, u'chord': None, u'group': None, u'args': [], u'retries': 0, u'delivery_info': {u'priority': None, u'redelivered': False, u'routing_key': u'awx_private_queue', u'exchange': u'awx_private_queue'}, u'expires': u'2018-10-03T11:27:31.033692+00:00', u'hostname': 'celery@awx', u'task': u'awx.main.tasks.awx_periodic_scheduler', u'callbacks': None, u'correlation_id': u'a2ed4f9d-d42c-46df-834a-3e22a77373b8', u'errbacks': None, u'timelimit': [None, None], u'taskset': None, u'kwargs': {}, u'eta': None, u'reply_to': u'1352fc63-6300-3aa9-99b8-aabe871f9a2b', u'id': u'a2ed4f9d-d42c-46df-834a-3e22a77373b8', u'headers': {}}) kwargs:{})
Oct  3 13:27:11 itasz0 journal: [2018-10-03 11:27:11,042: DEBUG/MainProcess] Task accepted: awx.main.tasks.awx_periodic_scheduler[a2ed4f9d-d42c-46df-834a-3e22a77373b8] pid:251
Oct  3 13:27:11 itasz0 journal: 2018-10-03 11:27:11,065 DEBUG    awx.main.tasks Last scheduler run was: 2018-10-03 11:26:41.060710+00:00
Oct  3 13:27:11 itasz0 journal: [2018-10-03 11:27:11,113: INFO/MainProcess] Task awx.main.tasks.awx_periodic_scheduler[a2ed4f9d-d42c-46df-834a-3e22a77373b8] succeeded in 0.0712597600068s: None
Oct  3 13:27:15 itasz0 journal: 2018-10-03 11:27:15.403 [info] <0.6874.6> accepting AMQP connection <0.6874.6> (172.17.0.6:57222 -> 172.17.0.4:5672)
Oct  3 13:27:15 itasz0 journal: 2018-10-03 11:27:15.416 [info] <0.6874.6> connection <0.6874.6> (172.17.0.6:57222 -> 172.17.0.4:5672): user 'guest' authenticated and granted access to vhost 'awx'
Oct  3 13:27:15 itasz0 journal: [2018-10-03 11:27:15,421: INFO/Beat] Scheduler: Sending due task task_manager (awx.main.scheduler.tasks.run_task_manager)
Oct  3 13:27:15 itasz0 journal: [2018-10-03 11:27:15,424: DEBUG/Beat] awx.main.scheduler.tasks.run_task_manager sent. id->c894ec6c-9ccf-4165-b8c5-fa59f9c4dc88
Oct  3 13:27:15 itasz0 journal: [2018-10-03 11:27:15,425: DEBUG/Beat] beat: Waking up in 19.47 seconds.
Oct  3 13:27:15 itasz0 journal: [2018-10-03 11:27:15,429: INFO/MainProcess] Received task: awx.main.scheduler.tasks.run_task_manager[c894ec6c-9ccf-4165-b8c5-fa59f9c4dc88] expires:[2018-10-03 11:27:35.423086+00:00]
Oct  3 13:27:15 itasz0 journal: [2018-10-03 11:27:15,430: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7fab20209320> (args:(u'awx.main.scheduler.tasks.run_task_manager', u'c894ec6c-9ccf-4165-b8c5-fa59f9c4dc88', [], {}, {u'utc': True, u'is_eager': False, u'chord': None, u'group': None, u'args': [], u'retries': 0, u'delivery_info': {u'priority': 0, u'redelivered': False, u'routing_key': u'awx_private_queue', u'exchange': u'awx_private_queue'}, u'expires': u'2018-10-03T11:27:35.423086+00:00', u'hostname': 'celery@awx', u'task': u'awx.main.scheduler.tasks.run_task_manager', u'callbacks': None, u'correlation_id': u'c894ec6c-9ccf-4165-b8c5-fa59f9c4dc88', u'errbacks': None, u'timelimit': [None, None], u'taskset': None, u'kwargs': {}, u'eta': None, u'reply_to': u'1352fc63-6300-3aa9-99b8-aabe871f9a2b', u'id': u'c894ec6c-9ccf-4165-b8c5-fa59f9c4dc88', u'headers': {}}) kwargs:{})
Oct  3 13:27:15 itasz0 journal: [2018-10-03 11:27:15,437: DEBUG/MainProcess] Task accepted: awx.main.scheduler.tasks.run_task_manager[c894ec6c-9ccf-4165-b8c5-fa59f9c4dc88] pid:253
Oct  3 13:27:15 itasz0 journal: [2018-10-03 11:27:15,445: DEBUG/MainProcess] pidbox received method ping() [reply_to:{u'routing_key': u'b1b71947-0897-3c6e-82df-b00dda7c02c4', u'exchange': u'reply.celery.pidbox'} ticket:e46dfad9-872b-45a0-9c8a-b0f1796855b0]
Oct  3 13:27:15 itasz0 journal: 2018-10-03 11:27:15.461 [info] <0.6874.6> closing AMQP connection <0.6874.6> (172.17.0.6:57222 -> 172.17.0.4:5672, vhost: 'awx', user: 'guest')
Oct  3 13:27:15 itasz0 journal: 2018-10-03 11:27:15,463 DEBUG    awx.main.scheduler Running Tower task manager.
Oct  3 13:27:15 itasz0 journal: 2018-10-03 11:27:15,480 DEBUG    awx.main.scheduler Starting Scheduler
Oct  3 13:27:15 itasz0 journal: [2018-10-03 11:27:15,562: INFO/MainProcess] Task awx.main.scheduler.tasks.run_task_manager[c894ec6c-9ccf-4165-b8c5-fa59f9c4dc88] succeeded in 0.130253429001s: None
Oct  3 13:27:34 itasz0 journal: [2018-10-03 11:27:34,899: INFO/Beat] Scheduler: Sending due task cluster_heartbeat (awx.main.tasks.cluster_node_heartbeat)
Oct  3 13:27:34 itasz0 journal: [2018-10-03 11:27:34,901: DEBUG/Beat] awx.main.tasks.cluster_node_heartbeat sent. id->c0c52d38-261a-4864-a7d9-8c0852f72435
Oct  3 13:27:34 itasz0 journal: [2018-10-03 11:27:34,902: DEBUG/Beat] beat: Waking up now.
Oct  3 13:27:34 itasz0 journal: [2018-10-03 11:27:34,906: INFO/MainProcess] Received task: awx.main.tasks.cluster_node_heartbeat[c0c52d38-261a-4864-a7d9-8c0852f72435] expires:[2018-10-03 11:28:24.900333+00:00]
Oct  3 13:27:34 itasz0 journal: [2018-10-03 11:27:34,907: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7fab20209320> (args:(u'awx.main.tasks.cluster_node_heartbeat', u'c0c52d38-261a-4864-a7d9-8c0852f72435', [], {}, {u'utc': True, u'is_eager': False, u'chord': None, u'group': None, u'args': [], u'retries': 0, u'delivery_info': {u'priority': 0, u'redelivered': False, u'routing_key': u'awx', u'exchange': u'awx'}, u'expires': u'2018-10-03T11:28:24.900333+00:00', u'hostname': 'celery@awx', u'task': u'awx.main.tasks.cluster_node_heartbeat', u'callbacks': None, u'correlation_id': u'c0c52d38-261a-4864-a7d9-8c0852f72435', u'errbacks': None, u'timelimit': [None, None], u'taskset': None, u'kwargs': {}, u'eta': None, u'reply_to': u'1352fc63-6300-3aa9-99b8-aabe871f9a2b', u'id': u'c0c52d38-261a-4864-a7d9-8c0852f72435', u'headers': {}}) kwargs:{})
Oct  3 13:27:34 itasz0 journal: [2018-10-03 11:27:34,909: DEBUG/MainProcess] Task accepted: awx.main.tasks.cluster_node_heartbeat[c0c52d38-261a-4864-a7d9-8c0852f72435] pid:252
Oct  3 13:27:34 itasz0 journal: 2018-10-03 11:27:34,927 DEBUG    awx.main.tasks Cluster node heartbeat task.
Oct  3 13:27:34 itasz0 journal: [2018-10-03 11:27:34,959: INFO/MainProcess] Task awx.main.tasks.cluster_node_heartbeat[c0c52d38-261a-4864-a7d9-8c0852f72435] succeeded in 0.0506047030212s: None
Oct  3 13:27:35 itasz0 journal: [2018-10-03 11:27:35,422: INFO/Beat] Scheduler: Sending due task task_manager (awx.main.scheduler.tasks.run_task_manager)
Oct  3 13:27:35 itasz0 journal: [2018-10-03 11:27:35,425: DEBUG/Beat] awx.main.scheduler.tasks.run_task_manager sent. id->8bc40d2e-b336-45f3-929e-3a43a99d01ec
Oct  3 13:27:35 itasz0 journal: [2018-10-03 11:27:35,426: DEBUG/Beat] beat: Waking up in 5.60 seconds.
Oct  3 13:27:35 itasz0 journal: [2018-10-03 11:27:35,428: INFO/MainProcess] Received task: awx.main.scheduler.tasks.run_task_manager[8bc40d2e-b336-45f3-929e-3a43a99d01ec] expires:[2018-10-03 11:27:55.423724+00:00]
Oct  3 13:27:35 itasz0 journal: [2018-10-03 11:27:35,428: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7fab20209320> (args:(u'awx.main.scheduler.tasks.run_task_manager', u'8bc40d2e-b336-45f3-929e-3a43a99d01ec', [], {}, {u'utc': True, u'is_eager': False, u'chord': None, u'group': None, u'args': [], u'retries': 0, u'delivery_info': {u'priority': 0, u'redelivered': False, u'routing_key': u'awx_private_queue', u'exchange': u'awx_private_queue'}, u'expires': u'2018-10-03T11:27:55.423724+00:00', u'hostname': 'celery@awx', u'task': u'awx.main.scheduler.tasks.run_task_manager', u'callbacks': None, u'correlation_id': u'8bc40d2e-b336-45f3-929e-3a43a99d01ec', u'errbacks': None, u'timelimit': [None, None], u'taskset': None, u'kwargs': {}, u'eta': None, u'reply_to': u'1352fc63-6300-3aa9-99b8-aabe871f9a2b', u'id': u'8bc40d2e-b336-45f3-929e-3a43a99d01ec', u'headers': {}}) kwargs:{})
Oct  3 13:27:35 itasz0 journal: [2018-10-03 11:27:35,433: DEBUG/MainProcess] Task accepted: awx.main.scheduler.tasks.run_task_manager[8bc40d2e-b336-45f3-929e-3a43a99d01ec] pid:251
Oct  3 13:27:35 itasz0 journal: 2018-10-03 11:27:35,452 DEBUG    awx.main.scheduler Running Tower task manager.
Oct  3 13:27:35 itasz0 journal: 2018-10-03 11:27:35,468 DEBUG    awx.main.scheduler Starting Scheduler
Oct  3 13:27:35 itasz0 journal: [2018-10-03 11:27:35,545: INFO/MainProcess] Task awx.main.scheduler.tasks.run_task_manager[8bc40d2e-b336-45f3-929e-3a43a99d01ec] succeeded in 0.114750840992s: None
Oct  3 13:27:41 itasz0 journal: [2018-10-03 11:27:41,033: INFO/Beat] Scheduler: Sending due task tower_scheduler (awx.main.tasks.awx_periodic_scheduler)
Oct  3 13:27:41 itasz0 journal: [2018-10-03 11:27:41,035: DEBUG/Beat] awx.main.tasks.awx_periodic_scheduler sent. id->818626ea-8999-4c59-a7cb-d33be2de1466
Oct  3 13:27:41 itasz0 journal: [2018-10-03 11:27:41,036: DEBUG/Beat] beat: Waking up in 14.38 seconds.
Oct  3 13:27:41 itasz0 journal: [2018-10-03 11:27:41,039: INFO/MainProcess] Received task: awx.main.tasks.awx_periodic_scheduler[818626ea-8999-4c59-a7cb-d33be2de1466] expires:[2018-10-03 11:28:01.034520+00:00]
Oct  3 13:27:41 itasz0 journal: [2018-10-03 11:27:41,039: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7fab20209320> (args:(u'awx.main.tasks.awx_periodic_scheduler', u'818626ea-8999-4c59-a7cb-d33be2de1466', [], {}, {u'utc': True, u'is_eager': False, u'chord': None, u'group': None, u'args': [], u'retries': 0, u'delivery_info': {u'priority': None, u'redelivered': False, u'routing_key': u'awx_private_queue', u'exchange': u'awx_private_queue'}, u'expires': u'2018-10-03T11:28:01.034520+00:00', u'hostname': 'celery@awx', u'task': u'awx.main.tasks.awx_periodic_scheduler', u'callbacks': None, u'correlation_id': u'818626ea-8999-4c59-a7cb-d33be2de1466', u'errbacks': None, u'timelimit': [None, None], u'taskset': None, u'kwargs': {}, u'eta': None, u'reply_to': u'1352fc63-6300-3aa9-99b8-aabe871f9a2b', u'id': u'818626ea-8999-4c59-a7cb-d33be2de1466', u'headers': {}}) kwargs:{})
Oct  3 13:27:41 itasz0 journal: [2018-10-03 11:27:41,044: DEBUG/MainProcess] Task accepted: awx.main.tasks.awx_periodic_scheduler[818626ea-8999-4c59-a7cb-d33be2de1466] pid:253
Oct  3 13:27:41 itasz0 journal: 2018-10-03 11:27:41,064 DEBUG    awx.main.tasks Last scheduler run was: 2018-10-03 11:27:11.062971+00:00
Oct  3 13:27:41 itasz0 journal: [2018-10-03 11:27:41,109: INFO/MainProcess] Task awx.main.tasks.awx_periodic_scheduler[818626ea-8999-4c59-a7cb-d33be2de1466] succeeded in 0.0681440309854s: None
Oct  3 13:27:51 itasz0 journal: 2018/10/03 11:27:51 [error] 138#0: *777 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 172.17.0.7, server: _, request: "POST /api/v2/job_templates/16/callback/ HTTP/1.1", upstream: "uwsgi://127.0.0.1:8050", host: "itasz0.intra.infotn.it"
**Oct  3 13:27:51 itasz0 journal: 172.20.0.84 - - [03/Oct/2018:11:27:51 +0000] "POST /api/v2/job_templates/16/callback/ HTTP/1.1" 504 183 "-" "curl/7.29.0"
Oct  3 13:27:51 itasz0 journal: 172.17.0.7 - - [03/Oct/2018:11:27:51 +0000] "POST /api/v2/job_templates/16/callback/ HTTP/1.1" 504 183 "-" "curl/7.29.0" "172.20.0.84"
Oct  3 13:27:52 itasz0 journal: Wed Oct  3 11:27:52 2018 - *** HARAKIRI ON WORKER 3 (pid: 135, try: 1) ***
Oct  3 13:27:52 itasz0 journal: Wed Oct  3 11:27:52 2018 - HARAKIRI !!! worker 3 status !!!
Oct  3 13:27:52 itasz0 journal: Wed Oct  3 11:27:52 2018 - HARAKIRI [core 0] 172.17.0.7 - POST /api/v2/job_templates/16/callback/ since 1538565951**
Oct  3 13:27:52 itasz0 journal: Wed Oct  3 11:27:52 2018 - HARAKIRI !!! end of worker 3 status !!!
Oct  3 13:27:52 itasz0 journal: 2018-10-03 11:27:52.757 [warning] <0.23326.4> closing AMQP connection <0.23326.4> (172.17.0.5:56654 -> 172.17.0.4:5672, vhost: 'awx', user: 'guest'):
Oct  3 13:27:52 itasz0 journal: client unexpectedly closed TCP connection
Oct  3 13:27:52 itasz0 journal: 2018-10-03 11:27:52.758 [warning] <0.23336.4> closing AMQP connection <0.23336.4> (172.17.0.5:56656 -> 172.17.0.4:5672, vhost: 'awx', user: 'guest'):
Oct  3 13:27:52 itasz0 journal: client unexpectedly closed TCP connection
Oct  3 13:27:53 itasz0 journal: DAMN ! worker 3 (pid: 135) died, killed by signal 9 :( trying respawn ...
Oct  3 13:27:53 itasz0 journal: Respawned uWSGI worker 3 (new pid: 242)
Oct  3 13:27:55 itasz0 journal: [2018-10-03 11:27:55,424: DEBUG/Beat] beat: Synchronizing schedule...
Oct  3 13:27:55 itasz0 journal: [2018-10-03 11:27:55,431: INFO/Beat] Scheduler: Sending due task task_manager (awx.main.scheduler.tasks.run_task_manager)
Oct  3 13:27:55 itasz0 journal: [2018-10-03 11:27:55,433: DEBUG/Beat] awx.main.scheduler.tasks.run_task_manager sent. id->14ea7a51-d7e0-4325-8631-6c082dabaae8
Oct  3 13:27:55 itasz0 journal: [2018-10-03 11:27:55,434: DEBUG/Beat] beat: Waking up in 15.59 seconds.
Oct  3 13:27:55 itasz0 journal: [2018-10-03 11:27:55,437: INFO/MainProcess] Received task: awx.main.scheduler.tasks.run_task_manager[14ea7a51-d7e0-4325-8631-6c082dabaae8] expires:[2018-10-03 11:28:15.432608+00:00]
Oct  3 13:27:55 itasz0 journal: [2018-10-03 11:27:55,438: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7fab20209320> (args:(u'awx.main.scheduler.tasks.run_task_manager', u'14ea7a51-d7e0-4325-8631-6c082dabaae8', [], {}, {u'utc': True, u'is_eager': False, u'chord': None, u'group': None, u'args': [], u'retries': 0, u'delivery_info': {u'priority': 0, u'redelivered': False, u'routing_key': u'awx_private_queue', u'exchange': u'awx_private_queue'}, u'expires': u'2018-10-03T11:28:15.432608+00:00', u'hostname': 'celery@awx', u'task': u'awx.main.scheduler.tasks.run_task_manager', u'callbacks': None, u'correlation_id': u'14ea7a51-d7e0-4325-8631-6c082dabaae8', u'errbacks': None, u'timelimit': [None, None], u'taskset': None, u'kwargs': {}, u'eta': None, u'reply_to': u'1352fc63-6300-3aa9-99b8-aabe871f9a2b', u'id': u'14ea7a51-d7e0-4325-8631-6c082dabaae8', u'headers': {}}) kwargs:{})
Oct  3 13:27:55 itasz0 journal: [2018-10-03 11:27:55,443: DEBUG/MainProcess] Task accepted: awx.main.scheduler.tasks.run_task_manager[14ea7a51-d7e0-4325-8631-6c082dabaae8] pid:252
Oct  3 13:27:55 itasz0 journal: 2018-10-03 11:27:55,461 DEBUG    awx.main.scheduler Running Tower task manager.
Oct  3 13:27:55 itasz0 journal: 2018-10-03 11:27:55,712 DEBUG    awx.main.scheduler Starting Scheduler
Oct  3 13:27:55 itasz0 journal: [2018-10-03 11:27:55,753: INFO/MainProcess] Task awx.main.scheduler.tasks.run_task_manager[14ea7a51-d7e0-4325-8631-6c082dabaae8] succeeded in 0.313178937999s: None
Oct  3 13:27:57 itasz0 journal: WSGI app 0 (mountpoint='') ready in 4 seconds on interpreter 0x1bbfc30 pid: 242 (default app)
Oct  3 13:28:01 itasz0 journal: RESULT 2
Oct  3 13:28:01 itasz0 journal: OKREADY
Oct  3 13:28:01 itasz0 journal: RESULT 2
Oct  3 13:28:01 itasz0 journal: OKREADY
Oct  3 13:28:11 itasz0 journal: [2018-10-03 11:28:11,034: INFO/Beat] Scheduler: Sending due task tower_scheduler (awx.main.tasks.awx_periodic_scheduler)
Oct  3 13:28:11 itasz0 journal: [2018-10-03 11:28:11,036: DEBUG/Beat] awx.main.tasks.awx_periodic_scheduler sent. id->c4b8f340-9e56-4c60-8e69-07b32c666646
Oct  3 13:28:11 itasz0 journal: [2018-10-03 11:28:11,037: DEBUG/Beat] beat: Waking up in 4.38 seconds.
Oct  3 13:28:11 itasz0 journal: [2018-10-03 11:28:11,041: INFO/MainProcess] Received task: awx.main.tasks.awx_periodic_scheduler[c4b8f340-9e56-4c60-8e69-07b32c666646] expires:[2018-10-03 11:28:31.035410+00:00]
Oct  3 13:28:11 itasz0 journal: [2018-10-03 11:28:11,042: DEBUG/MainProcess] TaskPool: Apply <function _fast_trace_task at 0x7fab20209320> (args:(u'awx.main.tasks.awx_periodic_scheduler', u'c4b8f340-9e56-4c60-8e69-07b32c666646', [], {}, {u'utc': True, u'is_eager': False, u'chord': None, u'group': None, u'args': [], u'retries': 0, u'delivery_info': {u'priority': None, u'redelivered': False, u'routing_key': u'awx_private_queue', u'exchange': u'awx_private_queue'}, u'expires': u'2018-10-03T11:28:31.035410+00:00', u'hostname': 'celery@awx', u'task': u'awx.main.tasks.awx_periodic_scheduler', u'callbacks': None, u'correlation_id': u'c4b8f340-9e56-4c60-8e69-07b32c666646', u'errbacks': None, u'timelimit': [None, None], u'taskset': None, u'kwargs': {}, u'eta': None, u'reply_to': u'1352fc63-6300-3aa9-99b8-aabe871f9a2b', u'id': u'c4b8f340-9e56-4c60-8e69-07b32c666646', u'headers': {}}) kwargs:{})
Oct  3 13:28:11 itasz0 journal: [2018-10-03 11:28:11,046: DEBUG/MainProcess] Task accepted: awx.main.tasks.awx_periodic_scheduler[c4b8f340-9e56-4c60-8e69-07b32c666646] pid:251
Oct  3 13:28:11 itasz0 journal: 2018-10-03 11:28:11,067 DEBUG    awx.main.tasks Last scheduler run was: 2018-10-03 11:27:41.061800+00:00
Oct  3 13:28:11 itasz0 journal: [2018-10-03 11:28:11,114: INFO/MainProcess] Task awx.main.tasks.awx_periodic_scheduler[c4b8f340-9e56-4c60-8e69-07b32c666646] succeeded in 0.0700874640024s: None

user: asoraruf
issue_2357: state: open
title: Badge to show if project update pulled new revision or not
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
There is no way to tell at a glance if a project update actually detected any change in the repo that it syncs. It would be nice to show this information.

##### ADDITIONAL INFORMATION

The API currently doesn't deliver this info on the project update level. Even the playbook output doesn't give this information.

Put in terms of git, my question for the API is: "when you ran the update, did you find any new commits?"

suggested icon: 🍞 

user: AlanCoding
issue_2331: state: open
title: Add git credential as extra credentials to job template
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Help request

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI

##### SUMMARY
<!-- Briefly describe the problem. -->
It`s posible to add git credential as extra credentials to job template???
Because I need to clone project in my tasks and I have error: "Could not read from remote repository.\n\nPlease make sure you have the correct access rights\nand the repository exists"
And I do not understand how to solve this

##### ENVIRONMENT
* AWX version: 1.0.8.
* AWX install method: docker on linux,
* Ansible version:  2.6.4 
* Operating System Linux:
* Web Browser Firefox/Chrome:



user: antonvolokha
issue_2318: state: open
title: Inventory sync job status indicator in details tab for triggering job
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY
When I launch a job that triggers a Project sync, the lefthand details tab for my new job includes a status indicator for my project sync job. It would be nice to have a similar job status indicator for Inventory syncs triggered in the same way.

user: alexander-bauer
issue_2301: state: open
title: User auth field not documented in OPTIONS
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - API

##### SUMMARY
The user serializer provides the `auth` field but it is not present in OPTIONS

##### ENVIRONMENT
* AWX version: 1.0.8
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  X.Y.Z
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

GET `/api/v2/users/`

OPTIONS `/api/v2/users/`

##### EXPECTED RESULTS

Fields match, GET vs. OPTIONS

##### ACTUAL RESULTS

`auth` field returned but not in options.

Also, the field is not present in the access_list endpoints, and I would argue that it should be.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: AlanCoding
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_2299: state: open
title: UI: use vars_prompt for Template surveys
body: ##### ISSUE TYPE
 - Feature Idea

Great feature which will help not to worry about Survey creation/synchronization for Templates.

##### COMPONENT NAME
 - UI

##### SUMMARY
Add a checkbox option for templates which will allow to reuse vars_prompt from linked playbooks source.
Implementation: parsing playbook YAML on launch.

user: sumkincpp
issue_2295: state: open
title: RFE:  Move *_enabled_{var,value} to per-source settings
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
- Dynamic Inventory

##### SUMMARY
As a writer of a custom dynamic inventory script, I want to be able to decide which host will be activated/deactivated in Tower so that this Host status can be based on information from my inventory source
user: msilmser
issue_2294: state: open
title: AWX imports hostname with spaces and transfers them to the LIMIT-field.
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME

 - UI

##### SUMMARY
I imported some virtual machines from a cloudforms inventory. Import works as expected. Now I choose a node from "Hosts" view and click "Run commands". The node name is now displayed in the "LIMIT" text field. After that I choose credentials and a module in order to launch the command. Command is launched and returns an error.
>"[WARNING]:Could not match supplied host pattern, ignoring: LINUXSERVER
 [WARNING]: Could not match supplied host pattern, ignoring: -
 [WARNING]: Could not match supplied host pattern, ignoring: INFO
 [WARNING]: No hosts matched, nothing to do
"

What actually happened? I can answer that: awx transferred a hostname
with spaces to the LIMIT-field. ansible engine interpets every space as
an additional filter pattern. turns out that spaces in hostname are 
forbidden. So awx definitely should avoid transferring a hostname with spaces to the LIMIT-field.

##### ENVIRONMENT
* AWX version: 1.0.7.2
* AWX install method: docker on linux
* Ansible version:  2.6.2
* Operating System: RHEL
* Web Browser: Chrome

##### STEPS TO REPRODUCE

Choose a host with spaces in hostname. Launch a command via "run command" so that the hostname is
transferred to the LIMIT-field.

##### EXPECTED RESULTS

If I launch a command for a selected host and awx transfers this hostname to the LIMIT-field then I expect the Ansible job to match the host pattern and run the command successfully.

##### ACTUAL RESULTS

awx transferred a hostname with spaces to the LIMIT-field. ansible engine interpets every space as an additional filter pattern. So LIMIT does not match any host and commands are not executed successfully.  Turns out that spaces in hostname are  forbidden.


##### ADDITIONAL INFORMATION

There is this issue filed at ansible:
> https://github.com/ansible/ansible/issues/14513

Quote:
> For the record, the use of spaces in host names is forbidden. 

##### COMMENT

I filed this report for awx because spaces in hostnames at cloudforms are not forbidden. Question is, whether spaces should already be avoided when  importing hosts from cloudforms to follow the rule "no spaces in hostnames" or are you going to change the way the hostname is transferred to the limit-field?


user: phospi
issue_2285: state: open
title: AWX Successful Jobs Sending "Failed" notification job templates - false postive
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
When executing a job I've noticed that (sometimes) it will state that the job failed by executing "notification" email stating failure. However, if you login and pull up the job activity it states the job was successful, but shows the following error "Task was marked as running in Tower but was not present in the job queue, so it has been marked as failed."

##### ENVIRONMENT
* AWX version: 1.0.7.4
* AWX install method: Kubernetes
* Ansible version:  2.6.4
* Operating System: Kubernetes / Docker
* Web Browser: Firefox

##### STEPS TO REPRODUCE

This doesn't seem to always occur. However occasionally cause false positive email going to users stating job "failed" when it was successful.

##### EXPECTED RESULTS

Successful template being sent to users not failed

##### ACTUAL RESULTS

AWX sending job notification for job failure instead of successful. However states  "Task was marked as running in Tower but was not present in the job queue, so it has been marked as failed" when accessing the job id in the UI or API.

##### ADDITIONAL INFORMATION

3 PODs Running
![screen shot 2018-09-19 at 11 05 19 am](https://user-images.githubusercontent.com/25063770/45774078-f1598d80-bc00-11e8-982b-5ad9453507bf.png)

Failed Email Notification Template Sent to User
<img width="303" alt="screen shot 2018-09-19 at 11 42 25 am" src="https://user-images.githubusercontent.com/25063770/45774170-2665e000-bc01-11e8-8590-56acdc27f234.png">

Job Successful but failure notice below Successful!
![screen shot 2018-09-19 at 11 43 33 am](https://user-images.githubusercontent.com/25063770/45774217-45647200-bc01-11e8-961c-17d5597f653a.png)


user: mneumarkidg
issue_2275: state: open
title: Add option to edit job template settings from workflow editor
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY
The addition of an option to adjust job template parameters from the workflow editor would facilitate more direct adjustment of job template details in the context of creating or developing a workflow.

user: ghost
issue_2271: state: open
title: Display YAML comments in prompt on launch job template extra vars
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY
Display YAML comments stored with the job template extra_vars in the prompt on launch extra_vars dialog.  This would allow some documentation of the vars in the YAML.

##### ADDITIONAL INFORMATION

Tower displayed the complete YAML, as of version 3.2.6

user: ghost
issue_2253: state: open
title: Feature: Allow ad-hoc commands in workflows
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
* Allow ad-hoc commands in workflows

user: chrismeyersfsu
issue_2242: state: open
title: Option in workflow to rerun a job with only failed hosts
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI

##### SUMMARY
We can now rerun a job with either all or just failed hosts. It would be really great to use that in the workflow composer. E.g. If a job fails as part of a workflow, rerun the job on failed hosts only.

Currently you can run a new job from the same template if it fails, but it will execute against every host in the template. 

In ansible terms, I think of this as limiting to the .retry file.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: LukeDRussell
issue_2240: state: open
title: awx uses wrong host from group (host ordering is inconsistent)
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - UI

##### SUMMARY
AWX changes sequence of hosts in group (inventory sourced from project) so when I run job template it runs on wrong host.

##### ENVIRONMENT
* AWX version: 1.0.7
* AWX install method: docker on linux
* Ansible version:  2.0.0.2
* Operating System: ubuntu 16.04

##### STEPS TO REPRODUCE
1. Add inventory from source - sourced from project.
2. Add job template with playbook which should run on specific host from group (e.g. node01,node02,node03 are in docker group and in your playbook use docker[0] as host,which should point to node01). 

##### EXPECTED RESULTS

Playbook runs on node01.

##### ACTUAL RESULTS

Playbook runs on node03.

Project structure:
![image](https://user-images.githubusercontent.com/7538311/45418730-7edb3180-b685-11e8-8161-b4add00634e6.png)




user: agatahochor
issue_2220: state: open
title: Delete/Move branch of workflow
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->

If we have a huge workflow with multiple branches. Currently, there is no way to move or delete 1 complete branch in one shot. We have to remove all the job nodes 1 by 1.  
It is very time-consuming & error prone process.

There should be an option to remove any branch from START in one shot. 
Also we should be able to move any branch from anywhere and connect with any other node in any branch.

user: hiyokotaisa
issue_2214: state: open
title: Readonly checkbox for survey items
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY
Next to REQUIRED checkbox, having a READ-ONLY checkbox would be useful as well.
I understand it could be placed in Extra Variables, but since the Survey is the first thing that pops up on launch, I would like to include it as part of the survey, but as a read-only field, so they are aware of it.

user: sonjz
issue_2209: state: open
title: LDAP Authentication test button
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI


##### SUMMARY
When Setting up LDAP Authentication it might be useful to test correct settings or not e.g. test button which checks connection with LDAP server and login, pass.



user: DrPreobrazhensky
labels: component:authentication: For issues related to authentication
issue_2192: state: open
title: Injectors for Red Hat Satellite 6 within playbook job runs
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI
 - Installer

##### SUMMARY
<!-- Briefly describe the problem or desired enhancement. -->
It would be useful to be able to manage Satellite via playbook tasks. AWX currently does not include injectors for the Satellite 6 credential, meaning they are not usable in a playbook. 

When creating a custom credential, these are the injectors used:
```yaml
injectors:
      extra_vars:
        satellite_username: "{{ '{{ \"{{username}}\" }}'}}"
        satellite_password: "{{ '{{ \"{{password}}\" }}'}}"
        satellite_host: "{{ '{{ \"{{host}}\" }}'}}"
```


##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->



user: drewburr
issue_2166: state: open
title: Project: Clone Git repo over HTTPS fails on Submodules using SSH
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
- Project

##### SUMMARY
I've got a project under Git that is clonable with HTTPS only, and which references git Submodules using an SSH Url (on Github, not needing any credentials)
And the clone operation fails when trying to init/update submodules.

##### ENVIRONMENT
* AWX 1.0.6.41
* AWX install method: docker on linux
* Ansible version:  2.6.1
* Operating System: Ubuntu 16.04

##### ADDITIONAL INFORMATION
Error message:
Failed to init/update submodules: Submodule 'roles/logwatch' (git@github.com:nodje/ansible-logwatch.git) registered for path 'roles/logwatch'
etc.
user: nodje
issue_2152: state: open
title: Restrict multiple LDAP configuration by domain
body: 
##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY

We now allow mutliple LDAP configurations.

It should be possible to designate a configuration such that it is only used by a particular domain. i.e., a user would enter foo@bar.baz.com as their user name, and their account would be verified against whatever LDAP configuration desginates that it's for bar.baz.com.

##### ENVIRONMENT
* AWX version: any

##### ADDITIONAL INFORMATION


user: wenottingham
labels: component:authentication: For issues related to authentication
issue_2142: state: open
title: Document stuff in requirements_git.txt and packages.json and why they're forked
body: 
##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - API
- UI

##### SUMMARY

We fork some dependencies locally for both the API (requirements_git.txt) and the UI (packages.json).

While that's OK, we should have it documented in the source tree:
- why we forked a package
- what the changes we added were
- if the change was sent upstream/how we would know when we can use the upstream version

##### ENVIRONMENT
* AWX version: any

##### ADDITIONAL INFORMATION


user: wenottingham
issue_2121: state: open
title: 3-legged OAuth support
body: 

##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY

Our current OAuth support allows users to generate tokens for themselves.

We should extend our OAuth support such that a user XYZ in a third-party service can 'authenticate' themselves to Tower and allow that service to perform operations on their behalf.

This could also include creating specific service accounts that would take advantage of this.

##### ENVIRONMENT
* AWX version: any

##### ADDITIONAL INFORMATION


user: wenottingham
issue_2096: state: open
title: Feature Request: Ability to encrypt values using Vault credentials in AWX
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
Working with teams it is often not optimal to share vault encryption keys among developers. 

Having a lightweight option in AWX that would allow a developer to select a vault credential and encrypt a given output, returning the encrypted value would allow developers to self-service encrypted secret generation.

##### ENVIRONMENT
* AWX version: All

##### STEPS TO REPRODUCE
* Developer logs in to AWX
* Developer navigates to encryption service
* Encryption key is selected from known vault credentials
* Secret is entered as input

##### EXPECTED RESULTS
* Encrypted secret value is returned to be inserted into ansible playbooks and decrypted by AWX upon run time

##### ACTUAL RESULTS
Does not exist

##### ADDITIONAL INFORMATION
* Would there be any security concerns with this approach? 
* What are the pro's and con's in the communitie's opinion? 
* Could vault credentials be accessed with similar RBAC?

user: kisamoto
issue_2087: state: open
title: RFE: Allow users categorized as 'Enterprise' (SAML, RADIUS, TACACS+) can be created through the UI/API
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
Ability to create users categorized as 'Enterprise' (SAML, RADIUS, TACACS+) through the UI/API.

##### ENVIRONMENT
* AWX version: latest
user: cesarfn4
labels: component:authentication: For issues related to authentication
issue_2070: state: open
title: RFE: Consider fronting/wizarding inventory creation from credentials
body: 
##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY

We allow users to enter AWS, GCE, etc. credentials into AWX.

One of the immediate usecases for these credentials is to create an inventory with a source configured with those credentials.

We should automate (ha!) this creation to avoid drudgery.

##### ENVIRONMENT
* AWX version: any

##### ADDITIONAL INFORMATION


user: wenottingham
issue_2058: state: open
title: Option to organize Job Templates hierarchically by groups and tags
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI
 
##### SUMMARY
<!-- Briefly describe the problem. -->
The Job Templates page should be more user friendly and there should be a way to visually grouping all of them. Currently the `Labels` in job templates can be used as a tags. But an optional and additional hierarchy organization would be helpful.

It would be nice to organize the templates in the following ways:

- Hierarchically
- By groups


user: Ompragash
issue_2047: state: open
title: RFE: Configure SAML with Metadata Upload
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI

##### SUMMARY
<!-- Briefly describe the problem. -->
Ability to upload IdP metadata and auto-configure SAML providers through the UI/API rather than manual JSON input.

##### ENVIRONMENT
* AWX version: latest
user: jamesmarshall24
labels: component:authentication: For issues related to authentication
issue_2006: state: open
title: [External logger] Add consistent metadata for tracking logs related to a job
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API

##### SUMMARY
Logs related to a particular job do not have consistent metadata that would allow grouping them in an external log aggregator

##### ENVIRONMENT
* AWX version: any
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  X.Y.Z
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

Enable external logs for both awx logs & the job events logs

##### EXPECTED RESULTS

A way to filter logs in the external log aggregator such that it returns everything related to job with id=3244, for example.

##### ACTUAL RESULTS

The job events logger has a field `job` which points to the id of the related job, but there is no such thing in AWX logs, even which those logs are obviously exclusively about a particular job. We have many log statements, here is one:

https://github.com/ansible/awx/blob/4f5a0d5a08c6081389088f7aa7c9159bd4ab2a7f/awx/main/tasks.py#L999-L1000

The external log aggregator receives logs from all instances in the cluster, so someone would logically like to group logs related to a single job as it's path traversed multiple instances. One instance submits the job to the queue, and another runs it, for example.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: AlanCoding
issue_2000: state: open
title: Please add option for system_tracking to log all facts. 
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
##### SUMMARY
<!-- Briefly describe the problem. -->
Please allow for all facts for hosts to be sent regardless of whether or not those are newly gathered facts. 
##### ENVIRONMENT
* AWX version: Latest
* AWX install method: N/A
* Ansible version: 2.5.4
* Operating System: RHEL 7
* Web Browser: N/A

##### STEPS TO REPRODUCE

<!-- For bugs, please show exactly how to reproduce the problem. For new
features, show how the feature would be used.  -->

##### EXPECTED RESULTS

<!-- For bug reports, what did you expect to happen when running the steps
above? -->

##### ACTUAL RESULTS

<!-- For bug reports, what actually happened? -->

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: gamuniz
issue_1992: state: open
title: Permit vaulted passwords in extra variables through GUI and API.
body: ##### ISSUE TYPE

 - Feature Idea

##### COMPONENT NAME

 - API
 - UI

##### SUMMARY

We have a workflow that passes some credentials (username and password) from Jenkins into Ansible Tower (passing "extra_var" via the API) to run a command on the remote systems.  These variables show up in the "Extra Variables" section and work fine when they are NOT encrypted with Vault.

When we use Vault to encrypt the variables and provide the appropriate Vault credentials to Tower, the process fails as the vaulted variables are not encrypted.

Attempting to simulate this in a simple example by pasting in vault encrypted variables results in the Tower GUI reporting "Error saving job template.  Error: Parse error, failed to parse variables."

See this RedHat support ticket for details:
    https://access.redhat.com/support/cases/#/case/02119398

Also see the attached screen shots showing the in-GUI extra variables setup attempt and error message.

##### ENVIRONMENT
* Tower version: 3.2.2
* Ansible version:  2.5.2
* Operating System: RHEL 7
* Web Browser: Firefox and Chrome (both currently latest released versions)

##### STEPS TO REPRODUCE

1. Create a vaulted variable:
    ansible-vault encrypt_string --name 'my_password' 'MySecretPa$$word!'
1. Ensure vault credential is setup with the proper password and added to the template.
1. Copy resulting "my_password" lines into the "Extra Variables" GUI, or pass it into the extra_vars section of the API call.

##### EXPECTED RESULTS

 * GUI - "Extra Variables" section populated and used during execution.
 * API - The extra variables section is used and variables are properly decoded during execution

##### ACTUAL RESULTS

 * GUI - The GUI reports "Error saving job template.  Error: Parse error, failed to parse variables." and will not save new Extra Variables block.
 * API - The variables are passed into API but are not decoded or used by the job.

##### ADDITIONAL INFORMATION

Screen shot showing vault password (screen shot "01"):

![01_-_command_line_ansible-vault_output](https://user-images.githubusercontent.com/1124371/41539409-5813f136-72d3-11e8-9dd0-bb803225b35f.png)

Screen shot showing Tower GUI error message (screen shot "02").

![02_-_job_template_with_extra_variables_and_credentials_and_error](https://user-images.githubusercontent.com/1124371/41539410-583687a0-72d3-11e8-8d7e-fadcf58cde0e.png)

user: dglinder
issue_1973: state: open
title: RFE: Enhanced Dashboard
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
- UI

##### SUMMARY
In Tower's dashboard, the "Recently Used Templates" and "Recent Run Jobs" displays are not informative enough to be useful indicators of how well Tower is functioning.  The main problem is that the display is binary -- green or red only -- and that a job run against 150 hosts with a single host failure looks the same as one where every host fails.  

##### ADDITIONAL INFORMATION

Please consider refactoring the dashboard to use more than just a single dot to display status.  For example:
1) Enlarge the dots so that they can include numbers for succeeded/failed hosts (as in "149/1" or "0/150" in the hypotheticals above).  Alternately, add those numbers in the flyover text already provided. 
2) Use a wider range of colors that gives a more useful at-a-glance indicator of job effectiveness.  For example, green = 95% of hosts were successful; yellow/orange = 50-95% success; red = under 50% success.  You could even use gradients in that middle range so the orange is darker at 55% than at 80%.

These UI tweaks would make the dashboard displays more useful and less alarming to look at. 

user: msilmser
issue_1971: state: open
title: Custom Message Banner other than Login Prompt
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Idea
 
##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI


##### SUMMARY
<!-- Briefly describe the problem. -->

Custom message banner to notify Users about upgrade, changes and downtime information other than login prompt. This custom message should appear on all pages, not just the login screen. 


##### EXPECTED RESULTS

Users can be notified about important updates other than login prompt.

user: Ompragash
issue_1957: state: open
title: Feature: Support oauth azure social auth team mapping directly from AWX settings
user: matburt
labels: component:authentication: For issues related to authentication
issue_1954: state: open
title: Support all Ansible core YAML-isms across app, API / UI
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
Ansible core accepts YAML that we do not

##### ENVIRONMENT
* AWX version: any
* AWX install method: any
* Ansible version:  2.4-2.7 at least
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

Attempt to save this to a job template

```yaml
---
my_unsafe_array:
    - !unsafe 'unsafe element'
    - 'safe element'
```

See https://docs.ansible.com/ansible/2.4/playbooks_advanced_syntax.html

##### EXPECTED RESULTS

Feature request is to accept this, and accept any other syntax that Ansible core documents that it accepts.

##### ACTUAL RESULTS

Demo of UI rejection in their parser:

![screen shot 2018-06-05 at 9 07 05 am](https://user-images.githubusercontent.com/1385596/40977877-260fce36-68a0-11e8-9e82-e4e17841e27d.png)

![screen shot 2018-06-05 at 9 07 13 am](https://user-images.githubusercontent.com/1385596/40977881-2d2cdd76-68a0-11e8-96a8-b73c0e315883.png)

Demo of API rejection:

```json
{
    "extra_vars": [
        "Cannot parse as JSON (error: No JSON object could be decoded) or YAML (error: could not determine a constructor for the tag '!unsafe'\n  in \"<unicode string>\", line 1, column 6:\n    foo: !unsafe 'unsafe element'\n         ^)."
    ]
}
```


##### ADDITIONAL INFORMATION



user: AlanCoding
issue_1888: state: open
title: RFE: Limit Job Template Execution
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Idea
 

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI

##### SUMMARY
We would like to suggest that there is a feature to limit the number of times a job template can be launched within a particular time period - i.e set a maximum number of successful executions within 24 hours.
Right now the best we can achieve is to have retrospective events triggered if a threshold has been met, but there are use cases where after the fact is too late.
Is this possible?

##### ENVIRONMENT
* AWX version: 
* AWX install method: 
* Ansible version:  
* Operating System:
* Web Browser:

##### STEPS TO REPRODUCE

<!-- For bugs, please show exactly how to reproduce the problem. For new
features, show how the feature would be used.  -->

##### EXPECTED RESULTS

<!-- For bug reports, what did you expect to happen when running the steps
above? -->

##### ACTUAL RESULTS

<!-- For bug reports, what actually happened? -->

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: rmauc
issue_1875: state: open
title: Scroll user to the top of active list after search param change
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY
Whenever a state transition completes the user is scrolled back up to the top of the page _with the exception of a search param change_ (search, page, page size, etc).  When the user performs a search, changes the page, or changes the page size they are not scrolled back up to the top of the page for fear that the list itself isn't at the top of the page.  This holds true in a lot of cases where the form appears above the list and scrolling the page up after a search would require the user to scroll back down.

Ideally, after a user performs a search they would be scrolled up to the top of the list where they performed said search.  To achieve this https://github.com/ansible/awx/blob/devel/awx/ui/client/src/app.js#L302 will have to be expanded to check for search param changes and a scheme for targeting some kind of list identifier to scroll to will need to be established.

user: mabashian
issue_1857: state: open
title: Project-centric navigation leaves out workflow job templates
body: 

##### ISSUE TYPE

 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY

The new project-based nav lets you view job templates that came from a project from the project view.

However, there's no counterpart for workflows. This is likely because workflows can span projects, but we should find a way to make them easily findable.

##### ENVIRONMENT
* AWX version: current
##### ADDITIONAL INFORMATION

user: wenottingham
issue_1852: state: open
title: RFE: Notifier on job cancellation
body: ##### ISSUE TYPE
- Feature Idea

##### COMPONENT NAME
- Notification
- Jobs/Workflows

##### SUMMARY
Customer would like to be able to execute a playbook automatically in the event that a user cancels a job/workflow from the UI.

##### ADDITIONAL INFORMATION
Potentially the ability to send a webhook notification on a job being cancelled in addition to the existing success or failure options.
user: msilmser
issue_1845: state: open
title: RFE: Extend callback feature to Workflows
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI


##### SUMMARY
<!-- Briefly describe the problem. -->
Be able to allow Callbacks to awx via the awx API and invoke the launch of a Workflow.

Depends on https://github.com/ansible/awx/issues/1845
user: e-tienne
issue_1823: state: open
title: [Feature Request] Allow to create inventory source from a manual project
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - web

##### SUMMARY
As of 1.0.6, it is not possible to import a local hosts file and use it as an inventory.

##### ENVIRONMENT
* AWX version: tag 1.0.6
* AWX install method: docker/docker-compose on linux
* Ansible version: v2.5.2 (from PyPi)
* Operating System: Ubuntu 17.10
* docker-ce ```18.04.0~ce~3-0~ubuntu``` (from official docker PPA)
* docker==3.3.0
* docker-compose==1.21.1
* requests==2.18.1

##### STEPS TO REPRODUCE

- Add a project folder below the projects base folder containing a hosts file such as:
```
[all:vars]
nms_mgt_ip_address=172.21.0.1
remote_domain_name=actionmystique.net

[firewalls]
ASAv1 ansible_host=172.21.154.231

[spines]
NX_OSv_9k_Spine_31 ansible_host=172.21.114.153 
NX_OSv_9k_Spine_32 ansible_host=172.21.114.153

[mgt]
IOSv_L2_10 ansible_host=172.21.100.30

[nx_osv_9k:children]
spines

[asav:children]
firewalls

[cloud:children]
firewalls
spines
mgt
```
- Add this manual project in the GUI with Projects/+ADD.
- Add inventory in the GUI with Inventories/+ADD
- Add source --> Sourced from a project
- Choose an inventory file --> /(project root)

##### EXPECTED RESULTS
It should be possible to import a local hosts file and use it as an inventory.

##### ACTUAL RESULTS
![error loading hosts file from manual project](https://user-images.githubusercontent.com/13176858/39424242-f036cfe4-4c75-11e8-8dd5-24f7ab0b8220.png)

user: jean-christophe-manciot
issue_1812: state: open
title: RFE: improve the SAML configuration UI
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY

Improve the SAML configuration UI to make it more friendly.

##### ENVIRONMENT
* AWX version: latest

##### STEPS TO REPRODUCE

Here are some ideas that I believe would help make the SAML Auth configuration page easier to work with:

- Accept uploaded certificates/keys in common formats, so they don't have to be potentially re-formatted as PEM and copy&pasted

- Try to get some parameters automatically: let the admin provide a SAML identity and/or service provider metadata descriptors and extract the relevant values from there.

- For common parameters that aren't obtained automatically, provide text input fields instead of text areas for JSON input.

user: codificat
labels: component:authentication: For issues related to authentication
issue_1797: state: open
title: RFE: Send real client remote address in TACACS+ authentication packet
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API


##### SUMMARY
Currently  the TACACS+ authentication backend

https://github.com/ansible/awx/blob/96370584062a15271abafab7fc557ac2879aa38c/awx/sso/backends.py#L225-L227

sends default value for client remote address 

https://github.com/ansible/tacacs_plus/blob/526b5a29c5656bbd8644accca238d1e9303dc272/tacacs_plus/flags.py#L81

The function `authenticate()` in  `TACACSClient` supports sending client remote address as parameter and should be used to correctly report client real address.

https://github.com/ansible/tacacs_plus/blob/9ba553f79efcc7b955001503d1953900ba6284a4/tacacs_plus/client.py#L158

##### ENVIRONMENT
* AWX version: 1.0.5
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  N/A
* Operating System: Any
* Web Browser: Any

##### EXPECTED RESULTS

TACACS+ authentication packet will contain clients real remote address.

##### ACTUAL RESULTS

Client remote address is always set to `python_device`.
user: b0urn3
labels: Hacktoberfest: Issues tagged for Hacktoberfest
component:authentication: For issues related to authentication
issue_1784: state: open
title: Feature - Ability to see who is logged into UI
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 
 - Feature Idea


##### COMPONENT NAME
 - UI


##### SUMMARY
It would be useful to be able to tell quickly who is actively logged into the UI. For example if having to carryout emergency maintenance work. To quickly notify them. Ideally afilter to rapidly show active.

##### ENVIRONMENT
* AWX version: 1.0.5
* AWX install method: docker on linux, 
* Ansible version:  2.5
* Operating System: RHEL 7.4
* Web Browser: CHROME

user: akcrisp
issue_1764: state: open
title: [RFE] Better doc on ldap config
body: ##### ISSUE TYPE
 - Documentation

##### COMPONENT NAME
 
- UI

##### SUMMARY

To verify AWX LDAP config  code via  public ldap test server connection.

##### ENVIRONMENT
* AWX version: 1.0.5.23
   * AWX version 1.0.6.1 can't save the ldap setting either.
* AWX install method: docker on linux
* Ansible version:  2.5.0
* Operating System: CentOS 7.4
* Web Browser: Chrome

##### STEPS TO REPRODUCE

* make sure centos 7 can do a ldap query on ldap server hosted in R2.

*  Make sure all AWX containers are running like following

```
-bash-4.2# docker ps -a
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                 NAMES
ee8a11116705        ansible/awx_task:latest      "/tini -- /bin/sh ..."   17 hours ago        Up 11 hours         8052/tcp                                              awx_task
9983de56953f        ansible/awx_web:latest       "/tini -- /bin/sh ..."   17 hours ago        Up 17 hours         0.0.0.0:80->8052/tcp                                  awx_web
777c40f8a906        memcached:alpine             "docker-entrypoint..."   17 hours ago        Up 17 hours         11211/tcp                                             memcached
120793589bdd        ansible/awx_rabbitmq:3.7.4   "docker-entrypoint..."   17 hours ago        Up 17 hours         4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp   rabbitmq
18566213529e        postgres:9.6                 "docker-entrypoint..."   17 hours ago        Up 17 hours         5432/tcp                                              postgres
-bash-4.2#

```
* enter following setting in LDAP default 
```
ldap server uri:
ldap://ldap.forumsys.com:389

ldap bind dn:
cn=read-only-admin,dc=example,dc=com

ldap bind password:
password

ldap user dn template:
blank

ldap group type:
GroupOfNamesType

ldap require group:
blank

ldap deny group:
blank

ldap start tls:
off

ldap user search:

[
"DC=example,DC=com", "SCOPE_SUBTREE", "(uid=%(user)s)"
]

ldap group search:

[
"DC=example,DC=com", "SCOPE_SUBTREE", "(objectClass=group)" 
]


ldap user attribute map:
{ "first_name": "givenName", "last_name": "sn", "email": "mail" }

ldap user flags by group:
{ "is_superuser": "CN=read-only-admin,DC=example,DC=com" }

ldap organization map:  for Dev box, organization is "Default" by default.

{
  "Default": {
   "admins": "CN= Admins,ou=admins,dc=example,dc=com",
   "remove_admins": false,
   "remove_users": false,
   "users": [
    "CN= Scientists,ou=scientists,dc=example,dc=com”
   ]
  }
}

ldap team map:
blank
```
* Saved the ldap config to default ldap profile and logout admin account.

##### EXPECTED RESULTS

* ldap setting saved  if there is missed configured via.
* able to login  as any user in R2.  
* If will be great to have "validate" button(to validate ldap setting live) in ldap config tab.

##### ACTUAL RESULTS

* after re-login  as admin the original ldap login config is gone.


##### ADDITIONAL INFORMATION
* Please make sure existing code base can use ldap server in R2 
* And document the ldap settings. 
* References:
  * R1: https://github.com/ansible/awx/issues/956
  * R2: http://www.forumsys.com/tutorials/integration-how-to/ldap/online-ldap-test-server/
  * R3: https://github.com/ansible/awx/issues/1040
  * R4: https://github.com/ansible/awx/issues/537
  * R5: https://github.com/ansible/awx/issues/1704

* ScreenShots:
  * Organization name
![image](https://user-images.githubusercontent.com/378638/39269858-a8f63cf8-4899-11e8-84fb-0d6568110e55.png)

user: tjyang
issue_1756: state: open
title: RFE: Add Scheduled / Queued Job in Workflow Editor
body: <!---
The Ansible community is highly committed to the security of our open source
projects.  Security concerns should be reported directly by email to
security@ansible.com.  For more information on the Ansible community's
practices regarding responsible disclosure, see
https://www.ansible.com/security
-->

##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Idea


##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI

##### SUMMARY
Be able to run a Scheduled / Delayed job chained to a Workflow.

Use Case Workflow:
-  _Run Playbook 1 (patch  Server1)_
-  _On Success,  Run Playbook 2 **once at 3AM** (reboot Server1 during a planned maintenance window)_
##### ENVIRONMENT
* AWX version: any

user: e-tienne
issue_1747: state: open
title: RFE: Add Tags in Workflow Editor
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
- UI
- API

##### SUMMARY
Customer would like to be able to add/skip tags in the workflow editor in addition to individual job templates

user: msilmser
issue_1738: state: open
title: RFE: Drill down to see actual failed jobs in JOB STATS trending chart
body: 
##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI

##### SUMMARY
By moving mouse cursor, currently we can see failed/successful jobs at particular day.
This is a feature request if awx UI can display failed jobs or successful job list when user left click on the failed red/green circular icons.

##### ENVIRONMENT
* AWX version: 1.0.5
* AWX install method: docker on linux
* Ansible version:  2.5.0
* Operating System: Linux
* Web Browser: Chrome

##### STEPS TO REPRODUCE


* Dashboard -> JOB STATUS
![image](https://user-images.githubusercontent.com/378638/38497691-92718476-3bc7-11e8-954c-f8e588daf51a.png)



##### EXPECTED RESULTS

When user click on red circular icon, failed jobs got displayed or linked exact failed jobs in  "JOBS" section.

##### ACTUAL RESULTS

Current user can't click on red/green round icons.

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: tjyang
issue_1731: state: open
title: RFE: more workflow prompting (individual templates, global overrides)
body: ##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug Report

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API


##### SUMMARY
When creating a workflow with several templates that have prompt on launch enabled for extra-vars it will not prompt when starting your workflow.

##### ENVIRONMENT
* AWX version: 1.0.5
* AWX install method: docker on linux
* Ansible version:  2.5.0
* Operating System: Linux
* Web Browser: Firefox 59.0.2

##### STEPS TO REPRODUCE
1. Create 2 job templates with extra-variables `prompt on launch` enabled 
2. Create a workflow template and add your newly created job templates
3. Launch your workflow template

##### EXPECTED RESULTS

A prompt for extra-variables

##### ACTUAL RESULTS
Workflow executed the template, but did not prompt me for extra-variables.

##### ADDITIONAL INFORMATION


user: seansabour
issue_1711: state: open
title: RFE: Allow for ssh private key passphrase in custom credentials
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
Customer would like to implement ssh private key passphrases into custom credentials, similar to the way machine credentials allow for this:

"We would like to use the ssh private key (from custom credential injectors) and to get the ssh passphrase (by a request to the vault) to connect to the guests."
user: msilmser
issue_1697: state: open
title: RFE: Possibility to override timezone used in UI
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY

Possibility to always present job timestamp with GMT+0 timezone. Currently jobs are presented with __local timezone__ to logged in user.

##### ENVIRONMENT
* AWX version: N/A
* Ansible version:  N/A
* Operating System: any
* Web Browser: any

##### STEPS TO REPRODUCE

* Job timestamp is for example 10:00 AM (UTC)

##### EXPECTED RESULTS

* European and Costa Rican users see 10:00 AM UTC.

##### ACTUAL RESULTS

* For user in Poland it will be 12:00 PM (CET) 
* For user in Costa Rica it will be 02:00 AM (CST)

##### ADDITIONAL INFORMATION

This is request from a customer.

user: b0urn3
issue_1653: state: open
title: Allow Token Creation for other Users in the REST API
body: ##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->

 - Feature Idea


##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API

##### SUMMARY
Currently, users can only create tokens for themselves (for app tokens and PAT's).  It seems desirable that admins and org admins should have the capability to create tokens for other users within their jurisdiction.  

##### ENVIRONMENT
awx: 1.0.4.102

##### ADDITIONAL INFORMATION

Steps to support this: 
1. Change logic in serializers to make user field required on token creation at all token endpoints and remove logic to automatically populate user field with the current user.  
2. Update the tower-cli login to pass the user field.  
user: rooftopcellist
issue_1616: state: open
title: Feature: Per-Org LDAP Settings
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
Breaking this out from #166 

Ability to configure LDAP settings per organization.

user: wwitzel3
labels: component:authentication: For issues related to authentication
issue_1520: state: open
title: Smart search: add ability to edit query
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY

Right now when applying a search query, we remove the text from the search bar and add it to a tag. This makes it difficult to modify the search. A user currently has to:

- Copy the text from the tags
- Paste into search bar
- Modify the search
- Remove the currently applied tags

##### ENVIRONMENT
* AWX version: any

##### ADDITIONAL INFORMATION
One solution may be to leave the search terms in-place like GitHub's search does.

user: wenottingham
issue_1502: state: open
title: Show 'invalid' marker on broken workflows
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY

We have the new 'invalid' marker on job templates with missing components.

It should also show for:
- workflows with missing nodes (deleted JT, or deleted project/inventory that there was a sync node for)
- workflows with invalid JTs (as denoted by the existing invalid marker)

##### ENVIRONMENT
* AWX version: 1.0.4.64

##### ADDITIONAL INFORMATION


user: wenottingham
issue_1496: state: open
title: RBAC - Notification admin can toggle for all read access resources.
body: ##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Idea


##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API

##### SUMMARY
<!-- Briefly describe the problem. -->
Allow Notification Admin for an organization to toggle notifications for any resource they have read access to. Currently you must have change access.

user: wwitzel3
issue_1491: state: open
title: Prompt on launch option for playbook in a job template
body: ##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI

##### SUMMARY
<!-- Briefly describe the problem. -->
The option 'Prompt on launch' should be available additionally in the configuration of the job template in the 'Playbook' field. Quite reasonably, the to-be-selected playbook should be selectable from the list of the executable playbooks of the project during the execution of the job template.

##### ENVIRONMENT
* AWX version: 1.0.0


user: jainnikhil30
issue_1487: state: open
title: Expose why jobs are in "pending"
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY

Jobs can be queued for a variety of reasons:

- waiting on dependent SCM update
- waiting on dependent inventory update
- blocked due to another instance of the same job
- blocked to another job which has the inventory locked (see above 'dependent inventory update')
- waiting on spare job running capacity
- pending because of no enabled instances in the instance group that is assigned to the job/project update/etc

This should be surfaced somehow, even if just in the UI tooltip/popover.

##### ENVIRONMENT
* AWX version: current

##### ADDITIONAL INFORMATION


user: wenottingham
issue_1467: state: open
title: Show named URL for provisioning callbacks
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY

Provisioning callbacks can be accessed via their `named_url`. However, we don't show this in the UI when configuring them.

##### ENVIRONMENT
* AWX version: any

##### ADDITIONAL INFORMATION

Unlike the ID-based URL for the callback, the named URL can change if the job template name changes. So we likely don't want to show this as the *only* option.

user: wenottingham
issue_1434: state: open
title: Add support for SSO using Kerberos and SPNEGO
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY
Currently, users are always required to enter a username and password for AD authentication into Tower.  This feature request suggests adding SPNEGO support to the AWX UI login to allow for login to UI with established Kerberos credentials without an interactive authentication.

##### ENVIRONMENT
* AWX version: 1.0.1

##### STEPS TO REPRODUCE

This feature would add another SSO option to Tower to allow login by SPNEGO/Kerberos.

user: ghost
labels: component:authentication: For issues related to authentication
issue_1429: state: open
title: [RFC] Don't conditionalize `scm_delete_on_update` on check jobs
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - API

##### SUMMARY

We currently only handle `scm_delete_on_update` for check jobs. (See https://github.com/ansible/awx/commit/1a946d51c13131103561c97c076f628589cdae69).

This leads to weird semantics.

The option originally existed to handle cases where jobs may leave temporary files in the repo, or other similar issues. Now imagine the following:
- update_on_launch is set
- delete_on_update is set

If the update on launch runs on node A, records a revision of X, and the job then runs on node B which already has revision X... nothing will actually be deleted before the job runs. That doesn't mesh with what the expected use of the option is.

##### ENVIRONMENT
* AWX version: any

user: wenottingham
issue_1404: state: open
title: Add ability to copy job schedules
body: ##### ISSUE TYPE
 - Feature Idea


##### COMPONENT NAME
 - UI

##### SUMMARY
Add ability to copy job schedules

##### ENVIRONMENT
* AWX version: 1.0.4.31
* AWX install method: docker on linux
* Ansible version:  2.4.0.3


##### STEPS TO REPRODUCE

There should be a copy action for job schedules

##### EXPECTED RESULTS


##### ACTUAL RESULTS


##### ADDITIONAL INFORMATION

![image](https://user-images.githubusercontent.com/19539695/36811679-8ad6278c-1cc6-11e8-9824-d0aa5fe3575a.png)

user: grahamneville
issue_1402: state: open
title: RFE: Template list view should have 'Teams' column
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY
The Template list view doesn't currently show who can own/run a template. Adding a column to list the team(s) is desired.

user: dhartford
issue_1336: state: open
title: RFE: Add Introspect Endpoint
body: ##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Idea


##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API

##### SUMMARY
Add `Introspect` endpoint to fully support OAuth2 RFC.  

##### ENVIRONMENT
* AWX version: 3.2.3
* AWX install method: docker for mac
* Ansible version:  2.3.1
* Operating System: OS X
* Web Browser: Chrome
* After OAuth2 Merge




##### ADDITIONAL INFORMATION

Will Allow Admin user to Post a token value to this endpoint and receive back information about the token.  These are the fields that should be returned:
* active
* scope
* client_id
* username
* expires
* description

When testing this, it should be ensured that it works for both application tokens _and_ personal access tokens.

For Reference: https://github.com/jazzband/django-oauth-toolkit/blob/master/oauth2_provider/views/introspect.py
user: rooftopcellist
labels: component:authentication: For issues related to authentication
issue_1309: state: open
title: RFE : send tower log to graylog without using logstash
body: ##### ISSUE TYPE

- Feature Idea

##### COMPONENT NAME

 - UI
 
##### SUMMARY

Is it possible to e send tower log to graylog without using logstash ? 
Looks like its possible to pass tower log to gelf using payload, refer link : http://docs.graylog.org/en/2.4/pages/gelf.html 
which says with the help of payload any graylog-server node accepts and stores this as a message. So can this be candidate for RFE ?

##### ENVIRONMENT
* AWX version: any

user: pravindmali
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_1284: state: open
title: Feature Idea: Resume workflow from point of failure
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
Currently you can only rerun individual templates that have executed or failed as part of the workflow. It would be nice to be able to restart from failure and continue with the rest of the workflow.

user: MarkRoddick
issue_1280: state: open
title: Add option to not import host variables in to AWX when sourcing inventory from SCM
body: ##### ISSUE TYPE
 - Feature Idea
 

##### COMPONENT NAME
 - API
 - UI


##### SUMMARY
Add option to not import host variables in to AWX when sourcing inventory from SCM

##### ENVIRONMENT
* AWX version: 1.0.3.38
* AWX install method: docker on linux
* Ansible version:  2.4.0.3

##### STEPS TO REPRODUCE

I would like the option for AWX to not import any varibles from SCM so when Ansible is run it continues to use variables inside the project folder.
user: grahamneville
issue_1267: state: open
title: RFE: add a 'you have unsaved changes' paradigm
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY

In general, we allow you to cancel out of any screen whether you have unsaved changes or not.

We could change the paradigm of AWX such that it warns if you have unsaved changes.

##### ENVIRONMENT
* AWX version: any
##### ADDITIONAL INFORMATION

an example: https://tower-mockups.testing.ansible.com/mockups/templates/workflows-warning/

user: wenottingham
issue_1265: state: open
title: Cannot add teams from org view
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY

Right now, there is no tab for 'Teams' when viewing an organization, and if you use the org card view to go to the org's teams, you can't add them from there.

##### ENVIRONMENT
* AWX version: current

##### ADDITIONAL INFORMATION

mockup -> https://tower-mockups.testing.ansible.com/mockups/orgs/orgs-teams/
user: wenottingham
issue_1263: state: open
title: Add appropriate socket messages and consuming code for live updating of instance group status
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY

We don't currently do live updates of instance group capacity & status.

This feature is for the API to send the necessary info via websocket, and for the UI to consume it.

##### ADDITIONAL INFORMATION


user: wenottingham
issue_1261: state: open
title: Add Inventory Field in Schedules view
body: ##### ISSUE TYPE
 - Feature Idea


##### COMPONENT NAME
 - API


##### SUMMARY
Add Inventory Field in Schedules view

##### ENVIRONMENT
* AWX version: 1.0.3.36
* AWX install method: docker on linux
* Ansible version:  2.4.3.0


##### STEPS TO REPRODUCE

When looking a the schedule view it would be nice to see what inventory the schedule will be run against, in addition to the schedule name, first run, next run, final run fields.
user: grahamn-gr
issue_1252: state: open
title: Add user, team, project and organisation on job reports
body: ##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI

##### SUMMARY
<!-- Briefly describe the problem. -->
When you are an admin of a team, project or organisation would be great to have on the jobs view the columns with job owner, team, project and organisation.
user: pipoe2h
issue_1237: state: open
title: Allow for nicer JSON input in API
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API

##### SUMMARY

There are many places where the API takes a string input that is a JSON field. (Sat6 group patterns, extra_vars, etc)

Passing this data generally involves a lot of quoting. It may be useful to have a cleaner way to input this data.

##### ENVIRONMENT
* AWX version: current

##### ADDITIONAL INFORMATION

user: wenottingham
issue_1230: state: open
title: Surface partial inventory sync failures better
body: ##### ISSUE TYPE
 - Bug Report
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY

Currently, when POSTing multiple inventory sources to the update_inventory_sources endpoint, the API will pass back a status for each inventory source that is updated.

This can include some inventory sources that were not updated:

<img width="568" alt="screen shot 2017-09-12 at 11 38 34 am" src="https://user-images.githubusercontent.com/1342624/30335964-b20648c2-97b1-11e7-9ca8-30be18d897ee.png">

We should aggregate any non-update information and display into the user in a modal after the sync all button is clicked, if applicable.

##### ENVIRONMENT
* AWX version: current

##### ADDITIONAL INFORMATION

user: wenottingham
issue_1229: state: open
title: Exclude Dates and Times in Scheduler / Outage windows when jobs will not run
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
Would be nice to have the ability to exclude dates, times, hours, or ... from scheduler. (Example Usage: static maintenance windows, exclude known times/dates) 

##### ENVIRONMENT
* AWX install method: docker on linux

##### EXPECTED RESULTS

Ability to exclude certain dates, times, hours, ....
user: mneumarkidg
issue_1220: state: open
title: add inventory updates related field for inventory
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API

##### SUMMARY

To get all inventory updates for a particular inventory, you need query all related inventory sources.

We could create a toplevel related field that accomplishes this.


##### ENVIRONMENT
* AWX version: any

##### ADDITIONAL INFORMATION

user: wenottingham
issue_1207: state: open
title: Feature: Native scale-up/scale-down of standalone execution nodes
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI
 - Installer

##### SUMMARY

With https://github.com/ansible/awx/issues/74, we added the ability to scale podified cluster nodes at runtime.

This followon is to extend/merge those features into the isolated node concept:
- register/deregister isolated nodes at runtime as standalone execution nodes
- use these execution nodes when in OCP

When used containerized, isolated nodes should have the option to have a potentially more efficient transfer mechanism than ssh, such as a shared volume set up by the container manager.


user: wenottingham
issue_1182: state: open
title: Feature: Provide list of tags for playbook
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
We need to query playbook for provide list of tags selection for execution.
Most actual when using  "Prompt on launch" option.

##### ENVIRONMENT
* AWX version: 1.0.3.29
* AWX install method: docker on linux
* Ansible version:  2.4.3.0
* Operating System: Archlinux
* Web Browser: Firefox 58.0

##### ADDITIONAL INFORMATION
![screenshot-2018-2-9 ansible awx set maintenance](https://user-images.githubusercontent.com/7556217/36032237-a748972e-0dad-11e8-931f-4bb1e6f1b363.png)


user: kvaps
issue_1179: state: open
title: Feature: Provide list of hosts for limit option
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
When using "Limit" option, we need to query playbook and inventory file for provide list of hosts (or groups) selection for execution.
Most actual when using  "Prompt on launch" option.

##### ENVIRONMENT
* AWX version: 1.0.3.29
* AWX install method: docker on linux
* Ansible version:  2.4.3.0
* Operating System: Archlinux
* Web Browser: Firefox 58.0


user: kvaps
issue_1126: state: open
title: Feature idea: restrict personal credentials
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY

Any user currently can create a personal credential and then delegate access to it to other users.

The request is to disable this feature, such that only elevated users can create credentials.

##### ENVIRONMENT
* AWX version: any

##### ADDITIONAL INFORMATION

Alternatively, restrict the ability to delegate access to them.


user: wenottingham
issue_1108: state: open
title: Feature request: additional survey validation
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI (?)

##### SUMMARY

Request for additional survey validation options:
[ ] alphanum on text types


##### ENVIRONMENT
* AWX version: any

##### ADDITIONAL INFORMATION

Fairly sure 'password strength' validation is not something we would consider for surveys.

user: wenottingham
issue_1099: state: open
title: "Prompt on launch" password in Custom credentials configuration
body: ##### ISSUE TYPE

 - Feature Idea

##### COMPONENT NAME

 - API
 - UI

##### SUMMARY

Add the option "Prompt on launch" in the custom credentials configuration to ask the user for the password at launch time.
user: cesarfn4
issue_1083: state: open
title: Add support for syslog for external logging
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
awx allows you to ship logs to external systems via UDP - this feature primarily exists to support logstash via UDP.  As such, UDP messages shipped from awx are in the JSON format that logstash expects.  It would be nice if you could ship syslog-formatted messages over UDP or TCP.

related: https://github.com/ansible/awx/issues/1062
user: ryanpetrello
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_1060: state: open
title: Named URLs for role assignment
body: ##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->

 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI


##### SUMMARY
<!-- Briefly describe the problem. -->
It would be useful to be able to have Named URLs so that roles can be granted via automation more easily.  For example,

`/api/v2/teams/MyTeam++MyOrg/roles/Admin`

Where you could post an id to that role to assign someone as admin.




user: michelleperz
issue_1048: state: open
title: Improve Slack Notification Error Handling
body: ##### ISSUE TYPE
 - Enhancement


##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
Currently we only surface errors when sending slack notification if a Python exception occurs.
We could do better if we read the event stream after our `rtm_send_message` call to see if there
were any error events waiting.

A common error is when the bot has not been invited to a channel that we are attempting to send the notification to. This can be caught in the message stream, but does not throw an exception.

##### ADDITIONAL INFORMATION

https://github.com/ansible/awx/blob/devel/awx/main/notifications/slack_backend.py#L49

user: wwitzel3
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_961: state: open
title: Add ability to know which Organization Job is related for
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - Playbooks

##### SUMMARY
It will be nice to have some extra variable passed to job template in order to know which organization this job is related for.

##### STEPS TO REPRODUCE

As for example it might me accessible via extra vars {{ ansible_organization_name }} or via environment variable {{ lookup('env', 'ORGANIZATION_NAME') }}

user: gueux
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_924: state: open
title: Documentation for IAM EC2 inventory
body: ##### ISSUE TYPE
 - Documentation

##### COMPONENT NAME
 - UI

##### SUMMARY

IAM permissions for EC2 inventory plugin

##### ENVIRONMENT
N/A

##### STEPS TO REPRODUCE

When using EC2 to lookup hosts available, there is no reference to what permissions the IAM role should have, giving the role extensive permissions is not ideal.

The error message also does not give us any detailed information.

Can we update the documentation to identify which actions the role needs to have (obviously depending on the flags set in ec2.ini).

For a basic setup, with ec2.ini left as default the following two actions are required:

ec2:DescribeInstances
ec2:DescribeTags


user: ColmMcBarron
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_885: state: open
title: Integrated notifications with Microsoft Teams
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY
I'm trying to setup webhooks notifications with Microsoft Teams, but i'm getting errors. Maybe a misconfiguration, but there is no documentation about how to do it.

Maybe someone already achieved this by webhooks, but it would be great to add an option to do it like slack.

##### ENVIRONMENT
* AWX version: 1.0.2.303
* AWX install method: docker on linux
* Ansible version: 2.4.2.0
* Operating System: Ubuntu
* Web Browser: Firefox

##### STEPS TO REPRODUCE

as described here:
https://docs.ansible.com/ansible-tower/latest/html/userguide/notifications.html#webhook

and here:
https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/connectors

##### EXPECTED RESULTS

Select notification type Microsoft Teams, and configure the options. Or a documentation of how to do it with webhook option.

##### ACTUAL RESULTS

With webhook I'm receiving this error.
ERROR    awx.main.notifications.webhook_backend Error sending notification webhook: Summary or Text is required.

##### ADDITIONAL INFORMATION

user: ricalenil
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_877: state: open
title: awx surveys and valid nested yaml variables don't appear to work as expected
body: ##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug Report

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI (I guess?)

##### SUMMARY
<!-- Briefly describe the problem. -->
We're currently exploring AWX, and in our existing playbooks we have nested yaml declarations in `group_vars` that look like this:

```
# OS API User Login Information:
auth:
  os_auth_url: "http://openstack.domain.io:5000"
  os_username: "username"

# OS Project Details:
project:
  os_project: "admin"
  os_region_name: "RegionOne"
  os_domain_name: "Default"
```

...and so on. This is valid yaml syntax, and when used in the playbooks, they're declared like the following just fine (without AWX):

```
- name: creating new instances and attaching to declared networks
  os_server:
       state: present
       auth:
         auth_url: "{{ auth.os_auth_url }}"
         username: "{{ auth.os_username }}"
         password: "{{ os_password }}"
         project_name: "{{ project.os_project }}"
       name: "{{ instance.os_hostname }}"
       image: "{{ instance.os_image_id }}"
       key_name: "{{ instance.os_key_name }}"
       timeout: 200
       flavor: "{{ instance.os_flavor_id }}"
       network: "{{ network.os_network_id }}"
       meta:
         hostname: "{{ meta.os_hostname }}"
         group: "{{ meta.os_group }}"
```

This works as expected when running Ansible manually, but when trying to use these same variable declarations in surveys I receive an error that states "Please remove the illegal character from the survey question variable name". I believe this occurs because AWX is not interpreting "." as a valid YAML nested delimiter.

Can someone tell me if there's a work around, or do I really need to redraft our playbooks? We have a lot of playbooks with this format, and I would like to avoid that if possible.

Thanks for the help/guidance in advance!

##### ENVIRONMENT
* AWX version: Master and also tagged version 1.0.2
* AWX install method: docker
* Ansible version:  2.4.x
* Operating System: Linux
* Web Browser: Firefox and Chrome (same results)

##### STEPS TO REPRODUCE

Details are included above...

##### EXPECTED RESULTS

Details are included above...

##### ACTUAL RESULTS

Details are included above...

##### ADDITIONAL INFORMATION

None

user: v1k0d3n
issue_791: state: open
title: Making Host name clickable for more info in Job output modal.
body: ##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI

##### SUMMARY
<!-- Briefly describe the problem. -->
Making the Host name clickable on the job output modal for a host would be very convenient. 

##### ENVIRONMENT
* AWX version: ?
* AWX install method: openshift, minishift, docker on linux, docker for mac, boot2docker
* Ansible version:  ?
* Operating System: ?
* Web Browser: ?

##### STEPS TO REPRODUCE
Run a Job and click on a host for the modal to pop up.

![clickable_host_name](https://user-images.githubusercontent.com/6487265/33849707-42d08e12-de66-11e7-90be-95487721cc6f.png)

<!-- For bugs, please show exactly how to reproduce the problem. For new
features, show how the feature would be used.  -->

##### EXPECTED RESULTS
Clicking the host name at the top "ClickMe" to bring up another modal with information about the host. Having the description and the extra vars would be very helpful without having to navigate out of the job.
<!-- For bug reports, what did you expect to happen when running the steps
above? -->

##### ACTUAL RESULTS
Currently not clickable. 
<!-- For bug reports, what actually happened? -->

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

user: ghost
labels: Hacktoberfest: Issues tagged for Hacktoberfest
issue_663: state: open
title: Documentation Updates for Smart Inventory -> Smart Host Filter -> Dynamic Host
body: ##### ISSUE TYPE
 - Documentation

##### COMPONENT NAME
 - UI

##### SUMMARY
The Ansible Tower documentation is a little misleading for the Smart Inventory -> Smart Host Filter -> Dynamic Host capability in Ansible Tower.

A couple things related:

1. Documentation under the "Key" (aka Help button) in Smart Inventory -> Smart Host Filter -> Dynamic Host should say "ansible_facts" to access Ansible Facts, not "facts" in the Related Fields.
2. There's no documentation/screenshots/examples of using Ansible Facts through the Ansible Tower UI on the documentation page: http://docs.ansible.com/ansible-tower/latest/html/userguide/inventories.html#smart-inventories
   1.  Under: http://docs.ansible.com/ansible-tower/latest/html/userguide/inventories.html#smart-host-filter  There are only API examples, no UI examples.
3. Using Numbers in ansible_facts: Numeric values need to be quoted (see above)

The number 1 example that exemplifies the above: 
- How to Identify A CentOS 7 Server using Ansible Facts and Smart Inventories: `ansible_facts.ansible_lsb__major_release:"7"`

##### ENVIRONMENT
* AWX version: 3.2.1
* AWX install method: RPM?  We had support help us install it.
* Ansible version:  2.4.0.0
* Operating System: CentOS 7
* Web Browser: Chrome
user: rahst12
issue_642: state: open
title: Return job ID on provisioning callback
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API

##### SUMMARY

Regular job launch returns job ID.

Provisioning callback does not. Can't think of a security reason why not to.

##### ENVIRONMENT
* AWX version: 1.0.any

##### ADDITIONAL INFORMATION

user: wenottingham
issue_640: state: open
title: add last used datetime/user to unified_job_templates endpoint
body: Mockup:

<img width="501" alt="mockup" src="https://user-images.githubusercontent.com/1342624/32793015-c8326470-c932-11e7-889f-82fb349b42cb.png">

Currently, the list endpoint does not include the datetime or user's username/id necessary to add the "last used" row as present in the mockup.
user: jlmitch5
issue_617: state: open
title: RFE: Split LDAP Logging from Standard Tower Handler
body: ##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Feature Idea

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - API
 - UI

##### SUMMARY
Currently increasing log verbosity to debug LDAP increases verbosity for all Tower logs. If a user only requires LDAP logs, this introduces increased difficulty in filtering and managing those logs. This feature is to split off LDAP logging to be targeted specifically. A UI option to turn this on would be preferred.

user: jamesmarshall24
labels: component:authentication: For issues related to authentication
issue_612: state: open
title: UX improvement: Increase visibility of the ad hoc command feature.
body: Currently, the ability to run arbitrary Ansible commands against an inventory (or subset of hosts within an inventory) is provided in Tower, but in a somewhat obscure manner.  It is common for new users to ask how to do this within Tower.  We’ve outlined a few improvements that will help to make the feature more visible to users.  These include:
- **Changing the text “Run Commands” to “Ad Hoc Commands”.**  When this feature was originally implemented in 2015, the goal was to formalize the language around this new feature.  Since ad hoc commands is a common way to refer to running arbitrary Ansible commands (i.e. doing stuff with Ansible without a playbook), and is also what we refer to when discussing this feature as it relates to development and engineering, it probably makes the most sense to change it.
- **Always enable adhoc command buttons at the tom of Inventory host and group forms**.  Currently, the button is disabled until the user “selects” (clicks the checkbox) at least one host/group in the relevant list.  This is confusing as the behavior isn’t explicitly outlined.  Rather, it makes more ux sense to allow the user to get to the adhoc commands interface, albeit with nothing defined in the limit field of this form, should they not have any hosts or groups checked.  The button will continue to have a white background, like other buttons that “add” panels on top of the current top-most interface pane.
- **Add an ad hoc command button to the /#/inventories route.**  This button should be blue with white text, as it will open an interface in a new context (something like /#/adhoc).  This new page will be the same form as the current adhoc form, but with an inventory lookup.  This should be more visible to new users who know they want to run an arbitrary Ansible command against some hosts, but may not be familiar with the nested inventory management flow as currently exists in the Tower inventory interface.

user: jlmitch5
issue_587: state: open
title: Team permissions don't appear in UI if there are no team members
body: ##### ISSUE TYPE
 - Bug Report

##### COMPONENT NAME
 - UI

##### SUMMARY

If you add permissions for a team with no members, they won't appear in the UI on the managed object.

##### STEPS TO REPRODUCE

- Create a team
- Don't put anyone in the team
- Go to some object
- Give that team a permission to the object

##### EXPECTED RESULTS

Some indication in that object's "Permissions" tab that a permission has been assigned to it.

##### ACTUAL RESULTS

No visible view of permissions unless
a) a user is added to the team
b) you go to the 'granted permissions' tab of the team

##### ADDITIONAL INFORMATION


user: wenottingham
issue_578: state: open
title: Feature idea: programmatic job/workflow templates & surveys in SCM
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY

We already pull playbooks from source control - it would be neat if the job template & workflow definitions (including surveys, potentially even roles) could be sourced from there as well.

(Probably a very large discussion of *how* this would work, and what to support, is required.)

##### ENVIRONMENT
* AWX version: any
##### ADDITIONAL INFORMATION

user: wenottingham
issue_576: state: open
title: Feature idea: be able to map *roles* via social/LDAP auth
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API

##### SUMMARY

Our social and LDAP auth can map users into orgs and teams by assorted attributes. 

The request is to be able to map them into *roles* (team admin, execute on inventory) via attributes.

##### ADDITIONAL INFORMATION

1. The syntax for this must be manageable in the interface. 

2. It could be argued that it might be simpler to define a team with the associated roles, and map into that.
user: wenottingham
labels: component:authentication: For issues related to authentication
issue_575: state: open
title: Feature idea: job records frozen after execution
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY

A job run links to the various items associated with the job.

However, these are all the current state of those items, which may bear zero relation to the state of those items when the job is launched.

As a auditing user looking at the history of job runs, I want to see in a job run the state of the job as it was launched and ran, rather than having to attempt to reconstruct it via activity stream entries if the inventory/credential/template/etc has changed since then.

(This also affects job relaunch.)

##### ADDITIONAL INFORMATION

This is almost certainly API-breaking, and might require rethinking of the database.
user: wenottingham
issue_556: state: open
title: Allow multiple IPs/FQDNs in RADIUS/TACACS+ Authentication
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
Currently AWX only supports a single IP/FQDN for the RADIUS and TACACS+ authentication method. I think that it should be support multiple IP/FQDN for the RADIUS and TACACS+.

##### ENVIRONMEN 
* AWX version: 1.0.X

##### STEPS TO REPRODUCE

1. Login as a Admin user via WebUI
2. SETTINGS > EDIT CONFIGURATION > AUTHENTICATION > SUB CATEGORY > RADIUS|TACACS+
3. RADIUS SERVER and TACACS+ SERVER parameters do not support multiple IP/FQDN

##### EXPECTED RESULTS

RADIUS SERVER and TACACS+ SERVER parameters can be set multiple IP/FQDN like LDAP_SERVER_URI

##### ACTUAL RESULTS

RADIUS SERVER and TACACS+ SERVER parameters do not support multiple IP/FQDN

##### ADDITIONAL INFORMATION

N/A


user: saito-hideki
labels: component:authentication: For issues related to authentication
issue_553: state: open
title: Feature request: additional Tower survey types
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY
Feature request to add a  listtype option in tower survey to correctly parse a list that you pass for a variable. As it stands now you have to pass a list in yml format and for user experience it would be nice if you could pass a list just comma separated or how you do it when you specify a --limit

##### ENVIRONMENT
* AWX version: 3.2
* AWX install method: Linxus
* Ansible version:  lastest
* Operating System: RHEL 7
* Web Browser: Chrome

##### STEPS TO REPRODUCE

No steps needed as it's a feature request.

##### EXPECTED RESULTS

##### ACTUAL RESULTS

##### ADDITIONAL INFORMATION


user: shunopoli
issue_526: state: open
title: Ability to store job templates in source control repo
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY
There should be a way for job templates to be source controlled repo aka git.

##### STEPS TO REPRODUCE

This feature can used  if we have 2 ansible instances. Dev and prod. And then if we have a promotion model for all our playbooks from dev to prod. But then right now the job templates needs to be created manually.


user: jainnikhil30
issue_508: state: open
title: Limit fields in API output
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API


##### SUMMARY
Add ability to limit fields in output for all get list requests (get projects list, get inventory list, get job templates list etc.)
`https://.../?fields=id,description`

##### EXPECTED RESULTS

Will be included only `id` and `description` fields in output json.


user: lorddaedra
issue_429: state: open
title: Feature: team-centric permissions
body: ##### ISSUE TYPE
 - Feature Idea - Documentation

##### COMPONENT NAME
 - API

##### SUMMARY

Piggybacking on https://github.com/ansible/awx/issues/166, the idea is that things created by a user in a team are created in a 'team' context by default and accessible by that team.

Example:
- Credentials created by the user are automatically assigned to the team (not the user)
- JTs created by the user are automatically permissioned to the team
- Schedules created by the user are editiable and manageable by the team

##### ADDITIONAL INFORMATION

I think to do this in the most user-obvious and "makes sense" way, we'd need to logically map "the team that gave the user permission to do the thing" -> "the team that is assigned to it."

For example, a user may be in 3 teams A, B, and C, but if team B is the one who can access the job template, team B is the one that can modify the schedules they create for it.

user: wenottingham
issue_428: state: open
title: Feature idea: community repos of AWX addons
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - None Of The Above

##### SUMMARY

We've got a variety of ways AWX can be extended by users, including:
- inventory scripts
- inventory plugins (c.f. #171)
- custom credentials
- logging integrations (pending #170)
- notifications (pending #170)

It would be interesting to have ways for users to share these items. Maybe build into/off of Galaxy?

##### ENVIRONMENT
* AWX version: all

##### ADDITIONAL INFORMATION


user: wenottingham
issue_423: state: open
title: Improve LDAP User Search filter validation
body: ##### ISSUE TYPE
<!--- Pick one below and delete the rest: -->
 - Bug Report

##### COMPONENT NAME
<!-- Pick the area of AWX for this issue, you can have multiple, delete the rest: -->
 - UI

##### SUMMARY
<!-- Briefly describe the problem. -->
Validation fails on complex LDAP User Search filters.

##### ENVIRONMENT
<!--
* AWX version: 1.0.1.8
* AWX install method: docker on linux
* Ansible version:  2.4.0
* Operating System: CentOS 7
* Web Browser: Firefox 55.0.3
-->

##### STEPS TO REPRODUCE

<!-- For bugs, please show exactly how to reproduce the problem. For new
features, show how the feature would be used.  -->

For example trying to use a nested group search filter will trigger "Invalid filter" error.

```json
[
 "ou=Hosting,dc=domain,dc=local",
 "SCOPE_SUBTREE",
 "(&(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=CN=app_awx_users,ou=awx,ou=applicationgroups,ou=hosting,dc=domain,dc=local)(sAMAccountName=%(user)s))"
]
```

That means that the valid users are members of nested groups that are in turn members of the APP_AWX_Users group. This is common in large AD because it's not realistic to add individual users to an application group when you need access for entire departments.

##### EXPECTED RESULTS

<!-- For bug reports, what did you expect to happen when running the steps
above? -->

Save the form.

##### ACTUAL RESULTS

<!-- For bug reports, what actually happened? -->

Form is not saved, red text appears under Ldap User Search box saying "Invalid filter: ...".

##### ADDITIONAL INFORMATION

<!-- Include any links to sosreport, database dumps, screenshots or other
information. -->

My LDAP backend is Microsoft AD 2008 DFL.

I have tried using the Ldap Group Type and Ldap Require Group to set a parent group with group members but none of the Group Types with Nested in the name have worked to lookup my user which is nested in one of the child-group members of the specified group DN in LDAP Require Group.

So when this doesn't work I use a more complex filter to search nested groups and that's when I ran into the validation bug. 

I did not submit a PR immediately because I think there should be a discussion whether this type of validation of LDAP filters is sound or not. And if the fix should be to add more characters to the regex so that this one example of a complex filter passes, or to avoid doing regex validation of LDAP filters altogether. 

Speaking to a person on IRC they claim that with an IPA backend and Group Type set to NestedMemberDNGroupType they are able to use nested group memberships without a complex filter. 

I am unable to do this with an AD 2008 DFL backend. Unless I disable the regex validation and use a complex filter like the example I provided earlier.
user: stemid
issue_364: state: open
title: Produce "changed" status for inventory imports
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API

##### SUMMARY
When you run a playbook, it ends with a summary of what hosts were changed.

Not so for inventory imports. For the purpose of allowing tools that integrate with AWX to write idempotent logic, we should produce a simple True/False metric with inventory imports that signifies whether any host/group/variables content was changed, or it if was an effective no-op.

##### ENVIRONMENT
* AWX version: all
* AWX install method: N/A
* Ansible version:  all

##### EXPECTED RESULTS

A "changed" flag at the end of an inventory import. Possibly in the API for inventory imports.

##### ACTUAL RESULTS

Logs, but these are non-obvious and likely incomplete.

##### ADDITIONAL INFORMATION

Someone using the awx-manage inventory import command might also like to have this info.

This could also apply for system jobs.

user: AlanCoding
issue_347: state: open
title: Feature: improve display of key-based credentials
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY

Example, from GitHub:

![screenshot from 2016-08-26 15-41-33](https://cloud.githubusercontent.com/assets/5208768/18018209/a1d31c9a-6ba3-11e6-86bd-d91d9871bc18.png)

This provides more meaningful content on the key than our current `$encrypted$` display.

##### ADDITIONAL INFORMATION

user: wenottingham
issue_346: state: open
title: Feature: link to module docs from event output
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY

When launching an ad_hoc command, we link to the ansible module documentation for the module selected.  It would be nice to do this throughout the application, specifically ...

* [ ] ad_hoc job_detail page
* [ ] host event modal

![image](https://cloud.githubusercontent.com/assets/1051173/20677839/88f95c94-b562-11e6-91ef-24feb3779cd7.png)

##### ADDITIONAL INFORMATION

user: wenottingham
issue_329: state: open
title: Add survey multi-select option to choose playbook tags to run
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - UI

##### SUMMARY

When a job template is to be run at different times with different tags, the only prompting currently available is the Prompt on Launch option, which requires users to enter each desired tag explicitly and without prompting.

##### ENVIRONMENT

* AWX 1.0.0
* Ansible 2.3.2

##### STEPS TO REPRODUCE

This suggestion is to add a survey-like multi-select dialog to prompting options for job tags in template runs.  This would also allow for a default selection to be established.  The list could be either populated manually to avoid the need for parsing the playbook in advance of running it.

user: ghost
issue_308: state: open
title: Allow synchronization of LDAP directory data with SAML authentication
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY

Essentially, many organizations use SAML to handle authentication, with LDAP to handle authorization (via groups/teams).

AWX should support the same scenario, where users log in via SAML, but their groups/orgs/teams come from LDAP.

##### ADDITIONAL INFORMATION


user: wenottingham
labels: component:authentication: For issues related to authentication
issue_289: state: open
title: Fan-out project updates across cluster
body: ##### ISSUE TYPE
 - Feature Idea

##### SUMMARY

As an extension of #287, this issue is to implement the ability to easily fan-out a project update to all nodes in the cluster at once.

With 287 solved, this means that subsequent jobs will not need access to source control. Without the fan-out ability, the solution to low-availability source control will only work for a standalone deployment of AWX. The fan-out will allow a user to prepare their entire cluster for continuous operation with total loss of connectivity to source control.

##### STEPS TO REPRODUCE

 - Deploy AWX with multiple instances in the cluster
 - Update a project

##### EXPECTED RESULTS

The ability to have this update happen on all nodes on the cluster - bring them all up to sync with the current source control, such that subsequent jobs using that project do not need to reach out to source control.

##### ACTUAL RESULTS

Can not do this.

user: AlanCoding
issue_286: state: open
title: Feature: multiple machine credentials / per-machine credentials
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY

At a high level, there are two 'simple' use cases:
- attach multiple ssh keys to a playbook run
- assign credentials directly to machines/inventories to use in job templates

However, the current model proposes complications.

- `ansible_user` is encoded in the credential, and passed via `-u` to `ansible-playbook`. This causes an issue with multiple credentials in a playbook run due to conflicts.
- same as above, but with privilege escalation information (again, passed on the ansible-playbook commandline)
- How do you 'expose' credentials at the machine level? If it's just ssh keys, do you attach them all to the keyring and let SSH sort it out? This could break playbooks.
- Similarly, do you expose them as variables on inventory/group/hosts? If so, how?
- If credentials are attached to inventory/groups/hosts, you likely have multiple ones for each potential group/host. How do you select the appropriate one in a sane UI?
- prompting, RBAC ... argh

##### ADDITIONAL INFORMATION

Here Be Dragons.

This cannot be addressed without creating a new model to pass credential information to playbook runs, which most likely involves ansible having a new facility or method to inejct this data.

The current best workaround is to just set `ansible_user`/`ansible_password` at the host or group level, which *can* utilize an ansible lookup plugin.
user: wenottingham
issue_278: state: open
title: Feature idea: user preferences
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY

Right now, we only have system-wide configuration. We should allow for user preferences as a building block of other features.

This could be database or local storage.

Example user preferences:
- saved searches for different areas of Tower
- default page size
- default 'sort by' preferences for different lists
- other things as new views appear

##### ADDITIONAL INFORMATION


user: wenottingham
issue_277: state: open
title: Feature idea: multiple credentials on inventory sources
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY

In AWX, we allow multiple credentials on an job template, so someone could have a job template that uses all of:

- AWS
- GCE
- Azure
- some custom stuff

We should do the same for inventory sources (at least, custom ones) - a user who does the above likely has an inventory that has all of the above in it.

##### ADDITIONAL INFORMATION

This does *not* mean multiple machine credentials ... that is a much different ask.

user: wenottingham
issue_170: state: open
title: Feature: move notification hooks & logging hooks to a defined plugin model
body: ##### ISSUE TYPE
 - Feature Idea

##### COMPONENT NAME
 - API
 - UI

##### SUMMARY
Right now both notification types and logging hooks are defined in AWX directly; the set cannot be extended without modifications to core AWX code and models.

It may be preferable to have them be more pluggable, such that the set can be extended without that level of surgery.

We'd likely need AWX Settings to be extensible as well in this way.

##### ADDITIONAL INFORMATION


user: wenottingham
issue_20: state: open
title: Feature: Programmable surveys
body: AWX Feature Spec - Programmable Surveys
=======================================

User Persona
------------
Administrator delegating jobs to user
Delegated automation user

Usage Cases
-----------
High-level:

* Administrator wants to present to the user a list of builds to choose to deploy.
* Administrator wants to present to the user a verified list of configuration parameters to push to the chosen network devices.
* Adminsitrator wants to present survey chocies that depend on prior survey choices, such as a choice to select an AWS region based on 'AWS' being a prior survey answer.

API Considerations
------------------
We must keep the survey JSON specification stable, or CLEARLY notify users when it changes. This may require a v2 survey spec.

http://json-schema.org/ may be of use.

UI/UX Considerations
--------------------
Larger surveys should have options to collapse questions until needed. (c.f. https://github.com/ansible/awx/issues/290)

Docs
----
Should have sample survey examples

QA Suggestions
--------------

Notes
-----

Updates/Changelog
-----------------
2017-09-06: initial/updated spec
2017-09-25: added note about collapsible surveys 
user: wenottingham