You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2018/08/14 19:51:53 UTC

[airavata-django-portal] 11/13: AIRAVATA-2727 Removing compute preferences

This is an automated email from the ASF dual-hosted git repository.

machristie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git

commit 20892765c7257c464492ad0b838ddb5c61cdcbf4
Author: Marcus Christie <ma...@iu.edu>
AuthorDate: Tue Aug 14 12:34:46 2018 -0400

    AIRAVATA-2727 Removing compute preferences
---
 .../ComputePreference.vue                          | 25 +++++++++++++++++++
 .../GroupComputeResourcePreference.vue             | 15 ++++++++++++
 django_airavata/apps/api/serializers.py            | 27 ++++++++++++++++++---
 .../js/models/GroupResourceProfile.js              | 28 ++++++++++++++++++++++
 django_airavata/apps/api/views.py                  | 12 +++++++++-
 5 files changed, 103 insertions(+), 4 deletions(-)

diff --git a/django_airavata/apps/admin/static/django_airavata_admin/src/components/admin/group_resource_preferences/ComputePreference.vue b/django_airavata/apps/admin/static/django_airavata_admin/src/components/admin/group_resource_preferences/ComputePreference.vue
index 5d8edda..917a999 100644
--- a/django_airavata/apps/admin/static/django_airavata_admin/src/components/admin/group_resource_preferences/ComputePreference.vue
+++ b/django_airavata/apps/admin/static/django_airavata_admin/src/components/admin/group_resource_preferences/ComputePreference.vue
@@ -54,6 +54,7 @@
     <div class="row">
         <div class="col d-flex justify-content-end">
             <b-button variant="primary" @click="save">Save</b-button>
+            <b-button class="ml-2" variant="danger" @click="remove">Delete</b-button>
             <b-button class="ml-2" variant="secondary" @click="cancel">Cancel</b-button>
         </div>
     </div>
@@ -197,6 +198,30 @@
             });
         }
       },
+      remove: function() {
+
+        let groupResourceProfile = this.groupResourceProfile.clone();
+        const removedChildren = groupResourceProfile.removeComputeResource(this.host_id);
+        if (removedChildren) {
+          DjangoAiravataAPI.services.ServiceFactory.service("GroupResourceProfiles").update({data: groupResourceProfile, lookup: this.id})
+            .then(groupResourceProfile => {
+              // Navigate back to GroupResourceProfile with success message
+              this.$router.push({
+                name: 'group_resource_preference', params: {
+                  value: groupResourceProfile,
+                  id: this.id
+                }
+              });
+            })
+            .catch(error => {
+              // TODO: handle error
+              console.log("Error occurred", error);
+            });
+        } else {
+          // Since nothing was removed, just handle this like a cancel
+          this.cancel();
+        }
+      },
       cancel: function() {
         if (this.id) {
           this.$router.push({ name: 'group_resource_preference', params: {id: this.id}});
diff --git a/django_airavata/apps/admin/static/django_airavata_admin/src/components/admin/group_resource_preferences/GroupComputeResourcePreference.vue b/django_airavata/apps/admin/static/django_airavata_admin/src/components/admin/group_resource_preferences/GroupComputeResourcePreference.vue
index e62dc28..9fe4cc9 100644
--- a/django_airavata/apps/admin/static/django_airavata_admin/src/components/admin/group_resource_preferences/GroupComputeResourcePreference.vue
+++ b/django_airavata/apps/admin/static/django_airavata_admin/src/components/admin/group_resource_preferences/GroupComputeResourcePreference.vue
@@ -32,6 +32,10 @@
               Edit
               <i class="fa fa-edit" aria-hidden="true"></i>
             </a>
+            <a href="#" class="text-danger" @click.prevent="removeComputePreference(data.item.computeResourceId)">
+              Delete
+              <i class="fa fa-trash" aria-hidden="true"></i>
+            </a>
           </template>
         </b-table> 
       </template>
@@ -178,6 +182,17 @@
             batchQueueResourcePolicies: batchQueueResourcePolicies,
           }
         });
+      },
+      removeComputePreference: function(computeResourceId) {
+
+        let groupResourceProfile = this.data.clone();
+        groupResourceProfile.removeComputeResource(computeResourceId);
+        this.service.update({data: groupResourceProfile, lookup: this.id})
+          .then(groupResourceProfile => this.data = groupResourceProfile)
+          .catch(error => {
+            // TODO: handle error
+            console.log("Error occurred", error);
+          });
       }
     },
   }
