aboutsummaryrefslogtreecommitdiffstats
path: root/src/api
diff options
context:
space:
mode:
authorParker Berberian <pberberian@iol.unh.edu>2019-01-23 13:47:56 -0500
committerParker Berberian <pberberian@iol.unh.edu>2019-01-23 13:47:56 -0500
commit6fdb4ffd15c51f9cd6d80d5ba0fa2c08ec1d75ed (patch)
treeb8939a7d9237c362cf2d273f4a8b921603efe1a6 /src/api
parent2c5650cad195f0bd78fb201ebbddc2afef96f752 (diff)
Fix Reimaging Hosts
When a User wants to reimage a host, the dashboard needs to also refresh the network and ssh configurations. Otherwise a host is reimaged and becomes unreachable. Change-Id: I534f200498c9217bda81190861021c482e052a81 Signed-off-by: Parker Berberian <pberberian@iol.unh.edu>
Diffstat (limited to 'src/api')
-rw-r--r--src/api/models.py29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/api/models.py b/src/api/models.py
index e4016aa..b14ea2f 100644
--- a/src/api/models.py
+++ b/src/api/models.py
@@ -604,7 +604,7 @@ class SnapshotConfig(TaskConfig):
def get_task(task_id):
- for taskclass in [AccessRelation, SoftwareRelation, HostHardwareRelation, HostNetworkRelation]:
+ for taskclass in [AccessRelation, SoftwareRelation, HostHardwareRelation, HostNetworkRelation, SnapshotRelation]:
try:
ret = taskclass.objects.get(task_id=task_id)
return ret
@@ -704,6 +704,33 @@ class SnapshotRelation(TaskRelation):
class JobFactory(object):
@classmethod
+ def reimageHost(cls, new_image, booking, host):
+ """
+ This method will make all necessary changes to make a lab
+ reimage a host.
+ """
+ job = Job.objects.get(booking=booking)
+ # make hardware task new
+ hardware_relation = HostHardwareRelation.objects.get(host=host, job=job)
+ hardware_relation.config.set_image(new_image.lab_id)
+ hardware_relation.config.save()
+ hardware_relation.status = JobStatus.NEW
+
+ # re-apply networking after host is reset
+ net_relation = HostNetworkRelation.objects.get(host=host, job=job)
+ net_relation.status = JobStatus.NEW
+
+ # re-apply ssh access after host is reset
+ ssh_relation = AccessRelation.objects.get(job=job, config__access_type="ssh")
+ ssh_relation.status = JobStatus.NEW
+
+ # save them all at once to reduce the chance
+ # of a lab polling and only seeing partial change
+ hardware_relation.save()
+ net_relation.save()
+ ssh_relation.save()
+
+ @classmethod
def makeSnapshotTask(cls, image, booking, host):
relation = SnapshotRelation()
job = Job.objects.get(booking=booking)