diff --git a/awx/main/managers.py b/awx/main/managers.py new file mode 100644 index 0000000000..a96e3b5571 --- /dev/null +++ b/awx/main/managers.py @@ -0,0 +1,27 @@ +# Copyright (c) 2014 Ansible, Inc. +# All Rights Reserved. + +from django.conf import settings +from django.db import models +from django.utils.functional import cached_property + + +class InstanceManager(models.Manager): + """A custom manager class for the Instance model. + + Provides "table-level" methods including getting the currently active + instance or role. + """ + @cached_property + def me(self): + """Return the currently active instance.""" + return self.get(uuid=settings.SYSTEM_UUID) + + @cached_property + def my_role(self): + """Return the role of the currently active instance, as a string + ('primary' or 'secondary'). + """ + if self.me.primary: + return 'primary' + return 'secondary' diff --git a/awx/main/models/ha.py b/awx/main/models/ha.py index a277124cd4..24aa4774af 100644 --- a/awx/main/models/ha.py +++ b/awx/main/models/ha.py @@ -2,13 +2,16 @@ # All Rights Reserved. from django.db import models +from awx.main.managers import InstanceManager class Instance(models.Model): """A model representing an Ansible Tower instance, primary or secondary, running against this database. """ - uuid = models.CharField(max_length=40) + objects = InstanceManager() + + uuid = models.CharField(max_length=40, unique=True) primary = models.BooleanField(default=False) created = models.DateTimeField(auto_now_add=True) modified = models.DateTimeField(auto_now=True)