model: change playbook.completed to playbook.status
We want a bit more granularity regarding the status of the playbooks, "completed" is not enough. In 0.x, the status was inferred at runtime. We'll set it so we don't need to compute it every time. Change-Id: Ib854ea70827e736fb687a7065986f14d0071291b
This commit is contained in:
parent
3c415a4930
commit
6440416a60
|
@ -1,4 +1,4 @@
|
|||
# Generated by Django 2.1.1 on 2018-10-15 14:51
|
||||
# Generated by Django 2.1.2 on 2018-10-16 00:43
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
@ -91,7 +91,7 @@ class Migration(migrations.Migration):
|
|||
('ended', models.DateTimeField(blank=True, null=True)),
|
||||
('name', models.CharField(max_length=255, null=True)),
|
||||
('ansible_version', models.CharField(max_length=255)),
|
||||
('completed', models.BooleanField(default=False)),
|
||||
('status', models.CharField(choices=[('unknown', 'unknown'), ('running', 'running'), ('completed', 'completed'), ('failed', 'failed')], default='unknown', max_length=25)),
|
||||
('arguments', models.BinaryField(max_length=4294967295)),
|
||||
('file', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='playbooks', to='api.File')),
|
||||
('files', models.ManyToManyField(to='api.File')),
|
||||
|
|
|
@ -109,9 +109,16 @@ class Playbook(Duration):
|
|||
class Meta:
|
||||
db_table = "playbooks"
|
||||
|
||||
# A playbook in ARA can be running (in progress), completed (succeeded) or failed.
|
||||
UNKNOWN = "unknown"
|
||||
RUNNING = "running"
|
||||
COMPLETED = "completed"
|
||||
FAILED = "failed"
|
||||
STATUS = ((UNKNOWN, "unknown"), (RUNNING, "running"), (COMPLETED, "completed"), (FAILED, "failed"))
|
||||
|
||||
name = models.CharField(max_length=255, null=True)
|
||||
ansible_version = models.CharField(max_length=255)
|
||||
completed = models.BooleanField(default=False)
|
||||
status = models.CharField(max_length=25, choices=STATUS, default=UNKNOWN)
|
||||
arguments = models.BinaryField(max_length=(2 ** 32) - 1)
|
||||
file = models.ForeignKey(File, on_delete=models.CASCADE, related_name="playbooks")
|
||||
files = models.ManyToManyField(File)
|
||||
|
|
|
@ -59,7 +59,7 @@ class PlaybookFactory(factory.DjangoModelFactory):
|
|||
model = models.Playbook
|
||||
|
||||
ansible_version = "2.4.0"
|
||||
completed = True
|
||||
status = "running"
|
||||
arguments = utils.compressed_obj(PLAYBOOK_ARGUMENTS)
|
||||
file = factory.SubFactory(FileFactory)
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ class PlaybookTestCase(APITestCase):
|
|||
playbook.refresh_from_db()
|
||||
self.assertEqual(playbook.name, "serializer-playbook")
|
||||
self.assertEqual(playbook.ansible_version, "2.4.0")
|
||||
self.assertEqual(playbook.status, "unknown")
|
||||
|
||||
def test_playbook_serializer_compress_arguments(self):
|
||||
serializer = serializers.PlaybookSerializer(
|
||||
|
@ -82,18 +83,31 @@ class PlaybookTestCase(APITestCase):
|
|||
self.assertEqual(0, models.Playbook.objects.count())
|
||||
request = self.client.post(
|
||||
"/api/v1/playbooks",
|
||||
{"ansible_version": "2.4.0", "file": {"path": "/path/playbook.yml", "content": factories.FILE_CONTENTS}},
|
||||
{
|
||||
"ansible_version": "2.4.0",
|
||||
"status": "running",
|
||||
"file": {"path": "/path/playbook.yml", "content": factories.FILE_CONTENTS},
|
||||
},
|
||||
)
|
||||
self.assertEqual(201, request.status_code)
|
||||
self.assertEqual(1, models.Playbook.objects.count())
|
||||
self.assertEqual(request.data["status"], "running")
|
||||
|
||||
def test_partial_update_playbook(self):
|
||||
playbook = factories.PlaybookFactory()
|
||||
self.assertNotEqual("2.3.0", playbook.ansible_version)
|
||||
request = self.client.patch("/api/v1/playbooks/%s" % playbook.id, {"ansible_version": "2.3.0"})
|
||||
self.assertNotEqual("completed", playbook.status)
|
||||
request = self.client.patch("/api/v1/playbooks/%s" % playbook.id, {"status": "completed"})
|
||||
self.assertEqual(200, request.status_code)
|
||||
playbook_updated = models.Playbook.objects.get(id=playbook.id)
|
||||
self.assertEqual("2.3.0", playbook_updated.ansible_version)
|
||||
self.assertEqual("completed", playbook_updated.status)
|
||||
|
||||
def test_update_wrong_playbook_status(self):
|
||||
playbook = factories.PlaybookFactory()
|
||||
self.assertNotEqual("wrong", playbook.status)
|
||||
request = self.client.patch("/api/v1/playbooks/%s" % playbook.id, {"status": "wrong"})
|
||||
self.assertEqual(400, request.status_code)
|
||||
playbook_updated = models.Playbook.objects.get(id=playbook.id)
|
||||
self.assertNotEqual("wrong", playbook_updated.status)
|
||||
|
||||
def test_get_playbook(self):
|
||||
playbook = factories.PlaybookFactory()
|
||||
|
|
Loading…
Reference in New Issue