mirror of
https://github.com/ansible/awx.git
synced 2026-05-17 22:37:41 -02:30
Merge pull request #3051 from ryanpetrello/record-venv-usage
record the virtualenv used when a job or inventory sync runs Reviewed-by: https://github.com/softwarefactory-project-zuul[bot]
This commit is contained in:
@@ -2175,10 +2175,12 @@ class InventorySourceUpdateSerializer(InventorySourceSerializer):
|
|||||||
|
|
||||||
class InventoryUpdateSerializer(UnifiedJobSerializer, InventorySourceOptionsSerializer):
|
class InventoryUpdateSerializer(UnifiedJobSerializer, InventorySourceOptionsSerializer):
|
||||||
|
|
||||||
|
custom_virtualenv = serializers.ReadOnlyField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = InventoryUpdate
|
model = InventoryUpdate
|
||||||
fields = ('*', 'inventory', 'inventory_source', 'license_error', 'source_project_update',
|
fields = ('*', 'inventory', 'inventory_source', 'license_error', 'source_project_update',
|
||||||
'-controller_node',)
|
'custom_virtualenv', '-controller_node',)
|
||||||
|
|
||||||
def get_related(self, obj):
|
def get_related(self, obj):
|
||||||
res = super(InventoryUpdateSerializer, self).get_related(obj)
|
res = super(InventoryUpdateSerializer, self).get_related(obj)
|
||||||
@@ -3293,10 +3295,11 @@ class JobDetailSerializer(JobSerializer):
|
|||||||
playbook_counts = serializers.SerializerMethodField(
|
playbook_counts = serializers.SerializerMethodField(
|
||||||
help_text=_('A count of all plays and tasks for the job run.'),
|
help_text=_('A count of all plays and tasks for the job run.'),
|
||||||
)
|
)
|
||||||
|
custom_virtualenv = serializers.ReadOnlyField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Job
|
model = Job
|
||||||
fields = ('*', 'host_status_counts', 'playbook_counts',)
|
fields = ('*', 'host_status_counts', 'playbook_counts', 'custom_virtualenv')
|
||||||
|
|
||||||
def get_playbook_counts(self, obj):
|
def get_playbook_counts(self, obj):
|
||||||
task_count = obj.job_events.filter(event='playbook_on_task_start').count()
|
task_count = obj.job_events.filter(event='playbook_on_task_start').count()
|
||||||
|
|||||||
25
awx/main/migrations/0056_v350_custom_venv_history.py
Normal file
25
awx/main/migrations/0056_v350_custom_venv_history.py
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.11.16 on 2019-01-22 22:20
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('main', '0055_v340_add_grafana_notification'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='inventoryupdate',
|
||||||
|
name='custom_virtualenv',
|
||||||
|
field=models.CharField(blank=True, default=None, help_text='Local absolute file path containing a custom Python virtualenv to use', max_length=100, null=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='job',
|
||||||
|
name='custom_virtualenv',
|
||||||
|
field=models.CharField(blank=True, default=None, help_text='Local absolute file path containing a custom Python virtualenv to use', max_length=100, null=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -41,6 +41,7 @@ from awx.main.models.mixins import (
|
|||||||
ResourceMixin,
|
ResourceMixin,
|
||||||
TaskManagerInventoryUpdateMixin,
|
TaskManagerInventoryUpdateMixin,
|
||||||
RelatedJobsMixin,
|
RelatedJobsMixin,
|
||||||
|
CustomVirtualEnvMixin,
|
||||||
)
|
)
|
||||||
from awx.main.models.notifications import (
|
from awx.main.models.notifications import (
|
||||||
NotificationTemplate,
|
NotificationTemplate,
|
||||||
@@ -1622,7 +1623,7 @@ class InventorySource(UnifiedJobTemplate, InventorySourceOptions, RelatedJobsMix
|
|||||||
return InventoryUpdate.objects.filter(inventory_source=self)
|
return InventoryUpdate.objects.filter(inventory_source=self)
|
||||||
|
|
||||||
|
|
||||||
class InventoryUpdate(UnifiedJob, InventorySourceOptions, JobNotificationMixin, TaskManagerInventoryUpdateMixin):
|
class InventoryUpdate(UnifiedJob, InventorySourceOptions, JobNotificationMixin, TaskManagerInventoryUpdateMixin, CustomVirtualEnvMixin):
|
||||||
'''
|
'''
|
||||||
Internal job for tracking inventory updates from external sources.
|
Internal job for tracking inventory updates from external sources.
|
||||||
'''
|
'''
|
||||||
|
|||||||
@@ -490,7 +490,7 @@ class JobTemplate(UnifiedJobTemplate, JobOptions, SurveyJobTemplateMixin, Resour
|
|||||||
return UnifiedJob.objects.filter(unified_job_template=self)
|
return UnifiedJob.objects.filter(unified_job_template=self)
|
||||||
|
|
||||||
|
|
||||||
class Job(UnifiedJob, JobOptions, SurveyJobMixin, JobNotificationMixin, TaskManagerJobMixin):
|
class Job(UnifiedJob, JobOptions, SurveyJobMixin, JobNotificationMixin, TaskManagerJobMixin, CustomVirtualEnvMixin):
|
||||||
'''
|
'''
|
||||||
A job applies a project (with playbook) to an inventory source with a given
|
A job applies a project (with playbook) to an inventory source with a given
|
||||||
credential. It represents a single invocation of ansible-playbook with the
|
credential. It represents a single invocation of ansible-playbook with the
|
||||||
|
|||||||
@@ -948,6 +948,11 @@ class BaseTask(object):
|
|||||||
|
|
||||||
if not os.path.exists(settings.AWX_PROOT_BASE_PATH):
|
if not os.path.exists(settings.AWX_PROOT_BASE_PATH):
|
||||||
raise RuntimeError('AWX_PROOT_BASE_PATH=%s does not exist' % settings.AWX_PROOT_BASE_PATH)
|
raise RuntimeError('AWX_PROOT_BASE_PATH=%s does not exist' % settings.AWX_PROOT_BASE_PATH)
|
||||||
|
|
||||||
|
# store a record of the venv used at runtime
|
||||||
|
if hasattr(instance, 'custom_virtualenv'):
|
||||||
|
self.update_model(pk, custom_virtualenv=getattr(instance, 'ansible_virtualenv_path', settings.ANSIBLE_VENV_PATH))
|
||||||
|
|
||||||
# Fetch ansible version once here to support version-dependent features.
|
# Fetch ansible version once here to support version-dependent features.
|
||||||
kwargs['ansible_version'] = get_ansible_version()
|
kwargs['ansible_version'] = get_ansible_version()
|
||||||
kwargs['private_data_dir'] = self.build_private_data_dir(instance, **kwargs)
|
kwargs['private_data_dir'] = self.build_private_data_dir(instance, **kwargs)
|
||||||
|
|||||||
Reference in New Issue
Block a user