diff --git a/django_airavata/apps/api/serializers.py b/django_airavata/apps/api/serializers.py
index ec8cee8..3ccd9d8 100644
--- a/django_airavata/apps/api/serializers.py
+++ b/django_airavata/apps/api/serializers.py
@@ -453,14 +453,35 @@ class GroupResourceProfileSerializer(
 
     def update(self, instance, validated_data):
         result = super().update(instance, validated_data)
+        result._removed_compute_resource_preferences = []
+        result._removed_compute_resource_policies = []
         result._removed_batch_queue_resource_policies = []
+        # Find all compute resource preferences that were removed
+        for compute_resource_preference in instance.computePreferences:
+            existing_compute_resource_preference = next(
+                (pref for pref in result.computePreferences
+                 if pref.computeResourceId ==
+                    compute_resource_preference.computeResourceId),
+                None)
+            if not existing_compute_resource_preference:
+                result._removed_compute_resource_preferences.append(
+                    compute_resource_preference)
+        # Find all compute resource policies that were removed
+        for compute_resource_policy in instance.computeResourcePolicies:
+            existing_compute_resource_policy = next(
+                (pol for pol in result.computeResourcePolicies
+                 if pol.resourcePolicyId ==
+                    compute_resource_policy.resourcePolicyId),
+                None)
+            if not existing_compute_resource_policy:
+                result._removed_compute_resource_policies.append(
+                    compute_resource_policy)
         # Find all batch queue resource policies that were removed
         for batch_queue_resource_policy in instance.batchQueueResourcePolicies:
             existing_batch_queue_resource_policy_for_update = next(
                 (bq for bq in result.batchQueueResourcePolicies
-                 if bq.computeResourceId ==
-                    batch_queue_resource_policy.computeResourceId
-                    and bq.queuename == batch_queue_resource_policy.queuename),
+                 if bq.resourcePolicyId ==
+                    batch_queue_resource_policy.resourcePolicyId),
                 None)
             if not existing_batch_queue_resource_policy_for_update:
                 result._removed_batch_queue_resource_policies.append(
diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/GroupResourceProfile.js b/django_airavata/apps/api/static/django_airavata_api/js/models/GroupResourceProfile.js
index 34d664e..8904504 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/models/GroupResourceProfile.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/GroupResourceProfile.js
@@ -86,4 +86,32 @@ export default class GroupResourceProfile extends BaseModel {
             }
         }
     }
+
+    /**
+     * Remove compute resource preference, compute resource policy and batch queue policies.
+     * @param {string} computeResourceId 
+     * @returns {boolean} true if this GroupResourceProfile was changed
+     */
+    removeComputeResource(computeResourceId) {
+
+        let removedChildren = false;
+        const existingComputeResourcePreferenceIndex = this.computePreferences.findIndex(pref => pref.computeResourceId === computeResourceId);
+        if (existingComputeResourcePreferenceIndex >= 0) {
+            this.computePreferences.splice(existingComputeResourcePreferenceIndex, 1);
+            removedChildren = true;
+        }
+        const existingComputeResourcePolicyIndex = this.computeResourcePolicies.findIndex(pol => pol.computeResourceId === computeResourceId);
+        if (existingComputeResourcePolicyIndex >= 0) {
+            this.computeResourcePolicies.splice(existingComputeResourcePolicyIndex, 1);
+            removedChildren = true;
+        }
+        const existingBatchQueueResourcePolicies = this.batchQueueResourcePolicies.filter(pol => pol.computeResourceId === computeResourceId);
+        for (const existingBatchQueueResourcePolicy of existingBatchQueueResourcePolicies) {
+            const existingBatchQueueResourcePolicyIndex = this.batchQueueResourcePolicies.indexOf(existingBatchQueueResourcePolicy);
+            this.batchQueueResourcePolicies.splice(existingBatchQueueResourcePolicyIndex, 1);
+            removedChildren = true;
+        }
+
+        return removedChildren;
+    }
 }
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index 2ad5ec5..3650c40 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -699,12 +699,22 @@ class GroupResourceProfileViewSet(APIBackedViewSet):
 
     def perform_update(self, serializer):
         grp = serializer.save()
+        for removed_compute_resource_preference \
+                in grp._removed_compute_resource_preferences:
+            self.request.airavata_client.removeGroupComputePrefs(
+                self.authz_token,
+                removed_compute_resource_preference.computeResourceId,
+                removed_compute_resource_preference.groupResourceProfileId)
+        for removed_compute_resource_policy \
+                in grp._removed_compute_resource_policies:
+            self.request.airavata_client.removeGroupComputeResourcePolicy(
+                self.authz_token,
+                removed_compute_resource_policy.resourcePolicyId)
         for removed_batch_queue_resource_policy \
                 in grp._removed_batch_queue_resource_policies:
             self.request.airavata_client.removeGroupBatchQueueResourcePolicy(
                 self.authz_token,
                 removed_batch_queue_resource_policy.resourcePolicyId)
-        log.debug("batch queue res policies: {}".format(grp.batchQueueResourcePolicies))
         self.request.airavata_client.updateGroupResourceProfile(
             self.authz_token, grp)