diff options
author | Parker Berberian <pberberian@iol.unh.edu> | 2019-01-23 13:47:56 -0500 |
---|---|---|
committer | Parker Berberian <pberberian@iol.unh.edu> | 2019-01-23 13:47:56 -0500 |
commit | 6fdb4ffd15c51f9cd6d80d5ba0fa2c08ec1d75ed (patch) | |
tree | b8939a7d9237c362cf2d273f4a8b921603efe1a6 /src/api | |
parent | 2c5650cad195f0bd78fb201ebbddc2afef96f752 (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.py | 29 |
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) |