From ef6297377b0a5bdb828f1bb42bb28b1e6e2da9bb Mon Sep 17 00:00:00 2001 From: beeankha Date: Tue, 16 Mar 2021 17:09:34 -0400 Subject: [PATCH 1/4] Enable Ansible version to be collected from EEs --- awx/main/analytics/collectors.py | 5 +++-- .../0133_unifiedjob_ansible_version.py | 18 ++++++++++++++++++ awx/main/models/unified_jobs.py | 7 +++++++ awx/main/tasks.py | 5 +++++ 4 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 awx/main/migrations/0133_unifiedjob_ansible_version.py diff --git a/awx/main/analytics/collectors.py b/awx/main/analytics/collectors.py index 89bc28ea56..1e508f5b1a 100644 --- a/awx/main/analytics/collectors.py +++ b/awx/main/analytics/collectors.py @@ -311,7 +311,7 @@ def events_table(since, full_path, until, **kwargs): return _copy_table(table='events', query=events_query, path=full_path) -@register('unified_jobs_table', '1.2', format='csv', description=_('Data on jobs run'), expensive=True) +@register('unified_jobs_table', '1.3', format='csv', description=_('Data on jobs run'), expensive=True) def unified_jobs_table(since, full_path, until, **kwargs): unified_job_query = '''COPY (SELECT main_unifiedjob.id, main_unifiedjob.polymorphic_ctype_id, @@ -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/0133_unifiedjob_ansible_version.py b/awx/main/migrations/0133_unifiedjob_ansible_version.py new file mode 100644 index 0000000000..6e726b5f6d --- /dev/null +++ b/awx/main/migrations/0133_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', '0132_instancegroup_is_container_group'), + ] + + 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=50), + ), + ] diff --git a/awx/main/models/unified_jobs.py b/awx/main/models/unified_jobs.py index 45d7739ee3..d7269d167b 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=50, + 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..d93a8300ff 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,10 @@ class BaseTask(object): ee_collections_info = json.loads(ee_json_info.read()) instance.installed_collections = ee_collections_info instance.save(update_fields=['installed_collections']) + 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): # From 2a9d728b708962e181c82c6e5c793f2c6985b684 Mon Sep 17 00:00:00 2001 From: beeankha Date: Tue, 16 Mar 2021 17:48:20 -0400 Subject: [PATCH 2/4] Set max string length to a wayyyy bigger number just in case --- awx/main/analytics/collectors.py | 2 +- awx/main/migrations/0133_unifiedjob_ansible_version.py | 2 +- awx/main/models/unified_jobs.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/awx/main/analytics/collectors.py b/awx/main/analytics/collectors.py index 1e508f5b1a..d280ffe753 100644 --- a/awx/main/analytics/collectors.py +++ b/awx/main/analytics/collectors.py @@ -311,7 +311,7 @@ def events_table(since, full_path, until, **kwargs): return _copy_table(table='events', query=events_query, path=full_path) -@register('unified_jobs_table', '1.3', format='csv', description=_('Data on jobs run'), expensive=True) +@register('unified_jobs_table', '1.2', format='csv', description=_('Data on jobs run'), expensive=True) def unified_jobs_table(since, full_path, until, **kwargs): unified_job_query = '''COPY (SELECT main_unifiedjob.id, main_unifiedjob.polymorphic_ctype_id, diff --git a/awx/main/migrations/0133_unifiedjob_ansible_version.py b/awx/main/migrations/0133_unifiedjob_ansible_version.py index 6e726b5f6d..1540e62dda 100644 --- a/awx/main/migrations/0133_unifiedjob_ansible_version.py +++ b/awx/main/migrations/0133_unifiedjob_ansible_version.py @@ -13,6 +13,6 @@ class Migration(migrations.Migration): 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=50), + 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 d7269d167b..e803a29c0c 100644 --- a/awx/main/models/unified_jobs.py +++ b/awx/main/models/unified_jobs.py @@ -729,7 +729,7 @@ class UnifiedJob(PolymorphicModel, PasswordFieldsModel, CommonModelNameNotUnique help_text=_("The Collections names and versions installed in the execution environment."), ) ansible_version = models.CharField( - max_length=50, + max_length=255, blank=True, default='', editable=False, From dca29e756d8a44612325d38f1303aec97339976b Mon Sep 17 00:00:00 2001 From: beeankha Date: Thu, 18 Mar 2021 13:13:21 -0400 Subject: [PATCH 3/4] Update migration file order and name --- ...ob_ansible_version.py => 0134_unifiedjob_ansible_version.py} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename awx/main/migrations/{0133_unifiedjob_ansible_version.py => 0134_unifiedjob_ansible_version.py} (88%) diff --git a/awx/main/migrations/0133_unifiedjob_ansible_version.py b/awx/main/migrations/0134_unifiedjob_ansible_version.py similarity index 88% rename from awx/main/migrations/0133_unifiedjob_ansible_version.py rename to awx/main/migrations/0134_unifiedjob_ansible_version.py index 1540e62dda..af5f226f24 100644 --- a/awx/main/migrations/0133_unifiedjob_ansible_version.py +++ b/awx/main/migrations/0134_unifiedjob_ansible_version.py @@ -6,7 +6,7 @@ from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('main', '0132_instancegroup_is_container_group'), + ('main', '0133_centrify_vault_credtype'), ] operations = [ From 39d785070c3b7a06804cced1a057c46f9bd870dd Mon Sep 17 00:00:00 2001 From: beeankha Date: Thu, 18 Mar 2021 13:51:54 -0400 Subject: [PATCH 4/4] Check for the existence of ansible.txt file explicitly --- awx/main/tasks.py | 1 + 1 file changed, 1 insertion(+) diff --git a/awx/main/tasks.py b/awx/main/tasks.py index d93a8300ff..dcf1fe5867 100644 --- a/awx/main/tasks.py +++ b/awx/main/tasks.py @@ -1196,6 +1196,7 @@ 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