mirror of
https://github.com/ZwareBear/awx.git
synced 2026-03-20 07:43:35 -05:00
Merge branch 'devel' into feature_web-task-split
This commit is contained in:
22
.github/workflows/devel_images.yml
vendored
22
.github/workflows/devel_images.yml
vendored
@@ -7,6 +7,7 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- devel
|
- devel
|
||||||
- release_*
|
- release_*
|
||||||
|
- feature_*
|
||||||
jobs:
|
jobs:
|
||||||
push:
|
push:
|
||||||
if: endsWith(github.repository, '/awx') || startsWith(github.ref, 'refs/heads/release_')
|
if: endsWith(github.repository, '/awx') || startsWith(github.ref, 'refs/heads/release_')
|
||||||
@@ -20,6 +21,12 @@ jobs:
|
|||||||
- name: Get python version from Makefile
|
- name: Get python version from Makefile
|
||||||
run: echo py_version=`make PYTHON_VERSION` >> $GITHUB_ENV
|
run: echo py_version=`make PYTHON_VERSION` >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Set lower case owner name
|
||||||
|
run: |
|
||||||
|
echo "OWNER_LC=${OWNER,,}" >>${GITHUB_ENV}
|
||||||
|
env:
|
||||||
|
OWNER: '${{ github.repository_owner }}'
|
||||||
|
|
||||||
- name: Install python ${{ env.py_version }}
|
- name: Install python ${{ env.py_version }}
|
||||||
uses: actions/setup-python@v2
|
uses: actions/setup-python@v2
|
||||||
with:
|
with:
|
||||||
@@ -31,15 +38,18 @@ jobs:
|
|||||||
|
|
||||||
- name: Pre-pull image to warm build cache
|
- name: Pre-pull image to warm build cache
|
||||||
run: |
|
run: |
|
||||||
docker pull ghcr.io/${{ github.repository_owner }}/awx_devel:${GITHUB_REF##*/} || :
|
docker pull ghcr.io/${OWNER_LC}/awx_devel:${GITHUB_REF##*/} || :
|
||||||
docker pull ghcr.io/${{ github.repository_owner }}/awx_kube_devel:${GITHUB_REF##*/} || :
|
docker pull ghcr.io/${OWNER_LC}/awx_kube_devel:${GITHUB_REF##*/} || :
|
||||||
|
docker pull ghcr.io/${OWNER_LC}/awx:${GITHUB_REF##*/} || :
|
||||||
|
|
||||||
- name: Build images
|
- name: Build images
|
||||||
run: |
|
run: |
|
||||||
DEV_DOCKER_TAG_BASE=ghcr.io/${{ github.repository_owner }} COMPOSE_TAG=${GITHUB_REF##*/} make docker-compose-build
|
DEV_DOCKER_TAG_BASE=ghcr.io/${OWNER_LC} COMPOSE_TAG=${GITHUB_REF##*/} make docker-compose-build
|
||||||
DEV_DOCKER_TAG_BASE=ghcr.io/${{ github.repository_owner }} COMPOSE_TAG=${GITHUB_REF##*/} make awx-kube-dev-build
|
DEV_DOCKER_TAG_BASE=ghcr.io/${OWNER_LC} COMPOSE_TAG=${GITHUB_REF##*/} make awx-kube-dev-build
|
||||||
|
DEV_DOCKER_TAG_BASE=ghcr.io/${OWNER_LC} COMPOSE_TAG=${GITHUB_REF##*/} make awx-kube-build
|
||||||
|
|
||||||
- name: Push image
|
- name: Push image
|
||||||
run: |
|
run: |
|
||||||
docker push ghcr.io/${{ github.repository_owner }}/awx_devel:${GITHUB_REF##*/}
|
docker push ghcr.io/${OWNER_LC}/awx_devel:${GITHUB_REF##*/}
|
||||||
docker push ghcr.io/${{ github.repository_owner }}/awx_kube_devel:${GITHUB_REF##*/}
|
docker push ghcr.io/${OWNER_LC}/awx_kube_devel:${GITHUB_REF##*/}
|
||||||
|
docker push ghcr.io/${OWNER_LC}/awx:${GITHUB_REF##*/}
|
||||||
|
|||||||
7
Makefile
7
Makefile
@@ -555,10 +555,8 @@ docker-compose-build:
|
|||||||
--cache-from=$(DEV_DOCKER_TAG_BASE)/awx_devel:$(COMPOSE_TAG) .
|
--cache-from=$(DEV_DOCKER_TAG_BASE)/awx_devel:$(COMPOSE_TAG) .
|
||||||
|
|
||||||
docker-clean:
|
docker-clean:
|
||||||
$(foreach container_id,$(shell docker ps -f name=tools_awx -aq && docker ps -f name=tools_receptor -aq),docker stop $(container_id); docker rm -f $(container_id);)
|
-$(foreach container_id,$(shell docker ps -f name=tools_awx -aq && docker ps -f name=tools_receptor -aq),docker stop $(container_id); docker rm -f $(container_id);)
|
||||||
if [ "$(shell docker images | grep awx_devel)" ]; then \
|
-$(foreach image_id,$(shell docker images --filter=reference='*awx_devel*' -aq),docker rmi --force $(image_id);)
|
||||||
docker images | grep awx_devel | awk '{print $$3}' | xargs docker rmi --force; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
docker-clean-volumes: docker-compose-clean docker-compose-container-group-clean
|
docker-clean-volumes: docker-compose-clean docker-compose-container-group-clean
|
||||||
docker volume rm -f tools_awx_db tools_grafana_storage tools_prometheus_storage $(docker volume ls --filter name=tools_redis_socket_ -q)
|
docker volume rm -f tools_awx_db tools_grafana_storage tools_prometheus_storage $(docker volume ls --filter name=tools_redis_socket_ -q)
|
||||||
@@ -592,6 +590,7 @@ VERSION:
|
|||||||
PYTHON_VERSION:
|
PYTHON_VERSION:
|
||||||
@echo "$(PYTHON)" | sed 's:python::'
|
@echo "$(PYTHON)" | sed 's:python::'
|
||||||
|
|
||||||
|
.PHONY: Dockerfile
|
||||||
Dockerfile: tools/ansible/roles/dockerfile/templates/Dockerfile.j2
|
Dockerfile: tools/ansible/roles/dockerfile/templates/Dockerfile.j2
|
||||||
ansible-playbook tools/ansible/dockerfile.yml -e receptor_image=$(RECEPTOR_IMAGE)
|
ansible-playbook tools/ansible/dockerfile.yml -e receptor_image=$(RECEPTOR_IMAGE)
|
||||||
|
|
||||||
|
|||||||
@@ -233,7 +233,7 @@ def projects_by_scm_type(since, **kwargs):
|
|||||||
return counts
|
return counts
|
||||||
|
|
||||||
|
|
||||||
@register('instance_info', '1.2', description=_('Cluster topology and capacity'))
|
@register('instance_info', '1.3', description=_('Cluster topology and capacity'))
|
||||||
def instance_info(since, include_hostnames=False, **kwargs):
|
def instance_info(since, include_hostnames=False, **kwargs):
|
||||||
info = {}
|
info = {}
|
||||||
# Use same method that the TaskManager does to compute consumed capacity without querying all running jobs for each Instance
|
# Use same method that the TaskManager does to compute consumed capacity without querying all running jobs for each Instance
|
||||||
|
|||||||
@@ -282,6 +282,16 @@ register(
|
|||||||
placeholder={'HTTP_PROXY': 'myproxy.local:8080'},
|
placeholder={'HTTP_PROXY': 'myproxy.local:8080'},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
register(
|
||||||
|
'AWX_RUNNER_KEEPALIVE_SECONDS',
|
||||||
|
field_class=fields.IntegerField,
|
||||||
|
label=_('K8S Ansible Runner Keep-Alive Message Interval'),
|
||||||
|
help_text=_('Only applies to jobs running in a Container Group. If not 0, send a message every so-many seconds to keep connection open.'),
|
||||||
|
category=_('Jobs'),
|
||||||
|
category_slug='jobs',
|
||||||
|
placeholder=240, # intended to be under common 5 minute idle timeout
|
||||||
|
)
|
||||||
|
|
||||||
register(
|
register(
|
||||||
'GALAXY_TASK_ENV',
|
'GALAXY_TASK_ENV',
|
||||||
field_class=fields.KeyValueField,
|
field_class=fields.KeyValueField,
|
||||||
|
|||||||
@@ -85,6 +85,8 @@ class RunnerCallback:
|
|||||||
# which generate job events from two 'streams':
|
# which generate job events from two 'streams':
|
||||||
# ansible-inventory and the awx.main.commands.inventory_import
|
# ansible-inventory and the awx.main.commands.inventory_import
|
||||||
# logger
|
# logger
|
||||||
|
if event_data.get('event') == 'keepalive':
|
||||||
|
return
|
||||||
|
|
||||||
if event_data.get(self.event_data_key, None):
|
if event_data.get(self.event_data_key, None):
|
||||||
if self.event_data_key != 'job_id':
|
if self.event_data_key != 'job_id':
|
||||||
|
|||||||
@@ -526,6 +526,10 @@ class AWXReceptorJob:
|
|||||||
pod_spec['spec']['containers'][0]['image'] = ee.image
|
pod_spec['spec']['containers'][0]['image'] = ee.image
|
||||||
pod_spec['spec']['containers'][0]['args'] = ['ansible-runner', 'worker', '--private-data-dir=/runner']
|
pod_spec['spec']['containers'][0]['args'] = ['ansible-runner', 'worker', '--private-data-dir=/runner']
|
||||||
|
|
||||||
|
if settings.AWX_RUNNER_KEEPALIVE_SECONDS:
|
||||||
|
pod_spec['spec']['containers'][0].setdefault('env', [])
|
||||||
|
pod_spec['spec']['containers'][0]['env'].append({'name': 'ANSIBLE_RUNNER_KEEPALIVE_SECONDS', 'value': str(settings.AWX_RUNNER_KEEPALIVE_SECONDS)})
|
||||||
|
|
||||||
# Enforce EE Pull Policy
|
# Enforce EE Pull Policy
|
||||||
pull_options = {"always": "Always", "missing": "IfNotPresent", "never": "Never"}
|
pull_options = {"always": "Always", "missing": "IfNotPresent", "never": "Never"}
|
||||||
if self.task and self.task.instance.execution_environment:
|
if self.task and self.task.instance.execution_environment:
|
||||||
|
|||||||
@@ -936,6 +936,11 @@ AWX_RUNNER_OMIT_ENV_FILES = True
|
|||||||
# Allow ansible-runner to save ansible output (may cause performance issues)
|
# Allow ansible-runner to save ansible output (may cause performance issues)
|
||||||
AWX_RUNNER_SUPPRESS_OUTPUT_FILE = True
|
AWX_RUNNER_SUPPRESS_OUTPUT_FILE = True
|
||||||
|
|
||||||
|
# https://github.com/ansible/ansible-runner/pull/1191/files
|
||||||
|
# Interval in seconds between the last message and keep-alive messages that
|
||||||
|
# ansible-runner will send
|
||||||
|
AWX_RUNNER_KEEPALIVE_SECONDS = 0
|
||||||
|
|
||||||
# Delete completed work units in receptor
|
# Delete completed work units in receptor
|
||||||
RECEPTOR_RELEASE_WORK = True
|
RECEPTOR_RELEASE_WORK = True
|
||||||
|
|
||||||
|
|||||||
@@ -150,6 +150,11 @@ function JobsEdit() {
|
|||||||
type={options?.SCHEDULE_MAX_JOBS ? 'number' : undefined}
|
type={options?.SCHEDULE_MAX_JOBS ? 'number' : undefined}
|
||||||
isRequired={Boolean(options?.SCHEDULE_MAX_JOBS)}
|
isRequired={Boolean(options?.SCHEDULE_MAX_JOBS)}
|
||||||
/>
|
/>
|
||||||
|
<InputField
|
||||||
|
name="AWX_RUNNER_KEEPALIVE_SECONDS"
|
||||||
|
config={jobs.AWX_RUNNER_KEEPALIVE_SECONDS}
|
||||||
|
type="number"
|
||||||
|
/>
|
||||||
<InputField
|
<InputField
|
||||||
name="DEFAULT_JOB_TIMEOUT"
|
name="DEFAULT_JOB_TIMEOUT"
|
||||||
config={jobs.DEFAULT_JOB_TIMEOUT}
|
config={jobs.DEFAULT_JOB_TIMEOUT}
|
||||||
|
|||||||
@@ -344,6 +344,16 @@
|
|||||||
"category_slug": "jobs",
|
"category_slug": "jobs",
|
||||||
"default": 10
|
"default": 10
|
||||||
},
|
},
|
||||||
|
"AWX_RUNNER_KEEPALIVE_SECONDS": {
|
||||||
|
"type": "integer",
|
||||||
|
"required": true,
|
||||||
|
"label": "K8S Ansible Runner Keep-Alive Message Interval",
|
||||||
|
"help_text": "Only applies to K8S deployments and container_group jobs. If not 0, send a message every so-many seconds to keep connection open.",
|
||||||
|
"category": "Jobs",
|
||||||
|
"category_slug": "jobs",
|
||||||
|
"placeholder": 240,
|
||||||
|
"default": 0
|
||||||
|
},
|
||||||
"AWX_ANSIBLE_CALLBACK_PLUGINS": {
|
"AWX_ANSIBLE_CALLBACK_PLUGINS": {
|
||||||
"type": "list",
|
"type": "list",
|
||||||
"required": false,
|
"required": false,
|
||||||
@@ -4098,6 +4108,15 @@
|
|||||||
"category_slug": "jobs",
|
"category_slug": "jobs",
|
||||||
"defined_in_file": false
|
"defined_in_file": false
|
||||||
},
|
},
|
||||||
|
"AWX_RUNNER_KEEPALIVE_SECONDS": {
|
||||||
|
"type": "integer",
|
||||||
|
"label": "K8S Ansible Runner Keep-Alive Message Interval",
|
||||||
|
"help_text": "Only applies to K8S deployments and container_group jobs. If not 0, send a message every so-many seconds to keep connection open.",
|
||||||
|
"category": "Jobs",
|
||||||
|
"category_slug": "jobs",
|
||||||
|
"placeholder": 240,
|
||||||
|
"default": 0
|
||||||
|
},
|
||||||
"AWX_ANSIBLE_CALLBACK_PLUGINS": {
|
"AWX_ANSIBLE_CALLBACK_PLUGINS": {
|
||||||
"type": "list",
|
"type": "list",
|
||||||
"label": "Ansible Callback Plugins",
|
"label": "Ansible Callback Plugins",
|
||||||
|
|||||||
@@ -51,6 +51,7 @@
|
|||||||
"STDOUT_MAX_BYTES_DISPLAY":1048576,
|
"STDOUT_MAX_BYTES_DISPLAY":1048576,
|
||||||
"EVENT_STDOUT_MAX_BYTES_DISPLAY":1024,
|
"EVENT_STDOUT_MAX_BYTES_DISPLAY":1024,
|
||||||
"SCHEDULE_MAX_JOBS":10,
|
"SCHEDULE_MAX_JOBS":10,
|
||||||
|
"AWX_RUNNER_KEEPALIVE_SECONDS": 0,
|
||||||
"AWX_ANSIBLE_CALLBACK_PLUGINS":[],
|
"AWX_ANSIBLE_CALLBACK_PLUGINS":[],
|
||||||
"DEFAULT_JOB_TIMEOUT":0,
|
"DEFAULT_JOB_TIMEOUT":0,
|
||||||
"DEFAULT_JOB_IDLE_TIMEOUT":0,
|
"DEFAULT_JOB_IDLE_TIMEOUT":0,
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
"STDOUT_MAX_BYTES_DISPLAY": 1048576,
|
"STDOUT_MAX_BYTES_DISPLAY": 1048576,
|
||||||
"EVENT_STDOUT_MAX_BYTES_DISPLAY": 1024,
|
"EVENT_STDOUT_MAX_BYTES_DISPLAY": 1024,
|
||||||
"SCHEDULE_MAX_JOBS": 10,
|
"SCHEDULE_MAX_JOBS": 10,
|
||||||
|
"AWX_RUNNER_KEEPALIVE_SECONDS": 0,
|
||||||
"AWX_ANSIBLE_CALLBACK_PLUGINS": [],
|
"AWX_ANSIBLE_CALLBACK_PLUGINS": [],
|
||||||
"DEFAULT_JOB_TIMEOUT": 0,
|
"DEFAULT_JOB_TIMEOUT": 0,
|
||||||
"DEFAULT_JOB_IDLE_TIMEOUT": 0,
|
"DEFAULT_JOB_IDLE_TIMEOUT": 0,
|
||||||
|
|||||||
Reference in New Issue
Block a user