diff --git a/awx/main/analytics/collectors.py b/awx/main/analytics/collectors.py index 89bc28ea56..d280ffe753 100644 --- a/awx/main/analytics/collectors.py +++ b/awx/main/analytics/collectors.py @@ -335,7 +335,8 @@ def unified_jobs_table(since, full_path, until, **kwargs): main_unifiedjob.elapsed, main_unifiedjob.job_explanation, main_unifiedjob.instance_group_id, - main_unifiedjob.installed_collections + main_unifiedjob.installed_collections, + main_unifiedjob.ansible_version FROM main_unifiedjob JOIN django_content_type ON main_unifiedjob.polymorphic_ctype_id = django_content_type.id LEFT JOIN main_job ON main_unifiedjob.id = main_job.unifiedjob_ptr_id diff --git a/awx/main/migrations/0134_unifiedjob_ansible_version.py b/awx/main/migrations/0134_unifiedjob_ansible_version.py new file mode 100644 index 0000000000..af5f226f24 --- /dev/null +++ b/awx/main/migrations/0134_unifiedjob_ansible_version.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.16 on 2021-03-16 20:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0133_centrify_vault_credtype'), + ] + + operations = [ + migrations.AddField( + model_name='unifiedjob', + name='ansible_version', + field=models.CharField(blank=True, default='', editable=False, help_text='The version of Ansible Core installed in the execution environment.', max_length=255), + ), + ] diff --git a/awx/main/models/unified_jobs.py b/awx/main/models/unified_jobs.py index 45d7739ee3..e803a29c0c 100644 --- a/awx/main/models/unified_jobs.py +++ b/awx/main/models/unified_jobs.py @@ -728,6 +728,13 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique editable=False, help_text=_("The Collections names and versions installed in the execution environment."), ) + ansible_version = models.CharField( + max_length=255, + blank=True, + default='', + editable=False, + help_text=_("The version of Ansible Core installed in the execution environment."), + ) def get_absolute_url(self, request=None): RealClass = self.get_real_instance_class() diff --git a/awx/main/tasks.py b/awx/main/tasks.py index 0f02f3a507..dcf1fe5867 100644 --- a/awx/main/tasks.py +++ b/awx/main/tasks.py @@ -1185,6 +1185,7 @@ class BaseTask(object): job_profiling_dir = os.path.join(private_data_dir, 'artifacts/playbook_profiling') awx_profiling_dir = '/var/log/tower/playbook_profiling/' collections_info = os.path.join(private_data_dir, 'artifacts/', 'collections.json') + ansible_version_file = os.path.join(private_data_dir, 'artifacts/', 'ansible_version.txt') if not os.path.exists(awx_profiling_dir): os.mkdir(awx_profiling_dir) @@ -1195,6 +1196,11 @@ class BaseTask(object): ee_collections_info = json.loads(ee_json_info.read()) instance.installed_collections = ee_collections_info instance.save(update_fields=['installed_collections']) + if os.path.exists(ansible_version_file): + with open(ansible_version_file) as ee_ansible_info: + ansible_version_info = ee_ansible_info.readline() + instance.ansible_version = ansible_version_info + instance.save(update_fields=['ansible_version']) def event_handler(self, event_data): #