Skip to content

Commit f5f934d

Browse files
committed
fix: define-cloud to mod assignments with future schedules
closes: #546 Change-Id: I033ee39a984451fc247c0afe3c356bd6675ef816
1 parent c3b80c0 commit f5f934d

File tree

2 files changed

+10
-17
lines changed

2 files changed

+10
-17
lines changed

src/quads/cli/cli.py

+2-16
Original file line numberDiff line numberDiff line change
@@ -936,26 +936,12 @@ def action_cloudresource(self):
936936
) as ex: # pragma: no cover
937937
raise CliException(str(ex))
938938
elif assignment:
939-
try:
940-
response = self.quads.update_assignment(assignment.id, data)
941-
self.quads.update_cloud(
942-
cloud.name,
943-
{
944-
"last_redefined": ":".join(
945-
datetime.now().isoformat().split(":")[:-1]
946-
)
947-
},
948-
)
949-
950-
except (APIServerException, APIBadRequest) as ex: # pragma: no cover
951-
raise CliException(str(ex))
952-
if response.status_code == 200:
953-
self.logger.info("Assignment updated.")
939+
raise CliException("Cloud already has an active assignment.")
954940
else:
955941
if self.cli_args.get("cloud") != conf.get("spare_pool_name"):
956942
if not self.cli_args.get("cloudticket"):
957943
self.logger.warning("No ticket provided.")
958-
self.logger.warning("No assignment created or updated.")
944+
self.logger.warning("No assignment created.")
959945

960946
except ConnectionError: # pragma: no cover
961947
raise CliException(

src/quads/server/dao/cloud.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from datetime import datetime
22
from typing import List, Optional, Type
33

4-
from sqlalchemy import Boolean, or_
4+
from sqlalchemy import Boolean, or_, select
55

66
from quads.config import Config
77
from quads.server.dao.baseDao import (
@@ -72,6 +72,12 @@ def get_clouds() -> List[Cloud]:
7272

7373
@staticmethod
7474
def get_free_clouds() -> List[Cloud]:
75+
future_schedule_subquery = (
76+
select(Schedule.id)
77+
.join(Assignment, Schedule.assignment_id == Assignment.id)
78+
.filter(Assignment.cloud_id == Cloud.id, Schedule.start > datetime.now())
79+
.exists()
80+
)
7581
free_clouds = (
7682
db.session.query(Cloud)
7783
.outerjoin(Assignment, Cloud.id == Assignment.cloud_id)
@@ -83,6 +89,7 @@ def get_free_clouds() -> List[Cloud]:
8389
Assignment.id == None,
8490
Schedule.id == None,
8591
),
92+
~future_schedule_subquery,
8693
)
8794
.order_by(Cloud.name.asc())
8895
.distinct()

0 commit comments

Comments
 (0)