do not choose offline instances

This commit is contained in:
chris meyers
2018-06-01 15:36:24 -04:00
parent 9d732cdbdf
commit b94cf379f6
5 changed files with 101 additions and 9 deletions

View File

@@ -1,6 +1,8 @@
# Copyright (c) 2015 Ansible, Inc.
# All Rights Reserved.
import six
import random
from decimal import Decimal
from django.core.exceptions import ValidationError
@@ -11,7 +13,6 @@ from django.utils.translation import ugettext_lazy as _
from django.conf import settings
from django.utils.timezone import now, timedelta
import six
from solo.models import SingletonModel
from awx import __version__ as awx_application_version
@@ -193,7 +194,7 @@ class InstanceGroup(BaseModel, RelatedJobsMixin):
def fit_task_to_most_remaining_capacity_instance(self, task):
instance_most_capacity = None
for i in self.instances.order_by('hostname'):
for i in self.instances.filter(capacity__gt=0).order_by('hostname'):
if i.remaining_capacity >= task.task_impact and \
(instance_most_capacity is None or
i.remaining_capacity > instance_most_capacity.remaining_capacity):
@@ -202,7 +203,7 @@ class InstanceGroup(BaseModel, RelatedJobsMixin):
def find_largest_idle_instance(self):
largest_instance = None
for i in self.instances.order_by('hostname'):
for i in self.instances.filter(capacity__gt=0).order_by('hostname'):
if i.jobs_running == 0:
if largest_instance is None:
largest_instance = i
@@ -210,6 +211,12 @@ class InstanceGroup(BaseModel, RelatedJobsMixin):
largest_instance = i
return largest_instance
def choose_online_controller_node(self):
return random.choice(list(self.controller
.instances
.filter(capacity__gt=0)
.values_list('hostname', flat=True)))
class TowerScheduleState(SingletonModel):
schedule_last_run = models.DateTimeField(auto_now_add=True)