From 8c9544e5ed363ed477d7838e13d97ef88c7ad27c Mon Sep 17 00:00:00 2001 From: Jim Ladd Date: Wed, 13 Feb 2019 17:25:35 -0800 Subject: [PATCH 1/4] Add support for new ansible stats --- awx/api/serializers.py | 3 ++- awx/lib/awx_display_callback/module.py | 2 ++ .../0062_v350_new_playbook_stats.py | 25 +++++++++++++++++++ awx/main/models/events.py | 2 +- awx/main/models/jobs.py | 2 ++ 5 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 awx/main/migrations/0062_v350_new_playbook_stats.py diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 516491654b..22d65b7554 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -4038,7 +4038,8 @@ class JobHostSummarySerializer(BaseSerializer): class Meta: model = JobHostSummary fields = ('*', '-name', '-description', 'job', 'host', 'host_name', 'changed', - 'dark', 'failures', 'ok', 'processed', 'skipped', 'failed') + 'dark', 'failures', 'ok', 'processed', 'skipped', 'failed', + 'ignored', 'rescued') def get_related(self, obj): res = super(JobHostSummarySerializer, self).get_related(obj) diff --git a/awx/lib/awx_display_callback/module.py b/awx/lib/awx_display_callback/module.py index f9249e25e1..6d5e30d0d2 100644 --- a/awx/lib/awx_display_callback/module.py +++ b/awx/lib/awx_display_callback/module.py @@ -308,8 +308,10 @@ class BaseCallbackModule(CallbackBase): changed=stats.changed, dark=stats.dark, failures=stats.failures, + ignored=stats.ignored, ok=stats.ok, processed=stats.processed, + rescued=stats.rescued, skipped=stats.skipped ) diff --git a/awx/main/migrations/0062_v350_new_playbook_stats.py b/awx/main/migrations/0062_v350_new_playbook_stats.py new file mode 100644 index 0000000000..29ab8e7017 --- /dev/null +++ b/awx/main/migrations/0062_v350_new_playbook_stats.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.16 on 2019-02-14 00:44 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('main', '0061_v350_track_native_credentialtype_source'), + ] + + operations = [ + migrations.AddField( + model_name='jobhostsummary', + name='ignored', + field=models.PositiveIntegerField(default=0, editable=False), + ), + migrations.AddField( + model_name='jobhostsummary', + name='rescued', + field=models.PositiveIntegerField(default=0, editable=False), + ), + ] diff --git a/awx/main/models/events.py b/awx/main/models/events.py index b92866e889..f996cc123c 100644 --- a/awx/main/models/events.py +++ b/awx/main/models/events.py @@ -483,7 +483,7 @@ class JobEvent(BasePlaybookEvent): job = self.job for host in hostnames: host_stats = {} - for stat in ('changed', 'dark', 'failures', 'ok', 'processed', 'skipped'): + for stat in ('changed', 'dark', 'failures', 'ignored', 'ok', 'processed', 'rescued', 'skipped'): try: host_stats[stat] = self.event_data.get(stat, {}).get(host, 0) except AttributeError: # in case event_data[stat] isn't a dict. diff --git a/awx/main/models/jobs.py b/awx/main/models/jobs.py index 471eaafc91..3e0075d6fb 100644 --- a/awx/main/models/jobs.py +++ b/awx/main/models/jobs.py @@ -1123,8 +1123,10 @@ class JobHostSummary(CreatedModifiedModel): changed = models.PositiveIntegerField(default=0, editable=False) dark = models.PositiveIntegerField(default=0, editable=False) failures = models.PositiveIntegerField(default=0, editable=False) + ignored = models.PositiveIntegerField(default=0, editable=False) ok = models.PositiveIntegerField(default=0, editable=False) processed = models.PositiveIntegerField(default=0, editable=False) + rescued = models.PositiveIntegerField(default=0, editable=False) skipped = models.PositiveIntegerField(default=0, editable=False) failed = models.BooleanField(default=False, editable=False) From c6227797b47f01935a284f03f4ede043ada41cf4 Mon Sep 17 00:00:00 2001 From: Jim Ladd Date: Fri, 22 Feb 2019 14:07:07 -0800 Subject: [PATCH 2/4] Make new host summary fields backwards compatible --- awx/lib/awx_display_callback/module.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/awx/lib/awx_display_callback/module.py b/awx/lib/awx_display_callback/module.py index 6d5e30d0d2..1f67bfb684 100644 --- a/awx/lib/awx_display_callback/module.py +++ b/awx/lib/awx_display_callback/module.py @@ -308,10 +308,10 @@ class BaseCallbackModule(CallbackBase): changed=stats.changed, dark=stats.dark, failures=stats.failures, - ignored=stats.ignored, + ignored=getattr(stats, 'ignored', 0), ok=stats.ok, processed=stats.processed, - rescued=stats.rescued, + rescued=getattr(stats, 'rescued', 0), skipped=stats.skipped ) From cc1a97b6d8d3b415e97880013684ff1ccf2b137c Mon Sep 17 00:00:00 2001 From: Jim Ladd Date: Fri, 22 Feb 2019 23:00:27 -0800 Subject: [PATCH 3/4] Update JobHostSummary.__str__ and corresponding tests --- awx/main/models/jobs.py | 6 +++--- awx/main/tests/functional/models/test_job.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/awx/main/models/jobs.py b/awx/main/models/jobs.py index 3e0075d6fb..95b6dd41d5 100644 --- a/awx/main/models/jobs.py +++ b/awx/main/models/jobs.py @@ -1133,9 +1133,9 @@ class JobHostSummary(CreatedModifiedModel): def __str__(self): host = getattr_dne(self, 'host') hostname = host.name if host else 'N/A' - return '%s changed=%d dark=%d failures=%d ok=%d processed=%d skipped=%s' % \ - (hostname, self.changed, self.dark, self.failures, self.ok, - self.processed, self.skipped) + return '%s changed=%d dark=%d failures=%d ignored=%d ok=%d processed=%d rescued=%d skipped=%s' % \ + (hostname, self.changed, self.dark, self.failures, self.ignored, self.ok, + self.processed, self.rescued, self.skipped) def get_absolute_url(self, request=None): return reverse('api:job_host_summary_detail', kwargs={'pk': self.pk}, request=request) diff --git a/awx/main/tests/functional/models/test_job.py b/awx/main/tests/functional/models/test_job.py index 9c2cc8ca67..385daaf915 100644 --- a/awx/main/tests/functional/models/test_job.py +++ b/awx/main/tests/functional/models/test_job.py @@ -68,14 +68,14 @@ def test_job_host_summary_representation(host): job = Job.objects.create(name='foo') jhs = JobHostSummary.objects.create( host=host, job=job, - changed=1, dark=2, failures=3, ok=4, processed=5, skipped=6 + changed=1, dark=2, failures=3, ignored=4, ok=5, processed=6, rescued=7, skipped=8 ) - assert 'single-host changed=1 dark=2 failures=3 ok=4 processed=5 skipped=6' == str(jhs) + assert 'single-host changed=1 dark=2 failures=3 ignored=4 ok=5 processed=6 rescued=7 skipped=8' == str(jhs) # Representation should be robust to deleted related items jhs = JobHostSummary.objects.get(pk=jhs.id) host.delete() - assert 'N/A changed=1 dark=2 failures=3 ok=4 processed=5 skipped=6' == str(jhs) + assert 'N/A changed=1 dark=2 failures=3 ignored=4 ok=5 processed=6 rescued=7 skipped=8' == str(jhs) @pytest.mark.django_db From b7b0bdaecac3ce5b10638c83ab90bcad0ab6b3ca Mon Sep 17 00:00:00 2001 From: Jim Ladd Date: Mon, 25 Feb 2019 00:40:15 -0800 Subject: [PATCH 4/4] Ansible 2.8 deprecates use of -U --- tools/docker-compose/bootstrap_development.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/docker-compose/bootstrap_development.sh b/tools/docker-compose/bootstrap_development.sh index d8e7526444..4ad7572853 100755 --- a/tools/docker-compose/bootstrap_development.sh +++ b/tools/docker-compose/bootstrap_development.sh @@ -17,8 +17,8 @@ ansible -i "127.0.0.1," -c local -v -m wait_for -a "host=${RABBITMQ_HOST} port=5 #/etc/init.d/ssh start -ansible -i "127.0.0.1," -c local -v -m postgresql_user -U postgres -a "name=awx-dev password=AWXsome1 login_user=postgres login_host=postgres" all -ansible -i "127.0.0.1," -c local -v -m postgresql_db -U postgres -a "name=awx-dev owner=awx-dev login_user=postgres login_host=postgres" all +ansible -i "127.0.0.1," -c local -v -m postgresql_user --become-user postgres -a "name=awx-dev password=AWXsome1 login_user=postgres login_host=postgres" all +ansible -i "127.0.0.1," -c local -v -m postgresql_db --become-user postgres -a "name=awx-dev owner=awx-dev login_user=postgres login_host=postgres" all # Move to the source directory so we can bootstrap if [ -f "/awx_devel/manage.py" ]; then